§
    ®eîi>·  ã                   ót  — d Z ddlZddlmZmZmZmZmZmZm	Z	 ddl
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z1 dd	l/m2Z3 dd
l/m4Z5 ddl/m6Z7 ddl/m8Z9 dd
l/m4Z: ddl/m;Z< ddl/m=Z> ddl/m?Z@ ddl/mAZB ddlCmDZD  G d„ d¦  «        ZEdS )zs
Main Firecrawl v2 API client.

This module provides the main client class that orchestrates all v2 functionality.
é    N)ÚOptionalÚListÚDictÚAnyÚCallableÚUnionÚLiteralé   ) ÚClientConfigÚScrapeOptionsÚDocumentÚSearchRequestÚ
SearchDataÚSourceOptionÚCategoryOptionÚCrawlRequestÚCrawlResponseÚCrawlJobÚCrawlParamsRequestÚ	PDFParserÚCrawlParamsDataÚWebhookConfigÚAgentWebhookConfigÚCrawlErrorsResponseÚActiveCrawlsResponseÚ
MapOptionsÚMapDataÚFormatOptionÚ
WaitActionÚScreenshotActionÚClickActionÚWriteActionÚPressActionÚScrollActionÚScrapeActionÚExecuteJavascriptActionÚ	PDFActionÚLocationÚPaginationConfigÚAgentOptions)Ú
HttpClient)ÚFirecrawlError)Úscrape)Úcrawl)Úbatch)Úsearch)Úmap)Úusage)Úextract)Úagent)Úbrowser©ÚWatcherc            <       óî  — e Zd ZdZededefd„¦   «         Z	 	 	 	 	 d¢d	ee         d
edee	         de
de	f
d„Zddddddddddddddddddddddœdedeed                  deeeef                  deee                  deee                  dee         dee
         dee
         dee         deeee         eeeef                  f                  deeed                           ded         dee         dee         dee         d ee         d!ee         d"ee         d#ee
         d$ee         d%eeeef                  d&ee         def.d'„Z	 d£dd(ddd)œd*ed+ee         d,ee         d-ed.         dee
         d/ee         fd0„Zd*efd1„Zd*efd2„Z	 d£dd(ddd)œd*ed+ee         d,ee         d-ed.         dee
         d/ee         fd3„Zd*efd4„Zdddddddddd5œ	d6ed7eee                  d8eee                  d9ee
         d:ee         dee         d;ee         dee
         d<ee         d&ee         defd=„Zddddddd>dd>d>d>d>ddddd>d?d>d@ddddAœded,ee         dBeee                  dCeee                  dDee
         dEeedF                  dGee         dHed9ee
         dIedJedKedLedMee
         dNee
         dOeeeef                  d<ee         dPedQedRedSe
dee
         dTee	         d&ee         def2dU„Z ddddddd>dd>d>d>d>ddddd>d?d>ddVœded,ee         dBeee                  dCeee                  dDee
         dEeedF                  dGee         dHed9ee
         dIedJedKedLedMee
         dNee
         dOeeeef                  d<ee         dPedQedRed&ee         de!f,dW„Z"	 d£ddXœd*edYee#         dTee	         defdZ„Z$ddXœd[edTee	         defd\„Z%d]ede&fd^„Z'de(fd_„Z)de(fd`„Z*dddddddddaœdedbee         dcee         dHee         d9ee
         dEeedF                  dee
         d&ee         dee+         de,fdd„Z-d]edefde„Z.ded,ede/fdf„Z0	 d£dddddddddddgœ
dheee                  d,ee         dieeeef                  djee         dJee         dkee         dlee         d<edm         d;ee         d&ee         dnee1         fdo„Z2	 d£ddddddddd@ddddpœdheee                  d,ee         dieeeef                  djee         dJee         dkee         dlee         d<edm         d;ee         dSe
dee
         d&ee         dnee1         fdq„Z3dddddddddddddddddddddddddddrœdhee         deed                  deeeef                  deee                  deee                  dee         dee
         dee
         dee         deeee         eeeef                  f                  deeed                           ded         dee         dee         dee         d ee         d!ee         d"ee         d#ee
         d$ee         dOeeeef                  dsee         d;ee         dNee
         dRee         d&ee         dtee         f6du„Z4	 d£d*edYee#         fdv„Z5ddXœd[edTee	         fdw„Z6d*edefdx„Z7d*efdy„Z8d*efdz„Z9	 d£ddddddd{œdheee                  d,ediee         d&ee         d|ee
         d}ee         d~eed                  dOeeee:f                  fd€„Z;	 d£ddd@dddddd�œdheee                  d,ediee         d&ee         dSe
dee
         d|ee
         d}ee         d~eed                  dOeeee:f                  fd‚„Z<d*efdƒ„Z=d*edefd„„Z>d…„ Z?d†„ Z@d‡„ ZAd¤dˆefd‰„ZBd¤dˆefdŠ„ZCd‹„ ZDdddddŒœd�ee
         dŽee
         d�ee         d%eeeef                  fd�„ZEd‘dd’œd“ed+ed-ed.         dee
         fd”„ZFd“efd•„ZGdd–œd—eed˜                  fd™„ZHdšd@dd›œd*edœed�         dSe
dee
         deIf
dž„ZJddddddddddddddddddddddddddd@ddŸœdhee         deed                  deeeef                  deee                  deee                  dee         dee
         dee
         dee         deeee         eeeef                  f                  deeed                           ded         dee         dee         dee         d ee         d!ee         d"ee         d#ee
         d$ee         dOeeeef                  dsee         d;ee         dNee
         dRee         d&ee         dtee         dSe
d ee
         f:d¡„ZKdS )¥ÚFirecrawlClientz|
    Main Firecrawl v2 API client.

    This client provides a clean, modular interface to all Firecrawl functionality.
    ÚurlÚreturnc                 ó.   — d|                       ¦   «         v S )Nzapi.firecrawl.dev)Úlower)r:   s    úW/home/div/.hermes/hermes-agent/venv/lib/python3.11/site-packages/firecrawl/v2/client.pyÚ_is_cloud_servicez!FirecrawlClient._is_cloud_service@   s   € à" c§i¢i¡k¤kÐ1Ð1ó    Núhttps://api.firecrawl.devé   ç      à?Úapi_keyÚapi_urlÚtimeoutÚmax_retriesÚbackoff_factorc                 óâ   — |€t          j        d¦  «        }|                      |¦  «        r|st          d¦  «        ‚t	          |||||¬¦  «        | _        t          |||||¬¦  «        | _        dS )a¶  
        Initialize the Firecrawl client.

        Args:
            api_key: Firecrawl API key (or set FIRECRAWL_API_KEY env var)
            api_url: Base URL for the Firecrawl API
            timeout: Request timeout in seconds
            max_retries: Maximum number of retries for failed requests
            backoff_factor: Exponential backoff factor for retries (e.g. 0.5 means wait 0.5s, then 1s, then 2s between retries)
        NÚFIRECRAWL_API_KEYzlAPI key is required for the cloud API. Set FIRECRAWL_API_KEY environment variable or pass api_key parameter.)rD   rE   rF   rG   rH   )rF   rG   rH   )ÚosÚgetenvr?   Ú
ValueErrorr   Úconfigr+   Úhttp_client)ÚselfrD   rE   rF   rG   rH   s         r>   Ú__init__zFirecrawlClient.__init__D   s¢   € ð$ ˆ?Ý”iÐ 3Ñ4Ô4ˆGà×!Ò! 'Ñ*Ô*ð 	°7ð 	Ýð-ñô ð õ
 #ØØØØ#Ø)ð
ñ 
ô 
ˆŒõ &ØØØØ#Ø)ð
ñ 
ô 
ˆÔÐÐr@   )ÚformatsÚheadersÚinclude_tagsÚexclude_tagsÚonly_main_contentrF   Úwait_forÚmobileÚparsersÚactionsÚlocationÚskip_tls_verificationÚremove_base64_imagesÚ	fast_modeÚuse_mockÚ	block_adsÚproxyÚmax_ageÚstore_in_cacheÚprofileÚintegrationrR   r   rS   rT   rU   rV   rW   rX   rY   rZ   )	r   r    r!   r"   r#   r$   r%   r&   r'   r[   r(   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   c                óv  — t          d„ ||||||||	|
||||||||||||fD ¦   «         ¦  «        rot          di d„ t          di d|“d|“d|“d|“d|“d|“d	|“d
|	“d|
“d|“d|“d|“d|“d|“d|“d|“d|“d|“d|“d|“d|“Ž                     ¦   «         D ¦   «         ¤Žnd}t	          j        | j        ||¦  «        S )aÏ  
        Scrape a single URL and return the document.
        Args:
            url: URL to scrape
            formats: List of formats to scrape
            headers: Dictionary of headers to use
            include_tags: List of tags to include
            exclude_tags: List of tags to exclude
            only_main_content: Whether to only scrape the main content
            timeout: Timeout in milliseconds
            wait_for: Wait for a specific element to be present
            mobile: Whether to use mobile mode
            parsers: List of parsers to use
            actions: List of actions to perform
            location: Location to scrape
            skip_tls_verification: Whether to skip TLS verification
            remove_base64_images: Whether to remove base64 images
            fast_mode: Whether to use fast mode
            use_mock: Whether to use mock mode
            block_ads: Whether to block ads
            proxy: Proxy to use
            max_age: Maximum age of the cache
            store_in_cache: Whether to store the result in the cache
            profile: Browser profile for persistent state (e.g. {"name": "my-profile", "saveChanges": True})
        Returns:
            Document
        c              3   ó   K  — | ]}|d uV — Œ	d S ©N© ©Ú.0Úvs     r>   ú	<genexpr>z)FirecrawlClient.scrape.<locals>.<genexpr>¼   s>   è è € ð  eð  e 1�˜$�ð  eð  eð  eð  eð  eð  er@   c                 ó   — i | ]
\  }}|®||“ŒS rh   ri   ©rk   Úkrl   s      r>   ú
<dictcomp>z*FirecrawlClient.scrape.<locals>.<dictcomp>¥   s.   € ð (ð (ð (™˜˜1ð, ˜ð- �!ð, '˜˜r@   rR   rS   rT   rU   rV   rF   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   Nri   )Úanyr   ÚdictÚitemsÚscrape_moduler-   rO   )rP   r:   rR   rS   rT   rU   rV   rF   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   Úoptionss                           r>   r-   zFirecrawlClient.scrapeo   s"  € õZ ð  eð  e¨°'¸<ÈÐWhÐjqÐs{ð  ~Dð  FMð  OVð  X`ð  bwð  yMð  OXð  Zbð  dmð  otð  v}ð  Mð  OVð  Xcð  )dð  eñ  eô  eñ  eô  eð1o•-ð 
ð 
ð(ð (¥ð !ð !ð !Ø˜ð!à˜ð!ð *˜\ð!ð *˜\ð	!ð
 #4Ð"3ð!ð  ˜ð!ð "˜ð!ð �vð!ð  ˜ð!ð  ˜ð!ð "˜ð!ð '<Ð&;ð!ð &:Ð%9ð!ð $˜)ð!ð "˜ð!ð  $˜)ð!!ð" �eð#!ð$  ˜ð%!ð&  .˜~ð'!ð(  ˜ð)!ð* (˜Kð+!÷, Še‰gŒgð-(ñ (ô (ð
ð 
ð 
ð0 koð1 	õ2 Ô# DÔ$4°c¸7ÑCÔCÐCr@   Únode©ÚpromptÚlanguagerF   ÚoriginÚjob_idÚcodery   rz   )Úpythonrw   Úbashr{   c          	      óB   — t          j        | j        ||||||¬¦  «        S )ab  
        Interact with the browser session associated with a scrape job.

        Either ``code`` or ``prompt`` must be provided.

        Args:
            job_id: Scrape job ID
            code: Code to execute (optional if prompt is provided)
            prompt: Natural-language instruction for the browser agent (optional if code is provided)
            language: Programming language ("python", "node", or "bash")
            timeout: Execution timeout in seconds (1-300)
            origin: Optional request origin tag

        Returns:
            BrowserExecuteResponse with execution result
        rx   )ru   ÚinteractrO   ©rP   r|   r}   ry   rz   rF   r{   s          r>   r�   zFirecrawlClient.interact¿   s6   € õ4 Ô%ØÔØØØØØØð
ñ 
ô 
ð 	
r@   c                 ó6   — t          j        | j        |¦  «        S )z±
        Stop the interaction session associated with a scrape job.

        Args:
            job_id: Scrape job ID

        Returns:
            BrowserDeleteResponse
        )ru   Ústop_interactionrO   ©rP   r|   s     r>   r„   z FirecrawlClient.stop_interactionã   s   € õ Ô-¨dÔ.>ÀÑGÔGÐGr@   c                 ó,   — |                       |¦  «        S ©z(Deprecated alias for stop_interaction().©r„   r…   s     r>   Ústop_interactive_browserz(FirecrawlClient.stop_interactive_browserï   ó   € à×$Ò$ VÑ,Ô,Ð,r@   c                ó8   — |                       ||||||¬¦  «        S )z Deprecated alias for interact().rx   )r�   r‚   s          r>   Úscrape_executezFirecrawlClient.scrape_executeó   s1   € ð �}Š}ØØØØØØð ñ 
ô 
ð 	
r@   c                 ó,   — |                       |¦  «        S r‡   rˆ   r…   s     r>   Údelete_scrape_browserz%FirecrawlClient.delete_scrape_browser  rŠ   r@   )	ÚsourcesÚ
categoriesÚlimitÚtbsr[   Úignore_invalid_urlsrF   Úscrape_optionsre   Úqueryr�   r�   r‘   r’   r“   r”   c       	         óh   — t          |||||||||	|
¬¦
  «
        }t          j        | j        |¦  «        S )aÞ  
        Search for documents.
        
        Args:
            query: Search query string
            limit: Maximum number of results to return (default: 5)
            tbs: Time-based search filter
            location: Location string for search
            timeout: Request timeout in milliseconds (default: 300000)
            page_options: Options for scraping individual pages
            
        Returns:
            SearchData containing the search results
        )
r•   r�   r�   r‘   r’   r[   r“   rF   r”   re   )r   Úsearch_moduler0   rO   )rP   r•   r�   r�   r‘   r’   r[   r“   rF   r”   re   Úrequests               r>   r0   zFirecrawlClient.search  sN   € õ8  ØØØ!ØØØØ 3ØØ)Ø#ð
ñ 
ô 
ˆõ Ô# DÔ$4°gÑ>Ô>Ð>r@   FTé   )ry   Úexclude_pathsÚinclude_pathsÚmax_discovery_depthÚsitemapÚignore_sitemapÚignore_query_parametersr‘   Úcrawl_entire_domainÚallow_external_linksÚallow_subdomainsÚignore_robots_txtÚdelayÚmax_concurrencyÚwebhookr”   Úregex_on_full_urlÚdeduplicate_similar_urlsÚzero_data_retentionÚpoll_intervalrF   Úrequest_timeoutre   rš   r›   rœ   r�   )ÚonlyÚincludeÚskiprž   rŸ   r    r¡   r¢   r£   r¤   r¥   r¦   r§   r¨   r©   rª   r«   c                óð   — |}|€|�|rdnd}i d|“d|“d|“d|“d|“d	|“d
|	“d|
“d|“d|“d|“d|“d|“d|“d|“d|“d|“||dœ¥}|�||d<   t          di |¤Ž}t          j        | j        ||||¬¦  «        S )aû  
        Start a crawl job and wait for it to complete.

        Args:
            url: Target URL to start crawling from
            prompt: Optional prompt to guide the crawl
            exclude_paths: Patterns of URLs to exclude
            include_paths: Patterns of URLs to include
            max_discovery_depth: Maximum depth for finding new URLs
            sitemap: Sitemap usage mode ("only" | "include" | "skip")
            ignore_sitemap: Deprecated alias for sitemap ("skip" when true, "include" when false)
            ignore_query_parameters: Ignore URL parameters
            limit: Maximum pages to crawl
            crawl_entire_domain: Follow parent directory links
            allow_external_links: Follow external domain links
            allow_subdomains: Follow subdomains
            ignore_robots_txt: Whether to ignore robots.txt rules
            delay: Delay in seconds between scrapes
            max_concurrency: Maximum number of concurrent scrapes
            webhook: Webhook configuration for notifications
            scrape_options: Page scraping configuration
            regex_on_full_url: Apply includePaths/excludePaths regex to the full URL (including query parameters) instead of just the pathname
            deduplicate_similar_urls: Whether to deduplicate similar URLs during crawl (default: True)
            zero_data_retention: Whether to delete data after 24 hours
            poll_interval: Seconds between status checks
            timeout: Maximum seconds to wait for the entire crawl job to complete (None for no timeout)
            request_timeout: Timeout (in seconds) for each individual HTTP request, including pagination requests when fetching results. If there are multiple pages, each page request gets this timeout
            
        Returns:
            CrawlJob when job completes
            
        Raises:
            ValueError: If request is invalid
            Exception: If the crawl fails to start or complete
            TimeoutError: If timeout is reached
        Nr®   r­   r:   ry   rš   r›   rœ   rŸ   r‘   r    r¡   r¢   r£   r¤   r¥   r¦   r”   r§   r¨   ©r©   re   r�   )rª   rF   r«   ri   )r   Úcrawl_moduler.   rO   )rP   r:   ry   rš   r›   rœ   r�   rž   rŸ   r‘   r    r¡   r¢   r£   r¤   r¥   r¦   r”   r§   r¨   r©   rª   rF   r«   re   Úresolved_sitemapÚrequest_kwargsr˜   s                               r>   r.   zFirecrawlClient.crawl6  sd  € ð@ #ÐØÐ#¨Ð(BØ)7ÐF˜v˜v¸YÐð
Ø�3ð
à�fð
ð ˜]ð
ð ˜]ð	
ð
 "Ð#6ð
ð &Ð'>ð
ð �Uð
ð "Ð#6ð
ð #Ð$8ð
ð Ð 0ð
ð  Ð!2ð
ð �Uð
ð ˜ð
ð �wð
ð ˜nð
ð   Ð!2ð!
ð" 'Ð(@ð#
ð$ $7Ø&ð'
ð 
ð 
ˆð* Ð'Ø(8ˆN˜9Ñ%åÐ0Ð0 Ð0Ð0ˆåÔ!ØÔØØ'ØØ+ð
ñ 
ô 
ð 	
r@   )ry   rš   r›   rœ   r�   rž   rŸ   r‘   r    r¡   r¢   r£   r¤   r¥   r¦   r”   r§   r¨   r©   re   c                óè   — |}|€|�|rdnd}i d|“d|“d|“d|“d|“d	|“d
|	“d|
“d|“d|“d|“d|“d|“d|“d|“d|“d|“||dœ¥}|�||d<   t          di |¤Ž}t          j        | j        |¦  «        S )aK  
        Start an asynchronous crawl job.

        Args:
            url: Target URL to start crawling from
            prompt: Optional prompt to guide the crawl
            exclude_paths: Patterns of URLs to exclude
            include_paths: Patterns of URLs to include
            max_discovery_depth: Maximum depth for finding new URLs
            sitemap: Sitemap usage mode ("only" | "include" | "skip")
            ignore_sitemap: Deprecated alias for sitemap ("skip" when true, "include" when false)
            ignore_query_parameters: Ignore URL parameters
            limit: Maximum pages to crawl
            crawl_entire_domain: Follow parent directory links
            allow_external_links: Follow external domain links
            allow_subdomains: Follow subdomains
            ignore_robots_txt: Whether to ignore robots.txt rules
            delay: Delay in seconds between scrapes
            max_concurrency: Maximum number of concurrent scrapes
            webhook: Webhook configuration for notifications
            scrape_options: Page scraping configuration
            regex_on_full_url: Apply includePaths/excludePaths regex to the full URL (including query parameters) instead of just the pathname
            deduplicate_similar_urls: Whether to deduplicate similar URLs during crawl (default: True)
            zero_data_retention: Whether to delete data after 24 hours

        Returns:
            CrawlResponse with job information
            
        Raises:
            ValueError: If request is invalid
            Exception: If the crawl operation fails to start
        Nr®   r­   r:   ry   rš   r›   rœ   rŸ   r‘   r    r¡   r¢   r£   r¤   r¥   r¦   r”   r§   r¨   r°   r�   ri   )r   r±   Ústart_crawlrO   )rP   r:   ry   rš   r›   rœ   r�   rž   rŸ   r‘   r    r¡   r¢   r£   r¤   r¥   r¦   r”   r§   r¨   r©   re   r²   r³   r˜   s                            r>   rµ   zFirecrawlClient.start_crawlœ  sN  € ðr #ÐØÐ#¨Ð(BØ)7ÐF˜v˜v¸YÐð
Ø�3ð
à�fð
ð ˜]ð
ð ˜]ð	
ð
 "Ð#6ð
ð &Ð'>ð
ð �Uð
ð "Ð#6ð
ð #Ð$8ð
ð Ð 0ð
ð  Ð!2ð
ð �Uð
ð ˜ð
ð �wð
ð ˜nð
ð   Ð!2ð!
ð" 'Ð(@ð#
ð$ $7Ø&ð'
ð 
ð 
ˆð* Ð'Ø(8ˆN˜9Ñ%åÐ0Ð0 Ð0Ð0ˆåÔ'¨Ô(8¸'ÑBÔBÐBr@   ©r«   Úpagination_configc                ó<   — t          j        | j        |||¬¦  «        S )av  
        Get the status of a crawl job.
        
        Args:
            job_id: ID of the crawl job
            pagination_config: Optional configuration for pagination behavior
            request_timeout: Timeout (in seconds) for each individual HTTP request. When auto-pagination 
                is enabled (default) and there are multiple pages of results, this timeout applies to 
                each page request separately, not to the entire operation
            
        Returns:
            CrawlJob with current status and data
            
        Raises:
            Exception: If the status check fails
        )r·   r«   )r±   Úget_crawl_statusrO   )rP   r|   r·   r«   s       r>   r¹   z FirecrawlClient.get_crawl_statusõ  s-   € õ. Ô,ØÔØØ/Ø+ð	
ñ 
ô 
ð 	
r@   Únext_urlc                ó:   — t          j        | j        ||¬¦  «        S )a7  
        Fetch a single page of crawl results using a next URL.

        Args:
            next_url: Opaque next URL from a prior crawl status response
            request_timeout: Timeout (in seconds) for the HTTP request

        Returns:
            CrawlJob with the page data and next URL (if any)
        r¶   )r±   Úget_crawl_status_pagerO   ©rP   rº   r«   s      r>   r¼   z%FirecrawlClient.get_crawl_status_page  s*   € õ  Ô1ØÔØØ+ð
ñ 
ô 
ð 	
r@   Úcrawl_idc                 ó6   — t          j        | j        |¦  «        S )a  
        Retrieve error details and robots.txt blocks for a given crawl job.
        
        Args:
            crawl_id: The ID of the crawl job
        
        Returns:
            CrawlErrorsResponse containing per-URL errors and robots-blocked URLs
        )r±   Úget_crawl_errorsrO   ©rP   r¾   s     r>   rÀ   z FirecrawlClient.get_crawl_errors)  s   € õ Ô,¨TÔ-=¸xÑHÔHÐHr@   c                 ó4   — t          j        | j        ¦  «        S )zŸ
        Get a list of currently active crawl jobs.
        
        Returns:
            ActiveCrawlsResponse containing a list of active crawl jobs.
        )r±   Úget_active_crawlsrO   ©rP   s    r>   rÃ   z!FirecrawlClient.get_active_crawls5  s   € õ Ô-¨dÔ.>Ñ?Ô?Ð?r@   c                 ó*   — |                       ¦   «         S )z²
        List currently active crawl jobs for the authenticated team.
        
        Returns:
            ActiveCrawlsResponse containing the list of active crawl jobs
        )rÃ   rÄ   s    r>   Úactive_crawlszFirecrawlClient.active_crawls>  s   € ð ×%Ò%Ñ'Ô'Ð'r@   ©r0   Úinclude_subdomainsrŸ   r‘   r�   rF   re   r[   r0   rÈ   c                ó´   — t          d„ ||||||||	fD ¦   «         ¦  «        rt          |||||�|nd|||	¬¦  «        nd}
t          j        | j        ||
¦  «        S )a/  Map a URL and return discovered links.

        Args:
            url: Root URL to explore
            search: Optional substring filter for discovered links
            include_subdomains: Whether to include subdomains
            ignore_query_parameters: Whether to ignore query parameters when mapping
            limit: Maximum number of links to return
            sitemap: Sitemap usage mode ("only" | "include" | "skip")
            timeout: Request timeout in milliseconds

        Returns:
            MapData containing the discovered links
        c              3   ó   K  — | ]}|d uV — Œ	d S rh   ri   rj   s     r>   rm   z&FirecrawlClient.map.<locals>.<genexpr>k  s>   è è € ð  Oð  O 1�˜$�ð  Oð  Oð  Oð  Oð  Oð  Or@   Nr­   rÇ   )rr   r   Ú
map_moduler1   rO   )rP   r:   r0   rÈ   rŸ   r‘   r�   rF   re   r[   rv   s              r>   r1   zFirecrawlClient.mapG  s¹   € õH ð  Oð  O¨Ð1CÐE\Ð^cÐelÐnuð  xCð  EMð  )Nð  Oñ  Oô  Oñ  Oô  Oð	Y•*ØØ1Ø$;ØØ&Ð2�G�G¸	ØØ#Øð	
ñ 	
ô 	
ð 	
ð UYð 	õ Œ~˜dÔ.°°WÑ=Ô=Ð=r@   c                 ó6   — t          j        | j        |¦  «        S )zÕ
        Cancel a crawl job.
        
        Args:
            crawl_id: The ID of the crawl job to cancel
            
        Returns:
            bool: True if the crawl was cancelled, False otherwise
        )r±   Úcancel_crawlrO   rÁ   s     r>   rÍ   zFirecrawlClient.cancel_crawlo  s   € õ Ô(¨Ô)9¸8ÑDÔDÐDr@   c                 óX   — t          ||¬¦  «        }t          j        | j        |¦  «        S )zñDerive crawl parameters from natural-language prompt.

        Args:
            url: Root URL
            prompt: Instruction describing how to crawl

        Returns:
            CrawlParamsData with normalized crawl configuration
        )r:   ry   )r   r±   Úcrawl_params_previewrO   )rP   r:   ry   r˜   s       r>   rÏ   z$FirecrawlClient.crawl_params_preview{  s,   € õ %¨°VÐ<Ñ<Ô<ˆÝÔ0°Ô1AÀ7ÑKÔKÐKr@   ©
ry   ÚschemaÚsystem_promptr¡   Úenable_web_searchÚshow_sourcesr”   r“   re   r4   ÚurlsrÑ   rÒ   rÓ   rÔ   r   r4   c       
         óL   — t          j        | j        |||||||||	|
|¬¦  «        S )a  Start an extract job (non-blocking).

        .. deprecated::
            The extract endpoint is in maintenance mode and its use is discouraged.
            Review https://docs.firecrawl.dev/developer-guides/usage-guides/choosing-the-data-extractor
            to find a replacement.

        Args:
            urls: URLs to extract from (optional)
            prompt: Natural-language instruction for extraction
            schema: Target JSON schema for the output
            system_prompt: Optional system instruction
            allow_external_links: Allow hyperlinks in output
            enable_web_search: Whether to augment with web search
            show_sources: Include per-field/source mapping when available
            scrape_options: Scrape options applied prior to extraction
            ignore_invalid_urls: Skip invalid URLs instead of failing
            integration: Integration tag/name
            agent: Agent configuration
        Returns:
            Response payload with job id/status (poll with get_extract_status)
        rÐ   )Úextract_moduleÚstart_extractrO   )rP   rÕ   ry   rÑ   rÒ   r¡   rÓ   rÔ   r”   r“   re   r4   s               r>   rØ   zFirecrawlClient.start_extractˆ  sF   € õJ Ô+ØÔØØØØ'Ø!5Ø/Ø%Ø)Ø 3Ø#Øð
ñ 
ô 
ð 	
r@   ©ry   rÑ   rÒ   r¡   rÓ   rÔ   r”   r“   rª   rF   re   r4   c                óP   — t          j        | j        |||||||||	|
|||¬¦  «        S )a‹  Extract structured data and wait until completion.

        .. deprecated::
            The extract endpoint is in maintenance mode and its use is discouraged.
            Review https://docs.firecrawl.dev/developer-guides/usage-guides/choosing-the-data-extractor
            to find a replacement.

        Args:
            urls: URLs to extract from (optional)
            prompt: Natural-language instruction for extraction
            schema: Target JSON schema for the output
            system_prompt: Optional system instruction
            allow_external_links: Allow hyperlinks in output
            enable_web_search: Whether to augment with web search
            show_sources: Include per-field/source mapping when available
            scrape_options: Scrape options applied prior to extraction
            ignore_invalid_urls: Skip invalid URLs instead of failing
            poll_interval: Seconds between status checks
            timeout: Maximum seconds to wait (None for no timeout)
            integration: Integration tag/name
            agent: Agent configuration
        Returns:
            Final extract response when completed
        rÙ   )r×   r3   rO   )rP   rÕ   ry   rÑ   rÒ   r¡   rÓ   rÔ   r”   r“   rª   rF   re   r4   s                 r>   r3   zFirecrawlClient.extract¼  sL   € õR Ô%ØÔØØØØ'Ø!5Ø/Ø%Ø)Ø 3Ø'ØØ#Øð
ñ 
ô 
ð 	
r@   )rR   rS   rT   rU   rV   rF   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   r¦   Úappend_to_idr“   r¥   r©   re   Úidempotency_keyrÛ   rÜ   c                óv  — t          d„ ||||||||	|
||||||||||fD ¦   «         ¦  «        rit          di d„ t          di d|“d|“d|“d|“d|“d|“d	|“d
|	“d|
“d|“d|“d|“d|“d|“d|“d|“d|“d|“d|“Ž                     ¦   «         D ¦   «         ¤Žnd}t	          j        | j        |||||||||¬¦
  «
        S )a  Start a batch scrape job over multiple URLs (non-blocking).

        Args:
            urls: List of URLs to scrape
            formats: Output formats to collect per URL
            headers: HTTP headers
            include_tags: HTML tags to include
            exclude_tags: HTML tags to exclude
            only_main_content: Restrict scraping to main content
            timeout: Per-request timeout in milliseconds
            wait_for: Wait condition in milliseconds
            mobile: Emulate mobile viewport
            parsers: Parser list (e.g., ["pdf"]) 
            actions: Browser actions to perform
            location: Location settings
            skip_tls_verification: Skip TLS verification
            remove_base64_images: Remove base64 images from output
            fast_mode: Prefer faster scraping modes
            use_mock: Use a mock data source (internal/testing)
            block_ads: Block ads during scraping
            proxy: Proxy setting
            max_age: Cache max age
            store_in_cache: Whether to store results in cache
            webhook: Webhook configuration
            append_to_id: Append to an existing batch job
            ignore_invalid_urls: Skip invalid URLs without failing
            max_concurrency: Max concurrent scrapes
            zero_data_retention: Delete data after 24 hours
            integration: Integration tag/name
            idempotency_key: Header used to deduplicate starts

        Returns:
            Response payload with job id (poll with get_batch_scrape_status)
        c              3   ó   K  — | ]}|d uV — Œ	d S rh   ri   rj   s     r>   rm   z5FirecrawlClient.start_batch_scrape.<locals>.<genexpr>M  ó>   è è € ð  Oð  O 1�˜$�ð  Oð  Oð  Oð  Oð  Oð  Or@   c                 ó   — i | ]
\  }}|®||“ŒS rh   ri   ro   s      r>   rq   z6FirecrawlClient.start_batch_scrape.<locals>.<dictcomp>8  ó.   € ð (ð (ð (™˜˜1ð( ˜ð) �!ð( '˜˜r@   rR   rS   rT   rU   rV   rF   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   N)rv   r¦   rÛ   r“   r¥   r©   re   rÜ   ri   )rr   r   rs   rt   Úbatch_moduleÚstart_batch_scraperO   )rP   rÕ   rR   rS   rT   rU   rV   rF   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   r¦   rÛ   r“   r¥   r©   re   rÜ   rv   s                                r>   rã   z"FirecrawlClient.start_batch_scrapeö  s  € õn ð  Oð  O¨°'¸<ÈÐWhÐjqÐs{ð  ~Dð  FMð  OVð  X`ð  bwð  yMð  OXð  Zbð  dmð  otð  v}ð  Mð  )Nð  Oñ  Oô  Oñ  Oô  Oð-Y•-ð 
ð 
ð(ð (¥ð !ð !ð !Ø˜ð!à˜ð!ð *˜\ð!ð *˜\ð	!ð
 #4Ð"3ð!ð  ˜ð!ð "˜ð!ð �vð!ð  ˜ð!ð  ˜ð!ð "˜ð!ð '<Ð&;ð!ð &:Ð%9ð!ð $˜)ð!ð "˜ð!ð  $˜)ð!!ð" �eð#!ð$  ˜ð%!ð&  .˜~ð'!÷( Še‰gŒgð)(ñ (ô (ð
ð 
ð 
ð, UYð- 	õ0 Ô.ØÔØØØØ%Ø 3Ø+Ø 3Ø#Ø+ð
ñ 
ô 
ð 	
r@   c                 ó:   — t          j        | j        ||¬¦  «        S )a  Get current status and any scraped data for a batch job.

        Args:
            job_id: Batch job ID
            pagination_config: Optional configuration for pagination behavior

        Returns:
            Status payload including counts and partial data
        )r·   )râ   Úget_batch_scrape_statusrO   )rP   r|   r·   s      r>   rå   z'FirecrawlClient.get_batch_scrape_status\  s*   € õ Ô3ØÔØØ/ð
ñ 
ô 
ð 	
r@   c                ó:   — t          j        | j        ||¬¦  «        S )aB  Fetch a single page of batch scrape results using a next URL.

        Args:
            next_url: Opaque next URL from a prior batch scrape status response
            request_timeout: Timeout (in seconds) for the HTTP request

        Returns:
            BatchScrapeJob with the page data and next URL (if any)
        r¶   )râ   Úget_batch_scrape_status_pagerO   r½   s      r>   rç   z,FirecrawlClient.get_batch_scrape_status_pagep  s*   € õ Ô8ØÔØØ+ð
ñ 
ô 
ð 	
r@   c                 ó6   — t          j        | j        |¦  «        S )z—Cancel a running batch scrape job.

        Args:
            job_id: Batch job ID

        Returns:
            True if the job was cancelled
        )râ   Úcancel_batch_scraperO   r…   s     r>   ré   z#FirecrawlClient.cancel_batch_scrape…  s   € õ Ô/°Ô0@À&ÑIÔIÐIr@   c                 ó6   — t          j        | j        |¦  «        S )z°Retrieve error details for a batch scrape job.

        Args:
            job_id: Batch job ID

        Returns:
            Errors and robots-blocked URLs for the job
        )Úbatch_methodsÚget_batch_scrape_errorsrO   r…   s     r>   rì   z'FirecrawlClient.get_batch_scrape_errors�  s   € õ Ô4°TÔ5EÀvÑNÔNÐNr@   c                 ó6   — t          j        | j        |¦  «        S )aÉ  Get the current status (and data if completed) of an extract job.

        .. deprecated::
            The extract endpoint is in maintenance mode and its use is discouraged.
            Review https://docs.firecrawl.dev/developer-guides/usage-guides/choosing-the-data-extractor
            to find a replacement.

        Args:
            job_id: Extract job ID

        Returns:
            Extract response payload with status and optional data
        )r×   Úget_extract_statusrO   r…   s     r>   rî   z"FirecrawlClient.get_extract_status›  s   € õ Ô0°Ô1AÀ6ÑJÔJÐJr@   )rÑ   re   Úmax_creditsÚstrict_constrain_to_urlsÚmodelr¦   rï   rð   rñ   )zspark-1-prozspark-1-minic                óF   — t          j        | j        ||||||||¬¦	  «	        S )aT  Start an agent job (non-blocking).

        Args:
            urls: URLs to process (optional)
            prompt: Natural-language instruction for the agent
            schema: Target JSON schema for the output (dict or Pydantic BaseModel)
            integration: Integration tag/name
            max_credits: Maximum credits to use (optional)
            model: Model to use for the agent ("spark-1-pro" or "spark-1-mini")
            webhook: Webhook URL or configuration for notifications
        Returns:
            Response payload with job id/status (poll with get_agent_status)
        )ry   rÑ   re   rï   rð   rñ   r¦   )Úagent_moduleÚstart_agentrO   )	rP   rÕ   ry   rÑ   re   rï   rð   rñ   r¦   s	            r>   rô   zFirecrawlClient.start_agent«  s<   € õ2 Ô'ØÔØØØØ#Ø#Ø%=ØØð

ñ 

ô 

ð 
	
r@   )rÑ   re   rª   rF   rï   rð   rñ   r¦   c       	         óJ   — t          j        | j        |||||||||	|
¬¦  «        S )a¸  Run an agent and wait until completion.

        Args:
            urls: URLs to process (optional)
            prompt: Natural-language instruction for the agent
            schema: Target JSON schema for the output (dict or Pydantic BaseModel)
            integration: Integration tag/name
            poll_interval: Seconds between status checks
            timeout: Maximum seconds to wait (None for no timeout)
            max_credits: Maximum credits to use (optional)
            model: Model to use for the agent ("spark-1-pro" or "spark-1-mini")
            webhook: Webhook URL or configuration for notifications
        Returns:
            Final agent response when completed
        )	ry   rÑ   re   rª   rF   rï   rð   rñ   r¦   )ró   r4   rO   )rP   rÕ   ry   rÑ   re   rª   rF   rï   rð   rñ   r¦   s              r>   r4   zFirecrawlClient.agentÐ  sB   € õ: Ô!ØÔØØØØ#Ø'ØØ#Ø%=ØØð
ñ 
ô 
ð 	
r@   c                 ó6   — t          j        | j        |¦  «        S )zËGet the current status (and data if completed) of an agent job.

        Args:
            job_id: Agent job ID

        Returns:
            Agent response payload with status and optional data
        )ró   Úget_agent_statusrO   r…   s     r>   r÷   z FirecrawlClient.get_agent_statusû  s   € õ Ô,¨TÔ-=¸vÑFÔFÐFr@   c                 ó6   — t          j        | j        |¦  «        S )z’Cancel a running agent job.

        Args:
            job_id: Agent job ID

        Returns:
            True if the agent was cancelled
        )ró   Úcancel_agentrO   r…   s     r>   rù   zFirecrawlClient.cancel_agent  s   € õ Ô(¨Ô)9¸6ÑBÔBÐBr@   c                 ó4   — t          j        | j        ¦  «        S )zCGet current concurrency and maximum allowed for this team/key (v2).)Úusage_methodsÚget_concurrencyrO   rÄ   s    r>   rü   zFirecrawlClient.get_concurrency  ó   € åÔ,¨TÔ-=Ñ>Ô>Ð>r@   c                 ó4   — t          j        | j        ¦  «        S )z-Get remaining credits for this team/key (v2).)rû   Úget_credit_usagerO   rÄ   s    r>   rÿ   z FirecrawlClient.get_credit_usage  ó   € åÔ-¨dÔ.>Ñ?Ô?Ð?r@   c                 ó4   — t          j        | j        ¦  «        S )z$Get recent token usage metrics (v2).)rû   Úget_token_usagerO   rÄ   s    r>   r  zFirecrawlClient.get_token_usage  rý   r@   Ú
by_api_keyc                 ó6   — t          j        | j        |¦  «        S )z!Get historical credit usage (v2).)rû   Úget_credit_usage_historicalrO   ©rP   r  s     r>   r  z+FirecrawlClient.get_credit_usage_historical  s   € åÔ8¸Ô9IÈ:ÑVÔVÐVr@   c                 ó6   — t          j        | j        |¦  «        S )z Get historical token usage (v2).)rû   Úget_token_usage_historicalrO   r  s     r>   r  z*FirecrawlClient.get_token_usage_historical!  s   € åÔ7¸Ô8HÈ*ÑUÔUÐUr@   c                 ó4   — t          j        | j        ¦  «        S )z*Get metrics about the team's scrape queue.)rû   Úget_queue_statusrO   rÄ   s    r>   r
  z FirecrawlClient.get_queue_status%  r   r@   ©ÚttlÚactivity_ttlÚstream_web_viewrd   r  r  r  c                ó>   — t          j        | j        ||||¬¦  «        S )aÉ  Create a new browser session.

        Args:
            ttl: Total time-to-live in seconds (30-3600, default 300)
            activity_ttl: Inactivity TTL in seconds (10-3600)
            stream_web_view: Whether to enable webview streaming
            profile: Profile config with ``name`` (str) and
                optional ``save_changes`` (bool, default ``True``)

        Returns:
            BrowserCreateResponse with session id and CDP URL
        r  )Úbrowser_moduler5   rO   )rP   r  r  r  rd   s        r>   r5   zFirecrawlClient.browser*  s0   € õ( Ô%ØÔØØ%Ø+Øð
ñ 
ô 
ð 	
r@   r   ©rz   rF   Ú
session_idc                ó>   — t          j        | j        ||||¬¦  «        S )aa  Execute code in a browser session.

        Args:
            session_id: Browser session ID
            code: Code to execute
            language: Programming language ("python", "node", or "bash")
            timeout: Execution timeout in seconds (1-300, default 30)

        Returns:
            BrowserExecuteResponse with execution result
        r  )r  Úbrowser_executerO   )rP   r  r}   rz   rF   s        r>   r  zFirecrawlClient.browser_executeF  s0   € õ& Ô-ØÔØØØØð
ñ 
ô 
ð 	
r@   c                 ó6   — t          j        | j        |¦  «        S )z�Delete a browser session.

        Args:
            session_id: Browser session ID

        Returns:
            BrowserDeleteResponse
        )r  Údelete_browserrO   )rP   r  s     r>   r  zFirecrawlClient.delete_browsera  s   € õ Ô,¨TÔ-=¸zÑJÔJÐJr@   ©Ústatusr  )ÚactiveÚ	destroyedc                ó8   — t          j        | j        |¬¦  «        S )z½List browser sessions.

        Args:
            status: Filter by session status ("active" or "destroyed")

        Returns:
            BrowserListResponse with list of sessions
        r  )r  Úlist_browsersrO   )rP   r  s     r>   r  zFirecrawlClient.list_browsersl  s'   € õ Ô+ØÔØð
ñ 
ô 
ð 	
r@   r.   ©Úkindrª   rF   r  )r.   r/   c                ó*   — t          | ||||¬¦  «        S )aA  Create a watcher for crawl or batch jobs.

        Args:
            job_id: Job ID to watch
            kind: Job kind ("crawl" or "batch")
            poll_interval: Seconds between status checks
            timeout: Maximum seconds to watch (None for no timeout)

        Returns:
            Watcher instance
        r  r6   )rP   r|   r  rª   rF   s        r>   ÚwatcherzFirecrawlClient.watcher~  s   € õ& �t˜V¨$¸mÐU\Ð]Ñ]Ô]Ð]r@   )rR   rS   rT   rU   rV   rF   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   r¦   rÛ   r“   r¥   r©   re   rÜ   rª   Úwait_timeoutr!  c                óz  — t          d„ ||||||||	|
||||||||||fD ¦   «         ¦  «        rit          di d„ t          di d|“d|“d|“d|“d|“d|“d	|“d
|	“d|
“d|“d|“d|“d|“d|“d|“d|“d|“d|“d|“Ž                     ¦   «         D ¦   «         ¤Žnd}t	          j        | j        |||||||||||¬¦  «        S )zE
        Start a batch scrape job and wait until completion.
        c              3   ó   K  — | ]}|d uV — Œ	d S rh   ri   rj   s     r>   rm   z/FirecrawlClient.batch_scrape.<locals>.<genexpr>Í  rß   r@   c                 ó   — i | ]
\  }}|®||“ŒS rh   ri   ro   s      r>   rq   z0FirecrawlClient.batch_scrape.<locals>.<dictcomp>¸  rá   r@   rR   rS   rT   rU   rV   rF   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   N)
rv   r¦   rÛ   r“   r¥   r©   re   rÜ   rª   rF   ri   )rr   r   rs   rt   râ   Úbatch_scraperO   )rP   rÕ   rR   rS   rT   rU   rV   rF   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   r¦   rÛ   r“   r¥   r©   re   rÜ   rª   r!  rv   s                                  r>   r%  zFirecrawlClient.batch_scrape“  s%  € õt ð  Oð  O¨°'¸<ÈÐWhÐjqÐs{ð  ~Dð  FMð  OVð  X`ð  bwð  yMð  OXð  Zbð  dmð  otð  v}ð  Mð  )Nð  Oñ  Oô  Oñ  Oô  Oð-Y•-ð 
ð 
ð(ð (¥ð !ð !ð !Ø˜ð!à˜ð!ð *˜\ð!ð *˜\ð	!ð
 #4Ð"3ð!ð  ˜ð!ð "˜ð!ð �vð!ð  ˜ð!ð  ˜ð!ð "˜ð!ð '<Ð&;ð!ð &:Ð%9ð!ð $˜)ð!ð "˜ð!ð  $˜)ð!!ð" �eð#!ð$  ˜ð%!ð&  .˜~ð'!÷( Še‰gŒgð)(ñ (ô (ð
ð 
ð 
ð, UYð- 	õ0 Ô(ØÔØØØØ%Ø 3Ø+Ø 3Ø#Ø+Ø'Ø ð
ñ 
ô 
ð 	
r@   )NrA   NrB   rC   rh   )F)LÚ__name__Ú
__module__Ú__qualname__Ú__doc__ÚstaticmethodÚstrÚboolr?   r   ÚfloatÚintrQ   r   r   r   r   r   r   r-   r	   r�   r„   r‰   rŒ   rŽ   r   r   r   r   r0   r   r   r.   r   rµ   r)   r¹   r¼   r   rÀ   r   rÃ   rÆ   r(   r   r1   rÍ   r   rÏ   r*   rØ   r3   rã   rå   rç   ré   rì   rî   r   rô   r4   r÷   rù   rü   rÿ   r  r  r  r
  r5   r  r  r  r7   r   r%  ri   r@   r>   r9   r9   9   sŠ  € € € € € ðð ð ð2˜sð 2 tð 2ð 2ð 2ñ „\ð2ð
 "&Ø2Ø#'ØØ #ð)
ð )
à˜#”ð)
ð ð)
ð ˜%”ð	)
ð
 ð)
ð ð)
ð )
ð )
ð )
ð^ 37Ø,0Ø,0Ø,0Ø,0Ø!%Ø"&Ø!%ØKOð AEØ)-Ø04Ø/3Ø$(Ø"&Ø$(Ø#Ø!%Ø)-Ø,0Ø%)ð1NDð NDð NDàðNDð ˜$˜~Ô.Ô/ð	NDð
 ˜$˜s C˜xœ.Ô)ðNDð ˜t CœyÔ)ðNDð ˜t CœyÔ)ðNDð $ Dœ>ðNDð ˜#”ðNDð ˜3”-ðNDð ˜”ðNDð ˜%  S¤	¨4°°c¸9°nÔ0EÔ+FÐ FÔGÔHðNDð ˜$˜uð  &{ô   |ô  }ô  ~ðNDð ˜:Ô&ðNDð  (¨œ~ðNDð  ' tœnð!NDð" ˜D”>ð#NDð$ ˜3”-ð%NDð& ˜D”>ð'NDð( ˜Œ}ð)NDð* ˜#”ð+NDð, ! œð-NDð. ˜$˜s C˜xœ.Ô)ð/NDð0 ˜c”]ð1NDð2 
ð3NDð NDð NDð NDðf #ð"
ð
 !%Ø6<Ø!%Ø $ð"
ð "
ð "
àð"
ð �sŒmð"
ð
 ˜”ð"
ð Ð2Ô3ð"
ð ˜#”ð"
ð ˜”ð"
ð "
ð "
ð "
ðH
H sð 
Hð 
Hð 
Hð 
Hð-¨sð -ð -ð -ð -ð #ð
ð
 !%Ø6<Ø!%Ø $ð
ð 
ð 
àð
ð �sŒmð
ð
 ˜”ð
ð Ð2Ô3ð
ð ˜#”ð
ð ˜”ð
ð 
ð 
ð 
ð(-¨Cð -ð -ð -ð -ð 15Ø59Ø#Ø!Ø"&Ø.2Ø!%Ø26Ø%)ð)?ð )?ð )?àð)?ð ˜$˜|Ô,Ô-ð	)?ð
 ˜T .Ô1Ô2ð)?ð ˜Œ}ð)?ð �cŒ]ð)?ð ˜3”-ð)?ð & dœ^ð)?ð ˜#”ð)?ð ! Ô/ð)?ð ˜c”]ð)?ð 
ð)?ð )?ð )?ð )?ð^ !%Ø-1Ø-1Ø-1Ø@DØ)-Ø(-Ø#Ø$)Ø%*Ø!&Ø"'Ø#Ø)-Ø7;Ø26Ø"'Ø)-Ø$)ØØ!%Ø+/Ø%)ð5d
ð d
ð d
àðd
ð ˜”ð	d
ð
    S¤	Ô*ðd
ð    S¤	Ô*ðd
ð & cœ]ðd
ð ˜'Ð";Ô<Ô=ðd
ð ! œðd
ð "&ðd
ð ˜Œ}ðd
ð "ðd
ð #ðd
ð ðd
ð  ðd
ð  ˜Œ}ð!d
ð" " #œð#d
ð$ ˜%  ]Ð 2Ô3Ô4ð%d
ð& ! Ô/ð'd
ð(  ð)d
ð* #'ð+d
ð, "ð-d
ð. ð/d
ð0 ˜#”ð1d
ð2 " %œð3d
ð4 ˜c”]ð5d
ð6 
ð7d
ð d
ð d
ð d
ðT !%Ø-1Ø-1Ø-1Ø@DØ)-Ø(-Ø#Ø$)Ø%*Ø!&Ø"'Ø#Ø)-Ø7;Ø26Ø"'Ø)-Ø$)Ø%)ð/WCð WCð WCàðWCð ˜”ð	WCð
    S¤	Ô*ðWCð    S¤	Ô*ðWCð & cœ]ðWCð ˜'Ð";Ô<Ô=ðWCð ! œðWCð "&ðWCð ˜Œ}ðWCð "ðWCð #ðWCð ðWCð  ðWCð  ˜Œ}ð!WCð" " #œð#WCð$ ˜%  ]Ð 2Ô3Ô4ð%WCð& ! Ô/ð'WCð(  ð)WCð* #'ð+WCð, "ð-WCð. ˜c”]ð/WCð0 
ð1WCð WCð WCð WCðx 9=ð
ð
 ,0ð
ð 
ð 
àð
ð $Ð$4Ô5ð
ð
 " %œð
ð 
ð
ð 
ð 
ð 
ðD ,0ð	
ð 
ð 
àð
ð " %œð	
ð
 
ð
ð 
ð 
ð 
ð,
I¨ð 
IÐ1Dð 
Ið 
Ið 
Ið 
Ið@Ð#7ð @ð @ð @ð @ð(Ð3ð (ð (ð (ð (ð !%Ø-1Ø26Ø#Ø@DØ!%Ø%)Ø'+ð&>ð &>ð &>àð&>ð ˜”ð	&>ð
 % TœNð&>ð "*¨$¤ð&>ð ˜Œ}ð&>ð ˜'Ð";Ô<Ô=ð&>ð ˜#”ð&>ð ˜c”]ð&>ð ˜8Ô$ð&>ð 
ð&>ð &>ð &>ð &>ðP
E Sð 
E¨Tð 
Eð 
Eð 
Eð 
EðL¨ð L°Sð L¸_ð Lð Lð Lð Lð %)ð2
ð !%Ø+/Ø'+Ø/3Ø,0Ø'+Ø48Ø.2Ø%)Ø(,ð2
ð 2
ð 2
à�t˜C”yÔ!ð2
ð ˜”ð	2
ð
 ˜˜c 3˜hœÔ(ð2
ð   ”}ð2
ð ' tœnð2
ð $ Dœ>ð2
ð ˜t”nð2
ð ! Ô1ð2
ð & dœ^ð2
ð ˜c”]ð2
ð ˜Ô%ð2
ð 2
ð 2
ð 2
ðl %)ð8
ð !%Ø+/Ø'+Ø/3Ø,0Ø'+Ø48Ø.2ØØ!%Ø%)Ø(,ð8
ð 8
ð 8
à�t˜C”yÔ!ð8
ð ˜”ð	8
ð
 ˜˜c 3˜hœÔ(ð8
ð   ”}ð8
ð ' tœnð8
ð $ Dœ>ð8
ð ˜t”nð8
ð ! Ô1ð8
ð & dœ^ð8
ð ð8
ð ˜#”ð8
ð ˜c”]ð8
ð ˜Ô%ð8
ð 8
ð 8
ð 8
ð| 37Ø,0Ø,0Ø,0Ø,0Ø!%Ø"&Ø!%ØKOð AEØ)-Ø04Ø/3Ø$(Ø"&Ø$(Ø#Ø!%Ø)-Ø7;Ø&*Ø.2Ø)-Ø.2Ø%)Ø)-ð;d
ð d
ð d
à�3Œiðd
ð ˜$˜~Ô.Ô/ð	d
ð
 ˜$˜s C˜xœ.Ô)ðd
ð ˜t CœyÔ)ðd
ð ˜t CœyÔ)ðd
ð $ Dœ>ðd
ð ˜#”ðd
ð ˜3”-ðd
ð ˜”ðd
ð ˜%  S¤	¨4°°c¸9°nÔ0EÔ+FÐ FÔGÔHðd
ð ˜$˜uð  &{ô   |ô  }ô  ~ðd
ð ˜:Ô&ðd
ð  (¨œ~ðd
ð  ' tœnð!d
ð" ˜D”>ð#d
ð$ ˜3”-ð%d
ð& ˜D”>ð'd
ð( ˜Œ}ð)d
ð* ˜#”ð+d
ð, ! œð-d
ð. ˜%  ]Ð 2Ô3Ô4ð/d
ð0 ˜s”mð1d
ð2 & dœ^ð3d
ð4 " #œð5d
ð6 & dœ^ð7d
ð8 ˜c”]ð9d
ð: " #œð;d
ð d
ð d
ð d
ðR 9=ð
ð 
àð
ð $Ð$4Ô5ð
ð 
ð 
ð 
ð0 ,0ð	
ð 
ð 
àð
ð " %œð	
ð 
ð 
ð 
ð*	J¨#ð 	J°$ð 	Jð 	Jð 	Jð 	Jð	O¨cð 	Oð 	Oð 	Oð 	OðK¨ð Kð Kð Kð Kð$ %)ð#
ð
 !%Ø%)Ø%)Ø37ØBFØ<@ð#
ð #
ð #
à�t˜C”yÔ!ð#
ð ð	#
ð
 ˜”ð#
ð ˜c”]ð#
ð ˜c”]ð#
ð #+¨4¤.ð#
ð ˜Ð =Ô>Ô?ð#
ð ˜% Ð%7Ð 7Ô8Ô9ð#
ð #
ð #
ð #
ðN %)ð)
ð
 !%Ø%)ØØ!%Ø%)Ø37ØBFØ<@ð)
ð )
ð )
à�t˜C”yÔ!ð)
ð ð	)
ð
 ˜”ð)
ð ˜c”]ð)
ð ð)
ð ˜#”ð)
ð ˜c”]ð)
ð #+¨4¤.ð)
ð ˜Ð =Ô>Ô?ð)
ð ˜% Ð%7Ð 7Ô8Ô9ð)
ð )
ð )
ð )
ðV	G sð 	Gð 	Gð 	Gð 	Gð	C 3ð 	C¨4ð 	Cð 	Cð 	Cð 	Cð?ð ?ð ?ð@ð @ð @ð?ð ?ð ?ðWð W°dð Wð Wð Wð WðVð V°Tð Vð Vð Vð Vð@ð @ð @ð "Ø&*Ø*.Ø,0ð
ð 
ð 
ð �cŒ]ð
ð ˜s”mð	
ð
 " $œð
ð ˜$˜s C˜xœ.Ô)ð
ð 
ð 
ð 
ðB 7=Ø!%ð
ð 
ð 
àð
ð ð
ð
 Ð2Ô3ð
ð ˜#”ð
ð 
ð 
ð 
ð6	K¨ð 	Kð 	Kð 	Kð 	Kð <@ð
ð 
ð 
ð ˜Ð!6Ô7Ô8ð
ð 
ð 
ð 
ð, +2ØØ!%ð^ð ^ð ^àð^ð Ð&Ô'ð	^ð
 ð^ð ˜#”ð^ð 
ð^ð ^ð ^ð ^ð2 37Ø,0Ø,0Ø,0Ø,0Ø!%Ø"&Ø!%ØKOð AEØ)-Ø04Ø/3Ø$(Ø"&Ø$(Ø#Ø!%Ø)-Ø7;Ø&*Ø.2Ø)-Ø.2Ø%)Ø)-ØØ&*ð?I
ð I
ð I
à�3ŒiðI
ð ˜$˜~Ô.Ô/ð	I
ð
 ˜$˜s C˜xœ.Ô)ðI
ð ˜t CœyÔ)ðI
ð ˜t CœyÔ)ðI
ð $ Dœ>ðI
ð ˜#”ðI
ð ˜3”-ðI
ð ˜”ðI
ð ˜%  S¤	¨4°°c¸9°nÔ0EÔ+FÐ FÔGÔHðI
ð ˜$˜uð  &{ô   |ô  }ô  ~ðI
ð ˜:Ô&ðI
ð  (¨œ~ðI
ð  ' tœnð!I
ð" ˜D”>ð#I
ð$ ˜3”-ð%I
ð& ˜D”>ð'I
ð( ˜Œ}ð)I
ð* ˜#”ð+I
ð, ! œð-I
ð. ˜%  ]Ð 2Ô3Ô4ð/I
ð0 ˜s”mð1I
ð2 & dœ^ð3I
ð4 " #œð5I
ð6 & dœ^ð7I
ð8 ˜c”]ð9I
ð: " #œð;I
ð< ð=I
ð> ˜s”mð?I
ð I
ð I
ð I
ð I
ð I
r@   r9   )Fr)  rK   Útypingr   r   r   r   r   r   r	   Útypesr   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*   Úutils.http_clientr+   Úutils.error_handlerr,   Úmethodsr-   ru   r.   r±   r/   râ   r0   r—   r1   rË   rë   r2   rû   r3   r×   r4   ró   r5   r  r   r7   r9   ri   r@   r>   ú<module>r4     sÍ  ððð ð 
€	€	€	Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ Fð!ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ð !ðD *Ð )Ð )Ð )Ð )Ð )Ø /Ð /Ð /Ð /Ð /Ð /Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø *Ð *Ð *Ð *Ð *Ð *Ø *Ð *Ð *Ð *Ð *Ð *Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø &Ð &Ð &Ð &Ð &Ð &Ø +Ð +Ð +Ð +Ð +Ð +Ø +Ð +Ð +Ð +Ð +Ð +Ø .Ð .Ð .Ð .Ð .Ð .Ø *Ð *Ð *Ð *Ð *Ð *Ø .Ð .Ð .Ð .Ð .Ð .Ø Ð Ð Ð Ð Ð ðc
ð c
ð c
ð c
ð c
ñ c
ô c
ð c
ð c
ð c
r@   