
    E#iƀ                       S r SrSSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SS	KJ	r	  SS
KJ
r
  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJrJrJrJrJrJrJrJr  SSKJr  SSK J!r!  SSK"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2  SSK3J4r4  SSK5J6r6  SSK7J8r8J9r9  SSK:J;r;  SSK<J=r=  SSK<J>r>   SS K?r? SS KArBSS!KCJDrD  SS"KCJErE  SS#KFJGrG  SS$KHJIrI  SS%KJJKrK  SS&KLJMrM  SS'KNJOrOJPrP  SS(KQJRrS   SS)KTJUrU  SS*KVJWrW  SS+KXJYrY  SS,KZJ[r[J\r\J]r]J^r^J_r_J`r`JaraJbrb  SS-KcJdrd   SS KeJfrf  S./rgSS KhrhSS KiriSS KjrjSS KkrkSS KlrlSS KmrmSS KnrnSS/KoJprp  SS KqrqSS KrrrSS KsrsSS KtrtS ru SS KuruSS KvrvSS KwrwSS KxrxSS0KyJzrz  SS K{r{SS1K|J}r}  SS2K~Jr  SS3KJrJrJrJrJr  SS4KJr  SS KrSS KrSS KrSS5KJr  SS6KJr  SS7KJr  SS KJr  SS8KJrJr  SS9K"Jr   " S: S;\vGR0                  5      r " S< S.\5      rg ! \@ a    S r? GN<f = f! \@ a    S rB GNFf = f! \@ a    S rd Nf = f! \@ a    S rf Nf = f! \@ a     Nf = f)=Base exchange classz4.5.20    )ExchangeError)NetworkError)NotSupported)AuthenticationError)DDoSProtection)RequestTimeout)ExchangeNotAvailable)InvalidAddress)InvalidOrder)ArgumentsRequired)	BadSymbol)NullResponse)RateLimitExceeded)OperationFailed)
BadRequest)BadResponse)InvalidProxySettings)UnsubscribeError)decimal_to_precision)DECIMAL_PLACES	TICK_SIZE
NO_PADDINGTRUNCATEROUNDROUND_UP
ROUND_DOWNSIGNIFICANT_DIGITSnumber_to_string)Precise)ConstructorArgsBalanceAccountCurrency	IndexType	OrderSide	OrderTypeTradeOrderRequestMarket
MarketTypeStrNumStringsCancellationRequestBoolOrder)backends)hashes)paddinged25519)load_pem_private_key)ecdsa)keccakN)abi)accountpackb)"get_private_key_from_eth_signature)compute_address)get_selector_from_name)message_signatureprivate_to_stark_key)	TypedData)Mnemonic)Bip44)SignMode)AuthInfoFeeModeInfoSignDoc
SignerInfoTxTxBodyTxRaw)encode_as_anyExchange)	parsedate)Number)Session)default_user_agent)	HTTPErrorTimeoutTooManyRedirectsRequestExceptionConnectionError)SSLError)Decimal)mktime)format_date_time)AnyList)Intc                   (   ^  \ rS rSrU 4S jrSrU =r$ )SafeJSONEncoder   c                    > [        U[        5      (       a  SUR                  R                  0$  [        TU ]  U5      $ ! [         a    S[        U5      R                   S3s $ f = f)NnamezTypeError: Object of type z is not JSON serializable)
isinstance	Exception	__class____name__superdefault	TypeErrortype)selfobjrg   s     L/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/base/exchange.pyrj   SafeJSONEncoder.default   sf    c9%%CMM2233	^7?3'' 	^/S	0B0B/CC\]]	^s   ? #A%$A% )rh   
__module____qualname____firstlineno__rj   __static_attributes____classcell__)rg   s   @ro   ra   ra      s    ^ ^    ra   c                   HQ   \ rS rSr% SrSrSrSrSrSr	Sr
SrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr 0 r!Sr"SSSSS.SS0 0 S	.S
.r#SS00 0 S.S
.r$Sr%Sr&Sr'Sr(Sr)Sr*Sr+Sr,Sr-Sr.Sr/Sr0Sr1Sr2Sr3Sr4Sr5Sr6Sr7Sr8Sr9Sr:Sr;Sr<Sr=Sr>Sr?Sr@SrASrBSSSS.rCSrDSrESrF\G" S5      rHSrISrJSrKSrLSrMSrNSrOSrPSrQSrRSrSSrTSrUSrVSrWSSS.SSS.SSS.SSS.S.rX0 S\Y_S\Z_S\[_S\\_S\\_S\\_S\\_S\\_S\\_S\\_S \\_S!\\_S"\\_S#\\_S$\\_S%\\_S&\\_\\\\\\\]\]\^\^\^S'.Er_Sr`SraSrbSrcSrdSreSrfSrgSrhSriSrjSrkSrlSrmSrn0 roSrpSrqSrrSrsSrtSSSSSSSSSSS(.
ru0 rv0 rw\xry\zr{S)r|Sr}Sr~\Gr\\S*'   SrSrS+rS+rSrSrS,rS,rS+rSrSrSrSrSrSrSrSrSrSrSrSrS-rS.S/S0S1.rSr0 4S2\4S3 jjrS4 rS5 rS6 rGSfS7 jrGSfS8 jr\S9 5       rGSfS: jrS; rS< rS= rGSgS? jrS@ rSA r\SB 5       r\GSfSC j5       r\GSfSD j5       r\GSfSE j5       r\GSfSF j5       r\GSfSG j5       r\GSfSH j5       r\GSfSI j5       r\GSfSJ j5       r\GSfSK j5       r\GSfSL j5       r\GSfSM j5       r\GSfSN j5       r\GSfSO j5       r\GSfSP j5       r\GSfSQ j5       r\GSfSR j5       r\GSfSS j5       r\GSfST j5       r\GSfSU j5       r\GSfSV j5       r\GSfSW j5       r\GSfSX j5       r\GSfSY j5       r\GSfSZ j5       r\S[ 5       r\GSfS\ j5       r\GShS] j5       r\GShS^ j5       r\GSiS_ j5       r\GSjS` j5       r\Sa 5       r\Sb 5       r\Sc\4Sd j5       r\Se 5       r\Sf 5       r\Sg 5       r\Sh 5       r\Si 5       r\Sj 5       r\GSfSk j5       r\GSfSl j5       r\Sm 5       r\Sn 5       r\So 5       r\Sp 5       r\GSkSq j5       r\GSlSr j5       r\Ss 5       r\St 5       r\Su 5       r\Sv 5       r\Sw 5       r\0 SS4Sx j5       r\0 4Sy j5       r\Sz 5       r\0 S4S{ j5       r\GSmS| j5       r\S} 5       r\S~ 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\GSfS j5       r\GSfS j5       r\GSnS j5       r\GSoS j5       r\GSpS j5       r\GSnS j5       r\GSqS j5       r\GSfS j5       r\GSfS j5       r\GSrS j5       r\\GR                  S4S j5       r\S 5       r\S 5       r\S 5       Gr \S 5       Gr\S 5       Gr\S 5       Gr\S 5       Gr\SS0 4S j5       Gr\GSsS j5       Gr\S 5       Gr\S 5       Gr\S 5       Gr	\S 5       Gr
\S 5       Gr\S 5       Gr\S 5       Gr\S 5       Gr\GStS j5       Gr\GSuS j5       GrSG\S\4S jGr\GSvS j5       Gr\GSwS j5       Gr\GSfS j5       Gr\S 5       Gr\S 5       Gr\S 5       Gr\S 5       Gr\GSxS j5       GrS GrS GrS GrS0 4S jGr0 4S jGr0 4S jGr S Gr!\S 5       Gr"\G\#4S j5       Gr$S Gr%S Gr&S Gr'\S 5       Gr(\S 5       Gr)\S 5       Gr*\S 5       Gr+\S 5       Gr,\S 5       Gr-S Gr.\S 5       Gr/\S 5       Gr0GSfS jGr1S Gr2S Gr3S Gr4\GSlS j5       Gr5S Gr6S Gr7S Gr8S Gr9GSfS jGr:GSfS jGr;S Gr<S Gr=S Gr>S Gr?S Gr@S GrAS GrBS GrC0 4S\4S jjGrD0 4S\4S jjGrES GrFS GrGS GrHS GrIS GrJGSfS jGrKS GrLSG\M4S jGrNGSfSG\OG\P   SG\Q4S jjGrRGSfSG\PSG\PSG\Q4S jjGrSGSfSG\PSG\Q4S jjGrTGSfSG\OG\P   SG\U4S jjGrVGSfSG\PSG\U4S jjGrWGSfSG\PS\SG\U4S jjGrXGSfSG\OG\P   SG\OG\M   4S jjGrYGSfSG\PS\SG\OG\M   4S jjGrZGSfSG\PSG\OG\M   4S jjGr[S Gr\S Gr]GSySG\MSG\PSG\PSG\P4S jjGr^S Gr_SG\OG\M   4S jGr`GSfS jGraGSzGS G\bGSG\b4GS jjGrcGS\4GS jGrdGSzGS G\bGSG\b4GS jjGreGS GrfGS GrgGSfGSG\b4GS	 jjGrhGS
\4GS jGriGS{GSG\OG\j   GSG\kSG\PGSG\Q4GS jjGrlGS|GSG\OG\j   GSG\kGSG\kSG\P4GS jjGrmGS}GSG\OG\j   GSG\PGSG\kGSG\k4GS jjGrnGSG\Q4GS jGroGSG\Q4GS jGrpGSS>0 SS4GSG\MGSG\MGSG\M4GS jjGrq0 4GS jGrrSS0 4GS\GSG\kGSG\k4GS  jjGrsSS0 4GS\GSG\kGSG\k4GS! jjGrtSS0 4GS\GSG\kGSG\k4GS" jjGruSS0 4GS#G\O\   GSG\kGSG\k4GS$ jjGrvSS0 4GS\GSG\kGSG\k4GS% jjGrwSS0 4GS#G\O\   GSG\kGSG\k4GS& jjGrxSS0 4GS\GSG\kGSG\k4GS' jjGryS0 4GSG\b4GS( jjGrz0 4GS\4GS) jjGr{SS0 4GS#G\O\   GSG\kGSG\k4GS* jjGr|0 4GS#G\O\   4GS+ jjGr}SS0 4GS#G\O\   GSG\kGSG\k4GS, jjGr~SS0 4GS#G\O\   GSG\kGSG\k4GS- jjGrSS0 4GS.G\OG\O\      GSG\kGSG\k4GS/ jjGr0 4GS.G\OG\O\      4GS0 jjGrS0 4GS#G\O\   GSG\k4GS1 jjGr0 4GS#G\O\   4GS2 jjGrS0 4GS#G\4GS3 jjGr0 4GS\4GS4 jjGr0 4GS\4GS5 jjGrS0 4GS#G\4GS6 jjGrS0 4GS7G\4GS8 jjGrS0 4GS\GSG\k4GS9 jjGrS0 4GS\GSG\k4GS: jjGr0 4GS\4GS; jjGrS0 4GS#G\4GS< jjGrS0 4GS= jGrS0 4GS\GSG\k4GS> jjGr0 4GS\4GS? jjGr0 4GS@ jGrS0 4GS#G\4GSA jjGrGSBG\U4GSC jGrGSD GrGSEG\U4GSF jGrGSG GrGSfGSHG\UGSEG\4GSI jjGrGSfGSJG\4GSK jjGrGSfGSLG\UGSEG\4GSM jjGrGSfGSNG\UGSJG\4GSO jjGrGSfGSPG\UGSJG\4GSQ jjGrGSRG\U4GSS jGrGSfGSTG\UGSJG\4GSU jjGrGSfGSVG\UGSEG\4GSW jjGr0 4GSX jGr0 4GSY jGrGSfGSEG\4GSZ jjGrS0 4GS#G\4GS[ jjGrGSfGS\G\UGSEG\4GS] jjGrGSfGSEG\4GS^ jjGrGSfGS_G\UGSEG\4GS` jjGrGSfGS_G\UGSEG\4GSa jjGrGSfGSLG\UGSEG\4GSb jjGrGSfGSVG\UGSEG\4GSc jjGrGSfGSLG\UGSEG\4GSd jjGrGSfGSEG\4GSe jjGrS0 4GS#G\4GSf jjGrS0 4GS#G\4GSg jjGr0 4GS\4GSh jjGr0 4GS#G\O\   4GSi jjGr0 4GS#G\O\   4GSj jjGr0 4GSk\GSl\GGSm\GSn\4GSo jjGrS0 4GSk\GSl\GGS\GSpG\b4GSq jjGr0 4GSk\4GSr jjGrS0 4GSsG\GSG\b4GSt jjGr0 4GS\4GSu jjGrS0 4GS#G\4GSv jjGrS0 4GSwG\QGSG\b4GSx jjGr0 4GS\GSl\G4GSy jjGr0 4GS\GSl\G4GSz jjGr0 4GS\GSl\G4GS{ jjGrS0 4GS\GS|G\b4GS} jjGrSSSS0 4GSG\bGS|G\bGSG\kGSG\k4GS~ jjGrSSSS0 4GSG\bGSG\bGS\GS\4GS jjGrS0 4GS\GSG\b4GS jjGr0 4GSk\4GS jjGrGSSS0 4GS\GS|\GSG\kGSG\k4GS jjGr0 4GS\4GS jjGrS0 4GS#G\4GS jjGr0 4GS jGr0 4GS jGrGS GrGS GrGS\G4GS jGrGSfGSG\jSG\PS\4GS jjGrGSfGSG\jSG\PSG\k4GS jjGrGS GrGS GrGS GrGSfGSG\MGSG\bGSG\b4GS jjGrGS~GS\GSG\bGSG\bSG\M4GS jjGrGS~GS\GSG\bGSG\bGSG\bSG\M4
GS jjGrGSG\b4GS jGrGS GrGS GrGSfGSG\jGSJG\4GS jjGrGSJG\j4GS jGrGSfGSEG\U4GS jjGrGSfGS jGrGS GrGSG\MGSG\MGSG\U4GS jGrGSG\U4GS jGrGSfGSVG\UGSEG\4GS jjGrSSS0 4GSG\jGSEG\GSG\kGSG\k4GS jjGrGSS0 4GS\GS\GS\GSl\GGS\GGS\4GS jjGrGS0 4GS\GS\GS\GSl\GGS\G4
GS jjGrGSfGSG\UGSEG\4GS jjGrGSfGSLG\UGSEG\4GS jjGrGSGS jGrGSG\M4GS jGrGSG\M4GS jGrGSG\O\G   GS\G4GS jGrGS GrGS GrGSfGSHG\UGSEG\4GS jjGr0 4GSk\GSl\G4GS jjGr0 4GSk\GSl\G4GS jjGr0 4GS\GSk\GSl\G4GS jjGr0 4GSk\GSl\G4GS jjGr0 4GS\GSk\GSl\G4GS jjGrS0 4GSk\GSl\GGSG\b4GS jjGrS0 4GSk\GSl\GGSG\b4GS jjGrGSSS0 4GS\GS|\GSG\kGSG\k4GS jjGrGSSS0 4GS\GS|\GSG\kGSG\k4GS jjGrGSSS0 4GS\GS|\GSG\kGSG\k4GS jjGrGSGSG\OG\O\G      4GS jjGrGSGSG\OG\O\G      4GS jjGrGSGS jGrGSfGS#G\4GS jjGrGSfGS7G\4GS jjGrGSfGS#G\4GS jjGrGSGS#G\GSG\b4GS jjGrGSfGS7G\4GS jjGrGSySG\PSG\PSG\P4GS jjGrS0 4GS\GSG\k4GS jjGrGSfGSG\b4GS jjGrGSfGSEG\SG\4GS jjGrGSfGS\GSG\b4GS jjGr GSGSG\bGSG\b4GS jjGrGS GrGS\4GS jGrGS GrGS GrGSlGS jGrGSfGSG\jSG\PSG\P4GS jjGrGSGSG\jGS\GSG\kSG\PSG\PSG\P4GS jjGrGSGSG\OG\j   GSEG\MGS|\GSG\kGSG\kGSG\	4GS jjGr
GSGSG\MGS#G\O\   4GS jjGrSS0 4GS#G\4GS jjGrGS\G\U4GS jGrS0 4GSG\OG\M   GS#G\O\   4GS jjGr0 4GSG\OG\M   4GS jjGrSSS0 4GSG\QGSG\OG\M   GSEG\GSG\kGSG\k4
GS jjGrSSS0 4GSG\OG\M   GSEG\GSG\kGSG\k4GS jjGrSSS0 4GSG\OG\M   GSEG\GSG\kGSG\k4GS jjGrSSS0 4GSG\OG\M   GSJG\GSG\kGSG\k4GS jjGrSSS0 4GSG\OG\M   GSJG\GSG\kGSG\k4GS jjGrSSS0 4GSJG\GSG\kGSG\k4GS jjGrGS GrGS GrGSk\4GS jGrGS\4GS jGrGS\4GS  jGrGSfGSG\jGS\SG\b4GS jjGrGSfGSG\jGS\GS\SG\b4GS jjGrGSfGSG\jGS\SG\k4GS jjGrGSfGSG\jGS\GS\SG\k4GS jjGrGSfGSG\jGS\SG\	4GS jjGrGSfGSG\jGS\GS\SG\	4GS	 jjGr GSuGSG\UGS
G\UGS\GSG\bGSG\Q4
GS jjGr!GS Gr"SG\P4GS jGr#GSGSG\bGSG\bGSG\QGSG\Q4GS jjGr$GSSG\P4GS jjGr%GSS>0 SS0 4GSG\MGSG\MGSG\M4GS jjGr&GSS>0 SS0 4GSG\MGSG\MGSG\M4GS jjGr'S0 4GS jGr(GSGSG\OG\)   GS|\GS\GGS\G4GS jjGr*GSGSG\kGSG\k4GS jjGr+S0 4GS\GS\GSl\GGS\4GS jjGr,S0 4GS\GS\GSl\GGS\4GS jjGr-S0 4GS\GS\GSG\.GSl\GGS\4
GS jjGr/SS0 4GS\GS\GSG\0GSG\.GSl\GS\4GS jjGr1SS0 4GS\GS\GSG\0GSG\.GSl\GS\4GS jjGr2SS0 4GS\GS\GSG\0GSG\.GSl\GS\4GS  jjGr30 4GS\4GS! jjGr40 4GS\4GS" jjGr5S0 4GSG\b4GS# jjGr6SSS0 4GS#G\GSG\kGSG\k4GS$ jjGr7SSS0 4GS#G\GSG\kGSG\k4GS% jjGr80 4GS\4GS& jjGr90 4GS\4GS' jjGr:S0 4GS#G\4GS( jjGr;S0 4GS#G\4GS) jjGr<S0 4GS#G\4GS* jjGr=S0 4GS#G\4GS+ jjGr>SSSS0 4GSkG\bGSG\bGSG\kGSG\k4GS, jjGr?SSS0 4GSkG\bGSG\kGSG\k4GS- jjGr@S0 4GS\GSkG\b4GS. jjGrAGSySG\PSG\PSG\P4GS/ jjGrBGSfGS0G\bGSJG\4GS1 jjGrCGSzGS2G\bGSEG\GS3G\bGSG\b4GS4 jjGrDGS\4GS5 jGrEGSxGS6 jGrFGS7 GrG0 4GS8 jGrH0 4GS9 jGrIGS: GrJ0 4GS; jGrK0 4GS< jGrL0 4GS= jGrM0 4GS> jGrN0 4GS? jGrO0 4GS@ jGrP0 4GSk\4GSA jjGrQS0 4GS7G\4GSB jjGrRS0 4GS7G\4GSC jjGrS0 4GSk\4GSD jjGrT0 4GSE jGrU0 4GSk\4GSF jjGrV0 4GS\4GSG jjGrWGSfGSG\jGS\GSH\4GSI jjGrXGSfGSG\jGSJ\GSK\GSL\4GSM jjGrYGSfGS\GSH\4GSN jjGrZS0 S4GS\GSEG\4GSO jjGr[S0 S4GS\4GSP jjGr\0 S4GS\4GSQ jjGr]GSR Gr^GSS Gr_GST Gr`GSUG\GSV\GS \GS\GSWG\UGSX\4GSY jGra0 4GSZ jGrb0 4GS\4GS[ jjGrc0 4GS\4GS\ jjGrd0 4GS\4GS] jjGre0 4GS\4GS^ jjGrfS0 4GS#G\4GS_ jjGrgS0 4GS#G\4GS` jjGrhS0 4GS#G\4GSa jjGriSS0 4GS#G\GSG\k4GSb jjGrjS0 4GS#G\4GSc jjGrkS0 4GS#G\4GSd jjGrlS0 4GS#G\4GSe jjGrmS0 4GS\GSG\b4GSf jjGrnS0 4GS\GSG\b4GSg jjGroS0 4GS\GSG\b4GSh jjGrpS0 4GS\GSG\b4GSi jjGrq0 4GSj jGrrS0 4GS\GSG\0GSG\.GSl\GGS\4
GSk jjGrsS0 4GS\GSl\GSm\GSl\4GSn jjGrtS0 4GS\GSkG\b4GSo jjGruSSS0 4GSkG\bGSG\kGSG\k4GSp jjGrvS0 4GSG\b4GSq jjGrwSSS0 4GS\GSG\0GSG\.GSl\GGS\GSr\GSs\4GSt jjGrxSSS0 4GS\GSG\0GSG\.GSl\GGS\GSr\GSs\4GSu jjGrySSS0 4GS\GSG\0GSG\.GSl\GGS\GSv\GSs\4GSw jjGrzSSS0 4GS\GSG\0GSG\.GSl\GGS\GSv\GSs\4GSx jjGr{0 4GS\GSG\.GSy\G4GSz jjGr|0 4GS\GSy\G4GS{ jjGr}0 4GS\GSy\G4GS| jjGr~0 4GS\GSG\.GSy\G4GS} jjGrSS0 4GS\GSG\0GSG\.GSl\GGS\GS~\4GS jjGrSS0 4GS\GSG\0GSG\.GSl\GGS\GS~\4GS jjGrSS0 4GS\GSG\0GSG\.GSl\GGS\GS\4GS jjGrSS0 4GS\GSG\0GSG\.GSl\GGS\GS\4GS jjGrSS0 4GS\GSG\0GSG\.GSl\GGS\GS\4GS jjGrSS0 4GS\GSG\0GSG\.GSl\GGS\GS\4GS jjGrSSS0 4GS\GSG\0GSG\.GSl\GGS\GS\GS\4GS jjGrSSS0 4GS\GSG\0GSG\.GSl\GGS\GS\GS\4GS jjGrSSS0 4GS\GSG\0GSG\.GSl\GGS\GS\GS\4GS jjGr0 4GSG\OG\   4GS jjGr0 4GSG\OG\   4GS jjGrS0 4GS\GSG\0GSG\.GSl\GGS\4
GS jjGrS0 4GS\GSG\b4GS jjGrS0 4GS\GSG\b4GS jjGrS0 4GS\GSG\b4GS jjGrS0 4GSG\O\   GSG\b4GS jjGrS0 4GSG\O\   GSG\b4GS jjGrS0 4GSG\O\   GSG\b4GS jjGrS0 4GSG\b4GS jjGr0 4GSG\k4GS jjGr0 4GSG\OG\   4GS jjGrS0 4GSG\b4GS jjGr0 4GSVG\4GS jjGrSSS0 4GSG\bGSG\kGSG\k4GS jjGrSSS0 4GSG\bGSG\kGSG\k4GS jjGrSSS0 4GS\GSG\bGSG\kGSG\k4GS jjGrSSS0 4GSG\bGSG\kGSG\k4GS jjGrSSS0 4GSG\bGSG\kGSG\k4GS jjGrSSS0 4GSG\bGSG\kGSG\k4GS jjGrSSS0 4GSG\bGSG\kGSG\k4GS jjGrSSS0 4GSG\bGSG\kGSG\k4GS jjGrSSS0 4GSG\bGSG\kGSG\k4GS jjGrSSS0 4GSG\bGSG\kGSG\k4GS jjGrSSS0 4GSG\bGSG\kGSG\k4GS jjGrSS0 4GS\GSG\kGSG\k4GS jjGrSSS0 4GSG\bGSG\kGSG\k4GS jjGrSSS0 4GSG\bGSG\kGSG\k4GS jjGr0 4GS\4GS jjGrS0 4GS#G\4GS jjGr0 4GSk\4GS jjGr0 4GS\4GS jjGrS0 4GSl\GSm\GSl\4GS jjGrSSS0 4GSkG\bGSG\kGSG\k4GS jjGrSSS0 4GSkG\bGSG\kGSG\k4GS jjGrSSS0 4GSkG\bGSG\kGSG\k4GS jjGrSSS0 4GSkG\bGSG\kGSG\k4GS jjGrSSS0 4GSkG\bGSG\kGSG\k4GS jjGrSSS0 4GSG\bGSG\kGSG\k4GS jjGrSSS0 4GSG\bGSG\kGSG\k4GS jjGrS0 4GS\GSG\.4GS jjGr0 4GS jGrS0 4GS\GSG\k4GS jjGrGSfGSEG\4GS jjGr0 4GSk\4GS jjGrSG\4GS jGrGSk\4GS jGrGSk\4GS jGrGS\4GS jGrGS\4GS jGrGSGSG\	GSG\U4GS jjGrGS Gr0 4GS\GSG\.GSl\GGS\G4GS jjGr0 4GS\GSG\.GSl\GGS\G4GS jjGrS0 4GS\GSG\.GSl\GGS\4GS jjGrS0 4GS\GSG\.GSl\GGS\4GS jjGr0 4GS\GSl\GGS\G4GS jjGr0 4GS\GSl\GGS\G4GS jjGr0 4GS\GSl\GGS\G4GS jjGr0 4GS\GSl\GGS\G4GS jjGr0 4GS\GSl\G4GS jjGr0 4GS\GSl\G4GS jjGr0 4GS\GSl\G4GS jjGr0 4GS\GSl\G4GS jjGrGS\4GS jGrGS\4GS jGrGS\4GS jGrGS\4GS jGrGSfGSk\4GS jjGrGS GrGS GrGS GrGS GrGSfSG\PGS\4GS jjGrGSfGSG\jGSG\OG\P   GS\4GS jjGrGS\4GS jGrGSG\b4GS jGr0 4GS jGrGS \4GS jGr0 4GS\4GS jjGrS0 4GS\GSG\0GSG\.GSl\GGS\4
GS jjGrS0 4GS\GSG\0GSG\.GSl\GGS\4
GS jjGrS0 4GS\GSG\0GSG\.GSl\GGS\4
GS jjGrS0 4GS\GSG\0GSG\.GSl\GGS\4
GS jjGrSS0 4GS\GSG\0GSG\.GSl\GGS\GS~\4GS jjGrSS0 4GS\GSG\0GSG\.GSl\GGS\GS~\4GS jjGr0 4GS\GSG\.GSl\GGS\GGS~\G4
GS jjGr0 4GS\GSG\.GSl\GGS\GGS~\G4
GS jjGr0 4GS\GSG\.GSl\GGS~\G4GS jjGr0 4GS\GSG\.GSl\GGS~\G4GS jjGrGSfGS0G\bGSJG\4GS jjGrGSGSG\bGSG\kGSG\k4GS jjGrGSGSG\kGSG\k4GS jjGrGSGS#G\O\   GSG\kGSG\k4GS jjGrS0 4GS#G\O\   4GS jjGrS0 4GS#G\4GS jjGrSS0 4GS7G\4GS jjGrGSfGSEG\4GS jjGrGSfGSJG\4GS jjGrGSkG\bGSG\kGSG\k4GS jGrGS_G\M4GS jGrGS~GSG\kGSG\k4GS jjGrGS~GS2G\bGSEG\GS3G\bGSG\b4GS jjGrGSfGS\GSEG\4GS jjGrGSfGS#G\4GS jjGrGSfGS_G\UGSEG\4GS jjGrGS~GSG\kGSG\k4GS jjGrGSxGS jGrGSuGSG\bGS G\	4GS jjGrGS GrGS Gr0 4GSG\Q4GS jjGr0 4GSG\QGSG\QGSG\M4GS jjGrS0 4GS#G\4GS jjGr0 4GS	 jGr0 4GS
 jGr 0 4GS\4GS jjGr0 4GS jGrGSfGSEG\4GS jjGrGSfGS#G\4GS jjGrGS~GSG\kGSG\k4GS jjGr0 4GS\4GS jjGr0 4GS\4GS jjGrGSSS0 4GS\GS|\GSG\kGSG\k4GS jjGrGSSS0 4GS\GS|\GSG\kGSG\k4GS jjGr	GSSS0 4GS\GS|\GSG\kGSG\k4GS jjGr
0 4GS jGrGS Gr/ 4GS\4GS jjGrGS\GSG\bGS\4GS jGrGSGS7G\4GS jjGrGSfGSJG\4GS jjGrGS GrGSfGS jGrGSfGSEG\4GS jjGrGS~GSG\kGSG\k4GS jjGrGSfGS#G\4GS jjGrGSGSG\OG\j   GSEG\MGS|\GSG\kGSG\k4
GS  jjGrSSS0 4GSkG\bGSG\kGSG\k4GS! jjGrGSSG\P4GS" jjGrGSSG\P4GS# jjGrGS\GS|\4GS$ jGrS0 4GS\GS%G\k4GS& jjGrSSS0 SS4GS\GSG\bGSG\kGSG\kGS%G\k4
GS' jjGrSSSS0 4GS\GSG\bGSG\kGSG\kGS|G\b4
GS( jjGrSSSS0 S4GS\GSG\bGSG\kGSG\kGS|G\b4
GS) jjGrSSS0 SSSS4GS\GSG\b4GS* jjGrSSS0 SS4GS\GSG\b4GS+ jjGr GS, Gr!GSxGS-G\Q4GS. jjGr"GS/ Gr#GS0G\UGS1G\O\   4GS2 jGr$GSS\4GS3 jjGr%GSfGS4G\UGSEG\4GS5 jjGr&GSfGSEG\4GS6 jjGr'GS~GS7G\OG\U   GSEG\GSG\kGSG\k4GS8 jjGr(GSfGS9G\UGSEG\4GS: jjGr)S0 4GS#G\4GS; jjGr*GSGS<G\UGSJG\GSEG\4GS= jjGr+GSGSG\OG\j   GS>G\bGS?G\b4GS@ jjGr,GS~GSG\OG\j   GS#G\O\   GS?G\bGSG\-4GSA jjGr.GSfGSG\UGSEG\4GSB jjGr/GS~GSG\OG\j   GS#G\O\   GS?G\bGSG\-4GSC jjGr0GSfGSsG\UGSEG\4GSD jjGr1SSSSS0 4GSEG\OG\M   GSkG\bGSFG\bGSGG\bGSG\kGSG\k4GSH jjGr2GSGSIG\UGSJG\GSKG\4GSL jjGr3GSM\4GSN jGr4GSM\4GSO jGr5GSM\4GSP jGr6SS0 4GS\GSG\kGSG\k4GSQ jjGr7SSS0 4GS#G\GSG\kGSG\k4GSR jjGr8GSfSG\UGSEG\4GSS jjGr9GS~GSG\OG\j   GS#G\GS?G\bGSG\-4GST jjGr:S0 4GS\GSkG\b4GSU jjGr;SSS0 4GSkG\bGSG\kGSG\k4GSV jjGr<GS0 4GS\GS|\4GSW jjGr=0 4GS\4GSX jjGr>S0 4GS#G\4GSY jjGr?S0 4GSk\GSl\GGS\GSpG\b4GSZ jjGr@S0 4GSG\b4GS[ jjGrA0 4GSG\OG\   4GS\ jjGrBSSS0 4GS]\GSG\bGSG\kGSG\k4GS^ jjGrCS0 4GS#G\4GS_ jjGrDGSlGS`\GSa\4GSb jjGrEGScG\U4GSd jGrFGSeGrGg(  rO      r   NFT  '  	tierBased
percentagetakermakerr}   r~   withdrawdeposittradingfundingr~   )r   r   zrMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36zlMozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36zyMozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36)chromechrome39	chrome100*inf minmaxleverageamountpricecost422418429404409410451500501502520521522525526400403405503530408504401407511
apiKeysecretuid	accountIdloginpasswordtwofa
privateKeywalletAddresstoken   numberr      :123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyzBTCBCHBSV)XBTBCCBCHSVconfigc                 
  ^ ^	 T R                   =(       d    T R                  T l         T R                  =(       d    T R                  T l        T R                  c
  [	        5       OT R                  T l        T R
                  c
  [	        5       OT R
                  T l        T R                  c
  [	        5       OT R                  T l        T R                  c
  [	        5       OT R                  T l        T R                  c
  [	        5       OT R                  T l        T R                  c
  [	        5       OT R                  T l	        T R                  c
  [	        5       OT R                  T l
        T R                  c
  [	        5       OT R                  T l        T R                  c
  [	        5       OT R                  T l        T R                  c
  [	        5       OT R                  T l        T R                  c
  [	        5       OT R                  T l        T R                  c
  [	        5       OT R                  T l        T R                   c
  [	        5       OT R                   T l        T R"                  c
  [	        5       OT R"                  T l        T R$                  c
  [	        5       OT R$                  T l        T R&                  c  T R)                  5       OT R&                  T l        [*        T l        [,        T l        T R/                  5       T l        [3        5       T l        T R7                  T R9                  5       U5      nU Hm  n[;        T U5      (       aJ  [=        [?        T U5      [        5      (       a+  [A        T UT R7                  [?        T U5      X#   5      5        M^  [A        T X2U   5        Mo     T RC                  5         T RE                  US5      (       d  T RE                  US5      (       a  T RG                  S5        [I        T 5      n[K        T 5       H  nUS   S:w  d  M  US   S:w  d  M  SU;   d  M!  URM                  S5      nSSS	S
.m	US   SRO                  U	U 4S jUSS   5       5      -   n[?        T U5      n[=        U[P        RR                  5      (       a  [A        XG[?        XE5      5        M  [;        T U5      (       a  Ub  [A        T Xx5        M  M  [A        T Xx5        M     T RT                  (       d;  T RV                  (       a*  [Y        5       T l*        T R                  T RT                  l        T RZ                  (       a  T RZ                  T l-        g [\        R^                  " [`        5      T l-        g )NsandboxtestnetTr   _OHLCVLEBE)ohlcvleber   c              3   f   >#    U  H&  nTR                  UTR                  U5      5      v   M(     g 7fN)get
capitalize).0i
exceptionsrm   s     ro   	<genexpr>$Exchange.__init__.<locals>.<genexpr>  s,     .h^gYZz~~aQRAS/T/T^gs   .1r   )1aiohttp_trust_env	trust_envrequests_trust_env	precisiondictlimitsr   headersbalance
orderbooksfundingRatestickersbidsaskstradestransactionsohlcvsliquidationsmyLiquidations
currenciesoptionsget_default_optionsr   r    uuidoriginrS   	userAgentdeep_extenddescribehasattrre   getattrsetattrafter_construct	safe_boolset_sandbox_moderl   dirsplitjointypes
MethodTypesessionsynchronousrR   loggerlogging	getLoggerrh   )
rm   r   settingskeyclsrd   parts	camelcaseattrr   s
   `        @ro   __init__Exchange.__init__  s   !%!7!7!I4>>"&"9"9"KT^^#'>>#9t~~ $ 3df$(OO$;$&!%!5tv4<<!%!5tv4<<$(OO$;$&&*&7&7&?DFTEVEV!%!5tv4<<"&--"7T]] $ 3df&*&7&7&?DFTEVEV $ 3df&*&7&7&?DFTEVEV(,(;(;(CdfI\I\$(OO$;$&59\\5It//1t||$8! 0 iik+-##DMMOV<CtS!!js1CT&J&Jc4#3#3GD#4F#VWcC=1	  	>>&),,vy0Q0Q!!$' 4jIDAw#~$r(c/cTk

3'.d$G
!!Hrww.h^cdedf^g.h'hh	tT*dE$4$455CGC,>?tY//+#D): ,  i6   || 0 0"9DL%)%<%<DLL"%)[[dkkg6G6G6Qrw   c                     U R                   (       a   U R                   R                  5         g g ! [         a
  n S nAg S nAff = fr   )r   closerf   )rm   es     ro   __del__Exchange.__del__  s8    <<""$   s   / 
AAc                 R    SU R                   (       a  SOS-   U R                  -   S-   $ )Nzccxt.zasync_support.r   z())asyncio_loopidrm   s    ro   __repr__Exchange.__repr__  s'    d.?.?*RH477RUYYYrw   c                     U R                   $ r   )rd   r  s    ro   __str__Exchange.__str__  s    yyrw   c                     g r   rq   )rm   r   s     ro   init_throttlerExchange.init_throttler  s    rw   c                     [        U R                  5       5      nX R                  -
  nUc  SOUnU R                  U-  nX4:  a  XC-
  n[        R
                  " US-  5        g g )Nr   g     @@)floatmillisecondslastRestRequestTimestamp	rateLimittimesleep)rm   r   nowelapsed
sleep_timedelays         ro   throttleExchange.throttle  s_    D%%'(555Lqd^^d*
(EJJuv~&  rw   c                    U R                  5       R                  S5      nUS;   ag  US:X  a&  [        R                  " U[        R                  * 5      $ [
        R                  " SSS[        R                  " U5      5      R                  5       $ U$ )NzContent-Encoding)gzipzx-gzipdeflater*  r   rb	   )
infor   zlib
decompress	MAX_WBITSr)  GzipFileioBytesIOread)responsetextencodings      ro   gzip_deflateExchange.gzip_deflate  sm    ==?&&'9:449$tdnn_==}}Rq"**T2BCHHJJrw   c                    U=(       d    0 nU R                   (       a%  UR                  U R                   R                  5        UR                  U R                  5        U R                  b  U R                  OU R                  nU(       aO  [        U5      [        L a  UR                  SU05        O)[        U5      [        L a  SU;   a  UR                  U5        UR                  SS05        U R                  U5      $ )Nz
User-AgentzAccept-Encodingzgzip, deflate)	r   updater   r   
user_agentrl   strr   set_headers)rm   r   r   s      ro   prepare_request_headers Exchange.prepare_request_headers  s    -R<<NN4<<//0t||$&*nn&@DNNdoo	I#%i89y/T)	0Iy))?;<((rw   c                     [        U6   g r   )print)rm   argss     ro   logExchange.log	  s	    trw   c	                 "    UR                  5       $ r   strip)	rm   codereasonurlmethodresponse_headersresponse_bodyrequest_headersrequest_bodys	            ro   on_rest_responseExchange.on_rest_response  s    ""$$rw   c                     U R                   (       a%  [        c  [        R                  " U[        [        S9$ [        (       a  [        R                  " U5      $ [        R                  " U5      $ )N)parse_float	parse_int)quoteJsonNumbersorjsonjsonloadsr=  )rm   rN  s     ro   on_json_responseExchange.on_json_response  sE      V^::mLLv||M22::m,,rw   GETc                 >  ^ U R                  U5      nU R                  XX45      nUb0  UR                  SU R                  05        X`R	                  U5      -   nSnU R                  XX45      u  pn
U(       a  0 nXS'   OU	(       a  0 nXS'   OU
(       a
  0 nXS'   XS'   USLnU R                  X5        U R                  b2  U(       d  U(       a  [        U R                  S-   5      eU R                  nU R                  (       a!  U R                  SU R                  X!SUSU5        U R                  R                  S	X!XT5        UnU(       a  UR                  5       nU R                  R                   R#                  5         SnSnSnSn U R                  R%                  UUUUU R&                  S
-  UU R(                  =(       a    U R*                  S9nSUl        UR.                  nUR0                  nUR2                  nU R5                  XXUUR6                  X\5      nU R9                  U5      nU R:                  (       a  Xl        U R>                  (       a  UU l         U RB                  (       a  X0l"        U R                  (       a"  U R                  SU R                  X!USUSU5	        U R                  R                  SX!XU5        U(       a+  [G        U[H        5      (       d  U RJ                  (       a  UUS'   URM                  5         U R[                  XXX=UX\5	        Ub  U$ U Rm                  U5      (       a  U$ [G        URn                  [p        5      (       a  URn                  Rs                  S5      $ URn                  $ ! [N         a.  nSRQ                  U R                  X!/5      n[S        U5      UeSnAf[T         a.  nSRQ                  U R                  X!/5      n[        U5      UeSnAf[V         a.  nSRQ                  U R                  X!/5      n[        U5      UeSnAf[X         a]  nSRQ                  U R                  X!/5      nU R[                  XXX=UX\5	      nU(       d  U R]                  XXU5        [        U5      UeSnAf[^         aK  n[a        U5      mSRQ                  U R                  X!/5      nST;   a  [S        U5      Ue[c        U5      UeSnAf[d         a9  n[a        U5      mSRQ                  U R                  X!/5      n[c        U5      UeSnAf[f         a}  n[a        U5      mST;   a  [i        U R                  S-   5      eSRQ                  U R                  X!/5      n[k        U4S jS 5       5      (       a  [c        U5      Ue[        U5      UeSnAff = f)z3Perform a HTTP request and return decoded JSON dataNOriginhttphttpszb you have conflicting proxy settings - use either .proxies or http(s)Proxy / socksProxy / proxyUrlz
fetch Request:zRequestHeaders:zRequestBody:z%s %s, Request: %s %s  )datar   timeoutproxiesverifyutf-8z
fetch Response:zResponseHeaders:zResponseBody:z%s %s, Response: %s %s %sresponseHeaders zRead timed outz&Missing dependencies for SOCKS supportzo - to use SOCKS proxy with ccxt, you might need "pysocks" module that can be installed by "pip install pysocks"c              3   ,   >#    U  H	  oT;   v   M     g 7fr   rq   )r   xerror_strings     ro   r   !Exchange.fetch.<locals>.<genexpr>  s     j.i$.is   )
ECONNRESETzConnection aborted.zConnection broken:utf8):r?  check_proxy_url_settingsr;  r   url_encoder_for_proxy_urlcheck_proxy_settingscheck_conflicting_proxiesrd  r   r  verboserD  r   debugencoder   cookiesclearrequestrc  re  validateServerSslr7  r   status_coderJ  rQ  r6  
parse_jsonenableLastHttpResponselast_http_responseenableLastJsonResponselast_json_responseenableLastResponseHeaderslast_response_headersre   listreturnResponseHeadersraise_for_statusrU   r   r	   rV   rY   rT   handle_errorshandle_http_status_coderequestsConnectionErrorr=  r   ConnectionResetErrorrW   r   anyis_text_responsecontentbytesdecode)rm   rK  rL  r   bodyrO  proxyUrlrd  	httpProxy
httpsProxy
socksProxyproxyAgentSetrP  http_responsehttp_status_codehttp_status_textjson_responser5  r  detailsskip_further_error_handlingrk  s                        @ro   fetchExchange.fetch  sR    66w?00gL""Hdkk#:;;;C@@C,0,E,EcSZ,a)	zG'FOG)GG(FO)Gt+&&}?LL$#DGG  /S  %S  T  TllG<<HH'&?PRacqswx16V ;;=D""$G	4||++',{{=t'='= , H !(H&&G'33' 112BVYcjltlyly  |K  ZM OOM:M***7'***7'---4*||,dggvDTVhjq  tC  ER  SKK96HXcpqZt%D%DIcIc3:/0%%'X 	+sGdq  tC  	R$  ""7++  (**E22''..v66###e  	1hh56G )q0 	0hh56G(a/ 	0hh56G(a/ 	0hh56G*.*<*<=Madnu  GT  Ve  +t'.,,-=QT^kl(a/& 	3q6Lhh56G</$W-14"7+2# 	/q6Lhh56Gw'Q. 	4q6L8LH"477  ._  $_  `  `hh56Gj.ijjj"7+2#G,!3	4sd   E=M: :
V)N--V:)O##V0)PV&AQ>>VASV4TVA8VVc                 |     [         R                  U5      (       a  U R                  U5      $ g ! [         a     g f = fr   )rO   is_json_encoded_objectrZ  
ValueError)rm   r  s     ro   r{  Exchange.parse_json  s@    	..}==,,];; > 		s   *. 
;;c                 x    UR                  SS5      nUR                  S5      =(       d    UR                  S5      $ )NzContent-Typer   zapplication/jsonztext/)r   
startswith)rm   r   content_types      ro   r  Exchange.is_text_response  s5    {{>26&&'9:^l>U>UV]>^^rw   c                 L     X   nUS L=(       a    US:g  $ ! [          a     gf = f)Nr   F)rf   )
dictionaryr  values      ro   
key_existsExchange.key_exists  s4    	OE$4"4 		s    
##c                     Un [         R                  X5      (       a  [        X   5      nU$ ! [         a  nUn S nAU$ S nAff = fr   )rO   r  r  r  )r  r  default_valuer  r  s        ro   
safe_floatExchange.safe_float  sL    	""":33jo.   	"!E	"s   '- 
A?Ac                 T    [         R                  X5      (       a  [        X   5      $ U$ r   )rO   r  r=  r  r  r  s      ro   safe_stringExchange.safe_string  s%    '/':'::'K'Ks:?#^Q^^rw   c                     [         R                  X5      (       a  [        X   5      R                  5       $ Ub  UR                  5       $ U$ r   )rO   r  r=  lowerr  s      ro   safe_string_lowerExchange.safe_string_lower  B    z//z'--//,9,E=&&(X=Xrw   c                     [         R                  X5      (       a  [        X   5      R                  5       $ Ub  UR                  5       $ U$ r   )rO   r  r=  upperr  s      ro   safe_string_upperExchange.safe_string_upper  r  rw   c                     [         R                  X5      (       d  U$ X   n [        [        U5      5      $ ! [         a    Us $ [
         a    Us $ f = fr   )rO   r  intr  r  rk   )r  r  r  r  s       ro   safe_integerExchange.safe_integer  sY    "":33  	! uU|$$ 	!   	!  	!s   6 AAAc                    [         R                  X5      (       d  U$ X   n[        U[        5      (       a  [	        XB-  5      $ [        U[
        5      (       a   [	        [        U5      U-  5      $ U$ ! [         a     U$ f = fr   )rO   r  re   rQ   r  r=  r  r  )r  r  factorr  r  s        ro   safe_integer_productExchange.safe_integer_product  s    "":33  eV$$u~&&s##5<&011   s   A2 2
B ?B c                 0    [         R                  XSU5      $ Nra  rO   r  r  s      ro   safe_timestampExchange.safe_timestamp  s    ,,ZdMRRrw   c                 B    [         R                  X5      (       a  X   $ U$ r   )rO   r  r  s      ro   
safe_valueExchange.safe_value  s    "*"5"5j"F"FzYMYrw   c                 L    [         R                  [         R                  XX#5      $ r   )rO   safe_eitherr  r  key1key2r  s       ro   safe_float_2Exchange.safe_float_2      ##H$7$74__rw   c                 L    [         R                  [         R                  XX#5      $ r   )rO   r  r  r  s       ro   safe_string_2Exchange.safe_string_2  s    ##H$8$8*D``rw   c                 L    [         R                  [         R                  XX#5      $ r   )rO   r  r  r  s       ro   safe_string_lower_2Exchange.safe_string_lower_2      ##H$>$>
RVffrw   c                 L    [         R                  [         R                  XX#5      $ r   )rO   r  r  r  s       ro   safe_string_upper_2Exchange.safe_string_upper_2  r  rw   c                 L    [         R                  [         R                  XX#5      $ r   )rO   r  r  r  s       ro   safe_integer_2Exchange.safe_integer_2  s    ##H$9$9:Taarw   c                 d    [         R                  XU5      nUb  U$ [         R                  XX45      $ r   r  )r  r  r  r  r  r  s         ro   safe_integer_product_2Exchange.safe_integer_product_2  s2    --jG)uux/L/LZ_e/uurw   c                 2    [         R                  XUSU5      $ r  )rO   r  r  s       ro   safe_timestamp_2Exchange.safe_timestamp_2
  s    ..zt][[rw   c                 L    [         R                  [         R                  XX#5      $ r   )rO   r  r  r  s       ro   safe_value_2Exchange.safe_value_2  r  rw   c                     [         R                  X5      nUc  U$  [        U5      nU$ ! [         a  nUn S nAU$ S nAff = fr   )rO   get_object_value_from_key_listr  r  )r  key_listr  r  r  s        ro   safe_float_nExchange.safe_float_n  sN    77
M=  	"%LE   	"!E	"s   ) 
A ;A c                 L    [         R                  X5      nUb  [        U5      $ U$ r   )rO   r  r=  r  r  r  r  s       ro   safe_string_nExchange.safe_string_n  s&    77
M".s5zAMArw   c                     [         R                  X5      nUb  [        U5      R                  5       $ Uc  U$ UR                  5       $ r   )rO   r  r=  r  r  s       ro   safe_string_lower_nExchange.safe_string_lower_n$  F    77
Mu:##%%"   &&((rw   c                     [         R                  X5      nUb  [        U5      R                  5       $ Uc  U$ UR                  5       $ r   )rO   r  r=  r  r  s       ro   safe_string_upper_nExchange.safe_string_upper_n.  r  rw   c                     [         R                  X5      nUc  U$  [        [        U5      5      $ ! [         a    Us $ [
         a    Us $ f = fr   )rO   r  r  r  r  rk   r  s       ro   safe_integer_nExchange.safe_integer_n8  sV    77
M=  	! uU|$$ 	!   	!  	!s   0 AAAc                    U c  U$ [         R                  X5      nUc  U$ [        U[        5      (       a  [	        XB-  5      $ [        U[
        5      (       a   [	        [        U5      U-  5      $ U$ ! [         a     U$ f = fr   )rO   r  re   rQ   r  r=  r  r  )r  r  r  r  r  s        ro   safe_integer_product_nExchange.safe_integer_product_nF  s      77
M=  eV$$u~&&s##5<&011   s   A1 1
A?>A?c                 0    [         R                  XSU5      $ r  )rO   r  )r  r  r  s      ro   safe_timestamp_nExchange.safe_timestamp_nV  s    ..zT=YYrw   c                 D    U c  U$ [         R                  X5      nUb  U$ U$ r   )rO   r  r  s       ro   safe_value_nExchange.safe_value_nZ  s.      77
M)u<}<rw   c                 ,   [        U [        5      n[        U [        5      nU Hn  nU(       a  X@;   a  X   b  X   S:w  a  X   s  $ M$  M&  M(  U(       d  M1  [        U[        5      (       a  MH  U[	        U 5      :  d  MY  X   c  M`  X   S:w  d  Mj  X   s  $    g Nr   )re   r  r   r=  len)dictionary_or_listr  isDataArray
isDataDictr  s        ro   r  'Exchange.get_object_value_from_key_lista  s     !3T: 2D9
C,1C1H1TYkYptvYv-22 Zw1T,ZS%9%9#0118J8O8[btby}b-22  rw   c                 .    U " X5      nUb  U$ U " XU5      $ )z/A helper-wrapper for the safe_value_2() family.rq   )rL  r  r  r  r  r  s         ro   r  Exchange.safe_eithern  s%     z()uVvj/VVrw   c                     US:  a2  [         R                  " SU5      n[         R                  " X-  5      U-  $ [        [        R                  X5      5      $ )z,Deprecated, use decimal_to_precision insteadr   
   )mathpowtruncr  rO   truncate_to_string)numr   decimal_precisions      ro   truncateExchange.truncatet  sJ     q= $Y 7::c569JJJ8..s>??rw   c                     US:  ab  SU-  R                  [        U 5      5      R                  S5      nUS   SU R                  S5      n[	        U5      (       a  UOSnUS   S-   U-   $ SU -  $ )z3Deprecated, todo: remove references from subclassesr   z{0:.%df}.r   N0%d)formatrZ   r   rstripr  )r  r   r  decimal_digitss       ro   r  Exchange.truncate_to_string|  sx     q=)+33GCLAGGLE"1Xjy188=N/2>/B/B^N8c>N22s
rw   c                 H    [        [        R                  " U S-  5      S5      $ N   rj  r  randomgetrandbitslengths    ro   uuid22Exchange.uuid22      f((!4c::rw   c                 H    [        [        R                  " U S-  5      S5      $ r   r"  r%  s    ro   uuid16Exchange.uuid16  r)  rw   c                  >    [        [        R                  " 5       5      $ r   )r=  r   uuid4rq   rw   ro   r   Exchange.uuid  s    4::<  rw   c                  ^    [        [        R                  " 5       5      R                  SS5      $ )N-r   )r=  r   uuid1replacerq   rw   ro   uuidv1Exchange.uuidv1  s     4::< ((b11rw   	namespacec                 j    [        [        R                  " [        R                  " U 5      U5      5      $ r   )r=  r   uuid5UUID)r6  rd   s     ro   r8  Exchange.uuid5  s!    4::dii	2D9::rw   c                 x    [        U 5      S:  a  U S   R                  5       < U SS  < 3$ U R                  5       $ Nr   r   )r  r  strings    ro   r   Exchange.capitalize  s7    
 v;?#AY__.qr
;;||~rw   c                 "    U R                  5       $ r   rG  r=  s    ro   rH  Exchange.strip  s    ||~rw   c                 \    [         R                  " [        U R                  5       S S95      $ )Nc                     U S   $ Nr   rq   )ts    ro   <lambda>"Exchange.keysort.<locals>.<lambda>  s    PQRSPTrw   )r  )collectionsOrderedDictsorteditems)r  s    ro   keysortExchange.keysort  s#    &&vj.>.>.@n'UVVrw   c                     [        U 5      $ r   rJ  arrays    ro   sortExchange.sort  s    e}rw   c                      U bU  S n[        U S   5      [        R                  L a  [        R                  " 5       nO0 nU  H  nUR                  U5        M     U$ 0 $ rD  )rl   rH  rI  r;  rC  resultargs      ro   extendExchange.extend  sV    FDG} 7 77$002c" M	rw   c                      S nU  H_  n[        U[        5      (       aE  [        U[        5      (       d  0 nU H&  n[        R                  X1;   a  X   OS X#   5      X'   M(     M]  UnMa     U$ r   )re   r   rO   r   )rC  rV  rW  r  s       ro   r   Exchange.deep_extend  si    C#t$$!&$//FC"*"6"6cmv{Y]_b_g"hFK    rw   c                 d   ^^ [         R                  U 5      n [        [        UU4S jU 5      5      $ )Nc                    > U T   T:H  $ r   rq   )rj  r  r  s    ro   rF  $Exchange.filter_by.<locals>.<lambda>  s    QsVu_rw   )rO   to_arrayr  filterrQ  r  r  s    ``ro   	filter_byExchange.filter_by  s&    !!%(F4e<==rw   c                 .    [         R                  XU5      $ r   )rO   rb  ra  s      ro   filterByExchange.filterBy  s    !!%e44rw   c                     0 n[         R                  U 5      n U  Vs/ s H  o1U;   d  M
  X1   c  M  UPM     n nU  H(  nX1   U;  a  / X#U   '   X#U      R                  U5        M*     U$ s  snf r   )rO   r_  append)rQ  r  rV  entrys       ro   group_byExchange.group_by  sw    !!%($)YE5UlEYEz'%'Sz":%%e,   Zs   	A(A(A(c                 ,    [         R                  X5      $ r   )rO   rj  rQ  r  s     ro   groupByExchange.groupBy        ,,rw   c                 ,    [         R                  X5      $ r   )rO   index_byrm  s     ro   index_by_safeExchange.index_by_safe  rp  rw   c                     0 n[        U 5      [        L a#  [        R                  U 5      R	                  5       n [        U[        5      nU  H/  nU(       a  U[        U5      :  d  X;   d  M   XA   c  M'  XA   nXBU'   M1     U$ r   )rl   r   rO   rL  valuesre   r  r  )rQ  r  rV  
is_int_keyelementks         ro   rr  Exchange.index_by  sr    ;$$$U+224ES)
Gs7|!3#.PWP\PhL#q	  rw   c                 &   ^^ [        U UU4S jUS9$ )Nc                    > U T   b  U T   $ T$ r   rq   )ry  rj   r  s    ro   rF  "Exchange.sort_by.<locals>.<lambda>  s    QsV5G1S6+TW+Trw   r  reverserO  )rQ  r  
descendingrj   s    ` `ro   sort_byExchange.sort_by  s    e!T^hiirw   c                 &   ^^ [        U UU4S jUS9$ )Nc                 :   > U T   b  U T   OSU T   b  U T   4$ S4$ r  rq   )ry  r  r  s    ro   rF  $Exchange.sort_by_2.<locals>.<lambda>  s3    qw7JAdGPR_`ae_f_rTUVZT[+{xz+{rw   r~  rO  )rQ  r  r  r  s    `` ro   	sort_by_2Exchange.sort_by_2  s    e!{  FP  Q  	Qrw   c                 
    X-   $ r   rq   )abs     ro   array_concatExchange.array_concat  s	    urw   c                 
    X;   $ r   rq   )needlehaystacks     ro   in_arrayExchange.in_array  s    !!rw   c                     U (       + $ r   rq   )objects    ro   is_emptyExchange.is_empty  s
    zrw   c                 0    [         R                  " SU 5      $ )Nz
{([\w-]+)})refindallr=  s    ro   extract_paramsExchange.extract_params  s    zz-00rw   c                     [        U[        5      (       aE  U H?  n[        X   [        5      (       a  M  U R                  SU-   S-   [	        X   5      5      n MA     U $ )N{})re   r   r  r3  r=  )r>  paramsr  s      ro   implode_paramsExchange.implode_params
  sN    fd##!&+t44#^^C#IOS=MNF  rw   c                     U R                  5       nU R                  5        H)  u  pE[        U[        5      (       d  M  U(       a  SOSX4'   M+     [        R
                  " X1[        R                  S9$ )Ntruefalse	quote_via)copyrK  re   bool
_urlencode	urlencodequote)r  doseqrR  	newParamsr  r  s         ro   r  Exchange.urlencode  sR    KKM	 ,,.JC%&&+0g	 ) ##I
@P@PQQrw   c                 Z    [         R                  " SS[        R                  U S5      5      $ )Nz	%5B\d*%5Dr   T)r  subrO   r  )r  s    ro   urlencode_with_array_repeat$Exchange.urlencode_with_array_repeat  s"    vvlB(:(:64(HIIrw   c                    ^^ 0 mSUU4S jjm[        U [        5      (       a  U  H  nT" X   U5        M     [        R                  " T[        R                  S9$ )Nc                 4  > 0 n[        U [        5      (       a!  U  H  nSR                  X5      nX   X$'   M     OJ[        U [        [        45      (       a*  [        U 5       H  u  pVSR                  X5      nXbU'   M     OU TU'   U H  nX#   nT" Xc5        M     g )Nz{}[{}])re   r   r  r  tuple	enumerate)	r  p_keyencode_paramsr  
encode_keyoffsetr  _encode_paramsrV  s	          ro   r  1Exchange.urlencode_nested.<locals>._encode_params"  s    M&$''!C!)!<J06M- " FT5M22%.v%6MF!)!?J05*- &7 !'u$%*u* %rw   r  r   )re   r   r  r  r  )r  r  r  rV  s     @@ro   urlencode_nestedExchange.urlencode_nested  sP    	+ 	+ fd##v{C0 ##Fj6F6FGGrw   c                 T    [         R                  " [        R                  U 5      5      $ r   )r  unquoterO   r  )r  rR  s     ro   	rawencodeExchange.rawencode6  s    !!("4"4V"<==rw   c                 *    [         R                  " XS9$ )N)safe)r  r  )urir  s     ro   encode_uri_componentExchange.encode_uri_component:  s    //rw   c                     [        U [        5      (       aJ  U R                  5       nU H2  n[        U5      [        L a  U H  nXB;   d  M
  X$	 M     M)  X2;   d  M0  X#	 M4     U$ U $ r   )re   r   r  rl   r  )drC  rV  rW  r  s        ro   omitExchange.omit>  s\    aVVXF9$"= &  # }"K  Mrw   c                 *    [        [        U 5      5      $ r   )r  setrP  s    ro   uniqueExchange.uniqueM  s    CJrw   c                 R    U  Vs/ s H  nX;   d  M
  X!   c  M  X!   PM     sn$ s  snf r   rq   )rQ  r  rx  s      ro   pluckExchange.pluckQ  s<     !
  %,\ GL 
 	
 
s   	$$$c            
      ~    [        U  Vs/ s H"  n[        U[        [        45      (       d  M   UPM$     sn5      $ s  snf r   )sumre   r  r  )rC  rW  s     ro   r  Exchange.sumY  s,    4I4C:cE3<+HC4IJJIs   ::c                 .    [         R                  " U 5      $ r   )rH  rI  rP  s    ro   orderedExchange.ordered]  s    &&u--rw   c                     [         R                  0 5      nU  H  tp#nUS:  d  M  X!;   a  X   OSU-   X'   M     / n[        UR                  5       5      nU H  u  p#UR	                  X#/5        M     U$ rD  )rO   r  r  rK  rh  )bidasksr  r   volumer   rV  rK  s          ro   	aggregateExchange.aggregatea  ss    ""2&#*UQz494D'.!v!U $+ W]]_%"MEMM5/* #rw   c                  *    [         R                  5       $ r   )rO   secondsrq   rw   ro   secExchange.secm  s    !!rw   c                  *    [         R                  5       $ r   )rO   r  rq   rw   ro   msecExchange.msecq      $$&&rw   c                  *    [         R                  5       $ r   )rO   microsecondsrq   rw   ro   usecExchange.usecu  r  rw   c                  >    [        [        R                  " 5       5      $ r   r  r   rq   rw   ro   r  Exchange.secondsy  s    499;rw   c                  D    [        [        R                  " 5       S-  5      $ r  r  rq   rw   ro   r  Exchange.milliseconds}  s    499;%&&rw   c                  D    [        [        R                  " 5       S-  5      $ )N@B r  rq   rw   ro   r  Exchange.microseconds  s    499;())rw   c                 p   U c  U $ [        U [        5      (       d  g [        U 5      S:  a  g  [        R                  R                  U S-  [        R                  R
                  5      nUR                  S5      S S SR                  [        U 5      S-  5      -   S-   $ ! [        [        [        4 a     g f = f)Nr   ra  z%Y-%m-%dT%H:%M:%S.%fz{:03d}Z)re   r  datetimefromtimestamptimezoneutcstrftimer  rk   OverflowErrorOSError)	timestampr  s     ro   iso8601Exchange.iso8601  s    )S))y>A	##11)t2CXEVEVEZEZ[C<< 67<xsS\~`dOd?eehkkk='2 		s   A/B B54B5c                     Uc  [         R                   R                  5       nOUn[        UR                  5       5      n[	        U5      $ r   )r  r"  r[   	timetupler\   )rm   r  tsstamps       ro   rfc2616Exchange.rfc2616  s<    ""&&(BBr||~&&&rw   c                     [         R                   R                  [        [        U S-  5      5      [         R                  R
                  5      nUR                  SU-   S-   U-   S-   5      $ )Nra  %mr  %Yr  r  r  roundr  r  r  r  infixutc_datetimes      ro   dmyExchange.dmy  sZ    ((66s5TAQ;R7SU]UfUfUjUjk$$TE\D%85%@4%GHHrw   c                     U(       a  SOSn[         R                   R                  [        [        U S-  5      5      [         R                  R
                  5      nUR                  X1-   S-   U-   S-   5      $ )Nr  z%yra  r  r  r  )r  r
  fullYearyear_formatr  s        ro   ymdExchange.ymd  sb    &dD((66s5TAQ;R7SU]UfUfUjUjk$$[%84%?%%G$%NOOrw   c                 .    [         R                  XS5      $ NFrO   r  r  r
  s     ro   yymmddExchange.yymmdd  s    ||Ie44rw   c                 .    [         R                  XS5      $ NTr  r  s     ro   yyyymmddExchange.yyyymmdd  s    ||Id33rw   c                     [         R                   R                  [        [        U S-  5      5      [         R                  R
                  5      nUR                  SU-   S-   5      $ )Nra  z%Y-%m-%dz%H:%M:%Sr  r	  s      ro   ymdhmsExchange.ymdhms  sQ    ((66s5TAQ;R7SU]UfUfUjUjk$$Z%%7*%DEErw   c                    U c  U $ [        U [        5      (       d  g SU ;   a   SR                  [        U 5      S S  Vs/ s H  n[        U5      R	                  S5      PM     sn5      S-   n[
        R
                  R                  US5      n[        R                  " UR                  5       5      S-  $ [        R                  U 5      $ s  snf ! [        [        [        4 a     g f = f)NGMTr         z.000Z%Y%m%d%H%M%S.%fZra  )re   r=  r   rP   zfillr  strptimecalendartimegmutctimetuplerk   r  r  rO   	parse8601)r  r  r>  dts       ro   
parse_dateExchange.parse_date  s    )S))I9YCWXZYZC[!\C[%#e*"2"21"5C[!\]`gg&&//8JKr'89D@@ %%i00 "] }g6 s#   C $C"AC C C%$C%c           
         U c  U $ SnSnSnSnSnSnSnSnSU-   U-   U-   U-   U-   U-   U-   U-   n	 [         R                  " X[         R                  5      n
U
c  g U
R                  5       u
  pp4pVp{pU=(       d    S	nUS
-   SS n[	        USS  5      nU=(       d    Sn[	        US-   5      S-  n[	        U=(       d    S5      U-  n[	        U=(       d    S5      U-  n[
        R                  " XS9nX-   U-   U-   U-   U-   U-   S-   n[
        R
                  R                  US5      nUU-   n[        R                  " UR                  5       5      S-  U-   $ ! [        [        [        [        4 a     g f = f)Nz([0-9]{4})-?z([0-9]{2})-?z([0-9]{2})(?:T|[\s])?z([0-9]{2}):?z
([0-9]{2})z(\.[0-9]{1,3})?z%(?:(\+|\-)([0-9]{2})\:?([0-9]{2})|Z)?r   z.00000r   r!  r   1r   )hoursminutesr  r$  ra  )r  search
IGNORECASEgroupsr  r  	timedeltar&  r'  r(  r)  rk   r  r  r  )r  yyyymmddhmsmstzregexmatchsignr1  r2  msintr  r>  r+  s                     ro   r*  Exchange.parse8601  s   %7d
R"$q(1,q025:	IIe>E}>Clln;DbQ2UvBt)Qq!B12KE:2Dtcz?R'D
Od*E',Q'$.G''eEFY^a'!+a/"4s:F""++F4FGBfB??2??#45<uDD=':> 		s   (E C9E E10E1hexc                 
   US:X  a   [        [        R                  " U 5      5      nO&[        R                  " X5      nUR                  5       nUS:X  a  [        R                  U5      $ US:X  a  [        R                  U5      $ U$ )Nr8   base64rD  )	r  r8   SHA3hashlibnewdigestrO   binary_to_base64binary_to_base16)rx  	algorithmrJ  binaryr:  s        ro   hashExchange.hash  sl     6;;w/0FI/AXXZFX,,V44u_,,V44rw   c                     [         R                  " XU5      nUR                  5       nUS:X  a  [        R	                  U5      $ US:X  a  [        R                  U5      $ U$ )NrD  rF  )hmacrI  rJ  rO   rL  rK  )rx  r   rM  rJ  r:  rN  s         ro   rR  Exchange.hmac  sS    HHVi0U?,,V44x,,V44rw   c                  4    [        5       nU  H  nX-   nM	     U$ r   r  rU  s      ro   binary_concatExchange.binary_concat  s    C\F rw   c                 4    [        5       nU  H  nX-   nM	     U$ r   rU  )rQ  rV  rx  s      ro   binary_concat_arrayExchange.binary_concat_array  s     G%F rw   c                 t    [         R                  [        R                  " U 5      5      R	                  SS5      $ )N=r   )rO   r  rF  urlsafe_b64encoder3  r<  s    ro   urlencode_base64Exchange.urlencode_base64  s)    v77:;CCCLLrw   c                 T    [         R                  [        R                  " U 5      5      $ r   )rO   r  rF  standard_b64encoder^  s    ro   rK  Exchange.binary_to_base64  s    v88;<<rw   c                 .    [         R                  " U 5      $ r   )rF  standard_b64decoder^  s    ro   base64_to_binaryExchange.base64_to_binary  s    ((++rw   c                 R    [         R                  [         R                  U 5      5      $ r   )rO   rK  ru  r^  s    ro   string_to_base64Exchange.string_to_base64  s    (();<<rw   c                 T    [         R                  [        R                  " U 5      5      $ r   )rO   r  rF  	b64decoder^  s    ro   base64_to_stringExchange.base64_to_string  s    v//233rw   sha256c                 R   [         R                  [         R                  [         R                  S.nU(       a  SOSUSS  -   nSU;   a  US   b  US   nUSS.nSU;   a  US   b  US   US'   S	U;   a  US	   b  US	   US	'   [        R                  [        R                  U5      5      n[        R                  U5      n	[        R                  [        R                  [        R                  U 5      5      5      n
U	S
-   U
-   nUSS nU(       d  US:X  a>  [        R                  [        R                  U[        R                  U5      U5      5      nOUS:X  aV  [        R                  XSU5      n[        R                  US   R                  SS5      US   R                  SS5      -   5      nObUS:X  a/  [        R                  UR                  S5      USS5      nUS
-   U-   $ [        R                  [        R                  U5      XU   S5      nUS
-   [        R                  U5      -   $ )Nro  sha384sha512RSHS   algJWT)rw  typkidnoncer  r   r#  ESp256r@   r  r<  Edrf  r5   TrN  )rH  ro  rr  rs  rO   ru  rX  r_  rf  rsar  r7   base16_to_binaryrjusteddsarR  )rx  r   rM  is_rsaoptsalgosrw  header_optsheaderencoded_headerencoded_datar   algoType	signaturerawSignatures                  ro   jwtExchange.jwt  s    nnnnnn

 t49QR=8D=T%[4u+C
 D=T%[4!%eKd?tG}8#'=K {!;<!226:00wAW1XY$|3q8X% 11(,,uhooV\F]_h2ijI#>>%KL 11,s2C2I2I"c2RUabeUfUlUlmoqtUu2uvI u||G'<fiQUVI3;** hooe&<fIFVX`aIs{X66yAAArw   c                    [         R                  " 5       [         R                  " 5       [         R                  " 5       S.nX2   n[	        [
        R                  U5      S [        R                  " 5       5      n[
        R                  UR                  [
        R                  U 5      [        R                  " 5       U5      5      $ )Nrq  )r3   SHA256SHA384SHA512r6   rO   ru  r2   default_backendrK  rA  r4   PKCS1v15)rx  r   rw  
algorithmsrM  priv_keys         ro   r  Exchange.rsaC  s     mmommommo


 O	'(?xG_G_Gab((xw7OQXQaQaQcen)opprw   c                 .    [         R                  " X5      $ r   )r9   ru  )r   rC  s     ro   eth_abi_encodeExchange.eth_abi_encodeN  s    zz%&&rw   c                     [         R                  R                  XU5      n[        R	                  SUR
                  UR                  5      $ )Ns   )r:   messagesencode_typed_datarO   rV  r  r  )domainmessageTypesmessageencodedDatas       ro   eth_encode_structured_data#Exchange.eth_encode_structured_dataR  s;    &&88wW%%k;3E3E{GWGWXXrw   c                     [        U 5      n[        U5      n[        US5      [        S5      SUS/n[	        [        US5      UUS9nUU[        U5      S.$ )Nr   
initializer#  r   )
class_hashconstructor_calldatasalt)r   	publicKeyaddress)r=   rA   r  r?   r>   rD  )r  accountClassHashaccountProxyClassHashr   r  calldatar  s          ro   retrieve_stark_accountExchange.retrieve_stark_accountW  so    7	B
(4	 "%"<0
 "0"5!)
 %"7|
 	
rw   c           
      &   [        UR                  5       5      n[        U5      S:  a  [        S5      eU US   [        R                  SSSS.SSS.S	SS./0U5      US
.n[        R                  " U5      nUR                  [        US5      5      nU$ )Nr   z5starknetEncodeStructuredData only support single typer   StarkNetDomainrd   felt)rd   rl   chainIdversion)r  primaryTyper   r  r   )
r  keysr  r   rO   rX  TypedDataDataclass	from_dictmessage_hashr  )r  r  messageDatar  r   rx  typedDataClassmsgHashs           ro   starknet_encode_structured_data(Exchange.starknet_encode_structured_datan  s    \&&()u:>VWW  8__ #V4&7&7#&  #
 ,55g> --c'2.>?rw   c                 n    [        X5      u  p#[        R                  [        U5      [        U5      /5      $ r   )r@   rO   rX  rD  )msg_hashprir~  r<  s       ro   starknet_signExchange.starknet_sign  s,     !/}}c!fc!f-..rw   c                     [        U 5      $ r   r;   )os    ro   r<   Exchange.packb  s    Qxrw   c                     SU -  $ )Nz%0.2Xrq   )r  s    ro   int_to_base16Exchange.int_to_base16  s    }rw   c                 H    [        [        R                  " U S-  5      S5      $ )N   rj  r"  r%  s    ro   random_bytesExchange.random_bytes  r)  rw   c           	         [         R                  S/[         R                  S/[         R                  S/[         R                  S/[         R
                  S/[         R                  S/S.nX%;  a  [        US-   5      eUS:X  a  [        b   [        R                  XX45      $ XR   n[        [        US   5      n[        R                  U 5      nUb  [        R                  XS5      n	O[         R"                  " US	S
9n	[%        U[&        5      (       a  [        R                  U5      nUR)                  S5      S:  a   [         R*                  R-                  X5      n
O4[         R*                  R/                  [         R"                  " US	S
9US   S9n
U
R1                  X[         R2                  R4                  S9u  pn[         R2                  R7                  X4U
R8                  R:                  5      u  pSnSS-  S-
  nU
R8                  R:                  S-  nU(       a  UU:  d  UU::  d  UU::  a  U
R1                  X[         R2                  R4                  [        R=                  US5      S9u  pn[         R2                  R7                  X4U
R8                  R:                  5      u  pUS-  nU(       a  UU:  a  M  UU::  a  M  UU::  a  M  [        R?                  [         R@                  " U5      5      RC                  5       [        R?                  [         R@                  " U5      5      RC                  5       nnUUUS.$ ! [         a     GNf = f)a  
ECDSA signing with support for multiple algorithms and coincurve for SECP256K1.
Args:
    request: The message to sign
    secret: The private key (hex string or PEM format)
    algorithm: The elliptic curve algorithm ('p192', 'p224', 'p256', 'p384', 'p521', 'secp256k1')
    hash: The hash function to use (defaults to algorithm-specific hash)
    fixed_length: Whether to ensure fixed-length signatures (for deterministic signing)
    Note: coincurve produces non-deterministic signatures
Returns:
    dict: {'r': r_value, 's': s_value, 'v': v_value}
Note:
    If coincurve is not available or fails for SECP256K1, the method automatically
    falls back to the standard ecdsa implementation.
ro  rr  rs  )p192p224r}  p384p521	secp256k1z is not a supported algorithmr  r   rN  Tcasefold   -----BEGIN EC PRIVATE KEY-----r   r   curve)hashfunc	sigencode   r#      )r  r  extra_entropyr~  r<  v)"r7   NIST192pNIST224pNIST256pNIST384pNIST521p	SECP256k1r   	coincurverO   _ecdsa_secp256k1_coincurverf   r   rH  ru  rO  rF  	b16decodere   r=  find
SigningKeyfrom_pemfrom_stringsign_digest_deterministicutilsigencode_strings_canonizesigdecode_stringsprivkeyordernumber_to_ler  	b16encoder  )rx  r   rM  rO  fixed_lengthr  
curve_infohash_functionencoded_requestrJ  r  r_binarys_binaryr  r_ints_intcounterminimum_size
half_orderr~  r<  s                        ro   r7   Exchange.ecdsa  s   & ^^X.^^X.^^X.^^X.^^X.//84

 &#I0O$OPP#	(=::7D__
  *
A7"//'2]]?(CF%%oEFfc""__V,F;;89B>""++FBC""..v/?/?EI0KR\]^R_ / aC # = =fHM

HmHm !> !oAzz33X4H#++J[J[\f*[[&&*

 2e|6KuXdOd$'$A$A&LQJJLqLqPXPePefmoqPr %B %t!H !::778LckkN_N_`LEqLG 
 2e|6KuXdOd v//9:@@BHOOTZTdTdemTnDoDuDuDw1
 	
?  s   L< <
M
	M
c                 0   [         R                  U 5      nUb  [         R                  XBS5      nO[        R                  " USS9n[        U[        5      (       a  [         R                  U5      nUR                  S5      S:  aV  [        R                  " UR                  SS5      R                  SS5      R                  S	S5      R                  S
S5      SS9nO[        R                  " USS9n[        R                  " U5      nUR                  USS9nUSS nUSS n	US   n
[         R                  [        R                  " U5      5      R                  5       n[         R                  [        R                  " U	5      5      R                  5       nUUU
S.$ )av  
Use coincurve library for SECP256K1 ECDSA signing.
This method provides faster SECP256K1 signing using the coincurve library,
which is a Python binding to libsecp256k1. This implementation produces
deterministic signatures (RFC 6979) using coincurve's sign_recoverable method.
Args:
    request: The message to sign
    secret: The private key (hex string or PEM format)
    hash: The hash function to use
    fixed_length: Not used in coincurve implementation (signatures are always fixed length)
Returns:
    dict: {'r': r_value, 's': s_value, 'v': v_value}
Raises:
    ArgumentsRequired: If coincurve library is not available
NrN  Tr  r  r   rw   s   -----END EC PRIVATE KEY-----   
   )hasherr  r  r  )rO   ru  rO  rF  r  re   r=  r  r3  r  
PrivateKeysign_recoverabler  r  r  )rx  r   rO  r  r  rJ  private_keyr  r  r  r  r~  r<  s                ro   r  #Exchange._ecdsa_secp256k1_coincurve  s   " #//'2]]?(CF%%oEFfc""__V,F;;89B>%%fnn5VX[&\&d&d  fE  GJ  'K  'S  'S  TY  [^  '_  'g  'g  hm  or  's  ~B  CF %%ft<F**62  000E	Sb>R#bMOOF,,X67==?OOF,,X67==?
 	
rw   rb  returnc                 n    [         R                  " U 5      R                  S5      nUR                  S5      $ )Nrf  r\  )rF  r]  r  r  )rb  encodeds     ro   binary_to_urlencoded_base64$Exchange.binary_to_urlencoded_base64  s,    **4077@~~c""rw   c                 N   [        U[        5      (       a  [        R                  U5      n[	        U5      S:X  a  [
        R                  R                  U5      O[        US 5      nUR                  U 5      nU(       a  [        R                  U5      $ [        R                  U5      $ )Nr  )re   r=  rO   ru  r  r5   Ed25519PrivateKeyfrom_private_bytesr6   rA  r  rK  )rx  r   r  
url_encoder	  r  s         ro   r  Exchange.eddsa  s    fc""__V,FNQRXk]_N_g//BB6Jey  {A  CG  fH$$W-	77	BB((33rw   c                     Sn[         R                  " U SS9n [         R                  " USS9n[        R                  " X1U 5      n[        R                  U5      $ )Ns@                                                                   Tr  )rF  r  r  calculateSignaturerO   binary_to_base58)rx  r   r  r#  r  s        ro   axolotlExchange.axolotl  sN    ""7T:!!&48,,VWE	((33rw   c                     [         (       a%  [         R                  " U 5      R                  S5      $ [        R                  " U S[        S9$ )Nrf  ),:)
separatorsr  )rW  dumpsr  rX  ra   )rb  r  s     ro   rX  Exchange.json#  s4    6<<%,,W55zz$:?KKrw   c                     [        U [        5      =(       a,    [        U 5      S:  =(       a    U S   S:H  =(       d    U S   S:H  $ )Nr#  r   r  [)re   r=  r  )inputs    ro   r  Exchange.is_json_encoded_object)  s>    5#& 9Uq9(c/7uQx3	:rw   c                 $    U R                  S5      $ Nrf  )ru  r=  s    ro   ru  Exchange.encode/      }}W%%rw   c                 $    U R                  S5      $ r%  )r  r=  s    ro   r  Exchange.decode3  r'  rw   c                 \    [        U 5      [        L a  [        U R                  5       5      $ U $ r   )rl   r   r  rv  r  s    ro   r_  Exchange.to_array7  s#    '+E{d':tELLN#EErw   c                 |   SnU R                  S5      u  p4n[        R                  S5      u  pgn[        U5      n	[        U5      n
[        U5      n[        U5      n[        U5      n[        U5      nX:  a  SnX:X  a  X:  a  SnOX:X  a  X:  a  SnU(       d$  U(       a  [        S[        -   S-   U -   S-   5      eU$ U$ )NTr  Fz Your current version of CCXT is z, a newer version z2 is required, please, upgrade your version of CCXT)r   __version__r  r   )required_versionerrorrV  major1minor1patch1major2minor2patch2
int_major1
int_minor1
int_patch1
int_major2
int_minor2
int_patch2s                  ro   check_required_versionExchange.check_required_version;  s    #3#9#9##> #.#4#4S#9 [
[
[
[
[
[
"F#&)j.E"#E#SVj#jm}#}  Au  $u  v  vrw   c                     SU;   d  SU;   a&  [         R                  " SSU5      n[        U5      S-  $ [         R                  " SSU5      R                  S5      n[	        U5      S:  a  [	        US   5      $ S	$ )
Nr  Ez\d\.?\d*[eE]r   r   z0+$r  r   r   )r  r  r  r   r  )rm   r=  numStrr  s       ro   precision_from_stringExchange.precision_from_stringT  sl    #:VVOR5Fv;##
 vr3'--c2 #E
Qs58}5A5rw   c                     U$ r   rq   rm   r  s     ro   map_to_safe_mapExchange.map_to_safe_map`      rw   c                     U$ r   rq   rE  s     ro   safe_map_to_mapExchange.safe_map_to_mapc  rH  rw   c                    U(       dI  U R                   (       a8  U R                  (       d  U R                  U R                   5      $ U R                   $ SnU R                  S   SL a  U R	                  5       nX0R
                  S'   U R                  U5      nSU R
                  ;   a  U R
                  S	 U R                  XC5      $ )a  
Loads and prepares the markets for trading.

Args:
    reload (bool): If True, the markets will be reloaded from the exchange.
    params (dict): Additional exchange-specific parameters for the request.

Returns:
    dict: A dictionary of markets.

Raises:
    Exception: If the markets cannot be loaded or prepared.

Notes:
    It ensures that the markets are only loaded once, even if called multiple times.
    If the markets are already loaded and `reload` is False or not provided, it returns the existing markets.
    If a reload is in progress, it waits for completion before returning.
    If an error occurs during loading or preparation, an exception is raised.
NfetchCurrenciesTcachedCurrencies)marketsmarkets_by_idset_marketshasfetch_currenciesr   fetch_markets)rm   reloadr  r   rO  s        ro   load_marketsExchange.load_marketsf  s    ( ||))++DLL99||#
88%&$...0J/9LL+,$$V,-/044rw   c                 8    U R                  U R                  5      $ r   )r_  rO  rm   r  s     ro   rT  Exchange.fetch_markets  s    
 }}T\\**rw   c                     U R                   $ r   )r   rY  s     ro   rS  Exchange.fetch_currencies  s    
 rw   c                     0 n0 nU R                   S   (       a  U R                  5       nU R                   S   (       a  U R                  5       nUUS.$ )NfetchTradingFeesfetchFundingFeesr   )rR  fetch_trading_feesfetch_funding_fees)rm   r   r   s      ro   
fetch_feesExchange.fetch_fees  sR    88&'--/G88&'--/G
 	
rw   c                    [        U SS 5      nU S   nSU:X  a  SnX-  $ SU:X  a  SnX-  $ SU:X  a  SnX-  $ S	U:X  a  S
nX-  $ SU:X  a  SnX-  $ SU:X  a  SnX-  $ SU:X  a  SnX-  $ [        SR                  U5      5      e)Nr   r   yi3Mi ' wi:	 r  iQ r:  i  r;  <   r<  r   z"timeframe unit {} is not supported)r  r   r  )	timeframer   unitscales       ro   parse_timeframeExchange.parse_timeframe  s    Yq_%}$;&E ~ D[%E ~ D[$E ~ D[ E ~ D[E ~ D[E
 ~	 D[E ~ CJJ4PQQrw   c                 d    [         R                  U 5      S-  nX-  nX-
  U[        :X  a  U-   $ S-   $ )Nra  r   )rO   rl  r   )ri  r  	directionr=  r  s        ro   round_timeframeExchange.round_timeframe  s;    %%i047!9+@RHHaHHrw   c                 &    Ub  Ub
  US:  a  X!-  $ S $ rD  rq   )rm   
baseVolumequoteVolumes      ro   vwapExchange.vwap  s.    .9.EJLbisvwiw(  	C  C  	Crw   c                 f    U R                   (       a   [        c  [        U R                  S-   5      eg g )Nz Eddsa functionality requires python-axolotl-curve25519, install with `pip install python-axolotl-curve25519==0.4.1.post2`: https://github.com/tgalal/python-axolotl-curve25519)requiresEddsar  r   r  r  s    ro   check_required_dependencies$Exchange.check_required_dependencies  s8    %-tww  *[   [  \  \ #0rw   c                    [         R                  " [        R                  U5      S5      n[        R
                  R                  U[        R                  S9R                  R                  5       n[        R                  " U5      nS[        R                  [         R                  " U5      5      SS  R                  5       -   $ )NTr  0xi)rF  r  rO   ru  r7   r  r  r  verifying_key	to_stringr8   rG  r  r  r  )rm   r   private_key_bytespublic_key_bytespublic_key_hashs        ro   privateKeyToAddressExchange.privateKeyToAddress  s    ",,X__Z-H$O ++778IQVQ`Q`7aooyy{ ++&67hoof&6&6&GHNTTVVVrw   c                 "    U S S S:X  a  U SS  $ U $ )Nr#  r|  rq   r+  s    ro   remove0x_prefixExchange.remove0x_prefix  s!    !99rw   c           	      @   S nS n[        [        R                  " 5       5      S-  n[        R                  UR	                  SS5      U" U R                  SS5      5      [        R                  S5      nU" US	   5      S
-  n[        U" XEUS-    5      S-  5      nUSS  $ )Nc                     [        U SS9$ )Nr   )base)r  )ns    ro   
hex_to_dec!Exchange.totp.<locals>.hex_to_dec  s    qr?"rw   c                     [        U 5      S-  nUS:  a  SU-
  OSnU R                  5       SU-  -   n[        R                  " U5      $ )Nr  r   r\  )r  r  rF  	b32decode)r  missing_paddingr4   paddeds       ro   base32_to_bytes&Exchange.totp.<locals>.base32_to_bytes  sG    !!fqjO-<q-@a/)aGWWY#-0F##F++rw      r  bigrh  r   rD  r   r#  r  )	r  r   rO   rR  to_bytesr3  rH  sha1r=  )r  r  r  epochhmac_resr  otps          ro   totpExchange.totp  s    	#	, DIIK B&==5!9?3;;WZ\^K_;`bibnbnpuvHRL)A-*Xfqj9:ZGH23xrw   c                 8    [        U 5      R                  US5      $ )Nlittler  r  r  sizes     ro   r  Exchange.number_to_le  s    1vtX..rw   c                 8    [        U 5      R                  US5      $ )Nr  r  r  s     ro   number_to_beExchange.number_to_be  s    1vtU++rw   c                 0    [         R                  " U S5      $ r  )rF  r  r^  s    ro   r  Exchange.base16_to_binary  s    4((rw   c                 p    [         R                  [        R                  " U 5      5      R	                  5       $ r   )rO   r  rF  r  r  r^  s    ro   rL  Exchange.binary_to_base16  s%    v//2399;;rw   c                 4    [         R                  " US-  5      $ r  )r   r!  )rm   r  s     ro   r!  Exchange.sleep  s    zz,-..rw   c                    [         R                  c^  0 [         l        0 [         l        [        [         R                  5       H+  u  pU[         R                  U'   U[         R                  U'   M-     Sn[        [        U 5      5       H   nUS-  nU[         R                  X      -  nM"     UR                  UR                  5       S-   S-  S5      $ )z2encodes a base58 string to as a big endian integerr   :      r  r  )	rO   base58_decoderbase58_encoderr  base58_alphabetranger  r  
bit_length)r<  r   crV  s       ro   base58_to_binaryExchange.base58_to_binary  s     ""*&(H#&(H#!(":":;-.''*-.''* < s1vAbLFh--ad33F   1 1 3a 7A=uEErw   c                    [         R                  c^  0 [         l        0 [         l        [        [         R                  5       H+  u  pU[         R                  U'   U[         R                  U'   M-     SnU  H  nUS-  nX4-  nM     / nUS:  a8  [        US5      u  p6UR                  [         R                  U   5        US:  a  M8  UR                  5         SR                  U5      $ )Nr      r  r   )	rO   r  r  r  r  divmodrh  r  r   )r  r   r  rV  byter>  next_characters          ro   r  Exchange.binary_to_base58  s    ""*&(H#&(H#!(":":;-.''*-.''* < DeOFNF  qj%+FB%7"FMM(11.AB qj 	wwvrw   c                 T    Uc  U$  U R                  U5      $ ! [         a    Us $ f = fr   )r   rf   )rm   r  rj   s      ro   parse_numberExchange.parse_number  s4    =N{{5)) s    ''c                 `     Ub  US:X  a  g [        U5      S:X  a  g U$ ! [         a    Us $ f = f)Nr   r   )r  rf   )rm   string_numbers     ro   	omit_zeroExchange.omit_zero"  sB    	!$(;]#q(   	!  	!s   	   --c                     Uc  US:X  a  [        U R                  S-   5      eUS::  a  [        U R                  S-   5      eg )Nlimitz; create_order() requires a price argument for a limit orderr   z( create_order() amount should be above 0)r   r  r   )rm   marketrl   sider   r   r  s          ro   check_order_argumentsExchange.check_order_arguments,  sD    =w'2o(oppQ;tww)SSTT rw   c                     [        U5      nX`R                  ;   a?  U R                  U   nU" U R                  S-   U-   S-   U-   S-   U-   S-   U-   S-   U-   5      eg )Nrh  )r=  httpExceptionsr  )rm   rI  rJ  rK  rL  r  codeAsString
ErrorClasss           ro   r   Exchange.handle_http_status_code3  sp    4y...,,\:JTWWs]V3c9C?#ETWZZ]ccfiilppqq /rw   c                 t    [         R                  " U R                  S5      5      nU(       a  US:  a  US-
  $ U$ )Nrn  l        l        )binasciicrc32ru  )r>  signedunsigneds      ro   r  Exchange.crc329  s3    >>&--"78x:-k))Orw   c                 R    [        U[        5      (       a  U$ U R                  U5      $ r   )re   r  rX  )rm   rn   s     ro   cloneExchange.cloneA  s"     d++sAS1AArw   c                 F    [        U[        5      (       a  [        U5      $ U$ r   )re   r=  r  rm   r  s     ro   convert_to_big_intExchange.convert_to_big_intL  s    's33s5z>>rw   c                     [        U5      $ r   )r  r  s     ro   string_to_chars_arrayExchange.string_to_chars_arrayO  s    E{rw   c                 
    US L$ r   rq   r  s     ro   value_is_definedExchange.value_is_definedR  s    D  rw   c                      U(       a  XU $ XS  $ r   rq   )rm   rQ  firstseconds       ro   array_sliceExchange.array_sliceU  s    &,u6"?%-?rw   c                 <    [        X5      (       a  [        X5      $ U$ r   )r   r   )rm   rn   propertydefaultValues       ro   get_propertyExchange.get_propertyX  s    )0)?)?ws%Q\Qrw   c                     [        XU5        g r   )r   )rm   rn   r  r  s       ro   set_propertyExchange.set_property[  s    u%rw   c                 N    [         R                  " SSU5      R                  5       $ )Nz(?!^)([A-Z]+)z_\1)r  r  r  )rm   r=  s     ro   un_camel_caseExchange.un_camel_case^  s    vvovs399;;rw   c                 r    UR                  SS5      nUR                  SS5      nUR                  SS5      nU$ )N\r   z"{r  z}"r  )r3  )rm   r  modifiedContents      ro   fix_stringified_json_members%Exchange.fix_stringified_json_membersa  s>    
 "//$3)11$<)11$<rw   c                 F    U R                  U R                  U5      U l        g r   )rX  r   )rm   
newOptionss     ro   extend_exchange_options Exchange.extend_exchange_optionsk  s    {{4<<<rw   c                     0 $ r   rq   r  s    ro   create_safe_dictionaryExchange.create_safe_dictionaryn      	rw   c                     U$ r   rq   rE  s     ro   convert_to_safe_dictionary#Exchange.convert_to_safe_dictionaryq  rH  rw   c                     [        SR                  [        U5       Vs/ s H#  n[        [        R
                  " SS5      5      PM%     sn5      5      $ s  snf )Nr   r   r,  )r  r   r  r=  r#  randint)rm   r  r   s      ro   rand_numberExchange.rand_numbert  s<    277uT{K{!Cq! 45{KLMMKs   *Ac                     [        U5      $ r   )r  )rm   rN  s     ro   binary_lengthExchange.binary_lengthw  s    6{rw   seedsc                    [         c  [        S5      eU R                  US5      n[        U R	                  U R                  U R                  U5      SS5      5      S5      nSnSnXE-  U-  nXF-  n[        U R                  US5      S	5      U-  n[        U R                  US
5      5      [        S	5      [        S5      -  -  R                  [        S5      SS9n	[        U R                  US5      5      [        S	5      [        S5      -  -  R                  [        S5      SS9n
[        U R                  US5      5      [        S5      -  R                  [        S5      SS9n[        U R                  US5      5      [        S5      -  R                  [        S5      SS9n[         R                  " [        U5      [        S5      [        U5      [        U5      [        U R                  US5      5      U
R                  5       U	R                  5       U R                  US5      S:H  [        U5      [        U5      S5      n[         R                  " U5      n[        R                  UR                  S5      5      n[         R                   " 5       R#                  U5      nUR%                  UR'                  5       5      nUR(                  nU$ )Nrzklink_sdk is not installed, please do pip3 install apexomni-arm or apexomni-x86-mac or apexomni-x86-windows-linuxslotIdro  rD  r   l    l    r   r  r   18r   r   )roundingr  takerFeeRater{   r   makerFeeRatepairIdro  BUYFr|  )
zklink_sdkrf   r  r  r  rO  ru  rZ   quantizeContractBuildersafe_numberr  Contractr  fromhexremoveprefixZkLinkSignernew_from_seed
sign_musig	get_bytesr  )rm   r	  r  r  nonceInt	maxUint64	maxUint32r{  r   priceStrsizeStrtakerFeeRateStrmakerFeeRateStrbuildertx	seedsByte
signerSeed	auth_datar  s                      ro   get_zk_contract_signature_obj&Exchange.get_zk_contract_signature_objz  s     Q  R  R!!&(3t++DIIdkk&6I8UZ,[\^`a(		&)3$((=rBYN	D,,VW=>PWX\P]A]]gghopqhr  ~Jg  K4++FF;<wr{gVZm?[[eefmnofp  |He  I"4#3#3FN#KLwW\~]gghopqhr  ~Hg  I"4#3#3FN#KLwW\~]gghopqhr  ~Hg  I,,	NCFCKUSAQAQRXZbAc=dOOx//143C3CFK3X\a3a #o"6?   )MM%"4"4T":;	,,.<<YG
))",,.9	''	rw   c                    [         c  [        S5      eU R                  USS5      nU R                  US5      (       a]  Sn[	        U R                  U R                  U R                  U5      SS5      5      S5      n[        R                  " [        U5      U5      n[         R                  " [	        U R                  US	S
5      5      U R                  US5      [	        U R                  USS
5      5      [	        U R                  USS
5      5      [	        U R                  USS
5      5      U R                  USS5      U R                  USS5      U R                  U5      [	        U R                  USS
5      5      5	      n[         R                  " U5      n[        R!                  UR#                  S5      5      n[         R$                  " 5       R'                  U5      n	U	R)                  UR+                  5       5      n
U
R,                  nU$ )Nr  r{  r  
isContract
4294967295ro  rD  r   zkAccountIdr   receiverAddresssubAccountIdreceiverSubAccountIdtokenIdr   feetimestampSecondsr|  )r  rf   r  r   r  r  rO  ru  r!   
string_modr=  TransferBuilderr  parse_to_intTransferr  r  r  r  r  r  r  r  )rm   r	  r  r{  formattedUint32formattedNonce
tx_builderr&  r'  r(  r)  r  s               ro   get_zk_transfer_signature_obj&Exchange.get_zk_transfer_signature_obj  s     Q  R  R  #6>>&,//*O !5!5diiE@RT\^c6d!egijN&&s>':OLE//  :;V%67  ;<  )?CD  A67VXs3VUC0e$  );Q?@


   ,MM%"4"4T":;	,,.<<YG
))",,.9	''	rw   c                 P    [        U[        5      =(       d    [        U[        5      $ r   )re   r  	bytearray)rm   r  s     ro   is_binary_messageExchange.is_binary_message  s    '5)KZ-KKrw   c                    [        S5      nSU;   a  UnO UR                  U R                  U5      5      nUR                  U5      n[        R
                  " U5      R                  5       nUR                  5       R                  5       R                  5       nUR                  5       R                  5       R                  5       nUUUS.$ )Nenglishrh  )mnemonicr   r  )rC   to_mnemonicr  to_seedrD   FromSeedDeriveDefaultPathr  RawToBytes	PublicKeyRawCompressed)rm   entropymnemorE  seedkeyPairr   r  s           ro   retrieve_dydx_credentials"Exchange.retrieve_dydx_credentials  s    #'>H(()>)>w)GHH}}X&..&88:'')--/779
%%'557??A	 $"
 	
rw   c                     g r   rq   r  s    ro   load_dydx_protosExchange.load_dydx_protos  s    rw   c                     U$ r   rq   )rm   r  s     ro   to_dydx_longExchange.to_dydx_long  s    
rw   c                 t   [         (       d  [        U R                  S-   5      e[        U5      /n[        UUS9n[	        [        [        SUS.5      U R                  U5      [        [        R                  " [        R                  S9S9S9/0 S9n[        XgS	/S
9nU R                  UR                  5       5      $ )N^ requires protobuf to encode messages, please install it with `pip install "protobuf==5.29.5"`)r  memo/cosmos.crypto.secp256k1.PubKeytypeUrlr  modesingle
public_keysequence	mode_infosigner_infosr4  rw   )r  	auth_info
signatures)rN   r   r  rL   rF   rJ   r8  rH   SinglerE   SIGN_MODE_UNSPECIFIEDrK   rK  SerializeToString)	rm   r  r\  rf  r  r  r  rj  r&  s	            ro   encode_dydx_tx_for_simulation&Exchange.encode_dydx_tx_for_simulation  s    }tww  *J   J  K  K

 
 ,#D!*.   "..x8&hoo8CaCa.bc	 
	 TC5A$$R%9%9%;<<rw   c                 x   [         (       d  [        U R                  S-   5      eUc  / SS.n/ nUb  UR                  [        SSU0S.5      5        [        U5      /nU R	                  5       n	[        UUUS9n
[        [        [        SUS	   S.5      U R                  U	5      [        [        R                  " [        R                  S
9S9S9/[        US   US   S9S9n[        U R                  US   5      UR                  5       U
R                  5       US9nU R!                  UR                  5       SS5      nX/$ )Nr[  r  )r   gasLimitz%/dydxprotocol.accountplus.TxExtensionselected_authenticatorsr^  )r  r\  non_critical_extension_optionsr]  pub_keyr`  rb  rd  r   rr  )r   	gas_limitrh  account_number)rw  auth_info_bytes
body_byteschain_idro  rD  )rN   r   r  rh  r  rL   rF   rJ   r8  rH   rl  rE   SIGN_MODE_DIRECTrG   rI   rn  rO  )rm   r  r\  r  r:   authenticatorsr4  rt  r  rf  r  rj  signDocsigningHashs                 ro   encode_dydx_tx_for_signing#Exchange.encode_dydx_tx_for_signing  st   }tww  *J   J  K  K;#C *,&%*11-B-~A 3  

 $$&+I

 ,#D!(!3.   "..x8&hoo8C\C\.]^	 3x=C
OD
	 ,,W5E-FG%779--/	
 ii 9 9 ;XuM%%rw   c                     [         (       d  [        U R                  S-   5      e[        UR                  UR
                  U R                  U5      /S9nSU R                  UR                  5       5      -   $ )Nr[  )rx  ry  rk  r|  )	rN   r   r  rM   rx  ry  base16ToBinaryrL  rn  )rm   r}  r  r&  s       ro   encode_dydx_tx_rawExchange.encode_dydx_tx_raw  sv    }tww  *J   J  K  K#33))++I67

 d++B,@,@,BCCCrw   c                    0 SS _SS _SS _SS_SS_SU R                   _S	S
_SS
_SS
_SS
_S0 SS_SS_SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS_SS _0 S S _S!S _S"S _S#S _S$S _S%S _S&S _S'S _S(S _S)S_S*S _S+S _S,S _S-S _S.S _S/S _S0S _E0 S1S_S2S_S3S _S4S _S5S _S6S _S7S _S8S _S9S_S:S _S;S _S<S _S=S _S>S _S?S _S@S _SAS _E0 SBS _SCS _SDS _SES _SFS _SGS _SHS _SIS _SJS _SKS _SLS _SMS _SNS _SOS _SPS _SQS _SRS _E0 SSST_SUS _SVS _SWS _SXS _SYS_SZS _S[S _S\S _S]S _S^S _S_S _S`S _SaS _SbS _ScS _SdS _E0 SeS _SfS _SgS _ShS _SiS _SjS _SkS _SlS _SmST_SnST_SoS _SpS _SqS _SrS _SsS _StS _SuS _E0 SvS _SwS _SxS _SyS _SzS _S{S _S|S _S}S _S~S _SS _SS _SS _SS _SS _SS_SS _SS _E0 SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS_SS _SS _SS _SS _SS _E0 SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS_SS _SS _SS _E0 SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _E0 SS_SS _SS _SS _SS _SS _SS_SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _E0 SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _E0 SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _ES S S S S S S S S S S S S S S S.E_SS S S S S S._SS _SSSS
S
S
S
S
S
S
S
S.
_SS _S0 _SS _S S S S S.S S 0 0 S.S.SS S S S.S 0 S[        _S[        _S[        _S[        _S[        _GS [        _GS[        _GS[        _GS[        _GS[        _GS[        _GS[        _GS[        _GS[        _GS	[        _GS
[        _GS[        _[        [        [        [
        [
        [        [        [        GS.EGSGSGS.[        [        S S GS.S S GS.S S GS.S S GS.GS.GS.E$ (  Nr  rd   	countriesenableRateLimitTr  rz   rc  	certifiedFproaliasdexrR  	publicAPI
privateAPICORSr   spotmarginswapfutureoption	addMarginborrowCrossMarginborrowIsolatedMarginborrowMargincancelAllOrderscancelAllOrdersWscancelOrdercancelOrderWithClientOrderIdcancelOrderWscancelOrderscancelOrdersWithClientOrderIdcancelOrdersWscloseAllPositionsclosePositioncreateDepositAddresscreateLimitBuyOrdercreateLimitBuyOrderWscreateLimitOrdercreateLimitOrderWscreateLimitSellOrdercreateLimitSellOrderWscreateMarketBuyOrdercreateMarketBuyOrderWscreateMarketBuyOrderWithCostcreateMarketBuyOrderWithCostWscreateMarketOrdercreateMarketOrderWscreateMarketOrderWithCostcreateMarketOrderWithCostWscreateMarketSellOrdercreateMarketSellOrderWscreateMarketSellOrderWithCostcreateMarketSellOrderWithCostWscreateOrdercreateOrderWscreateOrders$createOrderWithTakeProfitAndStopLoss&createOrderWithTakeProfitAndStopLossWscreatePostOnlyOrdercreatePostOnlyOrderWscreateReduceOnlyOrdercreateReduceOnlyOrderWscreateStopLimitOrdercreateStopLimitOrderWscreateStopLossOrdercreateStopLossOrderWscreateStopMarketOrdercreateStopMarketOrderWscreateStopOrdercreateStopOrderWscreateTakeProfitOrdercreateTakeProfitOrderWscreateTrailingAmountOrdercreateTrailingAmountOrderWscreateTrailingPercentOrdercreateTrailingPercentOrderWscreateTriggerOrdercreateTriggerOrderWsr   	editOrderemulatededitOrderWithClientOrderId
editOrderseditOrderWsfetchAccountsfetchBalancefetchBalanceWsfetchBidsAsksfetchBorrowInterestfetchBorrowRatefetchBorrowRateHistoriesfetchBorrowRateHistoryfetchBorrowRatesfetchBorrowRatesPerSymbolfetchCanceledAndClosedOrdersfetchCanceledOrdersfetchClosedOrderfetchClosedOrdersfetchClosedOrdersWsfetchConvertCurrenciesfetchConvertQuotefetchConvertTradefetchConvertTradeHistoryfetchCrossBorrowRatefetchCrossBorrowRatesrM  fetchCurrenciesWsfetchDepositfetchDepositAddressfetchDepositAddressesfetchDepositAddressesByNetworkfetchDepositsfetchDepositsWithdrawalsfetchDepositsWsfetchDepositWithdrawFeefetchDepositWithdrawFeesfetchFundingHistoryfetchFundingRatefetchFundingRateHistoryfetchFundingIntervalfetchFundingIntervalsfetchFundingRatesfetchGreeksfetchIndexOHLCVfetchIsolatedBorrowRatefetchIsolatedBorrowRatesfetchMarginAdjustmentHistoryfetchIsolatedPositionsfetchL2OrderBookfetchL3OrderBookfetchLastPricesfetchLedgerfetchLedgerEntryfetchLeveragefetchLeveragesfetchLeverageTiersfetchLiquidationsfetchLongShortRatiofetchLongShortRatioHistoryfetchMarginModefetchMarginModesfetchMarketLeverageTiersfetchMarketsfetchMarketsWsfetchMarkOHLCVfetchMyLiquidationsfetchMySettlementHistoryfetchMyTradesfetchMyTradesWs
fetchOHLCVfetchOHLCVWsfetchOpenInterestfetchOpenInterestsfetchOpenInterestHistoryfetchOpenOrderfetchOpenOrdersfetchOpenOrdersWsfetchOptionfetchOptionChain
fetchOrderfetchOrderWithClientOrderIdfetchOrderBookfetchOrderBooksfetchOrderBookWsfetchOrdersfetchOrdersByStatusfetchOrdersWsfetchOrderTradesfetchOrderWsfetchPositionfetchPositionHistoryfetchPositionsHistoryfetchPositionWsfetchPositionModefetchPositionsfetchPositionsWsfetchPositionsForSymbolfetchPositionsForSymbolWsfetchPositionsRiskfetchPremiumIndexOHLCVfetchSettlementHistoryfetchStatusfetchTickerfetchTickerWsfetchTickersfetchMarkPricesfetchTickersWs	fetchTimefetchTradesfetchTradesWsfetchTradingFeer^  fetchTradingFeesWsfetchTradingLimitsfetchTransactionFeefetchTransactionFeesfetchTransactionsfetchTransferfetchTransfersfetchUnderlyingAssetsfetchVolatilityHistoryfetchWithdrawAddressesfetchWithdrawalfetchWithdrawalsfetchWithdrawalsWsfetchWithdrawalWhitelistreduceMarginrepayCrossMarginrepayIsolatedMarginsetLeverage	setMarginsetMarginModesetPositionModesignIntransferwatchBalancewatchMyTrades
watchOHLCVwatchOHLCVForSymbolswatchOrderBookwatchBidsAskswatchOrderBookForSymbolswatchOrderswatchOrdersForSymbolswatchPositionwatchPositionswatchStatuswatchTickerwatchTickerswatchTradeswatchTradesForSymbolswatchLiquidationswatchLiquidationsForSymbols)watchMyLiquidationsunWatchOrdersunWatchTradesunWatchTradesForSymbolsunWatchOHLCVForSymbolsunWatchOrderBookForSymbolsunWatchPositionsunWatchOrderBookunWatchTickersunWatchMyTradesunWatchTickerunWatchOHLCVwatchMyLiquidationsForSymbolsr   wsurls)logoapiwwwdocfeesrv  requiredCredentialsr   rO  r   
timeframesr|   r   r   ok)statusupdatedetarK  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   )ry  r}  r   r  commonCurrenciesprecisionModepaddingModer   )	rc  r   r   r   r
   r	   r   r   r   r  s    ro   r   Exchange.describeO  s   L
$L
DL
 L
 t	L

 L
 t||L
 L
 5L
 UL
 5L
  mTmdm m 4	m
 m $m m $m $m Tm $Tm 'm m "4m $Tm  t!m" /#m$  %m& 'm( 0)m* !$+m, $T-m.  /m0 '1m2 &t3m4 (5m6 #D7m8 %d9m: ';m< )$=m> '?m@ )$AmB /CmD 1$EmF $TGmH &tImJ ,TKmL .tMmN (OmP *4QmR 0SmT 24UmV tWmX  YmZ [m\ 7]m^ 9$_m` &tamb (cmd (emf *4gmh 'imj )$kml &tmmn (omp (qmr *4smt "4umv $Twmx (ymz *4{m| ,T}m~ .tm@ -dAmB /CmD %dEmF 'GmH 4ImJ ZKmL -dMmN dOmP tQmR  SmT UmV !$WmX  YmZ &t[m\ "4]m^ +D_m` )$amb #Dcmd ,Temf /gmh &timj #Dkml $Tmmn &tomp )$qmr $Tsmt $Tumv +Dwmx 'ymz ({m| ":}m~ $Zm@ AmB &tCmD (EmF 1$GmH  ImJ +DKmL "4MmN *4OmP +DQmR &tSmT #DUmV *4WmX 'YmZ ([m\ $T]m^ t_m` "4amb *4cmd +Demf /gmh )$imj #Dkml #Dmmn "4omp tqmr #Dsmt  umv !$wmx %dymz $T{m| &t}m~ -dm@ "4AmB #DCmD +DEmF GmH !$ImJ !$KmL &tMmN +DOmP  QmR "4SmT dUmV WmX $TYmZ %d[m\ +D]m^ !$_m` "4amb $Tcmd temf #Dgmh dimj .tkml !$mmn "4omp #Dqmr tsmt &tumv  wmx #Dymz {m|  }m~ 'm@ (AmB "4CmD $TEmF !$GmH #DImJ *4KmL ,TMmN %dOmP )$QmR )$SmT tUmV tWmX  YmZ [m\ "4]m^ !$_m` Tamb tcmd  emf "4gmh #Dimj %dkml %dmmn &tomp 'qmr $Tsmt  umv !$wmx (ymz )${m| )$}m~ "4m@ #DAmB %dCmD +DEmF GmH #DImJ &tKmL tMmN TOmP  QmR "4SmT $UmV DWmX YmZ  [m\ d]m^ '_m` !$amb  cmd +Demf tgmh (imj  kml !$mmn tomp tqmr smt tumv (wmx $Tymz .t{m| (,!%!%+/*..2$($("&#'!% $15 YmL
r sL
@ 4AL
B ""!#!&$CL
Z t[L
\ "]L
^ $_L
d "&"&!!	 "&"& "!	 	 }~ ( +	
 + + + + + + + + + + +  +!" +#$ ,++%%***38 ! '%$(6"&t4!%d3 $T2	M
L
 L	
rw   r  r  c                 X    U R                  XU5      n[        U[        5      (       a  U$ U$ zi
@ignore
       safely extract boolean value from dictionary or list
       :returns bool | None:
       )r  re   r  rm   dictionaryOrListr  r  r  s        ro   safe_bool_nExchange.safe_bool_n	  s/     !!"2,GeT""Lrw   r  r  c                 *    U R                  XU/U5      $ r  r  rm   r  r  r  r  s        ro   safe_bool_2Exchange.safe_bool_2	       
4L,GGrw   r  c                 (    U R                  X/U5      $ r  r  rm   r  r  r  s       ro   r   Exchange.safe_bool	       
E<@@rw   c                     U R                  XU5      nUc  U$ [        U[        5      (       a  [        U[        5      (       d  U$ U$ zh
@ignore
       safely extract a dictionary from dictionary or list
       :returns dict | None:
       )r  re   r   r  r  s        ro   safe_dict_nExchange.safe_dict_n	  sG     !!"2,G=ud##eT**rw   c                 (    U R                  X/U5      $ r  r  r  s       ro   	safe_dictExchange.safe_dict	  r  rw   c                 *    U R                  XU/U5      $ r  r  r  s        ro   safe_dict_2Exchange.safe_dict_2	  r  rw   c                 b    U R                  XU5      nUc  U$ [        U[        5      (       a  U$ U$ ze
@ignore
       safely extract an Array from dictionary or list
       :returns Array | None:
       )r  re   r  r  s        ro   safe_list_nExchange.safe_list_n	  s:     !!"2,G=eT""Lrw   c                 *    U R                  XU/U5      $ r  r  )rm   r  r  r  r  s        ro   safe_list_2Exchange.safe_list_2	  s      0,MMrw   c                 (    U R                  X/U5      $ r  r  )rm   r  r  r  s       ro   	safe_listExchange.safe_list	  s      0%FFrw   c                 d    [        S[        U5      5       H  nU R                  XU   5        M     g rD  )r  r  handle_delta)rm   	orderbookdeltasr   s       ro   handle_deltasExchange.handle_deltas	  s)    q#f+&Ai3 'rw   c                 2    [        U R                  S-   5      e)Nz handleDelta not supported yetr   r  )rm   booksidedeltas      ro   r  Exchange.handle_delta	      477%EEFFrw   bookSidepriceKey	amountKeycountOrIdKeyc                     [        S[        U5      5       H)  nU R                  X&   X4U5      nUR                  U5        M+     g rD  )r  r  parse_bid_ask
storeArray)rm   r  r  r  r  r  r   bidAsks           ro   handle_deltas_with_keys Exchange.handle_deltas_with_keys	  s;    q#f+&A''	8UF' 'rw   c                     g)Nr   rq   )rm   r  r  s      ro   get_cache_indexExchange.get_cache_index 
  s    rw   arraysOfArraysc                 j    / n[        S[        U5      5       H  nU R                  X!U   5      nM     U$ rD  )r  r  r  )rm   r  rV  r   s       ro   arrays_concatExchange.arrays_concat
  s7    q#n-.A&&va/@AF /rw   c                     Uc  U R                   n[        UR                  5       5      n[        S[	        U5      5       H  nX4   nX%   U:X  d  M  Us  $    g rD  )r{  r  r  r  r  )rm   ri  r{  r  r   r  s         ro   find_timeframeExchange.find_timeframe

  sR    JJOO%&q#d)$A'C)+
 % rw   rK  rL  c                    / nS nU R                   b  UR                  S5        U R                   nU R                  b  UR                  S5        U R                  nU R                  b#  UR                  S5        U R                  XX45      nU R                  b#  UR                  S5        U R	                  XX45      nU R
                  bJ  UR                  S5        [        U R
                  5      (       a  U R                  XX45      nOU R
                  n[        U5      nUS:  a/  SR                  U5      n[        U R                  S-   U-   S	-   5      eU$ )
Nr  	proxy_urlproxyUrlCallbackproxy_url_callbackproxyr   r  . you have multiple conflicting proxy settings(zW), please use only one from : proxyUrl, proxy_url, proxyUrlCallback, proxy_url_callback)r  rh  r  r  r  r  callabler  r   r   r  )	rm   rK  rL  r   r  usedProxiesr  r&  joinedProxyNamess	            ro   ro  !Exchange.check_proxy_url_settings
  s;   ==$z*}}H>>%{+~~H  ,12,,S'HH"".34..sGJH::!w'

##::c7A::[!A:"xx4&tww1a'adt't  xQ  (Q  R  Rrw   	targetUrlc                 f    UR                  S5      S:  nU(       a  U R                  U5      nU$ UnU$ )N?r   )r  r  )rm   r  includesQueryfinalUrls       ro   rp  "Exchange.url_encoder_for_proxy_url0
  s:    !s+q0;H4,,Y7 OXrw   c                 R   / nS nS nS nU R                  U R                  5      n	U R                  U R                  5      n
U	(       d  U
(       a0  UR                  S5        U	(       a  U R                  OU R                  nU R                  U R                  5      nU R                  U R
                  5      nU(       d  U(       a<  UR                  S5        U(       a  U R	                  XX45      OU R                  XX45      nU R                  U R                  5      nU R                  U R                  5      nU(       d  U(       a0  UR                  S5        U(       a  U R                  OU R                  nU R                  U R                  5      nU R                  U R                  5      nU(       d  U(       a<  UR                  S5        U(       a  U R                  XX45      OU R                  XX45      nU R                  U R                  5      nU R                  U R                  5      nU(       d  U(       a0  UR                  S5        U(       a  U R                  OU R                  nU R                  U R                  5      nU R                  U R                  5      nU(       d  U(       a<  UR                  S5        U(       a  U R                  XX45      OU R                  XX45      n[        U5      nUS:  a/  SR                  U5      n[!        U R"                  S	-   U-   S
-   5      eXgU/$ )Nr  httpProxyCallbackr  httpsProxyCallbackr  socksProxyCallbackr   r  r  zy), please use only one from: httpProxy, httpsProxy, httpProxyCallback, httpsProxyCallback, socksProxy, socksProxyCallback)r  r  
http_proxyrh  r  http_proxy_callbackr  https_proxyr  https_proxy_callbackr  socks_proxyr  socks_proxy_callbackr  r   r   r  )rm   rK  rL  r   r  r  r  r  r  isHttpProxyDefinedisHttp_proxy_definedishttpProxyCallbackDefinedishttp_proxy_callback_definedisHttpsProxyDefinedisHttps_proxy_definedishttpsProxyCallbackDefinedishttps_proxy_callback_definedisSocksProxyDefinedisSocks_proxy_definedissocksProxyCallbackDefinedissocks_proxy_callback_definedr&  r  s                          ro   rq  Exchange.check_proxy_settings6
  s   	

!224>>B#44T__E!5{+*<$//I%)%:%:4;Q;Q%R"(,(=(=d>V>V(W%%)F23Nh..sGJnr  oG  oG  HK  U\  ocI"33DOOD $ 5 5d6F6F G"7|,,?TEUEUJ&*&;&;D<S<S&T#)-)>)>t?X?X)Y&&*H34Pk00gLqu  rK  rK  LO  Y`  rgJ"33DOOD $ 5 5d6F6F G"7|,,?TEUEUJ&*&;&;D<S<S&T#)-)>)>t?X?X)Y&&*H34Pk00gLqu  rK  rK  LO  Y`  rgJ[!A:"xx4&tww1a'adt't  xs  (s  t  tz22rw   c                 R   / nS nS nS nU R                  U R                  5      nU R                  U R                  5      nU(       d  U(       a0  UR                  S5        U(       a  U R                  OU R                  nU R                  U R                  5      nU R                  U R
                  5      nU(       d  U(       a0  UR                  S5        U(       a  U R                  OU R
                  nU R                  U R                  5      n	U R                  U R                  5      n
U	(       d  U
(       a0  UR                  S5        U	(       a  U R                  OU R                  n[        U5      nUS:  a/  SR                  U5      n[        U R                  S-   U-   S-   5      eX#U/$ )NwsProxywssProxywsSocksProxyr   r  r  z<), please use only one from: wsProxy, wssProxy, wsSocksProxy)r  r  ws_proxyrh  r  	wss_proxyr  ws_socks_proxyr  r   r   r  )rm   r  r  r  r  isWsProxyDefinedis_ws_proxy_definedisWssProxyDefinedis_wss_proxy_definedisWsSocksProxyDefinedis_ws_socks_proxy_definedr&  r  s                ro   check_ws_proxy_settings Exchange.check_ws_proxy_settingsc
  sd   00>"33DMMB2y)'7dlldmmG 11$--@#44T^^D 4z*):t}}H $ 5 5d6G6G H$($9$9$:M:M$N! $=~.1F4,,TM`M`L[!A:"xx4&tww1a'adt't  xv  (v  w  w<00rw   c                 R    U(       a   U(       a  [        U R                  S-   5      eg g )Nzu you have multiple conflicting proxy settings, please use only one from : proxyUrl, httpProxy, httpsProxy, socksProxy)r   r  )rm   r  proxyUrlSets      ro   rr  "Exchange.check_conflicting_proxies
  s/    [&tww  2i  (i  j  j )=rw   r  c                 z   Uc  [        U R                  S-   5      eU R                  U R                  U5      5      n[	        U5      nUS:X  d.  [	        U5      U R
                  :  d  UR                  S5      S:  a@  [        U R                  S-   [        U R
                  5      -   S-   [        U5      -   S-   5      eU$ )Nz address is Noner   rh  r   z% address is invalid or has less than z characters: "")r   r  r  r  r  minFundingAddressLengthr  r=  )rm   r  	uniqCharsr&  s       ro   check_addressExchange.check_address
  s    ? +=!=>>[[!;!;G!DE	YQ;#g,)E)EEVYIZ]_I_ +R!RUXY]YuYuUv!v  zJ  "J  MP  QX  MY  "Y  \_  "_  `  `rw   rx  c                     / n[        UR                  R                  5       5      n[        S[	        U5      5       H/  nXE   nUR                  U5      S:  d  M  UR                  U5        M1     U$ rD  )r  futuresr  r  r  r  rh  )rm   clientrx  rV  messageHashesr   messageHashs          ro   find_message_hashesExchange.find_message_hashes
  sb    V^^0023q#m,-A'*K(A-k* . rw   r  rQ  r  	fromStartc                 z   U R                  U5      (       a  [        U5      nUS:  a  SnX1S   ;   a  US   U   nXS-
     U   nUb  Ub  Xx:*  nU(       a8  X%:  a  UnU(       a  U R                  USU5      nU$ U R                  X* 5      n U$ U(       a  U R                  X* 5      nU$ U R                  USU5      nU$ )Nr   Tr   )r  r  r  )	rm   rQ  r  r  r  arrayLength	ascendingr  lasts	            ro   filter_by_limitExchange.filter_by_limit
  s      ''e*KQ 	8O!!HSME q1#6D(T-=$)M	* +  $ 0 05 A  !% 0 0 ? 	 ! $ 0 0 ?  !% 0 05 Arw   sincec                 |   U R                  U5      nU R                  U5      nUnU(       aT  / n[        S[        U5      5       H9  n	Xy   n
U R	                  X5      nU(       d  M!  X:  d  M(  UR                  U
5        M;     U(       a  Ub  U R                  X* 5      $ U(       + =(       a    UnU R                  XXL5      $ rD  r  r_  r  r  r  rh  r  r  )rm   rQ  r  r  r  tailsinceIsDefinedparsedArrayrV  r   ri  r  shouldFilterFromStarts                ro   filter_by_since_limitExchange.filter_by_since_limit
  s    ..u5mmE*F1c+./#35enMM%(	 0
 E%##FF33 %) ;^##F3NNrw   fieldc                    U R                  U5      nU R                  U5      n	U R                  U5      n
U
nU(       d  U	(       a  / n[        S[        U
5      5       Hq  nX   nX   U:H  nU(       a  UOSnU R	                  X5      nU=(       a    US L=(       a    UU:  nU	(       a  UOSnU(       d  MW  U(       d  M`  UR                  U5        Ms     U(       a  Ub  U R                  X* 5      $ U R                  XXi5      $ )Nr   Tr  )rm   rQ  r   r  r  r  r  r  valueIsDefinedr  r  rV  r   ri  entryFiledEqualValuefirstConditionentryKeyValueentryKeyGESincesecondConditions                      ro   filter_by_value_since_limit$Exchange.filter_by_value_since_limit
  s    ..u5..u5mmE*^F1c+./#',|u'<$9G!5T $ ;#0"fuD7H"f}`eOe5C/!>ooMM%( 0 E%##FF33##F3GGrw   enabledc                    U(       a  SU R                   ;   a  [        U R                   S   [        5      (       a9  U R                   S   U R                   S'   U R                   S   U R                   S'   OoU R                  U R                   S   5      U R                   S'   U R                  U R                   S   5      U R                   S'   O[	        U R
                  S-   5      eSU l        gSU R                   ;   a  [        U R                   S   [        5      (       a  U R                   S   U R                   S'   O+U R                  U R                   S   5      U R                   S'   U R                  U R                   S5      nX l         SU l        gg)zp
set the sandbox mode for the exchange
:param boolean enabled: True to enable sandbox mode, False to disable it
testrv  	apiBackupz does not have a sandbox URLTFN)rt  re   r=  r  r   r  isSandboxModeEnabledr  )rm   r*  newUrlss      ro   r   Exchange.set_sandbox_mode
  s3   
 "dii.44-1YYu-=DIIk*'+yy'8DIIe$-1ZZ		%8H-IDIIk*'+zz$))F2C'DDIIe$"477-K#KLL(,D%DII%$))E*C00#'99[#9		% #'::dii.D#E		% ii		;7GI(-D% &rw   enablec                    U R                   (       a  [        U R                  S-   5      eU(       a9  U R                  S   U R                  S'   U R                  S   U R                  S'   ONSU R                  ;   a>  U R                  S   U R                  S'   U R	                  U R                  S5      nX l        XR
                  S'   g)zx
enables or disables demo trading mode
:param boolean [enable]: True if demo trading should be enabled, False otherwise
z demo trading does not support in sandbox environment. Please check https://www.binance.com/en/support/faq/detail/9be58f73e5e14338809e3b705b9687dd to see the differencesrv  apiBackupDemoTradingdemoenableDemoTradingN)r.  r   r  rt  r  r   )rm   r1  r/  s      ro   enable_demo_tradingExchange.enable_demo_trading
  s    
 $$tww  *U   U  V  V04		%0@DII,-#yy0DIIe#tyy0#yy)?@DIIeii		+ABGI,2()rw   publicrv  r   r  c                     0 $ r   rq   )rm   pathrv  rL  r  r   r  s          ro   rA  Exchange.sign  r  rw   c                 2    [        U R                  S-   5      e)Nz% fetchAccounts() is not supported yetr  rY  s     ro   fetch_accountsExchange.fetch_accounts      477%LLMMrw   symbolc                 2    [        U R                  S-   5      e)Nz# fetchTrades() is not supported yetr  rm   r@  r  r  r  s        ro   fetch_tradesExchange.fetch_trades
      477%JJKKrw   c                 2    [        U R                  S-   5      e)Nz% fetchTradesWs() is not supported yetr  rB  s        ro   fetch_trades_wsExchange.fetch_trades_ws  r?  rw   c                     U R                   S   (       a  U R                  U/X#U5      $ [        U R                  S-   5      e)Nre  z) watchLiquidations() is not supported yet)rR  watch_liquidations_for_symbolsr   r  rB  s        ro   watch_liquidationsExchange.watch_liquidations  s;    881266xvVV477%PPQQrw   symbolsc                 2    [        U R                  S-   5      e)Nz3 watchLiquidationsForSymbols() is not supported yetr  rm   rM  r  r  r  s        ro   rJ  'Exchange.watch_liquidations_for_symbols  s    477%ZZ[[rw   c                     U R                   S   (       a  U R                  U/X#U5      $ [        U R                  S-   5      e)Nrr  z+ watchMyLiquidations() is not supported yet)rR  !watch_my_liquidations_for_symbolsr   r  rB  s        ro   watch_my_liquidationsExchange.watch_my_liquidations  s<    8834996(ERXYY477%RRSSrw   c                 2    [        U R                  S-   5      e)Nz5 watchMyLiquidationsForSymbols() is not supported yetr  rO  s        ro   rR  *Exchange.watch_my_liquidations_for_symbols  s    477%\\]]rw   c                 2    [        U R                  S-   5      e)Nz# watchTrades() is not supported yetr  rB  s        ro   watch_tradesExchange.watch_trades   rE  rw   c                 2    [        U R                  S-   5      e)Nz% unWatchOrders() is not supported yetr  rm   r@  r  s      ro   un_watch_ordersExchange.un_watch_orders#  r?  rw   c                 2    [        U R                  S-   5      e)Nz% unWatchTrades() is not supported yetr  r[  s      ro   un_watch_tradesExchange.un_watch_trades&  r?  rw   c                 2    [        U R                  S-   5      e)Nz- watchTradesForSymbols() is not supported yetr  rO  s        ro   watch_trades_for_symbols!Exchange.watch_trades_for_symbols)      477%TTUUrw   c                 2    [        U R                  S-   5      e)Nz/ unWatchTradesForSymbols() is not supported yetr  rm   rM  r  s      ro   un_watch_trades_for_symbols$Exchange.un_watch_trades_for_symbols,      477%VVWWrw   c                 2    [        U R                  S-   5      e)Nz/ watchMyTradesForSymbols() is not supported yetr  rO  s        ro   watch_my_trades_for_symbols$Exchange.watch_my_trades_for_symbols/  ri  rw   c                 2    [        U R                  S-   5      e)Nz- watchOrdersForSymbols() is not supported yetr  rO  s        ro   watch_orders_for_symbols!Exchange.watch_orders_for_symbols2  rd  rw   symbolsAndTimeframesc                 2    [        U R                  S-   5      e)Nz, watchOHLCVForSymbols() is not supported yetr  )rm   rp  r  r  r  s        ro   watch_ohlcv_for_symbols Exchange.watch_ohlcv_for_symbols5      477%SSTTrw   c                 2    [        U R                  S-   5      e)Nz. unWatchOHLCVForSymbols() is not supported yetr  )rm   rp  r  s      ro   un_watch_ohlcv_for_symbols#Exchange.un_watch_ohlcv_for_symbols8      477%UUVVrw   c                 2    [        U R                  S-   5      e)Nz0 watchOrderBookForSymbols() is not supported yetr  rm   rM  r  r  s       ro   watch_order_book_for_symbols%Exchange.watch_order_book_for_symbols;      477%WWXXrw   c                 2    [        U R                  S-   5      e)Nz2 unWatchOrderBookForSymbols() is not supported yetr  rf  s      ro   un_watch_order_book_for_symbols(Exchange.un_watch_order_book_for_symbols>      477%YYZZrw   c                 2    [        U R                  S-   5      e)Nz( unWatchPositions() is not supported yetr  rf  s      ro   un_watch_positionsExchange.un_watch_positionsA      477%OOPPrw   c                 2    [        U R                  S-   5      e)Nz% unWatchTicker() is not supported yetr  r[  s      ro   un_watch_tickerExchange.un_watch_tickerD  r?  rw   c                 2    [        U R                  S-   5      e)Nz( unWatchMarkPrice() is not supported yetr  r[  s      ro   un_watch_mark_priceExchange.un_watch_mark_priceG  r  rw   c                 2    [        U R                  S-   5      e)Nz) unWatchMarkPrices() is not supported yetr  rf  s      ro   un_watch_mark_pricesExchange.un_watch_mark_pricesJ      477%PPQQrw   codesc                 2    [        U R                  S-   5      e)Nz- fetchDepositAddresses() is not supported yetr  rm   r  r  s      ro   fetch_deposit_addresses Exchange.fetch_deposit_addressesM  rd  rw   c                 2    [        U R                  S-   5      e)Nz& fetchOrderBook() is not supported yetr  rm   r@  r  r  s       ro   fetch_order_bookExchange.fetch_order_bookP      477%MMNNrw   c                 2    [        U R                  S-   5      e)Nz( fetchOrderBookWs() is not supported yetr  r  s       ro   fetch_order_book_wsExchange.fetch_order_book_wsS  r  rw   c                     U R                   S   (       a$  U R                  U/U5      nU R                  X15      $ [        U R                  S-   5      e)Nr
  z' fetchMarginMode() is not supported yet)rR  fetch_margin_modesr  r   r  )rm   r@  r  marginModess       ro   fetch_margin_modeExchange.fetch_margin_modeV  sG    88&'116(FCK>>+66tww)RRSSrw   c                 2    [        U R                  S-   5      e)Nz( fetchMarginModes() is not supported yetr  rf  s      ro   r  Exchange.fetch_margin_modes]  r  rw   c                     U R                  SSS5      n[        SU5       H  n U R                  XU5      nUs  $    g ! [         a  nUS-   U:X  a  Ue S nAM8  S nAff = f)NrX  
maxRetriesrv  r   r   )handle_optionr  r  rf   )rm   r@  r  r  fetchSnapshotMaxRetriesr   	orderBookr  s           ro   fetch_rest_order_book_safe#Exchange.fetch_rest_order_book_safe`  sv    "&"4"45E|UV"Wq12A 11&H	   3   E55G 6s   =
AAAc                 2    [        U R                  S-   5      e)Nz& watchOrderBook() is not supported yetr  r  s       ro   watch_order_bookExchange.watch_order_bookk  r  rw   c                 2    [        U R                  S-   5      e)Nz( unWatchOrderBook() is not supported yetr  r[  s      ro   un_watch_order_bookExchange.un_watch_order_bookn  r  rw   c                 2    [        U R                  S-   5      e)Nz! fetchTime() is not supported yetr  rY  s     ro   
fetch_timeExchange.fetch_timeq      477%HHIIrw   c                 2    [        U R                  S-   5      e)Nz* fetchTradingLimits() is not supported yetr  rf  s      ro   fetch_trading_limitsExchange.fetch_trading_limitst      477%QQRRrw   rawCurrencyc                 2    [        U R                  S-   5      e)Nz% parseCurrency() is not supported yetr  )rm   r  s     ro   parse_currencyExchange.parse_currencyw  r?  rw   c                     0 nU R                  U5      n[        S[        U5      5       H  nU R                  X4   5      nUS   nXRU'   M!     U$ )Nr   rI  )r_  r  r  r  )rm   rawCurrenciesrV  arrr   parsedrI  s          ro   parse_currenciesExchange.parse_currenciesz  sS    mmM*q#c(#A((0F&>D!4L $ rw   r  c                 2    [        U R                  S-   5      e)Nz# parseMarket() is not supported yetr  )rm   r  s     ro   parse_marketExchange.parse_market  rE  rw   c                     / n[        S[        U5      5       H%  nUR                  U R                  X   5      5        M'     U$ rD  )r  r  rh  r  )rm   rO  rV  r   s       ro   parse_marketsExchange.parse_markets  s:    q#g,'AMM$++GJ78 (rw   tickerc                 2    [        U R                  S-   5      e)Nz# parseTicker() is not supported yetr  )rm   r  r  s      ro   parse_tickerExchange.parse_ticker  rE  rw   currencyc                 2    [        U R                  S-   5      e)Nz+ parseDepositAddress() is not supported yetr  )rm   depositAddressr  s      ro   parse_deposit_addressExchange.parse_deposit_address      477%RRSSrw   tradec                 2    [        U R                  S-   5      e)Nz" parseTrade() is not supported yetr  rm   r  r  s      ro   parse_tradeExchange.parse_trade      477%IIJJrw   transactionc                 2    [        U R                  S-   5      e)Nz( parseTransaction() is not supported yetr  )rm   r  r  s      ro   parse_transactionExchange.parse_transaction  r  rw   rS  c                 2    [        U R                  S-   5      e)Nz% parseTransfer() is not supported yetr  )rm   rS  r  s      ro   parse_transferExchange.parse_transfer  r?  rw   r:   c                 2    [        U R                  S-   5      e)Nz$ parseAccount() is not supported yetr  )rm   r:   s     ro   parse_accountExchange.parse_account      477%KKLLrw   itemc                 2    [        U R                  S-   5      e)Nz( parseLedgerEntry() is not supported yetr  )rm   r  r  s      ro   parse_ledger_entryExchange.parse_ledger_entry  r  rw   r  c                 2    [        U R                  S-   5      e)Nz" parseOrder() is not supported yetr  rm   r  r  s      ro   parse_orderExchange.parse_order  r  rw   c                 2    [        U R                  S-   5      e)Nz- fetchCrossBorrowRates() is not supported yetr  rY  s     ro   fetch_cross_borrow_rates!Exchange.fetch_cross_borrow_rates  rd  rw   c                 2    [        U R                  S-   5      e)Nz0 fetchIsolatedBorrowRates() is not supported yetr  rY  s     ro   fetch_isolated_borrow_rates$Exchange.fetch_isolated_borrow_rates  r}  rw   c                 2    [        U R                  S-   5      e)Nz0 parseMarketLeverageTiers() is not supported yetr  rm   r-  r  s      ro   parse_market_leverage_tiers$Exchange.parse_market_leverage_tiers  r}  rw   c                 2    [        U R                  S-   5      e)Nz* fetchLeverageTiers() is not supported yetr  rf  s      ro   fetch_leverage_tiersExchange.fetch_leverage_tiers  r  rw   positionc                 2    [        U R                  S-   5      e)Nz% parsePosition() is not supported yetr  )rm   r  r  s      ro   parse_positionExchange.parse_position  r?  rw   c                 2    [        U R                  S-   5      e)Nz/ parseFundingRateHistory() is not supported yetr  r  s      ro   parse_funding_rate_history#Exchange.parse_funding_rate_history  ri  rw   r-  c                 2    [        U R                  S-   5      e)Nz+ parseBorrowInterest() is not supported yetr  r  s      ro   parse_borrow_interestExchange.parse_borrow_interest  r  rw   c                 2    [        U R                  S-   5      e)Nz/ parseIsolatedBorrowRate() is not supported yetr  r  s      ro   parse_isolated_borrow_rate#Exchange.parse_isolated_borrow_rate  ri  rw   c                 2    [        U R                  S-   5      e)Nz$ parseWsTrade() is not supported yetr  r  s      ro   parse_ws_tradeExchange.parse_ws_trade  r  rw   c                 2    [        U R                  S-   5      e)Nz$ parseWsOrder() is not supported yetr  r  s      ro   parse_ws_orderExchange.parse_ws_order  r  rw   c                 2    [        U R                  S-   5      e)Nz) parseWsOrderTrade() is not supported yetr  r  s      ro   parse_ws_order_tradeExchange.parse_ws_order_trade  r  rw   c                 $    U R                  X5      $ r   )parse_ohlcvrm   r   r  s      ro   parse_ws_ohlcvExchange.parse_ws_ohlcv  s    ..rw   c                 2    [        U R                  S-   5      e)Nz) fetchFundingRates() is not supported yetr  rf  s      ro   fetch_funding_ratesExchange.fetch_funding_rates  r  rw   c                 2    [        U R                  S-   5      e)Nz- fetchFundingIntervals() is not supported yetr  rf  s      ro   fetch_funding_intervals Exchange.fetch_funding_intervals  rd  rw   c                 2    [        U R                  S-   5      e)Nz( watchFundingRate() is not supported yetr  r[  s      ro   watch_funding_rateExchange.watch_funding_rate  r  rw   c                 2    [        U R                  S-   5      e)Nz) watchFundingRates() is not supported yetr  rf  s      ro   watch_funding_ratesExchange.watch_funding_rates  r  rw   c                 $    U R                  X5      $ r   )r  rf  s      ro   watch_funding_rates_for_symbols(Exchange.watch_funding_rates_for_symbols  s    ''88rw   rI  r   fromAccount	toAccountc                 2    [        U R                  S-   5      e)Nz  transfer() is not supported yetr  )rm   rI  r   r#  r$  r  s         ro   rS  Exchange.transfer      477%GGHHrw   tagc                 2    [        U R                  S-   5      e)Nz  withdraw() is not supported yetr  rm   rI  r   r  r(  r  s         ro   r   Exchange.withdraw  r'  rw   c                 2    [        U R                  S-   5      e)Nz, createDepositAddress() is not supported yetr  rm   rI  r  s      ro   create_deposit_addressExchange.create_deposit_address  rt  rw   r   c                 2    [        U R                  S-   5      e)Nz# setLeverage() is not supported yetr  )rm   r   r@  r  s       ro   set_leverageExchange.set_leverage  rE  rw   c                     U R                   S   (       a$  U R                  U/U5      nU R                  X15      $ [        U R                  S-   5      e)Nr  z% fetchLeverage() is not supported yet)rR  fetch_leveragesr  r   r  )rm   r@  r  	leveragess       ro   fetch_leverageExchange.fetch_leverage  sG    88$%,,fXv>I>>)44tww)PPQQrw   c                 2    [        U R                  S-   5      e)Nz& fetchLeverages() is not supported yetr  rf  s      ro   r4  Exchange.fetch_leverages  r  rw   hedgedc                 2    [        U R                  S-   5      e)Nz' setPositionMode() is not supported yetr  )rm   r:  r@  r  s       ro   set_position_modeExchange.set_position_mode      477%NNOOrw   c                 2    [        U R                  S-   5      e)Nz! addMargin() is not supported yetr  rm   r@  r   r  s       ro   
add_marginExchange.add_margin  r  rw   c                 2    [        U R                  S-   5      e)Nz$ reduceMargin() is not supported yetr  r@  s       ro   reduce_marginExchange.reduce_margin  r  rw   c                 2    [        U R                  S-   5      e)Nz! setMargin() is not supported yetr  r@  s       ro   
set_marginExchange.set_margin  r  rw   ri  c                 2    [        U R                  S-   5      e)Nz+ fetchLongShortRatio() is not supported yetr  rm   r@  ri  r  s       ro   fetch_long_short_ratioExchange.fetch_long_short_ratio  r  rw   c                 2    [        U R                  S-   5      e)Nz2 fetchLongShortRatioHistory() is not supported yetr  rm   r@  ri  r  r  r  s         ro   fetch_long_short_ratio_history'Exchange.fetch_long_short_ratio_history  r  rw   rl   c                 2    [        U R                  S-   5      e)a  
fetches the history of margin added or reduced from contract isolated positions
:param str [symbol]: unified market symbol
:param str [type]: "add" or "reduce"
:param int [since]: timestamp in ms of the earliest change to fetch
:param int [limit]: the maximum amount of changes to fetch
:param dict params: extra parameters specific to the exchange api endpoint
:returns dict[]: a list of `margin structures <https://docs.ccxt.com/#/?id=margin-loan-structure>`
z4 fetchMarginAdjustmentHistory() is not supported yetr  )rm   r@  rl   r  r  r  s         ro   fetch_margin_adjustment_history(Exchange.fetch_margin_adjustment_history  s     477%[[\\rw   
marginModec                 2    [        U R                  S-   5      e)Nz% setMarginMode() is not supported yetr  )rm   rT  r@  r  s       ro   set_margin_modeExchange.set_margin_mode  r?  rw   c                 2    [        U R                  S-   5      e)Nz6 fetchDepositAddressesByNetwork() is not supported yetr  r-  s      ro   "fetch_deposit_addresses_by_network+Exchange.fetch_deposit_addresses_by_network  s    477%]]^^rw   1hc                 2    [        U R                  S-   5      e)Nz0 fetchOpenInterestHistory() is not supported yetr  rN  s         ro   fetch_open_interest_history$Exchange.fetch_open_interest_history  r}  rw   c                 2    [        U R                  S-   5      e)Nz) fetchOpenInterest() is not supported yetr  r[  s      ro   fetch_open_interestExchange.fetch_open_interest  r  rw   c                 2    [        U R                  S-   5      e)Nz* fetchOpenInterests() is not supported yetr  rf  s      ro   fetch_open_interestsExchange.fetch_open_interests  r  rw   c                 2    [        U R                  S-   5      e)Nz signIn() is not supported yetr  rY  s     ro   sign_inExchange.sign_in  r  rw   c                 2    [        U R                  S-   5      e)Nz+ fetchPaymentMethods() is not supported yetr  rY  s     ro   fetch_payment_methodsExchange.fetch_payment_methods  r  rw   c                 P    U R                  U5      n[        U5      n[        U5      $ r   )r    r  r  )rm   r   stringifiedNumberconvertedNumbers       ro   r8  Exchange.parse_to_int   s+     !11&9 12?##rw   c                 z    U R                  U5      nUR                  S5      S:  a  [        U5      $ [        U5      $ )Nr  r   )r    r  r  r  )rm   r   stringVersions      ro   parse_to_numericExchange.parse_to_numeric'  s=    --f5
 c"a'''=!!rw   r  c                 4    U R                  US-  5      nUS:H  $ r<  )rq  )rm   r  ress      ro   is_round_numberExchange.is_round_number1  s!     ##UQY0axrw   rn   c                 r    U R                  X5      nU R                  U R                  U5      5      nUc  U$ U$ r   )r  r  r  )rm   rn   r  r  r  finals         ro   safe_number_omit_zeroExchange.safe_number_omit_zero7  s:      *!!$.."78 %|9E9rw   c                 >    U R                  XU5      nUb  US:X  a  g U$ rD  )r  )rm   rn   r  r  r  s        ro   safe_integer_omit_zeroExchange.safe_integer_omit_zero<  s)    %%c=		Qrw   c                 *   U R                  5         U R                  5         U R                  (       a  U R                  U R                  5        U R	                  5         U R                  U R                  SSS5      nU(       a  U R                  U5        g g )Nr   r   F)create_networks_by_id_objectfeatures_generatorrO  rQ  init_rest_rate_limiterr  r   r   )rm   	isSandboxs     ro   r   Exchange.after_constructB  so    ))+!<<T\\*##%$$T\\9iO	!!), rw   c                    U R                   b  U R                  b(  U R                   S:X  a  [        U R                  S-   5      eU R                  nU R                   S:  a  SU R                   -  nSSSU R	                  U R
                  SS5      US.nU R                  c  0 OU R                  nU R                  X#5      U l        U R                  5         g )	Nr   z%.rateLimit property is not configuredr   r   gMbP?maxRequestsQueuera  )r%  capacityr   maxCapacity
refillRate)	r  r  r   	MAX_VALUEr  r   tokenBucketrX  r  )rm   r  defaultBucketexistingBuckets       ro   r  Exchange.init_rest_rate_limiterP  s    >>!dgg&9dnnPR>R*Q QRR^^
>>AT^^+J,,T\\;MtT$
 !% 0 0 8t?O?O;;}Erw   c                    U R                   c  g U R                   n0 U l         / SQnSS/n[        S[        U5      5       H  nX$   nXQ;  a  S U R                   U'   M  US:X  a!  U R                  XS 5      U R                   U'   MD  0 U R                   U'   [        S[        U5      5       H)  nX6   nU R                  XU5      U R                   U   U'   M+     M     g )N)r  r  r  r  linearinverser   r  )featuresr  r  features_mapper)rm   initialFeaturesunifiedMarketTypessubTypesr   
marketTypejsubTypes           ro   r  Exchange.features_generatora  s     == --Ai(q#012A+.J1,0j)'040D0D_bf0gDMM*-02DMM*-"1c(m4"*+=A=Q=QRaov=wj1': 5 3rw   r  r  r  c                    Ub  X   U   OX   nUc  g U R                  US5      nUb4  U R                  US5      nU R                  X5      nU R                  Xd5      nSU;   af  U R	                  US   S5      nXtS   S'   XtS   S'   US:X  a  SUS   S'   S	US   ;  a  SUS   S	'   U R                  US   S
   S5      c  SUS   S
   S'   [        UR                  5       5      n[        S[        U5      5       HI  n	X   n
XJ   nU R                  U
S/5      (       a  M%  Uc  M*  SU;  d  M2  U R                  U
/ SQ5      US'   MK     U$ )Nextendsr  attachedStopLossTakeProfitstopLoss
takeProfitr  Fr:  r   timeInForceGTCTr   r   symbolRequired)r  r  r  )r  r  r  r   r  r   r  r  r  r  r  )rm   r  r  r  featuresObj
extendsStr	extendObjr  r  r   r  featureBlocks               ro   r  Exchange.features_mapper  s}   ?F?Ro1':YhYt**;	B
!))K;K,,_II**9BK
 K'NN;}#=?[\E5:&z27<&|4V#7<M*84"k-&@@=BK.z:~~k-8GOWCGM*=9%@K$$&'q#d)$A'C&+L==yk22|7O(L859]]3Hu5vL!12 % rw   
methodName	paramNamec                 X    U R                  U5      nU R                  US   US   X#U5      $ )a  
self method is a very deterministic to help users to know what feature is supported by the exchange
:param str [symbol]: unified symbol
:param str [methodName]: view currently supported methods: https://docs.ccxt.com/#/README?id=features
:param str [paramName]: unified param value, like: `triggerPrice`, `stopLoss.triggerPrice`(check docs for supported param names)
:param dict [defaultValue]: return default value if no result found
:returns dict: returns feature value
rl   r  )r  feature_value_by_type)rm   r@  r  r  r  r  s         ro   feature_valueExchange.feature_value  s3     V$))&.&:KZdpqqrw   c                 "   U R                   c  U$ Uc  U$ XR                   ;  a  U$ U R                   U   c  U$ U R                   U   nUc	  US:w  a  U$ O;X R                   U   ;  a  U$ U R                   U   U   c  U$ U R                   U   U   nUc  Ub  U$ U$ X6;  a  U$ Xc   nUc  U$ Uc  Ub  U$ U$ UR                  S5      nUS   n	U R                  US5      n
X;  a  U$ U R                  Xy5      nUc  Xy   $ U
c  Xy   $ XU	   ;  a  U$ Xy   U
   $ )a  
self method is a very deterministic to help users to know what feature is supported by the exchange
:param str [marketType]: supported only: "spot", "swap", "future"
:param str [subType]: supported only: "linear", "inverse"
:param str [methodName]: view currently supported methods: https://docs.ccxt.com/#/README?id=features
:param str [paramName]: unified param value(check docs for supported param names)
:param dict [defaultValue]: return default value if no result found
:returns dict: returns feature value
r  r  r   r   )r  r   r  r  )rm   r  r  r  r  r  methodsContainer
methodDictsplited	parentKeysubKeyr  s               ro   r  Exchange.feature_value_by_type  s    == mm+==$,==4?V### $ }}Z88##}}Z(19###}}Z8A$0$<<SCSS.%1
$0$<<M:M//#&AJ	!!'1-'^^J:
(( ~!,,33##(00rw   c                     US-   $ )Nz	  = Falserq   rm   r@  s     ro   orderbook_checksum_message#Exchange.orderbook_checksum_message  s    ##rw   c                     U R                  U R                  U R                  S0 5      5      nU R                  XR                  U R                  S0 5      5      U R                  S'   g )NnetworksnetworksById)invert_flat_string_dictionaryr  r   rX  )rm   networkIdsToCodesGenerateds     ro   r  %Exchange.create_networks_by_id_object  s^    %)%G%GX\XdXdfprtHu%v"'+{{3M_c_k_km{}  PA  (B^$rw   c                 $    SSS0SS0SS0SS	0S
.0$ )NdefaultNetworkCodeReplacementsERC20ETHTRC20TRXCRC20CRONOSBRC20r   )r  r  CROr  rq   r  s    ro   r   Exchange.get_default_options  s4    ,''*!5)	/
 	
rw   ri  c                    U R                  S U5      nU R                  US5      nU R                  US5      nU R                  US5      nU R                  US5      nUb9  Uc  Ub  [        R                  " XV5      nOUb  Uc  [        R                  " XF5      nUb@  Ub=  Uc:  [        R
                  " XE5      (       a  Sn[        R
                  " XT5      (       a  SnU R                  US5      nUb  U R                  US5      US'   U R                  US	5      nU R                  US
0 5      n	U R                  US5      UU R                  U5      UU R                  US5      U R                  US5      U R                  US5      U R                  US5      US   U R                  U5      U R                  U5      U R                  U5      U R                  US5      UU	S.$ )Nro  beforeafterr   outinr4  r   r  r-  r  r:   referenceIdreferenceAccountrl   rI  r}  )r  r  r  ro  r:   r  r  rl   r  r   r  r  r}  r4  r-  )safe_currencyr  r!   
string_sub
string_add	string_gtr  r  r  r  r  r  )
rm   ri  r  ro  r  r  r   r4  r  r-  s
             ro   safe_ledger_entryExchange.safe_ledger_entry  s   %%dH5$$UK8	!!%2  0!!%2~%"3 ++E:#**6:%"3 $$V33 %I$$U33 $IooeU+?**37CK%%e[9	~~eVR0""5$/"Y/"''y9++E=A $ 0 08J K$$UF3 (''/''/&&u-&&uh7
 	
rw   c                     U R                  US0 5      n[        UR                  5       5      n[        U5      nUS:w  Ga  [	        SU5       GH  nX5   nX&   nU R                  US5      nU R                  US5      n	U	b  U(       a  XS'   U R                  US5      n
U R                  US5      nUb  U
(       a  XS'   U R                  US5      nUc+  U(       a  U
(       a  SUS   U   S'   OUb  U
b  SUS   U   S'   U R                  US   U   S5      nU R                  US5      nUb  U(       a  XS'   U R                  US5      nU R                  US5      nUb  [        R                  " X5      (       a  U R                  U5      US'   U R                  US	5      nU R                  US	5      nUb  [        R                  " UU5      (       a  U R                  U5      US	'   U R                  US
5      nU R                  US
5      nUc  0 US
'   U R                  US5      nU R                  US5      nUc  0 US
   S'   U R                  US5      nU R                  US5      nU R                  US5      nU R                  US5      nUb  [        R                  " UU5      (       a  U R                  U5      US
   S   S'   Ub  [        R                  " UU5      (       a  U R                  U5      US
   S   S'   U R                  US5      nU R                  US5      nUc  0 US
   S'   U R                  US5      nU R                  US5      nU R                  US5      nU R                  US5      nUb  [        R                  " UU5      (       a  U R                  U5      US
   S   S'   Ub  [        R                  " UU5      (       d  GM|  U R                  U5      US
   S   S'   GM     U R                  S S S S S S S S S S S 0 0 S S S.S S S.S.S.U5      $ )Nr  r   r   r   activeTFr4  r   r   r   r   r   )r   r   )r-  r  	numericIdrI  r   rl   rd   r  r   r   r4  ry  r  r   )r  r  r  r  r  r   r  r!   	string_ltr  r  rX  ) rm   r  r  r  r&  r   r  networkr   currencyDepositr   currencyWithdrawr  currencyActiver4  feeMainr   precisionMainr   
limitsMainlimitsDepositlimitsDepositMainlimitsDepositMinlimitsDepositMaxlimitsDepositMinMainlimitsDepositMaxMainlimitsWithdrawlimitsWithdrawMainlimitsWithdrawMinlimitsWithdrawMaxlimitsWithdrawMinMainlimitsWithdrawMaxMains                                    ro   safe_currency_structure Exchange.safe_currency_structure/  s^   >>(J;HMMO$TQ;1f%g"-..)<"&..9"E"*g*1Y'>>':>#'>>(J#G #+x+3Z(:>8>B,S1(; ,1E>C,S1(;(<S(A8L!%(!C!)V)/X&&&w6**8U;?g&7&7&E&E&*&7&7&<HUO ,,WkB	 $ 0 0; G (G,=,=i,W,W,0,=,=i,HH[):!^^Hh?
%)+HX& $vy A$(NN:y$I!$,46HX&y1#'#3#3M5#I #'#3#3M5#I '+'7'78I5'Q$'+'7'78I5'Q$'/73D3DEUWk3l3l;?;L;LM];^HX&y1%8'/73D3DEUWk3l3l;?;L;LM];^HX&y1%8!%
!C%)^^J
%K"%-57HX&z2$($4$4^U$K!$($4$4^U$K!(,(8(89KU(S%(,(8(89KU(S%(0G4E4EFWYn4o4o<@<M<MN_<`HX&z259(0G4E4EFWYn4o4o<@<M<MN_<`HX&z259E &F {{  
  	
0 1 	rw   c           	         0 SS _SS _SS _SS _SS _SS _SS _SS _S	S _S
S _SS _SS _SS _SS _SS _SS _SS _0 SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS _SS S S S S S._SS S S .S S S .S S S .S S S .S!._S"S S S#._S$S _S%S _EnUbT  U R                  X!5      nUS   (       a7  US   c  S&US'   US   c  S&US'   US   c  S&US'   US   c  S&US'   US   c  S&US'   U$ U$ )'Nr  lowercaseIdr@  r  r  settlebaseIdquoteIdsettleIdrl   r  r  r  r  r  indexr  contractr  r  r  r   r   contractSizeexpiryexpiryDatetimestrike
optionTyper   )r   r   r   r  r  r   r   r   r  )crossisolatedcreatedr-  F)rX  )rm   r  cleanStructurerV  s       ro   safe_market_structureExchange.safe_market_structure  sw   <
$<
4<
 d<
 D	<

 T<
 d<
 d<
 t<
 <
 D<
 D<
 d<
 D<
 d<
 d<
  T!<
" d#<
$ %<
& d'<
( t)<
* t+<
, T-<
. T/<
0 D1<
2 d3<
4 d5<
6 d7<
8 $9<
: ;<
H 
  
  
  I<
l  m<
t tu<
v Dw<
z [[8Ff~*%-).F:&&>)%*F6N(#+',F8$(#+',F8$'?*&+F7OMrw   c                 
   / nU R                  5       U l        U R                  U R                  U5      SSS5      n[	        S[        U5      5       H  nXE   nUS   U R                  ;   a5  U R                  US      nUR                  U5        XpR                  US   '   OU/U R                  US   '   U R                  U R                  5       U R                  U R                  S.U R                  S   U5      nUS   (       a  SUS'   OUS	   (       a  S	US'   OS US'   UR                  U5        M     U R                  U R                  US
5      5      U l        U R                  U R                  5      n	U R                  U R                  5      n
[!        U	R#                  5       5      U l        [!        U
R#                  5       5      U l        SnUb$  [!        UR#                  5       5      n[        U5      nUS:  a2  U R                  U R                  U R(                  U5      5      U l        GO/ n/ n[	        S[        U5      5       GH$  nX5   nU R*                  [,        :X  a  SOU R/                  S5      nU R1                  US0 5      nSU;   aj  U R3                  U R5                  USS5      U R7                  US5      U R9                  US5      U R;                  USSU5      S.5      nUR                  U5        SU;   d  M  U R3                  U R5                  USS5      U R7                  US5      U R9                  US5      U R;                  USSU5      S.5      nUR                  U5        GM'     U R                  USSS5      nU R                  USSS5      nU R                  U R                  US5      5      U l        U R                  U R                  US5      5      U l        U RA                  X5      nU RC                  US5      n[!        UR#                  5       5      n/ n[	        S[        U5      5       H  nUU   nU RE                  UU/ 5      nU RG                  US5      n[	        S[        U5      5       H>  nUU   nU R*                  [H        :X  a  US   US   :  a  UOUnM.  US   US   :  a  UOUnM@     UR                  U5        M     U R                  US5      nU R                  U R                  U R(                  U R                  US5      5      5      U l        U RK                  U R(                  S5      U l&        U R                  U R(                  5      n[!        UR#                  5       5      U l'        U R                  $ )Nr  Tr   r  )r   r   r   r  r  r  r@  r  z1e-8r   r  r  baseNumericIdr   )r  r  rI  r   r  r  quoteNumericIdr   rI  Fr   r   )(r  rP  r  r_  r  r  rh  r   r 	  r   r   ry  rF  rr  rO  rL  r  r  rM  idsr   r  r   r  r  r  r  r  r  r  baseCurrenciesquoteCurrenciesr  rj  r  r  r   rs  currencies_by_idr  )rm   rO  r   rv  marketValuesr   r  marketsByIdArrayr  marketsSortedBySymbolmarketsSortedByIdnumCurrenciesr  r	  r	  defaultCurrencyPrecisionmarketPrecisionr  allCurrenciesgroupedCurrenciesr  resultingCurrenciesrI  groupedCurrenciesCodehighestPrecisionCurrencyr  currentCurrencysortedCurrenciescurrenciesSortedByCodes                                ro   rQ  Exchange.set_markets  sK   !88: ||DMM'$:FD$Oq#l+,A OET{d000$($6$6uT{$C  ''.2B""5;/38'""5;/%%d&@&@&B!^^++E yy#U,F h$,y!	"$-y!$(y!MM&!% -& ++DMM&(,KL $T\\ : LL););<16689)..01!
)*DIM1"2243C3CDOOU_3`aDON O1c&k*151C1C~1U1\`\m\mnt\u("&..b"IV##;;"006J%)%6%6v%O $ 0 0 @%)%6%6PXZr%s	=  H #))(3f$#;;"00GL%)%6%6v?O%P $ 0 0 A%)%6%6QXZr%s	=  H $**84' +( "\\.&%LN"ll?FE2NO"&"6"6t}}^U[7\"]D#'#7#7oW]8^#_D  --nNM $mV D*//12E"$1c%j)Qx(,7H$PR(S%+/??;PRS+T(q#&;"<=A&;A&>O))Y6GVWbGcf~  @K  gL  HL?  Sk0GVWbGcf~  @K  gL  HL?  Sk0 > $**+CD *  $||,?H"2243C3CDOOUYUbUbcsu{U|3}~DO $ 2 24??D I!%doo!>05578
||rw   c                    U R                   UR                   :w  a!  [        U R                   S-   US   -   S-   5      eUR                  (       d  [        S5      eUR                  U l        UR                  U l        UR
                  U l        UR                  U l        UR                  U l        UR                  U l        UR                  U l	        UR                  U l
        UR                  U l        U R                  UR                  S/ 5      n[        S[        U5      5       H5  nX#   nUR                  U   c  M  UR                  U   U R                  U'   M7     U $ )NzK shareMarkets() can only share markets with exchanges of the same type(got r  )zosetMarketsFromExchange() source exchange must have loaded markets first. Can call by using loadMarkets functionmarketHelperPropsr   )r  r   rO  r   rP  rM  r	  r   r	  r	  r	  r  r  r   r  r  )rm   sourceExchangesourceExchangeHelpersr   helpers        ro   set_markets_from_exchange"Exchange.set_markets_from_exchange7  sY   77n'''#DGG.{${  M  NR  S  %S  VY  %Y  Z  Z%%  !R  S  S%--+99%--!%%(33 . ? ?,;;-==#))
 $~/E/EGZ\^ _q#345A*-F%%f-9'5'='=f'EV$ 6 rw   currentRestInstanceparentRestInstancewsBaseDescribec                     U R                  UR                  5       UR                  5       5      nU R                  XC5      nU$ r   )r   r   )rm   r!	  r"	  r#	  extendedRestDescribesuperWithRestDescribes         ro   %get_describe_for_extended_ws_exchange.Exchange.get_describe_for_extended_ws_exchangeP  sA    #//0B0K0K0MObOkOkOmn $ 0 01E V$$rw   r   c                    U R                  U/ SQ5      n[        UR                  5       5      n0 US'   0 US'   0 US'   0 n[        S[	        U5      5       GHC  nX5   nU R                  X   S5      nU R                  X   S5      nU R                  X   S5      n	U R                  X   S5      n
Uc  Ub  U	b  [        R                  " X5      nUc  Ub  U	b  [        R                  " Xy5      nU	c  Ub  Ub  [        R                  " Xx5      n	U R                  U5      X   S'   U R                  U	5      X   S'   U R                  U5      X   S'   X   S   US   U'   X   S   US   U'   X   S   US   U'   U
c  GM$  U R                  U
5      X   S'   X   S   XF'   GMF     [        UR                  5       5      n[	        U5      nU(       a  XAS'   U$ )N)r-  r  r  freeusedtotalr*	  r+	  r,	  r   debt)
r  r  r  r  r  r  r!   r  r  r  )rm   r   balancesr  debtBalancer   rI  r,	  r*	  r+	  r-	  debtBalanceArrayr&  s                ro   safe_balanceExchange.safe_balanceU  s   99W&`aX]]_%q#e*%A8D$$W]G<E##GM6:D##GM6:D##GM6:DD$44;K**465#44;K))%65#44;K))%6$($5$5d$;GM&!$($5$5d$;GM&!%)%6%6u%=GM'"$+M&$9GFOD!$+M&$9GFOD!%,]7%;GGT"(,(9(9$(?f%$+M&$9!) &*   0 0 23%&)FOrw   c                    U R                  U R                  US5      5      nU R                  US5      nU R                  US5      nU R                  US5      nU R                  U R                  US5      5      nU R                  U R                  US5      5      nU R                  US5      n	U R                  US5      n
U R                  US	5      nU R                  US
5      nUS L nUS L nU	S L nU R                  US5      nUS L nU R                  US5      S L nU
S L nUS L nU=(       d    UnU R	                  US/ 5      n/ nU R                  US5      S L=(       d    U R                  US5      S L=(       d    U R                  US5      S LnU(       d  U(       d  U(       Gak  U R                  USU5      nU R                  US5      nUS L=(       a    SU;   =(       a    SU;   nU(       d  U R                  UU5      nOUnSn[        U[        5      nU(       a  [        U5      nU(       Ga  US:  Ga  US   c  US   S   US'   US	   c  US   S	   US	'   US   c  US   S   US'   US   c  US   S   US'   U(       a  SnU(       a  Sn[        S[        U5      5       GHk  nUU   nU R                  US5      n U(       a  U b  [        R                  " UU 5      nU R                  US5      n!U(       a  U!b  [        R                  " UU!5      nU(       a  U R                  US5      n
U(       a  U R                  US	5      nU R                  US5      n"U(       a  U"b  U	c  U"n	O[        U	U"5      n	U(       d  M  U R                  US5      n#U#bE  [        S[        U#5      5       H)  n$U#U$   n%UR                  U R                  0 U%5      5        M+     GM2  U R                  US5      n%U%c  GMJ  UR                  U R                  0 U%5      5        GMn     U(       a  U R                  (       a  U R!                  U5      OUn&[        U&5      n'[        SU'5       HD  nU R#                  U&U   S5      U&U   S'   SU&U   ;   d  M)  U R#                  U&U   S5      U&U   S'   MF     U(       dX  U'S:X  aR  U R%                  U5      n(U R#                  U(S5      U(S'   SU(;   a  U R#                  U(S5      U(S'   U&R                  U(5        U&US'   U(       a  U'S:X  a  U&S   US'   Uc%  Ub  Ub  [        R                  " XT5      nOUS:X  a  UnUc(  Ub  Ub  [        R&                  " X45      nOUS:X  a  Ub  UnUc%  Ub  Ub  [        R&                  " X55      nOUS:X  a  SnU R)                  USS5      n)U R+                  U R                  USS5      5      n*Uco  Ubl  Ubi  [        R,                  " US5      (       aM  [        R.                  " UU*5      n+U)(       a  [        R0                  " U+U5      nO[        R0                  " UU+5      nUS L=(       d    US Ln,U(       aa  Ub^  U,(       aW  S n-Uc  Un-OUn-[        R.                  " UU*5      n+U)(       a  [        R0                  " U+U-5      nO[        R.                  " U+U-5      nU R                  US5      n.US L =(       d    [        R2                  " US5      n/U/(       a  U.S:X  a  Un[        S[        U5      5       H  nUU   n0U R#                  U0S5      U0S'   U R#                  U0S5      U0S'   U R#                  U0S5      U0S'   U R5                  U0S0 5      n%U R#                  U%S5      U%S'   SU%;   a  U R#                  U%S5      U%S'   U R	                  U0S/ 5      n1[        S[        U15      5       H  n$U R#                  U1U$   S5      U1U$   S'   M      U1U0S'   U%U0S'   M     U R                  US5      n2U R                  US 5      n3U2c)  U(       d  U R                  US5      S:X  a  S!n2U3(       a  S"n2OU3c  U2S":H  n3U R                  US5      n4U R                  US#5      n5U R                  US$5      n6U6c  U R7                  U45      n6U R9                  U R;                  USS%5      5      n7U R9                  U R                  US5      5      n8U R9                  U R                  US5      5      n9U R                  U0 SU R                  US5      _S&U R                  US&5      _SU4_S$U6_SU
_SU R                  US5      _S	U_SU	_S#U5_SU R9                  U5      _SU R9                  U5      _SU R9                  U5      _SU R9                  U5      _SU R9                  U5      _SU R9                  U5      _SU2_S U3_UU R                  US'5      U7U7U8U9UU R                  US5      S(.E5      $ ))Nr   	remainingfilledr   averager   lastTradeTimestampr@  r  r}  r4  ry  triggerPricestopLossPricetakeProfitPricer   r   r-  r  rl   r  r  r  rater   closedr  Fr  r  r  postOnlyIOCPOlastUpdateTimestampr  	stopPriceclientOrderId
reduceOnly)r   rC	  rA	  r8	  r:	  r9	  r}  r4  )r  r  r  r  r  parse_tradesre   r  r  r  r!   r  r   rh  rX  
reduceFeesreduce_fees_by_currencyr  r   r  r   r    r  
string_mul
string_divstring_equalsr  r  r  r  ):rm   r  r  r   r4	  r5	  r   r6	  r   lastTradeTimeTimestampr@  r  r}  parseFilled	parseCostparseLastTradeTimeTimestampr4  parseFee	parseFeesparseSymbol	parseSideshouldParseFeesry  r   isTriggerOrSLTpOrder	rawTrades
firstTradetradesAreParsedtradesLengthisArrayr   r  tradeAmount	tradeCosttradeTimestamp	tradeFeesr  tradeFeereducedFeesreducedLengthfeeCopyr  r  filledTimesContractSizecostPriceExistsmultiplyPrice	orderType
emptyPriceri  	entryFeesr  r=	  r  r@	  r  r8	  r:	  r9	  s:                                                             ro   
safe_orderExchange.safe_orderw  s
     0 0 AB$$UK8	!!%2v...!1!1%!CDt//w?@!%!2!25:N!O!!%2v.!!%2~T\	'='E#ooeU+4KOOE62d:	nDL	"/i~~eVR0!%!1!1%!HPT!T  "OY]YiYijo  rA  ZB  JN  ZN  !L  UY  Ue  Ue  fk  m~  U  GK  UK)x@I
 A6J *$ 6kVz=QkX\`jXjO"**9f="L .G"6{L1,?*&,Qi&9E(O=($*1If$5E&M=($*1If$5E&M;&"()G"4E$K FDq#f+.A"1IE"&"2"25("CK"(?!(!3!3FK!H $ 0 0 ?I i&;&11$	B"!%!1!1%!B #//v>%)__UK%HN28R195C2589OQ_5`2&$(OOE6$B	$0%*1c)n%=+4Q< $DKKH,E F &> (,ue'DH'3 $DKKH,E F7 /8 @D$66t<UYK,M1m,)-)9)9+a.&)QAv&[^+-1-=-=k!nf-UKN6* - !!3**3/"&"2"27F"CW$&*&6&6w&GGFO""7+'E&M]a/*1~e>!i&; ++F>8#>!i&; ++F>8#(:!f&8#..v>	8#	..E:,,T__V^UV-WX ?")9w?P?PQWY\?]?]*1*<*<V\*R'%001H$OG%007NOG #$.FE4E&,/ M % '&-&8&8&N#))*A=Q))*A=QOOE62	tmI(=(=eS(I
90Eq#f+&A1IE"..uh?E(O!--eW=E'N ,,UF;E&M~~eUB7H#//&AHV!#'#3#3Hf#E ufb9I1c)n-'+'7'7	!f'M	!V$ .%E&M#E%L ' &&um<??5*5'T-=-=eV-LPX-X#""d*H%%e[9	"//7LM##E:6||I.H((););E>S^)_`++D,<,<UDU,VW))$*:*:5/*RS{{5 #
$""5$/#
T--e_E#
 #
 	#

 f#
 D$$UF3#
 D#
 !"8#
 "#6#
 T&&u-#
 d''/#
 D%%d+#
 t((1#
 d''/#
 **95#
  ;!#
" ##
$ //%>%(.*??5%03#
  	rw   ordersc                 6   / n[        U[        5      (       aS  [        S[        U5      5       H9  nU R	                  X   U5      nU R                  X5      n	UR                  U	5        M;     O[        UR                  5       5      n
[        S[        U
5      5       HP  nX   nU R                  SU0X   5      nU R	                  X5      nU R                  X5      n	UR                  U	5        MR     U R                  US5      nUb  US   OS nU R                  XnX45      $ )Nr   r  r  r@  )
re   r  r  r  r  rX  rh  r  r  filter_by_symbol_since_limit)rm   ri	  r  r  r  r  resultsr   r  r  r	  r  
idExtendedparsedOrderr@  s                  ro   parse_ordersExchange.parse_ordersS  s    , fd##1c&k*))&)V<F3u% +
 v{{}%C1c#h'V![[$VZ@
"..zBK8u% ( ,,w4&,&8!t00%OOrw   r   r  r   feeRatec	                 D   US:X  a  US:X  a  [        U R                  S-   5      eU R                  U   n	U R                  U	SS5      n
S nU
S:X  a  US:H  nOU
S:X  a  US	:H  nOU
S:H  nU R	                  U5      nS nU(       a*  U R	                  U5      n[
        R                  " X5      nSnOS
nU	S   (       d  SnUS:X  a  SnUb  U R	                  U5      OU R                  X5      n[
        R                  " X5      nUX   U R                  U5      U R                  U5      S.$ )Nr  r   z 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.feeSider  r   sellgivebuyr  r  r  r   )rl   r  r;	  r   )r   r  rO  r  r    r!   rG	  r  )rm   r@  rl   r  r   r   takerOrMakerrq	  r  r  rs	  useQuoter   r  priceStringr;	  s                   ro   calculate_fee_with_rate Exchange.calculate_fee_with_rate{  sC   8 7#DGG  /c  %c  d  df%""69g>ev~Hu}H ')H$$V,//6K%%d8DCCf~C8"L292Et$$W-DL\L\]cLr!!$- %%d+%%d+	
 	
rw   c           
      ,    U R                  XX4XVSU5      $ )a  
calculates the presumptive fee that would be charged for an order
:param str symbol: unified market symbol
:param str type: 'market' or 'limit'
:param str side: 'buy' or 'sell'
:param float amount: how much you want to trade, in units of the base currency on most exchanges, or number of contracts
:param float price: the price for the order to be filled at, in units of the quote currency
:param str takerOrMaker: 'taker' or 'maker'
:param dict params:
:returns dict: contains the rate, the percentage multiplied to the order amount to obtain the fee amount, and cost, the total value of the fee in units of the quote currency, for the order
N)rz	  )rm   r@  rl   r  r   r   rw	  r  s           ro   calculate_feeExchange.calculate_fee  s     ++F$]acijjrw   liquidationc                    U R                  US5      nU R                  US5      nU R                  US5      nU R                  US5      nU R                  US5      nUc  Ub  Ub  Ub  [        R                  " X45      nUc  Ub  Ub  [        R                  " Xe5      nU R                  U5      US'   U R                  U5      US'   U R                  U5      US'   U R                  U5      US'   U R                  U5      US'   U$ )N	contractsr  r   	baseValue
quoteValue)r  r!   rG	  r  )rm   r	  r  r	  r  r   r	  r	  s           ro   safe_liquidationExchange.safe_liquidation  s   $$[+>	''?  g6$$[+>	%%k<@
I$9@X_d_p**9CIY%:AR ++I=J#'#4#4Y#?K &*&7&7&EN##007G#'#4#4Y#?K $($5$5j$AL!rw   c                    U R                  US5      nU R                  US5      nU R                  US5      nUct  U R                  US5      nUnUbG  U R                  USS5      nU(       a  [        R                  " SU5      n[        R                  " Xv5      n[        R                  " Xs5      nU R                  U5      u  pXS'   XS	'   U R                  U5      US'   U R                  U5      US'   U R                  U5      US'   U$ )
Nr   r   r   r  r  Fr0  r4  ry  )r  r   r!   rH	  rG	  parsed_fee_and_feesr  )rm   r  r  r   r   r   r  rc	  r  	resultFee
resultFeess              ro   
safe_tradeExchange.safe_trade  s   !!%2  0v.<++FNCL!M'..EB$+$6$6sE$BM ' 2 2= O%%m<D $ 8 8 ?	 e"f++F3h**51g))$/frw   c                     S nUb[  U R                  U5      nUb  USU-   -  nUb  USU R                  U5      -   -  nUb  USU R                  U5      -   -  nUb  USU-   -  nU$ )Nr1  r   )rm   r  r  r   r   rw	  r  s          ro   create_ccxt_trade_idExchange.create_ccxt_trade_id  s     &&y1BcDj !cD11&999 cD11%888'cL((	rw   	containerc                    U R                  US5      nU R                  US5      nUS LnUS LnU=(       d    UnU(       a  U(       a  U R                  U5      nU(       d  U/nU R                  (       a  U R	                  U5      OUn[        U5      n[        SU5       H  n	U R                  Xy   5      Xy'   M     UnUS:X  a  US   nOUS:X  a  S nUc  S S S.nUc  / nX#/$ )Nr4  ry  r   r   )r   r  )r  r  parse_fee_numericrE	  rF	  r  r  )
rm   r	  r4  ry  
feeDefinedfeesDefinedrR	  r^	  r_	  r   s
             ro   r	  Exchange.parsed_fee_and_fees  s    nnY.~~i0_
$&%4,,S1u@D$66t<UYK,M1m,!%!7!7!G -D!!!n!#; C <D{rw   r4  c                 f    U R                  US5      US'   SU;   a  U R                  US5      US'   U$ )Nr   r;	  )r  )rm   r4  s     ro   r	  Exchange.parse_fee_numeric  s:    &&sF3FS=**37CK
rw   r  providedValuec                 f    [        U5      n[        SU5       H  nX   nX%::  d  M  Us  $    XS-
     $ )Nr   r   )r  r  )rm   r  r	  r&  r   currents         ro   find_nearest_ceilingExchange.find_nearest_ceiling  s<    Sq&!AfG' " A:rw   c                     0 n[        UR                  5       5      n[        S[        U5      5       H&  nX4   nX   n[	        U[
        5      (       d  M"  XRU'   M(     U$ rD  )r  r  r  r  re   r=  )rm   r   reversedr  r   r  r  s          ro   r  &Exchange.invert_flat_string_dictionary  sU    DIIK q#d)$A'CIE%%%"%	 %
 rw   c                 d   0 n[        S[        U5      5       H  nX   nU R                  US5      nUb  UO
[        U5      nUc  M.  U R                  US5      nU R                  US5      nUc  MW  Xb;  a  0 X&'   Uc  SOUn	XU   ;   a)  [        R
                  " X&   U	   S   U5      X&   U	   S'   M  UUS.X&   U	'   Uc  M  XrU   U	   S'   M     / n
[        UR                  5       5      n[        S[        U5      5       H/  n[        X   R                  5       5      nU R                  X5      n
M1     U
$ )Nr   r  r;	  r   r   )r  r   )	r  r  r  r=  r!   r  r  rv  r  )rm   ry  reducedr   r4  rI  feeCurrencyCoder;	  r   rateKeyrV  	feeValuesreducedFeeValuess                ro   rF	   Exchange.reduce_fees_by_currency  sa   \ q#d)$A'C##C4D'+'7dc!fO*''V4''V4<'2/1G,!%"Do66@G@R@RSZSklsStu{S|  C  ADG,W5f= %) $9G,W5 'DH09&A+ %, )*	q#i.)A#IL$7$7$9:&&v@F * rw   c                 v   U R                  U R                  US5      5      nU R                  U R                  USS5      5      nU R                  U R                  US5      5      nU R                  U R                  US5      5      nU R                  U R                  US5      5      nU R                  US5      nU R                  US5      n	U R                  US	5      n
Uc&  [        R                  " U R                  U
5      U	5      nUbO  Uc/  Ub,  [        R
                  " U[        R                  " US
5      5      nUc  Ub  [        R                  " XE5      nOUb  Uc  Ub  [        R                  " US
5      n[        R
                  " S
[        R                  " US5      5      nUb  UO[        R                  " X5      n[        R                  " U[        R
                  " S[        R                  " US5      5      5      nUcD  UbA  [        R                  " U[        R
                  " S[        R                  " US5      5      5      nUc  Ub  Ub  [        R                  " XC5      nOzUbE  UbB  [        R                  " [        R                  " US5      [        R                  " US5      5      nO2Ub/  Ub,  [        R                  " U[        R                  " US5      5      nUb  Uc.  Ub+  [        R                  " [        R                  " XS5      S5      nUc  Ub  [        R
                  " X55      nUc  Ub  [        R                  " US
5      nUc  Ub~  SnUbM  U R                  5       (       a8  U R                  US5      nU R                  US5      nUb  U R                  U5      n[        R                  " [        R
                  " X45      S
U5      nU R                  U R                  U5      5      nU R                  U0 SU R                  U R                  U R                  US5      5      5      _SU R                  US5      _SU R                  U R                  U R                  US5      5      5      _SU R                  US5      _SU R                  U R                  U R                  US5      5      5      _SU R                  U R                  U R                  US5      5      5      _SU R                  U R                  U5      5      _SU_SU_SU R                  U5      _SU R                  U5      _SU R                  U5      _SU R                  U5      _SU R                  U	5      _S	U R                  U
5      _SU R                  US5      _SU R                  US5      _SU R                  US5      0E5      $ )Nopenr  r  changer~   r6	  ru  rs  rt  2100r0     r   r   bid	bidVolumeask	askVolumehighlowpreviousClose
indexPrice	markPrice)r  r  r  r!   rH	  r  r  rG	  is_tick_precisionr  rB  r  rX  r  )rm   r  r  r	  r  r	  r~   r6	  ru  rs  rt  openAddClosedenominatorcalcOpenr   r	  precisionPricecloseParseds                     ro   safe_tickerExchange.safe_tickerk  sq   ~~d..vv>?t11&'6JK 0 0 BC^^D$4$4V\$JK
..!1!1&)!DE/%%fl;
&&v}=<%%dnn[&A:ND}!4**7G4F4Fvs4ST| 1))%8#}!4&11'3?%00g6H6HUZ6[\$($447;M;Ml;h**8W5G5GWM_M_`jlqMr5st| 1))%1C1CCI[I[\fhmIn1op> T%5 ++E8"z'= ++G,>,>z5,QSZSeSefkmrSst!j&< ++D'2D2DZQV2WX!f&8$//0B0B60PRWX
}!3**48}!4**7C85#4	%$*@*@*B*B&*nnV[&IO%)%5%5ow%ON%1$($>$>~$N	!,,W-?-?-LcS\] ''u(=>{{6 $
4$$T^^D4D4DVU4S%TU$
))&+>$
 4$$T^^D4D4DVU4S%TU$
 ))&+>	$

 D%%dnnT5E5Eff5U&VW$
 4$$T^^D4D4DVU4S%TU$
 D%%dnnT&:;$
 [$
 K$
 d''/$
 $++J7$
 t((1$
 D%%d+$
 $++J7$
 4,,[9$
  T--foF!$
" $**6<@#$
$ ))&+>%$
  	rw   c                 2    [        U R                  S-   5      e)Nzb fetchBorrowRate is deprecated, please use fetchCrossBorrowRate or fetchIsolatedBorrowRate insteadr  rm   rI  r   r  s       ro   fetch_borrow_rateExchange.fetch_borrow_rate  s#    477  &J  J  K  	Krw   c                 2    [        U R                  S-   5      e)Nz$ repayCrossMargin is not support yetr  r	  s       ro   repay_cross_marginExchange.repay_cross_margin  r  rw   c                 2    [        U R                  S-   5      e)Nz' repayIsolatedMargin is not support yetr  rm   r@  rI  r   r  s        ro   repay_isolated_marginExchange.repay_isolated_margin  r>  rw   c                 2    [        U R                  S-   5      e)Nz% borrowCrossMargin is not support yetr  r	  s       ro   borrow_cross_marginExchange.borrow_cross_margin  r?  rw   c                 2    [        U R                  S-   5      e)Nz( borrowIsolatedMargin is not support yetr  r	  s        ro   borrow_isolated_marginExchange.borrow_isolated_margin  r  rw   c                 2    [        U R                  S-   5      e)NzY borrowMargin is deprecated, please use borrowCrossMargin or borrowIsolatedMargin insteadr  rm   rI  r   r@  r  s        ro   borrow_marginExchange.borrow_margin  s#    477  &A  A  B  	Brw   c                 2    [        U R                  S-   5      e)NzV repayMargin is deprecated, please use repayCrossMargin or repayIsolatedMargin insteadr  r	  s        ro   repay_marginExchange.repay_margin  s    477%}}~~rw   1mc                 h    SnU R                   S   (       a  Sn[        U R                  S-   U-   5      e)Nr   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" filez" fetchOHLCV() is not supported yetrR  r   r  rm   r@  ri  r  r  r  r  s          ro   fetch_ohlcvExchange.fetch_ohlcv  s5    88M" rG477%IIGSTTrw   c                 h    SnU R                   S   (       a  Sn[        U R                  S-   U-   5      e)Nr   r;  r	  zC fetchOHLCVWs() is not supported yet. Try using fetchOHLCV instead.r	  r	  s          ro   fetch_ohlcv_wsExchange.fetch_ohlcv_ws  s6    88O$ rG477%jjmttuurw   c                 2    [        U R                  S-   5      e)Nz" watchOHLCV() is not supported yetr  rN  s         ro   watch_ohlcvExchange.watch_ohlcv  r  rw   r   c	                 :   / n	U R                  X/ 5      n
U R                  X/ 5      nU R                  X/ 5      nU R                  X/ 5      nU R                  X/ 5      nU R                  X/ 5      n[        S[        U
5      5       H  nU	R                  U(       a  U R	                  U
U5      OU R                  U
U5      U R                  UU5      U R                  UU5      U R                  UU5      U R                  UU5      U R                  UU5      /5        M     U	$ rD  )r  r  r  rh  r  r  r  )rm   r   r  r	  r	  r	  r  r  r=  rV  
timestampsopenshighslowsclosesvolumesr   s                    ro   convert_trading_view_to_ohlcv&Exchange.convert_trading_view_to_ohlcv  s    ^^Fr:
vR0vR0~~f2.r2..4q#j/*AMM46!!*a0D<O<OPZ\]<^q)q)a(*+  + rw   c	                    0 n	/ X'   / X'   / X'   / X'   / X'   / X'   [        S[        U5      5       H  n
U(       a  X   S   OU R                  X   S   S-  5      nX   nUR                  U5        X   nUR                  X   S   5        X   nUR                  X   S   5        X   nUR                  X   S   5        X   nUR                  X   S   5        X   nUR                  X   S   5        M     U	$ )Nr   ra  r   r#  rv  r!     )r  r  r8  rh  )rm   r   r  r	  r	  r	  r  r  r=  rV  r   r   resultTimestamp
resultOpen
resultHigh	resultLowresultCloseresultVolumes                     ro   convert_ohlcv_to_trading_view&Exchange.convert_ohlcv_to_trading_view  s   q#f+&A!#1):):69Q<$;N)OB$/O""2&Jfil+Jfil+IVYq\* -Kvy|,!>L	!- ' rw   c                    SnU R                  U R                  U0 5      nU R                  USS5      n U R                  USS5      SLa  g U R                  USS5      n	S n
SnSnX:  a   [        X5      " 0 5      n
Sn U
nUb  UR                  U5      nUS	   nUb  UR                  U5      nUS   nU(       aH  [        U[        5      (       a3  U R                  UR                  5       5      nU(       a  U$ [        S
5      eU$ ! [         a  nUS	-   nX:X  a  Ue S nAOS nAff = fU(       a  M  X:  a  M  N! [         a  nU R                  S-   U-   S-   n S nAOS nAff = fU(       a  g [        U5      e)Nr   webApiMuteFailureTwebApiEnablewebApiRetriesr  r   Fr   z&could not parse the response into jsonrh  zx() failed to fetch correct data from website. Probably webpage markup has been changed, breaking the page custom parser.)r  r   r   r   rf   r   re   r=  r{  rH  r   r  )rm   rL  endpointMethodreturnAsJson
startRegexendRegexerrorMessager   muteOnFailurer  r5  retryshouldBreakr  r  splitted_by_startsplitted_by_endjsoneds                     ro   fetch_web_endpointExchange.fetch_web_endpoint  s   //$,,;w0CTJ#	o~~g~t<DH/2FJHEK$ &t<R@H"&K G%$+MM*$=!+A.#")--"9)!,GS!9!99!M%&NOO) !  !AIE* +   $4  	o77S=61  5o  oL	ol++sN   D7 D7 *D =A8D7 6D7 
D#DD7 D##D7 7
E EE c                     Uc  U$ / n[        S[        U5      5       H%  nUR                  U R                  X   5      5        M'     U$ rD  )r  r  rh  	market_idrm   rM  rV  r   s       ro   
market_idsExchange.market_ids5  sB    ?Nq#g,'AMM$..45 (rw   c                     Uc  U$ / n[        S[        U5      5       H%  nUR                  U R                  X   5      5        M'     U$ rD  )r  r  rh  currency_idrm   r  rV  r   s       ro   currency_idsExchange.currency_ids=  sD    =Lq#e*%AMM$**5845 &rw   c                     Uc  U$ / n[        S[        U5      5       H%  nUR                  U R                  X   5      5        M'     U$ rD  )r  r  rh  r  r
  s       ro   markets_for_symbolsExchange.markets_for_symbolsE  sB    ?Nq#g,'AMM$++gj12 (rw   c                    Uc!  U(       d  [        U R                  S-   5      eU$ [        U5      nUS:X  a!  U(       d  [        U R                  S-   5      eU$ / nS nS n	[        S[        U5      5       H  n
U R	                  X   5      nU(       a3  Ub0  US   U:w  a'  [        U R                  S-   U-   S-   US   -   S-   5      eU(       a$  U	b!  US   U	:w  a  [        U R                  S-   5      eUb'  US   U:w  a  [        U R                  S	-   U-   S
-   5      eUS   nUS   (       d  US   n	U R                  USX   5      nUR                  U5        M     U$ )Nz' empty list of symbols is not supportedr   rl   z* symbols must be of the same type, either z or r  r  z? symbols must be of the same subType, either linear or inverse.z" symbols must be of the same type zT. If the type is incorrect you can change it in options or the params of the requestr  r@  )r   r  r  r  r  r   r  rh  )rm   rM  rl   
allowEmptysameTypeOnlysameSubTypeOnlysymbolsLengthrV  r  isLinearSubTyper   r  r@  s                ro   market_symbolsExchange.market_symbolsM  s   ?'2[([\\NGA'2[([\\N
q#g,'A[[,F!7&>Z/$TWW/[%[^h%hkq%qtz  |B  uC  &C  FI  &I  J  JO$?(#6$TWW/p%pqqF6Nd$: +O!ORV!V  Zp  "p  q  qJ&>"("2%%fh
CFMM&! ( rw   c                     Uc  U$ / n[        S[        U5      5       H%  nUR                  U R                  X   5      5        M'     U$ rD  )r  r  rh  common_currency_coder
  s       ro   market_codesExchange.market_codesk  sD    =Lq#e*%AMM$33EH=> &rw   c           	          U R                  U5      n/ n[        S[        U5      5       H'  nUR                  U R	                  X   X#U5      5        M)     U$ rD  )r_  r  r  rh  r  )rm   r  r  r  r  rV  r   s          ro   parse_bids_asksExchange.parse_bids_askss  sL    --(q#g,'AMM$,,WZl[\ (rw   c           
          U R                  XU5      nU R                  UU R                  U R                  US   5      S5      U R                  U R                  US   5      SS5      S.5      $ )Nasksr   bidsT)r#
  r$
  )r  rX  r  r  )rm   r@  r  r  r  s        ro   fetch_l2_order_bookExchange.fetch_l2_order_bookz  sf    ))&@	{{9LL	&0A!BAFLL	&0A!BAtL'
  	rw   c                     Uc  U$ / n[        S[        U5      5       H1  nU R                  X   S5      nXR:X  d  M  UR                  X   5        M3     U$ Nr   r@  )r  r  r  rh  )rm   objectsr@  rV  r   objectSymbols         ro   filter_by_symbolExchange.filter_by_symbol  sU    >Nq#g,'A++GJAL%gj) ( rw   c           	          [        U[        5      (       ah  U R                  US5      U R                  US5      U R                  US5      U R                  US5      U R                  US5      U R                  US5      /$ U$ )Nr   r   r#  rv  r!  r	  )re   r  r  r  r  s      ro   r  Exchange.parse_ohlcv  s    eT""!!%+  *  *  *  *  *  rw   networkCodecurrencyCodec                    Uc  gU R                  U R                  S0 5      nU R                  X15      nUGcS  Uc~  [        U R                  R                  5       5      n[        S[        U5      5       HA  nXV   nU R                  US5      nU R                  X5      n	U R                  U	S5      nUc  MA    O   OU R                  U R                  S0 5      n
X*;   aZ  X   n[        UR                  5       5      n[        S[        U5      5       H#  nX   nX   nX:X  d  M  U R                  X=5      n  OT   OQU R                  U R                  U5      nU R                  US5      nU R                  X5      n	U R                  U	S5      nUc  UnU$ )a)  
@ignore
       tries to convert the provided networkCode(which is expected to be an unified network code) to a network id. In order to achieve self, derived class needs to have 'options->networks' defined.
       :param str networkCode: unified network code
       :param str currencyCode: unified currency code, but self 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
       :returns str|None: exchange-specific network id
       Nr  r   r  r  )
r  r   r  r  r   rv  r  r  r  r  )rm   r/
  r0
  networkIdsByCodes	networkIdr   r   r  r  r  r  replacementObjectr  r  r  s                  ro   network_code_to_idExchange.network_code_to_id  s     OODLL*bI$$%6D	#!$//"8"8":;
q#j/2A)}H#~~h
CH"nnXCG $ 0 0$ ?I , 3 26Ooqs1t.A(F(T% 1 6 6 89D"1c$i0"g 1 6 /(,(8(89J(PI! 1  $~~doo|LH#~~h
CH"nnXCG $ 0 0$ ?I '	rw   r3
  c                     Uc  gU R                  U R                  S0 5      nU R                  X1U5      nUbF  U R                  U R                  S0 5      nX%;   a$  U R                  XR0 5      nU R                  XdU5      nU$ )aG  
@ignore
       tries to convert the provided exchange-specific networkId to an unified network Code. In order to achieve self, derived class needs to have "options['networksById']" defined.
       :param str networkId: exchange specific network id/title, like: TRON, Trc-20, usdt-erc20, etc
       :param str|None currencyCode: unified currency code, but self 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
       :returns str|None: unified network code
       Nr  r  r  r   r  )rm   r3
  r0
  networkCodesByIdsr/
  r  r4
  s          ro   network_id_to_codeExchange.network_id_to_code  s      NN4<<L&&'8YO#-1^^DLLJjln-o*=$(NN3Qac$d!"../@{[rw   c                 \    U R                  USS5      nUb  U R                  USS/5      nX!/$ )Nr/
  r  r  r  )rm   r  networkCodeInParamss      ro   handle_network_code_and_params'Exchange.handle_network_code_and_params  s;    "00	R*YYvy'ABF#,,rw   c                     S nU R                  U R                  S0 5      nX;   a  X1   nU$ U R                  U R                  S5      nUb  UnU$ )NdefaultNetworksdefaultNetworkr8
  )rm   r0
  defaultNetworkCoderB
  rC
  s        ro   default_network_codeExchange.default_network_code  sa    !..7H"M*!0!> "! "--dll<LMN)%3"!!rw   c                 (    U R                  XUS5      $ r   select_network_key_from_networksrm   r0
  r/
  indexedNetworkEntriess       ro   )select_network_code_from_unified_networks2Exchange.select_network_code_from_unified_networks  s    44\Pegkllrw   c                 (    U R                  XUS5      $ r  rH
  rJ
  s       ro   #select_network_id_from_raw_networks,Exchange.select_network_id_from_raw_networks  s    44\Peglmmrw   c                 N   S n[        UR                  5       5      n[        U5      nUb  US:X  a!  [        U R                  S-   U-   S-   U-   5      eU(       a  UOU R                  X!5      nX;   a  UnU$ [        U R                  S-   U-   S-   U-   S-   SR                  U5      -   5      eUS:X  a  [        U R                  S-   U-   5      eU R                  U5      n	U(       a  U	OU R                  X5      n
X;   a  U
$ [        U R                  S-   SR                  U5      -   5      e)	Nr   z - z' network did not return any result for z network was not found for z, use one of , z! - no networks were returned for zR - can not determine the default network, please pass param["network"] one from : )r  r  r  r   r  r5
  r   rE
  )rm   r0
  r/
  rK
  isIndexedByUnifiedNetworkCodechosenNetworkIdavailableNetworkIdsresponseNetworksLengthnetworkIdOrCoderD
  defaultNetworkIds              ro   rI
  )Exchange.select_network_key_from_networks  s   "#8#=#=#?@!$%8!9"%*"477U?[#@Cl#lo{#{|| 2O+TXTkTklw  UG";&5O  'tww'HKh'hkw'w  {J  (J  MQ  MV  MV  Wj  Mk  (k  l  l%*"477-P#PS_#_`` &*%>%>|%L"9V#5\`\s\s  uG  ]V #<++"477  .B  $B  EI  EN  EN  Ob  Ec  $c  d  drw   r  c                 H    U R                  XU5      nU R                  XT5      $ r   )r  r  )rm   r  r  r  r  r  s         ro   safe_number_2Exchange.safe_number_2  s%    "":T:  **rw   r  c	                     U R                  U R                  X/ 5      XgU5      n	U R                  U R                  X/ 5      XgU5      n
UU R                  U	SS5      U R                  U
S5      UU R                  U5      S S.$ )Nr   T)r@  r$
  r#
  r  r  r{  )r 
  r  r  r  )rm   r  r@  r  bidsKeyasksKeyr  r  r  r$
  r#
  s              ro   parse_order_bookExchange.parse_order_book  s    ##DOOI$KXbno##DOOI$KXbnoLLq$/LLq)"Y/
 	
rw   r  c                     / n[        S[        U5      5       H&  nUR                  U R                  X   U5      5        M(     U R	                  US5      n	U R                  XUSU5      $ rD  )r  r  rh  r  r  r  )
rm   r   r  ri  r  r  r  rl	  r   rJ  s
             ro   parse_ohlcvsExchange.parse_ohlcvs   s^    q#f+&ANN4++FIv>? 'gq)))&4HHrw   r5  c                    U R                  U5      n0 nSnUb  [        U5      nUS L =(       d    US:H  n[        U[        5      (       a  [	        S[        U5      5       H  nX   nU R                  X5      n	U R                  U	S S S5      n
U
S   nU R                  U
SS5      nU(       d  MM  U(       d  U R                  X5      (       d  Ml  U R                  X5      XK'   M     U$ [        UR                  5       5      n[	        S[        U5      5       Hr  nX   nX   nU R                  US S S5      n
U
S   nU R                  U
SS5      nU(       d  M@  U(       d  U R                  X5      (       d  M_  U R                  X5      XK'   Mt     U$ )Nr   r  r@  r  F)r
  r  re   r  r  r  safe_marketr   r  r  r  )rm   r5  rM  marketIdKeytiersr
  	noSymbolsr   r  r  r  r@  r  r  marketIds                  ro   parse_leverage_tiersExchange.parse_leverage_tiers'  sm   %%g.LM_=-1*<	h%%1c(m,{%%d8))"dD&A)>>&*eD8dmmF.L.L$($D$DT$REM -$  (D1c$i(7)))(D$G)>>&*eD8dmmF.L.L$($D$DT$REM ) rw   c                 h   U R                   S   (       a  U(       d  SU R                  ;  a|  U R                  U5      n[        S[	        U5      5       H5  nX   nU R                  U R                  U   XF   5      U R                  U'   M7     U R                  5       U R                  S'   U R                  $ )Nr>  limitsLoadedr   )rR  r   r  r  r  r   rO  r  )rm   rM  rU  r  r5  r   r@  s          ro   load_trading_limitsExchange.load_trading_limitsD  s    88()n<44W=q#g,/A$ZF+/+;+;DLL<PRZRb+cDLL( 0 04/@/@/B^,||rw   c                    U R                  US5      nU R                  US5      nU R                  US5      nUcF  UbC  Ub@  [        R                  " [        R                  " X#S5      S5      nU R                  U5      US'   U R                  US5      nU R                  US5      nS nUb  U R                  U R                  U5      nUc  Ub  U R                  US5      nXaS'   U$ )NunrealisedPnlinitialMarginr~   r!  r	  r  r@  )r  r  r!   rG	  rH	  r  r  rO  )	rm   r  unrealizedPnlStringinitialMarginStringr~   percentageStringr  r@  r  s	            ro   safe_positionExchange.safe_positionN  s    "..xI"..xI __X|<
%8%DK^Kj&11'2D2DEXop2qsxy%)%6%67G%HH\"''.A!!(H5__T\\6:FF$6++FNCL'3^$rw   	positionsc                    U R                  U5      nU R                  U5      n/ n[        S[        U5      5       H8  nU R	                  U R                  X   S 5      U5      nUR                  U5        M:     U R                  USUS5      $ )Nr   r@  F)r
  r_  r  r  rX  r  rh  filter_by_array_positions)rm   ry
  rM  r  rV  r   r  s          ro   parse_positionsExchange.parse_positionse  s~    %%g.MM),	q#i.)A{{4#6#6y|T#JFSHMM(# * --fhOOrw   accountsc                     U R                  U5      n/ n[        S[        U5      5       H7  nU R                  U R	                  X   5      U5      nUR                  U5        M9     U$ rD  )r_  r  r  rX  r  rh  )rm   r~
  r  rV  r   r:   s         ro   parse_accountsExchange.parse_accountsn  sZ    ==*q#h-(Akk$"4"4X["A6JGMM'" ) rw   isWsr   c                 f   U R                  U5      n/ n[        S[        U5      5       HW  nS n	U(       a  U R                  X(   U5      n	OU R	                  X(   U5      n	U R                  X5      n
UR                  U
5        MY     U R                  USS5      nUb  US   OS nU R                  X{XE5      $ )Nr   r  r  r@  )	r_  r  r  r  r  rX  rh  r  rk	  )rm   r
  r   r  r  r  r  rV  r   r  r  r@  s               ro   parse_trades_helperExchange.parse_trades_helperv  s    v&q#f+&AF,,VY?))&)V<KK/EMM%  ' T:&,&8!t00NNrw   c                 *    U R                  SXX4U5      $ r  r
  rm   r   r  r  r  r  s         ro   rD	  Exchange.parse_trades  s    ''vuVTTrw   c                 *    U R                  SXX4U5      $ r  r
  r
  s         ro   parse_ws_tradesExchange.parse_ws_trades  s    ''feFSSrw   r   c                 &   U R                  U5      n/ n[        S[        U5      5       H8  nU R                  U R	                  X   U5      U5      nUR                  U5        M:     U R                  US5      nUb  US   OS n	U R                  XiX45      $ Nr   r  rI  )r_  r  r  rX  r  rh  r  filter_by_currency_since_limit)
rm   r   r  r  r  r  rV  r   r  rI  s
             ro   parse_transactionsExchange.parse_transactions  s    }}\2q#l+,A++d&<&<\_h&WY_`KMM+& - fk2$,$8xt226NNrw   	transfersc                 &   U R                  U5      n/ n[        S[        U5      5       H8  nU R                  U R	                  X   U5      U5      nUR                  U5        M:     U R                  US5      nUb  US   OS n	U R                  XiX45      $ r
  )r_  r  r  rX  r  rh  r  r
  )
rm   r
  r  r  r  r  rV  r   rS  rI  s
             ro   parse_transfersExchange.parse_transfers  s    MM),	q#i.)A{{4#6#6y|X#NPVWHMM(# * fk2$,$8xt226NNrw   c                    / nU R                  U5      n[        S[        U5      5       H  nU R                  Xx   U5      n	[	        U	[
        5      (       aA  [        S[        U	5      5       H&  n
UR                  U R                  X   U5      5        M(     Mm  UR                  U R                  X5      5        M     U R                  US5      nUb  US   OS nU R                  XkX45      $ r
  )
r_  r  r  r  re   r  rh  rX  r  r
  )rm   rb  r  r  r  r  rV  	arrayDatar   itemOrItemsr  rI  s               ro   parse_ledgerExchange.parse_ledger  s    MM$'	q#i.)A11),IK+t,,q#k"23AMM$++knf"EF 4 dkk+>? * fk2$,$8xt226NNrw   c                 "    U R                  5       $ r   )r  r  s    ro   r{  Exchange.nonce  s    ||~rw   c                     U$ r   rq   )rm   r   s     ro   r>  Exchange.set_headers  s    rw   c                 v    U R                  U R                  U5      nUc  U R                  U5      nUb  US   $ U$ Nr  )r  r   r  )rm   rI  r  s      ro   r
  Exchange.currency_id  sA    >>$//48))$/HD>!rw   c                 8    U R                  U5      nUb  US   $ U$ r
  r  rm   r@  r  s      ro   r
  Exchange.market_id  s%    V$$<rw   c                 J    U R                  U5      nU R                  USU5      $ Nr@  )r  r  r
  s      ro   r@  Exchange.symbol  s%    V$&99rw   r  c                 T    U R                  XU5      nUb  U R                  X5      nXA/$ r   )r  r  rm   r  r  r  r  s        ro   handle_param_stringExchange.handle_param_string  s0      LAYYv1Frw   
paramName1
paramName2c                 X    U R                  XX45      nUb  U R                  XU/5      nXQ/$ r   r=
  rm   r  r
  r
  r  r  s         ro   handle_param_string_2Exchange.handle_param_string_2  s5    ""6zPYYvJ'?@Frw   c                 T    U R                  XU5      nUb  U R                  X5      nXA/$ r   )r  r  r
  s        ro   handle_param_integerExchange.handle_param_integer  s0    !!&\BYYv1Frw   c                 X    U R                  XX45      nUb  U R                  XU/5      nXQ/$ r   )r  r  r
  s         ro   handle_param_integer_2Exchange.handle_param_integer_2  s5    ##F
QYYvJ'?@Frw   c                 T    U R                  XU5      nUb  U R                  X5      nXA/$ r   )r   r  r
  s        ro   handle_param_boolExchange.handle_param_bool  s.    v,?YYv1Frw   c                 X    U R                  XX45      nUb  U R                  XU/5      nXQ/$ r   r  r  r
  s         ro   handle_param_bool_2Exchange.handle_param_bool_2  s5      ZNYYvJ'?@Frw   rx  exchangeSpecificKey
isRequiredc                     SnU R                  U5      u  paUb  U R                  Xd5      X#'   X!/$ U(       a  [        U R                  S-   5      eX!/$ )a  
:param dict params: - extra parameters
:param dict request: - existing dictionary of request
:param str exchangeSpecificKey: - the key for chain id to be set in request
:param dict currencyCode: - (optional) existing dictionary of request
:param boolean isRequired: - (optional) whether that param is required to be present
:returns dict[]: - returns [request, params] where request is the modified request object and params is the modified params object
Nz/ - "network" param is required for self request)r?
  r5
  r   r  )rm   r  rx  r
  r0
  r
  r/
  s          ro   handle_request_networkExchange.handle_request_network  sc     "AA&I"+/+B+B;+]G(    #DGG._$_``  rw   c                 d    U R                  X5      U R                  X R                  U5      5      /$ r   )r  r  r  )rm   r:  r  s      ro   resolve_pathExchange.resolve_path  s1    -IIf11$78
 	
rw   c                     Un[        U[        5      (       d  U R                  U5      n/ n[        S[	        U5      5       H  nUR                  X5   U   5        M     U$ rD  )re   r  r_  r  r  rh  )rm   r)
  r  newArrayrl	  r   s         ro   get_list_from_object_values$Exchange.get_list_from_object_values   sT    '4((}}W-Hq#h-(ANN8;s+, )rw   symbolWithActiveStatussymbolWithUnknownStatusc                 N   U R                   nUb  U R                  USU5      nUb)  U R                  SUS/ SQ5        U R                  USU5      n/ nU(       a  UR                  S5        U(       a  UR                  S 5        U R	                  USUS5      nU R                  US5      $ )	Nrl   getSymbolsForMarketTyper  )r  r  quantoTr  Fr@  )rO  rb  check_required_argumentrh  filter_by_arrayr
  )rm   r  r  r
  r
  filteredMarketsactiveStatusess          ro   get_symbols_for_market_type$Exchange.get_symbols_for_market_type	  s    ,,!"nn_fjQO(()BGYXwx"nn_iQO!!!$'"!!$'...Z_`//JJrw   c                 >   U R                  U5      nUb  U(       d  U(       a  U R                  X5      $ U$ / n[        S[        U5      5       H4  nU R	                  X   U   U5      (       d  M!  UR                  X   5        M6     U(       a  U R                  XR5      $ U$ rD  )r_  rr  r  r  r  rh  )rm   r)
  r  rv  indexedrl	  r   s          ro   r
  Exchange.filter_by_array  s    --(>}}W22q#g,'A}}WZ_f55wz* ( ==..rw   c           	          U R                   (       a$  U R                  X#XU5      nU R                  U5        S n	U R                  XASS5      u  pS n
U R                  XASS5      u  pU R	                  5       U l        U R                  XX4XV5      nUS   U l        US   U l        US   U l	        [        SU	S-   5       H$  n U R                  US   US   US   US   5      s  $    g ! [         a  n[        U[        5      (       a  X:  a~  U R                  (       aA  U R!                  S	[#        U5      -   S
-   U[#        S5      -   -   S-   [#        U	5      -   S-   5        U
b#  U
S:w  a  U R%                  U
5         S nAM   S nAM   S nAM  UeUeS nAff = f)NmaxRetriesOnFailurer   maxRetriesOnFailureDelayr   r  rK  r   rL  zRequest failed with the error: z, retrying z of z...)r  calculate_rate_limiter_costr&  handle_option_and_paramsr  r  rA  last_request_headerslast_request_bodylast_request_urlr  r  rf   re   r   rs  rD  r=  r!  )rm   r:  rv  rL  r  r   r  r   r   retries
retryDelayrx  r   r  s                 ro   fetch2Exchange.fetch2*  s   33CvVDMM$77F[]^_
!::6Icefg
(,(9(9(;%))DvwE$+I$6!!( 'q'A+&Azz'%.'(2CWYEWY`agYhii '   
a11{<< HH%FQ%OR_%_cdgjklgmcm%nqw%wz}  F  {G  &G  JO  &O  P&2q JJz22 :I2  G
s   =C""
F,BFFFc           	      *    U R                  XX4XVU5      $ r   )r
  )rm   r:  rv  rL  r  r   r  r   s           ro   rx  Exchange.requestG  s    {{4fgVLLrw   c                     U(       a  U R                  U5      U l        O3U R                  (       a  U R                  $ U R                  U5      U l        U R                  U R                  S5      U l        U R                  $ r
  )r=  r~
  rr  accountsById)rm   rU  r  s      ro   load_accountsExchange.load_accountsJ  s[     //7DM}}}}$ $ 3 3F ; MM$-->}}rw   c           
      J   U R                  U5      S-  n/ nSnSnSn	Sn
SnSn[        U5      n[        X5      nU R                  U R                  S0 5      nU R                  US	S
5      n[        SU5       GH)  nUU   nUS   nUS   nUU:  a  M  [        [        R                  " UU-  5      5      U-  nUU:  a  MH  [        U5      nUS-
  nU(       a  US:  d  US:  d  Mm  US:H  nU(       d  UU R                  UU   U   U5      :  a  UR                  UUUUUUS   S/5        M  [        UU   U   U5      UU   U'   [        UU   U	   U5      UU   U	'   UUU   U
'   U R                  UU   U   US   5      UU   U'   U R                  UU   U   S5      UU   U'   GM,     U$ )Nra  r   r#  rv  r!  r	  r"  buildOHLCVCskipZeroPricesTr  r   r   r   r   )rl  r  r   r  r   r   r  r  r  floorr  rh  r   )rm   r   ri  r  r  r=  r   i_timestampi_highi_lowi_closei_volumei_countrW	  oldestr   r
  r   r  r   r   openingTimeohlcv_lengthcandleisFirstCandles                            ro   build_ohlcvcExchange.build_ohlcvcU  s    !!),t36{\)..}bA1A4Hq&!A1IE{#B'NEEzdjjb12R7KU"v;L!A%Fuqy519"bLMtxxv{8SUW/X X(O  *-VF^F-CU)Kvv&(+F6N5,A5(Ivu%*/vw'+/88F6N84LeT\o+^vx(*.((6&>'3JA*Nvw'? "@ rw   c                 J    U R                  U5      nU R                  XbX4U5      $ r   )r	  rc
  )rm   r   r  ri  r  r  rV  s          ro   parse_trading_view_ohlcv!Exchange.parse_trading_view_ohlcv  s'    33F;  5IIrw   r  c                 *    U R                  XSX4U5      $ )Nrv	  edit_limit_orderrm   r  r@  r   r   r  s         ro   edit_limit_buy_orderExchange.edit_limit_buy_order  s    $$RvNNrw   c                 *    U R                  XSX4U5      $ )Nrt	  r  r  s         ro   edit_limit_sell_orderExchange.edit_limit_sell_order  s    $$ROOrw   c           	      *    U R                  XSX4XV5      $ Nr  )
edit_order)rm   r  r@  r  r   r   r  s          ro   r  Exchange.edit_limit_order  s    r7D%PPrw   c                 J    U R                  X5        U R                  X#XEXg5      $ r   )cancel_ordercreate_orderrm   r  r@  rl   r  r   r   r  s           ro   r  Exchange.edit_order  s%    "%  tUKKrw   rB	  c                 N    U R                  SX#XEX`R                  SU0U5      5      $ )Nr   rB	  )r  rX  )rm   rB	  r@  rl   r  r   r   r  s           ro   edit_order_with_client_order_id(Exchange.edit_order_with_client_order_id  s*    r6ukkSbdqRrtzF{||rw   c                 J    U R                  X5        U R                  X#XEXg5      $ r   )cancel_order_wscreate_order_wsr  s           ro   edit_order_wsExchange.edit_order_ws  s%    R(##F$NNrw   c                 2    [        U R                  S-   5      e)Nz% fetchPosition() is not supported yetr  r[  s      ro   fetch_positionExchange.fetch_position  r?  rw   c                 2    [        U R                  S-   5      e)Nz' fetchPositionWs() is not supported yetr  r[  s      ro   fetch_position_wsExchange.fetch_position_ws  r>  rw   c                 2    [        U R                  S-   5      e)Nz% watchPosition() is not supported yetr  r[  s      ro   watch_positionExchange.watch_position  r?  rw   c                 2    [        U R                  S-   5      e)Nz& watchPositions() is not supported yetr  rO  s        ro   watch_positionsExchange.watch_positions  r  rw   c                 &    U R                  XX45      $ r   )r$  rO  s        ro   watch_position_for_symbols#Exchange.watch_position_for_symbols  s    ##GEBBrw   c                 2    [        U R                  S-   5      ea7  
fetches all open positions for specific symbol, unlike fetchPositions(which is designed to work with multiple symbols) so self method might be preffered for one-market position, because of less rate-limit consumption and speed
:param str symbol: unified market symbol
:param dict params: extra parameters specific to the endpoint
:returns dict[]: a list of `position structure <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
z/ fetchPositionsForSymbol() is not supported yetr  r[  s      ro   fetch_positions_for_symbol#Exchange.fetch_positions_for_symbol       477%VVWWrw   c                 2    [        U R                  S-   5      er*  r  r[  s      ro   fetch_positions_for_symbol_ws&Exchange.fetch_positions_for_symbol_ws  r-  rw   c                 2    [        U R                  S-   5      eNz& fetchPositions() is not supported yetr  rf  s      ro   fetch_positionsExchange.fetch_positions  r  rw   c                 2    [        U R                  S-   5      er2  r  rf  s      ro   fetch_positions_wsExchange.fetch_positions_ws  r  rw   c                 2    [        U R                  S-   5      e)Nz* fetchPositionsRisk() is not supported yetr  rf  s      ro   fetch_positions_riskExchange.fetch_positions_risk  r  rw   c                 2    [        U R                  S-   5      e)Nz% fetchBidsAsks() is not supported yetr  rf  s      ro   fetch_bids_asksExchange.fetch_bids_asks  r?  rw   c                 2    [        U R                  S-   5      e)Nz+ fetchBorrowInterest() is not supported yetr  )rm   rI  r@  r  r  r  s         ro   fetch_borrow_interestExchange.fetch_borrow_interest  r  rw   c                 2    [        U R                  S-   5      e)Nz# fetchLedger() is not supported yetr  rm   rI  r  r  r  s        ro   fetch_ledgerExchange.fetch_ledger  rE  rw   c                 2    [        U R                  S-   5      e)Nz( fetchLedgerEntry() is not supported yetr  rm   r  rI  r  s       ro   fetch_ledger_entryExchange.fetch_ledger_entry  r  rw   c                     U R                  X5      nU R                  X5      nU R                  X5      nXV/nUb  UR                  U5        U$ r   )r  r  rh  )	rm   bidaskr  r  r  r   r   	countOrIdr  s	            ro   r  Exchange.parse_bid_ask  sP      2!!&4%%f;	 MM)$rw   
currencyIdc                     Uc  Ub  U$ U R                   b.  XR                   ;   a  U R                   U   b  U R                   U   $ UnUb  U R                  UR                  5       5      nU R                  UUS S.5      $ )N)r  rI  r   )r	  r
  r  r  )rm   rM  r  rI  s       ro   r  Exchange.safe_currency  s    X%9O!!-JBWBW4W^b^s^st~^  _L((44!,,Z-=-=-?@D++-
  	rw   rj
  	delimiterc                    UGbB  U R                   b  XR                   ;   a|  U R                   U   n[        U5      nUS:X  a  US   $ Uc&  Uc  [        U R                  S-   U-   S-   5      eUS   n[	        S[        U5      5       H  nXW   nX   (       d  M  Us  $    OUb  US:w  a  UR                  U5      n	[        U	5      n
U R                  UUS.5      nU
S:X  ai  U R                  U	S5      US	'   U R                  U	S5      US
'   U R                  US	   5      US'   U R                  US
   5      US'   US   S-   US   -   US'   U$ Ub  U$ U R                  XS.5      $ )Nr   r   z- safeMarket() requires a fourth argument for zB to disambiguate between different markets with the same market idrl   r   )r@  rj
  r#  r  r  r  r  /r@  )	rP  r  r   r  r  r   r 	  r  safe_currency_code)rm   rj
  r  rP  r  rO  
numMarketsr   currentMarketr  partsLengthrV  s               ro   rf
  Exchange.safe_market  s   "".XASAS5S,,X6 \
?"1:%!)!>"3DGG>m4mpx4x  |@  5@  #A  A)/J"1c'l3(/
(44#00 4 &9? y1!%j33& (5  !#'+'7'7q'AF8$(,(8(8(BF9%%)%<%<VH=M%NF6N&*&=&=fY>O&PF7O'-f~';fWo'MF8$M))X*TUUrw   c                 ,    Uc  g U R                  U5      $ r   r
  r  s     ro   market_or_nullExchange.market_or_null  s    >{{6""rw   c                 $   [        U R                  R                  5       5      n[        S[	        U5      5       HT  nX#   nU R                  U   (       d  M  [        X5      (       a  M/  U(       a  [        U R                  S-   U-   S-   5      e  g   g)z
@ignore
       :param boolean error: raise an error that a credential is required if True
       :returns boolean: True if all required credentials have been set, otherwise False or an error is thrown is param error=true
       r   z requires "z" credentialFT)r  rz  r  r  r  r   r   r  )rm   r0  r  r   r  s        ro   check_required_credentials#Exchange.check_required_credentials  s}     D,,1134q#d)$A'C'',,WT5G5G-dgg.E.Kn.\]]  % rw   c                     U R                   b  U R                  U R                   5      $ [        U R                  S-   5      e)NzB exchange.twofa has not been set for 2FA Two-Factor Authentication)r   r  r   r  r  s    ro   oathExchange.oath$  s4    ::!99TZZ((*n noorw   c                 2    [        U R                  S-   5      e)Nz$ fetchBalance() is not supported yetr  rY  s     ro   fetch_balanceExchange.fetch_balance*  r  rw   c                 2    [        U R                  S-   5      e)Nz& fetchBalanceWs() is not supported yetr  rY  s     ro   fetch_balance_wsExchange.fetch_balance_ws-  r  rw   c                 2    [        U R                  S-   5      e)Nz$ parseBalance() is not supported yetr  )rm   r5  s     ro   parse_balanceExchange.parse_balance0  r  rw   c                 2    [        U R                  S-   5      e)Nz$ watchBalance() is not supported yetr  rY  s     ro   watch_balanceExchange.watch_balance3  r  rw   c                 ,    U R                  U5      nX1   $ r   )rb  )rm   partr  r   s       ro   fetch_partial_balanceExchange.fetch_partial_balance6  s    $$V,}rw   c                 &    U R                  SU5      $ )Nr*	  ro  rY  s     ro   fetch_free_balanceExchange.fetch_free_balance:      ))&&99rw   c                 &    U R                  SU5      $ )Nr+	  rr  rY  s     ro   fetch_used_balanceExchange.fetch_used_balance=  ru  rw   c                 &    U R                  SU5      $ )Nr,	  rr  rY  s     ro   fetch_total_balanceExchange.fetch_total_balance@  s    ))'6::rw   c                 2    [        U R                  S-   5      e)Nz# fetchStatus() is not supported yetr  rY  s     ro   fetch_statusExchange.fetch_statusC  rE  rw   c                     U R                   S   (       d  [        U R                  S-   5      eU R                  U/U5      $ )Nr@  z+ fetchTransactionFee() is not supported yet)rR  r   r  fetch_transaction_feesr-  s      ro   fetch_transaction_feeExchange.fetch_transaction_feeF  s9    xx./tww)VVWW**D66::rw   c                 2    [        U R                  S-   5      e)Nz, fetchTransactionFees() is not supported yetr  r  s      ro   r  Exchange.fetch_transaction_feesK  rt  rw   c                 2    [        U R                  S-   5      e)Nz0 fetchDepositWithdrawFees() is not supported yetr  r  s      ro   fetch_deposit_withdraw_fees$Exchange.fetch_deposit_withdraw_feesN  r}  rw   c                     U R                   S   (       d  [        U R                  S-   5      eU R                  U/U5      nU R	                  X15      $ )Nr  z/ fetchDepositWithdrawFee() is not supported yet)rR  r   r  r  r  )rm   rI  r  ry  s       ro   fetch_deposit_withdraw_fee#Exchange.fetch_deposit_withdraw_feeQ  sG    xx23tww)ZZ[[//?t**rw   c                 P    X;   a  X!   $ [        U R                  S-   U-   S-   5      e)Nrh  z! does not have a value in mappingr  )rm   r  mappings      ro   get_supported_mappingExchange.get_supported_mappingW  s-    ><tww}s25XXYYrw   c                     U R                  5         U R                  S   (       d  [        U R                  S-   5      eU R	                  U5      nU R                  X15      nUc  [        U R                  S-   U-   5      eU$ )Nr  z, fetchCrossBorrowRate() is not supported yetzI fetchCrossBorrowRate() could not find the borrow rate for currency code )rV  rR  r   r  r  r  r   )rm   rI  r  borrowRatesr;	  s        ro   fetch_cross_borrow_rate Exchange.fetch_cross_borrow_rate]  ss    xx*+tww)WWXX33F;{1<*u ux| |}}rw   c                     U R                  5         U R                  S   (       d  [        U R                  S-   5      eU R	                  U5      nU R                  X15      nUc  [        U R                  S-   U-   5      eU$ )Nr  z/ fetchIsolatedBorrowRate() is not supported yetzL fetchIsolatedBorrowRate() could not find the borrow rate for market symbol )rV  rR  r   r  r  r  r   )rm   r@  r  r  r;	  s        ro   fetch_isolated_borrow_rate#Exchange.fetch_isolated_borrow_rateg  s    xx*+tww)ZZ[[66v>~~k2<*x x  |B  !B  C  Crw   
optionNamec                 ^   SU R                  U5      -   nU R                  XU5      nUb  U R                  XU/5      nXa/$ U R                  USU5      u  p!U R	                  U R
                  U5      nUb  U R                  XsU5      nUc  U R                  U R
                  X55      nUb  UOUnXa/$ )Nrj   callerMethodName)r   r  r  r
  r  r   )rm   r  r  r  r  defaultOptionNamer  exchangeWideMethodOptionss           ro   r
  !Exchange.handle_option_and_paramsq  s    %
(CC!!&6GHYYv4E'FGF  "&!9!9&BTV`!aJ(,j(Q%(4))*CQbc}))$,,
V#/ElErw   methodName1optionName1optionName2c                     S nU R                  XU5      u  paUb  U R                  X5      nXa/$ S nU R                  XXE5      u  pqXq/$ r   )r
  r  )rm   r  r  r  r  r  r  value2s           ro   handle_option_and_params_2#Exchange.handle_option_and_params_2  sY    55f;WYYv3F?"66vKfrw   c                 L    U R                  0 XU5      nU R                  US5      $ rD  )r
  r  )rm   r  r  r  rt  s        ro   r  Exchange.handle_option  s'    ++B
UsA&&rw   c                 ^   U R                  USS5      nUb  U R                  USS/5      nXS/$ Ub  US   U/$ Ub  XC/$ U R                  U R                  U5      nUb1  [	        U[
        5      (       a  Xc/$ U R                  USS5      nUb  Xs/$ U R                  U R                  SSS5      nX/$ )a  
@ignore
@param methodName the method calling handleMarketTypeAndParams
       :param Market market:
       :param dict params:
       :param str [params.type]: type assigned by user
       :param str [params.defaultType]: same.type
       :param str [defaultValue]: assigned programatically in the method calling handleMarketTypeAndParams
       :returns [str, dict]: the market type and params with type and defaultType omitted
       defaultTyperl   r  )r  r  r  r   re   r=  )	rm   r  r  r  r  rl   methodOptionstypeFromMethodr  s	            ro   handle_market_type_and_params&Exchange.handle_market_type_and_params  s     !!&-@YYvv'>?F>!6NF++# ))t||Z@$---%..!%!3!3M=RX!Y!-*33((}ffU$$rw   c                     S nU R                  USS5      nUb  UnU R                  USS/5      nXS/$ Ub  US   (       a  SnOUS   (       a  SnUc  U R                  0 USU5      nUS   nXS/$ )Nr  defaultSubTyper  r  r   )r  r  r
  )rm   r  r  r  r  r  subTypeInParamsrv  s           ro   handle_sub_type_and_params#Exchange.handle_sub_type_and_params  s    ,,VY@PQ&%GYYv	3C'DEF    !(#&GI&'G66r:yR^_ )  rw   c                 (    U R                  X!SU5      $ )a  
@ignore
       :param dict [params]: extra parameters specific to the exchange API endpoint
       :returns Array: the marginMode in lowercase by params["marginMode"], params["defaultMarginMode"] self.options["marginMode"] or self.options["defaultMarginMode"]
       rT  r
  )rm   r  r  r  s       ro   handle_margin_mode_and_params&Exchange.handle_margin_mode_and_params  s     ,,V|\\rw   c                 *    Uc  g X!;   a
  X   " U5      eg r   rq   )rm   exactr>  r  s       ro   throw_exactly_matched_exception(Exchange.throw_exactly_matched_exception  s!    >?-(( rw   c                 @    U R                  X5      nUb
  X   " U5      eg r   )find_broadly_matched_key)rm   broadr>  r  broadKeys        ro   throw_broadly_matched_exception(Exchange.throw_broadly_matched_exception  s*    00?/'**  rw   c                     [        UR                  5       5      n[        S[        U5      5       H%  nX4   nUc  M  UR	                  U5      S:  d  M#  Us  $    g rD  )r  r  r  r  r  )rm   r  r>  r  r   r  s         ro   r  !Exchange.find_broadly_matched_key  sO    EJJL!q#d)$A'C!;;s#q(J	 %
 rw   
statusCode
statusTextrg  responseBodyc
                     g r   rq   )
rm   r  r  rK  rL  rg  r  r5  requestHeadersrequestBodys
             ro   r  Exchange.handle_errors  s     rw   c                 (    U R                  USS5      $ )Nr   r   )r  )rm   rv  rL  r:  r  r   s         ro   r
  $Exchange.calculate_rate_limiter_cost  s    vvq11rw   c                 .   U R                   S   (       aj  U R                  5         U R                  U5      nUS   nU R                  U/U5      nU R	                  XA5      nUc  [        U R                  S-   U-   5      eU$ [        U R                  S-   5      e)Nr6  r@  z, fetchTickers() could not find a ticker for z# fetchTicker() is not supported yet)rR  rV  r  fetch_tickersr  r   r  r   rm   r@  r  r  r   r  s         ro   fetch_tickerExchange.fetch_ticker  s    88N#[[(FH%F((&6:G^^G4F~"477-[#[^d#deetww)NNOOrw   c                 .   U R                   S   (       aj  U R                  5         U R                  U5      nUS   nU R                  U/U5      nU R	                  XA5      nUc  [        U R                  S-   U-   5      eU$ [        U R                  S-   5      e)Nr7  r@  z/ fetchMarkPrices() could not find a ticker for ' fetchMarkPrices() is not supported yet)rR  rV  r  fetch_mark_pricesr  r   r  r   r  s         ro   fetch_mark_priceExchange.fetch_mark_price   s    88%&[[(FH%F,,fXv>G^^G4F~"477-^#^ag#ghhtww)RRSSrw   c                 .   U R                   S   (       aj  U R                  5         U R                  U5      nUS   nU R                  U/U5      nU R	                  XA5      nUc  [        U R                  S-   U-   5      eU$ [        U R                  S-   5      e)Nr8  r@  z- fetchTickerWs() could not find a ticker for z% fetchTickerWs() is not supported yet)rR  rV  r  fetch_tickers_wsr  r   r  r   r  s         ro   fetch_ticker_wsExchange.fetch_ticker_ws  s    88$%[[(FH%F++VHf=G^^G4F~"477-\#\_e#efftww)PPQQrw   c                 2    [        U R                  S-   5      e)Nz# watchTicker() is not supported yetr  r[  s      ro   watch_tickerExchange.watch_ticker  rE  rw   c                 2    [        U R                  S-   5      eNz$ fetchTickers() is not supported yetr  rf  s      ro   r  Exchange.fetch_tickers  r  rw   c                 2    [        U R                  S-   5      e)Nr  r  rf  s      ro   r  Exchange.fetch_mark_prices"  r>  rw   c                 2    [        U R                  S-   5      er  r  rf  s      ro   r  Exchange.fetch_tickers_ws%  r  rw   c                 2    [        U R                  S-   5      e)Nz' fetchOrderBooks() is not supported yetr  rz  s       ro   fetch_order_booksExchange.fetch_order_books(  r>  rw   c                 2    [        U R                  S-   5      e)Nz% watchBidsAsks() is not supported yetr  rf  s      ro   watch_bids_asksExchange.watch_bids_asks+  r?  rw   c                 2    [        U R                  S-   5      e)Nz$ watchTickers() is not supported yetr  rf  s      ro   watch_tickersExchange.watch_tickers.  r  rw   c                 2    [        U R                  S-   5      e)Nz& unWatchTickers() is not supported yetr  rf  s      ro   un_watch_tickersExchange.un_watch_tickers1  r  rw   c                 2    [        U R                  S-   5      e)Nz" fetchOrder() is not supported yetr  rm   r  r@  r  s       ro   fetch_orderExchange.fetch_order4  r  rw   c                 N    U R                  USU05      nU R                  SX$5      $ aM  
create a market order by providing the symbol, side and cost
:param str clientOrderId: client order Id
:param str symbol: unified symbol of the market to create an order in
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
rB	  r   )rX  r  rm   rB	  r@  r  extendedParamss        ro    fetch_order_with_client_order_id)Exchange.fetch_order_with_client_order_id7  s,     Vo}-MNF;;rw   c                 2    [        U R                  S-   5      e)Nz$ fetchOrderWs() is not supported yetr  r  s       ro   fetch_order_wsExchange.fetch_order_wsB  r  rw   c                 0    U R                  XU5      nUS   $ )Nr}  )r  )rm   r  r@  r  r  s        ro   fetch_order_statusExchange.fetch_order_statusE  s        V4Xrw   c                 h    U R                  U R                  US5      U R                  US5      U5      $ Nr  r@  )r  r  rm   r  r  s      ro   fetch_unified_orderExchange.fetch_unified_orderK  s4     0 0 =t?O?OPUW_?`bhiirw   c                 2    [        U R                  S-   5      e)Nz# createOrder() is not supported yetr  rm   r@  rl   r  r   r   r  s          ro   r  Exchange.create_orderN  rE  rw   fromCodetoCodec                 2    [        U R                  S-   5      e)Nz* createConvertTrade() is not supported yetr  )rm   r  r  r  r   r  s         ro   create_convert_tradeExchange.create_convert_tradeQ  r  rw   c                 2    [        U R                  S-   5      e)Nz) fetchConvertTrade() is not supported yetr  rF  s       ro   fetch_convert_tradeExchange.fetch_convert_tradeT  r  rw   c                 2    [        U R                  S-   5      e)Nz0 fetchConvertTradeHistory() is not supported yetr  rB  s        ro   fetch_convert_trade_history$Exchange.fetch_convert_trade_historyW  r}  rw   c                 2    [        U R                  S-   5      e)Nz) fetchPositionMode() is not supported yetr  r[  s      ro   fetch_position_modeExchange.fetch_position_modeZ  r  rw   trailingAmounttrailingTriggerPricec	                     Uc  [        U R                  S-   5      eXhS'   Ub  XxS'   U R                  S   (       a  U R                  XX4XX5      $ [	        U R                  S-   5      e)/  
create a trailing order by providing the symbol, type, side, amount, price and trailingAmount
:param str symbol: unified symbol of the market to create an order in
:param str type: 'market' or 'limit'
:param str side: 'buy' or 'sell'
:param float amount: how much you want to trade in units of the base currency, or number of contracts
:param float [price]: the price for the order to be filled at, in units of the quote currency, ignored in market orders
:param float trailingAmount: the quote amount to trail away from the current market price
:param float [trailingTriggerPrice]: the price to activate a trailing order, default uses the price argument
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
z? createTrailingAmountOrder() requires a trailingAmount argumentr  r  r  z1 createTrailingAmountOrder() is not supported yetr   r  rR  r  r   	rm   r@  rl   r  r   r   r  r  r  s	            ro   create_trailing_amount_order%Exchange.create_trailing_amount_order]  sn     !#DGG.o$opp#1 +-A)*88/0$$V4OO477%XXYYrw   c	                     Uc  [        U R                  S-   5      eXhS'   Ub  XxS'   U R                  S   (       a  U R                  XX4XX5      $ [	        U R                  S-   5      e)r  zA createTrailingAmountOrderWs() requires a trailingAmount argumentr  r  r  z3 createTrailingAmountOrderWs() is not supported yetr   r  rR  r  r   r  s	            ro   create_trailing_amount_order_ws(Exchange.create_trailing_amount_order_wss  sn     !#DGG.q$qrr#1 +-A)*8812''dERR477%ZZ[[rw   trailingPercentc	                     Uc  [        U R                  S-   5      eXhS'   Ub  XxS'   U R                  S   (       a  U R                  XX4XX5      $ [	        U R                  S-   5      e),  
create a trailing order by providing the symbol, type, side, amount, price and trailingPercent
:param str symbol: unified symbol of the market to create an order in
:param str type: 'market' or 'limit'
:param str side: 'buy' or 'sell'
:param float amount: how much you want to trade in units of the base currency, or number of contracts
:param float [price]: the price for the order to be filled at, in units of the quote currency, ignored in market orders
:param float trailingPercent: the percent to trail away from the current market price
:param float [trailingTriggerPrice]: the price to activate a trailing order, default uses the price argument
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
zA createTrailingPercentOrder() requires a trailingPercent argumentr  r  r  z2 createTrailingPercentOrder() is not supported yetr  	rm   r@  rl   r  r   r   r  r  r  s	            ro   create_trailing_percent_order&Exchange.create_trailing_percent_order  sn     "#DGG.q$qrr$3 !+-A)*8801$$V4OO477%YYZZrw   c	                     Uc  [        U R                  S-   5      eXhS'   Ub  XxS'   U R                  S   (       a  U R                  XX4XX5      $ [	        U R                  S-   5      e)r!  zC createTrailingPercentOrderWs() requires a trailingPercent argumentr  r  r  z4 createTrailingPercentOrderWs() is not supported yetr  r"  s	            ro    create_trailing_percent_order_ws)Exchange.create_trailing_percent_order_ws  sn     "#DGG.s$stt$3 !+-A)*8823''dERR477%[[\\rw   r   c                     U R                   S   (       d(  U R                   S   (       a)  U R                   S   (       a  U R                  USX#SU5      $ [        U R                  S-   5      e)  
create a market order by providing the symbol, side and cost
:param str symbol: unified symbol of the market to create an order in
:param str side: 'buy' or 'sell'
:param float cost: how much you want to trade in units of the quote currency
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
r  r  r  r  r   z1 createMarketOrderWithCost() is not supported yet)rR  r  r   r  rm   r@  r  r   r  s        ro   create_market_order_with_cost&Exchange.create_market_order_with_cost  sb     88/0TXX>\5]bfbjbj  lK  cL$$VXt1fMM477%XXYYrw   c                     U R                   S   (       d  U R                  S   (       a  U R                  USSUSU5      $ [        U R                  S-   5      e)an  
create a market buy order by providing the symbol and cost
:param str symbol: unified symbol of the market to create an order in
:param float cost: how much you want to trade in units of the quote currency
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
!createMarketBuyOrderRequiresPricer  r  rv	  r   z4 createMarketBuyOrderWithCost() is not supported yetr   rR  r  r   r  rm   r@  r   r  s       ro   !create_market_buy_order_with_cost*Exchange.create_market_buy_order_with_cost  sM     <<;<Ig@h$$VXudAvNN477%[[\\rw   c                     U R                   S   (       d  U R                  S   (       a  U R                  USSUSU5      $ [        U R                  S-   5      e)ao  
create a market sell order by providing the symbol and cost
:param str symbol: unified symbol of the market to create an order in
:param float cost: how much you want to trade in units of the quote currency
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
"createMarketSellOrderRequiresPricer  r  rt	  r   z5 createMarketSellOrderWithCost() is not supported yetr/  r0  s       ro   "create_market_sell_order_with_cost+Exchange.create_market_sell_order_with_cost  sM     <<<=JiAj$$VXvtQOO477%\\]]rw   c                     U R                   S   (       d(  U R                   S   (       a)  U R                   S   (       a  U R                  USX#SU5      $ [        U R                  S-   5      e)r)  r  r  r  r  r   z3 createMarketOrderWithCostWs() is not supported yet)rR  r  r   r  r*  s        ro    create_market_order_with_cost_ws)Exchange.create_market_order_with_cost_ws  sb     8812txx@`7afjfnfn  pQ  gR''$aPP477%ZZ[[rw   r8	  c                     Uc  [        U R                  S-   5      eXgS'   U R                  S   (       a  U R                  XX4XW5      $ [	        U R                  S-   5      e)  
create a trigger stop order(type 1)
:param str symbol: unified symbol of the market to create an order in
:param str type: 'market' or 'limit'
:param str side: 'buy' or 'sell'
:param float amount: how much you want to trade in units of the base currency or the number of contracts
:param float [price]: the price to fulfill the order, in units of the quote currency, ignored in market orders
:param float triggerPrice: the price to trigger the stop order, in units of the quote currency
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
z6 createTriggerOrder() requires a triggerPrice argumentr8	  r  z* createTriggerOrder() is not supported yetr  rm   r@  rl   r  r   r   r8	  r  s           ro   create_trigger_orderExchange.create_trigger_order  s^     #DGG.f$fgg!-~88()$$V4OO477%QQRRrw   c                     Uc  [        U R                  S-   5      eXgS'   U R                  S   (       a  U R                  XX4XW5      $ [	        U R                  S-   5      e)r;  z8 createTriggerOrderWs() requires a triggerPrice argumentr8	  r  z, createTriggerOrderWs() is not supported yetr  r<  s           ro   create_trigger_order_ws Exchange.create_trigger_order_ws  s^     #DGG.h$hii!-~88*+''dERR477%SSTTrw   r9	  c                     Uc  [        U R                  S-   5      eXgS'   U R                  S   (       a  U R                  XX4XW5      $ [	        U R                  S-   5      e)  
create a trigger stop loss order(type 2)
:param str symbol: unified symbol of the market to create an order in
:param str type: 'market' or 'limit'
:param str side: 'buy' or 'sell'
:param float amount: how much you want to trade in units of the base currency or the number of contracts
:param float [price]: the price to fulfill the order, in units of the quote currency, ignored in market orders
:param float stopLossPrice: the price to trigger the stop loss order, in units of the quote currency
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
z8 createStopLossOrder() requires a stopLossPrice argumentr9	  r  z+ createStopLossOrder() is not supported yetr  rm   r@  rl   r  r   r   r9	  r  s           ro   create_stop_loss_orderExchange.create_stop_loss_order  s^      #DGG.h$hii"/88)*$$V4OO477%RRSSrw   c                     Uc  [        U R                  S-   5      eXgS'   U R                  S   (       a  U R                  XX4XW5      $ [	        U R                  S-   5      e)rC  z: createStopLossOrderWs() requires a stopLossPrice argumentr9	  r  z- createStopLossOrderWs() is not supported yetr  rD  s           ro   create_stop_loss_order_ws"Exchange.create_stop_loss_order_ws   s^      #DGG.j$jkk"/88+,''dERR477%TTUUrw   r:	  c                     Uc  [        U R                  S-   5      eXgS'   U R                  S   (       a  U R                  XX4XW5      $ [	        U R                  S-   5      e)  
create a trigger take profit order(type 2)
:param str symbol: unified symbol of the market to create an order in
:param str type: 'market' or 'limit'
:param str side: 'buy' or 'sell'
:param float amount: how much you want to trade in units of the base currency or the number of contracts
:param float [price]: the price to fulfill the order, in units of the quote currency, ignored in market orders
:param float takeProfitPrice: the price to trigger the take profit order, in units of the quote currency
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
z< createTakeProfitOrder() requires a takeProfitPrice argumentr:	  r  z- createTakeProfitOrder() is not supported yetr  rm   r@  rl   r  r   r   r:	  r  s           ro   create_take_profit_order!Exchange.create_take_profit_order3  s_     "#DGG.l$lmm$3 !88+,$$V4OO477%TTUUrw   c                     Uc  [        U R                  S-   5      eXgS'   U R                  S   (       a  U R                  XX4XW5      $ [	        U R                  S-   5      e)rK  z> createTakeProfitOrderWs() requires a takeProfitPrice argumentr:	  r  z/ createTakeProfitOrderWs() is not supported yetr  rL  s           ro   create_take_profit_order_ws$Exchange.create_take_profit_order_wsF  s_     "#DGG.n$noo$3 !88-.''dERR477%VVWWrw   r  r  c	           
          U R                  XX4XVXx5      nU R                  S   (       a  U R                  XX4XX5      $ [        U R                  S-   5      e)	  
create an order with a stop loss or take profit attached(type 3)
:param str symbol: unified symbol of the market to create an order in
:param str type: 'market' or 'limit'
:param str side: 'buy' or 'sell'
:param float amount: how much you want to trade in units of the base currency or the number of contracts
:param float [price]: the price to fulfill the order, in units of the quote currency, ignored in market orders
:param float [takeProfit]: the take profit price, in units of the quote currency
:param float [stopLoss]: the stop loss price, in units of the quote currency
:param dict [params]: extra parameters specific to the exchange API endpoint
:param str [params.takeProfitType]: *not available on all exchanges* 'limit' or 'market'
:param str [params.stopLossType]: *not available on all exchanges* 'limit' or 'market'
:param str [params.takeProfitPriceType]: *not available on all exchanges* 'last', 'mark' or 'index'
:param str [params.stopLossPriceType]: *not available on all exchanges* 'last', 'mark' or 'index'
:param float [params.takeProfitLimitPrice]: *not available on all exchanges* limit price for a limit take profit order
:param float [params.stopLossLimitPrice]: *not available on all exchanges* stop loss for a limit stop loss order
:param float [params.takeProfitAmount]: *not available on all exchanges* the amount for a take profit
:param float [params.stopLossAmount]: *not available on all exchanges* the amount for a stop loss
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
r  z< createOrderWithTakeProfitAndStopLoss() is not supported yet)$set_take_profit_and_stop_loss_paramsrR  r  r   r  	rm   r@  rl   r  r   r   r  r  r  s	            ro   +create_order_with_take_profit_and_stop_loss4Exchange.create_order_with_take_profit_and_stop_lossY  sS    * ::6W\jr{88:;$$V4OO477%ccddrw   c	                    Uc  Uc  [        U R                  S-   5      eUb  SU0US'   Ub  SU0US'   U R                  US5      n	U R                  US5      n
U R                  US5      nU R                  US5      nU R                  US	5      nU R                  US
5      nU R                  US5      nU R                  US5      nU	b  XS   S'   U
b  XS   S'   Ub  U R                  U5      US   S'   Ub  U R                  U5      US   S'   Ub  XS   S'   Ub  XS   S'   Ub  U R                  U5      US   S'   Ub  U R                  U5      US   S'   U R	                  U/ SQ5      nU$ )NzY createOrderWithTakeProfitAndStopLoss() requires either a takeProfit or stopLoss argumentr8	  r  r  takeProfitTypetakeProfitPriceTypetakeProfitLimitPricetakeProfitAmountstopLossTypestopLossPriceTypestopLossLimitPricestopLossAmountrl   	priceTyper   r   )rY  rZ  r[  r\  r]  r^  r_  r`  )r   r  r  rq  r  )rm   r@  rl   r  r   r   r  r  r  rY  rZ  r[  r\  r]  r^  r_  r`  s                    ro   rT  -Exchange.set_take_profit_and_stop_loss_paramss  s   X%5#DGG  /J  %J  K  K!
$F<  "F: ))&2BC"..v7LM#//8NO++F4FG''? ,,V5HI!--f6JK))&2BC%+9< (*0C< -+,0,A,ABV,WF< )'-1-B-BCS-TF< *#)5:v&(.?:{+)*.*?*?@R*SF:w'%+/+@+@+PF:x(6  $F  Grw   c	           
          U R                  XX4XVXx5      nU R                  S   (       a  U R                  XX4XX5      $ [        U R                  S-   5      e)rS  r  z> createOrderWithTakeProfitAndStopLossWs() is not supported yet)rT  rR  r  r   r  rU  s	            ro   .create_order_with_take_profit_and_stop_loss_ws7Exchange.create_order_with_take_profit_and_stop_loss_ws  sS    * ::6W\jr{88<=''dERR477%eeffrw   c                 2    [        U R                  S-   5      e)Nz$ createOrders() is not supported yetr  rm   ri	  r  s      ro   create_ordersExchange.create_orders  r  rw   c                 2    [        U R                  S-   5      e)Nz" editOrders() is not supported yetr  rg  s      ro   edit_ordersExchange.edit_orders  r  rw   c                 2    [        U R                  S-   5      e)Nz% createOrderWs() is not supported yetr  r  s          ro   r  Exchange.create_order_ws  r?  rw   c                 2    [        U R                  S-   5      e)Nz# cancelOrder() is not supported yetr  r  s       ro   r  Exchange.cancel_order  rE  rw   c                 N    U R                  USU05      nU R                  SX$5      $ r  )rX  r  r  s        ro   !cancel_order_with_client_order_id*Exchange.cancel_order_with_client_order_id  s,     Vo}-MN  V<<rw   c                 2    [        U R                  S-   5      e)Nz% cancelOrderWs() is not supported yetr  r  s       ro   r  Exchange.cancel_order_ws  r?  rw   r	  c                 2    [        U R                  S-   5      e)Nz$ cancelOrders() is not supported yetr  rm   r	  r@  r  s       ro   cancel_ordersExchange.cancel_orders  r  rw   clientOrderIdsc                 N    U R                  USU05      nU R                  / X$5      $ )aQ  
create a market order by providing the symbol, side and cost
:param str[] clientOrderIds: client order Ids
:param str symbol: unified symbol of the market to create an order in
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
rz  )rX  rx  )rm   rz  r@  r  r  s        ro   #cancel_orders_with_client_order_ids,Exchange.cancel_orders_with_client_order_ids  s-     V.>-OP!!"f==rw   c                 2    [        U R                  S-   5      e)Nz& cancelOrdersWs() is not supported yetr  rw  s       ro   cancel_orders_wsExchange.cancel_orders_ws  r  rw   c                 2    [        U R                  S-   5      e)Nz' cancelAllOrders() is not supported yetr  r[  s      ro   cancel_all_ordersExchange.cancel_all_orders  r>  rw   rc  c                 2    [        U R                  S-   5      e)Nz, cancelAllOrdersAfter() is not supported yetr  )rm   rc  r  s      ro   cancel_all_orders_after Exchange.cancel_all_orders_after  rt  rw   c                 2    [        U R                  S-   5      e)Nz. cancelOrdersForSymbols() is not supported yetr  rg  s      ro   cancel_orders_for_symbols"Exchange.cancel_orders_for_symbols  rx  rw   c                 2    [        U R                  S-   5      e)Nz) cancelAllOrdersWs() is not supported yetr  r[  s      ro   cancel_all_orders_wsExchange.cancel_all_orders_ws  r  rw   c                 h    U R                  U R                  US5      U R                  US5      U5      $ r  )r  r  r  s      ro   cancel_unified_orderExchange.cancel_unified_order  s4      !1!1%!>@P@PQVX`@acijjrw   c                     U R                   S   (       a,  U R                   S   (       a  [        U R                  S-   5      e[        U R                  S-   5      e)Nr  r  ze fetchOrders() is not supported yet, consider using fetchOpenOrders() and fetchClosedOrders() insteadz# fetchOrders() is not supported yetr	  rB  s        ro   fetch_ordersExchange.fetch_orders  sQ    88%&4884G+Htww  *Q   Q  R  R477%JJKKrw   c                 2    [        U R                  S-   5      e)Nz% fetchOrdersWs() is not supported yetr  rB  s        ro   fetch_orders_wsExchange.fetch_orders_ws  r?  rw   c                 2    [        U R                  S-   5      e)Nz( fetchOrderTrades() is not supported yetr  )rm   r  r@  r  r  r  s         ro   fetch_order_tradesExchange.fetch_order_trades  r  rw   c                 2    [        U R                  S-   5      e)Nz# watchOrders() is not supported yetr  rB  s        ro   watch_ordersExchange.watch_orders  rE  rw   c                     U R                   S   (       a%  U R                  XX45      nU R                  USS5      $ [        U R                  S-   5      e)Nr"  r}  r	  z' fetchOpenOrders() is not supported yetrR  r  rb  r   r  rm   r@  r  r  r  ri	  s         ro   fetch_open_ordersExchange.fetch_open_orders  sH    88M"&&veDF>>&(F;;477%NNOOrw   c                     U R                   S   (       a%  U R                  XX45      nU R                  USS5      $ [        U R                  S-   5      e)Nr$  r}  r	  z) fetchOpenOrdersWs() is not supported yetrR  r  rb  r   r  r  s         ro   fetch_open_orders_wsExchange.fetch_open_orders_ws  sH    88O$))&GF>>&(F;;477%PPQQrw   c                     U R                   S   (       a%  U R                  XX45      nU R                  USS5      $ [        U R                  S-   5      e)Nr"  r}  r<	  z) fetchClosedOrders() is not supported yetr  r  s         ro   fetch_closed_ordersExchange.fetch_closed_orders  sH    88M"&&veDF>>&(H==477%PPQQrw   c                 2    [        U R                  S-   5      e)Nz4 fetchCanceledAndClosedOrders() is not supported yetr  rB  s        ro    fetch_canceled_and_closed_orders)Exchange.fetch_canceled_and_closed_orders  s    477%[[\\rw   c                     U R                   S   (       a%  U R                  XX45      nU R                  USS5      $ [        U R                  S-   5      e)Nr$  r}  r<	  z+ fetchClosedOrdersWs() is not supported yetr  r  s         ro   fetch_closed_orders_wsExchange.fetch_closed_orders_ws  sH    88O$))&GF>>&(H==477%RRSSrw   c                 2    [        U R                  S-   5      e)Nz% fetchMyTrades() is not supported yetr  rB  s        ro   fetch_my_tradesExchange.fetch_my_trades  r?  rw   c                 2    [        U R                  S-   5      e)Nz+ fetchMyLiquidations() is not supported yetr  rB  s        ro   fetch_my_liquidationsExchange.fetch_my_liquidations  r  rw   c                 2    [        U R                  S-   5      e)Nz) fetchLiquidations() is not supported yetr  rB  s        ro   fetch_liquidationsExchange.fetch_liquidations  r  rw   c                 2    [        U R                  S-   5      e)Nz' fetchMyTradesWs() is not supported yetr  rB  s        ro   fetch_my_trades_wsExchange.fetch_my_trades_ws  r>  rw   c                 2    [        U R                  S-   5      e)Nz% watchMyTrades() is not supported yetr  rB  s        ro   watch_my_tradesExchange.watch_my_trades"  r?  rw   c                 2    [        U R                  S-   5      e)Nz# fetchGreeks() is not supported yetr  r[  s      ro   fetch_greeksExchange.fetch_greeks%  rE  rw   c                 2    [        U R                  S-   5      e)Nz& fetchAllGreeks() is not supported yetr  rf  s      ro   fetch_all_greeksExchange.fetch_all_greeks(  r  rw   c                 2    [        U R                  S-   5      e)Nz( fetchOptionChain() is not supported yetr  r-  s      ro   fetch_option_chainExchange.fetch_option_chain+  r  rw   c                 2    [        U R                  S-   5      e)Nz# fetchOption() is not supported yetr  r[  s      ro   fetch_optionExchange.fetch_option.  rE  rw   c                 2    [        U R                  S-   5      e)Nz) fetchConvertQuote() is not supported yetr  )rm   r  r  r   r  s        ro   fetch_convert_quoteExchange.fetch_convert_quote1  r  rw   c                 2    [        U R                  S-   5      e)a  
fetch history of deposits and withdrawals
:param str [code]: unified currency code for the currency of the deposit/withdrawals, default is None
:param int [since]: timestamp in ms of the earliest deposit/withdrawal, default is None
:param int [limit]: max number of deposit/withdrawals to return, default is None
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
z0 fetchDepositsWithdrawals() is not supported yetr  rB  s        ro   fetch_deposits_withdrawals#Exchange.fetch_deposits_withdrawals4  s     477%WWXXrw   c                 2    [        U R                  S-   5      e)Nz% fetchDeposits() is not supported yetr  rB  s        ro   fetch_depositsExchange.fetch_deposits?  r?  rw   c                 2    [        U R                  S-   5      e)Nz( fetchWithdrawals() is not supported yetr  rB  s        ro   fetch_withdrawalsExchange.fetch_withdrawalsB  r  rw   c                 2    [        U R                  S-   5      e)Nz' fetchDepositsWs() is not supported yetr  rB  s        ro   fetch_deposits_wsExchange.fetch_deposits_wsE  r>  rw   c                 2    [        U R                  S-   5      e)Nz* fetchWithdrawalsWs() is not supported yetr  rB  s        ro   fetch_withdrawals_wsExchange.fetch_withdrawals_wsH  r  rw   c                 2    [        U R                  S-   5      e)Nz/ fetchFundingRateHistory() is not supported yetr  rB  s        ro   fetch_funding_rate_history#Exchange.fetch_funding_rate_historyK  ri  rw   c                 2    [        U R                  S-   5      e)Nz+ fetchFundingHistory() is not supported yetr  rB  s        ro   fetch_funding_historyExchange.fetch_funding_historyN  r  rw   c                 2    [        U R                  S-   5      e)Nz% closePosition() is not supported yetr  )rm   r@  r  r  s       ro   close_positionExchange.close_positionQ  r?  rw   c                 2    [        U R                  S-   5      e)Nz) closeAllPositions() is not supported yetr  rY  s     ro   close_all_positionsExchange.close_all_positionsT  r  rw   c                 2    [        U R                  S-   5      e)Nz( fetchL3OrderBook() is not supported yet)r   r  r  s       ro   fetch_l3_order_bookExchange.fetch_l3_order_bookW  s    #MMNNrw   c                 2    [        U R                  S-   5      e)Nz& parseLastPrice() is not supported yetr  )rm   r   r  s      ro   parse_last_priceExchange.parse_last_priceZ  r  rw   c                    U R                   S   (       aG  U R                  U/U5      nU R                  X15      nUc  [        U R                  S-   U-   S-   5      eU$ U R                   S   (       a  U R                  US5      nU R                  US5      nU R                  X5      nUb  U R                  Xe5      $ [        UR                  5       5      nU R                  US5      nU R                  Xh5      $ [        U R                  S-   5      e)Nr  z< fetchDepositAddress() could not find a deposit address for zc, make sure you have created a corresponding deposit address in your wallet on the exchange websiter  r  r   z+ fetchDepositAddress() is not supported yet)rR  r  r  r   r  r  r  rY  r  r  r  r   )	rm   rI  r  depositAddressesr  r  addressStructuresr  r  s	            ro   fetch_deposit_addressExchange.fetch_deposit_address]  s   88+,#;;TFFK!__-=DN%$TWW/m%mpt%t  x]  &]  ^  ^%%XX67&&vy9GYYvy1F $ G G U"~~&7AA-2245&&tQ/~~&7==tww)VVWWrw   c                     S S S S.$ )N)r*	  r+	  r,	  rq   r  s    ro   r:   Exchange.accountr  s    
 	
rw   c                 `    U R                   (       d  U$ U R                  U R                  X5      $ r   )substituteCommonCurrencyCodesr  r  )rm   rI  s     ro   r
  Exchange.common_currency_codey  s)    11K 5 5tBBrw   c                 r   [        U R                  R                  5       5      n[        U5      nUS:X  a  [	        U R
                  S-   5      e[        U[        5      (       a<  XR                  ;   a  U R                  U   $ XR                  ;   a  U R                  U   $ [	        U R
                  S-   U-   5      e)Nr   z currencies not loadedz does not have currency code )	r  r   r  r  r   r  re   r=  r	  )rm   rI  r  r	  s       ro   r  Exchange.currency~  s    DOO((*+D	A*B BCCdC  &t,,...,,T22DGG&EELMMrw   c                 l   U R                   c  [        U R                  S-   5      eXR                   ;   a  U R                   U   $ XR                  ;   a_  U R                  U   nU R	                  U R
                  SSS5      n[        S[        U5      5       H  nX$   nXS   (       d  M  Us  $    US   $ UR                  S5      (       dB  UR                  S5      (       d,  UR                  S5      (       d  UR                  S	5      (       a  U R                  U5      $ [        U R                  S
-   U-   5      e)Nz markets not loadedr  r  r  r   z-Cz-PzC-zP-z does not have market symbol )rO  r   r  rP  r  r   r  r  endswithr  create_expired_option_marketr   )rm   r@  rO  r  r   r  s         ro   r  Exchange.market  s   <<*? ?@@\\!<<'')))((0G,,T\\=JZ\bcK1c'l+ &&!M , 1:ood##)>)>FDUDUVZD[D[agararswaxax44V<<"AAFJKKrw   c                 2    [        U R                  S-   5      e)Nz1 createExpiredOptionMarket() is not supported yetr  r  s     ro   r  %Exchange.create_expired_option_market  s    477%XXYYrw   checkBaseCoinexistingCurrenciesc                     / SQn[        S[        U5      5       HA  nXE   nUR                  U5      (       d  M  U(       d    gUR                  US5      nXs;   d  MA    g   g)N)2L2S3L3S4L4S5L5SUPDOWNBULLBEARr   Tr   F)r  r  r  r3  )rm   r0
  r  r   leverageSuffixesr   leverageSuffixbaseCurrencyCodes           ro   is_leveraged_currencyExchange.is_leveraged_currency  se    

 q#./0A-0N$$^44$ (4';';NB'O$'=# 1 rw   c                     Ub(  [        U[        5      (       a  U R                  X5      nS nUc'  U R                  US5      nUb  U R	                  US5      nX/$ )Nr(  )re   r   rX  r  r  )rm   r(  r  s      ro   handle_withdraw_tag_and_params'Exchange.handle_withdraw_tag_and_params  sZ    O*S$"7"7[[-FC;""651C651}rw   c                 *    U R                  USX#XE5      $ r
  r  rm   r@  r  r   r   r  s         ro   create_limit_orderExchange.create_limit_order  s      $NNrw   c                 *    U R                  USX#XE5      $ r
  r  r  s         ro   create_limit_order_wsExchange.create_limit_order_ws  s    ##FGT5QQrw   c                 *    U R                  USX#XE5      $ Nr  r  r  s         ro   create_market_orderExchange.create_market_order  s      4OOrw   c                 *    U R                  USX#XE5      $ r   r  r  s         ro   create_market_order_wsExchange.create_market_order_ws  s    ##FHdERRrw   c                 ,    U R                  USSX#U5      $ Nr  rv	  r  rm   r@  r   r   r  s        ro   create_limit_buy_orderExchange.create_limit_buy_order  s      %OOrw   c                 ,    U R                  USSX#U5      $ r'  r  r(  s        ro   create_limit_buy_order_ws"Exchange.create_limit_buy_order_ws  s    ##FGUF6RRrw   c                 ,    U R                  USSX#U5      $ Nr  rt	  r  r(  s        ro   create_limit_sell_order Exchange.create_limit_sell_order  s      &&PPrw   c                 ,    U R                  USSX#U5      $ r/  r  r(  s        ro   create_limit_sell_order_ws#Exchange.create_limit_sell_order_ws  s    ##FGVVFSSrw   c                 .    U R                  USSUS U5      $ Nr  rv	  r  r@  s       ro   create_market_buy_order Exchange.create_market_buy_order  s      5&$OOrw   c                 .    U R                  USSUS U5      $ r6  r  r@  s       ro   create_market_buy_order_ws#Exchange.create_market_buy_order_ws  s    ##FHeVT6RRrw   c                 .    U R                  USSUS U5      $ Nr  rt	  r  r@  s       ro   create_market_sell_order!Exchange.create_market_sell_order  s      664PPrw   c                 .    U R                  USSUS U5      $ r=  r  r@  s       ro   create_market_sell_order_ws$Exchange.create_market_sell_order_ws  s    ##FHffdFSSrw   c                     Uc  g U R                  U5      nU R                  U[        US   S   U R                  U R                  5      $ Nr   r   )r  r   r   r  r  )rm   r@  r   r  s       ro   cost_to_precisionExchange.cost_to_precision  sI    <V$((x9LW9UW[WiWikok{k{||rw   c                    Uc  g U R                  U5      nU R                  U[        US   S   U R                  U R                  5      nUS:X  a9  [        U R                  S-   US   -   S-   U R                  US   S   5      -   5      eU$ )Nr   r   r  z
 price of r@  z1 must be greater than minimum price precision of )r  r   r   r  r  r   r  r    )rm   r@  r   r  rV  s        ro   price_to_precisionExchange.price_to_precision  s    =V$**5%9LW9UW[WiWikok{k{|S=tww5x8HHK~~  BF  BW  BW  X^  _j  Xk  ls  Xt  Bu   u  v  vrw   c                    Uc  g U R                  U5      nU R                  U[        US   S   U R                  U R                  5      nUS:X  a9  [        U R                  S-   US   -   S-   U R                  US   S   5      -   5      eU$ )Nr   r   r  z amount of r@  z2 must be greater than minimum amount precision of )r  r   r   r  r  r   r  r    )rm   r@  r   r  rV  s        ro   amount_to_precisionExchange.amount_to_precision  s    >V$**68VK=PQY=Z\`\n\npt  qA  qA  BS=tww69II  MA   A  DH  DY  DY  Z`  al  Zm  nv  Zw  Dx   x  y  yrw   c                     Uc  g U R                  U5      nU R                  U[        US   S   U R                  U R                  5      $ rD  )r  r   r   r  r  )rm   r@  r4  r  s       ro   fee_to_precisionExchange.fee_to_precision  sI    ;V$((eVK5H5QSWSeSegkgwgwxxrw   c                 r   U R                   U   nU R                  US5      nUb8  U R                  US0 5      nU R                  Xc0 5      nU R                  USU5      nUc  U R                  U5      $ U R	                  U R
                  S[        5      nU R                  X(XPR                  U R                  5      $ )Nr   r  currencyToPrecisionRoundingMode)
r   r  r  force_stringr  r   r   r   r  r  )	rm   rI  r4  r/
  r  r   r  networkItemroundingModes	            ro   currency_to_precisionExchange.currency_to_precision  s    ??4(OOHk:	"~~h
B?H..CK[)LI$$S)),,T\\;\^cdL,,S	K]K]_c_o_opprw   c                 R    [        U[        5      (       d  U R                  U5      $ U$ r   )re   r=  r    r  s     ro   rR  Exchange.force_string	  s%    %%%((//rw   c                 (    U R                   [        :H  $ r   )r  r   r  s    ro   r	  Exchange.is_tick_precision  s    !!Y..rw   c                 (    U R                   [        :H  $ r   )r  r   r  s    ro   is_decimal_precisionExchange.is_decimal_precision  s    !!^33rw   c                 (    U R                   [        :H  $ r   )r  r   r  s    ro   is_significant_precision!Exchange.is_significant_precision  s    !!%777rw   defaultNumberc                 F    U R                  X5      nU R                  XC5      $ r   )r  r  )rm   rn   r  ra  r  s        ro   r  Exchange.safe_number  s#      *  66rw   c                 F    U R                  X5      nU R                  XC5      $ r   )r  r  )rm   rn   r  ra  r  s        ro   safe_number_nExchange.safe_number_n  s#    ""3,  66rw   r   c                     Uc  g[        U5      nUS:X  a  gUS:  a"  Sn[        SUS-
  5       H  nUS-   nM
     US-   $ Sn[        SUS-  S-
  5       H  nUS-   nM
     US-   $ )z
@ignore
       :param str precision: The number of digits to the right of the decimal
       :returns str: a string number equal to 1e-precision
       Nr   r0  z0.r   r  r   )r  r  )rm   r   precisionNumberparsedPrecisionr   s        ro   parse_precisionExchange.parse_precision  s     i.aQ"O1o12"1C"7 3"S((!O1o2Q67"1C"7 8"S((rw   c                     Uc  g[         R                  " US5      (       a  U R                  U5      $ [         R                  " U5      n[	        U5      nSn[        SUS-
  5       H  nUS-   nM
     US-   $ )a  
@ignore
       handles positive & negative numbers too. parsePrecision() does not handle negative numbers, but self method handles
       :param str precision: The number of digits to the right of the decimal
       :returns str: a string number equal to 1e-precision
       Nr  r0  r   r   )r!   	string_gerj  
string_absr  r  )rm   r   positivePrecisionStringpositivePrecisionri  r   s         ro   integer_precision_to_amount$Exchange.integer_precision_to_amount5  s     Y,,''	22&-&8&8&C# #$; <!O1/!34"1C"7 5"S((rw   c                     U R                  U5      nU R                  5       nX2-
  U R                  S'   U R                  S   $ )NtimeDifference)r  r  r   )rm   r  
serverTimer  s       ro   load_time_differenceExchange.load_time_differenceH  s@    __V,
!!#).);%&||,--rw   c                 >    U R                  USU R                  05      $ )Nhostname)r  ry  )rm   rK  s     ro   implode_hostnameExchange.implode_hostnameN  s    ""3T]](CDDrw   c                    U R                   S   (       aV  U R                  U5      nUS   (       d  [        U R                  S-   5      eU R	                  U/5      nU R                  XA5      $ [        U R                  S-   5      e)Nr  r  z: fetchMarketLeverageTiers() supports contract markets onlyz0 fetchMarketLeverageTiers() is not supported yet)rR  r  r   r  r  r  r   )rm   r@  r  r  rh
  s        ro   fetch_market_leverage_tiers$Exchange.fetch_market_leverage_tiersQ  sp    88()[[(F*%*f fgg--vh7E??511tww)[[\\rw   c                     U R                   S   (       d  [        U R                  S-   5      eU R                  USS05      nU R	                  XX4XW5      $ )Nr  z+ createPostOnlyOrder() is not supported yetr=	  TrR  r   r  rX  r  rm   r@  rl   r  r   r   r  querys           ro   create_post_only_orderExchange.create_post_only_order[  sN    xx-.tww)VVWWFZ$67  tUJJrw   c                     U R                   S   (       d  [        U R                  S-   5      eU R                  USS05      nU R	                  XX4XW5      $ )Nr  z- createPostOnlyOrderWs() is not supported yetr=	  TrR  r   r  rX  r  r  s           ro   create_post_only_order_ws"Exchange.create_post_only_order_wsa  sN    xx/0tww)XXYYFZ$67##F$MMrw   c                     U R                   S   (       d  [        U R                  S-   5      eU R                  USS05      nU R	                  XX4XW5      $ )Nr  z- createReduceOnlyOrder() is not supported yetrC	  Tr  r  s           ro   create_reduce_only_order!Exchange.create_reduce_only_orderg  sN    xx/0tww)XXYYF\4$89  tUJJrw   c                     U R                   S   (       d  [        U R                  S-   5      eU R                  USS05      nU R	                  XX4XW5      $ )Nr  z/ createReduceOnlyOrderWs() is not supported yetrC	  Tr  r  s           ro   create_reduce_only_order_ws$Exchange.create_reduce_only_order_wsm  sN    xx12tww)ZZ[[F\4$89##F$MMrw   c                     U R                   S   (       d  [        U R                  S-   5      eUc  [        U R                  S-   5      eU R	                  USU05      nU R                  XX4XX5      $ )Nr  z' createStopOrder() is not supported yetz2 create_stop_order() requires a stopPrice argumentrA	  )rR  r   r  r   rX  r  	rm   r@  rl   r  r   r   r8	  r  r  s	            ro   create_stop_orderExchange.create_stop_orders  si    xx)*tww)RRSS#DGG.b$bccF[,$?@  tUJJrw   c                     U R                   S   (       d  [        U R                  S-   5      eUc  [        U R                  S-   5      eU R	                  USU05      nU R                  XX4XX5      $ )Nr  z) createStopOrderWs() is not supported yetz2 createStopOrderWs() requires a stopPrice argumentrA	  )rR  r   r  r   rX  r  r  s	            ro   create_stop_order_wsExchange.create_stop_order_ws{  si    xx+,tww)TTUU#DGG.b$bccF[,$?@##F$MMrw   c                     U R                   S   (       d  [        U R                  S-   5      eU R                  USU05      nU R	                  USX#XG5      $ )Nr  z, createStopLimitOrder() is not supported yetrA	  r  r  rm   r@  r  r   r   r8	  r  r  s           ro   create_stop_limit_order Exchange.create_stop_limit_order  sP    xx./tww)WWXXF[,$?@  $MMrw   c                     U R                   S   (       d  [        U R                  S-   5      eU R                  USU05      nU R	                  USX#XG5      $ )Nr  z. createStopLimitOrderWs() is not supported yetrA	  r  r  r  s           ro   create_stop_limit_order_ws#Exchange.create_stop_limit_order_ws  sP    xx01tww)YYZZF[,$?@##FGT5PPrw   c                     U R                   S   (       d  [        U R                  S-   5      eU R                  USU05      nU R	                  USX#S U5      $ )Nr  z- createStopMarketOrder() is not supported yetrA	  r  r  rm   r@  r  r   r8	  r  r  s          ro   create_stop_market_order!Exchange.create_stop_market_order  sR    xx/0tww)XXYYF[,$?@  4uMMrw   c                     U R                   S   (       d  [        U R                  S-   5      eU R                  USU05      nU R	                  USX#S U5      $ )Nr  z/ createStopMarketOrderWs() is not supported yetrA	  r  r  r  s          ro   create_stop_market_order_ws$Exchange.create_stop_market_order_ws  sR    xx12tww)ZZ[[F[,$?@##FHdD%PPrw   c                 .    U R                  X5      nUS   $ )NrI  )r  )rm   rM  r  s      ro   rS  Exchange.safe_currency_code  s    %%j;rw   c           	      .    U R                  USX#USU5      $ )Nr@  r  r(  )rm   rQ  r@  r  r  r  s         ro   rk	  %Exchange.filter_by_symbol_since_limit  s     //xPUWbdhiirw   c           	      .    U R                  USX#USU5      $ )Nr  r  r  )rm   rQ  rI  r  r  r  s         ro   r
  'Exchange.filter_by_currency_since_limit  s     //z4PUWbdhiirw   c                 R    U R                  USUS5      nU R                  XcUSU5      $ )Nr@  Fr  )r
  r  )rm   rQ  rM  r  r  r  rV  s          ro   filter_by_symbols_since_limit&Exchange.filter_by_symbols_since_limit  s/    %%eXwF))&TRRrw   c                    / n[        U[        5      (       aQ  [        S[        U5      5       H7  nU R	                  U R                  X   5      U5      nUR                  U5        M9     O[        UR                  5       5      n[        S[        U5      5       HM  nXu   nU R                  U5      n	U R	                  U R                  X   U	5      U5      nUR                  U5        MO     U R                  U5      nU R                  USU5      $ r(
  )re   r  r  r  rX  r  rh  r  rf
  r
  r
  )
rm   
pricesDatarM  r  rl	  r   	priceData	marketIdsrj
  r  s
             ro   parse_last_pricesExchange.parse_last_prices  s    ( j$''1c*o. KK(=(=jm(LfU	y) / Z__./I1c)n-$<))(3 KK(=(=j>RTZ([]cd	y)	 .
 %%g.##GXw??rw   c                    / n[        U[        5      (       aR  [        S[        U5      5       H8  nU R	                  X   5      nU R                  Xc5      nUR                  U5        M:     O[        UR                  5       5      n[        S[        U5      5       HN  nX   n	U R                  U	5      n
U R	                  X   U
5      nU R                  X5      nUR                  U5        MP     U R                  U5      nU R                  USU5      $ r(
  )re   r  r  r  r  rX  rh  r  rf
  r
  r
  )rm   r   rM  r  rl	  r   parsedTickerr  r  rj
  r  r  s               ro   parse_tickersExchange.parse_tickers  s    . gt$$1c'l+#00<\:v& ,
 W\\^,I1c)n-$<))(3**7+<fEV4v& . %%g.##GXw??rw   c                    / n[        S[        U5      5       H7  nU R                  U R                  X   5      U5      nUR	                  U5        M9     Ub  U R                  USUS5      nU(       a  U R                  USS U5      nU$ )Nr   r  F)r  r  rX  r  rh  r
  )rm   	addressesr  r
  r  rV  r   r  s           ro   parse_deposit_addresses Exchange.parse_deposit_addresses  s    q#i.)Akk$"<"<Y\"JFSGMM'" * ))&*eUKF))&*dGLFrw   c                     / n[        S[        U5      5       H'  nX   nUR                  U R                  XR5      5        M)     U$ rD  )r  r  rh  r  )rm   r5  r  	interestsr   rows         ro   parse_borrow_interestsExchange.parse_borrow_interests  sD    	q#h-(A+CT77DE ) rw   c                 2    [        U R                  S-   5      e)Nz' parseBorrowRate() is not supported yetr  )rm   r-  r  s      ro   parse_borrow_rateExchange.parse_borrow_rate  r>  rw   c                     / n[        S[        U5      5       H)  nX   nU R                  U5      nUR                  U5        M+     U R	                  US5      n	U R                  XX45      $ )Nr   r  )r  r  r  rh  r  r
  )
rm   r5  rI  r  r  rV  r   r  
borrowRaterJ  s
             ro   parse_borrow_rate_history"Exchange.parse_borrow_rate_history	  sd    q#h-(A;D//5JMM*% ) fk2226NNrw   c                     0 n[        S[        U5      5       H.  nX   nU R                  U5      nU R                  US5      nXRU'   M0     U$ r(
  )r  r  r  r  )rm   r-  rV  r   r  r  r@  s          ro   parse_isolated_borrow_rates$Exchange.parse_isolated_borrow_rates  sS    q#d)$A7D88>J%%j(;F'6N	 %
 rw   c                     / n[        S[        U5      5       H'  nX   nUR                  U R                  Xr5      5        M)     U R	                  US5      nUc  S OUS   n	U R                  XX45      $ Nr   r  r@  )r  r  rh  r  r  rk	  
rm   r5  r  r  r  ratesr   ri  rJ  r@  s
             ro   parse_funding_rate_histories%Exchange.parse_funding_rate_histories  so    q#h-(AKELL88GH ) e[1 .vh/?00NNrw   c                 0    U R                  XX45      nUS   $ r
  )rf
  )rm   rj
  r  rP  r  s        ro   safe_symbolExchange.safe_symbol$  s    !!(IJhrw   r  c                 2    [        U R                  S-   5      e)Nz( parseFundingRate() is not supported yetr  )rm   r  r  s      ro   parse_funding_rateExchange.parse_funding_rate(  r  rw   c                     0 n[        S[        U5      5       H  nX   nU R                  U5      nXcUS   '   M!     U R                  USU5      $ r(
  )r  r  r  r
  )rm   r5  rM  r   r   ri  r  s          ro   parse_funding_ratesExchange.parse_funding_rates+  sW    q#h-(AKE,,U3F-3)* ) ##L(GDDrw   c                 2    [        U R                  S-   5      e)Nz+ parseLongShortRatio() is not supported yetr  r  s      ro   parse_long_short_ratioExchange.parse_long_short_ratio3  r  rw   c                     / n[        S[        U5      5       H'  nX   nUR                  U R                  Xr5      5        M)     U R	                  US5      nUc  S OUS   n	U R                  XX45      $ r  )r  r  rh  r  r  rk	  r  s
             ro   parse_long_short_ratio_history'Exchange.parse_long_short_ratio_history6  so    q#h-(AKELL44UCD ) e[1 .vh/?00NNrw   c                    U R                  USS5      nS nU R                  US5      nS nU R                  US5      nS n	Ub6  U(       a  U R                  USS/5      nU R                  U[	        U5      5      nUb4  U(       a  U R                  US5      nU R                  U[	        U5      5      nUb4  U(       a  U R                  US5      nU R                  U[	        U5      5      n	XWX/$ )Nr8	  rA	  r9	  r:	  )r  r  r  rH  r  )
rm   r@  r  
omitParamsr8	  triggerPriceStrr9	  stopLossPriceStrr:	  takeProfitPriceStrs
             ro    handle_trigger_prices_and_params)Exchange.handle_trigger_prices_and_params?  s    ))&.+N#((A $**63DE"&#6NK+HI"55feL>QRO$6?;#66vu]?ST&6+<=!%!8!8AW!X3ENNrw   r
  c                 0   U R                  US5      nUSL=(       a    X!;   nUb  U R                  US5      nU R                  U/ SQ5      (       d&  U(       d  U(       d  [        U R                  S-   5      eUS:X  d  US:X  a  SnXA/$ US:X  d  US	:X  a  S
nXA/$ )z[
@ignore
       :returns [str, dict]: the trigger-direction value and omited params
       triggerDirectionN)r  r  updownabovebelowzk createOrder() : trigger orders require params["triggerDirection"] to be either "ascending" or "descending"r  r  r  r  r  r  )r  r  r  r   r  )rm   r  r
  r
  r  exchangeSpecificDefineds         ro   #handle_trigger_direction_and_params,Exchange.handle_trigger_direction_and_paramsV  s    
  ++F4FG#6d#B"gI\If'YYv'9:F }}-/jkk  uL  U_#DGG  /\  %\  ]  ]t#'77'B* !)) '+;w+F+ ))rw   c                 d    U R                  USS5      nU(       a  U R                  USS/5      nX!/$ )Ntriggerstopr
  )rm   r  	isTriggers      ro   handle_trigger_and_params"Exchange.handle_trigger_and_paramsk  s7    $$VY?	YYv	6':;F""rw   c                 $    U R                  U5      $ r   )r  rY  s     ro   is_trigger_orderExchange.is_trigger_orderq  s    --f55rw   isMarketOrderc                 6   U R                  US5      nU R                  USSS5      nUS:H  nUS:H  nUS:H  nU=(       d    U=(       d    UnU(       aI  U(       d  U(       a  [        U R                  S-   U-   5      eU(       a  [        U R                  S	-   5      eg
g)z
@ignore
       :param str type: Order type
       :param boolean exchangeSpecificParam: exchange specific postOnly
       :param dict [params]: exchange specific params
       :returns boolean: True if a post only order, False otherwise
       r  r=	  	post_onlyFr>	  FOKr?	  2 postOnly orders cannot have timeInForce equal to ! market orders cannot be postOnlyT)r  r  r   r  )	rm   r  exchangeSpecificParamr  r  r=	  iocfoktimeInForcePostOnlys	            ro   is_post_onlyExchange.is_post_onlyu  s     ,,V]C##FJUKU"U")T1K2K6Kc"477-a#ado#opp"477-P#PQQrw   exchangeSpecificPostOnlyOptionc                    U R                  US5      nU R                  USS5      nUS:H  nUS:H  nUS:H  nU=(       d    U=(       d    UnU(       aw  U(       d  U(       a  [        U R                  S-   U-   5      eU(       a  [        U R                  S-   5      eU(       a  U R	                  US5      nU R	                  US5      nS	U/$ SU/$ )
z
@ignore
       :param str type: Order type
       :param boolean exchangeSpecificBoolean: exchange specific postOnly
       :param dict [params]: exchange specific params
       :returns Array:
       r  r=	  Fr>	  r  r?	  r  r  T)r  r   r   r  r  )	rm   r  r  r  r  r=	  r   r  pos	            ro   handle_post_onlyExchange.handle_post_only  s     ,,V]C>>&*e<U"U"D CrC%Cc"477-a#ado#opp"477-P#PQQ!YYv}=F6:6f~%vrw   c                 2    [        U R                  S-   5      e)Nz' fetchLastPrices() is not supported yetr  rf  s      ro   fetch_last_pricesExchange.fetch_last_prices  r>  rw   c                 2    [        U R                  S-   5      e)Nz( fetchTradingFees() is not supported yetr  rY  s     ro   r`  Exchange.fetch_trading_fees  r  rw   c                 2    [        U R                  S-   5      e)Nz* fetchTradingFeesWs() is not supported yetr  rY  s     ro   fetch_trading_fees_wsExchange.fetch_trading_fees_ws  r  rw   c                     U R                   S   (       d  [        U R                  S-   5      eU R                  U5      nU R	                  X15      $ )Nr^  z' fetchTradingFee() is not supported yet)rR  r   r  r`  r  )rm   r@  r  ry  s       ro   fetch_trading_feeExchange.fetch_trading_fee  sC    xx*+tww)RRSS&&v.~~d++rw   c                 2    [        U R                  S-   5      e)Nz. fetchConvertCurrencies() is not supported yetr  rY  s     ro   fetch_convert_currencies!Exchange.fetch_convert_currencies  rx  rw   c                 2    [        U R                  S-   5      e)Nz) parseOpenInterest() is not supported yetr  )rm   interestr  s      ro   parse_open_interestExchange.parse_open_interest  r  rw   c                     0 n[        S[        U5      5       H  nX   nU R                  U5      nXcUS   '   M!     U R                  USU5      $ r(
  )r  r  r  r
  )rm   r5  rM  rV  r   ri  r  s          ro   parse_open_interestsExchange.parse_open_interests  sW    q#h-(AKE--e4F'-6(#$ ) ##FHg>>rw   c                     / n[        S[        U5      5       H)  nX   nU R                  Xr5      nUR                  U5        M+     U R	                  US5      n	U R                  US5      n
U R                  XX45      $ r  )r  r  r  rh  r  r  rk	  )rm   r5  r  r  r  r  r   ri  r  rJ  r@  s              ro   parse_open_interests_history%Exchange.parse_open_interests_history  sx    	q#h-(AKE//>HX& ) i5!!&(300NNrw   c                 r   U R                   S   (       a  U R                  5         U R                  U5      nUS   nUS   (       d  [        U R                  S-   5      eU R                  U/U5      nU R                  XA5      nUc  [        U R                  S-   U-   5      eU$ [        U R                  S-   5      e)Nr  r@  r  z2 fetchFundingRate() supports contract markets onlyz) fetchFundingRate() returned no data for z( fetchFundingRate() is not supported yet)	rR  rV  r  r   r  r  r  r   r   rm   r@  r  r  r  r;	  s         ro   fetch_funding_rateExchange.fetch_funding_rate  s    88'([[(FH%F*%*^ ^__,,fXv>E??51D|"477-X#X[a#abbtww)SSTTrw   c                 r   U R                   S   (       a  U R                  5         U R                  U5      nUS   nUS   (       d  [        U R                  S-   5      eU R                  U/U5      nU R                  XA5      nUc  [        U R                  S-   U-   5      eU$ [        U R                  S-   5      e)Nr  r@  r  z6 fetchFundingInterval() supports contract markets onlyz- fetchFundingInterval() returned no data for z, fetchFundingInterval() is not supported yet)	rR  rV  r  r   r  r  r  r   r   r#  s         ro   fetch_funding_intervalExchange.fetch_funding_interval  s    88+,[[(FH%F*%*b bcc00&6BE??51D|"477-\#\_e#efftww)WWXXrw   c           
          U R                   S   (       a&  SS0nU R                  XX4U R                  Xe5      5      $ [        U R                  S-   5      e)a  
fetches historical mark price candlestick data containing the open, high, low, and close price of a market
:param str symbol: unified symbol of the market to fetch OHLCV data for
:param str timeframe: the length of time each candle represents
:param int [since]: timestamp in ms of the earliest candle to fetch
:param int [limit]: the maximum amount of candles to fetch
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns float[][]: A list of candles ordered, open, high, low, close, None
r  r   markz& fetchMarkOHLCV() is not supported yetrR  r	  rX  r   r  rm   r@  ri  r  r  r  rx  s          ro   fetch_mark_ohlcvExchange.fetch_mark_ohlcv  sS     88$%G ##FuT[[QXEabbtww)QQRRrw   c           
          U R                   S   (       a&  SS0nU R                  XX4U R                  Xe5      5      $ [        U R                  S-   5      e)a6  
       fetches historical index price candlestick data containing the open, high, low, and close price of a market
       :param str symbol: unified symbol of the market to fetch OHLCV data for
       :param str timeframe: the length of time each candle represents
       :param int [since]: timestamp in ms of the earliest candle to fetch
       :param int [limit]: the maximum amount of candles to fetch
       :param dict [params]: extra parameters specific to the exchange API endpoint
@returns {} A list of candles ordered, open, high, low, close, None
       r  r   r  z' fetchIndexOHLCV() is not supported yetr+  r,  s          ro   fetch_index_ohlcvExchange.fetch_index_ohlcv  sS     88%&G ##FuT[[QXEabbtww)RRSSrw   c           
          U R                   S   (       a&  SS0nU R                  XX4U R                  Xe5      5      $ [        U R                  S-   5      e)a  
fetches historical premium index price candlestick data containing the open, high, low, and close price of a market
:param str symbol: unified symbol of the market to fetch OHLCV data for
:param str timeframe: the length of time each candle represents
:param int [since]: timestamp in ms of the earliest candle to fetch
:param int [limit]: the maximum amount of candles to fetch
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns float[][]: A list of candles ordered, open, high, low, close, None
r1  r   premiumIndexz. fetchPremiumIndexOHLCV() is not supported yetr+  r,  s          ro   fetch_premium_index_ohlcv"Exchange.fetch_premium_index_ohlcv  sS     88,-G ##FuT[[QXEabbtww)YYZZrw   c                     U R                  US5      nUbB  U R                  U R                  S   U5      nUc  [        U R                  S-   U-   S-   5      eU$ g)z
@ignore
Must add timeInForce to self.options to use self method
       :returns str: returns the exchange specific value for timeInForce
       r  Nz does not support timeInForce "r  )r  r  r   r   r  )rm   r  r  exchangeValues       ro   handle_time_in_forceExchange.handle_time_in_force%  sg     ,,V]C" ,,T\\--H+VM$#DGG.O$OR]$]`c$cdd  rw   c                     U R                  U R                  S0 5      nUR                  " 5       nX2;   a  X#   $ XR                  ;   d  XR                  ;   a  U R                  U5      nUS   $ U$ )z
@ignore
Must add accountsByType to self.options to use self method
       :param str account: key for account name in self.options['accountsByType']
       :returns: the exchange specific account name or the isolated margin id for transfers
       accountsByTyper  )r  r   r  rO  rP  r  )rm   r:   r;  lowercaseAccountr  s        ro   convert_type_to_account Exchange.convert_type_to_account3  sh     6FK"==?-!33%76H6H+H[[)F$<Nrw   c                     [        U5      nUb  US:  a_  U R                  X$5      (       dH  SR                  U5      nU R                  S-   U-   S-   U-   S-   nUS:w  a  USU-   S	-   -  n[	        U5      egg)
ah  
@ignore
       :param str methodName: the name of the method that the argument is being checked for
       :param str argument: the argument's actual value provided
       :param str argumentName: the name of the argument being checked(for logging purposes)
       :param str[] options: a list of options that the argument can be
       :returns None:
       Nr   rR
  rh  z() requires a z	 argumentr   z
, one of (r	  )r  r  r   r  r   )rm   r  argumentargumentNamer   optionsLengthmessageOptionsr  s           ro   r
   Exchange.check_required_argumentD  s     G=1#4t}}X?_?_!YYw/Nggmj03CClRU``G#,~=CC#G,, @`#4rw   c                     US:X  a!  Uc  [        U R                  S-   U-   S-   5      eUS:X  a"  Ub  [        U R                  S-   U-   S-   5      egg)z
@ignore
       :param str symbol: unified symbol of the market
       :param str methodName: name of the method that requires a symbol
       :param str marginMode: is either 'isolated' or 'cross'
       r  Nrh  z1() requires a symbol argument for isolated marginr  z1() cannot have a symbol argument for cross margin)r   r  )rm   r  r@  rT  s       ro   check_required_margin_argument'Exchange.check_required_margin_argumentU  sa     *$6>#DGGcMJ$>At$tuuG#&*<#DGGcMJ$>At$tuu +=#rw   c                    0 n[        U[        5      nUnU(       d  [        UR                  5       5      n[        S[	        U5      5       H  nXg   nU(       a  UOX   n	U(       a  U R                  X5      OUn
U R                  U
5      nU R                  US5      nUb  U R                  X5      (       d  Ml  U R                  X5      XL'   M     U$ )a  
@ignore
       :param object[]|dict response: unparsed response from the exchange
       :param str[]|None codes: the unified currency codes to fetch transactions fees for, returns all currencies when None
       :param str currencyIdKey: *should only be None when response is a dictionary* the object key that corresponds to the currency id
       :returns dict: objects with withdraw and deposit fees, indexed by currency codes
       r   rI  )	re   r  r  r  r  r  r  r  parse_deposit_withdraw_fee)rm   r5  r  currencyIdKeydepositWithdrawFeesrX	  responseKeysr   ri  r  rM  r  rI  s                ro   parse_deposit_withdraw_fees$Exchange.parse_deposit_withdraw_feesa  s     !Xt,0Lq#l+,A OE")xJHO))*DUZJ))*5H##Hf5D4==#=#=,0,K,KJ,a#) - #"rw   c                 2    [        U R                  S-   5      e)Nz/ parseDepositWithdrawFee() is not supported yetr  )rm   r4  r  s      ro   rI  #Exchange.parse_deposit_withdraw_feex  ri  rw   c                     US S S.S S S.0 S.$ )N)r4  r~   )r-  r   r   r  rq   )rm   r-  s     ro   deposit_withdraw_feeExchange.deposit_withdraw_fee{  s,    "
 " 
 	
rw   c                 H   [        US   R                  5       5      n[        U5      nUS:X  a$  US   US      S   US'   US   US      S   US'   U$ U R                  US5      n[	        SU5       H.  nX6   nXu:X  d  M  US   X6      S   US'   US   X6      S   US'   M0     U$ )a9  
@ignore
       Takes a depositWithdrawFee structure and assigns the default values for withdraw and deposit
       :param dict fee: A deposit withdraw fee structure
       :param dict currency: A currency structure, the response from self.currency()
       :returns dict: A deposit withdraw fee structure
       r  r   r   r   r   rI  )r  r  r  r  r  )rm   r4  r  networkKeysnumNetworksr0
  r   r  s           ro   $assign_default_deposit_withdraw_fees-Exchange.assign_default_deposit_withdraw_fees  s     3z?//12+&!!*ok!n=jIC
O _[^<YGC	NJ''&9q+&A!nG&"%j/+."A*"MJ!$Z!@!KI	 '
 
rw   c                 2    [        U R                  S-   5      e)Nz# parseIncome() is not supported yetr  r  s      ro   parse_incomeExchange.parse_income  rE  rw   c                     / n[        S[        U5      5       H)  nX   nU R                  Xr5      nUR                  U5        M+     U R	                  US5      n	U R                  US5      n
U R                  XX45      $ )a  
@ignore
       parses funding fee info from exchange response
       :param dict[] incomes: each item describes once instance of currency being received or paid
       :param dict market: ccxt market
       :param int [since]: when defined, the response items are filtered to only include items after self timestamp
       :param int [limit]: limits the number of items in the response
       :returns dict[]: an array of `funding history structures <https://docs.ccxt.com/#/?id=funding-history-structure>`
       r   r  r@  )r  r  rZ  rh  r  r  rk	  )rm   incomesr  r  r  rV  r   ri  r  rJ  r@  s              ro   parse_incomesExchange.parse_incomes  sx     q#g,'AJE&&u5FMM&! ( fk2!!&(300NNrw   c                 T    Uc  g U R                  US5      nU R                  U5      nU$ rD  )r  r  )rm   rM  firstMarketr  s       ro   get_market_from_symbols Exchange.get_market_from_symbols  s/    ?&&w2[)rw   c                     / n[        S[        U5      5       H&  nUR                  U R                  X   U5      5        M(     U$ rD  )r  r  rh  r  )rm   r   r  ri  r  r  rl	  r   s           ro   parse_ws_ohlcvsExchange.parse_ws_ohlcvs  s<    q#f+&ANN4..vy&AB 'rw   c                 ~    U R                   S   (       a  U R                  XX45      $ [        U R                  S-   5      e)a0  
@deprecated
       *DEPRECATED* use fetchDepositsWithdrawals instead
       :param str code: unified currency code for the currency of the deposit/withdrawals, default is None
       :param int [since]: timestamp in ms of the earliest deposit/withdrawal, default is None
       :param int [limit]: max number of deposit/withdrawals to return, default is None
       :param dict [params]: extra parameters specific to the exchange API endpoint
       :returns dict: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
       r  z) fetchTransactions() is not supported yet)rR  r  r   r  rB  s        ro   fetch_transactionsExchange.fetch_transactions  s9     88./224NNtww)TTUUrw   c                 &    U R                  XX45      $ )zX
@ignore
       Typed wrapper for filterByArray that returns a list of positions
       r
  rm   r)
  r  rv  r
  s        ro   r{
  "Exchange.filter_by_array_positions      
 ##G&BBrw   c                 &    U R                  XX45      $ )z\
@ignore
       Typed wrapper for filterByArray that returns a dictionary of tickers
       rk  rl  s        ro   filter_by_array_tickers Exchange.filter_by_array_tickers  rn  rw   c                      0 n0 XA'   X4U   U'   U$ r   rq   )rm   r@  ri  rb  rt  s        ro   create_ohlcv_objectExchange.create_ohlcv_object  s    !%FI
rw   maxEntriesPerRequestc                 R    S nU R                  X1S5      u  pCUb  XB:w  a  UnUc  SnX#/$ )Nru  ra  r  )rm   rL  ru  r  newMaxEntriesPerRequests        ro   )handle_max_entries_per_request_and_params2Exchange.handle_max_entries_per_request_and_params  sF    "&*.*G*GXn*o'#/6M6e#: '#' $--rw   c                    S nU R                  XQSS5      u  pS n	U R                  XQSS5      u  pS n
U R                  XQSS5      u  pS nUnU R                  XQSU5      u  pSn/ nSnU R                  U/ S	Q5      nU R                  XU5      u  peU
S
:X  a  Uc  [        U R                  S-   5      eUnX:  Ga  US-  n U
S:X  a  Ub  US-
  US'   [        X5      " US Xe5      n[        U5      nU R                  (       aZ  SU R                  U5      -   S-   U-   S-   U R                  U5      -   nUb  USU R                  U5      -   -  nU R                  U5        US:X  a  GO"SnU R                  UU5      nU R                  US5      nU R                  USS5      nUb  X::  a  OO[        X5      " X+Xe5      n[        U5      nU R                  (       aZ  SU R                  U5      -   S-   U-   S-   U R                  U5      -   nUb  USU R                  U5      -   -  nU R                  U5        US:X  a  OPSnU R                  UU5      nU R                  UUS-
  5      nU R                  US5      S-   nUb  UU:  a  OX:  a  GM  UnU(       a  U R                  U5      nUS:X  a  SOSnU R!                  UX4U5      $ ! [         a  nUS-  nX:  a  Ue S nANZS nAff = f)NpaginationCallsr  r  rv  paginationDirectionbackwardremoveRepeatedr   )untiluntilltillforwardzM pagination requires a since argument when paginationDirection set to forwardr   r  zDynamic pagination call  method  response length z timestamp r  r  )r
  r  rx  r   r  r   r  rs  r    rD  r  r  r  r  rf   #remove_repeated_elements_from_arrayr  )rm   rL  r@  r  r  r  ru  r~  maxCallsr  r|  paginationTimestampremoveRepeatedOptioncallsrV  errorsr  r5  responseLengthbackwardMessagefirstElementforwardMessager  r  uniqueResultsr  s                             ro   fetch_paginated_call_dynamic%Exchange.fetch_paginated_call_dynamic  s   88IZ\^_
!::6<YZ[
"&*&C&CFTiku&v#"-'+'D'DVUegu'v$##F,GH'+'U'UV\tz'{$9,}'  3B  )B  C  C"'QJE)&*4 +6*=*Aw&t4VTCW`H%(]N||*DtG\G\]bGc*cfp*psy*y  }P  +P  SW  Sh  Sh  iw  Sx  +x.:+}t?T?TUh?i/iiO1%*F!..vx@F#'??8Q#?L*.*=*=lKYZ*[')0C0L  't4VRfoH%(]N||)CdF[F[\aFb)beo)orx)x  |O  *O  RV  Rg  Rg  hv  Rw  *w.:*md>S>STg>h.hhN0%*F!..vx@F??8^a5GHD*.*;*;D+*NQR*R')0Cu0LO X  DDVLMl*a))-sKK  !&G 's.   <B J7 AJ7 !BJ7 0AJ7 7
KKKc                 ,   S nU R                  XaSS5      u  pvSnX::  a3   U(       a  US:w  a  [        X5      " X%X4U5      $ [        X5      " X#XF5      $ / $ ! [         a-  n	[        U	[        5      (       a  U	eUS-  nX:  a  U	e S n	A	OS n	A	ff = fX::  a  Mv  ND)Nr  rv  r   r  r   )r
  r   rf   re   r   )
rm   rL  r@  r  r  ri  r  r  r  r  s
             ro   safe_deterministic_call Exchange.safe_deterministic_call3  s    
!::6<YZ[
"
+D!D"40ERXYY"40NN 	  a!233G!&G '	 "s   A  A 
B#BBc                 T   S nU R                  XaSS5      u  pU R                  XU5      u  pvU R                  5       n	/ n
U R                  U5      S-  nX-  nXU-  -
  S-
  nUb  [	        X5      nO[	        US5      nU R                  USS5      nUb\  [        [        R                  " X-
  5      U-  5      nX:  a3  [        U R                  S-   [        U5      -   S	-   [        U5      -   5      e[        S
U5       HJ  nUb  X:  a    OAX:  a    O:U
R                  U R                  XXXV5      5        U R                  X5      S-
  nML     U
n/ n[        S
[!        U5      5       H  nU R#                  UUU   5      nM     U R%                  U5      nUS:X  a  S
OSnU R'                  UX4U5      $ )Nr{  r  ra  r   l   82>r  r  z 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 z required calls is r   r  r  )r
  rx  r  rl  r   r  r  r  ceilr   r  r=  r  rh  r  r  r  r  r  r  )rm   rL  r@  r  r  ri  r  ru  r  r	  tasksr   stepcurrentSincer  requiredCallsr   rl	  rV  r  r  s                        ro   "fetch_paginated_call_deterministic+Exchange.fetch_paginated_call_deterministicE  s   88IZ\^_'+'U'UV\tz'{$##%##I.5*T/2Q6|3L|];L##FGV<		5= :T ABM'   ,c  "c  fi  jr  fs  "s  vK  "K  NQ  R_  N`  "`  a  aq(#A!(=&LL55fljs|}88L7!;L $ q#g,'A&&vwqz:F (@@Hl*a))-sKKrw   c
                    S n
U R                  XQSS5      u  pS nU R                  XQSS5      u  pU R                  XU5      u  pS nSnSn/ nU R                  US5      nU R                  US5      nX:  Ga   Ub  Ub  U R	                  U5      U-   nXU'   S nUS:X  a  [        X5      " U5      nOKUS:X  d  US	:X  a  [        X5      " X%5      nO-US
:X  a  [        X5      " UUX9U5      nO[        X5      " X#X5      nSn[        U5      nU R                  (       aF  Uc  SOUnUS-   nS[        U5      -   S-   U-   S-   [        U5      -   S-   U-   nU R                  U5        US:X  a  OU R                  UU5      nU R                  UUS-
  5      nS n[        SU5       HH  nUU-
  S-
  nU R                  UU5      nU R                  US5      nU R                  UU5      nUc  MF  Un  O   Uc  O)U R                  US5      nUb  UU:  a  OUS-  nX:  a  GM  U R!                  U5      nUS:X  a  SOSnU R#                  UX4U5      $ ! [         a  nUS-  nX:  a  Ue S nANVS nAff = f)Nr{  r  r  rv  r   ri  r  getLeverageTiersPaginatedr,  r  r   r   zCursor pagination call r  r  z cursor r-  r  r  )r
  rx  r  r  r8  r   r  rs  r=  rD  r  r  r  r  r  rf   sort_cursor_paginated_resultr  ) rm   rL  r@  r  r  r  cursorReceived
cursorSentcursorIncrementru  r  r  cursorValuer   r  rV  ri  r5  r  cursorString	iterationcursorMessager  r  r  ri  r-  cursorlastTimestampr  rJ  r  s                                    ro   fetch_paginated_call_cursor$Exchange.fetch_paginated_call_cursorf  s   88IZ\^_
!::6<YZ[
'+'U'UV\tz'{$$$V[9	6;/l+*&2&*&7&7&D&V)4:&_,&t4V<H::fHX>X&t4VDH99&t4VYeklH&t4VDXaH!$X<<*5*=2KL!"QI$=I$NQ[$[^d$dgz$z  ~A  BP  ~Q  %Q  T^  %^  am  %mMHH]+!Q&**68<~~h0BC"q.1A*Q.2E NN8U;E>>%8D!__T>BF)&, 2 & $ 1 1$ D ,1F
 FA[ l\ 226:l*a))&%DD  !&G 's,   6C-I  $A7I  	I  )I   
I 
II c                 h   S nU R                  XQSS5      u  pS n	U R                  XQSS5      u  pU R                  XU5      u  puSn
Sn/ nX:  a   U
S-   XV'   [        X5      " X#Xu5      nSn[        U5      nU R                  (       a9  U
[        S5      -   nSU-   S-   U-   S	-   [        U5      -   nU R                  U5        US:X  a  OU R                  X5      nU
S-  n
X:  a  M  U R                  U5      nUS
:X  a  SOSnU R                  UX4U5      $ ! [         a  nUS-  nX:  a  Ue S nANUS nAff = f)Nr{  r  r  rv  r   r   zIncremental pagination call r  r  r  r  )r
  rx  r   r  rs  r=  rD  r  rf   r  r  )rm   rL  r@  r  r  r  pageKeyru  r  r  r   r  rV  r5  r  r  incrementalMessager  rJ  r  s                       ro    fetch_paginated_call_incremental)Exchange.fetch_paginated_call_incremental  s   88IZ\^_
!::6<YZ[
'+'U'UV\tz'{$l"#a%"40@T]!$X<<!"SVI)G))SV`)`ci)il)  CF  GU  CV  *V&HH/0!Q&**6<
 FA# l$ 226:l*a))&%DD  !&G 's   A6D D 
D1D,,D1c                     U R                  US5      nUb2  SU;   a  U R                  USS5      $ SU;   a  U R                  USS5      $ U$ )Nr   r  Tr  )r  r  )rm   rV  r  s      ro   r  %Exchange.sort_cursor_paginated_result  sR    *e#||FK>>u}||FD$77rw   fallbackToTimestampc                    0 n/ n[        S[        U5      5       HU  nX   nU(       a  U R                  U/ SQ5      OU R                  US5      nUc  M9  Xs;  d  M@  SX7'   UR	                  U5        MW     [        U5      nUS:  a  U$ U$ )Nr   )r  r  r   r  r   )r  r  r  r  rh  )	rm   r"  r  	uniqueDicuniqueResultr   ri  	uniqValuevaluesLengths	            ro   r  ,Exchange.remove_repeated_elements_from_array  s    	q#e*%AHEM`**52HIfjfvfvw|  C  gDI$i.D'(	$##E* & <(!rw   c                    0 n[        S[        U5      5       H  nX   nU R                  US5      nUch  U R                  US5      nU R                  US5      nU R                  US5      nU R                  US5      n	S[        U5      -   S-   U	-   S-   U-   S-   U-   nUc  M  XR;  d  M  XBU'   M     [	        UR                  5       5      n
U
$ )	Nr   r  r   r   r  r  t_r   )r  r  r  r=  r  rv  )rm   r"  r  r   ri  r  r   r   r  r  rv  s              ro   !remove_repeated_trades_from_array*Exchange.remove_repeated_trades_from_array  s    q#e*%AHE!!%.Bz((8))%: ,,UK@	''v6C	N*S047#=EKfT~r'9#(R  & l))+,rw   r   
removeKeysc                     [        UR                  5       5      n0 n[        S[        U5      5       H%  nX5   nU R	                  Xb5      (       a  M  X   XF'   M'     U$ rD  )r  r  r  r  r  )rm   r   r  r  newDictr   r  s          ro   remove_keys_from_dictExchange.remove_keys_from_dict  sR    DIIK q#d)$A'C==11#y % rw   c                     U R                  USS5      nUb)  U R                  XT-  5      X!'   U R                  USS/5      nX#/$ )Nr  r  )r  r8  r  )rm   r  rx  r  
multiplierr  s         ro   handle_until_optionExchange.handle_until_option  sO    ##FGV<,,U-?@GLYYv'89F  rw   r  c                 f   U R                  US5      nUc  U R                  US5      nU R                  UUU R                  US5      U R                  US5      U R                  US5      U R                  US5      U R                  US5      U R                  US5      U R	                  US5      S	.5      $ )
Nr@  rs  rt  openInterestAmountopenInterestValuer  r  r-  )r@  rs  rt  r  r  r  r  r-  )r  rX  r  r  r  )rm   r  r  r@  s       ro   safe_open_interestExchange.safe_open_interest  s    !!(H5>%%fh7F{{8**8\B++HmD"&"2"28=Q"R!%!1!1(<O!P**8[A((:>OOHf5	&
 	 		rw   c                 2    [        U R                  S-   5      e)Nz( parseLiquidation() is not supported yetr  )rm   r	  r  s      ro   parse_liquidationExchange.parse_liquidation
  r  rw   r   c                     / n[        S[        U5      5       H)  nX   nU R                  Xr5      nUR                  U5        M+     U R	                  US5      n	U R                  US5      n
U R                  XX45      $ )a  
@ignore
       parses liquidation info from the exchange response
       :param dict[] liquidations: each item describes an instance of a liquidation event
       :param dict market: ccxt market
       :param int [since]: when defined, the response items are filtered to only include items after self timestamp
       :param int [limit]: limits the number of items in the response
       :returns dict[]: an array of `liquidation structures <https://docs.ccxt.com/#/?id=liquidation-structure>`
       r   r  r@  )r  r  r  rh  r  r  rk	  )rm   r   r  r  r  rV  r   ri  r  rJ  r@  s              ro   parse_liquidationsExchange.parse_liquidations  sy     q#l+,A OE++E:FMM&! - fk2!!&(300NNrw   greeksc                 2    [        U R                  S-   5      e)Nz# parseGreeks() is not supported yetr  )rm   r  r  s      ro   parse_greeksExchange.parse_greeks   rE  rw   c                    / n[        U[        5      (       aR  [        S[        U5      5       H8  nU R	                  X   5      nU R                  Xc5      nUR                  U5        M:     O[        UR                  5       5      n[        S[        U5      5       HN  nX   n	U R                  U	5      n
U R	                  X   U
5      nU R                  X5      nUR                  U5        MP     U R                  U5      nU R                  USU5      $ r(
  )re   r  r  r  r  rX  rh  r  rf
  r
  r
  )rm   r  rM  r  rl	  r   r  greekr  rj
  r  r  s               ro   parse_all_greeksExchange.parse_all_greeks#  s     fd##1c&k*#00;L9u% +
 V[[]+I1c)n-$<))(3**6+;VDF3u% . %%g.##GXw??rw   chainc                 2    [        U R                  S-   5      e)Nz# parseOption() is not supported yetr  )rm   r  r  r  s       ro   parse_optionExchange.parse_option8  rE  rw   currencyKey	symbolKeyc                    0 n[        S[        U5      5       He  nX   nU R                  Xb5      nU R                  U5      nU R                  Xc5      n	U R	                  U	S S S5      n
U R                  XhU
5      XJS   '   Mg     U$ )Nr   r  r@  )r  r  r  r  rf
  r  )rm   r5  r  r  optionStructuresr   r-  rM  r  rj
  r  s              ro   parse_option_chainExchange.parse_option_chain;  s    q#h-(A;D))$<J))*5H''8H%%hdHEF151B1B4SY1ZH-. )  rw   c                    0 nUc  Sn[        S[        U5      5       Ha  nX   nU R                  Xs5      nU R                  US S U5      n	Ub  U R	                  U	S   U5      (       d  MK  U R                  Xy5      XYS   '   Mc     U$ Nr  r   r@  )r  r  r  rf
  r  parse_margin_mode)
rm   r5  rM  r  r  marginModeStructuresr   r-  rj
  r  s
             ro   parse_margin_modesExchange.parse_margin_modesF  s    !Jq#h-(A;D''8H%%hdJGFDMM&2BG$L$L9=9O9OPT9]$H%56 ) $#rw   c                 2    [        U R                  S-   5      e)Nz' parseMarginMode() is not supported yetr  )rm   rT  r  s      ro   r  Exchange.parse_margin_modeR  r>  rw   c                    0 nUc  Sn[        S[        U5      5       Ha  nX   nU R                  Xs5      nU R                  US S U5      n	Ub  U R	                  U	S   U5      (       d  MK  U R                  Xy5      XYS   '   Mc     U$ r  )r  r  r  rf
  r  parse_leverage)
rm   r5  rM  r  r  leverageStructuresr   r-  rj
  r  s
             ro   parse_leveragesExchange.parse_leveragesU  s    Jq#h-(A;D''8H%%hdJGFDMM&2BG$L$L7;7J7J47X"(#34 ) "!rw   c                 2    [        U R                  S-   5      e)Nz% parseLeverage() is not supported yetr  )rm   r   r  s      ro   r  Exchange.parse_leveragea  r?  rw   conversionsfromCurrencyKeytoCurrencyKeyc                    U R                  U5      n/ nS n	S n
[        S[        U5      5       H  nX   nU R                  X5      nU R                  X5      nUb  U R	                  U5      n	Ub  U R	                  U5      n
U R                  U R                  XU
5      U5      nUR                  U5        M     U R                  US5      nS nUb  U R	                  U5      nUS   nUc  U R                  UXV5      $ U R                  USU5      nU R                  USU5      nU R                  UU5      nU R                  UXV5      $ )Nr   r  rI  fromCurrency
toCurrency)r_  r  r  r  r  rX  parse_conversionrh  r  r  rb  r  )rm   r  rI  r  r  r  r  r  rV  r  r  r   ri  fromIdtoId
conversionrJ  r  fromConversiontoConversionboths                        ro   parse_conversionsExchange.parse_conversionsd  sK   mmK0
q#k*+ANE%%e=F##E9D!#11&9!//5
T%:%:5PZ%[]cdJMM*% , fk2))$/HF#D<--feCCE~~flDA  >))$==rw   r  r  r  c                 2    [        U R                  S-   5      e)Nz' parseConversion() is not supported yetr  )rm   r  r  r  s       ro   r  Exchange.parse_conversion  r>  rw   datec                 L    USS nUSS nUSS nSU-   S-   U-   S-   U-   S-   nU$ )Nr   r#  r!  r"  20r1  z
T00:00:00Zrq   )rm   r  yearmonthdayreconstructedDates         ro   convert_expire_dateExchange.convert_expire_date  sL    AayQq	1Qi 4K#-5;cALP  rw   c                    USS nUSS nS nUSS nUS:X  a  SnObUS:X  a  SnOYUS	:X  a  S
nOPUS:X  a  SnOGUS:X  a  SnO>US:X  a  SnO5US:X  a  SnO,US:X  a  SnO#US:X  a  SnOUS:X  a  SnOUS:X  a  SnOUS:X  a  SnXT-   U-   nU$ )Nr   r#  r!  r"  01JAN02FEB03MAR04APR05MAY06JUN07JUL08AUG09SEP10OCT11NOV12DECrq   )rm   r  r  monthRawr  r  r	  s          ro   %convert_expire_date_to_market_id_date.Exchange.convert_expire_date_to_market_id_date  s    Aay!91QitEEEEEEEEEEEEK$.  rw   c                     SSSSSSSSS	S
SSS.n[        U5      S:X  a  SU-   nUSS nUSS nU R                  X$5      nUSS nXe-   U-   nU$ )Nr  r  r  r  r  r  r  r  r  r  r!  r#  )r  r  r  r  r  r  r  r  r  r   r"  r$  r"  r  r   r#  r	  r  )r  r  )rm   r  monthMapppingr  	monthNamer  r  r	  s           ro   convert_market_id_expire_date&Exchange.convert_market_id_expire_date  s     
 t9>:DAay1I	  :1QiK$.  rw   c                     U R                   S   (       a  U R                  U/X#U5      nU$ [        U R                  S-   5      e)  
fetches the history of margin added or reduced from contract isolated positions
:param str [symbol]: unified market symbol
:param int [since]: timestamp in ms of the position
:param int [limit]: the maximum amount of candles to fetch, default=1000
:param dict params: extra parameters specific to the exchange api endpoint
:returns dict[]: a list of `position structures <https://docs.ccxt.com/#/?id=position-structure>`
r)  z, fetchPositionHistory() is not supported yet)rR  fetch_positions_historyr   r  )rm   r@  r  r  r  ry
  s         ro   fetch_position_historyExchange.fetch_position_history  sB     88+,44fXuVTItww)WWXXrw   c                 2    [        U R                  S-   5      e)r.  z- fetchPositionsHistory() is not supported yetr  rO  s        ro   r/   Exchange.fetch_positions_history  s     477%TTUUrw   c                 2    [        U R                  S-   5      e)Nz/ parseMarginModification() is not supported yetr  )rm   rb  r  s      ro   parse_margin_modification"Exchange.parse_margin_modification  ri  rw   c                    / n[        S[        U5      5       Hk  nX   nU R                  Xs5      nU R                  US S U5      n	Ub  U R	                  U	S   U5      (       d  MK  UR                  U R                  Xy5      5        Mm     U$ r(
  )r  r  r  rf
  r  rh  r5  )
rm   r5  rM  r  r  marginModificationsr   r-  rj
  r  s
             ro   parse_margin_modifications#Exchange.parse_margin_modifications  s     q#h-(A;D''8H%%hdJGFDMM&2BG$L$L#**4+I+I$+WX ) #"rw   c                 2    [        U R                  S-   5      e)z
fetches a transfer
:param str id: transfer id
:param [str] code: unified currency code
:param dict params: extra parameters specific to the exchange api endpoint
:returns dict: a `transfer structure <https://docs.ccxt.com/#/?id=transfer-structure>`
z% fetchTransfer() is not supported yetr  rF  s       ro   fetch_transferExchange.fetch_transfer  s     477%LLMMrw   c                 2    [        U R                  S-   5      e)aT  
fetches a transfer
:param str id: transfer id
:param int [since]: timestamp in ms of the earliest transfer to fetch
:param int [limit]: the maximum amount of transfers to fetch
:param dict params: extra parameters specific to the exchange api endpoint
:returns dict: a `transfer structure <https://docs.ccxt.com/#/?id=transfer-structure>`
z& fetchTransfers() is not supported yetr  rB  s        ro   fetch_transfersExchange.fetch_transfers  s     477%MMNNrw   c                 2    [        U R                  S-   5      e)a  
watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
:param str symbol: unified symbol of the market to fetch OHLCV data for
:param str timeframe: the length of time each candle represents
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns int[][]: A list of candles ordered, open, high, low, close, volume
z$ unWatchOHLCV() is not supported yetr  rJ  s       ro   un_watch_ohlcvExchange.un_watch_ohlcv  s     477%KKLLrw   c                 2    [        U R                  S-   5      e)a  
watches a mark price for a specific market
:param str symbol: unified symbol of the market to fetch the ticker for
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
z& watchMarkPrice() is not supported yetr  r[  s      ro   watch_mark_priceExchange.watch_mark_price       477%MMNNrw   c                 2    [        U R                  S-   5      e)a  
watches the mark price for all markets
:param str[] symbols: unified symbol of the market to fetch the ticker for
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
z' watchMarkPrices() is not supported yetr  rf  s      ro   watch_mark_pricesExchange.watch_mark_prices       477%NNOOrw   c                 2    [        U R                  S-   5      e)aN  
make a withdrawal
:param str code: unified currency code
:param float amount: the amount to withdraw
:param str address: the address to withdraw to
:param str tag:
:param dict [params]: extra parameters specific to the bitvavo api endpoint
:returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
z" withdrawWs() is not supported yetr  r*  s         ro   withdraw_wsExchange.withdraw_ws  s     477%IIJJrw   c                 2    [        U R                  S-   5      e)a/  
unWatches information on multiple trades made by the user
:param str symbol: unified market symbol of the market orders were made in
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
z' unWatchMyTrades() is not supported yetr  r[  s      ro   un_watch_my_tradesExchange.un_watch_my_trades)  rK  rw   c                 2    [        U R                  S-   5      e)ad  
create a list of trade orders
: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
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
z& createOrdersWs() is not supported yetr  rg  s      ro   create_orders_wsExchange.create_orders_ws2  rG  rw   r}  c                 2    [        U R                  S-   5      e)a  
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
:param str symbol: unified symbol of the market to fetch the order book for
:param int [limit]: the maximum amount of order book entries to return
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
z- fetchOrdersByStatusWs() is not supported yetr  )rm   r}  r@  r  r  r  s         ro   fetch_orders_by_status_ws"Exchange.fetch_orders_by_status_ws;  s     477%TTUUrw   c                 2    [        U R                  S-   5      e)a  
unWatches best bid & ask for symbols
:param str[] symbols: unified symbol of the market to fetch the ticker for
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
z' unWatchBidsAsks() is not supported yetr  rf  s      ro   un_watch_bids_asksExchange.un_watch_bids_asksE  rK  rw   subHash	unsubHashc                    X1R                   ;   a  UR                   U	 U(       dX  X!R                   ;   a  UR                   U	 X!R                  ;   a,  [        U R                  S-   U-   5      nUR	                  XR5        O[        UR                   R                  5       5      n[        S[        U5      5       H,  nXg   nUR                  U5      (       d  M  UR                   U	 M.     [        UR                  R                  5       5      n	[        S[        U	5      5       HK  nX   n
U
R                  U5      (       d  M  [        U R                  S-   U
-   5      nUR	                  XZ5        MM     UR                  SU5        g )Nrh  r   T)subscriptionsr
  r   r  rejectr  r  r  r  r  resolve)rm   r  r[  r\  subHashIsPrefixr0  clientSubscriptionsr   r  clientFuturesr  s              ro   clean_unsubscriptionExchange.clean_unsubscriptionN  s8   ,,,$$Y/...((1..((3)@Ae-"&v';';'@'@'B"C1c"567),>>'**,,S1 8 !!4!4!67M1c-01&)$$W--,TWWs]V-CDEMM%0	 2
 	tY'rw   subscriptionc                 j   U R                  US5      nU R                  US/ 5      n[        U5      nUS:X  a  U R                  US/ 5      n[        S[        U5      5       Ho  nXV   nU R                  US5      nU R                  US5      n	U R                  c  M:  XR                  ;   d  MK  XR                  U   ;   d  M_  U R                  U   U		 Mq     g US:  a  [        S[        U5      5       H  nX6   nUS:X  a   XR
                  ;   a  U R
                  U	 M+  M-  US:X  a   XR                  ;   a  U R                  U	 MQ  MS  US	:X  a   XR                  ;   a  U R                  U	 Mw  My  US
:X  d  M  XR                  ;   d  M  U R                  U	 M     g US:X  a  U R                  b  S U l	        g US:X  a  U R                  b  S U l
        g US:X  at  U R                  bg  S U l        [        U R                  R                  5       5      n
[        S[        U
5      5       H#  nX   nUR                  nUc  M  SU;   d  M   US	 M%     g US	:X  d  US:X  ao  U R                  bb  [        U R                  R!                  5       5      n[        S[        U5      5       H%  nX   nXR                  ;   d  M  U R                  U	 M'     g US
:X  aq  U R                  bc  [        U R                  R!                  5       5      n[        S[        U5      5       H&  nX   nUU R                  ;   d  M  U R                  U	 M(     g g g )NtopicrM  r   rp  r   r   r   r  r  r   myTradesri	  ry
  fetchPositionsSnapshotr	  )r  r  r  r  r   r   r   r   r   ri  ri	  ry
  r  clientsrv  r
  r  )rm   rf  rh  rM  r
  rp  r   symbolAndTimeFramer@  ri  rk  r  r
  tickerSymbolstickerSymbolbidsaskSymbolsbidsaskSymbols                    ro   clean_cacheExchange.clean_cachee  s     w7..y"=GG#'>>,@VXZ#[ 1c"678%9%<"))*<a@ ,,-?C	KK+&KK2G KK$77 KK/	: 9 Q1c'l+ H$, KK/ -k)0 OOF3 1h&- LL0 .j(. MM&1 , 
"(A $("(?"+%4>>+E!%t||2245q#g,/A$ZF$nnG+2Jg2U#$<=	 0
 8#u';$,,BZ $T\\%6%6%8 9q#m"45A#0#3L#||3 LL6 6 *$$--*C!%dmm&8&8&:!;q#n"56A$2$5M$5 MM-8 7 +D$rw   )0r~
  r
  r   r   r	  r   r  r   r	  r   r   r  r   r   r	  r.  r  r}  r  r
  r
  r
  r  r   r   r   rO  rP  r   ri  r    r   r   r   ri	  r   ry
  r   r	  r   r   rM  r   r  r   r   rt  r   r   )r\  NN)r   )   )r   )Fr   )F)z~()*!.')r1  )r1  T)r   )rh  )md5rD  )ro  )r}  NFr  )r5   F)r5   )T)r   r   r#  )NNNN)Nr  F)NNr  F)NNNr  F)NNN)NNNNN)rE  r  r:  lr  r  F)NN)NNTFF)Nr$
  r#
  r   r   r#  )Nr	  NNF)NNTTr  )r	  r   r  )Nr	  NN)FN)NNNF)r   (H  rh   rr   rs   rt   __doc__r  rd   r  r  r  r  r  r  r  rc  r  aiohttp_proxyssl_contextr   r   r   r   tcp_connectoraiohttp_socks_connectorsocks_proxy_sessionsre  ry  validateClientSslr   rs  rO  rM  r  r{  r  ry  loaded_feesr	  rt  rv  parseJsonResponse	throttlerr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r<  r  r  r  r  r  r  
userAgentsr   r  r   r  r  rd  ry  r   r   r   r   r   r   r   r   r   rP  r	  r   r   r   r   r   r   r
   r	   r   r  r   r   r   ri	  triggerOrdersr   ri  r   r   r   r   r   r   base_currenciesquote_currenciesr   r   r.  r~
  ry
  r}  rz  rR  r  r   r  r   r  r  r  rV  r   r-   __annotations__handleContentTypeApplicationZiprE	  r  lastRestPollTimestamprestRequestQueuerestPollerLoopIsRunningrateLimitTokensrateLimitMaxTokensrateLimitUpdateTimer|  r~  r  r}  r  r  r
  r
  r
  rx  r  r  r  r  r   r"   r  r  r  r  r  r&  staticmethodr8  r?  rD  rQ  rZ  r  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r'  r+  r   r4  r=  r8  r   rH  rL  rR  rX  r   rb  re  rj  rn  rs  rr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r,  r*  rO  rH  ro  rR  rV  rY  r_  rK  rf  ri  rm  r  r  r  r  r  r  r  r<   r  r  r7   r  r  r  r  r  rX  r  ru  r  r_  r=  rB  rF  rJ  rV  rT  rS  rb  rl  r   rp  ru  ry  r  r  r  r  r  r  rL  r!  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r*  r=  rA  rR  rU  rX  ro  r  r  r]   r   r^   r%   r  r  r  r   r   r  r  r  r  r  r  r  r  r  r  r  r  r,   ro  rp  rq  r  rr  r  r  r  r_   r  r  r(  r   r6  rA  r=  rC  rG  rK  rJ  rS  rR  rX  r\  r_  rb  rg  rk  rn  rr  rv  r{  r  r.   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r*   r  r$   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r  r  r!  rS  r   r.  r  r1  r6  r4  r<  rA  rD  rG  rK  rO  rR  rV  rY  r]  r`  rc  rf  ri  r8  rq  ru  ry  r|  r   r  r  r  r  r  r  r  r   r  r  r 	  rQ  r	  r'	  r1	  rg	  ro	  rz	  r}	  r	  r	  r	  r	  r	  r	  r  rF	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r
  r	
  r
  r
  r
  r
  r 
  r%
  r+
  r  r  r5
  r:
  r?
  rE
  rL
  rO
  rI
  r[
  r`
  r0   rc
  rk
  ro
  rw
  r|
  r
  r
  rD	  r
  r
  r
  r
  r{  r>  r
  r
  r@  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  rx  r
  r(   r
  r
  r  r  r&   r  r'   r  r  r  r  r  r!  r$  r'  r+  r/  r3  r6  r9  r<  r?  rC  rG  r  r  rf
  rY  r\  r_  rb  re  rh  rk  ro  rs  rw  rz  r}  r  r  r  r  r  r  r  r
  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r#  r&  r+  r1  r5  r8  r=  r@  rE  rH  rM  rP  rV  rT  rd  r)   rh  rk  r  r  rr  r  rx  r|  r  r  r  r/   r  r  r1   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#   r:   r
  r  r  r  r  r  r  r  r!  r$  r)  r,  r0  r3  r7  r:  r>  rA  rE  rH  rK  rN  rU  rR  r	  r\  r_  r  re  rj  rq  rv  rz  r}  r  r  r  r  r  r  r  r  r  r  rS  rk	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r`  r  r  r  r  r  r   r$  r'  r-  r0  r4  r8  r=  r
  rF  rM  rI  rR  rW  rZ  r^  rb  re  rh  r{
  rp  rs  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r+   r  r  r  r  r  r  r
  r&  r+  r0  r/  r5  r9  r<  r?  rB  rE  rI  rM  rP  rS  rV  rY  rd  rq  ru   rq   rw   ro   rO   rO      sF   	BDIGI
CEOIGLMKIGM"FFGGGEJK 	
 	
D  $
 
	K CD
CI EHIIJJKJKIJGHHILN G C QJ
 G!FeIGHFFH
CIJMEEMIJ 

 

 

 
F&}~ 	  	#	
 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#  	#!" 	##$ $##"""3N6 GLJFMNHFLFGLHOJG HIF  CH"MK$(!FC&+#J #O!" $ MNNRO 
 K13 AR ARFZ'  )%-@$D_
     _ _ Y Y Y Y ! !   S S Z Z ` ` a a g g g g b b v v \ \ ` `
   B B ) ) ) ) ! !   Z Z = = 
 
 W W
 @ @   ; ; ; ; ! ! 2 2 ; ; ;     W W   
 
 
 
 > > 5 5   - - - - 	 	 j j Q Q   " "   1 1   5u R R +- J J H H. % > > 0 0       
 
 K K . . 	 	 " " ' ' ' '     ' ' * *   ' ' I I P P
 5 5 4 4 F F 1 1  @ 
 
 (/u       M M = = , , = = 4 4 '/B !B !BF q q ' ' Y Y 
 
,  * / /
     ; ; B
 B
J -
 -
^#% #C # 4 4 4 4 L L
 : :
 & & & & F F  0
6 #(  5D $& + ') 

  * 8B I IC\W  
    / / , , ) ) < </ F F  &!Ur  B?!@R&<=N @B 3 B @B 3 :L
 =8/&bDbM
# M
^
	$y/ 	QU 	HI HY HVZ HA A$ A$y/ QU A A$ AHI HS HPT H$y/ QUVYQZ N) N3 NVZ[^V_ NGy GS	 G4G( (y (aj (  H (
DI C  83 +3 +3C +3Z1<jS 3 T&\ # 9 os 4O4< O OSV Odm O$Hf Hi Hdg Hwz H*. .63$ 3  %-U2VZhl c PS be  %' N 6:UW L3 Ls L# L 9=4XZ Nc N# NS N <@d[] R RS R R
 OSaenp \d3i \ \[^ \ ?CQU^` TC T T3 T
 RVdhqs ^c ^3 ^^a ^ 6:UW L3 Ls L# L -1 Nc N 35 Nc N IM[_hj VS	 V# VUX V FH X49 X LP^bkm X49 XS XX[ X IM[_hj VS	 V# VUX V [_mqz| UDcO UTW Ugj U XZ WtDI W MQY[ YDI Yc Y JL [tCy [ 59 Q' Q 35 Nc N 79 Q# Q 7;2 RG R 8<B VW V :>b Os O3 O =A Q# Qc Q 57 T T 59 Q' Q 8<B 	 :>b Os O3 O 79 Q# Q !# J 7;2 SG SN$ NL4 LL4 L LTh TK Kv KQT QX QNt Nx NMT MQt Qx QK Kv K /1 V 24 YY Y 7;2 SG SNt NV NXv XT$ T TXt XV XMD M& MMD M& MR$ R R/F / 6:" R7 R :>b Vw V 68 Q Q >@ R49 R JL 9tCy 9 [] IS I% Ic Ic I KOWY IS I% I# IC I 8: U3 U 9=R LS L# L 24 RS R 26b Ow O =A P Pc P =? J Je J @B MC M M =? J Je J DHPR TS TS T <@RVeix|  FH [S [C [_b [ru [ =Adaetx  BD 
]c 
] 
][^ 
]nq 
] >B" N# Ns N DF _s _ IM[_nr{} Y# Y# YUX Yhk Y 79 R# R 7;2 SG S   G ,. T$"U : :i :s :
& y PS -"#xJ$s $ $c $L
rC 
rS 
rC 
rfi 
r;1 ;1c ;1s ;1fi ;1  AD ;1z$ $B

&
v &
 &
Pa aFMD M^Tl2% %be %w{ %
 D  DZ Zf Zx =Atbfoq &P6 &P6 &P &P\_ &PP t{  LP  Y[ $
c $
 $
C $
QV $
_d $
  FI $
L jqy{ kC ks k# ku kUZ kD & " f ,S BS U E JXL$ L L\ BD Kc K5 K CE Ms ME M SU PC Ps PE P DF N NU N TV QS Q QU Q EIQS B# Bu Bc B DHPR  e S  9=4^bkm U# U# US UX[ U <@daenp vS vS v v[^ v 9=4^bkm K# K# KS KX[ KDe4E &De4E 0+,Z' ' 7 g C <'  9 hq  =A # c  
 
4 
.c . .`C c (-" "mn6+ +i +y +

& 

# 

# 

  AJ 

  [d 

  xA 

I4< I IPS Icf Ivy I  IM IS 49 : 6:%PR 7 d . JNVX Pc PT#Y P :< tCy  SWeix|  FH O Od3i O O_b Oru O @DRVeirt U49 Uf UC U_b U CGUYhluw Td3i T Ts Tbe T PTbfuy  CE OtCy OH O\_ Oor O JN\`os|~ Oc Oh OVY Oil O 7;\`ik O8 O3 OVY O  :S :& S PS F  QT dg 6 c QT V  RU eh  3 d & c s bf !T !D !WZ !jm !  CG !"
	 Kc K3 Kos K  VZ KI $ '/uRX\jnwy  RU dg : (0bY]koxz M MSV Meh M $) 	04; 03 0e 0`e 0dJSV Jfi J VZbd Os OC O Os O W[ce P PS P% PPS P cgoq Q3 Q Q9 Qe Q\_ Q `drv  @B LS L# LY Li LY\ Llo L @D  SW  `b }S }# }U^ }fo }y| }  MP } cguy  CE O OS O	 O O\_ Oor O 24 NS N 57 P P ,0 NS N 26DW[df Ow Oc OQT O =Atbfoq C' C C\_ C >@ X X AC XC X 26b Ow O 59 O' O 7;2 SG S 26b Nw N 15DW[jnwy T# Tc TQT Tdg T (,$TZ\ L LC Ls L 7;2 QS Q Qi 	 en  x !VC !V !VRU !Vjm !VF#S #
 p $& M ') OM $& M 24  )+ : )+ : *, ; #% L 79 ;# ;
 7;2 UG U <@ Y Y <> +s + 24 Z 9; C  >@  v 3 TW ,
  
 c 
 X[ 
 jm 
 ' ' ' OS[]lp % %V %B BFb_c !S !* EGUY ] ])+
  3 PS fj z} 
 MO 2 02 P3 P 46 Ts T 35 Rc R 02 L3 L 04B MW M 48 P P 37r M M 48dSU P P P 26b Nw N 04B MW M 37r O O 26b Kc K3 K RV^` 	<c 	<3 	< 59 M Mc M 9=R S #  13 j gksu L3 Li Ly LRW L`c L W[ce Ss Sc S3 SPS S 8<B Rc R R 7;\`ik Y Y3 YVY Y 15R R# R w{  SW  uy  BD Z3 Zi Zy Zbg Zps Z  MP Z  or Z, z~  VZ  x|  EG \c \ \R[ \ej \sv \  PS \  ru \, x|  UY  w{  DF [C [y [PY [ch [qt [  OR [  qt [, {  X\  z~  GI ]s ]) ]S\ ]fk ]tw ]  RU ]  tw ], _a ZC Zy ZPU Z RT 
] 
]5 
] SU 
^ 
^E 
^ bd \s \) \SX \ os  IM  VX S3 Si Sy SZ_ Shk S  CF S& rv  LP  Y[ Uc U U) U]b Ukn U  FI U& qu  LP  Y[ TS T	 T T\a Tjm T  FI T& tx  OS  \^ V V9 VI V_d Vmp V  IL V& sw  PT  ]_ Vs V) V9 V^c Vlo V  JM V& vz  SW  `b X# XY Xi Xaf Xor X  MP X& FJ  ^b  tx  AC e# eY e^g eqv e  @C e  X[ e  nq e4 C  W[  mq  z| $3 $i $W` $jo $x{ $  QT $  gj $L IM  ae  w{  DF gS gPY gaj gty g  CF g  [^ g  qt g4 @B MD$6 M >@ K$|"4 K jnvx Nc N N) NUZ Ncf N 37r Ls LC L SW_a 	=s 	=C 	= 6:" N# Ns N ;?r Mc MC M \`hj 	>$s) 	>UX 	> >B" ODI Os O /32 P P <> Us U SU W5H0I W 26b R3 R 9; k% k *.Dt\^ L3 Lc L L
 -1tRV_a Nc N NC N 9=4^bkm QS Q# QS QX[ Q *.Dt\^ L3 Lc L L /3TXac P P3 Pc P 26DW[df R3 Rc RQT R 154VZce R# RS RPS R >BPTcgpr ]s ]# ]]` ] 48dY]fh TS T TSV T -1tRV_a Nc N NC N 37TX\eg TC Ts TRU T <@d[] R RS R R 04$UYbd P PC Ps P -1tRV_a Nc N NC N 02 L3 L 37r O O 46 Qs Q 02 L3 L MQY[ RC R Rc R 6:[_hj 	Ys 	Y# 	YUX 	Y *.Dt\^ N3 Nc N N -1tRV_a Qc Q QC Q -1tRV_a Pc P PC P 04$UYbd S SC Ss S 8<$]ajl X XC XWZ X 37TX\eg TC Ts TRU T =A NS N	 N *, R =A O# Oc OOf O 79 X# X*
 
C C

NS 
NLS L"Z3 Z cg $ df O OI Ou OUZ O gi RC Ry R% RX] R ]aik P# PY P PVY P `dln SS S	 S5 SY\ S WY PS P% P P Z\ S SU S5 S XZ Qc Q5 Q Q [] T Te TE T JL Pc P5 P MO S Se S KM Qs QE Q NP T# Tu T} } # ys yq# q
/487I 7c 77 7d9o 7c 7) ),)S )& +- .EC E ?A ]# ] qu} KS K	 K K\a Kjm K tx  AC N N9 NI N_d Nmp N sw  @B Ks K) K9 K^c Klo K vz  CE N# NY Ni Naf Nor N lp  FJ  SU K K9 KI KW\ Keh K  @C K os  IM  VX N3 Ni Ny NZ_ Nhk N  CF N ~@ Nc N NE NZ_ Not N AC Q QI Qu Q]b Qrw Q qs Ns N) NU Nbg N tv Q# QY QPU Qej Q S  H  j# jS j`c jjc jY\ jSDI SUX Shk S BFb !@T#Y !@F 9=R &@g &@P CGPT]_ 	 	v P PO OC OPS O O O\_ O C    3  cf  Q3 Q QEW ET4 T TO3 O^a OO.*s *gk **#6 OQ $ 2 ik d TX be 4 48 P P )+ Q ,. S 57 , , /1 WRF R?g ?O O\_ O 68 U U  :< YS Y  >BPTcgpr Ss Ss S# S]` S$ ?CQUdhqs T T T3 T^a T$ GKY]lpy{ [ [ [SV [fi [$ +- " XZ -# -"
v 
vc 
vWZ 
v#7 #.X X
,L LO OC O&w d6l C SV fi y|  .2SW`b Vs V# VS VCi CCI C# #  bfnp . .[^ . GKY]lpy{  Z^  os CL3 CL CLSV CLfi CL  TW CLJ BFTXgk  C  LN c 3 c ad x{ $ MQ_crv  JN  WY  pt L Lc LY\ Llo L  DG LB FJQU]ajl  ~B  OS  ei  @D <E# <Es <E| KOVZbfoq{  W[ Es EC E>d "$ DI !s !4  QV QOtDz O6 OY\ Olo O&L4 L L ;?r @ @*L$ L( L6 L	 4< 	 c 	 ]` 	 
$4< 
$$s) 
$_b 
$  xB 
$PD P& P
"V 
"tCy 
"\_ 
"t~ 
"Nt NV N EIae  }A  PT  cg  pr >T#Y >c >[^ >vy >  JM >  ]` >6P4 Px P\d P! !!# !B!# !4 @DRV_a YS Y YC Y :>D_cln 	Vw 	Vc 	VY\ 	VXd XF X#4< #' #eh #  ~H # 37r N NC N +/TPT]_ 	OC 	Os 	O# 	O <@ MS MS M 46 Os O 48 P P NRZ\ 
K 
KU 
KS 
Ks 
K 04B P P CE OtL'9 O DHVZimvx V VS VPS Vcf V 59 P' P(C (C (.49 49 49rw   )rv  r.  ccxt.base.errorsr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   ccxt.base.decimal_to_precisionr   r   r   r   r   r   r   r   r   r    ccxt.base.preciser!   ccxt.base.typesr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   cryptography.hazmatr2   cryptography.hazmat.primitivesr3   )cryptography.hazmat.primitives.asymmetricr4   r5   ,cryptography.hazmat.primitives.serializationr6   ccxt.static_dependenciesr7   r8   r  ImportErroraxolotl_curve25519r  !ccxt.static_dependencies.ethereumr9   r:    ccxt.static_dependencies.msgpackr<   ,ccxt.static_dependencies.starknet.ccxt_utilsr=   .ccxt.static_dependencies.starknet.hash.addressr>   /ccxt.static_dependencies.starknet.hash.selectorr?   ,ccxt.static_dependencies.starknet.hash.utilsr@   rA   2ccxt.static_dependencies.starknet.utils.typed_datarB   r  !ccxt.static_dependencies.mnemonicrC   ccxt.static_dependencies.biprD   Mccxt.static_dependencies.dydx_v4_client.cosmos.tx.signing.v1beta1.signing_pb2rE   @ccxt.static_dependencies.dydx_v4_client.cosmos.tx.v1beta1.tx_pb2rF   rG   rH   rI   rJ   rK   rL   rM   0ccxt.static_dependencies.dydx_v4_client.registryrN   apexpro.zklink_sdkr  __all__r   r   rF  r  r'  rH  r  email.utilsrP   r)  rH  rR  r2  rW  rX  r  r#  numbersrQ   r  requestsrR   requests.utilsrS   requests.exceptionsrT   rU   rV   rW   rX   r  sslrY   r   r   r.  decimalrZ   r[   wsgiref.handlersr\   urllib.parseparser  typingr]   r^   r_   JSONEncoderra   r  rO   rq   rw   ro   <module>r     s     + ) ) 0 + + 1 + ) . & ) . , ' ( 1 - @ L  L  L ; % E  E  E  E  E
 ) 1 F M
 + +
&
 2 5 2 \ J R ` ^:2f	 	 	+         !    	 
	     	  - C  C       - !  ^d&& ^vs9v vs9Y  I  EB  M
  J:  		sZ   "H 'H& ,H5 I 	I H#"H#&H21H25I ?I IIII