����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 : 64.57.112.4  /  Your IP : 216.73.216.57
Web Server : Microsoft-IIS/10.0
System : Windows NT WP 10.0 build 17763 (Windows Server 2016) AMD64
User : voguebusinesssuppliers ( 0)
PHP Version : 7.3.3
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  C:/Windows/System32/WindowsPowerShell/v1.0/Modules/RemoteDesktop/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : C:/Windows/System32/WindowsPowerShell/v1.0/Modules/RemoteDesktop/Common.psm1
$CommonTypeDefinition = @"
using System;
using Microsoft.RemoteDesktopServices.Common;
using System.Runtime.InteropServices;
using System.Management;

namespace Microsoft.RemoteDesktopServices.Management
{
    // Common classes

    [Flags]
    public enum RDClientDeviceRedirectionOptions
    {
        None                = 0x0000,
        AudioVideoPlayBack  = 0x0001,
        AudioRecording      = 0x0002,
        COMPort             = 0x0004,
        PlugAndPlayDevice   = 0x0008,
        SmartCard           = 0x0010,
        Clipboard           = 0x0020,
        LPTPort             = 0x0040,
        Drive               = 0x0080,
        TimeZone            = 0x0100
    };    
    
    // Certificate classes
    
    public class Certificate
    {
        public string Subject { get; private set; }
        public string[] SubjectAlternateName { get; private set; }
        public string IssuedBy { get; private set; }
        public string IssuedTo { get; private set; }
        public string ExpiresOn { get; private set; }
        public string Thumbprint { get; private set; }
        public CertificateRole Role { get; private set; }
        public string Level { get; private set; }

        public Certificate(string subject,
                            string[] subjectAlternateName,
                            string issuedBy,
                            string issuedTo,
                            string notAfter,
                            string thumbprint,
                            CertificateRole role,
                            string level)
        {
            Subject = subject;
            SubjectAlternateName = subjectAlternateName;
            IssuedBy = issuedBy;
            IssuedTo = issuedTo;
            ExpiresOn = notAfter;
            Thumbprint = thumbprint;
            Role = role;
            Level = level;
        }
    }
    
    // Deployment classes
    
    public enum DeploymentStatus
    {
        Succeeded,
        SucceededWithErrors,
        Failed
    }
    
    // Deployment Property classes
    
    public enum LicensingMode
    {
        NotConfigured = 5,
        PerDevice = 2,
        PerUser = 4
    }

    public class LicensingSetting
    {
        public LicensingMode Mode { get; private set; }
        public string[] LicenseServer { get; private set; }

        public LicensingSetting (int mode, string[] licenseServers)
        {
            Mode = (LicensingMode) mode;
            LicenseServer = licenseServers;
        }
    }
    
    public enum GatewayUsage
    {
        DoNotUse = 0,
        Custom = 2,
        Automatic = 3
    }
    
    public enum GatewayAuthMode
    {
        Password = 0,
        Smartcard = 1,
        AllowUserToSelectDuringConnection = 4
    }
    
    public class GatewaySettings
    {
        public GatewayUsage GatewayMode { get; private set; }
        
        public GatewaySettings(
            GatewayUsage gatewayMode
            )
        {
            GatewayMode = gatewayMode;
        }
    }

    public class CustomGatewaySettings
    {
        public GatewayUsage GatewayMode { get; private set; }
        public string GatewayExternalFqdn { get; private set; }
        public GatewayAuthMode LogonMethod { get; private set; }
        public bool UseCachedCredentials { get; private set; }
        public bool BypassLocal { get; private set; }
        
        public CustomGatewaySettings(
            GatewayUsage gatewayMode,
            string serverFQDN,
            GatewayAuthMode logonMethod,
            bool useCachedCreds,
            bool bypassLocal
            )
        {
            GatewayMode = gatewayMode;
            GatewayExternalFqdn = serverFQDN;
            LogonMethod = logonMethod;
            UseCachedCredentials = useCachedCreds;
            BypassLocal = bypassLocal;
        }
    }

    // RemoteApp Publishing classes
    
    public enum CommandLineSettingValue
    {
        DoNotAllow = 0,
        Allow = 1,
        Require = 2
    }

    public enum RDCertificateRole
    {
        RDGateway = 0x1,
        RDWebAccess = 0x2,
        RDRedirector = 0x4,
        RDPublishing = 0x8
    }

    public class FileTypeAssociation
    {
        public string FileExtension { get; private set; }
        public string CollectionName { get; private set; }
        public string AppAlias { get; private set; }
        public string Description { get; private set; }
        public bool IsPublished { get; private set; }
        public byte[] IconContents { get; private set; }
        public Int32 IconIndex { get; private set; }
        public string IconPath { get; private set; }
        
        public FileTypeAssociation(string collectionName,
                   string appAlias,
                   string fileExtension,
                   string description,
                   bool isPublished,
                   byte[] iconContents,
                   Int32 iconIndex,
                   string iconPath)
        {
            CollectionName = collectionName;
            AppAlias = appAlias;
            FileExtension = fileExtension;
            Description = description;
            IsPublished = isPublished;
            IconContents = iconContents;
            IconIndex = iconIndex;
            IconPath = iconPath;
        }
    }

    public class RemoteApp
    {
        public string CollectionName { get; private set; }
        public string Alias { get; private set; }
        
        public string DisplayName { get; private set; }
        public string FolderName { get; private set; }
        
        public string FilePath { get; private set; }
        public string FileVirtualPath { get; private set; }
        
        public CommandLineSettingValue CommandLineSetting { get; private set; }
        public string RequiredCommandLine { get; private set; }
        
        public byte[] IconContents { get; private set; }
        public Int32 IconIndex { get; private set; }
        public string IconPath { get; private set; }
        
        public string[] UserGroups { get; private set; }
        public bool ShowInWebAccess { get; private set; }
        
        public RemoteApp(string collectionName,
                         string alias,
                         string displayName,
                         string folderName,
                         string filePath,
                         string fileVirtualPath,
                         CommandLineSettingValue commandLineSetting,
                         string requiredCommandLine,
                         byte[] iconContents,
                         Int32 iconIndex,
                         string iconPath,
                         string[] userGroups,
                         bool showInWebAccess)
        {
            CollectionName = collectionName;
            Alias = alias;
            DisplayName = displayName;
            FolderName = folderName;
            FilePath = filePath;
            FileVirtualPath = fileVirtualPath;
            CommandLineSetting = commandLineSetting;
            RequiredCommandLine = requiredCommandLine;
            IconContents = iconContents;
            IconIndex = iconIndex;
            IconPath = iconPath;
            UserGroups = userGroups;
            ShowInWebAccess = showInWebAccess;
        }
    }

    public class RDEndpoint
    {
        public string RDSHName { get; private set; }
        public string VMHostName { get; private set; }
        public string VMName { get; private set; }
        
        public RDEndpoint(string rdshName,
                                string vmHostName,
                                string vmName)
        {
            RDSHName = rdshName;
            VMHostName = vmHostName;
            VMName = vmName;
        }
    }

    // Remote Desktop Publishing classes
    
    public class RDPublishedRemoteDesktop
    {
        public string CollectionName    {get; private set;}
        public bool   ShowInWebAccess   {get; private set;}

        public RDPublishedRemoteDesktop(
            string collectionName,
            bool   showInWebAccess
            )
        {
            CollectionName = collectionName;
            ShowInWebAccess = showInWebAccess;
        }
    }

    // Remote Session Management classes
    
    public enum SESSION_STATE
    {
        STATE_ACTIVE = 0,
        STATE_CONNECTED,
        STATE_CONNECTQUERY,
        STATE_SHADOW,
        STATE_DISCONNECTED,
        STATE_IDLE,
        STATE_LISTEN,
        STATE_RESET,
        STATE_DOWN,
        STATE_INIT
    }

    public enum COLLECTION_TYPE
    {
        RD_FARM_RDSH = 0,
        RD_FARM_TEMP_VM,
        RD_FARM_MANUAL_PERSONAL_VM,
        RD_FARM_AUTO_PERSONAL_VM,
        RD_FARM_MANUAL_PERSONAL_SESSION,
        RD_FARM_AUTO_PERSONAL_SESSION
    }

    public class RDUserSession
    {
        public string ServerName { get; private set; }
        public UInt32? SessionId { get; private set; }
        public string UserName { get; private set; }
        public string DomainName { get; private set; }
        public string ServerIPAddress { get; private set; }
        public UInt32? TSProtocol { get; private set; }
        public string ApplicationType { get; private set; }
        public UInt32? ResolutionWidth { get; private set; }
        public UInt32? ResolutionHeight { get; private set; }
        public UInt32? ColorDepth { get; private set; }
        public DateTime? CreateTime { get; private set; }
        public DateTime? DisconnectTime { get; private set; }
        public SESSION_STATE? SessionState { get; private set; }

        public string CollectionName { get; private set; }
        public COLLECTION_TYPE? CollectionType { get; private set; }
        public UInt32? UnifiedSessionId { get; private set; }
        public string HostServer { get; private set; }
        public UInt32? IdleTime { get; private set; }

        public bool? RemoteFxEnabled { get; private set; }

        public RDUserSession(
             string serverName,
             UInt32? sessionId,
             string userName,
             string domainName,
             string serverIPAddress,
             UInt32? tsProtocol,
             string applicationType,
             UInt32? resolutionWidth,
             UInt32? resolutionHeight,
             UInt32? colorDepth,
             string createTime,
             string disconnectTime,
             UInt32? sessionState,

             string collectionName,
             UInt32? collectionType,
             UInt32? unifiedSessionId,
             string hostServer,
             UInt32? idleTime,

             bool? remoteFxEnabled
            )
        {
            ServerName = serverName;
            SessionId = sessionId;
            UserName = userName;
            DomainName = domainName;
            ServerIPAddress = serverIPAddress;
            TSProtocol = tsProtocol;
            ApplicationType = applicationType;
            ResolutionWidth = resolutionWidth;
            ResolutionHeight = resolutionHeight;
            ColorDepth = colorDepth;
            CreateTime = (String.IsNullOrEmpty(createTime) ? null : (DateTime?)ManagementDateTimeConverter.ToDateTime(createTime));
            DisconnectTime = (String.IsNullOrEmpty(disconnectTime) ? null : (DateTime?)ManagementDateTimeConverter.ToDateTime(disconnectTime));
            SessionState = (sessionState == null ? null : (SESSION_STATE?)sessionState);

            CollectionName = collectionName;
            CollectionType = (collectionType == null ? null : (COLLECTION_TYPE?)collectionType);
            UnifiedSessionId = unifiedSessionId;
            HostServer = hostServer;
            IdleTime = idleTime;

            RemoteFxEnabled = remoteFxEnabled;
        }
    }

    public class WTSSessionManagement
    {
        public const Int32 ERROR_NOT_FOUND = 1168;

        enum WTS_CONNECTSTATE_CLASS
        {
            WTSActive,
            WTSConnected,
            WTSConnectQuery,
            WTSShadow,
            WTSDisconnected,
            WTSIdle,
            WTSListen,
            WTSReset,
            WTSDown,
            WTSInit
        }

        enum WTS_TYPE_CLASS
        {
            WTSTypeProcessInfoLevel0,
            WTSTypeProcessInfoLevel1,
            WTSTypeSessionInfoLevel1
        }

        [StructLayout(LayoutKind.Sequential)]
        struct WTS_SESSION_INFO_1
        {
            public Int32 ExecEnvId;
            public WTS_CONNECTSTATE_CLASS State;
            public Int32 SessionId;

            [MarshalAs(UnmanagedType.LPStr)]
            public String pSessionName;

            [MarshalAs(UnmanagedType.LPStr)]
            public String pHostName;

            [MarshalAs(UnmanagedType.LPStr)]
            public String pUserName;

            [MarshalAs(UnmanagedType.LPStr)]
            public String pDomainName;

            [MarshalAs(UnmanagedType.LPStr)]
            public String pFarmName;
        }

        [DllImport("wtsapi32.dll", SetLastError = true)]
        static extern bool WTSEnumerateSessionsEx(
                IntPtr hServer,
                [MarshalAs(UnmanagedType.U4)] ref UInt32 pLevel,
                [MarshalAs(UnmanagedType.U4)] UInt32 Filter,
                ref IntPtr ppSessionInfo,
                [MarshalAs(UnmanagedType.U4)] out UInt32 pCount);

        [DllImport("wtsapi32.dll", SetLastError = true)]
        static extern Int32 WTSFreeMemoryEx(WTS_TYPE_CLASS WTSTypeClass, IntPtr pMemory, UInt32 NumberOfEntries);

        [DllImport("wtsapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        static extern IntPtr WTSOpenServer(string pServerName);

        [DllImport("wtsapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        static extern IntPtr WTSOpenServerEx(string pServerName);

        [DllImport("wtsapi32.dll")]
        static extern void WTSCloseServer(IntPtr hServer);

        [DllImport("wtsapi32.dll", SetLastError = true)]
        static extern bool WTSSendMessage(
            IntPtr hServer,
            [MarshalAs(UnmanagedType.I4)] int SessionId,
            String pTitle,
            [MarshalAs(UnmanagedType.U4)] int TitleLength,
            String pMessage,
            [MarshalAs(UnmanagedType.U4)] int MessageLength,
            [MarshalAs(UnmanagedType.U4)] int Style,
            [MarshalAs(UnmanagedType.U4)] int Timeout,
            [MarshalAs(UnmanagedType.U4)] out int pResponse,
            bool bWait);

        [DllImport("wtsapi32.dll", SetLastError = true)]
        static extern bool WTSLogoffSession(IntPtr hServer, int SessionId, bool bWait);

        [DllImport("wtsapi32.dll", SetLastError = true)]
        static extern bool WTSDisconnectSession(IntPtr hServer, int SessionId, bool bWait);

        static Int32 InternalFindSession(IntPtr hServer, int UnifiedSessionId, out WTS_SESSION_INFO_1? Session)
        {
            Int32 retValue = 0;
            UInt32 Level = 1;
            UInt32 Count;
            IntPtr SessionInfo = IntPtr.Zero;
            Session = null;
            Int32 dataSize = Marshal.SizeOf(typeof(WTS_SESSION_INFO_1));

            if (!WTSEnumerateSessionsEx(hServer, ref Level, 0, ref SessionInfo, out Count))
            {
                retValue = Marshal.GetLastWin32Error();
            }
            else
            {
                long currentSession = SessionInfo.ToInt64();

                for (int i = 0; i < Count; i++)
                {
                    WTS_SESSION_INFO_1 si = (WTS_SESSION_INFO_1)Marshal.PtrToStructure((System.IntPtr)currentSession, typeof(WTS_SESSION_INFO_1));
                    currentSession += dataSize;
                    if (si.ExecEnvId == UnifiedSessionId)
                    {
                        Session = si;
                        break;
                    }
                }

                WTSFreeMemoryEx(WTS_TYPE_CLASS.WTSTypeSessionInfoLevel1, SessionInfo, Count);
            }

            return retValue;
        }

        static Int32 InternalOpenServer(string ServerName, int UnifiedSessionId, out IntPtr ServerHandle, out int SessionId)
        {
            Int32 retValue = 0;
            IntPtr hServer;
            int NewSessionId = UnifiedSessionId;
            ServerHandle = IntPtr.Zero;
            SessionId = 0;

            hServer = WTSOpenServerEx(ServerName);
            if (hServer == IntPtr.Zero)
            {
                retValue = Marshal.GetLastWin32Error();
            }
            else
            {
                WTS_SESSION_INFO_1? Session;
                retValue = InternalFindSession(hServer, UnifiedSessionId, out Session);
                if (retValue == 0)
                {
                    if (Session.HasValue)
                    {
                        if (Session.Value.pHostName == null)
                        {
                            NewSessionId = Session.Value.SessionId;
                            WTSCloseServer(hServer);
                            hServer = WTSOpenServer(ServerName);
                            if (hServer == IntPtr.Zero)
                            {
                                retValue = Marshal.GetLastWin32Error();
                            }
                        }
                    }
                    else
                    {
                        retValue = ERROR_NOT_FOUND;
                    }
                }
            }

            if (retValue == 0)
            {
                ServerHandle = hServer;
                SessionId = NewSessionId;
            }

            return retValue;
        }

        public static Int32 SendMessage(string ServerName, int UnifiedSessionId, string MessageTitle, string MessageBody)
        {
            int response = 0;
            IntPtr hServer = IntPtr.Zero;
            int SessionId = 0;
            Int32 retValue = InternalOpenServer(ServerName, UnifiedSessionId, out hServer, out SessionId);

            if (retValue == 0)
            {
                if (!WTSSendMessage(hServer, SessionId, MessageTitle, MessageTitle.Length, MessageBody, MessageBody.Length, 0, 0, out response, false))
                {
                    retValue = Marshal.GetLastWin32Error();
                }
            }

            WTSCloseServer(hServer);
            return retValue;
        }

        public static Int32 LogoffSession(string ServerName, int UnifiedSessionId)
        {
            IntPtr hServer = IntPtr.Zero;
            int SessionId = 0;
            Int32 retValue = InternalOpenServer(ServerName, UnifiedSessionId, out hServer, out SessionId);

            if (retValue == 0)
            {
                if (!WTSLogoffSession(hServer, SessionId, true))
                {
                    retValue = Marshal.GetLastWin32Error();
                }
            }

            WTSCloseServer(hServer);
            return retValue;
        }

        public static Int32 DisconnectSession(string ServerName, int UnifiedSessionId)
        {
            IntPtr hServer = IntPtr.Zero;
            int SessionId = 0;
            Int32 retValue = InternalOpenServer(ServerName, UnifiedSessionId, out hServer, out SessionId);

            if (retValue == 0)
            {
                if (!WTSDisconnectSession(hServer, SessionId, true))
                {
                    retValue = Marshal.GetLastWin32Error();
                }
            }

            WTSCloseServer(hServer);
            return retValue;
        }
    }
    
    // Session Collection Property classes
    
    public class RDSessionHostCollectionGeneralProperties 
    {
        public string CollectionName        { get; private set; }
        public string CollectionDescription { get; set; }
        public string CustomRdpProperty     { get; set; }

        public RDSessionHostCollectionGeneralProperties( 
            string collectionName,
            string collectionDescription,
            string customRdpProperty
            )
        {
            CollectionName        = collectionName;
            CollectionDescription = collectionDescription;
            CustomRdpProperty = customRdpProperty;
        }
    }

    public class RDSessionHostCollectionUserGroupProperties 
    {
        public string   CollectionName { get; private set; }
        public string[] UserGroup      { get; set; }

        public RDSessionHostCollectionUserGroupProperties( 
            string   collectionName,
            string[] userGroup
            )
        {
            CollectionName = collectionName;
            UserGroup      = userGroup;
        }
    }
    
    public enum RDBrokenConnectionAction
    {
        None       = 0,
        Disconnect = 1,
        LogOff     = 2
    };
    
    public class RDSessionHostCollectionConnectionProperties 
    {
        public string                   CollectionName                { get; private set; }
        public int                      DisconnectedSessionLimitMin   { get; set; }
        public RDBrokenConnectionAction BrokenConnectionAction        { get; set; }
        public bool                     TemporaryFoldersDeletedOnExit { get; set; }
        public bool                     AutomaticReconnectionEnabled  { get; set; }
        public int                      ActiveSessionLimitMin         { get; set; }
        public int                      IdleSessionLimitMin           { get; set; }
        
        public RDSessionHostCollectionConnectionProperties( 
            string                   collectionName,
            int                      disconnectedSessionLimitMin,
            RDBrokenConnectionAction brokenConnectionAction,
            bool                     temporaryFoldersDeletedOnExit,
            bool                     automaticReconnectionEnabled,
            int                      activeSessionLimitMin,
            int                      idleSessionLimitMin
            )
        {
            CollectionName                = collectionName;
            DisconnectedSessionLimitMin   = disconnectedSessionLimitMin;
            BrokenConnectionAction        = brokenConnectionAction;
            TemporaryFoldersDeletedOnExit = temporaryFoldersDeletedOnExit;
            if (BrokenConnectionAction == RDBrokenConnectionAction.Disconnect)
            {
                AutomaticReconnectionEnabled = automaticReconnectionEnabled;
            }
            else
            {
                AutomaticReconnectionEnabled = false;
            }
            ActiveSessionLimitMin = activeSessionLimitMin;
            IdleSessionLimitMin   = idleSessionLimitMin;
        }
    }

    public class RDSessionHostCollectionUserProfileDiskProperties 
    {
        public string     CollectionName           { get; private set; }
        public string[]   IncludeFolderPath        { get; set; }
        public string[]   ExcludeFolderPath        { get; set; }
        public string[]   IncludeFilePath          { get; set; }
        public string[]   ExcludeFilePath          { get; set; }
        public string     DiskPath                 { get; set; }
        public bool       EnableUserProfileDisk    { get; set; }
        public int        MaxUserProfileDiskSizeGB { get; set; }
                        
        public RDSessionHostCollectionUserProfileDiskProperties( 
            string     collectionName,
            string[]   includeFolderPath,
            string[]   excludeFolderPath,
            string[]   includeFilePath,
            string[]   excludeFilePath,
            string     diskPath,
            bool       enableUserProfileDisk,
            int        maxUserProfileDiskSizeGB
            )
        {
            CollectionName           = collectionName;
            IncludeFolderPath        = includeFolderPath;
            ExcludeFolderPath        = excludeFolderPath;
            IncludeFilePath          = includeFilePath;
            ExcludeFilePath          = excludeFilePath;
            DiskPath                 = diskPath;
            EnableUserProfileDisk    = enableUserProfileDisk;
            MaxUserProfileDiskSizeGB = maxUserProfileDiskSizeGB;
        }
    }
    
    public enum RDEncryptionLevel
    {
        None             = 0,
        Low              = 1,
        ClientCompatible = 2,
        High             = 3,
        FipsCompliant    = 4
    };
    
    public enum RDSecurityLayer
    {
        RDP       = 0,
        Negotiate = 1,
        SSL       = 2
    };

    public class RDSessionHostCollectionSecurityProperties 
    {
        public string             CollectionName       { get; private set; }
        public bool               AuthenticateUsingNLA { get; set; }
        public RDEncryptionLevel  EncryptionLevel      { get; set; }
        public RDSecurityLayer    SecurityLayer        { get; set; }
        
        public RDSessionHostCollectionSecurityProperties( 
            string            collectionName,
            bool              authenticateUsingNLA,
            RDEncryptionLevel encryptionLevel,
            RDSecurityLayer   securityLayer
            )
        {
            CollectionName       = collectionName;
            AuthenticateUsingNLA = authenticateUsingNLA;
            EncryptionLevel      = encryptionLevel;
            SecurityLayer        = securityLayer;
        }
    }
    
    public class RDSessionHostCollectionLoadBalancingInstance 
    {
        public string CollectionName { get; private set; }
        public int    RelativeWeight { get; set; }
        public int    SessionLimit   { get; set; }
        public string SessionHost    { get; set; }
                
        public RDSessionHostCollectionLoadBalancingInstance( 
            string collectionName,
            int    relativeWeight,
            int    sessionLimit,
            string sessionHost
            )
        {
            CollectionName = collectionName;
            RelativeWeight = relativeWeight;
            SessionLimit   = sessionLimit;
            SessionHost    = sessionHost;
        }
    }

    public class RDSessionHostCollectionClientProperties 
    {
        public string                           CollectionName                 { get; private set; }
        public RDClientDeviceRedirectionOptions ClientDeviceRedirectionOptions { get; set; }
        public int                              MaxRedirectedMonitors          { get; set; }
        public int                              ClientPrinterRedirected        { get; set; }
        public int                              RDEasyPrintDriverEnabled       { get; set; }
        public int                              ClientPrinterAsDefault         { get; set; }
        
        public RDSessionHostCollectionClientProperties( 
            string                           collectionName,
            RDClientDeviceRedirectionOptions clientDeviceRedirectionOptions,
            int                              maxRedirectedMonitors,
            int                              clientPrinterRedirected,
            int                              rdEasyPrintDriverEnabled,
            int                              clientPrinterAsDefault
            )
        {
            CollectionName                 = collectionName;
            ClientDeviceRedirectionOptions = clientDeviceRedirectionOptions;
            MaxRedirectedMonitors          = maxRedirectedMonitors;
            ClientPrinterRedirected        = clientPrinterRedirected;
            RDEasyPrintDriverEnabled       = rdEasyPrintDriverEnabled;
            ClientPrinterAsDefault         = clientPrinterAsDefault;
        }
    }

    // Session Desktop Collection classes

    public enum RDSessionCollectionType {
        Unknown    = 0,
        PooledUnmanaged    = 1,
        PersonalUnmanaged  = 2
    }
    
    public class RDSessionCollection 
    {
        public string   CollectionName        { get; private set; }
        public string   CollectionAlias       { get; private set; }
        public string   CollectionDescription { get; set; }
        public int      Size                  { get; private set; }
        public string   ResourceType          { get; private set; }

        public bool     AutoAssignPersonalDesktop { get; private set; }
        public bool     GrantAdministrativePrivilege{get; private set;}

        public RDSessionCollectionType CollectionType { get; private set; }

        public RDSessionCollection( 
            string   collectionName, 
            string   collectionAlias,
            string   collectionDescription,
            int      size,
            string   resourceType,
            RDSessionCollectionType collectionType,
            bool     autoAssignPersonalDesktop,
            bool     grantAdministrativePrivilege
            )
        {
            CollectionName        = collectionName;
            CollectionAlias       = collectionAlias;
            CollectionDescription = collectionDescription;
            Size                  = size;
            ResourceType          = resourceType;
            CollectionType        = collectionType;
            AutoAssignPersonalDesktop = autoAssignPersonalDesktop;
            GrantAdministrativePrivilege = grantAdministrativePrivilege;
        }
    }

    public enum RDServerNewConnectionAllowed
    {
        Yes            = 0,
        NotUntilReboot = 1,
        No             = 2
    };

    public class RDServer
    {
        public string                       CollectionName          { get; private set; }
        public string                       SessionHost             { get; private set; }
        public RDServerNewConnectionAllowed NewConnectionAllowed    { get; private set; }

        public RDServer( 
            string                       collectionName,
            string                       sessionHost, 
            RDServerNewConnectionAllowed newConnectionAllowed
            )
        {
            CollectionName          = collectionName;
            SessionHost             = sessionHost;
            NewConnectionAllowed    = newConnectionAllowed;
        }
    }
    
    // Start Menu Application classes
    
    public class StartMenuApp
    {
        public string CollectionName { get; private set; }
        public string DisplayName { get; private set; }
        public string FilePath { get; private set; }
        public string FileVirtualPath { get; private set; }
        public string CommandLineArguments { get; private set; }
        
        public byte[] IconContents { get; private set; }
        public Int32 IconIndex { get; private set; }
        public string IconPath { get; private set; }
        
        public StartMenuApp(string collectionName,
                            string displayName,
                            string filePath,
                            string fileVirtualPath,
                            string commandLineArguments,
                            byte[] iconContents,
                            Int32 iconIndex,
                            string iconPath)
        {
            CollectionName = collectionName;
            DisplayName = displayName;
            FilePath = filePath;
            FileVirtualPath = fileVirtualPath;
            CommandLineArguments = commandLineArguments;
            IconContents = iconContents;
            IconIndex = iconIndex;
            IconPath = iconPath;
        }
    }

    // Virtual Desktop Collection classes
    
    public enum VirtualDesktopStorageType
    {
        LocalStorage = 1,
        CentralSmbShareStorage = 2,
        CentralSanStorage = 3
    }

    public enum RDVirtualDesktopCollectionType
    {
        Unknown            = 0,
        PooledManaged      = 1,
        PooledUnmanaged    = 2,
        PersonalManaged    = 3,
        PersonalUnmanaged  = 4
    }
    
    public enum VirtualDesktopCollectionUpdateStatus
    {
        INITIALIZED = 0,
        SUBMITTED = 1,
        UPDATE_STARTED = 2,
        FORCE_LOGOFF_STARTED = 3,
        UPDATE_COMPLETE = 4,
        UPDATE_FAILED = 5,
        UPDATE_CANCELLED = 6
    }

    public enum VirtualDesktopCollectionJobStatus
    {
        UNKNOWN = 0,
        POOL_CREATED = 1,
        CREATE_VIRTUAL_DESKTOP_INPROGRESS = 2,
        ADD_VIRTUAL_DESKTOP_INPROGRESS = 3,
        UPDATE_VIRTUAL_DESKTOP_INPROGRESS = 4,
        DELETE_VIRTUAL_DESKTOP_INPROGRESS = 5,
        UPDATE_SCHEDULED = 6,
        UPDATE_FAILED = 7,
        UPDATE_CANCELLED = 8,
        JOB_COMPLETED = 10,
        CANCEL_INPROGRESS = 11,
        JOB_ABORTED = 12,
        EXPORT_INPROGRESS = 13
    }

    public class RDVirtualDesktopCollectionJobStatus
    {
        public String CollectionName{ get; private set; }
        public VirtualDesktopCollectionJobStatus Status{ get; private set; }
        public DateTime StartTime{ get; private set; }
        public DateTime LastModifiedTime{ get; private set; }
        public uint TotalVirtualDesktop{ get; private set; }
        public string PercentCompleted{ get; private set; }
        public uint FailedVirtualDesktop{ get; private set; }
        public VirtualDesktopJobStatus[] VirtualDesktopStatus{ get; private set; }

        public RDVirtualDesktopCollectionJobStatus(
            String collectionName,
            VirtualDesktopCollectionJobStatus status,
            DateTime startTime,
            DateTime lastModTime,
            uint totalDesktop,
            string completed,
            uint failed,
            VirtualDesktopJobStatus[] virtualDesktopStatus
        )
        {
            CollectionName=collectionName;
            Status=status;
            StartTime=startTime;
            LastModifiedTime=lastModTime;
            TotalVirtualDesktop=totalDesktop;
            PercentCompleted=completed;
            FailedVirtualDesktop=failed;
            VirtualDesktopStatus=virtualDesktopStatus;
        }
    }

    public class RDVirtualDesktopCollectionUpdateJobStatus
    {
        public String CollectionName{ get; private set; }
        public VirtualDesktopCollectionJobStatus Status{ get; private set; }
        public DateTime StartTime{ get; private set; }
        public DateTime ForceLogoffTime{ get; private set; }

        public RDVirtualDesktopCollectionUpdateJobStatus(
            String collectionName,
            VirtualDesktopCollectionJobStatus status,
            DateTime startTime,
            DateTime logoffTime)
        {
            CollectionName=collectionName;
            Status=status;
            StartTime=startTime;
            ForceLogoffTime=logoffTime;
        }
    }

    public class RDVirtualDesktopCollectionExportStatus
    {
        public String CollectionName{ get; private set; }
        public VirtualDesktopCollectionJobStatus Status{ get; private set; }
        public String VirtualDesktopTemplateName{ get; private set; }

        public RDVirtualDesktopCollectionExportStatus(
            String collectionName,
            String templateVmName
            )
        {
            CollectionName=collectionName;
            VirtualDesktopTemplateName=templateVmName;
            Status = VirtualDesktopCollectionJobStatus.EXPORT_INPROGRESS;
        }
    }

    public class RDVirtualDesktopCollection
    {
        public string   CollectionName { get; private set; }
        public string   CollectionAlias { get; private set; }
        public RDVirtualDesktopCollectionType Type { get; private set; }
        public string   Description { get; private set; }
        public bool     ShowInWebAccess{get; private set;}
        public bool     AutoAssignPersonalDesktop{get; private set;}
        public bool     GrantAdministrativePrivilege{get; private set;}
        public bool     VirtualDesktopRollback{get; private set;}
        public string[] Users { get; private set; }
        public uint     Size{get; private set;}
        public uint     PercentInUse{get; private set;}

        public RDVirtualDesktopCollection( 
            string   alias, 
            string   name, 
            string   description,
            RDVirtualDesktopCollectionType type,
            bool     showInPortal,
            bool     autoAssign,
            bool     userAdmin,
            bool     rollback,
            string[]    users,
            uint     size,
            uint     percentInUse
            )
        {
            CollectionAlias = alias;
            CollectionName = name;
            Description = description;
            Type = type;
            ShowInWebAccess=showInPortal;
            AutoAssignPersonalDesktop=autoAssign;
            GrantAdministrativePrivilege=userAdmin;
            VirtualDesktopRollback=rollback;
            Users = users;
            Size=size;
            PercentInUse=percentInUse;
        }
    }

    public enum VirtualDesktopState : uint
    {
        UNKNOWN = 0,
        RESUMING = 32777,
        RUNNING = 2,
        SAVED = 6,
        STOPPED = 3
    }

    public enum VirtualDesktopProvisioningStatus : uint
    {
        UNKNOWN = 0,
        SUCCESS = 2,
        FAILED = 3
    }

    public class RDVirtualDesktop
    {
        public string VirtualDesktopName {get; private set;}
        public string CollectionName {get; private set;}
        public string HostName {get; private set;}
        public VirtualDesktopState State {get; private set;}
        public VirtualDesktopProvisioningStatus ProvisioningStatus {get; private set;}

        public RDVirtualDesktop( 
            string   name,
            string   collectionName, 
            string   hostName, 
            uint     vmState,
            uint     provisioningStatus
            )
        {
            VirtualDesktopName = name;
            CollectionName = collectionName;
            HostName = hostName;
            State = VirtualDesktopState.UNKNOWN;
            switch(vmState)
            {
                case (uint)VirtualDesktopState.RESUMING:
                    State = VirtualDesktopState.RESUMING;
                    break;
                case (uint)VirtualDesktopState.RUNNING:
                    State = VirtualDesktopState.RUNNING;
                    break;
                case (uint)VirtualDesktopState.SAVED:
                    State = VirtualDesktopState.SAVED;
                    break;
                case (uint)(VirtualDesktopState.STOPPED):
                    State = VirtualDesktopState.STOPPED;
                    break;
            }
            ProvisioningStatus = VirtualDesktopProvisioningStatus.UNKNOWN;
            switch(provisioningStatus)
            {
                case (uint)VirtualDesktopProvisioningStatus.SUCCESS:
                    ProvisioningStatus = VirtualDesktopProvisioningStatus.SUCCESS;
                    break;
                case (uint)VirtualDesktopProvisioningStatus.FAILED:
                    ProvisioningStatus = VirtualDesktopProvisioningStatus.FAILED;
                    break;
            }
        }
    }

    public class RDPersonalVirtualDesktopAssignment
    {
        public string VirtualDesktopName{get; private set;}
        public string User{get; private set;}
        public RDPersonalVirtualDesktopAssignment(
            string   virtDesktopName, 
            string   user
            )
        {
            VirtualDesktopName = virtDesktopName;
            User = user;
        }
    }

    public class RDPersonalSessionDesktopAssignment
    {
        public string CollectionName{get; private set;}
        public string DesktopName{get; private set;}
        public string User{get; private set;}
        public RDPersonalSessionDesktopAssignment(
            string   InCollectionName,
            string   InDesktopName, 
            string   Inuser
            )
        {
            CollectionName = InCollectionName;
            DesktopName = InDesktopName;
            User = Inuser;
        }
    }


    // Virtual Desktop Collection Properties classes

    public class RDVirtualDesktopCollectionGeneralProperties 
    {
        public string CollectionDescription { get; private set; }
        public RDVirtualDesktopCollectionType CollectionType { get; private set; }
        public bool AutoAssignPersonalDesktop { get; private set; }
        public Int32 SaveDelayMinutes { get; private set; }
        public string CustomRdpProperty { get; private set; }

        public RDVirtualDesktopCollectionGeneralProperties( 
            string collectionDescription,
            bool autoAssignPersonalDesktop,
            RDVirtualDesktopCollectionType collectionType,
            Int32 saveDelay,
            string customRdpProperty
            )
        {
            CollectionDescription = collectionDescription;
            AutoAssignPersonalDesktop = autoAssignPersonalDesktop;
            CollectionType = collectionType;
            SaveDelayMinutes = saveDelay;
            CustomRdpProperty = customRdpProperty;
        }
    }
  
    public class RDVirtualDesktopCollectionUserProfileDisksProperties 
    {
        public string[]   IncludeFolderPath      { get; private set; }
        public string[]   ExcludeFolderPath      { get; private set; }
        public string[]   IncludeFilePath        { get; private set; }
        public string[]   ExcludeFilePath        { get; private set; }
        public string     DiskPath               { get; private set; }
        public bool       EnableUserProfileDisks { get; private set; }
        public int        MaxUserProfileDiskSizeGB { get; private set; }
                        
        public RDVirtualDesktopCollectionUserProfileDisksProperties( 
            string[]   includeFolderPath,
            string[]   excludeFolderPath,
            string[]   includeFilePath,
            string[]   excludeFilePath,
            string     diskLocation,
            bool       enableUserProfileDisks,
            int        maxUserProfileDiskSizeGB
            )
        {
            IncludeFolderPath = includeFolderPath;
            ExcludeFolderPath = excludeFolderPath;
            IncludeFilePath = includeFilePath;
            ExcludeFilePath = excludeFilePath;
            DiskPath = diskLocation;
            EnableUserProfileDisks = enableUserProfileDisks;
            MaxUserProfileDiskSizeGB = maxUserProfileDiskSizeGB;
        }
    }

    public class RDVirtualDesktopCollectionClientProperties 
    {
        public RDClientDeviceRedirectionOptions   ClientDeviceRedirectionOptions  { get; private set; }
        public bool  RedirectAllMonitors { get; private set; }
        public bool  RedirectClientPrinter   { get; private set; }
        
        public RDVirtualDesktopCollectionClientProperties( 
            RDClientDeviceRedirectionOptions   clientDeviceRedirectionOptions,
            bool  redirectAllMonitors,
            bool  redirectClientPrinter
            )
        {
            ClientDeviceRedirectionOptions = clientDeviceRedirectionOptions;
            RedirectAllMonitors = redirectAllMonitors;
            RedirectClientPrinter = redirectClientPrinter;
        }
    }
    
    public class RDVirtualDesktopCollectionVirtualDesktopsProperties
    {
        public string Domain { get; private set; }
        public string OU { get; private set; }
        public VirtualDesktopStorageType StorageType { get; private set; }
        public string CentralStoragePath { get; private set; }
        public string LocalStoragePath { get; private set; }
        public string VirtualDesktopTemplateName { get; private set; }
        public string VirtualDesktopTemplateHostServer{ get; private set; }
        public string VirtualDesktopTemplateExportPath { get; private set; }
        public string VirtualDesktopNamePrefix { get; private set; }
        public uint   VirtualDesktopNamePostfixStartIndex { get; private set; }
        
        public RDVirtualDesktopCollectionVirtualDesktopsProperties(
            string domain,
            string ou,
            VirtualDesktopStorageType storageType,
            string centralStorageLocation,
            string localVMCreationLocation,
            string virtualDesktopTemplateName,
            string virtualDesktopTemplateHostServer,
            string virtualDesktopTemplateExportLocation,
            string virtualDesktopNamePrefix,
            uint   virtualDesktopNamePostfixStartIndex
            )
        {
            Domain = domain;
            OU = ou;
            StorageType = storageType;
            CentralStoragePath = centralStorageLocation;
            LocalStoragePath = localVMCreationLocation;
            VirtualDesktopTemplateName = virtualDesktopTemplateName;
            VirtualDesktopTemplateHostServer = virtualDesktopTemplateHostServer;
            VirtualDesktopTemplateExportPath = virtualDesktopTemplateExportLocation;
            VirtualDesktopNamePrefix = virtualDesktopNamePrefix;
            VirtualDesktopNamePostfixStartIndex = virtualDesktopNamePostfixStartIndex;
        }
    }

    public enum RDPatchStatus
    {
        Unknown,
        Searching,
        Downloading,
        Applying,
        Rebooting,
        Rebooted,
        Success,
        Failure,
        Timeout
    }

    public class RDPersonalVirtualDesktopPatchSchedule
    {
        public string VirtualDesktopName { get; private set; }
        public byte[] Context { get; private set; }
        public DateTime Deadline { get; private set; }
        public DateTime StartTime  { get; private set; }
        public DateTime EndTime  { get; private set; }
        public string ID  { get; private set; }
        public string Label  { get; private set; }
        public string Plugin  { get; private set; }
        public RDPatchStatus   PatchStatus   { get; private set; }
        
        public RDPersonalVirtualDesktopPatchSchedule(
            string virtualDesktopName,
            byte[] context,
            DateTime deadline,
            DateTime startTime,
            DateTime endTime,
            string id,
            string label,
            string plugin,
            RDPatchStatus   patchStatus
            )
        {
            VirtualDesktopName = virtualDesktopName;
            Context = context;
            Deadline = deadline;
            StartTime = startTime;
            EndTime = endTime;
            ID = id;
            Label = label;
            Plugin = plugin;
            PatchStatus = patchStatus;
        }
    }

    // Workspace Management classes

    public class WorkspaceClass
    {
        public string WorkspaceID   {get; private set;}
        public string WorkspaceName {get; private set;}

        public WorkspaceClass(
            string wkspID,
            string wkspName
            )
        {
            WorkspaceID = wkspID;
            WorkspaceName = wkspName;
        }            
    }

    public class RDDeploymentServer
    {
        public string Server { get; private set; }
        public string[] Roles { get; private set; }

        public RDDeploymentServer(
                            string server,
                            string[] roles
                            )
        {
            Server = server;
            Roles = roles;
        }
    }

    public class RDVirtualDesktopConcurrency
    {
        public string FQDN { get; private set; }
        public int? Concurrency { get; private set; }

        public RDVirtualDesktopConcurrency(
            string fqdn,
            int? concurrency
            )
        {
            FQDN = fqdn;
            Concurrency = concurrency;
        }
    }

    public class RDVirtualDesktopIdleCount
    {
        public string FQDN { get; private set; }
        public int? Count { get; private set; }

        public RDVirtualDesktopIdleCount(
            string fqdn,
            int? count
            )
        {
            FQDN = fqdn;
            Count = count;
        }
    }

    public enum RDSH_TARGET_STATE
    {
        TARGET_UNKNOWN = 1,
        TARGET_INITIALIZING = 2,
        TARGET_RUNNING = 3,
        TARGET_DOWN = 4,
        TARGET_HIBERNATED =5 ,
        TARGET_STOPPED = 7,
        TARGET_INVALID = 8,
        TARGET_STARTING = 9,
        TARGET_STOPPING = 10
    }
}
"@

# Create all types for the module, as defined above.
Add-Type -TypeDefinition $CommonTypeDefinition -ReferencedAssemblies @("Microsoft.RemoteDesktopServices.Management.Activities","System.Management")

Youez - 2016 - github.com/yon3zu
LinuXploit