
    MiC                     F
   % S SK r S SK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rS SKrS SKJr  S SKJrJr  S SKJr  S SKJrJr  S SKJr  S S	KJrJr  S S
KJ r 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,  \*" 5       r-\*\.S'   \          S@S\/S\\/   S\\    S\\/   S\\/   S\\/   S\\\/\4      S\\\/\4      S\\\/\4      S\4S jj5       r0\
         SAS\/S\\/   S\\/   S\\/   S\\/   S\\/   S\\/   S\\/   S\S    S\\\\4   4S! jj5       r1\
          S@S"S#.S\/S\\/   S\\/   S\\/   S\\/   S\\/   S\\/   S\\/   S\\/   S\S"   S\4S$ jjj5       r1\          S@S\/S\\/   S\\    S\\/   S\\/   S\\/   S\\\/\4      S\\\/\4      S\\\/\4      S\	\\\\\4   4   4S% jj5       r1\      SBS&\/S\\/   S'\\2   S(\\/   S\\\/\4      S\\\/\4      S\\\/\4      S\	\3\\\\34   4   4S) jj5       r4\       SCS&\/S\\/   S\\/   S'\\2   S(\\/   S\\\/\4      S\\\/\4      S\\\/\4      S\34S* jj5       r5\     SDS&\/S\/S\\\/\4      S\\\/\4      S\\\/\4      S\4S+ jj5       r6\
     SDS&\/S\/S\\/   S\\/   S\\/   S,\S    S\\\\4   4S- jj5       r7\
     SDS"S..S&\/S\/S\\/   S\\/   S\\/   S,\S"   S\4S/ jjj5       r7\     SDS&\/S\/S\\\/\4      S\\\/\4      S\\\/\4      S\	\\\\\4   4   4S0 jj5       r7\         SAS1\\/   S2\\8   S3\\/   S\\/   S\\\/\4      S\\\/\4      S\\\/\4      S\\   4S4 jj5       r9\
        SES1\\/   S2\\8   S3\\/   S\\/   S\\/   S\\/   S5\S    S\\\\\   4   4S6 jj5       r:\
        SES"S7.S1\\/   S2\\8   S3\\/   S\\/   S\\/   S\\/   S5\S"   S\\   4S8 jjj5       r:\        SES1\\/   S2\\8   S3\\/   S\\\/\4      S\\\/\4      S\\\/\4      S\	\\   \\\\\   4   4   4S9 jj5       r:\     SDS&\/S\\\/\4      S\\\/\4      S\\\/\4      S\4
S: jj5       r;\
     SDS&\/S\\/   S\\/   S\\/   S;\S    S\\\\4   4S< jj5       r<\
     SDS"S=.S&\/S\\/   S\\/   S\\/   S;\S"   S\4S> jjj5       r<\     SDS&\/S\\\/\4      S\\\/\4      S\\\/\4      S\	\\\\\4   4   4
S? jj5       r<g)F    N)partial)Any	CoroutineLiteralOptionalUnionoverloadDictList)get_llm_provider) VideoCreateOptionalRequestParamsVideoObject)VideoGenerationRequestUtils)DEFAULT_VIDEO_ENDPOINT_MODELrequest_timeout)base_llm_http_handler)clientProviderConfigManager)	FileTypes	CallTypes)GenericLiteLLMParams)Logging)BaseVideoConfig)BaseLLMHTTPHandler)decode_video_id_with_providerllm_http_handlerpromptmodelinput_referencesecondssizeuserextra_headersextra_query
extra_bodyreturnc                 :  #    [        5       n [        R                  " 5       nSUS'   Uc6  [        R                  " U=(       d    [
        UR                  SS5      S9u  p  n[        [        4U UUUUUUUUU	U
S.UD6n[        R                  " 5       n[        UR                  U5      nUR                  SU5      I Sh  vN n[        R                  " U5      (       a  UI Sh  vN nU$ UnU$  N/ N! [         a  n[        R                  " UUUUUS9eSnAff = f7f)a  
Asynchronously calls the `video_generation` function with the given arguments and keyword arguments.

Parameters:
- `prompt` (str): Text prompt that describes the video to generate
- `model` (Optional[str]): The video generation model to use
- `input_reference` (Optional[FileTypes]): Optional image reference that guides generation
- `seconds` (Optional[str]): Clip duration in seconds
- `size` (Optional[str]): Output resolution formatted as width x height
- `user` (Optional[str]): A unique identifier representing your end-user
- `timeout` (int): Request timeout in seconds
- `custom_llm_provider` (Optional[str]): The LLM provider to use
- `extra_headers` (Optional[Dict[str, Any]]): Additional headers
- `extra_query` (Optional[Dict[str, Any]]): Additional query parameters
- `extra_body` (Optional[Dict[str, Any]]): Additional body parameters
- `kwargs` (dict): Additional keyword arguments

Returns:
- `response` (VideoResponse): The response returned by the `video_generation` function.
T
async_callNapi_baser   r)   )r   r   r   r    r!   r"   timeoutcustom_llm_providerr#   r$   r%   r   r,   original_exceptioncompletion_kwargsextra_kwargs)localsasyncioget_event_looplitellmr   r   getr   video_generationcontextvarscopy_contextrunrun_in_executoriscoroutine	Exceptionexception_type)r   r   r   r    r!   r"   r+   r,   r#   r$   r%   kwargs
local_varsloop_funcctxfunc_with_contextinit_responseresponsees                        m/var/www/eduai.edurigo.com/storigo/production/storigo_env/lib/python3.13/site-packages/litellm/videos/main.pyavideo_generationrI      sC    J J+
%%'#| &+2+C+C;;jnnU_aeFf,(AAq 
+ 3'#!
 
  &&(#CGGT2"2249JKK}--**H  %H L +
  
$$ 3 (
 	

sY   DB/C1 =C->$C1 "C/#C1 (D)C1 ,D-C1 /C1 1
D;DDDapi_keyr)   api_versionrI   Tc
                    g N )r   r   r   r!   r"   r+   rJ   r)   rK   r,   rI   r>   s               rH   r6   r6   s   s          F)rI   c                    g rM   rN   )r   r   r   r    r!   r"   r+   rJ   r)   rK   r,   rI   r>   s                rH   r6   r6      s    " rO   c                    [        5       n UR                  S5      nUR                  SS5      nUR                  SS5      SL nUR                  SS5      nUb8  [        U[        5      (       a  [
        R                  " U5      n[        S0 UD6nU$ [        S0 UD6n[        U=(       d    [        US9u  p  n[        R                  " U[        R                  " U5      S	9nUc  [        S
U 35      eUR!                  U5        ["        R$                  " U5      n["        R&                  " UUUS9nUR)                  UU[+        U5      SU0UEUS9  [,        R.                  R0                  Ul        [4        R6                  " UU UUUUUUU
U=(       d    [8        UUR                  S5      S9$ ! [:         a*  n[        R<                  " U=(       d    [        UUUUS9eSnAff = f)P
Maps the https://api.openai.com/v1/videos endpoint.

Currently supports OpenAI
litellm_logging_objlitellm_call_idNr(   FTmock_response)r   r,   r   providerz&video generation is not supported for )r    video_generation_provider_config video_generation_optional_paramsr   r"   optional_paramslitellm_paramsr,   r   )r   r   rX   (video_generation_optional_request_paramsr,   r\   logging_objr#   r%   r+   	_is_asyncr   r-   rN   )r1   popr5   
isinstancestrjsonloadsr   r   r   r   r   get_provider_video_configr4   LlmProviders
ValueErrorupdater   -get_requested_video_generation_optional_param$get_optional_params_video_generationupdate_environment_variablesdictr   create_videovalue	call_typer   video_generation_handlerDEFAULT_REQUEST_TIMEOUTr<   r=   )r   r   r   r    r!   r"   r+   r,   r#   r$   r%   r>   r?   rS   rT   r_   rU   rF   r\   rA   rX   rY   video_generation_request_paramsrG   s                           rH   r6   r6      s   2 JU
17<Q1R)/4Et)LJJ|U3t;	 

?D9$--- $

= 9"3]3HO .77+;77 3,
(Aq ";; --.AB 	) ,3EFYEZ[\\&! (UUV`a 	) (LL1Q1Q 	( 	88 !@A!?1 !4 	9 		
 )2(>(>(D(D% %==-M5T 3)+'!66::h'
 	
  
$$77 3 (
 	

s   BF' DF' '
G1%GGvideo_idr+   r,   c                    [        5       n UR                  S5      n	UR                  SS5      n
UR                  SS5      SL nUc%  [        U 5      nUR                  S5      =(       d    Sn[	        S0 UD6n[
        R                  " S[        R                  " U5      S	9nUc  [        S
U 35      eUR                  U5        SU 0nU	R                  SUR                  S5      [        U5      SU
0UEUS9  [        R                  " U UUUU	U=(       d    [        UUR                  S5      US9	$ ! [          a  n[        R"                  " SUUUUS9eSnAff = f)a  
Download video content from OpenAI's video API.

Args:
    video_id (str): The identifier of the video whose content to download.
    api_key (Optional[str]): The API key to use for authentication.
    api_base (Optional[str]): The base URL for the API.
    timeout (Optional[float]): The timeout for the request in seconds.
    custom_llm_provider (Optional[str]): The LLM provider to use. If not provided, will be auto-detected.
    variant (Optional[str]): Which downloadable asset to return. Defaults to the MP4 video.
    extra_headers (Optional[Dict[str, Any]]): Additional headers to include in the request.
    extra_query (Optional[Dict[str, Any]]): Additional query parameters.
    extra_body (Optional[Dict[str, Any]]): Additional body parameters.

Returns:
    bytes: The raw video content as bytes.

Example:
    ```python
    import litellm

    video_bytes = litellm.video_content(
        video_id="video_123"
    )

    with open("video.mp4", "wb") as f:
        f.write(video_bytes)
    ```
rS   rT   Nr(   FTr,   openairV   z,video support download is not supported for rs    r"   rZ   r   )	rs   video_content_provider_configr,   r\   r^   r+   r#   r   r_   r-   rN   )r1   r5   r`   r   r   r   re   r4   rf   rg   rh   rk   rl   r   video_content_handlerrq   r<   r=   )rs   r)   r+   r,   r#   r$   r%   r>   r?   rS   rT   r_   decodedr\   video_provider_configvideo_content_request_paramsrG   s                    rH   video_contentr|     s   Z J?
17<Q1R)/4Et)LJJ|U3t;	 &3H=G")++.C"D"P .77 ";; --.AB 	 !(KL_K`abb&! .
$
 	88F# !=>!?. !4 	9 		
 %::*? 3)+66'::h'

 
	
  
$$ 3 (
 	

s   DD, ,
E6EEc                   #    [        5       n	 [        R                  " 5       n
SUS'   Uc  Sn[        [        4U UUUUUUUS.UD6n[
        R                  " 5       n[        UR                  U5      nU
R                  SU5      I Sh  vN n[        R                  " U5      (       a  UI Sh  vN nU$ UnU$  N/ N! [         a  n[        R                  " SUUU	US9eSnAff = f7f)a  
Asynchronously download video content.

Parameters:
- `video_id` (str): The identifier of the video whose content to download
- `api_key` (Optional[str]): The API key to use for authentication
- `api_base` (Optional[str]): The base URL for the API
- `timeout` (Optional[float]): The timeout for the request in seconds
- `custom_llm_provider` (Optional[str]): The LLM provider to use
- `extra_headers` (Optional[Dict[str, Any]]): Additional headers
- `extra_query` (Optional[Dict[str, Any]]): Additional query parameters
- `extra_body` (Optional[Dict[str, Any]]): Additional body parameters
- `kwargs` (dict): Additional keyword arguments

Returns:
- `bytes`: The raw video content as bytes
Tr(   Nru   )rs   rJ   r)   r+   r,   r#   r$   r%   rv   r-   )r1   r2   r3   r   r|   r7   r8   r9   r:   r;   r<   r4   r=   )rs   rJ   r)   r+   r,   r#   r$   r%   r>   r?   r@   rB   rC   rD   rE   rF   rG   s                    rH   avideo_contentr~     s    > J'
%%'#| &"*
 3'#!
 
 &&(#CGGT2"2249JKK}--**H  %H L +
  
$$ 3 (
 	

sY   C$A8B: B6$B: +B8,B: 1C$2B: 5C$6B: 8B: :
C!CC!!C$c                   #    [        5       n [        R                  " 5       n	SUS'   [        [        4U UUUUUUS.UD6n
[
        R                  " 5       n[        UR                  U
5      nU	R                  SU5      I Sh  vN n[        R                  " U5      (       a  UI Sh  vN nU$ UnU$  N/ N! [         a  n[        R                  " SUUUUS9eSnAff = f7f)a  
Asynchronously calls the `video_remix` function with the given arguments and keyword arguments.

Parameters:
- `video_id` (str): The identifier of the completed video to remix
- `prompt` (str): Updated text prompt that directs the remix generation
- `timeout` (int): Request timeout in seconds
- `custom_llm_provider` (Optional[str]): The LLM provider to use
- `extra_headers` (Optional[Dict[str, Any]]): Additional headers
- `extra_query` (Optional[Dict[str, Any]]): Additional query parameters
- `extra_body` (Optional[Dict[str, Any]]): Additional body parameters
- `kwargs` (dict): Additional keyword arguments

Returns:
- `response` (VideoObject): The response returned by the `video_remix` function.
Tr(   )rs   r   r+   r,   r#   r$   r%   Nrv   r-   )r1   r2   r3   r   video_remixr7   r8   r9   r:   r;   r<   r4   r=   )rs   r   r+   r,   r#   r$   r%   r>   r?   r@   rB   rC   rD   rE   rF   rG   s                   rH   avideo_remixr     s     : J!
%%'#|

 3'#!

 

 &&(#CGGT2"2249JKK}--**H  %H L +
  
$$ 3 (
 	

sY   CA2B4  B0$B4 %B2&B4 +C,B4 /C0B4 2B4 4
C>CCCr   c                    g rM   rN   	rs   r   r+   rJ   r)   rK   r,   r   r>   s	            rH   r   r          rO   )r   c                    g rM   rN   r   s	            rH   r   r     r   rO   c                    [        5       n UR                  S5      n	UR                  SS5      n
UR                  SS5      SL nUR                  SS5      nUb8  [        U[        5      (       a  [
        R                  " U5      n[        S0 UD6nU$ Uc%  [        U 5      nUR                  S5      =(       d    S	n[        S0 UD6n[        R                  " S[        R                  " U5      S
9nUc  [        SU 35      eUR                  U5        U US.nU	R!                  SUR                  S5      [#        U5      SU
0UEUS9  [$        R&                  R(                  U	l        [,        R.                  " U UUUUU	UUU=(       d    [0        UUR                  S5      S9$ ! [2         a  n[        R4                  " SUUUUS9eSnAff = f)za
Maps the https://api.openai.com/v1/videos/{video_id}/remix endpoint.

Currently supports OpenAI
rS   rT   Nr(   FTrU   r,   ru   rV   z!video remix is not supported for )rs   r   rv   r"   rZ   r   )rs   r   video_remix_provider_configr,   r\   r^   r#   r%   r+   r_   r   r-   rN   )r1   r`   r5   ra   rb   rc   rd   r   r   r   r   re   r4   rf   rg   rh   rk   rl   r   r   rn   ro   r   video_remix_handlerrq   r<   r=   )rs   r   r+   r,   r#   r$   r%   r>   r?   rS   rT   r_   rU   rF   ry   r\   r   video_remix_request_paramsrG   s                      rH   r   r   0  s   * JM
17<Q1R)/4Et)LJJ|U3t;	 

?D9$--- $

= 9"3]3HO &3H=G")++.C"D"P .77 ";; --.AB 	$ '.@AT@UVWW&! !,
" 	88F# !;<!?, !4 	9 		
 )2(=(=(C(C% %88(C 3)+'!66::h'
 	
  
$$ 3 (
 	

s   BF D
F 
G%F==Gafterlimitorderc	                   #    [        5       n
 [        R                  " 5       nSU	S'   Uc)  [        R                  " SU
R                  SS5      S9u  p  n[        [        4U UUUUUUUUS.	U	D6n[        R                  " 5       n[        UR                  U5      nUR                  SU5      I Sh  vN n[        R                  " U5      (       a  UI Sh  vN nU$ UnU$  N/ N! [         a  n[        R                  " SUUU
U	S9eSnAff = f7f)	a  
Asynchronously calls the `video_list` function with the given arguments and keyword arguments.

Parameters:
- `after` (Optional[str]): Identifier for the last item from the previous pagination request
- `limit` (Optional[int]): Number of items to retrieve
- `order` (Optional[str]): Sort order of results by timestamp. Use asc for ascending order or desc for descending order
- `api_key` (Optional[str]): The API key to use for authentication
- `timeout` (int): Request timeout in seconds
- `custom_llm_provider` (Optional[str]): The LLM provider to use
- `extra_headers` (Optional[Dict[str, Any]]): Additional headers
- `extra_query` (Optional[Dict[str, Any]]): Additional query parameters
- `extra_body` (Optional[Dict[str, Any]]): Additional body parameters
- `kwargs` (dict): Additional keyword arguments

Returns:
- `response` (Dict[str, Any]): The response returned by the `video_list` function.
Tr(   Nrv   r)   r*   )	r   r   r   rJ   r+   r,   r#   r$   r%   r-   )r1   r2   r3   r4   r   r5   r   
video_listr7   r8   r9   r:   r;   r<   r=   )r   r   r   rJ   r+   r,   r#   r$   r%   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   s                      rH   avideo_listr     s5    B J)
%%'#| &+2+C+C:>>*d#C,(AAq 
 3'#!
 
 &&(#CGGT2"2249JKK}--**H  %H L +
  
$$ 3 (
 	

sY   DB C" .C/$C" C C" DC" DC"  C" "
D	,DD		Dr   c                    g rM   rN   
r   r   r   r+   rJ   r)   rK   r,   r   r>   s
             rH   r   r          rO   )r   c                    g rM   rN   r   s
             rH   r   r     r   rO   c                 p   [        5       n	 UR                  S5      n
UR                  SS5      nUR                  SS5      SL nUR                  SS5      nUbG  [        U[        5      (       a  [
        R                  " U5      nU Vs/ s H  n[        S0 UD6PM     sn$ Uc  Sn[        S0 UD6n[        R                  " S[        R                  " U5      S	9nUc  [        S
U 35      eU	R                  U5        U UUS.nU
R                  SUR                  S5      [!        U5      SU0UEUS9  ["        R$                  R&                  U
l        [*        R,                  " U UUUUUU
UUU=(       d    [.        UUR                  S5      S9$ s  snf ! [0         a  n[        R2                  " SUUU	US9eSnAff = f)rR   rS   rT   Nr(   FTrU   ru   rV   z video list is not supported for )r   r   r   rv   r"   rZ   r   )r   r   r   video_list_provider_configr,   r\   r^   r#   r$   r+   r_   r   r-   rN   )r1   r5   r`   ra   rb   rc   rd   r   r   r   re   r4   rf   rg   rh   rk   rl   r   r   rn   ro   r   video_list_handlerrq   r<   r=   )r   r   r   r+   r,   r#   r$   r%   r>   r?   rS   rT   r_   rU   itemr\   r   video_list_request_paramsrG   s                      rH   r   r     s   , JL
17<Q1R)/4Et)LJJ|U3t;	 

?D9$--- $

= 94ABMDK'$'MBB &"* .77 ";; --.AB 	# &-?@S?TUVV&! +
! 	88F# !:;!?+ !4 	9 		
 )2(<(<(B(B% %77'A 3)+'#66::h'
 	
Y Cv  
$$ 3 (
 	

s1   A;F F	F C)F 	F 
F5F00F5c           
        #    [        5       n [        R                  " 5       nSUS'   [        [        4U UUUUUS.UD6n	[
        R                  " 5       n
[        U
R                  U	5      nUR                  SU5      I Sh  vN n[        R                  " U5      (       a  UI Sh  vN nU$ UnU$  N/ N! [         a  n[        R                  " SUUUUS9eSnAff = f7f)a  
Asynchronously retrieve video status from OpenAI's video API.

Parameters:
- `video_id` (str): The identifier of the video whose status to retrieve
- `model` (Optional[str]): The model to use. If not provided, will be auto-detected
- `timeout` (int): Request timeout in seconds
- `custom_llm_provider` (Optional[str]): The LLM provider to use
- `extra_headers` (Optional[Dict[str, Any]]): Additional headers
- `extra_query` (Optional[Dict[str, Any]]): Additional query parameters
- `extra_body` (Optional[Dict[str, Any]]): Additional body parameters
- `kwargs` (dict): Additional keyword arguments

Returns:
- `response` (VideoObject): The response returned by the `video_status` function.
Tr(   )rs   r+   r,   r#   r$   r%   Nrv   r-   )r1   r2   r3   r   video_statusr7   r8   r9   r:   r;   r<   r4   r=   )rs   r+   r,   r#   r$   r%   r>   r?   r@   rB   rC   rD   rE   rF   rG   s                  rH   avideo_statusr   s  s     8 J!
%%'#| 	
 3'#!	
 	
 &&(#CGGT2"2249JKK}--**H  %H L +
  
$$ 3 (
 	

sY   CA1B3 ?B/ $B3 $B1%B3 *C+B3 .C/B3 1B3 3
C=CCCr   c                    g rM   rN   rs   r+   rJ   r)   rK   r,   r   r>   s           rH   r   r          rO   )r   c                    g rM   rN   r   s           rH   r   r     r   rO   c                    [        5       n UR                  S5      nUR                  SS5      n	UR                  SS5      SL n
UR                  SS5      nUb8  [        U[        5      (       a  [
        R                  " U5      n[        S0 UD6nU$ Uc%  [        U 5      nUR                  S5      =(       d    S	n[        S0 UD6n[        R                  " S[        R                  " U5      S
9nUc  [        SU 35      eUR                  U5        SU 0nUR!                  SUR                  S5      [#        U5      SU	0UEUS9  [$        R&                  R(                  Ul        [,        R.                  " U UUUUUUU=(       d    [0        U
UR                  S5      S9
$ ! [2         a  n[        R4                  " SUUUUS9eSnAff = f)aF  
Retrieve video status from OpenAI's video API.

Args:
    video_id (str): The identifier of the video whose status to retrieve.
    timeout (int): The timeout for the request in seconds.
    custom_llm_provider (Optional[str]): The LLM provider to use. If not provided, will be auto-detected.
    extra_headers (Optional[Dict[str, Any]]): Additional headers to include in the request.
    extra_query (Optional[Dict[str, Any]]): Additional query parameters.
    extra_body (Optional[Dict[str, Any]]): Additional body parameters.

Returns:
    VideoObject: The video status information.

Example:
    ```python
    import litellm

    # Get video status
    video_status = litellm.video_status(
        video_id="video_123"
    )

    print(f"Video status: {video_status.status}")
    print(f"Progress: {video_status.progress}%")
    ```
rS   rT   Nr(   FTrU   r,   ru   rV   z"video status is not supported for rs   rv   r"   rZ   r   )
rs   video_status_provider_configr,   r\   r^   r#   r%   r+   r_   r   r-   rN   )r1   r5   r`   ra   rb   rc   rd   r   r   r   r   re   r4   rf   rg   rh   rk   rl   r   video_retrievern   ro   r   video_status_handlerrq   r<   r=   )rs   r+   r,   r#   r$   r%   r>   r?   rS   rT   r_   rU   rF   ry   r\   r   video_status_request_paramsrG   s                     rH   r   r     s   T JK
17<Q1R)/4Et)LJJ|U3t;	 

?D9$--- $

= 9"3]3HO &3H=G")++.C"D"P .77 ";; --.AB 	% (/ABUAVWXX&! -
#
 	88F# !<=!?- !4 	9 		
 )2(@(@(F(F% %99)E 3)+'!66::h'
 	
  
$$ 3 (
 	

s   BF DF 
G #F;;G )
NNNNNX  NNNN)	NNNNr   NNNN)NNNNNN)NNNNNNN)r   NNNN)NNNr   NNNN)=r2   r7   	functoolsr   typingr   r   r   r   r   r	   r
   r   rc   r4   1litellm.litellm_core_utils.get_llm_provider_logicr   litellm.types.videos.mainr   r   litellm.videos.utilsr   litellm.constantsr   r   rq   litellm.mainr   litellm.utilsr   r   litellm.types.utilsr   r   litellm.types.routerr   *litellm.litellm_core_utils.litellm_loggingr   LiteLLMLoggingObj+litellm.llms.base_llm.videos.transformationr   *litellm.llms.custom_httpx.llm_http_handlerr   litellm.types.videos.utilsr   r   __annotations__rb   rI   r6   floatbytesr|   r~   r   r   intr   r   r   r   rN   rO   rH   <module>r      sw      Q Q Q   N = f . 7 4 5 S G I D (:'; $ ;   +/! /3,0+/P
P
C=P
 i(P
 c]	P

 3-P
 3-P
 DcN+P
 $sCx.)P
 c3h(P
 P
 P
l 
  %)!"!%C= c] 3-	
 3- c] sm # t} sC$% 
$ 
  %)!!"!% ).C= c] c]	
 3- 3- c] sm # u~  
*   +/! /3,0+/n
n
C=n
 i(n
 c]	n

 3-n
 3-n
 DcN+n
 $sCx.)n
 c3h(n
 c3#$&n
 n
b  ##)- /3,0+/l
l
sml
 e_l
 "#	l
 DcN+l
 $sCx.)l
 c3h(l
 	c3o l
 l
`  ""#)- /3,0+/F
F
c]F
 smF
 e_	F

 "#F
 DcN+F
 $sCx.)F
 c3h(F
 F
 F
R   /3,0+/>
>
>
 DcN+>
 $sCx.)>
 c3h(>
 >
 >
H 
 !"!% c]	
 sm # $- sC$% 
 
 !"!% $) c]	
 sm # %.  
"   /3,0+/b
b
b
 DcN+b
 $sCx.)b
 c3h(b
 c3#$&b
 b
L ! /3,0+/J
C=J
C=J
 C=J
 c]	J
 DcN+J
 $sCx.)J
 c3h(J
 
+J
 J
` 
!"!%C=C= C=
 c] sm #  sCk**+ 
  
!"!% #(C=C= C=
 c] sm #  
+ 
$  /3,0+/b
C=b
C=b
 C=b
 DcN+b
 $sCx.)b
 c3h(b
 c3[))*,b
 b
L   /3,0+/=
=
 DcN+=
 $sCx.)=
 c3h(=
 =
 =
F 
 !"!% c] sm	
 # 4= sC$% 
 
 !"!% %* c] sm	
 # 5>  
    /3,0+/u
u
 DcN+u
 $sCx.)u
 c3h(u
 c3#$&u
 u
rO   