����JFIFXX�����    $.' ",#(7),01444'9=82<.342  2!!22222222222222222222222222222222222222222222222222����"��4�� ���,�PG"Z_�4�˷����kjز�Z�,F+��_z�,�© �����zh6�٨�ic�fu���#ډb���_�N�?��wQ���5-�~�I���8����TK<5o�Iv-�����k�_U_�����~b�M��d����Ӝ�U�Hh��?]��E�w��Q���k�{��_}qFW7HTՑ��Y��F�?_�'ϔ��_�Ջt��=||I ��6�έ"�����D���/[�k�9���Y�8ds|\���Ҿp6�Ҵ���]��.����6�z<�v��@]�i%��$j��~�g��J>��no����pM[me�i$[����s�o�ᘨ�˸ nɜG-�ĨU�ycP�3.DB�li�;��hj���x7Z^�N�h������N3u{�:j�x�힞��#M&��jL P@_���� P��&��o8������9�����@Sz6�t7#O�ߋ �s}Yf�T���lmr����Z)'N��k�۞p����w\�Tȯ?�8`�O��i{wﭹW�[�r�� ��Q4F�׊���3m&L�=��h3����z~��#�\�l :�F,j@�� ʱ�wQT����8�"kJO���6�֚l����}���R�>ډK���]��y����&����p�}b��;N�1�m�r$�|��7�>e�@B�TM*-iH��g�D�)� E�m�|�ؘbҗ�a��Ҿ����t4���o���G��*oCN�rP���Q��@z,|?W[0�����:�n,jWiE��W��$~/�hp\��?��{(�0���+�Y8rΟ�+����>S-S����VN;�}�s?.����� w�9��˟<���Mq4�Wv'��{)0�1mB��V����W[�����8�/<� �%���wT^�5���b��)iM� pg�N�&ݝ��VO~�q���u���9� ����!��J27����$O-���! �:�%H��� ـ����y�ΠM=t{!S�� oK8������t<����è:a������[�����ա�H���~��w��Qz`�po�^ ����Q��n� �,uu�C�$ ^���,������8�#��:�6��e�|~���!�3�3.�\0��q��o�4`.|� ����y�Q�`~;�d�ׯ,��O�Zw�������`73�v�܋�<���Ȏ�� ـ4k��5�K�a�u�=9Yd��$>x�A�&�� j0� ���vF��� Y�|�y��� ~�6�@c��1vOp�Ig����4��l�OD���L����� R���c���j�_�uX6��3?nk��Wy�f;^*B� ��@�~a�`��Eu������+���6�L��.ü>��}y���}_�O�6�͐�:�YrG�X��kG�����l^w���~㒶sy��Iu�!� W ��X��N�7BV��O��!X�2����wvG�R�f�T#�����t�/?���%8�^�W�aT��G�cL�M���I��(J����1~�8�?aT ���]����AS�E��(��*E}� 2��#I/�׍qz��^t�̔���b�Yz4x���t�){ OH��+(E��A&�N�������XT��o��"�XC��'���)}�J�z�p� ��~5�}�^����+�6����w��c��Q�|Lp�d�H��}�(�.|����k��c4^�"�����Z?ȕ ��a<�L�!039C� �Eu�C�F�Ew�ç ;�n?�*o���B�8�bʝ���'#Rqf���M}7����]����s2tcS{�\icTx;�\��7K���P���ʇ Z O-��~��c>"��?�������P��E��O�8��@�8��G��Q�g�a�Վ���󁶠�䧘��_%#r�>�1�z�a��eb��qcPѵ��n���#L��� =��׀t� L�7�`��V���A{�C:�g���e@�w1 Xp3�c3�ġ����p��M"'-�@n4���fG��B3�DJ�8[Jo�ߐ���gK)ƛ��$���� ���8�3�����+���� �����6�ʻ���� ���S�kI�*KZlT _`���?��K����QK�d����B`�s}�>���`��*�>��,*@J�d�oF*����弝��O}�k��s��]��y�ߘ��c1G�V���<=�7��7����6�q�PT��tXԀ�!9*4�4Tހ3XΛex�46���Y��D ����� �BdemDa����\�_l,��G�/���֌7���Y�](�xTt^%�GE�����4�}bT���ڹ�����;Y)���B�Q��u��>J/J �⮶.�XԄ��j�ݳ�+E��d ��r�5�_D�1 ��o�� �B�x�΢�#���<��W�����8���R6�@g�M�.��� dr�D��>(otU��@x=��~v���2� ӣ�d�oBd��3�eO�6�㣷�����ݜ6��6Y��Qz`��S��{���\P�~z m5{J/L��1������<�e�ͅPu�b�]�ϔ���'������f�b� Zpw��c`"��i���BD@:)ִ�:�]��hv�E�w���T�l��P���"Ju�}��وV J��G6��. J/�Qgl߭�e�����@�z�Zev2u�)]կ�����7x���s�M�-<ɯ�c��r�v�����@��$�ޮ}lk���a���'����>x��O\�ZFu>�����ck#��&:��`�$�ai�>2Δ����l���oF[h��lE�ܺ�Πk:)���`�� $[6�����9�����kOw�\|���8}������ބ:��񶐕��I�A1/�=�2[�,�!��.}gN#�u����b��� ~��݊��}34q����d�E��Lc��$��"�[q�U�硬g^��%B �z���r�pJ�ru%v\h1Y�ne`ǥ:g���pQM~�^�Xi� ��`S�:V29.�P���V�?B�k�� AEvw%�_�9C�Q����wKekPؠ�\�;Io d�{ ߞo�c1eP����\� `����E=���@K<�Y���eڼ�J���w����{av�F�'�M�@/J��+9p���|]�����Iw &`��8���&M�hg��[�{��Xj��%��Ӓ�$��(����ʹN���<>�I���RY���K2�NPlL�ɀ)��&e����B+ь����( � �JTx���_?EZ� }@ 6�U���뙢ط�z��dWI�n` D����噥�[��uV��"�G&Ú����2g�}&m��?ċ�"����Om#��������� ��{�ON��"S�X��Ne��ysQ���@Fn��Vg���dX�~nj�]J�<�K]:��FW��b�������62�=��5f����JKw��bf�X�55��~J �%^����:�-�QIE��P��v�nZum� z � ~ə ���� ���ة����;�f��\v���g�8�1��f24;�V���ǔ�)����9���1\��c��v�/'Ƞ�w�������$�4�R-��t���� e�6�/�ġ �̕Ecy�J���u�B���<�W�ַ~�w[B1L۲�-JS΂�{���΃������A��20�c#��@ 0!1@AP"#2Q`$3V�%45a6�FRUq��� ����^7ׅ,$n�������+��F�`��2X'��0vM��p�L=������5��8������u�p~���.�`r�����\���O��,ư�0oS ��_�M�����l���4�kv\JSd���x���SW�<��Ae�IX����������$I���w�:S���y���›R��9�Q[���,�5�;�@]�%���u�@ *ro�lbI �� ��+���%m:�͇ZV�����u�̉����θau<�fc�.����{�4Ա� �Q����*�Sm��8\ujqs]{kN���)qO�y�_*dJ�b�7���yQqI&9�ԌK!�M}�R�;������S�T���1���i[U�ɵz�]��U)V�S6���3$K{�ߊ<�(� E]Զ[ǼENg�����'�\?#)Dkf��J���o��v���'�%ƞ�&K�u�!��b�35LX�Ϸ��63$K�a�;�9>,R��W��3�3� d�JeTYE.Mϧ��-�o�j3+y��y^�c�������VO�9NV\nd�1 ��!͕_)a�v;����թ�M�lWR1��)El��P;��yوÏ�u 3�k�5Pr6<�⒲l�!˞*��u־�n�!�l:����UNW ��%��Chx8vL'��X�@��*��)���̮��ˍ��� ���D-M�+J�U�kvK����+�x8��cY������?�Ԡ��~3mo��|�u@[XeY�C�\Kp�x8�oC�C�&����N�~3-H���� ��MX�s�u<`���~"WL��$8ξ��3���a�)|:@�m�\���^�`�@ҷ)�5p+��6���p�%i)P M���ngc�����#0Aruz���RL+xSS?���ʮ}()#�t��mˇ!��0}}y����<�e� �-ή�Ԩ��X������ MF���ԙ~l L.3���}�V뽺�v�����멬��Nl�)�2����^�Iq��a��M��qG��T�����c3#������3U�Ǎ���}��לS�|qa��ڃ�+���-��2�f����/��bz��ڐ�� �ݼ[2�ç����k�X�2�* �Z�d���J�G����M*9W���s{��w���T��x��y,�in�O�v��]���n����P�$�JB@=4�OTI�n��e�22a\����q�d���%�$��(���:���: /*�K[PR�fr\nڙdN���F�n�$�4�[�� U�zƶ����� �mʋ���,�ao�u 3�z� �x��Kn����\[��VFmbE;�_U��&V�Gg�]L�۪&#n%�$ɯ�dG���D�TI=�%+AB�Ru#��b4�1�»x�cs�YzڙJG��f��Il��d�eF'T� iA��T���uC�$����Y��H?����[!G`}���ͪ� �纤Hv\������j�Ex�K���!���OiƸ�Yj�+u-<���'q����uN�*�r\��+�]���<�wOZ.fp�ێ��,-*)V?j-kÊ#�`�r��dV����(�ݽBk�����G�ƛk�QmUڗe��Z���f}|����8�8��a���i��3'J�����~G_�^���d�8w������ R�`(�~�.��u���l�s+g�bv���W���lGc}��u���afE~1�Ue������Z�0�8�=e�� f@/�jqEKQQ�J��oN��J���W5~M>$6�Lt�;$ʳ{���^��6�{����v6���ķܰg�V�cnn �~z�x�«�,2�u�?cE+Ș�H؎�%�Za�)���X>uW�Tz�Nyo����s���FQƤ��$��*�&�LLXL)�1�" L��eO��ɟ�9=���:t��Z���c��Ž���Y?�ӭV�wv�~,Y��r�ۗ�|�y��GaF�����C�����.�+� ���v1���fήJ�����]�S��T��B��n5sW}y�$��~z�'�c ��8 ��� ,! �p��VN�S��N�N�q��y8z˱�A��4��*��'������2n<�s���^ǧ˭P�Jޮɏ�U�G�L�J�*#��<�V��t7�8����TĜ>��i}K%,���)[��z�21z ?�N�i�n1?T�I�R#��m-�����������������1����lA�`��fT5+��ܐ�c�q՝��ʐ��,���3�f2U�եmab��#ŠdQ�y>\��)�SLY����w#��.���ʑ�f��� ,"+�w�~�N�'�c�O�3F�������N<���)j��&��,-� �љ���֊�_�zS���TǦ����w�>��?�������n��U仆�V���e�����0���$�C�d���rP �m�׈e�Xm�Vu� �L��.�bֹ��� �[Դaզ���*��\y�8�Է:�Ez\�0�Kq�C b��̘��cө���Q��=0Y��s�N��S.���3.���O�o:���#���v7�[#߫ ��5�܎�L���Er4���9n��COWlG�^��0k�%<���ZB���aB_���������'=��{i�v�l�$�uC���mƎҝ{�c㱼�y]���W�i ��ߧc��m�H� m�"�"�����;Y�ߝ�Z�Ǔ�����:S#��|}�y�,/k�Ld� TA�(�AI$+I3��;Y*���Z��}|��ӧO��d�v��..#:n��f>�>���ȶI�TX��� 8��y����"d�R�|�)0���=���n4��6ⲑ�+��r<�O�܂~zh�z����7ܓ�HH�Ga롏���nCo�>������a ���~]���R���̲c?�6(�q�;5%� |�uj�~z8R=X��I�V=�|{v�Gj\gc��q����z�؋%M�ߍ����1y��#��@f^���^�>N�����#x#۹��6�Y~�?�dfPO��{��P�4��V��u1E1J �*|���%���JN��`eWu�zk M6���q t[�� ��g�G���v��WIG��u_ft����5�j�"�Y�:T��ɐ���*�;� e5���4����q$C��2d�}���� _S�L#m�Yp��O�.�C�;��c����Hi#֩%+) �Ӎ��ƲV���SYź��g |���tj��3�8���r|���V��1#;.SQ�A[���S������#���`n�+���$��$I �P\[�@�s��(�ED�z���P��])8�G#��0B��[ى��X�II�q<��9�~[Z멜�Z�⊔IWU&A>�P~�#��dp<�?����7���c��'~���5 ��+$���lx@�M�dm��n<=e�dyX��?{�|Aef ,|n3�<~z�ƃ�uۧ�����P��Y,�ӥQ�*g�#먙R�\���;T��i,��[9Qi歉����c>]9�� ��"�c��P�� �Md?٥��If�ت�u��k��/����F��9�c*9��Ǎ:�ØF���z�n*�@|I�ށ9����N3{'��[�'ͬ�Ҳ4��#}��!�V� Fu��,�,mTIk���v C�7v���B�6k�T9��1�*l� '~��ƞF��lU��'�M ����][ΩũJ_�{�i�I�n��$���L�� j��O�dx�����kza۪��#�E��Cl����x˘�o�����V���ɞ�ljr��)�/,�߬h�L��#��^��L�ф�,íMƁe�̩�NB�L�����iL����q�}��(��q��6IçJ$�W�E$��:������=#����(�K�B����zђ <��K(�N�۫K�w��^O{!����)�H���>x�������lx�?>Պ�+�>�W���,Ly!_�D���Ō�l���Q�!�[ �S����J��1��Ɛ�Y}��b,+�Lo�x�ɓ)����=�y�oh�@�꥟/��I��ѭ=��P�y9��� �ۍYӘ�e+�p�Jnϱ?V\SO%�(�t� ���=?MR�[Ș�����d�/ ��n�l��B�7j� ��!�;ӥ�/�[-���A�>�dN�sLj ��,ɪv��=1c�.SQ�O3�U���ƀ�ܽ�E����������̻��9G�ϷD�7(�}��Ävӌ\�y�_0[w ���<΍>����a_��[0+�L��F.�޺��f�>oN�T����q;���y\��bՃ��y�jH�<|q-eɏ�_?_9+P���Hp$�����[ux�K w�Mw��N�ی'$Y2�=��q���KB��P��~������Yul:�[<����F1�2�O���5=d����]Y�sw:���Ϯ���E��j,_Q��X��z`H1,#II ��d�wr��P˂@�ZJV����y$�\y�{}��^~���[:N����ߌ�U�������O��d�����ؾe��${p>G��3c���Ė�lʌ�� ת��[��`ϱ�-W����dg�I��ig2��� ��}s ��ؤ(%#sS@���~���3�X�nRG�~\jc3�v��ӍL��M[JB�T��s3}��j�Nʖ��W����;7��ç?=X�F=-�=����q�ߚ���#���='�c��7���ڑW�I(O+=:uxq�������������e2�zi+�kuG�R��������0�&e�n���iT^J����~\jy���p'dtG��s����O��3����9* �b#Ɋ�� p������[Bws�T�>d4�ۧs���nv�n���U���_�~,�v����ƜJ1��s�� �QIz��)�(lv8M���U=�;����56��G���s#�K���MP�=��LvyGd��}�VwWBF�'�à �?MH�U�g2�� ����!�p�7Q��j��ڴ����=��j�u��� Jn�A s���uM������e��Ɔ�Ҕ�!)'��8Ϣ�ٔ��ޝ(��Vp���צ֖d=�IC�J�Ǡ{q������kԭ�߸���i��@K����u�|�p=..�*+����x�����z[Aqġ#s2a�Ɗ���RR�)*HRsi�~�a &f��M��P����-K�L@��Z��Xy�'x�{}��Zm+���:�)�) IJ�-i�u���� ���ܒH��'�L(7�y�GӜq���� j��� 6ߌg1�g�o���,kر���tY�?W,���p���e���f�OQS��!K�۟cҒA�|ս�j�>��=⬒��˧L[�� �߿2JaB~R��u�:��Q�] �0H~���]�7��Ƽ�I���(}��cq '�ήET���q�?f�ab���ӥvr� �)o��-Q��_'����ᴎo��K������;��V���o��%���~OK ����*��b�f:���-ťIR��`B�5!RB@���ï�� �u �̯e\�_U�_������� g�ES��3�������QT��a����x����U<~�c?�*�#]�MW,[8O�a�x��]�1bC|踤�P��lw5V%�)�{t�<��d��5���0i�XSU��m:��Z�┵�i�"��1�^B�-��P�hJ��&)O��*�D��c�W��vM��)����}���P��ܗ-q����\mmζZ-l@�}��a��E�6��F�@��&Sg@���ݚ�M����� ȹ 4����#p�\H����dYDo�H���"��\��..R�B�H�z_�/5˘����6��KhJR��P�mƶi�m���3�,#c�co��q�a)*Pt����R�m�k�7x�D�E�\Y�閣_X�<���~�)���c[[�BP����6�Yq���S��0����%_����;��Àv�~�| VS؇ ��'O0��F0��\���U�-�d@�����7�SJ*z��3n��y��P����O���������m�~�P�3|Y��ʉr#�C�<�G~�.,! ���bqx���h~0=��!ǫ�jy����l�O,�[B��~��|9��ٱ����Xly�#�i�B��g%�S��������tˋ���e���ې��\[d�t)��.+u�|1 ������#�~Oj����hS�%��i.�~X���I�H�m��0n���c�1uE�q��cF�RF�o���7� �O�ꮧ� ���ۛ{��ʛi5�rw?׌#Qn�TW��~?y$��m\�\o����%W� ?=>S�N@�� �Ʈ���R����N�)�r"C�:��:����� �����#��qb��Y�. �6[��2K����2u�Ǧ�HYR��Q�MV��� �G�$��Q+.>�����nNH��q�^��� ����q��mM��V��D�+�-�#*�U�̒ ���p욳��u:�������IB���m���PV@O���r[b= �� ��1U�E��_Nm�yKbN�O���U�}�the�`�|6֮P>�\2�P�V���I�D�i�P�O;�9�r�mAHG�W�S]��J*�_�G��+kP�2����Ka�Z���H�'K�x�W�MZ%�O�YD�Rc+o��?�q��Ghm��d�S�oh�\�D�|:W������UA�Qc yT�q������~^�H��/��#p�CZ���T�I�1�ӏT����4��"�ČZ�����}��`w�#�*,ʹ�� ��0�i��課�Om�*�da��^gJ݅{���l�e9uF#T�ֲ��̲�ٞC"�q���ߍ ոޑ�o#�XZTp����@ o�8��(jd��xw�]�,f���`~�|,s��^����f�1���t��|��m�򸄭/ctr��5s��7�9Q�4�H1꠲BB@l9@���C�����+�wp�xu�£Yc�9��?`@#�o�mH�s2��)�=��2�.�l����jg�9$�Y�S�%*L������R�Y������7Z���,*=�䷘$�������arm�o�ϰ���UW.|�r�uf����IGw�t����Zwo��~5 ��YյhO+=8fF�)�W�7�L9lM�̘·Y���֘YLf�큹�pRF���99.A �"wz��=E\Z���'a� 2��Ǚ�#;�'}�G���*��l��^"q��+2FQ� hj��kŦ��${���ޮ-�T�٭cf�|�3#~�RJ����t��$b�(R��(����r���dx� >U b�&9,>���%E\� Ά�e�$��'�q't��*�א���ެ�b��-|d���SB�O�O��$�R+�H�)�܎�K��1m`;�J�2�Y~9��O�g8=vqD`K[�F)k�[���1m޼c��n���]s�k�z$@��)!I �x՝"v��9=�ZA=`Ɠi �:�E��)`7��vI��}d�YI�_ �o�:ob���o ���3Q��&D&�2=�� �Ά��;>�h����y.*ⅥS������Ӭ�+q&����j|UƧ����}���J0��WW< ۋS�)jQR�j���Ư��rN)�Gű�4Ѷ(�S)Ǣ�8��i��W52���No˓� ۍ%�5brOn�L�;�n��\G����=�^U�dI���8$�&���h��'���+�(������cȁ߫k�l��S^���cƗjԌE�ꭔ��gF���Ȓ��@���}O���*;e�v�WV���YJ\�]X'5��ղ�k�F��b 6R�o՜m��i N�i����>J����?��lPm�U��}>_Z&�KK��q�r��I�D�Չ~�q�3fL�:S�e>���E���-G���{L�6p�e,8��������QI��h��a�Xa��U�A'���ʂ���s�+טIjP�-��y�8ۈZ?J$��W�P� ��R�s�]��|�l(�ԓ��sƊi��o(��S0��Y� 8�T97.�����WiL��c�~�dxc�E|�2!�X�K�Ƙਫ਼�$((�6�~|d9u+�qd�^3�89��Y�6L�.I�����?���iI�q���9�)O/뚅����O���X��X�V��ZF[�یgQ�L��K1���RҖr@v�#��X�l��F���Нy�S�8�7�kF!A��sM���^rkp�jP�DyS$N���q��nxҍ!U�f�!eh�i�2�m���`�Y�I�9r�6� �TF���C}/�y�^���Η���5d�'��9A-��J��>{�_l+�`��A���[�'��յ�ϛ#w:݅�%��X�}�&�PSt�Q�"�-��\縵�/����$Ɨh�Xb�*�y��BS����;W�ջ_mc�����vt?2}1�;qS�d�d~u:2k5�2�R�~�z+|HE!)�Ǟl��7`��0�<�,�2*���Hl-��x�^����'_TV�gZA�'j� ^�2Ϊ��N7t�����?w�� �x1��f��Iz�C-Ȗ��K�^q�;���-W�DvT�7��8�Z�������� hK�(P:��Q- �8�n�Z���܃e貾�<�1�YT<�,�����"�6{/ �?�͟��|1�:�#g��W�>$����d��J��d�B��=��jf[��%rE^��il:��B���x���Sּ�1հ��,�=��*�7 fcG��#q� �eh?��2�7�����,�!7x��6�n�LC�4x��},Geǝ�tC.��vS �F�43��zz\��;QYC,6����~;RYS/6���|2���5���v��T��i����������mlv��������&� �nRh^ejR�LG�f���? �ۉҬܦƩ��|��Ȱ����>3����!v��i�ʯ�>�v��オ�X3e���_1z�Kȗ\<������!�8���V��]��?b�k41�Re��T�q��mz��TiOʦ�Z��Xq���L������q"+���2ۨ��8}�&N7XU7Ap�d�X��~�׿��&4e�o�F��� �H����O���č�c�� 懴�6���͉��+)��v;j��ݷ�� �UV�� i��� j���Y9GdÒJ1��詞�����V?h��l����l�cGs�ځ�������y�Ac�����\V3�? �� ܙg�>qH�S,�E�W�[�㺨�uch�⍸�O�}���a��>�q�6�n6����N6�q������N ! 1AQaq�0@����"2BRb�#Pr���3C`��Scst���$4D���%Td�� ?���N����a��3��m���C���w��������xA�m�q�m���m������$����4n淿t'��C"w��zU=D�\R+w�p+Y�T�&�պ@��ƃ��3ޯ?�Aﶂ��aŘ���@-�����Q�=���9D��ռ�ѻ@��M�V��P��܅�G5�f�Y<�u=,EC)�<�Fy'�"�&�չ�X~f��l�KԆV��?�� �W�N����=(� �;���{�r����ٌ�Y���h{�١������jW����P���Tc�����X�K�r��}���w�R��%��?���E��m�� �Y�q|����\lEE4���r���}�lsI�Y������f�$�=�d�yO����p�����yBj8jU�o�/�S��?�U��*������ˍ�0������u�q�m [�?f����a�� )Q�>����6#������� ?����0UQ����,IX���(6ڵ[�DI�MNލ�c&���υ�j\��X�R|,4��� j������T�hA�e��^���d���b<����n�� �즇�=!���3�^�`j�h�ȓr��jẕ�c�,ٞX����-����a�ﶔ���#�$��]w�O��Ӫ�1y%��L�Y<�wg#�ǝ�̗`�x�xa�t�w��»1���o7o5��>�m뭛C���Uƃߜ}�C���y1Xνm�F8�jI���]����H���ۺиE@I�i;r�8ӭ����V�F�Շ| ��&?�3|x�B�MuS�Ge�=Ӕ�#BE5G�����Y!z��_e��q�р/W>|-�Ci߇�t�1ޯќd�R3�u��g�=0 5��[?�#͏��q�cf���H��{ ?u�=?�?ǯ���}Z��z���hmΔ�BFTW�����<�q�(v� ��!��z���iW]*�J�V�z��gX֧A�q�&��/w���u�gYӘa���; �i=����g:��?2�dž6�ى�k�4�>�Pxs����}������G�9��3 ���)gG�R<>r h�$��'nc�h�P��Bj��J�ҧH� -��N1���N��?��~��}-q!=��_2hc�M��l�vY%UE�@|�v����M2�.Y[|y�"Eï��K�ZF,�ɯ?,q�?v�M 80jx�"�;�9vk�����+ ֧�� �ȺU��?�%�vcV��mA�6��Qg^M����A}�3�nl� QRN�l8�kkn�'�����(��M�7m9و�q���%ޟ���*h$Zk"��$�9��: �?U8�Sl��,,|ɒ��xH(ѷ����Gn�/Q�4�P��G�%��Ա8�N��!� �&�7�;���eKM7�4��9R/%����l�c>�x;������>��C�:�����t��h?aKX�bhe�ᜋ^�$�Iհ �hr7%F$�E��Fd���t��5���+�(M6�t����Ü�UU|zW�=a�Ts�Tg������dqP�Q����b'�m���1{|Y����X�N��b �P~��F^F:����k6�"�j!�� �I�r�`��1&�-$�Bevk:y���#yw��I0��x��=D�4��tU���P�ZH��ڠ底taP��6����b>�xa����Q�#� WeF��ŮNj�p�J* mQ�N����*I�-*�ȩ�F�g�3 �5��V�ʊ�ɮ�a��5F���O@{���NX��?����H�]3��1�Ri_u��������ѕ�� ����0��� F��~��:60�p�͈�S��qX#a�5>���`�o&+�<2�D����: �������ڝ�$�nP���*)�N�|y�Ej�F�5ټ�e���ihy�Z �>���k�bH�a�v��h�-#���!�Po=@k̆IEN��@��}Ll?j�O������߭�ʞ���Q|A07x���wt!xf���I2?Z��<ץ�T���cU�j��]��陎Ltl �}5�ϓ��$�,��O�mˊ�;�@O��jE��j(�ا,��LX���LO���Ц�90�O �.����a��nA���7������j4 ��W��_ٓ���zW�jcB������y՗+EM�)d���N�g6�y1_x��p�$Lv:��9�"z��p���ʙ$��^��JԼ*�ϭ����o���=x�Lj�6�J��u82�A�H�3$�ٕ@�=Vv�]�'�qEz�;I˼��)��=��ɯ���x �/�W(V���p�����$ �m�������u�����񶤑Oqˎ�T����r��㠚x�sr�GC��byp�G��1ߠ�w e�8�$⿄����/�M{*}��W�]˷.�CK\�ުx���/$�WPw���r� |i���&�}�{�X� �>��$-��l���?-z���g����lΆ���(F���h�vS*���b���߲ڡn,|)mrH[���a�3�ר�[1��3o_�U�3�TC�$��(�=�)0�kgP���� ��u�^=��4 �WYCҸ:��vQ�ר�X�à��tk�m,�t*��^�,�}D*� �"(�I��9R����>`�`��[~Q]�#af��i6l��8���6�:,s�s�N6�j"�A4���IuQ��6E,�GnH��zS�HO�uk�5$�I�4��ؤ�Q9�@��C����wp�BGv[]�u�Ov���0I4���\��y�����Q�Ѹ��~>Z��8�T��a��q�ޣ;z��a���/��S��I:�ܫ_�|������>=Z����8:�S��U�I�J��"IY���8%b8���H��:�QO�6�;7�I�S��J��ҌAά3��>c���E+&jf$eC+�z�;��V����� �r���ʺ������my�e���aQ�f&��6�ND��.:��NT�vm�<- u���ǝ\MvZY�N�NT��-A�>jr!S��n�O 1�3�Ns�%�3D@���`������ܟ 1�^c<���� �a�ɽ�̲�Xë#�w�|y�cW�=�9I*H8�p�^(4���՗�k��arOcW�tO�\�ƍR��8����'�K���I�Q�����?5�>[�}��yU�ײ -h��=��% q�ThG�2�)���"ו3]�!kB��*p�FDl�A���,�eEi�H�f�Ps�����5�H:�Փ~�H�0Dت�D�I����h�F3�������c��2���E��9�H��5�zԑ�ʚ�i�X�=:m�xg�hd(�v����׊�9iS��O��d@0ڽ���:�p�5�h-��t�&���X�q�ӕ,��ie�|���7A�2���O%P��E��htj��Y1��w�Ѓ!����  ���� ࢽ��My�7�\�a�@�ţ�J �4�Ȼ�F�@o�̒?4�wx��)��]�P��~�����u�����5�����7X ��9��^ܩ�U;Iꭆ 5 �������eK2�7(�{|��Y׎ �V��\"���Z�1� Z�����}��(�Ǝ"�1S���_�vE30>���p;� ΝD��%x�W�?W?v����o�^V�i�d��r[��/&>�~`�9Wh��y�;���R��� ;;ɮT��?����r$�g1�K����A��C��c��K��l:�'��3 c�ﳯ*"t8�~l��)���m��+U,z��`(�>yJ�?����h>��]��v��ЍG*�{`��;y]��I�T� ;c��NU�fo¾h���/$���|NS���1�S�"�H��V���T���4��uhǜ�]�v;���5�͠x��'C\�SBpl���h}�N����� A�Bx���%��ޭ�l��/����T��w�ʽ]D�=����K���ž�r㻠l4�S�O?=�k �M:� ��c�C�a�#ha���)�ѐxc�s���gP�iG��{+���x���Q���I= �� z��ԫ+ �8"�k�ñ�j=|����c ��y��CF��/��*9ж�h{ �?4�o� ��k�m�Q�N�x��;�Y��4膚�a�w?�6�>e]�����Q�r�:����g�,i"�����ԩA�*M�<�G��b�if��l^M��5� �Ҩ�{����6J��ZJ�����P�*�����Y���ݛu�_4�9�I8�7���������,^ToR���m4�H��?�N�S�ѕw��/S��甍�@�9H�S�T��t�ƻ���ʒU��*{Xs�@����f�����֒Li�K{H�w^���������Ϥm�tq���s� ���ք��f:��o~s��g�r��ט� �S�ѱC�e]�x���a��) ���(b-$(�j>�7q�B?ӕ�F��hV25r[7 Y� }L�R��}����*sg+��x�r�2�U=�*'WS��ZDW]�WǞ�<��叓���{�$�9Ou4��y�90-�1�'*D`�c�^o?(�9��u���ݐ��'PI&� f�Jݮ�������:wS����jfP1F:X �H�9dԯ���˝[�_54 �}*;@�ܨ�� ð�yn�T���?�ןd�#���4rG�ͨ��H�1�|-#���Mr�S3��G�3�����)�.᧏3v�z֑��r����$G"�`j �1t��x0<Ɔ�Wh6�y�6��,œ�Ga��gA����y��b��)��h�D��ß�_�m��ü �gG;��e�v��ݝ�nQ� ��C����-�*��o���y�a��M��I�>�<���]obD��"�:���G�A��-\%LT�8���c�)��+y76���o�Q�#*{�(F�⽕�y����=���rW�\p���۩�c���A���^e6��K������ʐ�cVf5$�'->���ՉN"���F�"�UQ@�f��Gb~��#�&�M=��8�ט�JNu9��D��[̤�s�o�~������ G��9T�tW^g5y$b��Y'��س�Ǵ�=��U-2 #�MC�t(�i� �lj�@Q 5�̣i�*�O����s�x�K�f��}\��M{E�V�{�υ��Ƈ�����);�H����I��fe�Lȣr�2��>��W�I�Ȃ6������i��k�� �5�YOxȺ����>��Y�f5'��|��H+��98pj�n�.O�y�������jY��~��i�w'������l�;�s�2��Y��:'lg�ꥴ)o#'Sa�a�K��Z� �m��}�`169�n���"���x��I ��*+� }F<��cГ���F�P�������ֹ*�PqX�x۩��,� ��N�� �4<-����%����:��7����W���u�`����� $�?�I��&����o��o��`v�>��P��"��l���4��5'�Z�gE���8���?��[�X�7(��.Q�-��*���ތL@̲����v��.5���[��=�t\+�CNܛ��,g�SQnH����}*F�G16���&:�t��4ُ"A��̣��$�b �|����#rs��a�����T�� ]�<�j��BS�('$�ɻ� �wP;�/�n��?�ݜ��x�F��yUn�~mL*-�������Xf�wd^�a�}��f�,=t�׵i�.2/wpN�Ep8�OР���•��R�FJ� 55TZ��T �ɭ�<��]��/�0�r�@�f��V��V����Nz�G��^���7hZi����k��3�,kN�e|�vg�1{9]_i��X5y7� 8e]�U����'�-2,���e"����]ot�I��Y_��n�(JҼ��1�O ]bXc���Nu�No��pS���Q_���_�?i�~�x h5d'�(qw52] ��'ޤ�q��o1�R!���`ywy�A4u���h<קy���\[~�4�\ X�Wt/� 6�����n�F�a8��f���z �3$�t(���q��q�x��^�XWeN'p<-v�!�{�(>ӽDP7��ո0�y)�e$ٕv�Ih'Q�EA�m*�H��RI��=:��� ���4牢) �%_iN�ݧ�l]� �Nt���G��H�L��� ɱ�g<���1V�,�J~�ٹ�"K��Q�� 9�HS�9�?@��k����r�;we݁�]I�!{ �@�G�[�"��`���J:�n]�{�cA�E����V��ʆ���#��U9�6����j�#Y�m\��q�e4h�B�7��C�������d<�?J����1g:ٳ���=Y���D�p�ц� ׈ǔ��1�]26؜oS�'��9�V�FVu�P�h�9�xc�oq�X��p�o�5��Ա5$�9W�V(�[Ak�aY錎qf;�'�[�|���b�6�Ck��)��#a#a˙��8���=äh�4��2��C��4tm^ �n'c���]GQ$[Wҿ��i���vN�{Fu ��1�gx��1┷���N�m��{j-,��x�� Ūm�ЧS�[�s���Gna���䑴�� x�p 8<������97�Q���ϴ�v�aϚG��Rt�Һ׈�f^\r��WH�JU�7Z���y)�vg=����n��4�_)y��D'y�6�]�c�5̪�\� �PF�k����&�c;��cq�$~T�7j ���nç]�<�g ":�to�t}�159�<�/�8������m�b�K#g'I'.W�����6��I/��>v��\�MN��g���m�A�yQL�4u�Lj�j9��#44�t��l^�}L����n��R��!��t��±]��r��h6ٍ>�yҏ�N��fU�� ���� Fm@�8}�/u��jb9������he:A�y�ծw��GpΧh�5����l}�3p468��)U��d��c����;Us/�֔�YX�1�O2��uq�s��`hwg�r~�{ R��mhN��؎*q 42�*th��>�#���E����#��Hv�O����q�}�����6�e��\�,Wk�#���X��b>��p}�դ��3���T5��†��6��[��@�P�y*n��|'f�֧>�lư΂�̺����SU�'*�q�p�_S�����M�� '��c�6�����m�� ySʨ;M��r���Ƌ�m�Kxo,���Gm�P��A�G�:��i��w�9�}M(�^�V��$ǒ�ѽ�9���|���� �a����J�SQ�a���r�B;����}���ٻ֢�2�%U���c�#�g���N�a�ݕ�'�v�[�OY'��3L�3�;,p�]@�S��{ls��X�'���c�jw�k'a�.��}�}&�� �dP�*�bK=ɍ!����;3n�gΊU�ߴmt�'*{,=SzfD� A��ko~�G�aoq�_mi}#�m�������P�Xhύ����mxǍ�΂���巿zf��Q���c���|kc�����?���W��Y�$���_Lv����l߶��c���`?����l�j�ݲˏ!V��6����U�Ђ(A���4y)H���p�Z_�x��>���e��R��$�/�`^'3qˏ�-&Q�=?��CFVR �D�fV�9��{�8g�������n�h�(P"��6�[�D���< E�����~0<@�`�G�6����Hг�cc�� �c�K.5��D��d�B���`?�XQ��2��ٿyqo&+�1^� DW�0�ꊩ���G�#��Q�nL3��c���������/��x ��1�1[y�x�პCW��C�c�UĨ80�m�e�4.{�m��u���I=��f�����0QRls9���f���������9���~f�����Ǩ��a�"@�8���ȁ�Q����#c�ic������G��$���G���r/$W�(��W���V�"��m�7�[m�A�m����bo��D� j����۳� l���^�k�h׽����� ��#� iXn�v��eT�k�a�^Y�4�BN��ĕ��0 !01@Q"2AaPq3BR������?���@4�Q�����T3,���㺠�W�[=JK�Ϟ���2�r^7��vc�:�9 �E�ߴ�w�S#d���Ix��u��:��Hp��9E!�� V 2;73|F��9Y���*ʬ�F��D����u&���y؟��^EA��A��(ɩ���^��GV:ݜDy�`��Jr29ܾ�㝉��[���E;Fzx��YG��U�e�Y�C���� ����v-tx����I�sם�Ę�q��Eb�+P\ :>�i�C'�;�����k|z�رn�y]�#ǿb��Q��������w�����(�r|ӹs��[�D��2v-%��@;�8<a���[\o[ϧw��I!��*0�krs)�[�J9^��ʜ��p1)� "��/_>��o��<1����A�E�y^�C��`�x1'ܣn�p��s`l���fQ��):�l����b>�Me�jH^?�kl3(�z:���1ŠK&?Q�~�{�ٺ�h�y���/�[��V�|6��}�KbX����mn[-��7�5q�94�������dm���c^���h� X��5��<�eޘ>G���-�}�دB�ޟ� ��|�rt�M��V+�]�c?�-#ڛ��^ǂ}���Lkr���O��u�>�-D�ry� D?:ޞ�U��ǜ�7�V��?瓮�"�#���r��չģVR;�n���/_� ؉v�ݶe5d�b9��/O��009�G���5n�W����JpA�*�r9�>�1��.[t���s�F���nQ� V 77R�]�ɫ8����_0<՜�IF�u(v��4��F�k�3��E)��N:��yڮe��P�`�1}�$WS��J�SQ�N�j�ٺ��޵�#l���ј(�5=��5�lǏmoW�v-�1����v,W�mn��߀$x�<����v�j(����c]��@#��1������Ǔ���o'��u+����;G�#�޸��v-lη��/(`i⣍Pm^���ԯ̾9Z��F��������n��1��� ��]�[��)�'������:�֪�W��FC����� �B9،!?���]��V��A�Վ�M��b�w��G F>_DȬ0¤�#�QR�[V��kz���m�w�"��9ZG�7'[��=�Q����j8R?�zf�\a�=��O�U����*oB�A�|G���2�54 �p��.w7� �� ��&������ξxGHp� B%��$g�����t�Џ򤵍z���HN�u�Я�-�'4��0��;_��3 !01"@AQa2Pq#3BR������?��ʩca��en��^��8���<�u#��m*08r��y�N"�<�Ѳ0��@\�p��� �����Kv�D��J8�Fҽ� �f�Y��-m�ybX�NP����}�!*8t(�OqѢ��Q�wW�K��ZD��Δ^e��!� ��B�K��p~�����e*l}z#9ң�k���q#�Ft�o��S�R����-�w�!�S���Ӥß|M�l޶V��!eˈ�8Y���c�ЮM2��tk���� ������J�fS����Ö*i/2�����n]�k�\���|4yX�8��U�P.���Ы[���l��@"�t�<������5�lF���vU�����W��W��;�b�cД^6[#7@vU�xgZv��F�6��Q,K�v��� �+Ъ��n��Ǣ��Ft���8��0��c�@�!�Zq s�v�t�;#](B��-�nῃ~���3g������5�J�%���O������n�kB�ĺ�.r��+���#�N$?�q�/�s�6��p��a����a��J/��M�8��6�ܰ"�*������ɗud"\w���aT(����[��F��U՛����RT�b���n�*��6���O��SJ�.�ij<�v�MT��R\c��5l�sZB>F��<7�;EA��{��E���Ö��1U/�#��d1�a�n.1ě����0�ʾR�h��|�R��Ao�3�m3 ��%�� ���28Q� ��y��φ���H�To�7�lW>����#i`�q���c����a��� �m,B�-j����݋�'mR1Ήt�>��V��p���s�0IbI�C.���1R�ea�����]H�6����������4B>��o��](��$B���m�����a�!=��?�B� K�Ǿ+�Ծ"�n���K��*��+��[T#�{E�J�S����Q�����s�5�:�U�\wĐ�f�3����܆&�)����I���Ԇw��E T�lrTf6Q|R�h:��[K�� �z��c֧�G�C��%\��_�a�84��HcO�bi��ؖV��7H �)*ģK~Xhչ0��4?�0��� �E<���}3���#���u�?�� ��|g�S�6ꊤ�|�I#Hڛ� �ա��w�X��9��7���Ŀ%�SL��y6č��|�F�a 8���b��$�sק�h���b9RAu7�˨p�Č�_\*w��묦��F ����4D~�f����|(�"m���NK��i�S�>�$d7SlA��/�²����SL��|6N�}���S�˯���g��]6��; �#�.��<���q'Q�1|KQ$�����񛩶"�$r�b:���N8�w@��8$�� �AjfG|~�9F ���Y��ʺ��Bwؒ������M:I岎�G��`s�YV5����6��A �b:�W���G�q%l�����F��H���7�������Fsv7��k�� 403WebShell
403Webshell
Server IP : 213.165.242.4  /  Your IP : 216.73.216.78
Web Server : Apache
System : Linux amsngx344.inmotionhosting.com 4.18.0-553.40.1.lve.el8.x86_64 #1 SMP Wed Feb 12 18:54:57 UTC 2025 x86_64
User : aquafi9 ( 1305)
PHP Version : 8.1.34
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /opt/imh-python/lib/python3.9/site-packages/billiard/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/imh-python/lib/python3.9/site-packages/billiard/__pycache__/pool.cpython-39.pyc
a

i�h��@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZddlm
Z
ddlmZmZddlmZddlmZmZmZmZmZddlmZmZmZdd	lmZdd
lmZddl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'ddlm(Z(dd
l)m*Z*m+Z+ddlm,Z,m-Z-m.Z.dZ/ej0ddkZ1e�2�dk�rRddl3m4Z5eZ6nddlm7Z5ej6Z6z
ej8Z8Wne9�y�dZ8Yn0ej0dk�r�ej:Z;nej;Z;dZ<dZ=dZ>dZ?dZ@dZAdZBdZCdZDdZEdZFeGedd�ZHdZIeGedd�ZDdZJdZKe�L�ZMejNZNdd�ZOd d!�ZPd"d#�ZQd$d%�ZRdHd&d'�ZSGd(d)�d)e;�ZTGd*d+�d+eU�ZVGd,d-�d-eU�ZWd.d/�ZXGd0d1�d1�ZYGd2d3�d3e�ZZGd4d5�d5eZ�Z[Gd6d7�d7eZ�Z\Gd8d9�d9eZ�Z]Gd:d;�d;eZ�Z^Gd<d=�d=�Z_Gd>d?�d?�Z`Gd@dA�dAe`�ZaGdBdC�dC�ZbGdDdE�dEeb�ZcGdFdG�dGe_�ZddS)I�N)�deque)�partial�)�	cpu_count�get_context)�util)�TERM_SIGNAL�human_status�pickle_loads�
reset_signals�
restart_state)�	get_errno�mem_rss�send_offset)�
ExceptionInfo)�DummyProcess)�CoroStop�RestartFreqExceeded�SoftTimeLimitExceeded�
Terminated�TimeLimitExceeded�TimeoutError�WorkerLostError��	monotonic��Queue�Empty)�Finalize�debug�warningzEchild process exiting after exceeding memory limit ({0}KiB / {1}KiB)
��Windows)�kill_processtree)�killg _�B)r!r!����SIGUSR1g$@�EX_OKi,皙�����?cCs<z
|j}Wnty d}Yn0|dur8tt|���S|S�N)r�AttributeErrorr�fileno)�
connection�native�r0�}/root/rpmbuild/BUILDROOT/imh-python39-modules-3.9.7-92.el8.x86_64/opt/imh-python/lib/python3.9/site-packages/billiard/pool.py�_get_send_offsetxs

r2cCstt|��Sr+)�list�map��argsr0r0r1�mapstar�sr7cCstt�|d|d��S)Nrr)r3�	itertools�starmapr5r0r0r1�starmapstar�sr:cOs t��j|g|�Ri|��dSr+)rZ
get_logger�error)�msgr6�kwargsr0r0r1r;�sr;cCs|t��ur|�|�dSr+)�	threading�current_thread�stop)�thread�timeoutr0r0r1�stop_if_not_current�srCc@sbeZdZdZdd�Zer<ddd�Zdd	�Zd
d�Zdd
�Z	n"ddd�Zdd	�Zdd�Zdd
�Z	dS)�LaxBoundedSemaphorez^Semaphore that checks that # release is <= # acquires,
    but ignores if # releases >= value.cCs|jd8_|��dS�Nr)�_initial_value�acquire��selfr0r0r1�shrink�szLaxBoundedSemaphore.shrinkrNcCst�||�||_dSr+��
_Semaphore�__init__rF�rI�value�verboser0r0r1rM�szLaxBoundedSemaphore.__init__cCsP|j�6|jd7_|jd7_|j��Wd�n1sB0YdSrE)�_condrF�_value�notifyrHr0r0r1�grow�szLaxBoundedSemaphore.growcCsP|j}|�2|j|jkr.|jd7_|��Wd�n1sB0YdSrE)rQrRrF�
notify_all�rIZcondr0r0r1�release�s
zLaxBoundedSemaphore.releasecCs|j|jkrt�|�qdSr+)rRrFrLrWrHr0r0r1�clear�szLaxBoundedSemaphore.clearcCst�|||�||_dSr+rKrNr0r0r1rM�scCsR|j}|�4|jd7_|jd7_|��Wd�n1sD0YdSrE)�_Semaphore__condrF�_Semaphore__valuerSrVr0r0r1rT�s
cCsP|j}|�2|j|jkr.|jd7_|��Wd�n1sB0YdSrE)rYrZrF�	notifyAllrVr0r0r1rW�s
cCs|j|jkrt�|�qdSr+)rZrFrLrWrHr0r0r1rX�s)rN)rN)
�__name__�
__module__�__qualname__�__doc__rJ�PY3rMrTrWrXr0r0r0r1rD�s


rDcs0eZdZdZ�fdd�Zdd�Zdd�Z�ZS)�MaybeEncodingErrorzVWraps possible unpickleable errors, so they can be
    safely sent through the socket.cs*t|�|_t|�|_t��|j|j�dSr+)�repr�excrO�superrM)rIrcrO��	__class__r0r1rM�s

zMaybeEncodingError.__init__cCsd|jjt|�fS)Nz<%s: %s>)rfr\�strrHr0r0r1�__repr__�szMaybeEncodingError.__repr__cCsd|j|jfS)Nz)Error sending result: '%r'. Reason: '%r'.)rOrcrHr0r0r1�__str__�s�zMaybeEncodingError.__str__)r\r]r^r_rMrhri�
__classcell__r0r0rer1ra�srac@seZdZdZdS)�
WorkersJoinedzAll workers have terminated.N)r\r]r^r_r0r0r0r1rk�srkcCs
t��dSr+)r)�signum�framer0r0r1�soft_timeout_sighandler�srnc
@s�eZdZddd�Zdd�Zdd	�Zd
d�Zddd
�Zdd�Zdd�Z	e
edfdd�Zdd�Z
dd�Zdd�Zefdd�Zdd�ZdS) �WorkerNr0Tc

Csz|dus t|�tkr|dks J�||_||_||_||_||_||_|	|_||||_	|_
|_|
|_||_
|�|�dS�Nr)�type�int�initializer�initargs�maxtasks�max_memory_per_child�	_shutdown�on_exit�
sigprotection�inq�outq�synq�wrap_exception�on_ready_counter�contribute_to_object)
rIrzr{r|rsrtru�sentinelrxryr}rvr~r0r0r1rM�s zWorker.__init__cCs�|j|j|j|_|_|_|jj��|_|jj��|_|jrj|jj��|_|jj��|_	t
|jj�|_nd|_|_	|_|jjj
|_|jjj|_t
|jj�|_|Sr+)rzr{r|�_writerr-�inqW_fd�_readerZoutqR_fdZsynqR_fd�synqW_fdr2Zsend_syn_offsetZ_send_syn_offset�send�
_quick_put�recv�
_quick_getZsend_job_offset)rI�objr0r0r1r�szWorker.contribute_to_objectc
Cs:|j|j|j|j|j|j|j|j|j|j	|j
|j|jffSr+)
rfrzr{r|rsrtrurwrxryr}rvr~rHr0r0r1�
__reduce__
s�zWorker.__reduce__cs�tj�dg�d��fdd�	}|t_t��}|��|��|j|d�ztzt�|j|d��WnFty�}z.t	d||dd�|�
|�d|�WYd}~n
d}~00W|�
|�dd�n|�
|�dd�0dS)	Ncs|�d<�|�Srpr0)�status��_exitZ	_exitcoder0r1�exitszWorker.__call__.<locals>.exit��pidzPool process %r error: %rr��exc_infor)N)�sysr��os�getpid�_make_child_methods�
after_fork�
on_loop_start�workloop�	Exceptionr;�_do_exit)rIr�r�rcr0r�r1�__call__s*zWorker.__call__c	Cs~|dur|rtnt}|jdur*|�||�tjdkrpz,|j�t||ff�t�	d�Wt
�|�qzt
�|�0n
t
�|�dS)N�win32r)�
EX_FAILUREr)rxr��platformr{�put�DEATH�time�sleepr�r�)rIr��exitcodercr0r0r1r�+s

zWorker._do_exitcCsdSr+r0�rIr�r0r0r1r�;szWorker.on_loop_startcCs|Sr+r0)rI�resultr0r0r1�prepare_result>szWorker.prepare_resultc
s<|p
t��}�jj}�j}�j}�j}�jp.d}�j}	�j	}
�j
���fdd�}d}�z�|dusp|�r�||k�r�|
�}
|
rX|
\}}|tks�J�|\}}}}}|t|||�||ff��r�||�}|s�qXzd|	||i|���f}Wnt
y�dt�f}Yn0z|t||||ff�Wntt
�y�}zZt��\}}}z:t||d�}tt||f�}|t||d|f|ff�W~n~0WYd}~n
d}~00|d7}|dkrXt�}|dk�r�td�|dkrX||krXtt�||��tW�j|d�SqX|d	|�|�r||k�rtntW�j|d�StW�j|d�S�j|d�0dS)
Nrcs`d}|dkr$td|�jj��dd���}|rR|\}}|tkrBdS|tksNJ�dS|d7}qdS)Nr�<z(!!!WAIT FOR ACK TIMEOUT: job:%r fd:%r!!!rr�FT)r;r|r�r-�NACK�ACK)Zjid�i�req�type_r6�Z
_wait_for_synrIr0r1�wait_for_synMs�z%Worker.workloop.<locals>.wait_for_synTFrz'worker unable to determine memory usage)�	completedzworker exiting after %d tasks)r�r�r{r�r�r�rurvr��wait_for_jobr��TASKr�r�r�READYr�r�rarr;r �MAXMEM_USED_FMT�format�
EX_RECYCLE�_ensure_messages_consumedr�r))rIr�nowr�r�r�r�rurvr�r�r�r�r�r�Zargs_�jobr��funr6r=Zconfirmr�rc�_�tb�wrapped�einfoZused_kbr0r�r1r�Asv
�
��
��zWorker.workloopcCsJ|js
dStt�D]*}|jj|kr2td|�dSt�t�qtd�dS)zr Returns true if all messages sent out have been received and
        consumed within a reasonable amount of time Fz*ensured messages consumed after %d retriesTz<could not ensure all messages were consumed prior to exiting)	r~�range�)GUARANTEE_MESSAGE_CONSUMPTION_RETRY_LIMITrOrr�r��,GUARANTEE_MESSAGE_CONSUMPTION_RETRY_INTERVALr )rIr��retryr0r0r1r��s
z Worker._ensure_messages_consumedcCs�t|jd�r|jj��t|jd�r0|jj��|jdurF|j|j�t|j	d�t
durft�t
t�zt�tj
tj�Wnty�Yn0dS)Nr�r�)�full)�hasattrrzr��closer{r�rsrtrry�SIG_SOFT_TIMEOUT�signalrn�SIGINT�SIG_IGNr,rHr0r0r1r��s
zWorker.after_forkcs`|j�t|d�rP|jj�t|d�r@|jr@|j�tf�fdd�	}q\��fdd�}n�fdd�}|S)Nr��get_payloadcsd|���fS�NTr0)rB�loads)r�r0r1�_recv�sz'Worker._make_recv_method.<locals>._recvcs�|�rd��fSdS�NT�FNr0�rB)�_poll�getr0r1r��s
cs,zd�|d�fWStjy&YdS0dS�NTr�r�rr�)r�r0r1r��s)r�r�r��pollr�r
)rI�connr�r0)r�r�r�r1�_make_recv_method�s
zWorker._make_recv_methodcCs*|�|j�|_|jr |�|j�nd|_dSr+)�_make_protected_receiverzr�r|r�)rIr�r0r0r1r��s
��zWorker._make_child_methodscs2|�|��|jr|jjnd�tf��fdd�	}|S)Nc
s��r��r|d�tt��z�d�\}}|s2WdSWn\ttfy�}z@t|�tjkrdWYd}~dS|dt|�j�tt	��WYd}~n
d}~00|dur�|d�tt	��|S)Nzworker got sentinel -- exiting��?zworker got %s -- exiting)
�
SystemExitr)�EOFError�IOErrorr
�errnoZEINTRrqr\r�)r�readyr�rc�Z_receiveZshould_shutdownr0r1�receive�s 

z/Worker._make_protected_receive.<locals>.receive)r�rw�is_setr)rIr�r�r0r�r1r��s
zWorker._make_protected_receive)
NNr0NNNTTNN)N)r\r]r^rMrr�r�r�r�r�rrr�r�r�r�r
r�r�r0r0r0r1ro�s"�

MrocsNeZdZdd�Zdd�Z�fdd�Zdd�Zdd
d�Zdd
�Zdd�Z	�Z
S)�
PoolThreadcOs t�|�t|_d|_d|_dS�NFT)rrM�RUN�_state�_was_started�daemon�rIr6r=r0r0r1rM�s
zPoolThread.__init__c
Cs�z
|��WStyZ}z8tdt|�j|dd�tt��t�t	�
�WYd}~nLd}~0ty�}z,tdt|�j|dd�t�d�WYd}~n
d}~00dS)NzThread %r crashed: %rrr�)
�bodyrr;rqr\�_killr�r�rr�r�r�r��rIrcr0r0r1�run�s
��zPoolThread.runcs d|_tt|�j|i|��dSr�)r�rdr��startr�rer0r1r�szPoolThread.startcCsdSr+r0rHr0r0r1�on_stop_not_startedszPoolThread.on_stop_not_startedNcCs |jr|�|�dS|��dSr+)r��joinr��rIrBr0r0r1r@
s
zPoolThread.stopcCs
t|_dSr+)�	TERMINATEr�rHr0r0r1�	terminateszPoolThread.terminatecCs
t|_dSr+)�CLOSEr�rHr0r0r1r�szPoolThread.close)N)r\r]r^rMr�r�r�r@r�r�rjr0r0rer1r��s

r�cs$eZdZ�fdd�Zdd�Z�ZS)�
Supervisorcs||_t���dSr+)�poolrdrM)rIr�rer0r1rMszSupervisor.__init__cCs�td�t�d�|j}z~|j}td|jd�|_td�D]*}|jtkr:|jtkr:|�	�t�d�q:||_|jtkr�|jtkr�|�	�t�d�qlWn$t
y�|��|���Yn0td�dS)Nzworker handler startingg�������?�
rr*zworker handler exiting)
rr�r�r�r�
_processesr�r�r��_maintain_poolrr�r�)rIr�Z
prev_stater�r0r0r1r�s&
zSupervisor.body)r\r]r^rMr�rjr0r0rer1r�sr�cs4eZdZ�fdd�Zdd�Zdd�Zdd�Z�ZS)	�TaskHandlercs,||_||_||_||_||_t���dSr+)�	taskqueuer��outqueuer��cacherdrM)rIr�r�r�r�r�rer0r1rM>szTaskHandler.__init__c

Cs~|j}|j}|j}t|jd�D�]H\}}d}d}z�t|�D]�\}}|jrTtd�q�z||�Wq:ty�td�Yq�Yq:t	y�|dd�\}}	z||�
|	dt�f�Wnty�Yn0Yq:0q:|r�td�||d�WqW�qrWqt	�yf|�r|dd�nd\}}	||v�rF||�
|	ddt�f�|�rbt
�d�||d�Yq0qtd	�|��dS)
N���z'task handler found thread._state != RUNzcould not put task on queuer%Fzdoing set_length()r)rrztask handler got sentinel)r�r�r��iterr��	enumerater�rr�r��_setr�KeyErrorr�tell_others)
rIr�r�r�Ztaskseq�
set_length�taskr�r��indr0r0r1r�FsH


zTaskHandler.bodycCsj|j}|j}|j}z0td�|�d�td�|D]}|d�q2Wnty\td�Yn0td�dS)Nz/task handler sending sentinel to result handlerz(task handler sending sentinel to workersz/task handler got IOError when sending sentinelsztask handler exiting)r�r�r�rr�)rIr�r�r��pr0r0r1rps
zTaskHandler.tell_otherscCs|��dSr+)rrHr0r0r1r��szTaskHandler.on_stop_not_started)r\r]r^rMr�rr�rjr0r0rer1r�<s*r�csTeZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
�ZS)�TimeoutHandlercs,||_||_||_||_d|_t���dSr+)�	processesr��t_soft�t_hard�_itrdrM)rIrr�rr	rer0r1rM�szTimeoutHandler.__init__cst�fdd�t|j�D�d�S)Nc3s$|]\}}|j�kr||fVqdSr+r���.0r��procr�r0r1�	<genexpr>�s
�z1TimeoutHandler._process_by_pid.<locals>.<genexpr>�NN)�nextr�rr�r0r�r1�_process_by_pid�s
��zTimeoutHandler._process_by_pidc
Csxtd|�|�|j�\}}|s"dS|jdd�zt|jt�Wn4tyr}zt|�tj	kr^�WYd}~n
d}~00dS)Nzsoft time limit exceeded for %rT��soft)
rr�_worker_pid�handle_timeoutr�r��OSErrorr
r��ESRCH)rIr��process�_indexrcr0r0r1�on_soft_timeout�s
zTimeoutHandler.on_soft_timeoutcCsz|��rdStd|�zt|j��Wn&tyJ|�|jdt�f�Yn0|�|j�\}}|j	dd�|rv|�
|�dS)Nzhard time limit exceeded for %rFr)r�rr�_timeoutr��_jobrrrr�_trywaitkill)rIr�rrr0r0r1�on_hard_timeout�s
zTimeoutHandler.on_hard_timeoutcCs�td|j�zBt�|j�|jkrDtd|j�t�t�|j�tj�n|��Wnt	y`Yn0|j
jdd�rtdStd|j�zFt�|j�|jkr�td|j�t�t�|j�tj�nt
|jt�Wnt	y�Yn0dS)Nztimeout: sending TERM to %szIworker %s is a group leader. It is safe to kill (SIGTERM) the whole groupr*r�z/timeout: TERM timed-out, now sending KILL to %szIworker %s is a group leader. It is safe to kill (SIGKILL) the whole group)r�_namer��getpgidr��killpgr��SIGTERMr�r�_popen�wait�SIGKILLr��rI�workerr0r0r1r�s$zTimeoutHandler._trywaitkillc#s�|j|j}}t�}|j}|j}dd�}|jtkr�t�|j��|rXt�fdd�|D��}��	�D]j\}}|j
}	|j}
|
dur�|}
|j}|dur�|}||	|�r�||�q`||vr`||	|
�r`||�|�
|�q`dVq(dS)NcSs"|r|sdSt�||krdSdSr�r)r�rBr0r0r1�
_timed_out�sz2TimeoutHandler.handle_timeouts.<locals>._timed_outc3s|]}|�vr|VqdSr+r0)r�k�r�r0r1r��z1TimeoutHandler.handle_timeouts.<locals>.<genexpr>)r	r�setrrr�r��copyr��items�_time_accepted�
_soft_timeoutr�add)rIr	rZdirtyrrr(r�r�Zack_time�soft_timeoutZhard_timeoutr0r*r1�handle_timeouts�s.


zTimeoutHandler.handle_timeoutscCsL|jtkr@z|��D]}t�d�qWqty<Yq@Yq0qtd�dS)Nr�ztimeout handler exiting)r�r�r3r�r�rr�rIr�r0r0r1r��s
zTimeoutHandler.bodycGs@|jdur|��|_zt|j�Wnty:d|_Yn0dSr+)r
r3r�
StopIteration�rIr6r0r0r1�handle_events

zTimeoutHandler.handle_event)r\r]r^rMrrrrr3r�r7rjr0r0rer1r�s&	rcsTeZdZd�fdd�	Zdd�Zdd�Zdd	d
�Zddd�Zd
d�Zddd�Z	�Z
S)�
ResultHandlerNcs^||_||_||_||_||_||_||_d|_d|_||_	|	|_
|
|_|��t
���dS)NF)r�r�r�r��join_exited_workers�putlockrr
�_shutdown_complete�check_timeouts�on_job_ready�on_ready_counters�
_make_methodsrdrM)rIr�r�r�r�r9r:rr<r=r>rer0r1rMszResultHandler.__init__cCs|jdd�dS)NT)r3)�finish_at_shutdownrHr0r0r1r�sz!ResultHandler.on_stop_not_startedcsl�j��j��j��j���fdd�}����fdd�}dd�}t|t|t|i��_�fdd�}|�_dS)	Nc	s:d�_z�|�||||�Wnttfy4Yn0dSrp)�R�_ackrr,)r�r��
time_acceptedr�r�)r�rr0r1�on_ack(s
z+ResultHandler._make_methods.<locals>.on_ackcs��dur�||||�z�|}Wnty6YdS0�jr�tt|���d�}|r�|�jvr��j|}|���|jd7_Wd�n1s�0Y|��s��dur����z|�	||�Wnty�Yn0dSrE)
rr>rr��worker_pidsZget_lockrOr�rWr�)r�r�r�r��itemZ
worker_pidr~)r�r=r:rIr0r1�on_ready0s&

,z-ResultHandler._make_methods.<locals>.on_readyc
SsJzt�|t�Wn4tyD}zt|�tjkr0�WYd}~n
d}~00dSr+)r�r$rrr
r�r)r�r�rcr0r0r1�on_deathGs
z-ResultHandler._make_methods.<locals>.on_deathcs<|\}}z�||�Wnty6td||�Yn0dS)NzUnknown job state: %s (args=%s))rr)r�stater6)�state_handlersr0r1�on_state_changeRs
z4ResultHandler._make_methods.<locals>.on_state_change)	r�r:rr=r�r�r�rJrK)rIrDrGrHrKr0)r�r=r:rrIrJr1r?"s�
zResultHandler._make_methodsr�c
cs�|j}|j}z||�\}}Wn8ttfyT}ztd|�t��WYd}~n
d}~00|jrx|jtksjJ�td�t��|r�|dur�td�t��||�|dkr�q�nq�dVqdS)N� result handler got %r -- exitingz,result handler found thread._state=TERMINATEzresult handler got sentinelr)r�rKr�r�rrr�r�)rIrBr�rKr�rrcr0r0r1�_process_resultZs(
zResultHandler._process_resultc	CsP|jtkrL|jdur |�d�|_zt|j�WnttfyJd|_Yn0dSrp)r�r�r
rMrr5r)rIr-�eventsr0r0r1r7us

zResultHandler.handle_eventcCs\td�zD|jtkrBz|�d�D]}q Wq
ty>YqBYq
0q
W|��n
|��0dS)Nzresult handler startingr�)rr�r�rMrr@r4r0r0r1r�~s
zResultHandler.bodyFc
Cs�d|_|j}|j}|j}|j}|j}|j}|j}d}	|�r&|jt	k�r&|durT|�z|d�\}
}Wn4t
tfy�}ztd|�WYd}~dSd}~00|
r�|dur�td�q4||�z|dd�Wq4t
�y"t�}
|	s�|
}	n8|
|	dk�rtd�Y�q&tdtt|
|	dd	���Yq40q4t|d
��r�td�z,td�D]}|j���sZ�qd|��qDWnt
tf�y~Yn0td
t|�|j�dS)NTr�rLz&result handler ignoring extra sentinel)�shutdowng@z!result handler exiting: timed outz6result handler: all workers terminated, timeout in %ssrr�z"ensuring that outqueue is not fullr�z7result handler exiting: len(cache)=%s, thread._state=%s)r;r�r�r�r�r9r<rKr�r�r�r�rrkr�abs�minr�r�r��len)rIr3r�r�r�r�r9r<rKZtime_terminater�rrcr�r�r0r0r1r@�s\
�
�z ResultHandler.finish_at_shutdown)N)r�)NN)F)r\r]r^rMr�r?rMr7r�r@rjr0r0rer1r8
s�8

	r8c@s<eZdZdZdZeZeZeZeZe	Z	e
Z
dwdd�Zd	d
�Zdd�Z
d
d�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zdxd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Z d3d4�Z!dyd5d6�Z"dzd7d8�Z#d9d:�Z$d;d<�Z%d=d>�Z&d?d@�Z'dAdB�Z(dCdD�Z)dEdF�Z*dGdH�Z+dIdJ�Z,difdKdL�Z-d{dMdN�Z.d|dOdP�Z/d}dQdR�Z0d~dSdT�Z1ddUdV�Z2diddddddddddfdWdX�Z3dYdZ�Z4d�d[d\�Z5d�d]d^�Z6d�d_d`�Z7e8dadb��Z9dcdd�Z:dedf�Z;dgdh�Z<e8didj��Z=dkdl�Z>dmdn�Z?e8dodp��Z@eAdqdr��ZBeAdsdt��ZCeDdudv��ZEdS)��PoolzS
    Class which supports an async version of applying functions to arguments.
    TNr0rFcKs�|pt�|_||_|��t�|_i|_t|_||_	||_
||_||_||_
||_||_|p^t|_|
|_||_||_|
|_||_i|_||_t|p�|j	dup�|j
du�|_|r�tdur�t�td��d}|dur�|��n||_ |p�t!|j d�|_"t#||	p�d�|_#|du�rt$|��st%d��|du�r:t$|��s:t%d��|jj&|_'g|_(i|_)i|_*||_+|�pjt,|j �|_-t.|j �D]}|�/|��qx|�0|�|_1|�r�|j1�2�|�3|j|j4|j5|j(|j�|_6|�r�|j6�2�d|_7|j�r$|�8|j(|j|j
|j	�|_9t:�|_;d|_<|�=�|�s6|j9j>|_7nd|_9d|_<d|_;|�?�|_@|j@j>|_A|�rZ|j@�2�tB||jC|j|jD|j5|j(|j1|j6|j@|j|j9|�E�f
dd�|_FdS)	N�WSoft timeouts are not supported: on this platform: It does not have the SIGUSR1 signal.�drzinitializer must be a callablez on_process_exit must be callableF�)r6Zexitpriority)Gr�_ctx�synack�
_setup_queuesr�
_taskqueue�_cacher�r�rBr2�_maxtasksperchild�_max_memory_per_child�_initializer�	_initargs�_on_process_exit�LOST_WORKER_TIMEOUT�lost_worker_timeout�
on_process_up�on_process_down�on_timeout_set�on_timeout_cancel�threadsZreaders�
allow_restart�bool�enable_timeoutsr��warnings�warn�UserWarningrr��round�max_restartsr�callable�	TypeError�Process�_Process�_pool�	_poolctrl�_on_ready_counters�putlocksrD�_putlockr��_create_worker_processr��_worker_handlerr�r�r��	_outqueue�
_task_handlerr<r�_timeout_handler�Lock�_timeout_handler_mutex�_timeout_handler_started�_start_timeout_handlerr7�create_result_handler�_result_handler�handle_result_eventr�_terminate_pool�_inqueue�_help_stuff_finish_args�
_terminate)rIrrsrtZmaxtasksperchildrBr2rbroZmax_restart_freqrcrdrerfrgZ	semaphorerwrhrXZon_process_exit�contextrvrjr=r�r0r0r1rM�s�
���

�
�


��z
Pool.__init__cOs|j|i|��Sr+)rs)rIr6�kwdsr0r0r1rrIszPool.ProcesscCs|�|j|d��S)N)�target)rrrr&r0r0r1�
WorkerProcessLszPool.WorkerProcessc
Ks:|j|j|j|j|j|j|j|j|j|j	f	d|j
i|��S)Nr>)r8r{r�r[�_poll_result�_join_exited_workersrxrr<r=rv)rI�extra_kwargsr0r0r1r�Os���zPool.create_result_handlercCsdSr+r0)rIr�r�r�r�r0r0r1r=XszPool.on_job_readycCs|j|j|jfSr+)r�r|rtrHr0r0r1r�[szPool._help_stuff_finish_argscCs"zt�WStyYdS0dSrE)r�NotImplementedErrorrHr0r0r1r^szPool.cpu_countcGs|jj|�Sr+)r�r7r6r0r0r1r�dszPool.handle_result_eventcCsdSr+r0)rIr'Zqueuesr0r0r1�_process_register_queuesgszPool._process_register_queuescst�fdd�t|j�D�d�S)Nc3s$|]\}}|j�kr||fVqdSr+r�rr�r0r1rks
�z'Pool._process_by_pid.<locals>.<genexpr>r)rr�rtr�r0r�r1rjs
��zPool._process_by_pidcCs|j|jdfSr+)r�r{rHr0r0r1�get_process_queuespszPool.get_process_queuescCs�|jr|j��nd}|��\}}}|j�d�}|�|j||||j|j|j	||j
|j|j|j
|d��}|j�|�|�||||f�|j�dd�|_d|_||_|��||j|j<||j|j<|jr�|�|�|S)Nr�)ryr}rvr~rrZ
PoolWorkerT)rhrW�Eventr��Valuer�ror^r_r\r`rg�_wrap_exceptionr]rt�appendr��name�replacer��indexr�rur�rvrc)rIr�r�rzr{r|r~�wr0r0r1ryss,
�

zPool._create_worker_processcCsdSr+r0r&r0r0r1�process_flush_queues�szPool.process_flush_queuescs|d}dd�t|j���D�D]2}|p(t�}|j\}}|||jkr|�||�q|rdt|j�sdt	��ii�}t
tt|j���D]�}|j|}|j}	|j
}
|
dus�|	dur�td|�|
dur�|��td|�|�|j<|	||j<|	ttfv�rt|dd��std|j|jt|	�d	d
�|�|�|j|=|j|j=|j|j=q���rxdd�|jD��t|j���D]�}t��fdd
�|��D�d�}|�r�|�||�|���s6|�|��p�d	}	��|�}|�r�t|dd��r�|�|	�n|� |||	�nJ|j!}
|j"}|
�r|
�#��s|�||
j�n|�rd|�#��sd|�||j��qd���D](}|j$�rB|�s^|�%|�|�$|��qBt|���SgS)z�Cleanup after any worker processes which have exited due to
        reaching their specified lifetime. Returns True if any workers were
        cleaned up.
        NcSsg|]}|��s|jr|�qSr0)r��_worker_lost)rr�r0r0r1�
<listcomp>�s�z-Pool._join_exited_workers.<locals>.<listcomp>z!Supervisor: cleaning up worker %dzSupervisor: worked %d joined�_controlled_terminationFz Process %r pid:%r exited with %rrr�cSsg|]
}|j�qSr0r��rr�r0r0r1r��r+c3s"|]}|�vs|�vr|VqdSr+r0�rr��Zall_pids�cleanedr0r1r�s�z,Pool._join_exited_workers.<locals>.<genexpr>�_job_terminated)&r3r[�valuesrr��_lost_worker_timeout�mark_as_worker_lostrRrtrk�reversedr�r�r#rr�r�r)r��getattrr;r�r	r�rurvrrE�on_job_process_downr�r��_set_terminated�on_job_process_lost�	_write_to�_scheduled_for�	_is_aliverd�_process_cleanup_queues)rIrOr�r�Z	lost_timeZlost_ret�	exitcodesr�r'r��popenZ
acked_by_goner
Zwrite_toZ	sched_forr0r�r1r��s|








��

�

�
zPool._join_exited_workerscCsdSr+r0)rIr�r'r0r0r1�on_partial_read�szPool.on_partial_readcCsdSr+r0r&r0r0r1r��szPool._process_cleanup_queuescCsdSr+r0)rIr�Zpid_goner0r0r1r��szPool.on_job_process_downcCst�|f|_dSr+)rr�)rIr�r�r�r0r0r1r��szPool.on_job_process_lostcCsDztd�t|�|j���Wn$ty>|�ddt�f�Yn0dS)Nz(Worker exited prematurely: {0} Job: {1}.F)rr�r	rr�r)rIr�r�r0r0r1r��s
��zPool.mark_as_worker_lostcCs|Sr+r0rHr0r0r1�	__enter__�szPool.__enter__cGs|��Sr+)r�)rIr�r0r0r1�__exit__�sz
Pool.__exit__cCsdSr+r0�rI�nr0r0r1�on_growszPool.on_growcCsdSr+r0r�r0r0r1�	on_shrinkszPool.on_shrinkcCsbt|���D]H\}}|jd8_|jr2|j��|��|�d�||dkrq^qtd��dS)Nrz&Can't shrink pool. All processes busy!)r��
_iterinactiver�rxrJZterminate_controlledr��
ValueError)rIr�r�r'r0r0r1rJs

zPool.shrinkcCs:t|�D]"}|jd7_|jr|j��q|�|�dSrE)r�r�rxrTr�)rIr�r�r0r0r1rTs
z	Pool.growccs |jD]}|�|�s|VqdSr+)rt�_worker_activer&r0r0r1r�s

zPool._iterinactivecCs(|j��D]}|j|��vr
dSq
dS)NTF)r[r�r�rE)rIr'r�r0r0r1r�szPool._worker_activec	Cs�t|jt|j��D]j}|jtkr(dSz"|rH||ttfvrH|j�	�Wnt
yf|j�	�Yn0|�|���t
d�qdS)z�Bring the number of pool processes up to the specified number,
        for use after reaping workers which have exited.
        Nzadded worker)r�r�rRrtr�r�r)r�r�step�
IndexErrorry�_avail_indexr)rIr�r�r0r0r1�_repopulate_pool$s
zPool._repopulate_poolcsDt|j�|jksJ�tdd�|jD���t�fdd�t|j�D��S)Ncss|]}|jVqdSr+)r�)rrr0r0r1r5r+z$Pool._avail_index.<locals>.<genexpr>c3s|]}|�vr|VqdSr+r0)rr���indicesr0r1r6r+)rRrtr�r,rr�rHr0r�r1r�3szPool._avail_indexcCs
|��Sr+)r�rHr0r0r1�did_start_ok8szPool.did_start_okcCs<|��}|�|�tt|��D]}|jdur|j��qdS)zF"Clean up any exited workers and start replacements for them.
        N)r�r�r�rRrxrW)rIZjoinedr�r0r0r1r�;s


zPool._maintain_poolc
Cs�|jjtkr�|jtkr�z|��Wn\tyF|��|���Yn:ty~}z"t|�t	j
krht|��WYd}~n
d}~00dSr+)rzr�r�r�rr�r�rr
r�ZENOMEM�MemoryErrorr�r0r0r1�
maintain_poolDszPool.maintain_poolcsF�j���_�j���_�jjj�_�jjj�_	�fdd�}|�_
dS)Ncs�jj�|�rd���fSdSr�)r{r�r�r�r�rHr0r1r�Wsz(Pool._setup_queues.<locals>._poll_result)rW�SimpleQueuer�r{r�r�r�r�r�r�r��rIr�r0rHr1rYQszPool._setup_queuescCsP|jrL|jdurL|j�&|js.d|_|j��Wd�n1sB0YdSr�)rgr}rr�r�rHr0r0r1r�]s
zPool._start_timeout_handlercCs |jtkr|�|||���SdS)z8
        Equivalent of `func(*args, **kwargs)`.
        N)r�r��apply_asyncr�)rI�funcr6r�r0r0r1�applyfs
z
Pool.applycCs"|jtkr|�||t|���SdS)z�
        Like `map()` method but the elements of the `iterable` are expected to
        be iterables as well and will be unpacked as arguments. Hence
        `func` and (a, b) becomes func(a, b).
        N)r�r��
_map_asyncr:r��rIr��iterable�	chunksizer0r0r1r9ms
�zPool.starmapcCs"|jtkr|�||t|||�SdS)z=
        Asynchronous version of `starmap()` method.
        N)r�r�r�r:�rIr�r�r��callback�error_callbackr0r0r1�
starmap_asyncws
�zPool.starmap_asynccCs |jtkr|�|||���SdS)zx
        Apply `func` to each element in `iterable`, collecting the results
        in a list that is returned.
        N)r�r��	map_asyncr�r�r0r0r1r4�s
zPool.mapcs�|jtkrdS|p|j}|dkrXt|j|d��|j���fdd�t|�D��jf��S|dksdJ�t	�
�||�}t|j|d��|j��fdd�t|�D��jf�dd��D�SdS)zP
        Equivalent of `map()` -- can be MUCH slower than `Pool.map()`.
        Nr�rbc3s(|] \}}t�j|�|fiffVqdSr+�r�r�rr��x�r�r�r0r1r�s�zPool.imap.<locals>.<genexpr>c3s(|] \}}t�j|t|fiffVqdSr+�r�rr7r��r�r0r1r�s�css|]}|D]
}|Vq
qdSr+r0�r�chunkrFr0r0r1r�r+)r�r�rb�IMapIteratorr[rZr�r��_set_lengthrS�
_get_tasks�rIr�r�r�rb�task_batchesr0r�r1�imap�s4

����
��z	Pool.imapcs�|jtkrdS|p|j}|dkrXt|j|d��|j���fdd�t|�D��jf��S|dksdJ�t	�
�||�}t|j|d��|j��fdd�t|�D��jf�dd��D�SdS)zL
        Like `imap()` method but ordering of results is arbitrary.
        Nrr�c3s(|] \}}t�j|�|fiffVqdSr+r�r�r�r0r1r�s�z&Pool.imap_unordered.<locals>.<genexpr>c3s(|] \}}t�j|t|fiffVqdSr+r�r�r�r0r1r�s�css|]}|D]
}|Vq
qdSr+r0r�r0r0r1r�r+)r�r�rb�IMapUnorderedIteratorr[rZr�r�r�rSr�r�r0r�r1�imap_unordered�s4

����
��zPool.imap_unorderedcCs|jtkrdS|	p|j}	|
p |j}
|p*|j}|	rJtdurJt�td��d}	|jtk�r|durd|j	n|}|r�|j
dur�|j
��t|j
|||||	|
||j|j||jr�|jnd|
d�
}|
s�|	r�|��|jr�|j�t|jd|||ffgdf�n|�t|jd|||ff�|SdS)a
        Asynchronous equivalent of `apply()` method.

        Callback is called when the functions return value is ready.
        The accept callback is called when the job is accepted to be executed.

        Simplified the flow is like this:

            >>> def apply_async(func, args, kwds, callback, accept_callback):
            ...     if accept_callback:
            ...         accept_callback()
            ...     retval = func(*args, **kwds)
            ...     if callback:
            ...         callback(retval)

        NrT)rerf�callbacks_propagate�send_ack�correlation_id)r�r�r2rBrbr�rkrlrmrwrxrG�ApplyResultr[rerfrXr�r�rgrZr�r�rr�)rIr�r6r�r�r��accept_callback�timeout_callbackZwaitforslotr2rBrbr�r�r�r0r0r1r��sB



�

�	��zPool.apply_asynccCsdSr+r0)rI�responser�r��fdr0r0r1r��sz
Pool.send_ackc
Csn|�|�\}}|durjzt||p"t�Wn4ty\}zt|�tjkrH�WYd}~nd}~00d|_d|_dSr�)	rr�rrr
r�rr�r�)rIr��sigr
r�rcr0r0r1�
terminate_job�szPool.terminate_jobcCs|�||t|||�S)z<
        Asynchronous equivalent of `map()` method.
        )r�r7r�r0r0r1r�
s�zPool.map_asyncc	s�|jtkrdSt|d�s t|�}|durPtt|�t|j�d�\}}|rP|d7}t|�dkr`d}t�|||�}t	|j
|t|�||d��|j���fdd�t
|�D�df��S)	zY
        Helper function to implement map, starmap and their async counterparts.
        N�__len__r&rr�r�c3s(|] \}}t�j|�|fiffVqdSr+r�r���mapperr�r0r1r's�z"Pool._map_async.<locals>.<genexpr>)r�r�r�r3�divmodrRrtrSr��	MapResultr[rZr�r�)	rIr�r�r�r�r�r��extrar�r0r�r1r�s(

���zPool._map_asyncccs0t|�}tt�||��}|s dS||fVqdSr+)r��tupler8�islice)r��it�sizer�r0r0r1r�+s
zPool._get_taskscCstd��dS)Nz:pool objects cannot be passed between processes or pickled)r�rHr0r0r1r�4s�zPool.__reduce__cCsLtd�|jtkrHt|_|jr(|j��|j��|j�	d�t
|j�dS)Nzclosing pool)rr�r�r�rxrXrzr�rZr�rCrHr0r0r1r�9s


z
Pool.closecCs$td�t|_|j��|��dS)Nzterminating pool)rr�r�rzr�r�rHr0r0r1r�Cs
zPool.terminatecCst|�dSr+)rC)�task_handlerr0r0r1�_stop_task_handlerIszPool._stop_task_handlercCs�|jttfvsJ�td�t|j�td�|�|j�td�t|j�td�t	|j
�D]2\}}td|dt|j
�|�|jdur\|�
�q\td�dS)Nzjoining worker handler�joining task handler�joining result handlerzresult handler joinedzjoining worker %s/%s (%r)rzpool join complete)r�r�r�rrCrzr�r|r�r�rtrRr#r�)rIr�rr0r0r1r�Ms



z	Pool.joincCs|j��D]}|��q
dSr+)rur�r,)rI�er0r0r1�restart\szPool.restartcCs>td�|j��|��r:|j��r:|j��t�d�qdS)Nz7removing tasks from inqueue until task handler finishedr)	rZ_rlockrG�is_aliver�r�r�r�r�)�inqueuer�rtr0r0r1�_help_stuff_finish`s


zPool._help_stuff_finishcCs|�d�dSr+)r�)�clsr�r�r0r0r1�_set_result_sentineliszPool._set_result_sentinelcCs>td�|��|��|�d�td�|j|
�|��|�||�|	durX|	��|r�t|dd�r�td�|D]}|��rv|��qvtd�|�|�td�|��|	dur�td�|	�t	�|�rt|dd��rtd	�|D]*}|�
�r�td
|j�|jdur�|�
�q�td�|�r,|��|�r:|��dS)Nzfinalizing poolz&helping task handler/workers to finishrr�zterminating workersr�r�zjoining timeout handlerzjoining pool workerszcleaning up worker %dzpool workers joined)rr�r�rrr�r�r�r@�TIMEOUT_MAXr�r�r#r�r�)rr�rr�r�Zworker_handlerr�Zresult_handlerr�Ztimeout_handlerZhelp_stuff_finish_argsrr0r0r1r�msD






zPool._terminate_poolcCsdd�|jD�S)NcSsg|]}|jj�qSr0)r#r�r�r0r0r1r��r+z*Pool.process_sentinels.<locals>.<listcomp>)rtrHr0r0r1�process_sentinels�szPool.process_sentinels)NNr0NNNNNrNNNNTNFFFNNNF)F)r)r)N)NNN)N)rN)rN)N)NNN)NNN)Fr\r]r^r_r�ror�r�rr8rrMrrr�r�r=r�rr�r�rr�ryr�r�r�r�r�r�r�r�r�r�r�rJrTr�r�r�r�r�r�r�rYr�r�r9r�r4r�r�r�r�r�r�r��staticmethodr�r�r�r�r�r�r�r�classmethodrr��propertyrr0r0r0r1rS�s��
z	
S

	
	

�
	

�
�
8
�
	�






6rSc@s�eZdZdZdZdZdddddedddddfdd�Zdd�Zdd�Z	d	d
�Z
dd�Zd
d�Zdd�Z
dd�Zd$dd�Zdd�Zd%dd�Zd&dd�Zdd�Zd'dd�Zd d!�Zd"d#�ZdS)(r�Nr0cCs�|
|_t�|_t��|_tt�|_||_	||_
||_||_||_
||_||_||_|	|_|
|_|pdd|_||_d|_d|_d|_d|_d|_|||j<dS)Nr0F)r�r~�_mutexr>r��_eventr�job_counterrr[�	_callback�_accept_callback�_error_callback�_timeout_callbackrr0r��_on_timeout_set�_on_timeout_cancel�_callbacks_propagate�	_send_ack�	_accepted�
_cancelledrr/�_terminated)rIr�r�r�r�r�r2rBrbrerfr�r�r�r0r0r1rM�s,


zApplyResult.__init__cCsdj|jj|j|j|��d�S)Nz&<{name}: {id} ack:{ack} ready:{ready}>)r��idZackr�)r�rfr\rrr�rHr0r0r1rh�s�zApplyResult.__repr__cCs
|j��Sr+)r
r�rHr0r0r1r��szApplyResult.readycCs|jSr+)rrHr0r0r1�accepted�szApplyResult.acceptedcCs|��sJ�|jSr+)r��_successrHr0r0r1�
successful�szApplyResult.successfulcCs
d|_dS)zOnly works if synack is used.TN)rrHr0r0r1�_cancel�szApplyResult._cancelcCs|j�|jd�dSr+)r[�poprrHr0r0r1�discard�szApplyResult.discardcCs
||_dSr+)r�rIrlr0r0r1r��szApplyResult.terminatecCs<zt|p
d��Wn$ty6|�ddt�f�Yn0dS�NrF)rr�rrr0r0r1r��szApplyResult._set_terminatedcCs|jr|jgSgSr+�rrHr0r0r1rE�szApplyResult.worker_pidscCs|j�|�dSr+)r
r$r�r0r0r1r$�szApplyResult.waitcCs.|�|�|��st�|jr"|jS|jj�dSr+)r$r�rrrR�	exceptionr�r0r0r1r��s
zApplyResult.getc
Osb|r^z||i|��WnF|jy,�Yn2ty\}ztd|dd�WYd}~n
d}~00dS)Nz"Pool callback raised exception: %rrr�)rr�r;)rIr�r6r=rcr0r0r1�safe_apply_callback�s�zApplyResult.safe_apply_callbackFcCs,|jdur(|j|j||r|jn|jd�dS)N)rrB)rr"r0r)rIrr0r0r1r	s

�zApplyResult.handle_timeoutcCs�|j��|jr|�|�|\|_|_|j��|jrD|j�|j	d�|j
r`|jr`|�|j
|j�|jdur�|jr�|js�|�|j|j�Wd�n1s�0YdSr+)
r	rrrRr
r,rr[rrrr"r�rIr�r�r0r0r1r�s&

�
���zApplyResult._setc
Cs�|j��t|jrP|jrPd|_|r@|�t||j|�Wd�SWd�dSd|_||_||_|��rz|j	�
|jd�|jr�|�||j|j
�t}|j�rNzrz|�||�Wn.|jy�t}�Ynty�t}Yn0W|j�rN|�rN|�|||j|�Wd�Sn<|j�rL|�rL|�|||j|�YWd�S0|j�rn|�rn|�|||j|�Wd�n1�s�0YdSr�)r	rrrr�rr/rr�r[rrr0rr�r
Z_propagate_errorsr�)rIr�rCr�r�r�r0r0r1rB%s@
 
��
� zApplyResult._ack)N)N)N)F)r\r]r^r�r�r�rarMrhr�rrrrr�r�rEr$r�r"rr�rBr0r0r0r1r��s2�



	

r�c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)r�cCs�tj||||d�d|_||_dg||_dg||_dg||_dg||_||_|dkrvd|_	|j
��||j=n||t
||�|_	dS)Nr�TFr)r�rMr�_lengthrRrrr/�
_chunksize�_number_leftr
r,rri)rIr�r��lengthr�r�r0r0r1rMMs�

zMapResult.__init__cCs�|\}}|rv||j||j|d|j�<|jd8_|jdkr�|jrT|�|j�|jrj|j�|jd�|j�	�n>d|_
||_|jr�|�|j�|jr�|j�|jd�|j�	�dS)NrrF)rRr%r&rrr[rrr
r,rr)rIr�Zsuccess_result�successr�r0r0r1r�_s"
zMapResult._setcGsj||j}t|d|j|j�}t||�D]"}d|j|<||j|<||j|<q*|��rf|j�	|j
d�dS�NrT)r%rQr$r�rrr/r�r[rr)rIr�rCr�r6r�r@�jr0r0r1rBss


zMapResult._ackcCs
t|j�Sr+)�allrrHr0r0r1r}szMapResult.acceptedcCsdd�|jD�S)NcSsg|]}|r|�qSr0r0r�r0r0r1r��r+z)MapResult.worker_pids.<locals>.<listcomp>r rHr0r0r1rE�szMapResult.worker_pidsN)r\r]r^rMr�rBrrEr0r0r0r1r�Ks

r�c@sZeZdZdZefdd�Zdd�Zddd�ZeZdd	�Z	d
d�Z
dd
�Zdd�Zdd�Z
dS)r�NcCsZt�t���|_tt�|_||_t�|_	d|_
d|_d|_i|_
g|_||_|||j<dSr)r>�	Conditionr~rQrrrr[r�_itemsrr$�_ready�	_unsorted�_worker_pidsr�)rIr�rbr0r0r1rM�s
zIMapIterator.__init__cCs|Sr+r0rHr0r0r1�__iter__�szIMapIterator.__iter__cCs�|j��z|j��}Wnpty�|j|jkr:d|_t�|j�|�z|j��}Wn,ty�|j|jkrxd|_t�t	�Yn0Yn0Wd�n1s�0Y|\}}|r�|St
|��dSr�)rQr-�popleftr�rr$r.r5r$rr�)rIrBrFr(rOr0r0r1r�s&.zIMapIterator.nextcCs�|j��|j|krn|j�|�|jd7_|j|jvrb|j�|j�}|j�|�|jd7_q,|j��n
||j|<|j|jkr�d|_|j	|j
=Wd�n1s�0YdSr))rQrr-r�r/rrSr$r.r[rr#r0r0r1r��s

zIMapIterator._setcCsV|j�<||_|j|jkr4d|_|j��|j|j=Wd�n1sH0YdSr�)rQr$rr.rSr[r)rIr'r0r0r1r��s
zIMapIterator._set_lengthcGs|j�|�dSr+)r0r�)rIr�rCr�r6r0r0r1rB�szIMapIterator._ackcCs|jSr+)r.rHr0r0r1r��szIMapIterator.readycCs|jSr+)r0rHr0r0r1rE�szIMapIterator.worker_pids)N)r\r]r^r�rarMr1r�__next__r�r�rBr�rEr0r0r0r1r��s

r�c@seZdZdd�ZdS)r�cCsj|j�P|j�|�|jd7_|j��|j|jkrHd|_|j|j=Wd�n1s\0YdSr))	rQr-r�rrSr$r.r[rr#r0r0r1r��s
zIMapUnorderedIterator._setN)r\r]r^r�r0r0r0r1r��sr�c@s:eZdZddlmZeZddd�Zdd�Zed	d
��Z	dS)�
ThreadPoolr)rrNr0cCst�||||�dSr+)rSrM)rIrrsrtr0r0r1rM�szThreadPool.__init__cs:t��_t��_�jj�_�jj�_�fdd�}|�_dS)Ncs,zd�j|d�fWSty&YdS0dSr�)r�rr�rHr0r1r��sz.ThreadPool._setup_queues.<locals>._poll_result)rr�r{r�r�r�r�r�r�r0rHr1rY�s

zThreadPool._setup_queuescCsT|j�:|j��|j�dgt|��|j��Wd�n1sF0YdSr+)�	not_empty�queuerX�extendrRrU)rr�r�r0r0r1r�s
zThreadPool._help_stuff_finish)NNr0)
r\r]r^�dummyrrrrMrYrrr0r0r0r1r4�s

r4)N)er-r�r8r�r�r�r�r>r�rk�collectionsr�	functoolsr�rrr�commonrr	r
rr�compatr
rrr�rr8r�
exceptionsrrrrrrrrr6rrrrr r��version_infor`�systemZ_winr#r�r%r$rr,�	SemaphorerLr�r�r�r�r�r�r�r�r)r�r�r�r�rar�r��countrr~r2r7r:r;rCrDr�rarkrnror�r�r�rr8rSr�r�r�r�r4r0r0r0r1�<module>
s�$	



;)%K:o=R

Youez - 2016 - github.com/yon3zu
LinuXploit