ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ Yc@@sdZddlmZddlZddlmZmZddlmZde fdYZ de fd YZ d e fd YZ d e fd YZ dS(s raven.core.processors ~~~~~~~~~~~~~~~~~~~~~ :copyright: (c) 2010-2012 by the Sentry Team, see AUTHORS for more details. :license: BSD, see LICENSE for more details. i(tabsolute_importN(t string_typest text_type(tvarmapt ProcessorcB@s>eZdZdZdZdZdZdZRS(cC@s ||_dS(N(tclient(tselfR((sA/opt/alt/python27/lib/python2.7/site-packages/raven/processors.pyt__init__scK@sdS(N((Rtdatatkwargs((sA/opt/alt/python27/lib/python2.7/site-packages/raven/processors.pytget_datascK@s|j||}|r!|}nd|krd|dkrxA|djdgD]&}d|krT|j|dqTqTWqnd|kr|j|dnd|kr|j|d|ds(RRRR(((sA/opt/alt/python27/lib/python2.7/site-packages/raven/processors.pyR;stSanitizePasswordsProcessorc B@steZdZdZeddddddd d gZejd Zd Z d Z dZ dZ dZ RS(s Asterisk out things that look like passwords, credit card numbers, and API keys in frames, http, and basic extra data. t*itpasswordtsecrettpasswdt authorizationtapi_keytapikeyt sentry_dsnt access_tokens^(?:\d[ -]*?){13,16}$cC@s|dkrdSt|tr8|jj|r8|jS|sB|St|trf|jdd}n t|}|j }x$|j D]}||kr|jSqW|S(Nsutf-8treplace( Rt isinstanceRt VALUES_REtmatchtMASKtbytestdecodeRtlowertFIELDS(RtkeyRtfield((sA/opt/alt/python27/lib/python2.7/site-packages/raven/processors.pytsanitizeVs !    cC@sMxF|jdgD]2}d|kr+qnt|j|d|ds(tsplittlentappendR6RB(RtkeyvalsRAtsanitized_keyvalsRD((sA/opt/alt/python27/lib/python2.7/site-packages/raven/processors.pyR?s#s********(RRRR/t frozensetR3tretcompileR-R6RRRR?(((sA/opt/alt/python27/lib/python2.7/site-packages/raven/processors.pyR!Cs"     (Rt __future__RRKtraven.utils.compatRRt raven.utilsRtobjectRRRR!(((sA/opt/alt/python27/lib/python2.7/site-packages/raven/processors.pyts $