£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>

\5jc           @   s5  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 Z d  d l Z d  d l	 Z	 d  d l
 Z
 d  d l Z d  d l Z e  j d d k r e  j d d k r d  d l m Z n d  d l Z i  a d   Z d   Z d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z e  j d d k rd   Z d   Z d   Z  n d   Z d   Z d   Z  d d# d     YZ! e" d k r1e   e d d  e d d  y e   Wn! e# k
 re d d     n Xe d d  e d! d  y e   Z$ Wn! e# k
 rXe d! d     n Xe d! d  e d" d  yT e   Z% e% d k	 st'  e% \ Z( Z) e   e! e) e  j* e$ j+  Z, e e(  Wn! e# k
 re d" d     n Xe d" d  e   e, j-   y e j. e(  Wq1e/ k
 r-q1Xn  d S($   iNi    i   i   i   (   t   utilc         C   s%   t  j j |  d  t  j d  d  S(   Ns   
i   (   t   syst   stderrt   writet   exit(   t   message(    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyt   abort#   s    c         C   s_   y) t  |  d   } | j |  Wd  QXWn/ t k
 rZ } t j d |  d | j  n Xd  S(   Nt   ws   Warning: unable to write to s   : (   t   openR   t   IOErrort   loggingt   warnt   strerror(   t   patht   contentst   ft   e(    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyt   try_write_file'   s
    c           C   s<   t  j d t  j d d  t t  d  r8 t  j t  n  d  S(   Nt   levelt   formats2   [ pid=%(process)d, time=%(asctime)s ]: %(message)st   captureWarnings(   R
   t   basicConfigt   WARNINGt   hasattrR   t   True(    (    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyt   initialize_logging.   s
    		c          C   sV   t  j d  }  |  d  k	 s! t  |  d } t | d   } t j |  a Wd  QXd  S(   Nt   PASSENGER_SPAWN_WORK_DIRs
   /args.jsont   r(   t   ost   getenvt   Nonet   AssertionErrorR   t   jsont   loadt   options(   t   work_dirR   R   (    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyt   read_startup_arguments5   s
    
c         C   sg   t  j d  } | d  k	 s! t  | d |  j   } t | d |  t | d t t j     d  S(   NR   s   /response/steps/s   /states   /begin_time(   R   R   R   R   t   lowerR   t   strt   time(   t   stept   stateR#   t   step_dir(    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyt   record_journey_step_begin>   s
    c         C   s   t  j d  } | d  k	 s! t  | d |  j   } t | d |  t  j j | d  r t  j j | d  r t | d t t	 j	     n  t | d t t	 j	     d  S(   NR   s   /response/steps/s   /states   /begin_times   /begin_time_monotonics	   /end_time(
   R   R   R   R   R%   R   R   t   existsR&   R'   (   R(   R)   R#   R*   (    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyt   record_journey_step_endE   s    . c          C   s   t  j j d t j    t j d d  }  t  j d d k r t  j d d k r t j	 d |   } | d  k	 su t  t j |  } | j d  k	 s t  | j j |  | St j d |   Sd  S(   Ni    t   startup_files   passenger_wsgi.pyi   i   i   t   passenger_wsgi(   R   R   t   insertR   t   getcwdR"   t   gett   version_infoR    t   spec_from_file_locationR   R   t   module_from_spect   loadert   exec_modulet   impt   load_source(   R.   t   spect
   app_module(    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyt   load_appN   s    &c          C   s   t  t j d d   }  d t k r7 t d } d } n t j   } d } d } xw | d k  r y t | | |   SWqR t j k
 r } | j t j	 k r | d 7} | d k r |  q q |  qR XqR Wd  S(	   Nt   UNIX_PATH_MAXid   t
   socket_dirt   wsgit
   PsgWsgiAppi    i   i   (
   t   intR"   R2   t   tempfilet
   gettempdirt   make_sockett   sockett   errort   errnot
   EADDRINUSE(   R=   R>   t   socket_prefixt   iR   (    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyt   create_server_socket]   s     
	
c         C   s   t  j  t  j t  j  } t t j d t j d   d d  } |  d | d | } | d | !} | j |  | j	 d  | | f S(   Nt   Qi   i    t   xt   /t   .i  (
   RE   t   AF_UNIXt   SOCK_STREAMR   t   structt   unpackR   t   urandomt   bindt   listen(   R>   RI   R=   t   st   socket_suffixt   filename(    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyRD   t   s    (c             s/   d       f d   }  t  j  t  j |   d  S(   Nc         S   s   t  g  t j   D] } | j | j f ^ q  } g  } x t j   j   D] \ } } | j d | j	 | d  | f  x] t
 j |  D]L \ } } }	 }
 | j d | | |	 f  |
 r | j d |
 j    q q WqJ Wd j |  GHd  S(   Ns   
# Thread: %s(%d)t    s     File: "%s", line %d, in %ss       %ss   
(   t   dictt	   threadingt	   enumeratet   identt   nameR   t   _current_framest   itemst   appendR2   t	   tracebackt   extract_stackt   stript   join(   t   sigt   framet   tht   id2namet   codet	   thread_idt   stackRY   t   linenoR_   t   line(    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyt   debug~   s    1#""c            s     |  |  t  j d  d  S(   Ni   (   R   R   (   Rg   Rh   (   Rp   (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyt   debug_and_exit   s    (   t   signalt   SIGABRT(   Rq   (    (   Rp   sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyt   install_signal_handlers}   s    	c         C   s   t  j d  } | d  k	 s! t  | d } i i d d 6d |  d 6d d 6d	 d
 6t d 6g d 6} t | d   } t j | |  Wd  QXd  S(   NR   s   /response/properties.jsont   mainR_   s   unix:t   addresst   sessiont   protocoli   t   concurrencyt   accept_http_requestst   socketsR   (   R   R   R   R   R   R   R    t   dump(   t   socket_filenameR#   R   t   docR   (    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyt   advertise_sockets   s    
c          C   sT   t  j d  }  |  d  k	 s! t  |  d } t | d   } | j d  Wd  QXd  S(   NR   s   /response/finishR   t   1(   R   R   R   R   R   R   (   R#   R   R   (    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyt   advertise_readiness   s
    
c         C   s"   |  d j  |  d |  d   d  S(   Ni    i   i   (   t   with_traceback(   t   exc_info(    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyt   reraise_exception   s    c         C   s   |  j  d  S(   Ns   latin-1(   t   decode(   t   b(    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyt   bytes_to_str   s    c         C   s$   t  |  t  r |  S|  j d  Sd  S(   Ns   latin-1(   t
   isinstancet   bytest   encode(   RW   (    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyt   str_to_bytes   s    c         B   s   d d  Ud  S(   Ns+   raise exc_info[0], exc_info[1], exc_info[2](    (   R   (    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyR      s    c         C   s   |  S(   N(    (   R   (    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyR      s    c         C   s   |  S(   N(    (   RW   (    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyR      s    t   RequestHandlerc           B   sb   e  Z d    Z d   Z d   Z d   Z e e d  rE d   Z n	 d   Z d   Z	 d   Z
 RS(	   c         C   s   | |  _  | |  _ | |  _ d  S(   N(   t   servert
   owner_pipet   app(   t   selft   server_socketR   R   (    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyt   __init__   s    		c         C   ss  t  } yUxN| sY|  j   \ } } | s4 t } Pn  t  } z yW |  j |  \ } } | r | d d k r{ |  j |  q |  j | | |  } n  Wn{ t k
 r t } ne t k
 r } t | d t   s | j	 t	 j
 k rt j d  qn t k
 rt j d  n XWd  | sUy | j t j  Wn n Xy | j   WqUqUXn  Xq WWn t k
 rnn Xd  S(   Nt   REQUEST_METHODt   pingt	   passengers)   WSGI application raised an I/O exception!s%   WSGI application raised an exception!(   t   Falset   accept_connectionR   t   parse_requestt   process_pingt   process_requestt   KeyboardInterruptR	   t   getattrRG   t   EPIPER
   t	   exceptiont	   Exceptiont   shutdownRE   t   SHUT_WRt   close(   R   t   donet   clientRv   t   socket_hijackedt   envt   input_streamR   (    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyt	   main_loop   sB    		%c         C   sU   t  j  |  j |  j j   g g  g   d } |  j j   | k rM |  j j   Sd Sd  S(   Ni    (   NN(   t   selectR   R   t   filenot   acceptR   (   R   t   result(    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyR      s    +c         C   s:  d } xO t  |  d k  rW | j d t  |   } t  |  d k rJ d S| | 7} q	 Wt j d |  d } d } xO t  |  | k  r | j | t  |   } t  |  d k r d	 S| | 7} qw W| j d  } | j   i  } d } xB | t  |  k  r/t | | d  | t | |  <| d 7} q W| | f S(
   NRZ   i   i    s   >Is    i   i   (   NN(   NN(   t   lent   recvR   RR   RS   t   splitt   popR   (   R   R   t   buft   tmpt   header_sizet   headersR   RJ   (    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyR      s*    
"t   _fileobjectc         C   s   t  j | d d  S(   Nt   rbi   (   RE   R   (   R   t   sock(    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyt   wrap_input_socket  s    c         C   s   t  j  j | d d  S(   NR   i   (   RE   t   makefile(   R   R   (    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyR     s    c            sc  |  j  |    d <t j   d <d   d <t   d <t   d <t   d <  j d	 d
  d k rm d   d <n
 d   d <g   g     d d k      f d    d     f d  } t    f d  } |   d <|  j   |  } d   k rt Sz; x! | D] } | r |  qqW s> d  n  Wd  t | d  r^| j	   n  Xt S(   Ns
   wsgi.inputs   wsgi.errorsi   i    s   wsgi.versions   wsgi.multithreads   wsgi.multiprocesss   wsgi.run_oncet   HTTPSt   offt   onR   t   truet   yest   httpss   wsgi.url_schemet   httpR   t   HEADc            s   y  s t  d   nl   s  \ } }   ( j t d | | f   x% | D] }  j t d |   qS W j d  n   s  j t |    n  Wn) t k
 r } t | d t  |  n Xd  S(   Ns   write() before start_response()s,   HTTP/1.1 %s
Status: %s
Connection: close
s   %s: %s
s   
R   (   R   t   sendallR   R	   t   setattrR   (   t   datat   statust   response_headerst   headerR   (   t   headers_sentt   headers_sett   is_headt   output_stream(    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyR   .  s     	c            sP   | r* z   r t  |  n  Wd  d  } Xn  r? t d   n  |  | g  ( S(   Ns   Headers already set!(   R   R   R   (   R   R   R   (   R   R   R   (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyt   start_responseC  s    
c            s   |  r    d < Sd  S(   Ns   passenger.hijacked_socket(    (   t   do_it(   R   R   (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyt   hijackU  s    
s   passenger.hijacks   passenger.hijacked_socketRZ   R   (   i   i    (   R   R   R   R   (
   R   R   R   R   R   R2   R   R   R   R   (   R   R   R   R   R   R   R   R   (    (   R   R   R   R   R   R   sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyR     s8    





c         C   s   | j  d  d  S(   Nt   pong(   R   (   R   R   (    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyR   m  s    (   t   __name__t
   __module__R   R   R   R   R   RE   R   R   R   (    (    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyR      s   		'				Vt   __main__t   SUBPROCESS_EXEC_WRAPPERt   STEP_PERFORMEDt   SUBPROCESS_WRAPPER_PREPARATIONt   STEP_IN_PROGRESSt   STEP_ERROREDt   SUBPROCESS_APP_LOAD_OR_EXECt   SUBPROCESS_LISTEN(    (0   R   R   R\   Rr   Rc   RE   R   RR   R
   RG   RB   R    R'   R3   t	   importlibR    R8   R"   R   R   R   R$   R+   R-   R<   RK   RD   Rt   R   R   R   R   R   R   R   R   R;   t   tupleR   R   R}   R   t   stdint   applicationt   handlerR   t   removet   OSError(    (    (    sL   /opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/wsgi-loader.pyt   <module>   sx   x$&																					
