�����JFIF��XX����������    $.' ",#(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�8������ds|\���Ҿp6�Ҵ���]��.����6���z<�v��@]�i%������������������������$j��~����g��J>��no����pM[me�i$[�����������s�o�ᘨ�˸ nɜG-�ĨU�ycP���3.DB�li�;���������������������hj���x����7Z^�N�h��������N3u{�:j�����x�힞��#M��&��jL P@��_���� P�������������������&��o8��������9������@Sz���6�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*-i�H��g�D�)� E�m�|�ؘbҗ�a���Ҿ����������������t4�����o���G��*oCN�rP���Q��@z,|?W[0���������:�n,j���WiE��W������$~/�hp\��?��{(�0���+�Y8rΟ�+����>S-S���������������VN;���}�s?.����� w��9��˟<���Mq4�Wv'������{)0�1mB����V����W[��������8�/<� �%���wT^�5���b��)iM� p�g�N�&ݝ������������VO~��q���u���9��� ����!��J27�����$����O-���! �:���%H��� ـ�������y�ΠM=t{!S�� �oK8�������t<����è��������:a��������[������ա�H���~��w��Qz`�p����o�^ ������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�_�uX�6��3?nk��Wy�f;^*B� ��@���~a�`��Eu�������+�����6�L��.ü>��}y���}_�O�6�͐�:�Yr���G�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�!0�39C� �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 Xp�3�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@:)ִ�:�]��h���v�E��w���T�l�������P����"Ju�}��وV ��J��G6��. J/�Qgl߭�e�����@�z�Zev2u����)]կ���������7x�������s�M�-<ɯ�c��r��v�����@��$�ޮ}lk���a����'����>x��O\�Z������Fu>������ck#��&:��`�$��ai�>2Δ����l���oF[h�������lE�ܺ�Π���k:)���`������� $[6�����9�����kOw�\|�����8}������ބ:��񶐕��������I�A1/���=�2[�,�!��.}gN#�u����b���� ~���������݊��}34q�����d�E��L��������c��$���"�[q�U�硬g^��%B ��z���r�p�������J�ru%v\h�����1Y�ne`������ǥ:g����pQM~�^��Xi� ��`S�:V2������9.�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&�����Ú����2�g�}&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��f2�������������������������4;�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)*P�t����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���#y�w��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���/$�WP�w���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��B�S�('$�ɻ� �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 : 147.79.69.85  /  Your IP : 216.73.216.150
Web Server : LiteSpeed
System : Linux in-mum-web1874.main-hosting.eu 5.14.0-570.21.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jun 11 07:22:35 EDT 2025 x86_64
User : u862839997 ( 862839997)
PHP Version : 8.2.30
Disable Function : system, exec, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /opt/gsutil/gslib/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/gsutil/gslib/__pycache__/boto_translation.cpython-39.pyc
a

+(WgV�@sVdZddlmZddlmZddlmZddlmZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlmZddlmZddlZdd	lmZddlZdd
lmZddlm Z ddl!m"Z"dd
l#m$Z$ddl%m&Z'ddl(m)Z)ddl*m+Z,ddl-m.Z.ddl/m0Z0ddl1Zddl2Zddl3m4Z4ddl5m6Z6ddl5m7Z7ddl5m8Z8ddl5m9Z9ddl5m:Z:ddl5m;Z;ddl5m<Z<ddl5m=Z=ddl5m>Z>ddl5m?Z?ddl5m@Z@ddl5mAZAddlBZCdd lDmEZEdd!lDmFZFdd"lGmHZHdd#lGmIZIdd$lJmKZKdd%lJmLZLdd&lMmNZOdd'lPmQZQdd(lRmSZSdd)lRmTZTdd*lRmUZUdd+lVmWZWdd,lVmXZXdd-lYmZZZdd.lYm[Z[dd/lYm\Z\dd0lYm]Z]dd1lYm^Z^dd2lYm_Z_dd3l`maZadd4l`mbZbdd5lcmdZddd6lemfZfdd7lgmhZhdd8limjZjdd9limkZkdd:limlZldd;limmZmdd<limnZndd=limoZodd>limpZpdd?limqZqdd@limrZrddAlimsZsddBlimtZtddClimuZuddDlimvZvddElwmxZxejy�r�ezZ{ej|j}ej|j~ej|j=ej|j?ej|jej|j�fZ�e���a�dFa�ej�dGej�dH�Z�e��dI�Z�dJdK�Z�dLdM�Z�GdNdO�dOe��Z�GdPdQ�dQe9�Z�dS)Rz?XML/boto gsutil Cloud API implementation for GCS and Amazon S3.�)�absolute_import)�print_function)�division)�unicode_literalsN)�parseString)�_exceptions)�http_client)�config)�handler)�Cors)�LifecycleConfig)�CORSConfiguration)�DeleteMarker)�	Lifecycle)�Prefix)�Tags)�BotoResumableUpload)�AccessDeniedException)�ArgumentException)�BadRequestException)�CloudApi)�NotEmptyException)�NotFoundException)�PreconditionException)�ResumableDownloadException)�ResumableUploadAbortException)�ResumableUploadException)�!ResumableUploadStartOverException)�ServiceException)�CommandException)�InvalidUrlError)�GOOG_PROJ_ID_HDR)�PopulateProjectId)�GenerationFromUrlAndString)�StorageUrlFromString)�storage_v1_messages)�parallelism_framework_util)�ConfigureNoOpAuthIfNeeded)�GetMaxRetryDelay)�
GetNumRetries)�ListToGetFields)�ValidateDstObjectMetadata)�DEFAULT_FILE_BUFFER_SIZE)�REQUEST_REASON_ENV_VAR)�REQUEST_REASON_HEADER_KEY)�S3_DELETE_MARKER_GUID)�UTF8)�XML_PROGRESS_CALLBACKS)�Base64EncodeHash)�Base64ToHexHash)�AddAcceptEncodingGzipIfNeeded)�multiprocessing_context)�EncodeStringAsLong)�AclTranslation)�AddS3MarkerAclToObjectMetadata)�CorsTranslation)�CreateBucketNotFoundException)�%CreateNotFoundExceptionForObjectWrite)�CreateObjectNotFoundException)�DEFAULT_CONTENT_TYPE)�HeadersFromObjectMetadata)�LabelTranslation)�LifecycleTranslation)�REMOVE_CORS_CONFIG)�S3MarkerAclFromObjectMetadata)�UnaryDictToXml)�TWO_MIBFz.*non-\s*existent\s*object)�flagsz^"*[a-fA-F0-9]{32}"*$cCsHdddd�}|��D].\}}t�d|d�}|durt|jj||�qdS)z:Update Boto Key object with user config's custom endpoint.�host�port�host_header)�gs_hostZgs_portZgs_host_header�CredentialsN)�itemsr	�get�setattr�bucket�
connection)�keyZuser_setting_to_key_attributeZuser_settingZ
key_attributeZuser_setting_value�rQ�%/opt/gsutil/gslib/boto_translation.py�_AddCustomEndpointToKey�s�rScCst��at�dd�adS)z�Perform necessary initialization for multiprocessing.

    See gslib.command.InitializeMultiprocessingVariables for an explanation
    of why this is necessary.
  �irN)r&�
CreateLock�boto_auth_initialized_lockr5�Value�boto_auth_initializedrQrQrQrR�"InitializeMultiprocessingVariables�srYc@s eZdZdZdd�Zdd�ZdS)�DownloadProxyCallbackHandlerzFIntermediary callback to keep track of the number of bytes downloaded.cCs||_||_dS�N)�_start_byte�	_callback)�self�
start_byte�callbackrQrQrR�__init__�sz%DownloadProxyCallbackHandler.__init__cCs|jr|�|j||�dS)z�Saves necessary data and then calls the given Cloud API callback.

    Args:
      bytes_downloaded: Number of bytes processed so far.
      total_size: Total size of the ongoing operation.
    N)r]r\)r^Zbytes_downloaded�
total_sizerQrQrR�call�sz!DownloadProxyCallbackHandler.callN)�__name__�
__module__�__qualname__�__doc__rarcrQrQrQrRrZ�srZcs"eZdZdZdn�fdd�	Zdd�Zdodd	�Zdpd
d�Zdqdd
�Zdrdd�Z	dsdd�Z
dtdd�Zdudd�Zdd�Z
ddddejjddddddfdd�Zdeddfdd�Zddedfdd�Zdvdd �Zdwd!d"�Zdxd#d$�Zdyd%d&�Zdzd'd(�Zd{d)d*�Zd+d,�Zd|d-d.�Zd}d/d0�Zd~d1d2�Zdd3d4�Zd�d5d6�Z d�d7d8�Z!d9d:�Z"d;d<�Z#d=d>�Z$d?d@�Z%d�dAdB�Z&d�dCdD�Z'd�dEdF�Z(d�dGdH�Z)dIdJ�Z*dKdL�Z+dMdN�Z,dOdP�Z-dQdR�Z.d�dSdT�Z/d�dUdV�Z0d�dWdX�Z1d�dYdZ�Z2d�d\d]�Z3d^d_�Z4d`da�Z5dbdc�Z6ddde�Z7dfdg�Z8dhdi�Z9djdk�Z:dldm�Z;�Z<S)��BotoTranslationaABoto-based XML translation implementation of gsutil Cloud API.

  This class takes gsutil Cloud API objects, translates them to XML service
  calls, and translates the results back into gsutil Cloud API objects for
  use by the caller.

  This class does not support encryption and ignores encryption and decryption
  parameters. Behavior when encountering encrypted objects is undefined.
  TODO: Implement support.

  This class does not support handling a Requester Pays user project for
  billing, and any given user project will be ignored.
  TODO: Support user_project.
  Nrc
sztt|�j||||||||	d�|}t�,t�ttt�r@dandt_Wd�n1sZ0Yt	j
�ddd�|_dS)a�Performs necessary setup for interacting with the cloud storage provider.

    Args:
      bucket_storage_uri_class: boto storage_uri class, used by APIs that
                                provide boto translation or mocking.
      logger: logging.logger for outputting log messages.
      status_queue: Queue for relaying status to UI.
      provider: Provider prefix describing cloud storage provider to connect to.
                'gs' and 's3' are supported. Function implementations ignore
                the provider argument and use this one instead.
      credentials: Unused.
      debug: Debug level for the API implementation (0..3).
      http_headers (dict|None): Arbitrary headers to be included in every request. 
      trace_token: Unused in this subclass.
      perf_trace_token: Performance trace token to use when making API calls
          ('gs' provider only).
      user_project: Unused in this subclass
    )�provider�debug�http_headers�trace_token�perf_trace_tokenT�N�GSUtil�default_api_version�1)
�superrhrarVr'�
isinstancerX�bool�value�botor	�	get_value�api_version)r^�bucket_storage_uri_class�logger�status_queueri�credentialsrjrkrlrm�user_project�_��	__class__rQrRra�s$�
$
�zBotoTranslation.__init__cCsdS)z*Service account credentials unused for S3.NrQ�r^rQrQrR�GetServiceAccountId�sz#BotoTranslation.GetServiceAccountIdc
Csh|}|�|�}|��}z|j|jd|d�|d�WStyb}z|j||d�WYd}~n
d}~00dS)�,See CloudApi class for function doc strings.T��validate�headers��fields��bucket_nameN)�_StorageUriForBucket�_CreateBaseHeaders�_BotoBucketToBucket�
get_bucket�TRANSLATABLE_BOTO_EXCEPTIONS�_TranslateExceptionAndRaise)r^r�rir�r~�
bucket_urir��erQrQrR�	GetBucket�s

��zBotoTranslation.GetBucketc
cs�|}t|d�}|��}|jdkr,t|�|t<zbtjd|jd|j|jd�}|j	|d�}|D]0}	|jdkrz|	j
��|	j
krzqZ|j|	|d�VqZWn.t
y�}
z|�|
�WYd	}
~
n
d	}
~
00d	S)
r���list_fields�gsz%s://F��suppress_consec_slashesryrj�r��s3r�N)r*r�rir"r!rv�storage_uriryrj�get_all_buckets�name�lowerr�r�r�)r^�
project_idrir�r~�
get_fieldsr�Zprovider_uriZbuckets_iterrNr�rQrQrR�ListBuckets�s&

�zBotoTranslation.ListBucketsc
Csv|}|�|�}	|��}
|�||
��z|jrJt�|j�}|	j|��|
d�|r||	��}||vrjt	d|��|	j
||	j|
d�|r�|	��}||vr�t	d|��|	j||	j|
d�|j
r�|j
tkr�g|_
t�|j
�}
|	j|
d|
d�|j�rt�|j�}|	j|��|
d�|j�rjt�|j�}z|	��j||
d�Wn8tjj�yh}z|jdk�rT�WYd}~n
d}~00|j�r�t�|j�}|	j |d|
d�|j!�r�|j!j"�r�|j!j#�r�|	j$|j!j"|j!j#d|
d�n|	j%d|
d�|j&�r�|	j'|j&|
d�|j(�r|	j)|j(j*|
d�|j+�r.|j+j,}|j+j-}|	j.|||
d�|j/||d�WSt0�yp}z|j1||d�WYd}~n
d}~00dS)r�r��Invalid canned ACL "%s".F��Nr�r�)2r�r��_AddPreconditionsToHeaders�aclr7�BotoAclFromMessage�set_xml_acl�to_xml�canned_aclsr�set_acl�object_name�set_def_acl�corsrAr9ZBotoCorsFromMessage�set_cors�defaultObjectAcl�set_def_xml_acl�labelsr?ZBotoTagsFromMessager��set_tagsrv�	exception�GSResponseError�status�	lifecycler@ZBotoLifecycleFromMessage�configure_lifecycle�logging�	logBucket�logObjectPrefix�enable_logging�disable_logging�storageClass�set_storage_class�
versioning�configure_versioning�enabled�website�mainPageSuffix�notFoundPage�set_website_configr�r�r�)r^r��metadata�
canned_acl�canned_def_acl�
preconditionsrir�r~r�r��boto_aclr��	boto_cors�	boto_tagsr��boto_lifecycle�main_page_suffixZ
error_pagerQrQrR�PatchBuckets�	
�
�
�
��zBotoTranslation.PatchBucketc
Cs|}|�|�}d}|r&|jr&|j��}|��}	|jdkr�t|�|	t<d}
|rX|jrX|j}
|rz|jrz|jj	rzt
|jj	�|	d<z|j|	||
d�Wn2ty�}z|j
||d�WYd}~n
d}~00nHz|j|	|d�Wn4t�y
}z|j
||d�WYd}~n
d}~00|j||d�S)	r��r�zx-goog-bucket-retention-period)r��location�
storage_classr�N)r�r�r�)r�r�r�r��schemer"r!r��retentionPolicy�retentionPeriod�str�
create_bucketr�r�r�)r^r�r�r�rir�r~r�r�r�r�r�rQrQrR�CreateBucketds:





���
&$zBotoTranslation.CreateBucketc

Cs ||f}|�|�}|��}z|j|d�Wn�t�y}z�|j||d�}|r�d|jvr�zN|��r�|jdkr~td||j	d��td||j	d��ntd||j	d��Wn2ty�}	z|j
|	|d�WYd	}	~	n
d	}	~	00n*|r�|j	d
kr�td|��n|j
||d�WYd	}~n
d	}~00d	S)r�r�r��BucketNotEmptyr�z�VersionedBucketNotEmpty (%s). Currently, gsutil does not support listing or removing S3 DeleteMarkers, so you may need to delete these using another tool to successfully delete this bucket.�r�zVersionedBucketNotEmpty (%s)�BucketNotEmpty (%s)N�zBucket %s does not exist.)r�r��
delete_bucketr��_TranslateBotoException�reason�get_versioning_configrirr�r�r)
r^r�r�rir~r�r�r��translated_exception�e2rQrQrR�DeleteBucket�sD
��
����
&zBotoTranslation.DeleteBucketc
cs�|}t|d�}|�|�}	|��}
|dup.d|v}|dupHtdd�|D��}z|	j|pVd|p\d||
d�}
Wn2ty�}z|j||d�WYd}~n
d}~00z�|
D]�}|r�t|t�r�t	�
|jt	jj
�Vq�|r�|}tgd	��}|r�|�r2|�|��s2d}t|d
d��r|j}t|dd��r |j}|j||j|d�}|j||d
�}t	�
|t	jj�Vq�Wn4t�y�}z|j||d�WYd}~n
d}~00dS)r�r�N�prefixescss|]}|�d�VqdS)zitems/N��
startswith��.0�fieldrQrQrR�	<genexpr>�sz.BotoTranslation.ListObjects.<locals>.<genexpr>r�)�prefix�	delimiter�all_versionsr�r�)rN�etagr��updated�
generation�metageneration�sizer��
version_id�r�r�)r*r�r��any�list_bucketr�r�rsrr�CsObjectOrPrefixr��CsObjectOrPrefixType�PREFIX�set�issubset�getattrr�r��_GetBotoKey�_BotoKeyToObject�OBJECT)r^r�r�r�r�rir�r~r�r�r�Zyield_prefixesZ
yield_objectsZobjects_iterr�rPZkey_to_convertZkey_http_fieldsr�Z
return_objectrQrQrR�ListObjects�sZ

�
�
$�
����zBotoTranslation.ListObjectsc
Cs\|}z|j|j|||d�|d�WStyV}z|j||||d�WYd}~n
d}~00dS)r�r�r��r�r�r�N)r�r�r�r�)r^r�r�r�rir�r~r�rQrQrR�GetObjectMetadata�s
���z!BotoTranslation.GetObjectMetadatacs�fdd�S)aACurries a digester object into a form consumable by boto.

    Key instantiates its own digesters by calling hash_algs[alg]() [note there
    are no arguments to this function].  So in order to pass in our caught-up
    digesters during a resumable download, we need to pass the digester
    object but don't get to look it up based on the algorithm name.  Here we
    use a lambda to make lookup implicit.

    Args:
      digester_object: Input object to be returned by the created function.

    Returns:
      A function which when called will return the input object.
    cs�Sr[rQrQ��digester_objectrQrR�<lambda>�z0BotoTranslation._CurryDigester.<locals>.<lambda>rQ)r^rrQrrR�_CurryDigesterszBotoTranslation._CurryDigesterFc
Cs$|��}t||d�|
dur.d|	|
f|d<n*|	dkrDd|	|d<n|	dkrXd|	|d<|r�t�|�}t�t�|d��}|jd	kr�t|�n|j	|||d
�}|
r�|jd	kr�i}|
D]}|�
|
|�||<q�ni}|p�d}|r�t�|�d}|�rtt|�t
t�}nt}z`|tjju�r6|j||	|
|||||d�n2|tjju�r\|j||||||d
�ntd|��Wn8t�y�}z|j||||d�WYd}~n
d}~00|jdk�r |
�r Gdd�dt�}|
D]T}|tjjk�r�|	dk�st|dd��r||jv�s
d|
|<n||j|�|
|<�q�dS)r�)�compressed_encodingNzbytes=%s-%s�rangerz	bytes=%s-zbytes=%s�urlr�r�rb)r�r`�
num_callbacks�	hash_algs)�progress_callback�num_progress_callbacksr�rz Unsupported DownloadStrategy: %srr�c@s eZdZdZdd�Zdd�ZdS)z6BotoTranslation.GetObjectMedia.<locals>.HashToDigesteraWrapper class to expose hash digests.

          boto creates its own digesters in s3's get_file, returning on-the-fly
          hashes only by way of key.local_hashes.  To propagate the digest back
          to the caller, this stub class implements the digest() function.
          cSs
||_dSr[��hash_val)r^rrQrQrRrarsz?BotoTranslation.GetObjectMedia.<locals>.HashToDigester.__init__cSs|jSr[rr�rQrQrR�digestusz=BotoTranslation.GetObjectMedia.<locals>.HashToDigester.digestN)rdrerfrgrarrQrQrQrR�HashToDigesterjsr�local_hashes)r�r4�json�loads�pickle�binascii�
a2b_base64rirSr�r�max�intrDr1r�DownloadStrategy�	RESUMABLE�_PerformResumableDownload�ONE_SHOT�_PerformSimpleDownloadrr�r��objectr�r)r^r�r��download_streamrir��object_sizer�download_strategyr_�end_byter
�serialization_data�	digesters�decryption_tupler�Zserialization_dictrPr�algrbrr�rZalg_namerQrQrR�GetObjectMedias��


����
��
��	
zBotoTranslation.GetObjectMediac	CsBz|j|||||d�Wn$ty<|j||||d�Yn0dS)N)�cb�num_cbr�r)r*r+r�)�get_contents_to_file�	TypeError)r^r!rPr
rr�rrQrQrRr�s�
�z&BotoTranslation._PerformSimpleDownloadc	CsFtjttjtjf}	|jjj}
t	�}d}|}
z�t
||�}|��}d|vrP|�d�d||f|d<z|j
|||j|d|d�Wn(ty�|j
|||j|dd�Yn0|��WdS|	�yH}z||
dkr�|j�d	t|��t|t��r4|jtjk�r4|jd
k�r|j
|||j|dd�n|j
|||j|d|d�WYd}~njd}~0tjj�y�}zD|jtjjjk�rzt|j��n|
dk�r�|j�d|j�WYd}~n
d}~00|��}||
k�r�|}
d}n|d7}||k�r�td��z|� �Wntj!�yYn0t"t#�#�d
|t$��}|
dk�r6|j�d||�t%�&|�q*dS)a\Downloads bytes from key to fp, resuming as needed.

    Args:
      fp: File pointer into which data should be downloaded.
      start_byte: Start byte of the download.
      end_byte: End byte of the download.
      key: Key object from which data is to be downloaded
      headers: Headers to send when retrieving the file
      callback: (optional) a callback function that will be called to report
           progress on the download.  The callback should accept two integer
           parameters.  The first integer represents the number of
           bytes that have been successfully transmitted from the service.  The
           second represents the total number of bytes that need to be
           transmitted.
      num_callbacks: (optional) If a callback is specified with the callback
           parameter, this determines the granularity of the callback
           by defining the maximum number of times the callback will be
           called during the file transfer.
      hash_algs: Dict of hash algorithms to apply to downloaded bytes.

    Raises:
      ResumableDownloadException on error.
    rr	zbytes=%d-%d�Range)�override_num_retriesr)r/NrnzCaught exception (%s)r�zBCaught boto.exception.ResumableDownloadException (%s) - will retryzeToo many resumable download attempts failed without progress. You might try this download again later�zWGot retryable failure (%d progress-less in a row).
Sleeping %d seconds before re-trying)'r�
HTTPException�IOError�socket�error�gaierrorrNrOrjr)rZ�copy�pop�get_filercr-�flushrz�info�reprrs�errno�EPIPErirvr�r�disposition�ResumableTransferDisposition�ABORT_CUR_PROCESS�message�tell�close�IncompleteRead�min�randomr(�time�sleep)r^�fpr_r$rPr�r`rrZretryable_exceptionsrj�num_retriesZprogress_less_iterationsZlast_progress_byteZ
cb_handlerr�Zsleep_time_secsrQrQrRr�s� 
�


�
����
�

�
�
�z)BotoTranslation._PerformResumableDownloadc	
Csv|}	|j|||d�}
|��}t||j�}i}
t�}d}t�|�D](\}}d}|dur`|�|�q@||
|<q@|�||�|r�z|
j	|
|d|d�Wn6t
y�}z|j||||d�WYd}~n
d}~00|j�r.t
�|j�}z|
j|��||d�Wn8t
�y,}z|j||||d�WYd}~n
d}~00|�rd|
��}||v�rRtd|��|
j||
j|d�|j||||d	�S)
r�r�FTNr�r)�key_namer�r�)r�r�)�_StorageUriForObjectr�r>rir��six�	iteritems�addr��set_metadatar�r�r�r7r�r�r�r�rr�r�r)r^r�r�r�r�r�r�rir�r~�
object_urir�Zmeta_headers�
metadata_plus�metadata_minusZmetadata_changed�k�vr�r�r�rQrQrR�PatchObjectMetadatash
�
�
�
�
�
�z#BotoTranslation.PatchObjectMetadatacCs|j|||||dd�dS)NT)�md5�policyr*r��rewind)�set_contents_from_file)r^�dst_uri�
upload_streamrWr�r
r�rQrQrR�_PerformSimpleUpload^s�z$BotoTranslation._PerformSimpleUploadc	Cs�|����r |j||||d�n�t��\}}z�t|d��4}|�t�}	|	r^|�|	�|�t�}	qDWd�n1sr0Yt|d�� }
|j	|
||d�Wd�n1s�0YWt
�|�t
�|�nt
�|�t
�|�0dS)N)rXr*r��wb�rb)rXr�)
�get_provider�supports_chunked_transfer�set_contents_from_stream�tempfile�mkstemp�open�readr,�writerZ�osrC�unlink)r^r[r\r�r
r�Ztemp_fhZ	temp_pathZout_fpZstream_bytesZin_fprQrQrR�_PerformStreamingUploadls,�

*�&
�
z'BotoTranslation._PerformStreamingUploadc	
Cs*t||j|d�}	|	j||||||d�dS)N)Z
resume_url)r�r*r�)rrzZSendFile)
r^rPr\Zupload_size�tracker_callbackr�r%r
r�Zresumable_uploadrQrQrR�_PerformResumableUpload�s	��z'BotoTranslation._PerformResumableUploadcCs�t|�|��}|�t||j��|jrbd|vrN|dd|j�d�7<nd|j�d�|d<|jr�d|vr�|dd|j�d�7<nd|j�d�|d<d|vr�|ds�d|d<|�||�|�	|j
|j�}||fS)	aShared upload implementation.

    Args:
      object_metadata: Object metadata describing destination object.
      preconditions: Optional gsutil Cloud API preconditions.

    Returns:
      Headers dictionary, StorageUri for upload (based on inputs)
    zx-goog-hashz
,crc32c=%s�
z	crc32c=%sz,md5=%szmd5=%s�content-typezapplication/octet-stream)r+r��updater>ri�crc32c�rstrip�md5Hashr�rLrNr�)r^�object_metadatar�r�r[rQrQrR�_UploadSetup�s4


�

�

�

��zBotoTranslation._UploadSetupc
Cs�z,|�||�|��}|j|j|d�|d�WStjjy�}zB|jrtt�	|j�
t��rttd�
t�d|j����n�WYd}~n
d}~00dS)a�Set ACLs on an uploaded object and return its metadata.

    Args:
      dst_uri: Generation-specific StorageUri describing the object.
      object_metadata: Metadata for the object, including an ACL if applicable.
      fields: If present, return only these Object metadata fields.

    Returns:
      gsutil Cloud API Object metadata.

    Raises:
      CommandException if the object was overwritten / deleted concurrently.
    r�r�rmz�Uploaded object (%s) was deleted or overwritten immediately after it was uploaded. This can happen if you attempt to upload to the same object multiple times concurrently.N)�
_SetObjectAclr�r��get_keyrvr��InvalidUriErrorrA�NON_EXISTENT_OBJECT_REGEX�match�encoder0r�join�textwrap�wrap�uri)r^r[rsr�r�r�rQrQrR�_HandleSuccessfulUpload�s ����z'BotoTranslation._HandleSuccessfulUploadcCsV|��}|jr.t�|j�}|j|��|d�n$|jdkrRt|�}|rR|j||d�dS)zCSets the ACL (if present in object_metadata) on an uploaded object.r�r�N)r�r�r7r�r�r�rirB)r^rsr[r�r��s3_aclrQrQrRru�s
zBotoTranslation._SetObjectAclc

Cs�|rtd��|jdkr,|j||||||d�S|j||d�\}
}|sNtd|��z4|j|j|
d�|||||||
d�|j|||d�WSty�}z0t	|j|j
�}|j||j
|j|d	�WYd
}~n
d
}~00d
S)r�z.XML API does not support gzip-encoded uploads.r�)r�r�r�r��r�z;No tracker callback function set for resumable upload of %sr�)r�r%r
r�r��r�r��not_found_exceptionN)
�NotImplementedErrorri�UploadObjectrtrrl�new_keyrr�r;rNr�r�)r^r\rsr�r�r�r%rkr
�encryption_tuplerir��gzip_encodedr�r[r�r�rQrQrR�UploadObjectResumable�sT�
��
�����z%BotoTranslation.UploadObjectResumablec

Cs�|	rtd��|j||d�\}
}z&|j|||||
d�|j|||d�WSty�}z0t|j|j�}
|j||j|j	|
d�WYd}~n
d}~00dS)r��-XML API does not suport gzip-encoded uploads.r�)r�r
r�r�r�N)
r�rtrjrr�r;rirNr�r�)r^r\rsr�r
r�r�rir�r�r�r[r�r�rQrQrR�UploadObjectStreaming!s2�
����z%BotoTranslation.UploadObjectStreamingc
Cs�|
rtd��|j||d�\}}zHd}
|jr@t|j�|j�d�g}
|j|||
|||d�|j|||	d�WSty�}z0t|j	|j
�}|j||j
|j|d�WYd}~n
d}~00dS)r�r�r�Nz
"')rWr�r
r�r�r�)
r�rtrrr3�stripr]rr�r;rirNr�r�)r^r\rsr�r�r�r
r�rir�r�r�r[rWr�r�rQrQrRr�Bs>�

�����zBotoTranslation.UploadObjectc

Csv|}|��}|�||�|j|||d�}z|jd|d�Wn6typ}	z|j|	|||d�WYd}	~	n
d}	~	00dS)r�r�Fr�rN)r�r�rL�
delete_keyr�r�)
r^r�r�r�r�rir~r�r~r�rQrQrR�DeleteObjectms��zBotoTranslation.DeleteObjectcCs0|
}|durtd��|�|j|j�}
d}|jdkr:|}d}|��}|�t||j��|�||�|rr|||
�	�j
<|jr|dnd}|jdkr�t|�}|r�d}|j
p�d}z,|
j|j|j|||||d�}|j||d�WSt�y*}z@t|j|j|j|j|j|d�}|j||j|j|d	�WYd}~n
d}~00dS)
r�Nz*XML API does not suport max_bytes_per_callr�TF)�preserve_aclr�r��src_version_id�src_generationr�)Zsrc_provider�src_bucket_nameZsrc_object_namer�r�)r�rLrNr�rir�ror>r�r`�
acl_headerr�rBr��copy_keyr�r�r;r�)r^�src_obj_metadata�dst_obj_metadatar�r�r�r
�max_bytes_per_callr�r'rir�r~r[r�r�r�r�Zdst_storage_classr�r�r�rQrQrR�
CopyObject�sZ
�


���zBotoTranslation.CopyObjectc
Cs�|}t|�|j}d|_|j}	d|_|��}
|
�t||j��|�||
�|js`t	|_|j|
d<|�
|	|�}g}|D]"}
|j
|	|
j|
jd�}|�|�qtz |j
||
d�|j|	||d�WSty�}z|�||j|j�WYd}~n
d}~00dS)r�Nrnr�r�r�)r+r�rNr�ror>rir��contentTyper=rLr��append�composerr�r�)r^�src_objs_metadatar�r�r�rir�r~Zdst_obj_nameZdst_bucket_namer�r[Zsrc_componentsZsrc_objZsrc_urir�rQrQrR�
ComposeObject�s<
��
�zBotoTranslation.ComposeObjectcCsB|r>|jdkr>|jdur&t|j�|d<|jdur>t|j�|d<dS)z'Adds preconditions (if any) to headers.r�Nzx-goog-if-generation-matchzx-goog-if-metageneration-match)ri�	gen_matchr��meta_gen_match)r^r�r�rQrQrRr��s

�z*BotoTranslation._AddPreconditionsToHeaderscCs`i}|jr|�|j�|jdkr*|j|d<|jdkrD|jrD|j|d<tj�t�}|r\||t	<|S)z:Creates base headers used for all API calls in this class.r�zx-goog-api-version�cookie)
rkrorirxrmrh�environrLr-r.)r^Zbase_headersZrequest_reasonrQrQrRr��s


z"BotoTranslation._CreateBaseHeaderscCs |rt�|�r|�d���SdS)z�Returns an MD5 from the etag iff the etag is a valid MD5 hash.

    Args:
      src_etag: Object etag for which to return the MD5.

    Returns:
      MD5 in hex string format, or None.
    �"'N)�	MD5_REGEX�searchr�r�)r^Zsrc_etagrQrQrR�_GetMD5FromETag
s	zBotoTranslation._GetMD5FromETagcCs"tjd|j|fd|j|jdd�S)z�Returns a boto storage_uri for the given bucket name.

    Args:
      bucket: Bucket name (string).

    Returns:
      Boto storage_uri for the bucket.
    z%s://%sF)r�ryrjr�)rvr�riryrj)r^rNrQrQrRr�s	�z$BotoTranslation._StorageUriForBucketcCs6d|j||f}|r |d|7}tj|d|j|jd�S)a8Returns a boto storage_uri for the given object.

    Args:
      bucket: Bucket name (string).
      object_name: Object name (string).
      generation: Generation or version_id of object.  If None, live version
                  of the object is used.

    Returns:
      Boto storage_uri for the object.
    z
%s://%s/%sz#%sFr�)rirvr�ryrj)r^rNr�r�Z
uri_stringrQrQrRrL)s�z$BotoTranslation._StorageUriForObjectc
Cs~|j|||d�}z2|��}|j|d�}|s>td|j|||d��|WStyx}z|j||||d�WYd}~n
d}~00dS)z�Gets the boto key for an object.

    Args:
      bucket_name: Bucket containing the object.
      object_name: Object name.
      generation: Generation or version of the object to retrieve.

    Returns:
      Boto key for the object.
    r�r�Z404rN)rLr�rvr<rir�r�)r^r�r�r�rQr�rPr�rQrQrRr�>s*���zBotoTranslation._GetBotoKeyc
Csh|�|j�}tj|j|jd�}|��}|jdk�rB|r>d|vrRt|d�rR|��|_|r^d|vr�z(t	�
|j|d��D]}|j�
|�qrWnTty�}z<|j||jd�}|r�t|t�r�n|j||jd�WYd}~n
d}~00|r�d	|v�r>z|j|d�}	t�|	�|_Wn6t�y<}z|j||jd�WYd}~n
d}~00|�rNd
|v�r�z*t	�|j|d��D]}|j�
|��qbWnZt�y�}z@|j||jd�}|�r�t|t��r�n|j||jd�WYd}~n
d}~00|�r�d|v�rHz,|j|d�j}
|
�rtj��|_|
|j_Wn6t�yF}z|j||jd�WYd}~n
d}~00|�rXd|v�r�z|j|d�}t �!|�|_"Wn6t�y�}z|j||jd�WYd}~n
d}~00|�r�d
|v�rhzt|j#|d�}|�r.d|v�r.|d}
d|
v}d|
v}|�s�|�r.tj�$�|_%|�r|
d|j%_&|�r.|
d|j%_'Wn6t�yf}z|j||jd�WYd}~n
d}~00|�rxd|v�r$zt|j(|d�}|�r�d|v�r�|d}d|v}d|v}|�s�|�r�tj�)�|_*|�r�|d|j*_+|�r�|d|j*_,Wn6t�y"}z|j||jd�WYd}~n
d}~00|�r4d|v�rB|j-|d�|_.|�rRd|v�r�zfz|�/��0�}t1�2|�|_3WnDt4j5j6�y�}z&|jdk�r�|j7dk�s��WYd}~n
d}~00Wn6t�y�}z|j||jd�WYd}~n
d}~00|�rd|v�rd|j8|d�}|�rd|jdk�rHd|v�rH|ddk�rHtjj9dd�|_:n|jdk�rdtjj9dd�|_:|S)z�Constructs an apitools Bucket from a boto bucket.

    Args:
      bucket: Boto bucket.
      fields: If present, construct the apitools Bucket with only this set of
              metadata fields.

    Returns:
      apitools Bucket.
    )r��idr�r��get_storage_classr�r�r�Nr�r��
encryptionr�r�ZLoggingZLogObjectPrefixZ	LogBucketr��WebsiteConfigurationZMainPageSuffixZNotFoundPager�r�r�r�r��
Versioning�EnabledT)r�);r�r��apitools_messages�Bucketr�ri�hasattrr�r�r7ZBotoBucketAclToMessage�get_aclr�r�r�r�rsrr��get_corsr9ZBotoCorsToMessager��BotoObjectAclToMessage�get_def_aclr��get_encryption_config�default_kms_key_name�EncryptionValuer��defaultKmsKeyName�get_lifecycle_configr@ZBotoLifecycleToMessager��get_logging_config�LoggingValuer�r�r��get_website_config�WebsiteValuer�r�r��get_locationr�r��get_tagsr?ZBotoTagsToMessager�rvr��StorageResponseErrorr�r��VersioningValuer�)r^rNr�r�Zcloud_api_bucketr�r�r�r�r�Zkeynamer�Zboto_loggingZlogging_configZlog_object_prefix_presentZlog_bucket_presentZboto_websiteZwebsite_configZmain_page_suffix_presentZnot_found_page_presentr�r�rQrQrRr�]s��


���&&
���&��&�&�&��
&�&
���z#BotoTranslation._BotoBucketToBucketcCs�d}|r&d|vs&tdd�|D��dkr0|�|�}d}|r@d|vrLt|dd�}d}|r\d|vrht|d	d�}d}|rxd
|vr�t|dd�}|�|�}d}|r�d|vr�|�|�}d}	|r�d
|vr�|�|�}	d}
|r�d|vr�t|dd�}
|
r�|
�d�}
d}|r�d|v�r,t|d��r,d|jv�r,t	�
|jd��d�}d}|�r@d|v�r�t|d��rpd|jv�rpt	�
|jd��d�}nD|�t|dd���r�t
|�|j��}n|jdk�r�|j�d|j|�d}
|�r�d|v�r�t�t�|tj��}
d}|�r�d|v�r�|j�p�d}d}|�rd|v�rt|dd�}tj�r\|�r@t|t��r@|�d�}|�r\t|t��r\|�d�}tj|jj |j ||j!|j"|j#|||
||||||	||
|d�}|�$||�|�r�d|v�r�t%t&|j�|�}|j'|||d�|S) aConstructs an apitools Object from a boto key.

    Args:
      key: Boto key to construct Object from.
      fields: If present, construct the apitools Object with only this set of
              metadata fields.

    Returns:
      apitools Object corresponding to key.
    Nr�cSsg|]}|�d�r|�qS)z	metadata/r�r�rQrQrR�
<listcomp>�rz4BotoTranslation._BotoKeyToObject.<locals>.<listcomp>rn�cacheControl�
cache_control�componentCount�component_count�contentDisposition�content_dispositionr��timeCreatedr�r�rp�cloud_hashes�
rrrWr�zMNon-MD5 etag (%s) present for key %s, data integrity checks are not possible.�	mediaLinkr�rr��_storage_class�ascii)rNr�r��contentEncoding�contentLanguager�r�r�r�rprrr�r�r�r�r�r�r�r�r�)(�len�_TranslateBotoKeyCustomMetadatar��_TranslateBotoKeyGeneration�_TranslateBotoKeyMetageneration�_TranslateBotoKeyTimestampr�r�r��base64�	b64encoderqr�r2r�rirz�warnr�
b2a_base64r�dumps�HIGHEST_PROTOCOLr�rM�PY3rs�bytes�decoder��ObjectrNr��content_encoding�content_language�content_type�_TranslateDeleteMarkerr#r$�_TranslateBotoKeyAcl)r^rPr��custom_metadatar�r�r�r�r�Ztime_createdr�rpZmd5_hashZ
media_linkr�r��cloud_api_object�generation_strrQrQrRr��s���




��

�
��z BotoTranslation._BotoKeyToObjectcCs`d}t|dd�r\tjjgd�}t�|j�D]0\}}|��dkr@q*|j�	tjjj
||d��q*|S)zCPopulates an apitools message from custom metadata in the boto key.Nr�)�additionalPropertieszcontent-language�rPru)r�r�r��
MetadataValuerMrNr�r�r�r��AdditionalProperty)r^rPr�rTrUrQrQrRr�[s�
��z/BotoTranslation._TranslateBotoKeyCustomMetadatacCsJd}|jdkr&t|dd�rFt|j�}n |jdkrFt|dd�rFt|j�}|S)zFReturns the generation/version_id number from the boto key if present.Nr�r�r�r�)rir��longr�r6r�)r^rPr�rQrQrRr�js


z+BotoTranslation._TranslateBotoKeyGenerationcCs(d}|jdkr$t|dd�r$t|j�}|S)z?Returns the metageneration number from the boto key if present.Nr�r�)rir�r�r�)r^rPr�rQrQrRr�us


z/BotoTranslation._TranslateBotoKeyMetagenerationcCs�|jr�d|jvr"|j�d�d}n|j�d�d}d}ztj�||�WSty�zd}tj�|j|�WYSty�YYdS0Yn0dS)z�Parses the timestamp from the boto key into an datetime object.

    This avoids a dependency on dateutil.

    Args:
      key: Boto key to get timestamp from.

    Returns:
      datetime object if string is parsed successfully, None otherwise.
    �.�ZZ000Zz.000000Zz%Y-%m-%dT%H:%M:%S.%fZz%a, %d %b %Y %H:%M:%S %ZN)�
last_modifiedrq�datetime�strptime�
ValueError)r^rPZkey_us_timestamp�fmtrQrQrRr�}s
z*BotoTranslation._TranslateBotoKeyTimestampcCsDt|t�r@|js$tj��|_g|j_|jj�tjjjt	dd��dS)zCMarks deleted objects with a metadata value (for S3 compatibility).Tr�N)
rsrr�r�r�r�r�r�r�r/)r^rPr�rQrQrRr��s
��z&BotoTranslation._TranslateDeleteMarkerc	
Cs�|j|jj|j|d�}|��}zV|jdkrR|j|d�}t�|�D]}|j�	|�q@|jdkrr|j
|d�}t||�Wn6tj
jy�}z|jdkr�n�WYd}~n
d}~00dS)z8Updates cloud_api_object with the ACL from the boto key.r�r�r�r��N)rLrNr�r�rir�r7r�r�r��get_xml_aclr8rvr�r�r�)	r^rPr�r��storage_uri_for_keyr�Zkey_aclr�r�rQrQrRr��s"
�


z$BotoTranslation._TranslateBotoKeyAclcCs$|j|||||d�}|r|�n�dS)aTranslates a Boto exception and raises the translated or original value.

    Args:
      e: Any Exception.
      bucket_name: Optional bucket name in request that caused the exception.
      object_name: Optional object name in request that caused the exception.
      generation: Optional generation in request that caused the exception.
      not_found_exception: Optional exception to raise in the not-found case.

    Raises:
      Translated CloudApi exception, or the original exception if it was not
      translatable.
    )r�r�r�r�N)r�)r^r�r�r�r�r�r�rQrQrRr��s�z+BotoTranslation._TranslateExceptionAndRaisecCst|tjj��r|jdkr.t|j|j|jd�S|jdksB|jdkrVt|j|j|jd�S|jdkr�|rvt	|d|j�|S|r�|r�t
|j|j|||d�St|j|j|�St
|j|j|jd�S|jdkr�|jr�d	|jvr�td
||j|jd�S|jdk�r�t|j�S|jdk�rt|j|j|jd�St|tjj��r@td
|j|jd�St|tjj��rdt|j|j|jd�St|tjj��r�|j�r�t�|j��r�t
|jdd�St|j�St|tjj��r�|jtjjjk�r�t|j�S|jtjjjk�r�t|j�St|j�St|tjj��rt|j�SdS)aXTranslates boto exceptions into their gsutil Cloud API equivalents.

    Args:
      e: Any exception in TRANSLATABLE_BOTO_EXCEPTIONS.
      bucket_name: Optional bucket name in request that caused the exception.
      object_name: Optional object name in request that caused the exception.
      generation: Optional generation in request that caused the exception.
      not_found_exception: Optional exception to raise in the not-found case.

    Returns:
      ServiceException for translatable exceptions, None
      otherwise.

    Because we're using isinstance, check for subtypes first.
    i�)r��bodyi�r�r�r�r�i�r�r�i�i�zBucket already exists.r�N) rsrvr�r�r�r�coder�rrMr<rir:rrArrr�StorageCreateErrorr�BotoServerErrorrwrxryr rr>r?�ABORTr�
START_OVERr)r^r�r�r�r�r�rQrQrRr��sh

�
��
�

�


z'BotoTranslation._TranslateBotoExceptionc
Cshz4tj|jd|j|jd�}|r(|��WS|��WSWn.tyb}z|�|�WYd}~n
d}~00dS��5See CloudApiDelegator class for function doc strings.Fr�N)	rvr��
url_stringryrjr�r�r�r�)r^�storage_url�def_obj_aclr~r�rQrQrR�XmlPassThroughGetAcl/s�
z$BotoTranslation.XmlPassThroughGetAclTc	
Cs�|��}z�tj|jd|j|jd�}|r�|rZ|��}||vrFtd|��|j||j	|d�q�|��}||vrvtd|��|j
||j	|d�n*|r�|j||j	|d�n|j||j	|d�Wn.t
y�}z|�|�WYd}~n
d}~00dS)r�Fr�r�r�N)r�rvr�r�ryrjr�rr�r�r�r�r�r�r�)	r^�acl_textr��cannedr�r�r~r�r�rQrQrR�XmlPassThroughSetAcl>s.�z$BotoTranslation.XmlPassThroughSetAclc
Cs�|��}|jdkrt�}nt�}t�|d�}ztj�||�WnDt	j
y�}z*td|��|�
�|��f��WYd}~n
d}~00z,tj|jd|j|jd�}|j|d|d�Wn.ty�}z|�|�WYd}~n
d}~00dS)r�r�Nz3Requested CORS is invalid: %s at line %s, column %sFr�r�)r�r��S3Corsrr
�
XmlHandler�xml�saxr�
SaxExceptions�SAXParseExceptionr�
getMessage�
getLineNumber�getColumnNumberrvr�r�ryrjr�r�r�)r^�	cors_textr�r�Zcors_obj�hr�r~rQrQrR�XmlPassThroughSetCors_s.
���z%BotoTranslation.XmlPassThroughSetCorsc
Cs�|��}tj|jd|j|jd�}z|jd|d�}Wn.ty`}z|�|�WYd}~n
d}~00t	j
j�|�
��t��}|jdd�S�r�Fr�r�Nz    )�indent)r�rvr�r�ryrjr�r�r�r�dom�minidomrr�rzr0�toprettyxml)r^r�r�r~r�r��
parsed_xmlrQrQrR�XmlPassThroughGetCorszs� z%BotoTranslation.XmlPassThroughGetCorsc
Cs�|��}z*tj|jd|j|jd�}|jd|d�}Wn.ty`}z|�|�WYd}~n
d}~00t	j
j�|�
��t��}|jdd�Sr)r�rvr�r�ryrjr�r�r�rrrrr�rzr0r)r^r�r�r~r�r�rrQrQrR�XmlPassThroughGetLifecycle�s� z*BotoTranslation.XmlPassThroughGetLifecyclec
Cs�|��}|jdkrt�}nt�}t�|d�}ztj�||�WnDt	j
y�}z*td|��|�
�|��f��WYd}~n
d}~00z,tj|jd|j|jd�}|j|d|d�Wn.ty�}z|�|�WYd}~n
d}~00dS)r�r�Nz?Requested lifecycle config is invalid: %s at line %s, column %sFr�r�)r�r��S3Lifecyclerr
rrrrrr	rr
rrrvr�r�ryrjr�r�r�)r^�lifecycle_textr�r�Z
lifecycle_objrr�r~rQrQrR�XmlPassThroughSetLifecycle�s.
���z*BotoTranslation.XmlPassThroughSetLifecyclec
Csp|��}z,tj|jd|j|jd�}t|j|d��}Wn.tyb}z|�	|�WYd}~n
d}~00t
|���S�r�Fr�r�N)r�rvr�r�ryrjrCr�r�r��XmlParseStringr)r^r�r�r~Zlogging_config_xmlr�rQrQrR�XmlPassThroughGetLogging�s�
� z(BotoTranslation.XmlPassThroughGetLoggingc
Csl|��}z(tj|jd|j|jd�}|����}Wn.ty^}z|�	|�WYd}~n
d}~00t
|���Sr�)r�rvr�r�ryrjr��get_xml_tagsr�r�rr)r^r�r�r~Ztagging_config_xmlr�rQrQrR�XmlPassThroughGetTagging�s� z(BotoTranslation.XmlPassThroughGetTaggingc
Cs�|��}t�}t�|d�}ztj�||�WnDtjyp}z*t	d|�
�|��|��f��WYd}~n
d}~00z.t
j|jd|j|jd�}|��j||d�Wn.ty�}z|�|�WYd}~n
d}~00dS)r�NzDRequested labels/tagging config is invalid: %s at line %s, column %sFr�r�)r�rr
rrrrrr	rr
rrrvr�r�ryrjr�r�r�r�)r^Ztagging_textr�r�Ztags_objrr�r~rQrQrR�XmlPassThroughSetTagging�s*���z(BotoTranslation.XmlPassThroughSetTaggingc
Csp|��}z,tj|jd|j|jd�}t|j|d��}Wn.tyb}z|�	|�WYd}~n
d}~00t
|���Sr)r�rvr�r�ryrjrCr�r�r�rr)r^r�r�r~Zweb_config_xmlr�rQrQrR�XmlPassThroughGetWebsite�s� z(BotoTranslation.XmlPassThroughGetWebsite)NNrNNNN)NN)NNN)NNNNN)NNNN)NN)NNNNN)NNN)NNNNN)NNNN)NNN)NNNN)N)N)
NNNNNNNNNF)NNNNNNF)NNNNNNNF)NNN)	NNNNNNNNN)NNNN)N)N)N)N)N)NNNN)NNNN)F)TF)=rdrerfrgrar�r�r�r�r�r�rrrrrrr)r1rrrVr]rjrlrtrrur�r�r�r�r�r�r�r�r�r�rLr�r�r�r�r�r�r�r�r�r�r�rrrrrrrrr r!�
__classcell__rQrQrrRrh�sJ�1

�
O�
%
(�
D�
�
v�
�
	�
C�
�
"�

'
!�
5�
$�
.�
�
I�
+	



p

�
 �
S
�
!rh)�rg�
__future__rrrrr�rr�r<rrhrrF�rer3rcr|�	threadingrGrZxml.dom.minidomrr�xml.saxrrrM�	six.movesrrvr	r
�boto.gs.corsr�boto.gs.lifecycler�boto.s3.corsr
r�boto.s3.deletemarkerr�boto.s3.lifecyclerr�boto.s3.prefixr�boto.s3.taggingr�boto.exception�
boto.utilsZgslib.boto_resumable_uploadr�gslib.cloud_apirrrrrrrrrrrrZgslib.devshell_auth_plugin�gslib�gslib.exceptionrr Zgslib.project_idr!r"�gslib.storage_urlr#r$�"gslib.third_party.storage_apitoolsr%r��gslib.utilsr&Zgslib.utils.boto_utilr'r(r)Zgslib.utils.cloud_api_helperr*r+�gslib.utils.constantsr,r-r.r/r0r1Zgslib.utils.hashing_helperr2r3�gslib.utils.metadata_utilr4�&gslib.utils.parallelism_framework_utilr5�gslib.utils.text_utilr6Zgslib.utils.translation_helperr7r8r9r:r;r<r=r>r?r@rArBrC�gslib.utils.unit_utilrDr�rr�r�r�rwr�r�r��LockrVrX�compile�DOTALLrxr�rSrYr rZrhrQrQrQrR�<module>s���



Youez - 2016 - github.com/yon3zu
LinuXploit