����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 : 104.21.45.146  /  Your IP : 172.69.214.218
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux ip-172-31-19-221 6.8.0-1029-aws #31~22.04.1-Ubuntu SMP Thu Apr 24 21:16:18 UTC 2025 x86_64
User : www-data ( 33)
PHP Version : 8.1.28
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /proc/self/root/usr/lib/python3/dist-packages/awscli/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /proc/self/root/usr/lib/python3/dist-packages/awscli/__pycache__/testutils.cpython-310.pyc
o

2&�a���@s�dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
mZddlmZmZddlmZddlmZddlmZddlmZdd	lmZdd
lmZddlZddlmZddl Z!ddl"m#Z#dd
l m$Z$ddl!m%Z%ddlZej&r�ej'j(ej'_)ej*�+�Z,e�-d�Z.da/dd�Z0dd�Z1dd�Z2dd�Z3dd�Z4e
j5dd��Z6dSdd�Z7dd�Z8dTd"d#�Z9Gd$d%�d%ej'�Z:Gd&d'�d'e:�Z;Gd(d)�d)e<�Z=Gd*d+�d+e<�Z>e
j5d,d-��Z?e
j5dUd/d0��Z@Gd1d2�d2ej'�ZAGd3d4�d4eA�ZBGd5d6�d6ej'�ZCGd7d8�d8e<�ZDGd9d:�d:eE�ZFGd;d<�d<e<�ZGd=d>�ZH		dVdAdB�ZIdCdD�ZJdEdF�ZKdGdH�ZLGdIdJ�dJej'�ZMGdKdL�dLe�ZNGdMdN�dNe<�ZOGdOdP�dPeE�ZPGdQdR�dRe<�ZQdS)Wa^Test utilities for the AWS CLI.

This module includes various classes/functions that help in writing
CLI unit/integration tests.  This module should not be imported by
any module **except** for test code.  This is included in the CLI
package so that code that is not part of the CLI can still take
advantage of all the testing utilities we provide.

�N)�pformat)�Popen�PIPE)�mock)�StringIO)�six)�Session)�ClientError)�WaiterError)�AWSResponse)�load_plugins)�	CLIDriver)�EnvironmentVariableszawscli.tests.integrationcs�fdd�}|S)z�Decorator to skip tests that should not be run on windows.

    Example usage:

        @skip_if_windows("Not valid")
        def test_some_non_windows_stuff(self):
            self.assertEqual(...)

    cst�t��dv��|�S)N)�Darwin�Linux)�unittest�skipIf�platform�system)�func��reason��2/usr/lib/python3/dist-packages/awscli/testutils.py�	decoratorPs
��z"skip_if_windows.<locals>.decoratorr)rrrrr�skip_if_windowsFs
rcCsFtj��}|j}|�d��tj�}|sg}tj	�
|�|�dt�|S)N�	data_path�data_loader)�awscli�	clidriver�create_clidriver�session�get_config_variable�split�os�pathsep�_LOADER�search_paths�extend�register_component)�driverr!rrrrr Vs
r cCsbddl}tdur/tj�tj�|j��}tj�|dd�}tj�|�s-t	d�}|dur-t
d��|atS)Nr�bin�awsz�Could not find "aws" executable.  Either make sure it is on your PATH, or you can explicitly set this value using "set_aws_cmd()")r�AWS_CMDr$�path�dirname�abspath�__file__�join�isfile�_search_path_for_cmd�
ValueError)r�	repo_root�aws_cmdrrr�get_aws_cmdasr8cCsBtj�dd��tj�D]}tj�||�}tj�|�r|SqdS)N�PATH�)r$�environ�getr#r%r.r2r3)�cmd_namer.�
full_cmd_pathrrrr4ss�r4cCs|adS�N)r-)r7rrr�set_aws_cmd{sr@c	cs��t��}dttd��}tj�||�}t|d���z(t||��}|VWd�n1s/wYWt	�
|�dSWt	�
|�dSt	�
|�w)afThis is a cross platform temporary file creation.

    tempfile.NamedTemporary file on windows creates a secure temp file
    that can't be read by other processes and can't be opened a second time.

    For tests, we generally *want* them to be read multiple times.
    The test fixture writes the temp file contents, the test reads the
    temp file.

    z
tmpfile-%s��wN)�tempfile�mkdtemp�str�random_charsr$r.r2�open�close�shutil�rmtree)�mode�temporary_directory�basename�
full_filename�frrr�temporary_file�s���rPc
Cs�|sd}|jd|d�}|r|}nt�}d|i}|dkr!d|i|d<z|jdi|��W|StyK}z|jd�d	�d
kr?n�WYd}~|Sd}~ww)
zG
    Creates a bucket
    :returns: the name of the bucket created
    �	us-west-2�s3��region_name�Bucket�	us-east-1�LocationConstraint�CreateBucketConfiguration�Error�Code�BucketAlreadyOwnedByYouNr)�
create_client�random_bucket_name�
create_bucketr	�responser<)r!�name�region�client�bucket_name�params�errrr^�s(	�
���r^cCst�t�t|d����d�S)zZReturns random hex characters.

    Useful for creating resources with random names.

    ��ascii)�binascii�hexlifyr$�urandom�int�decode)�	num_charsrrrrF�srF�awscli-s3integ-�cCs|t|�S)aGenerate a random S3 bucket name.

    :param prefix: A prefix to use in the bucket name.  Useful
        for tracking resources.  This default value makes it easy
        to see which buckets were created from CLI integ tests.
    :param num_random: Number of random chars to include in the bucket name.

    :returns: The name of a randomly generated bucket name as a string.

    )rF)�prefix�
num_randomrrrr]�sr]c@s eZdZdZdd�Zdd�ZdS)�BaseCLIDriverTestz�Base unittest that use clidriver.

    This will load all the default plugins as well so it
    will simulate the behavior the user will see.
    cCsHtjdddddd�|_t�d|j�|_|j��t�|_|jj|_dS)N�
AWS_DATA_PATHrV�
access_key�
secret_keyr:�rs�AWS_DEFAULT_REGION�AWS_ACCESS_KEY_ID�AWS_SECRET_ACCESS_KEY�AWS_CONFIG_FILE�
os.environ)	r$r;r�patch�
environ_patch�startr r*r!��selfrrr�setUp�s�
zBaseCLIDriverTest.setUpcCs|j��dSr?)r}�stoprrrr�tearDown��zBaseCLIDriverTest.tearDownN)�__name__�
__module__�__qualname__�__doc__r�r�rrrrrr�s
rrcsHeZdZ�fdd�Z�fdd�Zdd�Zdd�Zd	d
�Zdd�Z�Z	S)
�BaseAWSHelpOutputTestcs<tt|���t�d�|_|j��|_t�|_	|j	|j_
dS)Nzawscli.help.get_renderer)�superr�r�rr|�renderer_patchr~�
renderer_mock�CapturedRenderer�renderer�return_valuer��	__class__rrr��s
zBaseAWSHelpOutputTest.setUpcstt|���|j��dSr?)r�r�r�r�r�rr�rrr��szBaseAWSHelpOutputTest.tearDowncCs*||jjvr|�d||jjf�dSdS)NzFThe expected contents:
%s
were not in the actual rendered contents:
%s�r��rendered_contents�fail)r��containsrrr�assert_contains���
��z%BaseAWSHelpOutputTest.assert_containscCs8|jj�|�}||kr|�d|||jj|f�dSdS)NzkThe expected contents:
%s
, with the count:
%d
were not in the actual rendered  contents:
%s
with count:
%d)r�r��countr�)r�r�r��r_countrrr�assert_contains_with_count�s�
��z0BaseAWSHelpOutputTest.assert_contains_with_countcCs*||jjvr|�d||jjf�dSdS)NzKThe contents:
%s
were not suppose to be in the actual rendered contents:
%sr��r��contentsrrr�assert_not_contains�r�z)BaseAWSHelpOutputTest.assert_not_containscs�|�d�}t|�}|jj�|�|����|����fdd�|D�}|d}t|dd�d�D])\}}|dkrB|�d||�f�||krV|�d||||d�f�|}q/dS)	N�
starting_fromcsg|]}��|���qSr)�find)�.0�arg�r��start_indexrr�
<listcomp>sz;BaseAWSHelpOutputTest.assert_text_order.<locals>.<listcomp>r����z/The string %r was not found in the contents: %szBThe string %r came before %r, but was suppose to come after it.
%s)�pop�listr�r��assertInr��	enumerater�)r��args�kwargsr��arg_indices�previous�i�indexrr�r�assert_text_orders$


���z'BaseAWSHelpOutputTest.assert_text_order)
r�r�r�r�r�r�r�r�r��
__classcell__rrr�rr��sr�c@seZdZdd�Zdd�ZdS)r�cCs
d|_dS)Nr:)r�rrrr�__init__s
zCapturedRenderer.__init__cCs|�d�|_dS)N�utf-8)rlr�r�rrr�renderszCapturedRenderer.renderN)r�r�r�r�r�rrrrr�sr�c@�eZdZdd�ZdS)�CapturedOutputcCs||_||_dSr?)�stdout�stderr)r�r�r�rrrr�s
zCapturedOutput.__init__N)r�r�r�r�rrrrr��r�c	cs��t��}t��}t�d|��-t�d|��t||�VWd�n1s'wYWd�dSWd�dS1s?wYdS)Nz
sys.stderrz
sys.stdout)rrrr|r�)r�r�rrr�capture_output"s���"�r��ccs^�t�|�}tjrt��}||_n|}t�d|��|VWd�dS1s(wYdS)Nz	sys.stdin)r�BytesIO�PY3r�Mock�bufferr|)�input_bytes�
input_data�mock_objectrrr�
capture_input+s�
"�r�c@sXeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Z		dd
d�Z	dd�Z
ddd�ZdS)�BaseAWSCommandParamsTestNcCs�i|_d|_tjddddddd�|_t�d|j�|_|j��tddid�|_	i|_
t�d	�|_d
|_g|_
d|_t�|_dS)NrsrVrtrur:)rsrwrxryrz�AWS_SHARED_CREDENTIALS_FILEr{��z'botocore.endpoint.Endpoint.make_requestF)�last_params�last_kwargsr$r;rr|r}r~r�
http_response�parsed_response�make_request_patch�make_request_is_patched�operations_called�parsed_responsesr r*rrrrr�;s$�
zBaseAWSCommandParamsTest.setUpcC�(|j��|jr|j��d|_dSdS�NF)r}r�r�r�rrrrr�Us



�z!BaseAWSCommandParamsTest.tearDowncKs|�|�dSr?)�
_store_params)r�rdr�rrr�before_call\r�z$BaseAWSCommandParamsTest.before_callcCs||_|d|_dS)N�body)�last_request_dictr�)r�rdrrrr�_sz&BaseAWSCommandParamsTest._store_paramscsR�jr�j��d�_�j��}�jdur�fdd�|_n�j�jf|_d�_dS)NFcs�j�j�d�fS�Nr)r�r�r�)r�r�rrr�<lambda>msz=BaseAWSCommandParamsTest.patch_make_request.<locals>.<lambda>T)	r�r�r�r~r��side_effectr�r�r�)r�r�rrr�patch_make_requestcs



z+BaseAWSCommandParamsTest.patch_make_requestrc	Cs�|�||�\}}}|dur|�||�|durEt�|j�}	|dur4|D]}
z|	|
=Wq#ty3Yq#w||	krE|�dt|�t|	�f�|||fS)NzGActual params did not match expected params.
Expected:

%s
Actual:

%s
)�run_cmdr��copyr��KeyErrorr�r)r��cmdrd�expected_rc�stderr_contains�
ignore_paramsr�r��rcr��keyrrr�assert_params_for_cmdss$
���
z.BaseAWSCommandParamsTest.assert_params_for_cmdcKs||_|j�||��f�dSr?)r�r��appendr�)r�rd�modelr�rrr�before_parameter_build�sz/BaseAWSCommandParamsTest.before_parameter_buildc
Cs�t�d|�|��|jj�d�}|�d|j�|�d|j	�t
|t�s)|��}n|}t
��&}z|j�|�}WntyL}z	|j}WYd}~nd}~wwWd�n1sWwY|j��}|j��}	|�||d||||	|f�|	||fS)NzCalling cmd: %s�
event_emitterzbefore-callzbefore-parameter-build.*.*�MUnexpected rc (expected: %s, actual: %s) for command: %s
stdout:
%sstderr:
%s)�logging�debugr�r*r!�
get_component�registerr��register_firstr��
isinstancer�r#r��main�
SystemExit�coder��getvaluer��assertEqual)
r�r�r�r��cmdlist�capturedr�rer�r�rrrr��s:�

����
	

���
z BaseAWSCommandParamsTest.run_cmd)NrNN�r)r�r�r��maxDiffr�r�r�r�r�r�r�r�rrrrr�8s
�r�cs(eZdZ�fdd�Z�fdd�Z�ZS)�BaseAWSPreviewCommandParamsTestcs(t�d�|_|j��tt|���dS)Nz-awscli.customizations.preview.mark_as_preview)rr|�
preview_patchr~r�r�r�rr�rrr��s
�
z%BaseAWSPreviewCommandParamsTest.setUpcs|j��tt|���dSr?)r�r�r�r�r�rr�rrr���
z(BaseAWSPreviewCommandParamsTest.tearDown)r�r�r�r�r�r�rrr�rr��sr�c@s6eZdZdd�Zdd�Zdidfdd�Zd
d
d�ZdS)�BaseCLIWireResponseTestcCsPtjdddddd�|_t�d|j�|_|j��t�d�|_d	|_t�|_	dS)
NrsrVrtrur:rvr{z botocore.endpoint.Endpoint._sendF)
r$r;rr|r}r~�
send_patch�send_is_patchedr r*rrrrr��s�
zBaseCLIWireResponseTest.setUpcCr�r�)r}r�r�r�rrrrr��s



�z BaseCLIWireResponseTest.tearDownr�r�cCs<|jr|j��d|_|j��}tj|||d�|_d|_dS)NF)�status_code�headers�contentT)r�r�r�r~rr�r�)r�r�r�rr�rrr�
patch_send�s

�
z"BaseCLIWireResponseTest.patch_sendrc	Cs�t|t�s
|��}n|}t��&}z|j�|�}Wnty-}z	|j}WYd}~nd}~wwWd�n1s8wY|j�	�}|j
�	�}|�||d|||||f�|||fS)Nr�)r�r�r#r�r*r�r�r�r�r�r�r�)	r�r�r�r�r�r�rer�r�rrrr��s,

����


���
zBaseCLIWireResponseTest.run_cmdNr�)r�r�r�r�r�rr�rrrrr��s

r�c@s6eZdZdd�Zdd�Zd
dd�Zd	d
�Zdd�ZdS)�FileCreatorcCst��|_dSr?)rCrD�rootdirrrrrr��r�zFileCreator.__init__cCs"tj�|j�rt�|j�dSdSr?)r$r.�existsrrIrJrrrr�
remove_all�s�zFileCreator.remove_allNrBcCs�tj�|j|�}tj�tj�|��st�tj�|��t||��
}|�|�Wd�n1s0wYtj�	|�}t�
|||df�|durQt�
|||f�|S)a�Creates a file in a tmpdir

        ``filename`` should be a relative path, e.g. "foo/bar/baz.txt"
        It will be translated into a full path in a tmp dir.

        If the ``mtime`` argument is provided, then the file's
        mtime will be set to the provided value (must be an epoch time).
        Otherwise the mtime is left untouched.

        ``mode`` is the mode the file should be opened either as ``w`` or
        `wb``.

        Returns the full path to the file.

        Ni�)r$r.r2r�isdirr/�makedirsrG�write�getmtime�utime)r��filenamer��mtimerK�	full_pathrO�current_timerrr�create_file�s�zFileCreator.create_filecCsptj�|j|�}tj�tj�|��st�tj�|��t|d��}|�|�Wd�|S1s1wY|S)z�Append contents to a file

        ``filename`` should be a relative path, e.g. "foo/bar/baz.txt"
        It will be translated into a full path in a tmp dir.

        Returns the full path to the file.
        �aN)	r$r.r2rrr/rrGr)r�rr�r
rOrrr�append_files
��zFileCreator.append_filecCstj�|j|�S)zzTranslate relative path to full path in temp dir.

        f.full_path('foo/bar.txt') -> /tmp/asdfasd/foo/bar.txt
        )r$r.r2r)r�rrrrr
 szFileCreator.full_path)NrB)r�r�r�r�rrrr
rrrrr�s
rc@�eZdZdS)�ProcessTerminatedErrorN�r�r�r�rrrrr(�rc@s"eZdZddd�Zedd��ZdS)�ResultNcCsL||_||_||_t�d|�t�d|�t�d|�|dur!g}||_dS)Nzrc: %sz
stdout: %sz
stderr: %s)r�r�r��	INTEG_LOGr��memory_usage)r�r�r�r�rrrrr�-s
zResult.__init__cCst�|j�Sr?)�json�loadsr�rrrrr8szResult.jsonr?)r�r�r�r��propertyrrrrrr,s
rcCs|�dd�}|�dd�}|S)N�"z\"�')�replace)�commandrrr�_escape_quotes=sr FTcCst��dkr
t|�}dtjvrtjd}ndt�}d||f}t�}t|tj	�r1tj
s1|�|�}t�
d|�tj��}	d|	vrDd|	d<|durJ|}	|durPt}t|tt|d	|	d
�}
|s^|
Sd}|sui}|rjd|i}|
jdi|��\}
}nt|
�\}
}}t|
j|
�|�|�|�|�S)
a]Run an aws command.

    This help function abstracts the differences of running the "aws"
    command on different platforms.

    If collect_memory is ``True`` the the Result object will have a list
    of memory usage taken at 2 second intervals.  The memory usage
    will be in bytes.

    If env_vars is None, this will set the environment variables
    to be used by the aws process.

    If wait_for_finish is False, then the Process object is returned
    to the caller.  It is then the caller's responsibility to ensure
    proper cleanup.  This can be useful if you want to test timeout's
    or how the CLI responds to various signals.

    :type input_data: string
    :param input_data: This string will be communicated to the process through
        the stdin of the process.  It essentially allows the user to
        avoid having to use a file handle to pass information to the process.
        Note that this string is not passed on creation of the process, but
        rather communicated to the process.

    :type input_file: a file handle
    :param input_file: This is a file handle that will act as the
        the stdin of the process immediately on creation.  Essentially
        any data written to the file will be read from stdin of the
        process. This is needed if you plan to stream data into stdin while
        collecting memory.
    �Windows�AWS_TEST_COMMANDz	python %sz%s %szRunning command: %srwrVNT)r�r��stdin�shell�env�inputr)rrr r$r;r8�get_stdout_encodingr�r�	text_typer��encoderr�r�rr�communicate�_wait_and_collect_memr�
returncoderl)r�collect_memory�env_vars�wait_for_finishr��
input_file�aws_command�full_command�stdout_encodingr%�process�memoryr�r�r�rrrr,GsD!




��r,cCsttjdd�}|dur
d}|S)N�encodingr�)�getattr�sys�
__stdout__)r6rrrr'�sr'cCs�t��dkr	t}nt��dkrt}ntdt����g}|��dur>z||j�}Wn	ty2Ynw|�|�|��dus"|��\}}|||fS)Nrrz0Can't collect memory for process on platform %s.)	rr�_get_memory_with_psr5�poll�pidrr�r*)r4�
get_memoryr5�currentr�r�rrrr+�s(���
�
r+cCs`d��}|�t|��t|td�}|��d}|jdks"tt|���t|�	�d��d�dS)Nzps u -p)r�rr��i)
r#r�rErrr*r,rrk�
splitlines)r<�command_list�pr�rrrr:�s
r:c@s�eZdZdZgd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Zd8dd�Zd9dd�Z
d:dd�Zdd�Zdd�Zdd�Zd;d!d"�Zd#d$�Zd;d%d&�Zd;d'd(�Zd)d*�Zd+d,�Zd-d.�Z		 d<d/d0�Z		 d<d1d2�Z		3d=d4d5�Zd6d7�ZdS)>�BaseS3CLICommandz�Base class for aws s3 command.

    This contains convenience functions to make writing these tests easier
    and more streamlined.

    )�SSECustomerAlgorithm�SSECustomerKey�SSECustomerKeyMD5�RequestPayercCs@t�|_tj��|_i|_d|_|jjd|jd�|_|�	�dS)NrQrRrS)
r�files�botocorer!�get_session�regionsrar\rb�extra_setuprrrrr��szBaseS3CLICommand.setUpcC�dSr?rrrrrrL��zBaseS3CLICommand.extra_setupcCs|j��|��dSr?)rHr�extra_teardownrrrrr��s
zBaseS3CLICommand.tearDowncCrMr?rrrrrrO�rNzBaseS3CLICommand.extra_teardowncKs |j�d�}|jdi|��dS)N�response_parser_factoryr)r!r��set_parser_defaults)r�r��factoryrrr�override_parser�sz BaseS3CLICommand.override_parsercCs$|j�||j�}|jjd|d�}|S)NrRrS)rKr<rar!r\)r�rcrarbrrr�create_client_for_bucket�sz)BaseS3CLICommand.create_client_for_bucketcCsh|�||�t|tj�r|���d�}|�||�}|�t|�t|��||kr2|�	d||f�dSdS)Nr�z?Contents for %s/%s do not match (but they have the same length))
�wait_until_key_existsr�rr�r�rl�get_key_contentsr��lenr�)r��bucketr��expected_contents�actual_contentsrrr�assert_key_contents_equal�s
��z*BaseS3CLICommand.assert_key_contents_equalNcCs>|s|j}t|j||�}||j|<|�|j|�|�|�|Sr?)rar^r!rK�
addCleanup�
delete_bucket�wait_bucket_exists)r�r`rarcrrrr^�s

zBaseS3CLICommand.create_bucketr:c	s~��|�}|||d�}|dur|�|�|jdi|��}���j||�i}|r5t�fdd�|��D��}�j|||d�|S)N)rU�Key�Bodyc3s&�|]\}}|�jvr||fVqdSr?)�_PUT_HEAD_SHARED_EXTRAS)r��k�vrrr�	<genexpr>s�
��z.BaseS3CLICommand.put_object.<locals>.<genexpr>)�extra_paramsr)rT�update�
put_objectr\�
delete_key�dict�itemsrU)	r�rc�key_namer��
extra_argsrb�	call_argsr_�extra_head_paramsrrrrg�s&
�
��zBaseS3CLICommand.put_objectr?cCs�|�|�|�|�}|}	|d8}z|j|d�Wn|jjy5|�|�r)Yn|dkr.�t�|�Ynwq
|j�	|d�dS)NTr��rUr)
�remove_all_objectsrTr]�
exceptions�NoSuchBucket�bucket_not_exists�time�sleeprKr�)r�rc�attempts�delayrb�attempts_remainingrrrr]s"


��
zBaseS3CLICommand.delete_bucketcCsb|�|�}|�d�}|j|d�}g}|D]}|dd�|�dg�D�7}q|D]}|�||�q&dS)N�list_objectsrocSsg|]}|d�qS)r_r)r��objrrrr�0sz7BaseS3CLICommand.remove_all_objects.<locals>.<listcomp>�Contents)rT�
get_paginator�paginater<rh)r�rcrb�	paginator�pages�	key_names�pagerkrrrrp*s

�z#BaseS3CLICommand.remove_all_objectscCs|�|�}|j||d�}dS�N�rUr_)rT�
delete_object�r�rcrkrbr_rrrrh4r�zBaseS3CLICommand.delete_keycCs6|�||�|�|�}|j||d�}|d���d�S)Nr�r`r�)rUrT�
get_object�readrlr�rrrrV8s
z!BaseS3CLICommand.get_key_contents�cs8|���}|�d��t|dd�}|���fdd��dS)N�
bucket_existsT)�
min_successes�delay_initial_pollcs�j�d�duS)Nro)�waitr�rc�waiterrrr�Dsz5BaseS3CLICommand.wait_bucket_exists.<locals>.<lambda>)rT�
get_waiter�ConsistencyWaiterr�)r�rcr�rb�consistency_waiterrr�rr^>s

��z#BaseS3CLICommand.wait_bucket_existsc
CsV|�|�}z	|j|d�WdSty*}z|j�d�dkr%WYd}~dS�d}~ww)NroTrZ�404F)rT�head_bucketr	r_r<)r�rcrb�errorrrrrsGs
��z"BaseS3CLICommand.bucket_not_existsc	C�0z|j|||d�WdSttfyYdSw�N)r�TF)rUr	r
�r�rcrkr�rrr�
key_existsQ���zBaseS3CLICommand.key_existsc	Cr�r�)�wait_until_key_not_existsr	r
r�rrr�key_not_existsYr�zBaseS3CLICommand.key_not_existscCs|j��}|dS)N�Buckets)rb�list_buckets)r�r_rrrr�as
zBaseS3CLICommand.list_bucketscCs|�||�}|dS)N�ContentType)�head_object)r�rcrk�parsedrrr�content_type_for_keyesz%BaseS3CLICommand.content_type_for_keycCs|�|�}|j||d�}|Sr�)rTr�r�rrrr�is
zBaseS3CLICommand.head_objectcC�|j||||dd�dS)NT�r��
_wait_for_key�r�rcrkrer�rrrrUn�

�z&BaseS3CLICommand.wait_until_key_existscCr�)NFr�r�r�rrrr�sr�z*BaseS3CLICommand.wait_until_key_not_existsTc
Csb|�|�}|r
|�d�}n|�d�}||d�}|dur |�|�t|�D]
}	|jdi|��q$dS)N�
object_exists�object_not_existsr�r)rTr�rf�ranger�)
r�rcrkrer�rrbr�rd�_rrrr�xs



�zBaseS3CLICommand._wait_for_keycCs^|�|jdd|j|j|jf�|�d|j�|�d|j�|�d|j�|�d|j�dS)NrzNon zero rc (%s) received: %szError:zfailed:zclient errorzserver error)r�r�r�r��assertNotIn)r�rBrrr�assert_no_errors�s�z!BaseS3CLICommand.assert_no_errors�NN)r:N)r?r?)r�)Nr�)Nr�T)r�r�r�r�rar�rLr�rOrSrTr[r^rgr]rprhrVr^rsr�r�r�r�r�rUr�r�r�rrrrrC�sB




	



�
�
�
rCc@r�)�StringIOWithFileNocCsdSr�rrrrr�fileno�szStringIOWithFileNo.filenoN)r�r�r�r�rrrrr��r�r�c@s*eZdZddd�Zedd��Zdd�ZdS)	�TestEventHandlerNcCs||_d|_d|_dSr�)�_handler�_called�__test__)r��handlerrrrr��s
zTestEventHandler.__init__cCs|jSr?)r�rrrr�called�szTestEventHandler.calledcKs(d|_|jdur|jdi|��dSdS)NTr)r�r�)r�r�rrrr��s
�zTestEventHandler.handlerr?)r�r�r�r�rr�r�rrrrr��s


r�c@r)�ConsistencyWaiterExceptionNrrrrrr��rr�c@s.eZdZdZ		d
dd�Zdd	�Zd
d�ZdS)r�a�
    A waiter class for some check to reach a consistent state.

    :type min_successes: int
    :param min_successes: The minimum number of successful check calls to
    treat the check as stable. Default of 1 success.

    :type max_attempts: int
    :param min_successes: The maximum number of times to attempt calling
    the check. Default of 20 attempts.

    :type delay: int
    :param delay: The number of seconds to delay the next API call after a
    failed check call. Default of 5 seconds.
    r��r?FcCs||_||_||_||_dSr?)r��max_attemptsrwr�)r�r�r�rwr�rrrr��s
zConsistencyWaiter.__init__cOs|d}d}|jr
t�|j�||jkr4|d7}||i|��r)|d7}||jkr(dSnt�|j�||jks|�||�}t|��)a�
        Wait until the check succeeds the configured number of times

        :type check: callable
        :param check: A callable that returns True or False to indicate
        if the check succeeded or failed.

        :type args: list
        :param args: Any ordered arguments to be passed to the check.

        :type kwargs: dict
        :param kwargs: Any keyword arguments to be passed to the check.
        rr�N)r�rtrurwr�r��
_fail_messager�)r��checkr�r�rv�	successes�fail_msgrrrr��s

�
�zConsistencyWaiter.waitcCs||f}d|S)Nz/Failed after %s attempts, only had %s successesr)r�rvr��format_argsrrrr��szConsistencyWaiter._fail_messageN)r�r�r?F)r�r�r�r�r�r�r�rrrrr��s
�r�r�)rnro)r�)FNTNN)Rr�r$r8r�rIrtrr�rCr�
contextlib�stringrh�pprintr�
subprocessrrrr�
awscli.compatrr�botocore.sessionr�botocore.exceptionsr	r
�botocore.loadersrI�botocore.awsrequestr�awscli.clidriverr�
awscli.pluginrr
r�PY2�TestCase�assertItemsEqual�assertCountEqual�loaders�Loaderr&�	getLoggerrr-rr r8r4r@�contextmanagerrPr^rFr]rrr��objectr�r�r�r�r�r�r�r�	Exceptionrrr r,r'r+r:rCr�r�r�r�rrrr�<module>s�	




	3
t5;

�EV

Youez - 2016 - github.com/yon3zu
LinuXploit