Ë
    ÷â‹j§;  ã                   óâ  — d Z ddlZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
 ddlmZ ddlmZmZ  ej                   dd«      ZdZd	Zej(                  j+                  ej(                  j-                  ej(                  j/                  e«      «      d
«      ZdZdZg ZddgZdddddddddddddddœZdZdZ d Z! ejD                  «       Z#ej(                  j+                  ej(                  j-                  ej(                  j/                  e«      «      d!«      Z$i Z%ej(                  jM                  e$«      r† e'e$d"d#¬$«      5 Z( ejR                  e(«      D ]\  Z*e*jW                  d%d&«      Z,e*jW                  d'd&«      Z-e,se-re*jW                  d(d&«      Z,e,sŒ@e-re-j]                  d)d&«      e%e,<   ŒXe,e%e,<   Œ^ 	 ddd«       d3d*„Z/d+„ Z0d4d,„Z1d-„ Z2d.„ Z3d/„ Z4d0„ Z5d1„ Z6e7d2k(  r e6«        yy# 1 sw Y   Œ1xY w)5uL   
æ¯�æ—¥æŽ¨é€�ï¼š2026å¹´å�Žå�«"é¡¹ç›®"å…³é”®è¯�çš„æ•°æ�® â†’ Notionæ•°æ�®åº“
é    N)ÚRequestÚurlopen)Ú	HTTPError)ÚThreadPoolExecutorÚas_completedÚ	SEARCH_DBz/root/search.dbÚ2ntn_15463890011anAaCzSjKgmq2nWcrkCYROyHumlBqqBV43Wz$3a6399b8-3c5b-803d-b92f-da0c63a31a6dznotion_pushed_urls.jsonz$3a6399b8-3c5b-8025-8989-000b93a513e1é2   u   é¡¹ç›®u   å·¥ç¨‹u   ç”µåŠ›u   ç»ˆç«¯/æŽ¥æ”¶ç«™u   æ¸¯å�£ç �å¤´u   ç®¡é�“è¾“é€�u   ç”Ÿäº§/å¼€é‡‡u   æ›¿ä»£ç‡ƒæ–™u   çŸ³æ²¹ç‚¼åˆ¶u   åŒ–å·¥åŠ å·¥u   é‡‘å±žä¸ŽçŸ¿ç‰©u   åˆ¶æµ†/é€ çº¸/æœ¨æ��u   é£Ÿå“�ä¸Žé¥®æ–™u   ç‰©æµ�u   å·¥ä¸šåˆ¶é€ u   åˆ¶è�¯ä¸Žç”Ÿç‰©æŠ€æœ¯)ÚpowerÚ	terminalsÚportÚtransmissionÚ
productionÚaltfuelÚhpiÚcpiÚmetalsÚpulpÚfoodÚ	logisticsÚmanufacturingÚpharmaé   é   z
2026-06-01zdaily_crawl_config.jsonÚrúutf-8©ÚencodingÚnameÚ ÚscriptÚgroupz.pyc           	      ó¼  — d|z   }|r#t        j                  |«      j                  «       nd }t        |«      D ]S  }	 t	        ||dt
        z   dddœ| ¬«      }t        |dt        ¬«      }t        j                  |j                  «       «      c S  y # t        $ rø}	|	j                  «       j                  «       }
|	j                  d	k(  rN||d
z
  k  r,t        d|dz   z  d«      }t        j                  |«       Y d }	~	ŒÁd|	j                  |
d d dœcY d }	~	c S |	j                  dk\  r)|	j                  dk  rd|	j                  |
d d dœcY d }	~	c S ||d
z
  k  rt        j                  d|z  «       Y d }	~	�Œ9d|	j                  |
d d dœcY d }	~	c S d }	~	wt         $ rD}	||d
z
  k  rt        j                  d|z  «       Y d }	~	�Œ…ddt#        |	«      d d dœcY d }	~	c S d }	~	ww xY w)Nzhttps://api.notion.com/v1zBearer z
2022-06-28zapplication/json)ÚAuthorizationzNotion-VersionzContent-Type)ÚdataÚheadersÚmethodé   )ÚtimeoutÚcontexti­  é   r   TiX  )Ú_errorÚstatusÚmessagei�  iô  r   éÈ   )ÚjsonÚdumpsÚencodeÚranger   ÚNOTION_API_KEYr   Ú_SSL_CTXÚloadsÚreadr   ÚdecodeÚcodeÚminÚtimeÚsleepÚ	ExceptionÚstr)r'   Úpathr%   ÚretriesÚurlÚbodyÚattemptÚreqÚrespÚeÚerrÚwaits               ú(/root/gov_crawler/notion_project_push.pyÚ
notion_apirJ   4   s§  € Ø
%¨Ñ
,€CÙ(,Œ4�:‰:�dÓ×"Ñ"Ô$°$€Dä˜“>ò Jˆð	JÜ˜# DØ!*¬^Ñ!;Ø".Ø 2ñ3ð ô	ˆCô
 ˜3¨´HÔ=ˆDÜ—:‘:˜dŸi™i›kÓ*Ò*ñJøô ò 	LØ—&‘&“(—/‘/Ó#ˆCà�v‰v˜Š}Ø˜W q™[Ò(Ü˜q W¨q¡[Ñ1°2Ó6�DÜ—J‘J˜tÔ$ÜØ"&°!·&±&ÀSÈÈ#ÀYÑO×Oà�v‰v˜Š} §¡¨#¢Ø"&°!·&±&ÀSÈÈ#ÀYÑO×OØ˜ 1™Ò$Ü—
‘
˜1 ™<Ô(ÝØ"¨a¯f©fÀÀTÀcÀÑK×KûÜò 	JØ˜ 1™Ò$Ü—
‘
˜1 ™<Ô(ÝØ"¨a¼CÀ»FÀ4ÀC¸LÑI×Iûð		Jús[   ¼ABÂ	GÂAFÃ9FÄGÄ0FÅGÅ FÅ1FÆGÆGÆ GÆ=GÇGÇGc                 ól  — | sy| t         v r	t         |    S d}d}t         j                  «       D ]6  \  }}|| v s| |v sŒt        t        |«      t        | «      «      }||kD  sŒ3|}|}Œ8 |sLt	        ddd«      D ]<  }t        | «      |k\  sŒ| d| }t         j                  «       D ]  \  }}||v sŒ|c c S  Œ> |S )u=   ä»Ždaily_crawl_config.jsonåŒ¹é…�ç«™ç‚¹å��ç§°->çˆ¬è™«æ ‡è¯†å��r    r   é   r+   éÿÿÿÿN)Ú
SCRIPT_MAPÚitemsr:   Úlenr3   )Ú	site_nameÚbestÚbest_lenÚcnameÚlabelÚ	match_lenÚ
prefix_lenÚprefixs           rI   Úget_script_namerY   X   sÙ   € áØà”JÑÜ˜)Ñ$Ð$à€DØ€HÜ"×(Ñ(Ó*ò %‰ˆˆuØ�IÑ ¨eÒ!3ÜœC ›J¬¨I«Ó7ˆIØ˜8Ó#Ø�Ø$‘ð%ñ Ü  1 b›/ò 	%ˆJÜ�9‹~ Ó+Ø" ; JÐ/�Ü$.×$4Ñ$4Ó$6ò %‘L�E˜5Ø ’Ø$œñ%ð	%ð €Kó    c                 óÒ  ‡	— | rdj                  | «      nd}dj                  d„ t        D «       «      }ddl}t	        |j
                  j                  «       |j                  t        ¬«      z
  j                  «       t        «      }d}t        r+dj                  d	j                  d
„ t        D «       «      «      }dj                  |||¬«      |z   }t        j                  ddt        g|ddd¬«      }|j                  dk7  s|j                   j#                  «       sg S t%        j&                  |j                   «      }|D �	‡	cg c]  Š	t)        ˆ	fd„t        D «       «      sŒ‰	‘Œ }}	|S c c}	w )u4   æŸ¥è¯¢ç¬¦å�ˆæ�¡ä»¶çš„è®°å½•ï¼ˆæŒ‰è¡Œä¸š+å…³é”®è¯�ï¼‰z	 LIMIT {}r    z OR c              3   ó>   K  — | ]  }d j                  |«      –— Œ y­w)zHEXISTS (SELECT 1 FROM gov_bigram WHERE gram='{}' AND rowid = gov_raw.id)N©Úformat)Ú.0Úkws     rI   ú	<genexpr>z fetch_records.<locals>.<genexpr>y   s%   è ø€ ò àð 	S×YÑYÐZ\×]ñùó   ‚r   N)Údaysz AND industry IN ({})ú,c              3   ó>   K  — | ]  }d j                  |«      –— Œ y­w)z'{}'Nr]   )r_   Úis     rI   ra   z fetch_records.<locals>.<genexpr>†   s   è ø€ Ò9fÈq¸&¿-¹-È×:JÑ9fùrb   a^  SELECT COALESCE(NULLIF(page_url, ''), source_url) AS page_url,
       title, publish_date, site_name, group_name, industry
FROM gov_raw
WHERE publish_date >= '{since}'
  AND (COALESCE(NULLIF(page_url, ''), source_url) IS NOT NULL
       AND COALESCE(NULLIF(page_url, ''), source_url) != '')
  {ind_sql}
  AND ({gram_conds})
ORDER BY publish_date DESC)ÚsinceÚind_sqlÚ
gram_condsÚsqlite3z-jsonTi,  )ÚinputÚcapture_outputÚtextr)   c              3   óL   •K  — | ]  }|‰j                  d «      xs dv –— Œ y­w)Útitler    N)Úget)r_   r`   Úrecs     €rI   ra   z fetch_records.<locals>.<genexpr>˜   s$   øè ø€ Ò&YÈ" r¨c¯g©g°gÓ.>Ò.DÀ"Ô'EÑ&Yùs   ƒ!$)r^   ÚjoinÚKEYWORDSÚdatetimeÚmaxÚdateÚtodayÚ	timedeltaÚDAYS_WINDOWÚ	isoformatÚMIN_PUBLISH_DATEÚTARGET_INDUSTRIESÚ
subprocessÚrunÚDB_PATHÚ
returncodeÚstdoutÚstripr0   r6   Úany)
ÚlimitÚlimit_clauseri   rt   rg   rh   Úsqlr   Úrecsrq   s
            `rI   Úfetch_recordsrˆ   s   s:  ø€ á05�;×%Ñ% eÔ,¸2€Lð —‘ñ äôó €Jó Ü�—‘×$Ñ$Ó&¨×);Ñ);ÄÐ);Ó)MÑM×XÑXÓZÔ\lÓm€Eà€GÝØ)×0Ñ0°·±Ñ9fÔTeÔ9fÓ1fÓgˆð÷ %™f¨5¸'Èj˜fÓYÐ\hñi€Cô 	�‰˜	 7¬GÐ4Ø °¸DÈ#ô	O€Aà‡|�|�qÒ §¡§¡Ô 0Øˆ	Ü�:‰:�a—h‘hÓ€Dð  ×Z�C¤3Ó&YÔPXÔ&YÕ#YŠCÐZ€DÐZØ€Kùò [s   Ä>E$ÅE$c           	      óF  — ddl }| xs dj                  «       } |j                  d|«      }|r[dj                  t	        |j                  d«      «      t	        |j                  d«      «      t	        |j                  d«      «      «      S  |j                  d	|«      }|r[dj                  t	        |j                  d«      «      t	        |j                  d«      «      t	        |j                  d«      «      «      S  |j                  d
|«      }|r|j                  d«      dz   S y)u6   å°†å�„ç§�ä¸­æ–‡æ—¥æœŸæ ¼å¼�è½¬ä¸ºISO 8601 (YYYY-MM-DD)r   Nr    z(\d{4})-(\d{1,2})-(\d{1,2})z{}-{:02d}-{:02d}r+   r   é   u)   (\d{4})[å¹´/.]?(\d{1,2})[æœˆ/.]?(\d{1,2})z(\d{4})z-01-01)Úrer‚   Úsearchr^   Úintr"   )Úrawr‹   ÚsÚms       rI   Ú
parse_dater‘   ›   sâ   € ãØ	Š�×ÑÓ€AØˆ�	‰	Ð0°!Ó4€AÙØ!×(Ñ(¬¨Q¯W©W°Q«Z«¼#¸a¿g¹gÀa»j»/Ì3ÈqÏwÉwÐWXËzË?Ó[Ð[Øˆ�	‰	Ð>ÀÓB€AÙØ!×(Ñ(¬¨Q¯W©W°Q«Z«¼#¸a¿g¹gÀa»j»/Ì3ÈqÏwÉwÐWXËzË?Ó[Ð[Øˆ�	‰	�*˜aÓ €AÙØ�w‰w�q‹z˜HÑ$Ð$ØrZ   c                 óü  — | j                  d«      xs dj                  «       }| j                  d«      xs dj                  «       }t        | j                  d«      «      }| j                  d«      xs dj                  «       }t        |«      }|r|sddiS ddd	|d
d iigid|idœ}|rddd	|d
d iigi|d<   |rddd	|d
d iigi|d<   | j                  d«      xs dj                  «       }t        j                  |d«      }dd|ii|d<   |rt        |«      dk(  r	dd|ii|d<   dt        i|dœ}	t        dd|	«      }
|
j                  d«      r||d
d  |
j                  d!«      d"œS ||d
d  |
j                  d#«      d$œS )%u   æŽ¨é€�å�•æ�¡åˆ°Notionro   r    Úpage_urlÚpublish_daterQ   Úerrorzmissing title or urlrm   ÚcontentNiÐ  rA   )u   æ ‡é¢˜ÚURLÚ	rich_textéd   u   ç«™ç‚¹å��ç§°u   è„šæœ¬å��ç§°Úindustryu   å…¶ä»–Úselectr   u   è¡Œä¸šé
   rv   Ústartu   å�‘å¸ƒæ—¥æœŸÚdatabase_id)ÚparentÚ
propertiesÚPOSTz/pagesr,   r
   r.   )rA   ro   r•   Úid)rA   ro   r¢   )rp   r‚   r‘   rY   ÚINDUSTRY_LABELrP   ÚNOTION_DB_IDrJ   )Úrecordro   r“   Úpub_daterQ   Úscript_nameÚpropsÚind_idÚ	ind_labelr%   Úresults              rI   Úpush_to_notionr¬   «   sÊ  € à�Z‰Z˜Ó Ò& B×-Ñ-Ó/€EØ—
‘
˜:Ó&Ò,¨"×3Ñ3Ó5€HÜ˜&Ÿ*™* ^Ó4Ó5€HØ—‘˜KÓ(Ò.¨B×5Ñ5Ó7€IÜ! )Ó,€Ká™ØÐ/Ð0Ð0ð ˜f y°%¸¸°,Ð&?Ð@ÐAÐBØ�xÐ ñ€Eñ Ø!,°¸ÀIÈdÈsÀOÐ8TÐ/UÐ.VÐ WˆˆnÑÙØ!,°¸ÀKÐPTÐQTÐDUÐ8VÐ/WÐ.XÐ YˆˆnÑà�j‰j˜Ó$Ò*¨×1Ñ1Ó3€FÜ×"Ñ" 6¨8Ó4€IØ &¨)Ð!4Ð5€Eˆ(�OÙ”C˜“M RÒ'Ø!'¨'°8Ð)<Ð =ˆˆnÑð !¤,Ð/Øñ€Dô
 ˜ ¨$Ó/€FØ‡z�z�(ÔØ¨%°°¨*¸v¿z¹zÈ)Ó?TÑUÐUØ e¨C¨R j¸¿
¹
À4Ó8HÑIÐIrZ   c                  ó¼  — t        «       } t        j                  j                  t        «      rq	 t        t        dd¬«      5 }t        j                  |«      }ddd«       j                  dg «      D ](  }|j                  d«      sŒ| j                  |d   «       Œ* 	 | S | S # 1 sw Y   ŒKxY w# t        $ r%}t        dj                  |«      «       Y d}~| S d}~ww xY w)uL   ä»Žæœ¬åœ°JSONæ–‡ä»¶åŠ è½½å·²æŽ¨é€�URL (æ�ƒå¨�æŸ¥é‡�åŸºå‡†, æ— 10k APIä¸Šé™�)r   r   r   NÚrecordsrA   u%     !! è¯»å�–JSONæŸ¥é‡�æ–‡ä»¶å¤±è´¥: {})ÚsetÚosr?   ÚexistsÚPUSHED_URLS_FILEÚopenr0   Úloadrp   Úaddr=   Úprintr^   )ÚurlsÚfr%   rq   rF   s        rI   Úload_pushed_urlsr¹   Ð   sÀ   € ä‹5€DÜ	‡w�w‡~�~Ô&Ô'ð	EÜÔ&¨°gÔ>ð $À!Ü—y‘y “|�÷$à—x‘x 	¨2Ó.ò )�Ø—7‘7˜5•>Ø—H‘H˜S ™ZÕ(ñ)ð
 €Kˆ4€K÷$ð $ûô
 ò 	EÜÐ9×@Ñ@ÀÓC×DÐDØ€Kûð	Eús5   ¯B- ÁB!Á.B- ÂB- Â!B*Â&B- Â-	CÂ6CÃCc                  ó�  — t        «       } t        dj                  t        | «      «      «       t        j
                  j                  t        «      r| S t        «       } d}d}	 ddi}|r||d<   t        ddt        z   d	z   |«      }|j                  d
«      ry|dk  rf|dz  }t        d|z  d«      }t        dj                  |j                  d|j                  dd«      «      ||«      «       t        j                  |«       ŒŸt        d«       	 | S d}|j                  d«      s	 | S |d   D ]`  }|j                  di «      }|j                  di «      }|j                  d«      dk(  sŒ<|j                  d«      }	|	sŒP| j                  |	«       Œb |j                  d«      }|j                  d«      s	 | S t        j                  d«       �Œf)uc   å�ˆå¹¶æŸ¥é‡�: æœ¬åœ°JSONæ–‡ä»¶ + Notion APIå…œåº•è¡¥å……(APIæœ‰10kä¸Šé™�, ä»…ç”¨äºŽåˆ�å§‹åŒ–/è¡¥å……)u     æœ¬åœ°JSONæŸ¥é‡�æ–‡ä»¶: {}æ�¡Nr   Ú	page_sizer™   Ústart_cursorr¡   z/databases/z/queryr,   é   r+   r   r(   u.     !! Notionåˆ†é¡µé”™è¯¯({}), {}så�Žé‡�è¯• {}/8r.   r-   ú?uF     !! Notionåˆ†é¡µé‡�è¯•8æ¬¡ä»�å¤±è´¥, æ��å‰�ç»“æ�Ÿ(åŽ»é‡�å�¯èƒ½ä¸�å…¨)Úresultsr    r—   ÚtyperA   Únext_cursorÚhas_moreg      à?)r¹   r¶   r^   rP   r°   r?   r±   r²   r¯   rJ   r¤   rp   r:   r;   r<   rµ   )
r·   Úcursorr@   Úparamsr«   rH   Úitemr¨   Úurl_propÚvals
             rI   Úget_pushed_urlsrÈ   ß   s´  € äÓ€DÜ	Ð
+×
2Ñ
2´3°t³9Ó
=Ô>Ü	‡w�w‡~�~Ô&Ô'Øˆä‹5€DØ€FØ€GØ
Ø˜sÐ#ˆÙØ%+ˆF�>Ñ"Ü˜F M´LÑ$@À8Ñ$KÈVÓTˆØ�:‰:�hÔà˜Š{Ø˜1‘�Ü˜1 ™<¨Ó,�ÜÐF×MÑMØ—J‘J˜y¨&¯*©*°X¸sÓ*CÓDÀdÈGóUô Vä—
‘
˜4Ô ØÜÐZÔ[Øð €Kð ˆØ�z‰z˜)Ô$Øð €Kð ˜9Ñ%ò 	"ˆDØ—H‘H˜\¨2Ó.ˆEØ—y‘y ¨Ó+ˆHØ�|‰|˜FÓ# uÓ,Ø—l‘l 5Ó)�ÚØ—H‘H˜S•Mð	"ð —‘˜MÓ*ˆØ�z‰z˜*Ô%Øà€Kô 	�
‰
�3Œñ; rZ   c            
      óÎ
  — dd l } | j                  d¬«      }|j                  dt        dd¬«       |j                  ddd	¬
«       |j	                  «       }t        d«       |j                  rt        «       }t        d«       n8t        d«       t        «       }t        dj                  t        |«      «      «       t        |j                  r|j                  nd ¬«      }t        dj                  t        |«      «      «       |D �cg c]  }|d   |vsŒ|‘Œ }}t        |«      }t        dj                  |«      «       |dk(  rt        d«       y t        dj                  t        «      «       dx}}	t        «       }
t        j                  «       }t        t        ¬«      5 }|D �ci c]  }|j!                  t"        |«      |“Œ }}t%        t'        |«      d«      D ]Ò  \  }}|j)                  «       }|j+                  d«      r|dz  }nl|	dz  }	|j+                  d«      r|
j-                  |d   «       |j+                  d«      r1t        dj                  |j+                  dd«      |d   d d «      «       |dz  dk(  sŒ¢t        dj                  ||t        j                  «       |z
  «      «       ŒÔ 	 d d d «       t        j                  «       |z
  }t        d j                  ||	||dkD  r||d!z  z  nd«      «       |dkD  �rt/        «       }|D ]a  }|j+                  d«      }|sŒ|j+                  d«      xs d"}d#|v xs d$|v xs d%|j1                  «       v }||
v r|sŒQ|j-                  |«       Œc 	 g }t2        j4                  j7                  t8        «      r@t;        t8        d&d'¬(«      5 }t=        j>                  |«      j+                  d)g «      }d d d «       |D �ch c]%  }|j+                  d«      sŒ|j+                  d«      ’Œ' }}tA        |«      D ]+  }||vsŒ|jC                  d|i«       |j-                  |«       Œ- t        «       }g }|D ]<  }|j+                  d«      }|r||v rŒ|j-                  |«       |jC                  |«       Œ> |}t;        t8        d*d'¬(«      5 }t=        jD                  t        jF                  d+«      t        |«      |d,œ|d-¬.«       d d d «       t        d/j                  t        |«      «      «       y y c c}w c c}w # 1 sw Y   �ŒaxY w# 1 sw Y   �ŒQxY wc c}w # 1 sw Y   ŒWxY w# tH        $ r$}t        d0j                  |«      «       Y d }~y d }~ww xY w)1Nr   u   æŽ¨é€�é¡¹ç›®æ•°æ�®åˆ°Notion)Údescriptionz--limitu   é™�åˆ¶æŽ¨é€�æ�¡æ•°(0=å…¨éƒ¨))rÀ   ÚdefaultÚhelpz--skip-dedupÚ
store_trueu    è·³è¿‡åŽ»é‡�(ç”¨äºŽé¦–æ¬¡å…¨é‡�))ÚactionrÌ   u   [é¡¹ç›®æŽ¨é€�] Starting...u     è·³è¿‡åŽ»é‡�u#     æŸ¥è¯¢Notionå·²æœ‰URL (åŽ»é‡�)...u     Notionä¸­å·²æœ‰: {}æ�¡)r„   u     æ•°æ�®åº“åŒ¹é…�: {}æ�¡r“   u     å¾…æŽ¨é€�: {}æ�¡u!   [é¡¹ç›®æŽ¨é€�] Done: æ— æ–°è®°å½•u     å†™å…¥Notion ({} workers)...)Úmax_workersr+   r¢   rA   r•   z    FAIL: {} - {}ro   r¾   r™   r/   z    {}/{} ({:.0f}s)uC   
[é¡¹ç›®æŽ¨é€�] Done: {}æˆ�åŠŸ, {}å¤±è´¥, {:.1f}s, {:.0f}æ�¡/åˆ†é’Ÿé<   r    z	timed outÚ	handshaker)   r   r   r   r®   Úwz%Y-%m-%d %H:%M:%S)Úexported_atÚtotalr®   F)Úensure_asciiu"     å·²æ›´æ–°JSONæŸ¥é‡�æ–‡ä»¶: {}æ�¡u"     !! å†™JSONæŸ¥é‡�æ–‡ä»¶å¤±è´¥: {})%ÚargparseÚArgumentParserÚadd_argumentr�   Ú
parse_argsr¶   Ú
skip_dedupr¯   rÈ   r^   rP   rˆ   r„   ÚMAX_WORKERSr;   r   Úsubmitr¬   Ú	enumerater   r«   rp   rµ   r¹   Úlowerr°   r?   r±   r²   r³   r0   r´   ÚsortedÚappendÚdumpÚstrftimer=   )rÖ   ÚparserÚargsÚpushedÚall_recordsr   Únew_recordsrÔ   ÚokÚfailÚfailed_urlsÚt0ÚexÚfut_maprf   ÚfutÚtÚpurG   Ú
is_timeoutÚexistingr¸   rq   ÚseenÚuÚ_seen2Ú_dedupÚ_rÚ_urF   s                                 rI   Úmainrù   
  sä  € ÛØ×$Ñ$Ð1NÐ$ÓO€FØ
×Ñ˜	¬°QÐ=[ÐÔ\Ø
×Ñ˜¨|ÐBdÐÔeØ×ÑÓ€Dä	Ð
&Ô'ð ‡‚Ü“ˆÜÐÕäÐ3Ô4Ü Ó"ˆÜÐ(×/Ñ/´°F³Ó<Ô=ô  °D·J²J d§j¢jÀDÔI€KÜ	Ð
$×
+Ñ
+¬C°Ó,<Ó
=Ô>ð *ÖI˜¨Q¨z©]À&Ò-H’1ÐI€KÐIÜ�Ó€EÜ	Ð
×
%Ñ
% eÓ
,Ô-à�‚zÜÐ1Ô2Øô 
Ð
*×
1Ñ
1´+Ó
>Ô?Ø€M€BˆÜ“%€KÜ	�‰‹€Bä	¬Ô	4ð P¸Ø<GÖH°q�2—9‘9œ^¨QÓ/°Ñ2ÐHˆÐHÜ¤¨WÓ 5°qÓ9ò 	P‰FˆAˆsØ—
‘
“ˆAØ�u‰u�TŒ{Ø�a‘‘à˜‘	�Ø—5‘5˜”<Ø—O‘O A e¡HÔ-Ø—5‘5˜”>ÜÐ-×4Ñ4°Q·U±U¸7ÀCÓ5HÈ!ÈGÉ*ÐUYÐVYÐJZÓ[Ô\Ø�3‰w˜!‹|ÜÐ+×2Ñ2°1°e¼T¿Y¹Y»[È2Ñ=MÓNÕOñ	P÷Pô 	�	‰	‹�bÑ€AÜ	Ð
P×
WÑ
WØ
ˆD�!¨¨Qª�U˜a "™fÒ%°Aó7ô 8ð 
ˆAƒvÜ!Ó#ˆØò 	ˆAØ—‘�zÓ"ˆBÙØØ—5‘5˜“>Ò' RˆCØ%¨Ð,Òc°+ÀÐ2DÒcÈ)ÐWZ×W`ÑW`ÓWbÐJbˆJØ�[Ñ ©ØØ�J‰J�r�Nð	ð	BØˆHÜ�w‰w�~‰~Ô.Ô/ÜÔ*¨C¸'ÔBð ?ÀaÜ#Ÿy™y¨›|×/Ñ/°	¸2Ó>�H÷?à.6ÖI s¸#¿'¹'À%½.�C—G‘G˜E•NÐIˆDÐIÜ˜F“^ò  �Ø˜D’=Ø—O‘O U¨A JÔ/Ø—H‘H˜Q•Kð ô “UˆFØˆFØò "�Ø—V‘V˜E“]�Ù˜R 6™\ØØ—
‘
˜2”Ø—‘˜bÕ!ð"ð ˆHÜÔ&¨°gÔ>ð `À!Ü—	‘	¬$¯-©-Ð8KÓ*LÜ$'¨£M¸hñHØIJÐY^õ`÷`ô Ð6×=Ñ=¼cÀ(»mÓLÕMðC ùòI Jùò I÷Pñ Pú÷H?ñ ?üâI÷`ð `ûô ò 	BÜÐ6×=Ñ=¸aÓ@×AÑAûð	Bús’   ÄTÄTÆTÆ"TÇ B8TÉ93TÍ-7T7 Î$&TÏ
T7 ÏT&Ï-T&Ð T7 ÐBT7 Ò9T+Ó+T7 ÔTÔTÔT#ÔT7 Ô+T4Ô0T7 Ô7	U$Õ UÕU$Ú__main__)Né   )N)8Ú__doc__r°   r‹   Úsysr0   r}   Ússlr;   Úurllib.requestr   r   Úurllib.errorr   Úconcurrent.futuresr   r   Úgetenvr   r4   r¤   r?   rr   ÚdirnameÚabspathÚ__file__r²   ÚDATA_SOURCE_IDÚ
BATCH_SIZEr|   rs   r£   rÛ   ry   r{   Úcreate_default_contextr5   ÚCONFIG_PATHrN   r±   r³   r¸   r´   Úentryrp   r   r!   ÚreplacerJ   rY   rˆ   r‘   r¬   r¹   rÈ   rù   Ú__name__© rZ   rI   ú<module>r     sú  ðñ÷ 0× /× /Ó /ß +Ý "ß ?à
ˆ"�)‰)�KÐ!2Ó
3€ØE€Ø5€Ø—7‘7—<‘< §¡§¡°·±·±ÀÓ0IÓ JÐLeÓfÐ à7€Ø€
ØÐ Ø�hÐ€ð Ð$6ÀØ"°/ÈnØ .Ð<MØ"Ð,=ÈHØ#Ð/Fñ€ð €à€àÐ Ø%ˆ3×%Ñ%Ó'€ð �g‰g�l‰l˜2Ÿ7™7Ÿ?™?¨2¯7©7¯?©?¸8Ó+DÓEÐG`Óa€Ø€
Ø‡7�7‡>�>�+ÔÙ	ˆk˜3¨Ô	1ð 
,°QØ�T—Y‘Y˜q“\ò 		,ˆEØ—9‘9˜V RÓ(ˆDØ—Y‘Y˜x¨Ó,ˆFÙ™FØ—y‘y ¨"Ó-�ÚÙØ'-§~¡~°e¸RÓ'@�J˜tÒ$à'+�J˜tÒ$ñ		,÷
,ó!JòHó6&òPò "JòJò(òV^BðB ˆzÒÙ…Fð ÷I

,ð 
,ús   ÅAG%ÆG%Ç%G.