# Path: xml2dict.py
# class XML2Dict(object):
#     @classmethod
#     def _parse_node(self, node):
#         node_tree = object_dict()
#         # Save attrs and text, hope there will not be a child with same name
#         if node.text:
#             node_tree.value = node.text
#         for (k, v) in node.attrib.items():
#             k, v = self._namespace_split(k, object_dict({'value':v}))
#             node_tree[k] = v
#         # Save childrens
#         for child in iter(node):
#             tag, tree = self._namespace_split(child.tag, self._parse_node(child))
#             if  tag not in node_tree:  # the first time, so store it in dict
#                 node_tree[tag] = tree
#                 continue
#             old = node_tree[tag]
#             if not isinstance(old, list):
#                 node_tree.pop(tag)
#                 node_tree[tag] = [old]  # multi times, so change old dict to a list
#             node_tree[tag].append(tree)  # add the new one
# 
#         return  node_tree
# 
#     @classmethod
#     def _namespace_split(self, tag, value):
#         """
#            Split the tag  '{http://cs.sfsu.edu/csc867/myscheduler}patients'
#              ns = http://cs.sfsu.edu/csc867/myscheduler
#              name = patients
#         """
#         result = re.compile("\{(.*)\}(.*)").search(tag)
#         if result:
#             # print(tag)
#             value.namespace, tag = result.groups()
#         return (tag, value)
# 
#     @classmethod
#     def parse(self, file):
#         """parse a xml file to a dict"""
#         f = open(file, 'r')
#         return self.fromstring(f.read())
# 
#     @classmethod
#     def fromstring(self, s):
#         """parse a string"""
#         t = ET.fromstring(s)
#         root_tag, root_tree = self._namespace_split(t.tag, self._parse_node(t))
#         return object_dict({root_tag: root_tree})
# 
# Path: xml2dict.py
# class object_dict(dict):
#     """object view of dict, you can 
#     >>> a = object_dict()
#     >>> a.fish = 'fish'
#     >>> a['fish']
#     'fish'
#     >>> a['water'] = 'water'
#     >>> a.water
#     'water'
#     >>> a.test = {'value': 1}
#     >>> a.test2 = object_dict({'name': 'test2', 'value': 2})
#     >>> a.test, a.test2.name, a.test2.value
#     (1, 'test2', 2)
#     """
#     def __init__(self, initd = None):
#         if initd is None:
#             initd = {}
#         dict.__init__(self, initd)
# 
#     def __getattr__(self, item):
#         d = self.__getitem__(item)
#         # if value is the only key in object, you can omit it
#         if isinstance(d, dict) and 'value' in d and len(d) == 1:
#             return d['value']
#         else:
#             return d
# 
#     # def __iter__(self):
#     #    yield self
#     #    return
# 
#     def __setattr__(self, item, value):
#         self.__setitem__(item, value)


import math
import os
import os.path as opath
import re
import sys
import time
import locale
import base64
import datetime
import random
import threading
import traceback
    import configparser as ConfigParser
    import ConfigParser
import maclient_player
import maclient_network
import maclient_logging
import maclient_plugin
        import System.Console
                        import maclient_update
from xml2dict import XML2Dict
from xml2dict import object_dict
from cross_platform import *

    def _list_option(self, sec):
        return self.cf.options(sec)

    def _del_option(self, sec, key):
        ret = self.cf.remove_option(sec, key)
        self._request_flush_config()
        return ret

    def _request_flush_config(self, force = False):
        if self.lastflushcfgtime - time.time() > 300 or force:#5分钟写一次
            f = open(self.configfile, "w")
            self.cf.write(f)
            f.flush()
            f.close()
            self.lastflushcfgtime = time.time()

    def _eval_gen(self, streval, repllst = [], super_prefix = None):
        repllst2 = [('HH', "datetime.datetime.now().hour"), ('MM', "datetime.datetime.now().minute"), ('FAIRY_ALIVE', 'self.player.fairy["alive"]'), ('GUILD_ALIVE', "self.player.fairy['guild_alive']"), ('BC%', '1.0*self.player.bc["current"]/self.player.bc["max"]'), ('AP%', '1.0*self.player.ap["current"]/self.player.ap["max"]'), ('BC', 'self.player.bc["current"]'), ('AP', 'self.player.ap["current"]'), ('SUPER', 'self.player.ex_gauge'), ('GOLD', 'self.player.gold'), ('FP', 'self.friendship_point')]
        if streval == '':
            return 'True'
        if super_prefix:
            streval = streval.replace('$.', '%s.'%super_prefix)
        for (i, j) in repllst + repllst2:
            streval = streval.replace(i, j)
        return streval

    def tolist(self, obj):
        if not isinstance(obj, list):
            if isinstance(obj, unicode):

# Path: xml2dict.py
# class XML2Dict(object):
#     @classmethod
#     def _parse_node(self, node):
#         node_tree = object_dict()
#         # Save attrs and text, hope there will not be a child with same name
#         if node.text:
#             node_tree.value = node.text
#         for (k, v) in node.attrib.items():
#             k, v = self._namespace_split(k, object_dict({'value':v}))
#             node_tree[k] = v
#         # Save childrens
#         for child in iter(node):
#             tag, tree = self._namespace_split(child.tag, self._parse_node(child))
#             if  tag not in node_tree:  # the first time, so store it in dict
#                 node_tree[tag] = tree
#                 continue
#             old = node_tree[tag]
#             if not isinstance(old, list):
#                 node_tree.pop(tag)
#                 node_tree[tag] = [old]  # multi times, so change old dict to a list
#             node_tree[tag].append(tree)  # add the new one
# 
#         return  node_tree
# 
#     @classmethod
#     def _namespace_split(self, tag, value):
#         """
#            Split the tag  '{http://cs.sfsu.edu/csc867/myscheduler}patients'
#              ns = http://cs.sfsu.edu/csc867/myscheduler
#              name = patients
#         """
#         result = re.compile("\{(.*)\}(.*)").search(tag)
#         if result:
#             # print(tag)
#             value.namespace, tag = result.groups()
#         return (tag, value)
# 
#     @classmethod
#     def parse(self, file):
#         """parse a xml file to a dict"""
#         f = open(file, 'r')
#         return self.fromstring(f.read())
# 
#     @classmethod
#     def fromstring(self, s):
#         """parse a string"""
#         t = ET.fromstring(s)
#         root_tag, root_tree = self._namespace_split(t.tag, self._parse_node(t))
#         return object_dict({root_tag: root_tree})
# 
# Path: xml2dict.py
# class object_dict(dict):
#     """object view of dict, you can 
#     >>> a = object_dict()
#     >>> a.fish = 'fish'
#     >>> a['fish']
#     'fish'
#     >>> a['water'] = 'water'
#     >>> a.water
#     'water'
#     >>> a.test = {'value': 1}
#     >>> a.test2 = object_dict({'name': 'test2', 'value': 2})
#     >>> a.test, a.test2.name, a.test2.value
#     (1, 'test2', 2)
#     """
#     def __init__(self, initd = None):
#         if initd is None:
#             initd = {}
#         dict.__init__(self, initd)
# 
#     def __getattr__(self, item):
#         d = self.__getitem__(item)
#         # if value is the only key in object, you can omit it
#         if isinstance(d, dict) and 'value' in d and len(d) == 1:
#             return d['value']
#         else:
#             return d
# 
#     # def __iter__(self):
#     #    yield self
#     #    return
# 
#     def __setattr__(self, item, value):
#         self.__setitem__(item, value)


# Path: maclient.py
import math
import os
import os.path as opath
import re
import sys
import time
import locale
import base64
import datetime
import random
import threading
import traceback
    import configparser as ConfigParser
    import ConfigParser
import maclient_player
import maclient_network
import maclient_logging
import maclient_plugin
        import System.Console
                        import maclient_update
from xml2dict import XML2Dict
from xml2dict import object_dict
from cross_platform import *


    def _list_option(self, sec):
        return self.cf.options(sec)

    def _del_option(self, sec, key):
        ret = self.cf.remove_option(sec, key)
        self._request_flush_config()
        return ret

    def _request_flush_config(self, force = False):
        if self.lastflushcfgtime - time.time() > 300 or force:#5分钟写一次
            f = open(self.configfile, "w")
            self.cf.write(f)
            f.flush()
            f.close()
            self.lastflushcfgtime = time.time()

    def _eval_gen(self, streval, repllst = [], super_prefix = None):
        repllst2 = [('HH', "datetime.datetime.now().hour"), ('MM', "datetime.datetime.now().minute"), ('FAIRY_ALIVE', 'self.player.fairy["alive"]'), ('GUILD_ALIVE', "self.player.fairy['guild_alive']"), ('BC%', '1.0*self.player.bc["current"]/self.player.bc["max"]'), ('AP%', '1.0*self.player.ap["current"]/self.player.ap["max"]'), ('BC', 'self.player.bc["current"]'), ('AP', 'self.player.ap["current"]'), ('SUPER', 'self.player.ex_gauge'), ('GOLD', 'self.player.gold'), ('FP', 'self.friendship_point')]
        if streval == '':
            return 'True'
        if super_prefix:
            streval = streval.replace('$.', '%s.'%super_prefix)
        for (i, j) in repllst + repllst2:
            streval = streval.replace(i, j)
        return streval

    def tolist(self, obj):
        if not isinstance(obj, list):
            if isinstance(obj, unicode):

                return [object_dict({'value':obj})]