7Yc @spddlmZdZdZdddddd d gZd Zd Zdd lZdd lZdd l Z dd l Z dd l Z dd l Z dd l Z dd lZdd lZdd lZdd lZdd lZdd lZdd lZdd lZdd lZdd lZdd lZdd lZyddlmZmZWn;ek r~dd l Z dd lZe j!Zej!ZnXdd l"Z"ddl#m#Z$dd l%Z%yddl&m'Z'WnAek rydd l'Z'Wnee(fk re)Z'nXnXy"dd l*Z*e*j+Z,dZ-Wn&e(efk rIe)Z,dZ-nXej.ddfkrrddl/m/Z/n dZ/dZ0ddddddddd d!d"g Z1d#Z2dZ3ej.dd$fkrd%Z4nd&Z5e6ej7d' re5ej7_8nde9fd(YZ:d)e:fd*YZ;de;fd+YZ<de;fd,YZ=de;fd-YZ>de;fd.YZ?d e;fd/YZ@d0e:fd1YZAd2e:fd3YZBd4e:fd5YZCd"e:fd6YZDd7e:fd8YZEd9e:fd:YZFd;e:fd<YZGd=eFfd>YZHd?ZIydd lJZJeJjKZLWnek rd@ZLnXdAdBdCdDdEdFdGdHgZMdIZNejOdJZPdKZQdLZRejOdMZSejOdNZTdOZUejOdPZVdQZWdRZXd#ZYejOdSZZejOdTZ[ejOdUZ\dVdWZ]dXZ^dYZ_dZZ`d[Zad\Zbd]ecfd^YZdd_edfd`YZedaedfdbYZfdcedfddYZgdeedfdfYZhdgedfdhYZiieedi6ehdj6efdk6egdl6eidm6ZjdldmdkdjdigZkdnecfdoYZldpecfdqYZmdremfdsYZndtecfduYZodecfdvYZpdwdxZqdwdyZrdzejsfd{YZtd|ejufd}YZvietdw6evd~6ZwyyUddlxmyZyeyjzj{de)krJenddl|m}Z}ddl|m~Z~Wnhee(fk rddlmyZyeyjzj{de)krenddlm}Z}ddlm~Z~nXdZdejsfdYZdejufdYZiedw6ed~6ZwWnee(fk r?nXdecfdYZdefdYZd S(i(t generatorss!Joe Gregorio (joe@bitworking.org)sCopyright 2006, Joe Gregorios!Thomas Broyer (t.broyer@ltgt.net)s James AntillsXavier Verges FarrerosJonathan Feinbergs Blair ZajacsSam RubysLouis NyffeneggertMITs0.9.2N(tsha1tmd5(tgettext(tsocksc Cs@|rtj}n tj}tj|d|d|d|d|S(Ntkeyfiletcertfilet cert_reqstca_certs(tsslt CERT_NONEt CERT_REQUIREDt wrap_socket(tsocktkey_filet cert_filetdisable_validationR R((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyt_ssl_wrap_socketFs   cCs:|stdntj|||}tj||S(NsSSL certificate validation is not supported without the ssl module installed. To avoid this error, install the ssl module, or explicity disable validation.(t CertificateValidationUnsupportedtsocketR thttplibt FakeSocket(RRRRR tssl_sock((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyRSs  ii(tiri2uricCs|S(N((turi((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyRascCs2ttdr(|dk o'|tjk S|dk S(Nt_GLOBAL_DEFAULT_TIMEOUT(thasattrRtNoneR(ttimeout((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyt has_timeoutdstHttptResponset ProxyInfot HttpLib2ErrortRedirectMissingLocationt RedirectLimittFailedToDecompressContentt"UnimplementedDigestAuthOptionErrort&UnimplementedHmacDigestAuthOptionErrort debugleveltProxiesUnavailableErroriicCs|j|S(N(tsort(tseq((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pytsortedys cCs+|jdkrtjn|jjS(s&Return list of (header, value) tuples.N(tmsgRRtResponseNotReadytitems(tself((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pytHTTPResponse__getheaders~st getheaderscBseZRS((t__name__t __module__(((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyR"stHttpLib2ErrorWithResponsecBseZdZRS(cCs&||_||_tj||dS(N(tresponsetcontentR"t__init__(R0tdescR6R7((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyR8s  (R3R4R8(((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyR5scBseZRS((R3R4(((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyR#scBseZRS((R3R4(((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyR$scBseZRS((R3R4(((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyR%scBseZRS((R3R4(((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyR&scBseZRS((R3R4(((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyR'stMalformedHeadercBseZRS((R3R4(((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyR:stRelativeURIErrorcBseZRS((R3R4(((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyR;stServerNotFoundErrorcBseZRS((R3R4(((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyR<scBseZRS((R3R4(((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyR)sRcBseZRS((R3R4(((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyRstSSLHandshakeErrorcBseZRS((R3R4(((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyR=stNotSupportedOnThisPlatformcBseZRS((R3R4(((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyR>stCertificateHostnameMismatchcBseZdZRS(cCs&tj||||_||_dS(N(R"R8thosttcert(R0R9R@RA((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyR8s (R3R4R8(((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyR?sis /etc/pki/tls/certs/ca-bundle.crtt connections keep-alivesproxy-authenticatesproxy-authorizationttettrailersstransfer-encodingtupgradecCsptt}|jg|jddjdD]}|j^q.g|jD]}||krT|^qTS(NRBtt,(tlistt HOP_BY_HOPtextendtgettsplittstriptkeys(R6thopbyhoptxtheader((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyt_get_end2end_headerss ;s9^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?cCs<tj|j}|d|d|d|d|dfS(sParses a URI using the regex given in Appendix B of RFC 3986. (scheme, authority, path, query, fragment) = parse_uri(uri) iiiii(tURItmatchtgroups(RRU((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyt parse_uriscCst|\}}}}}| s)| r<td|n|j}|j}|scd}n|r~dj||gp|}|j}|d||}||||fS(Ns(Only absolute URIs are allowed. uri = %st/t?s://(RVR;tlowertjoin(Rtschemet authoritytpathtquerytfragmentt request_urit defrag_uri((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyturlnorms   ! s^\w+://s[?/:|]+cCsyUtj|rTt|trB|jd}|jd}qT|jd}nWntk rhnXt|tr|jd}nt|j }tj d|}t j d|}t |dkr|d }ndj ||fS(sReturn a filename suitable for the cache. Strips dangerous and common characters to create a filename we can use to store the cache in. sutf-8tidnaRFRGi(t re_url_schemeRTt isinstancetstrtdecodetencodet UnicodeErrortunicodet_md5t hexdigesttsubtre_slashtlenRZ(tfilenametfilemd5((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pytsafenames   s(?:\r\n)?[ \t]+cCsGtg|jD]0\}}|jtj|djf^qS(Nt (tdictt iteritemsRYtNORMALIZE_SPACERmRM(theaderstkeytvalue((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyt_normalize_headers scCsi}|jdr|djd}g|D]R}d|jdkr/tg|jddD]}|jj^q`^q/}g|D]3}d|jdkr|jjdf^q}t||}n|S(Ns cache-controlRGit=i(thas_keyRLtfindttupleRMRYRt(RwtretvaltpartstpartRPtparts_with_argstnamet parts_wo_args((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyt_parse_cache_control s_@s^(?:\s*(?:,\s*)?([^\0-\x1f\x7f-\xff()<>@,;:\\\"/[\]?={} \t]+)\s*=\s*\"?((?<=\")(?:[^\0-\x08\x0A-\x1f\x7f-\xff\\\"]|\\[\0-\x7f])*?(?=\")|(?@,;:\\\"/[\]?={} \t]+(?!\"))\"?)(.*)$sk^(?:\s*(?:,\s*)?([^ \t\r\n=]+)\s*=\s*\"?((?<=\")(?:[^\\\"]|\\.)*?(?=\")|(?y||j}tr4tp7t}x|r|dkr_d|}}n|jdd\}}|j|}i}xk|r|rt|jdkr|j\} } }t j d| || j t k r:t dq>Xn|S(sCReturns a dictionary of dictionaries, one dict per auth_scheme.sauthentication-infotdigestRsiis\1sWWW-Authenticate(R|RMtUSE_WWW_AUTH_STRICT_PARSINGtWWW_AUTH_STRICTtWWW_AUTH_RELAXEDRLtsearchRoRUt UNQUOTE_PAIRSRmRYt ValueErrorR:( Rwt headernameRt authenticatetwww_autht auth_schemetthe_restRTt auth_paramsRxRy((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyt_parse_www_authenticate#s*    c CsHd}t|}t|}|jdrn|djjddkrnd}d|krDd|d" 6c s<dfd}dj|d|g}|p<t|jdscsd||fS(Ns%s:%s((tstd(tH(s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyRsRFRRs"%s"s%s:%s:%s:%s:%stnonces%08xRRsoDigest username="%s", realm="%s", nonce="%s", uri="%s", algorithm=%s, response=%s, qop=%s, nc=%08x, cnonce="%s"iRRRtopaques , opaque="%s"iN(RZRRRRRK( R0RR`RwR7RtKDtA2trequest_digest((Rs5/usr/lib/python2.7/site-packages/httplib2/__init__.pyRs,         cCs|jdsdt|djdi}d|jdkr|d|jds2"       8c Cst|}djg|D]}d|^q}djg|D]}||^q?}tjdtj} t} d||| |jd|f} tj|j | |j j j } d|j d|jd|jd| || | |f|d R?((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyR8s      cCs(|j|j|j|j|j|jfS(N(R:R;R<R=R>R?(R0((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pytastuplescCs|jdko|jdkS(N(R;RR<(R0((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pytisgoodscCs|j| S(N(t bypass_host(R0thostname((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyt applies_toscCsI|jtkrtSt}x)|jD]}|j|r#t}q#q#W|S(s1Has this host been excluded from the proxy config(t bypass_hostsR9RRtendswith(R0RCtbypassR3((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyRBs (N( R3R4RRERRR8R@RARDRB(((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyR!s   RcCs|d krdS|d}tjj|tjj|j}|sKdSt||}tjjdtjjdd}g}|r|jd}n|d krt}n||_|S( s9 Read proxy info from the environment variables. RthttpsNt_proxytno_proxytNO_PROXYRFRGt*(shttpshttps(R&tenvironRKRtproxy_info_from_urlRLR9RE(Rtenv_varturltpiRJRE((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pytproxy_info_from_environment&s  '$   c Cs.tj|}d}d}d}d|dkr}|djdd\}}d|krt|jdd\}}q|}n |d}d|kr|jdd\}}n|}|rt|}ntdddd|}|dkrd}nd }td |d |d |d |pdd|p*dS(sG Construct a ProxyInfo from a URL (such as http_proxy env var) t@iRRHiRiPiiR:R;R<R>R?N(turlparseRRLRRtR!( RPRtusernameRtporttidentt host_portR@R:((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyRN>s2       tHTTPConnectionWithTimeoutcBs,eZdZdddddZdZRS(s8 HTTPConnection subclass that supports timeouts All timeouts are in seconds. If None is passed for timeout then Python's default timeout for sockets will be used. See for example the docs of socket.setdefaulttimeout(): http://docs.python.org/library/socket.html#socket.setdefaulttimeout cCs/tjj||||||_||_dS(N(RtHTTPConnectionR8Rt proxy_info(R0R@RVtstrictRR[((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyR8ps c Cs|jr$td kr$tdnd}|jrx|jjrxt}|jj\}}}}}}|} |} nt}|j} |j } xt j | | dt j D]} | \} } }}}y|r tj | | ||_|jj||||||n4t j | | ||_|jjt jt jdt|jrc|jj|jn|jdkrd|j|j fGH|rdt|||||fGHqn|jj|j|j f|dWnt jk ra}|jdkr9d|j|j fGH|r9d t|||||fGHq9n|jrR|jjnd |_qnXPqW|jst j|nd S( s3Connect to the host and port specified in __init__.s2Proxy support missing but proxy use was requested!s!getaddrinfo returns an empty listiisconnect: (%s, %s) ************sproxy: %s ************isconnect fail: (%s, %s)s proxy: %sN(R[RRR)RARR@RR@RVRt getaddrinfot SOCK_STREAMt socksocketRtsetproxyt setsockoptt IPPROTO_TCPt TCP_NODELAYRRt settimeoutR(RftconnectterrorR+(R0R-t use_proxyR:R;R<R=R>R?R@RVtrestaftsocktypetprotot canonnametsa((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyReusN !   ""$($   N(R3R4RRR8Re(((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyRYfstHTTPSConnectionWithTimeoutc BsJeZdZdddddddedZdZdZdZRS(s2 This class allows communication via SSL. All timeouts are in seconds. If None is passed for timeout then Python's default timeout for sockets will be used. See for example the docs of socket.setdefaulttimeout(): http://docs.python.org/library/socket.html#socket.setdefaulttimeout c Cshtjj||d|d|d|d|||_||_|dkrRt}n||_| |_dS(NRVRRR\( RtHTTPSConnectionR8RR[RtCA_CERTSR t"disable_ssl_certificate_validation( R0R@RVRRR\RR[R Rq((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyR8s      cCsd|krPg|dD]&}|djdkr|d^q}|rP|Sng|dD].}|ddjdkr[|dd^q[S(sReturns a list of valid host globs for an SSL certificate. Args: cert: A dictionary representing an SSL certificate. Returns: list: A list of valid host globs. tsubjectAltNameitdnsitsubjectt commonname(RY(R0RARPthosts((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyt_GetValidHostsForCerts &cCse|j|}xO|D]G}|jddjdd}tjd|f|tjrtSqWtS(sValidates that a given hostname is valid for an SSL certificate. Args: cert: A dictionary representing an SSL certificate. hostname: The hostname to test. Returns: bool: Whether or not the hostname is valid for this certificate. t.s\.RLs[^.]*s^%s$(RwRRRtIRR(R0RARCRvR@thost_re((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyt_ValidateCertificateHostnames  c Cspd}|jrT|jjrTt}|jj\}}}}}}|} |} nt}|j} |j} tj| | dtj } x| D]\} } }}}y|rt j | | |}|j ||||||n.tj| | |}|j tjtjdt|jr0|j|jn|j|j|jft||j|j|j|j|_|jdkrd|j|jfGH|rdt|||||fGHqn|js#|jj}|jjddd}|j||s#td||f||q#nWn(t tfk r}|rO|j!n|jrh|jj!nd |_t#|dr|j$t%j&krt'|qOntjtj(fk rntj)k rN}|jdkr&d |j|jfGH|r&dt|||||fGHq&n|jr?|jj!nd |_qnXPqW|jsltj)|nd S( s(Connect to a host on a given (SSL) port.s!getaddrinfo returns an empty listiisconnect: (%s, %s)s proxy: %sRs<Server presented certificate that does not match host %s: %sterrnosconnect fail: (%s, %s)N(*R[RARR@RR@RVRR]R^RR_R`RaRbRcRRRdReRRRRqR RR(Rft getpeercertRLR{R?t ssl_SSLErrorR+RRR|R t SSL_ERROR_SSLR=tgaierrorRf(R0R-RgR:R;R<R=R>R?R@RVt address_infotfamilyRjRkRltsockaddrRRARCte((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyResr!   $     !$   N( R3R4RRRR8RwR{Re(((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyRns    RH(tapiproxy_stub_mapturlfetch(tfetch(tInvalidURLErrorcs%ddittdfd}|S(NtGETcsU|dkr!tjpd}nt|d|d|d|d|d|d|dS( NitpayloadRRwtallow_truncatedtfollow_redirectstdeadlinetvalidate_certificate(RRtgetdefaulttimeoutR(RPRRRwRRR(R(s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyt fixed_fetchVs   (RRR(RR((Rs5/usr/lib/python2.7/site-packages/httplib2/__init__.pyt_new_fixed_fetchUs tAppEngineHttpConnectionc Bs/eZdZdddddddedZRS(sUse httplib on App Engine, but compensate for its weirdness. The parameters key_file, cert_file, proxy_info, ca_certs, and disable_ssl_certificate_validation are all dropped on the ground. c Cs)tjj||d|d|d|dS(NRVR\R(RRZR8( R0R@RVRRR\RR[R Rq((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyR8gsN(R3R4RRRR8(((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyRas  tAppEngineHttpsConnectionc Bs/eZdZdddddddedZRS(s4Same as AppEngineHttpConnection, but for HTTPS URIs.c CsEtjj||d|d|d|d|d|t| |_dS(NRVRRR\R(RRoR8Rt_fetch( R0R@RVRRR\RR[R Rq((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyR8os  N(R3R4RRRR8(((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyRms  cBseZdZddededZdZdZdZ ddZ dZ dZ d Z d Zd Zd ddedd ZdZRS(sAn HTTP client that handles: - all methods - caching - ETags - compression, - HTTPS - Basic - Digest - WSSE and more. cCs||_||_||_i|_|rKt|trKt||_n ||_t|_ t |_ g|_ t |_ddg|_t|_t|_t|_||_t|_dS(sIf 'cache' is a string then it is used as a directory name for a disk cache. Otherwise it must be an object that supports the same interface as FileCache. All timeouts are in seconds. If None is passed for timeout then Python's default timeout for sockets will be used. See for example the docs of socket.setdefaulttimeout(): http://docs.python.org/library/socket.html#socket.setdefaulttimeout `proxy_info` may be: - a callable that takes the http scheme ('http' or 'https') and returns a ProxyInfo instance per request. By default, uses proxy_nfo_from_environment. - a ProxyInfo instance (static proxy config). - None (proxy disabled). ca_certs is the path of a file containing root CA certificates for SSL server certificate validation. By default, a CA cert file bundled with httplib2 is used. If disable_ssl_certificate_validation is true, SSL cert validation will not be performed. tPUTtPATCHN(R[R Rqt connectionsRet basestringR$RR1RR8t certificatestauthorizationsRRtoptimistic_concurrency_methodsRtfollow_all_redirectst ignore_etagtforce_exception_to_status_codeRtforward_authorization_headers(R0RRR[R Rq((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyR8s"             cCsBtj|j}d|kr(|d=nd|kr>|d=n|S(NRR(tcopyt__dict__(R0t state_dict((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyt __getstate__s     cCs|jj|i|_dS(N(RtupdateR(R0tstate((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyt __setstate__sc cstt|d}x^|jj|D]J}xAtD]9}|j|r/t||||||||Vq/q/Wq"WdS(scA generator that creates Authorization objects that can be applied to requests. swww-authenticateN(RRR7tAUTH_SCHEME_ORDERR|tAUTH_SCHEME_CLASSES( R0R@R`RwR6R7t challengestcredR[((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyt_auth_from_challenges  RFcCs|jj|||dS(s]Add a name and password that will be used any time a request requires authentication.N(RR4(R0RRR3((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pytadd_credentialsscCs|jj|||dS(sXAdd a key and cert that will be used any time a request requires authentication.N(RR4(R0RxRAR3((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pytadd_certificatescCs|jjg|_dS(sKRemove all the names and passwords that are used for authenticationN(RR5R(R0((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pytclear_credentialss c Csd}t}x|tkr|d7}yEt|drS|jdkrS|jn|j||||Wnotjk rnYtj k r|j t d|j n)t k r|j n tjk rF}d} t|dr t|dd} n |j} | tjtjfkr@|tkr@qnntjk rt|dr|jdkr|tdkr|j |jqq|j n|tdkr|j |jqqnXy|j} Wntjk rH| r8|dkr8d}t}|j |jqq|j ntjtjfk r|tdkr|j |jqq|j nVXd} |dkr|j n | j} t| } |dkrt| | } nPqW| | fS(NiiRsUnable to find the server at %stargsRFtHEAD(RtRETRIESRRRReRRRRR+R<R@R~RftgetattrR|t ENETUNREACHt EADDRNOTAVAILRt HTTPExceptiont getresponset BadStatusLineRRR R( R0tconnR`RRRwRtseen_bad_status_lineRterrR6R7((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pyt _conn_requests~      $                 c CsEg|jD]-} | j||r | j|| f^q } | rWt| ddpZd} | r|| j||||n|j|||||\} } | r| j| |r| j|||||j|||||\} } d| _qn| j dkrx|j |||| | D]p}|j|||||j|||||\} } | j dkr&|jj ||j| |Pq&q&Wn|j s|dks| j dkr;|j r| j dkr|r| jd  r| j dkrttd | | n| jd ru| d }t|\}}}}}|dkrutj||| d eZdZeZdZdZdZdZ dZ dZ RS(s<An object more like email.Message than httplib.HTTPResponse.i itOkcCs8t|tjryx*|jD]\}}|||jR?Rtca_certs_locaterRKRpRIRRtcompileRSRVRbRdRnRrRvRzRRRRRRRRRRRtobjectRRRRRRRRR$R1R8R9R!RRRNRZRYRoRnRtgoogle.appengine.apiRtapiproxytGetStubtgoogle.appengine.api.urlfetchRRtgoogle3.apphosting.apitgoogle3.apphosting.api.urlfetchRRRRRtR (((s5/usr/lib/python2.7/site-packages/httplib2/__init__.pytsD                                               J  %  " :< !9  (B