From a7b4b68ed96eae8082e668f8e4cb520aa066e0c3 Mon Sep 17 00:00:00 2001
From: Evennia docbuilder action Feature: New Feature: Properly update Evennia’s screen width when client
+changes width (assuming client supports NAWS properly) (michaelfaith84) Fix: Fix rate in Trait contribs not updating after reload (jaborsh) Fix: Fix traceback in EvEditor when searching with malformed regex (chiizujin) Fix: Superuser could break wilderness contrib exits (t34lbytes) Fix: EvEditor would not correctly show search&replace feedback
+when replacing colors (Chiizujin) Fix: Dig/tunnel commands didn’t echo the typeclass of the newly
+created room properly (chiizujin) [Docs]: Doc fixes (Griatch, chiizujin)exit_order kwarg to
DefaultObject.get_display_exits to easier customize the order in which
standard exits are displayed in a room (chiizujin). This allows for a single string to echo differently
depending on who sees it, and also to reference other people in the same way.you_obj.get_display_name(looker=receiver)
$You([key]) - same as $you but always capitalized.
$conj(verb) (code) - conjugates a verb
-between 2nd person presens to 3rd person presence depending on who
+
$conj(verb [,key]) (code) - conjugates a verb
+between 2nd person presence to 3rd person presence depending on who
sees the string. For example "$You() $conj(smiles)". will show as “You smile.” and “Tom smiles.” depending
on who sees it. This makes use of the tools in evennia.utils.verb_conjugation
to do this, and only works for English verbs.
$pron(pronoun [,options]) (code) - Dynamically
+
$pron(pronoun [,options] [,key]) (code) - Dynamically
map pronouns (like his, herself, you, its etc) between 1st/2nd person to 3rd person.
$pconj(verb, [,key]) (code) - conjugates
+a verb between 2nd and 3rd person, like $conj, but for pronouns instead of nouns to account for plural
+gendering. For example "$Pron(you) $pconj(smiles)" will show to others as “He smiles” for a gender of “male”, or
+“They smile” for a gender of “plural”.
aliases = ['l', 'ls']¶aliases = ['ls', 'l']¶
search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}¶search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}¶
aliases = ['pemit', 'remit']¶aliases = ['remit', 'pemit']¶
search_index_entry = {'aliases': 'pemit remit', 'category': 'admin', 'key': 'emit', 'no_prefix': ' pemit remit', 'tags': '', 'text': '\n admin command for emitting message to multiple objects\n\n Usage:\n emit[/switches] [<obj>, <obj>, ... =] <message>\n remit [<obj>, <obj>, ... =] <message>\n pemit [<obj>, <obj>, ... =] <message>\n\n Switches:\n room - limit emits to rooms only (default)\n accounts - limit emits to accounts only\n contents - send to the contents of matched objects too\n\n Emits a message to the selected objects or to\n your immediate surroundings. If the object is a room,\n send to its contents. remit and pemit are just\n limited forms of emit, for sending to rooms and\n to accounts respectively.\n '}¶search_index_entry = {'aliases': 'remit pemit', 'category': 'admin', 'key': 'emit', 'no_prefix': ' remit pemit', 'tags': '', 'text': '\n admin command for emitting message to multiple objects\n\n Usage:\n emit[/switches] [<obj>, <obj>, ... =] <message>\n remit [<obj>, <obj>, ... =] <message>\n pemit [<obj>, <obj>, ... =] <message>\n\n Switches:\n room - limit emits to rooms only (default)\n accounts - limit emits to accounts only\n contents - send to the contents of matched objects too\n\n Emits a message to the selected objects or to\n your immediate surroundings. If the object is a room,\n send to its contents. remit and pemit are just\n limited forms of emit, for sending to rooms and\n to accounts respectively.\n '}¶
get_object_typeclass(obj_type: str = 'object', typeclass: str = None, method: str = 'cmd_create', **kwargs) → tuple[source]¶This hook is called by build commands to determine which typeclass to use for a specific purpose. For instance, -when using dig, the system can use this to autodetect which kind of Room typeclass to use based on where the -builder is currently located.
-which accepts the same API as DefaultObject.create(), build commands and other places should take it.
-This hook is called by build commands to determine which typeclass to use for a specific +purpose.
obj_type (str, optional) – The type of object that is being created. Defaults to “object”. Evennia provides -“room”, “exit”, and “character” by default, but this can be extended.
typeclass (str, optional) – The typeclass that was requested by the player. Defaults to None. -Can also be an actual class.
obj_type (str, optional) – The type of object that is being created. Defaults to +“object”. Evennia provides “room”, “exit”, and “character” by default, but this can be +extended.
typeclass (str, optional) – The typeclass that was requested by the player. Defaults to +None. Can also be an actual class.
method (str, optional) – The method that is calling this hook. Defaults to “cmd_create”. Others are “cmd_dig”, “cmd_open”, “cmd_tunnel”, etc.
results_tuple (tuple[Optional[Builder], list[str]]) –
+tuple –
errors. (which might be empty.)
+empty.)
Notes
+Although intended to be used with typeclasses, as long as this hook returns a class with +a create method, which accepts the same API as DefaultObject.create(), build commands +and other places should take it. While not used by default, one could picture using this +for things like autodetecting which room to build next based on the current location.
aliases = ['@type', '@update', '@typeclasses', '@swap', '@parent']¶aliases = ['@swap', '@update', '@type', '@parent', '@typeclasses']¶
search_index_entry = {'aliases': '@type @update @typeclasses @swap @parent', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass type update typeclasses swap parent', 'tags': '', 'text': "\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] <object> [= typeclass.path]\n typeclass/prototype <object> = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n "}¶search_index_entry = {'aliases': '@swap @update @type @parent @typeclasses', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass swap update type parent typeclasses', 'tags': '', 'text': "\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] <object> [= typeclass.path]\n typeclass/prototype <object> = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n "}¶
aliases = ['l', 'ls']¶aliases = ['ls', 'l']¶
search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look <obj>\n look *<account>\n\n Observes your location or objects in your vicinity.\n '}¶search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look <obj>\n look *<account>\n\n Observes your location or objects in your vicinity.\n '}¶
aliases = ['i', 'inv']¶aliases = ['inv', 'i']¶
search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}¶search_index_entry = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}¶
aliases = ['hierarchy', 'groups']¶aliases = ['groups', 'hierarchy']¶
search_index_entry = {'aliases': 'hierarchy groups', 'category': 'general', 'key': 'access', 'no_prefix': ' hierarchy groups', 'tags': '', 'text': '\n show your current game access\n\n Usage:\n access\n\n This command shows you the permission hierarchy and\n which permission groups you are a member of.\n '}¶search_index_entry = {'aliases': 'groups hierarchy', 'category': 'general', 'key': 'access', 'no_prefix': ' groups hierarchy', 'tags': '', 'text': '\n show your current game access\n\n Usage:\n access\n\n This command shows you the permission hierarchy and\n which permission groups you are a member of.\n '}¶
Edit the help database.
[= <text or new category>]
+[= <text or new value>]
If not assigning a category, the settings.DEFAULT_HELP_CATEGORY category will be used. If no lockstring is specified, everyone will be able to read @@ -482,7 +484,7 @@ the user will be able to enter a partial match to access it.
switch_options = ('edit', 'replace', 'append', 'extend', 'category', 'delete')¶switch_options = ('edit', 'replace', 'append', 'extend', 'category', 'locks', 'delete')¶
search_index_entry = {'aliases': '', 'category': 'building', 'key': 'sethelp', 'no_prefix': ' ', 'tags': '', 'text': "\n Edit the help database.\n\n Usage:\n sethelp[/switches] <topic>[[;alias;alias][,category[,locks]]\n [= <text or new category>]\n Switches:\n edit - open a line editor to edit the topic's help text.\n replace - overwrite existing help topic.\n append - add text to the end of existing topic with a newline between.\n extend - as append, but don't add a newline.\n category - change category of existing help topic.\n delete - remove help topic.\n\n Examples:\n sethelp lore = In the beginning was ...\n sethelp/append pickpocketing,Thievery = This steals ...\n sethelp/replace pickpocketing, ,attr(is_thief) = This steals ...\n sethelp/edit thievery\n sethelp/category thievery = classes\n\n If not assigning a category, the `settings.DEFAULT_HELP_CATEGORY` category\n will be used. If no lockstring is specified, everyone will be able to read\n the help entry. Sub-topics are embedded in the help text.\n\n Note that this cannot modify command-help entries - these are modified\n in-code, outside the game.\n\n # SUBTOPICS\n\n ## Adding subtopics\n\n Subtopics helps to break up a long help entry into sub-sections. Users can\n access subtopics with |whelp topic/subtopic/...|n Subtopics are created and\n stored together with the main topic.\n\n To start adding subtopics, add the text '# SUBTOPICS' on a new line at the\n end of your help text. After this you can now add any number of subtopics,\n each starting with '## <subtopic-name>' on a line, followed by the\n help-text of that subtopic.\n Use '### <subsub-name>' to add a sub-subtopic and so on. Max depth is 5. A\n subtopic's title is case-insensitive and can consist of multiple words -\n the user will be able to enter a partial match to access it.\n\n For example:\n\n | Main help text for <topic>\n |\n | # SUBTOPICS\n |\n | ## about\n |\n | Text for the '<topic>/about' subtopic'\n |\n | ### more about-info\n |\n | Text for the '<topic>/about/more about-info sub-subtopic\n |\n | ## extra\n |\n | Text for the '<topic>/extra' subtopic\n\n "}¶search_index_entry = {'aliases': '', 'category': 'building', 'key': 'sethelp', 'no_prefix': ' ', 'tags': '', 'text': "\n Edit the help database.\n\n Usage:\n sethelp[/switches] <topic>[[;alias;alias][,category[,locks]]\n [= <text or new value>]\n Switches:\n edit - open a line editor to edit the topic's help text.\n replace - overwrite existing help topic.\n append - add text to the end of existing topic with a newline between.\n extend - as append, but don't add a newline.\n category - change category of existing help topic.\n locks - change locks of existing help topic.\n delete - remove help topic.\n\n Examples:\n sethelp lore = In the beginning was ...\n sethelp/append pickpocketing,Thievery = This steals ...\n sethelp/replace pickpocketing, ,attr(is_thief) = This steals ...\n sethelp/edit thievery\n sethelp/locks thievery = read:all()\n sethelp/category thievery = classes\n\n If not assigning a category, the `settings.DEFAULT_HELP_CATEGORY` category\n will be used. If no lockstring is specified, everyone will be able to read\n the help entry. Sub-topics are embedded in the help text.\n\n Note that this cannot modify command-help entries - these are modified\n in-code, outside the game.\n\n # SUBTOPICS\n\n ## Adding subtopics\n\n Subtopics helps to break up a long help entry into sub-sections. Users can\n access subtopics with |whelp topic/subtopic/...|n Subtopics are created and\n stored together with the main topic.\n\n To start adding subtopics, add the text '# SUBTOPICS' on a new line at the\n end of your help text. After this you can now add any number of subtopics,\n each starting with '## <subtopic-name>' on a line, followed by the\n help-text of that subtopic.\n Use '### <subsub-name>' to add a sub-subtopic and so on. Max depth is 5. A\n subtopic's title is case-insensitive and can consist of multiple words -\n the user will be able to enter a partial match to access it.\n\n For example:\n\n | Main help text for <topic>\n |\n | # SUBTOPICS\n |\n | ## about\n |\n | Text for the '<topic>/about' subtopic'\n |\n | ### more about-info\n |\n | Text for the '<topic>/about/more about-info sub-subtopic\n |\n | ## extra\n |\n | Text for the '<topic>/extra' subtopic\n\n "}¶
Test the batch processor.
red_button = <module 'evennia.contrib.tutorials.red_button.red_button' from '/tmp/tmpcs_6zicv/01783bd3765cb50b28bb4321eca9d3696e9aace3/evennia/contrib/tutorials/red_button/red_button.py'>¶
aliases = ['con', 'conn', 'co']¶aliases = ['conn', 'co', 'con']¶
search_index_entry = {'aliases': 'con conn co', 'category': 'general', 'key': 'connect', 'no_prefix': ' con conn co', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶search_index_entry = {'aliases': 'conn co con', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn co con', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶
aliases = ['cre', 'cr']¶aliases = ['cr', 'cre']¶
search_index_entry = {'aliases': 'cre cr', 'category': 'general', 'key': 'create', 'no_prefix': ' cre cr', 'tags': '', 'text': '\n create a new account account\n\n Usage (at login screen):\n create <accountname> <password>\n create "account name" "pass word"\n\n This creates a new account account.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶search_index_entry = {'aliases': 'cr cre', 'category': 'general', 'key': 'create', 'no_prefix': ' cr cre', 'tags': '', 'text': '\n create a new account account\n\n Usage (at login screen):\n create <accountname> <password>\n create "account name" "pass word"\n\n This creates a new account account.\n\n If you have spaces in your name, enclose it in double quotes.\n '}¶
aliases = ['con', 'conn', 'co']¶aliases = ['conn', 'co', 'con']¶
search_index_entry = {'aliases': 'con conn co', 'category': 'general', 'key': 'connect', 'no_prefix': ' con conn co', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}¶search_index_entry = {'aliases': 'conn co con', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn co con', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}¶
aliases = ['cre', 'cr']¶aliases = ['cr', 'cre']¶
search_index_entry = {'aliases': 'cre cr', 'category': 'general', 'key': 'create', 'no_prefix': ' cre cr', 'tags': '', 'text': '\n Create a new account.\n\n Usage (at login screen):\n create "accountname" <email> <password>\n\n This creates a new account account.\n\n '}¶search_index_entry = {'aliases': 'cr cre', 'category': 'general', 'key': 'create', 'no_prefix': ' cr cre', 'tags': '', 'text': '\n Create a new account.\n\n Usage (at login screen):\n create "accountname" <email> <password>\n\n This creates a new account account.\n\n '}¶
aliases = ['@callback', '@calls', '@callbacks']¶aliases = ['@calls', '@callback', '@callbacks']¶
search_index_entry = {'aliases': '@callback @calls @callbacks', 'category': 'building', 'key': '@call', 'no_prefix': 'call callback calls callbacks', 'tags': '', 'text': '\n Command to edit callbacks.\n '}¶search_index_entry = {'aliases': '@calls @callback @callbacks', 'category': 'building', 'key': '@call', 'no_prefix': 'call calls callback callbacks', 'tags': '', 'text': '\n Command to edit callbacks.\n '}¶
aliases = ['aliaschan', 'chanalias']¶aliases = ['chanalias', 'aliaschan']¶
search_index_entry = {'aliases': 'aliaschan chanalias', 'category': 'comms', 'key': 'addcom', 'no_prefix': ' aliaschan chanalias', 'tags': '', 'text': '\n Add a channel alias and/or subscribe to a channel\n\n Usage:\n addcom [alias=] <channel>\n\n Joins a given channel. If alias is given, this will allow you to\n refer to the channel by this alias rather than the full channel\n name. Subsequent calls of this command can be used to add multiple\n aliases to an already joined channel.\n '}¶search_index_entry = {'aliases': 'chanalias aliaschan', 'category': 'comms', 'key': 'addcom', 'no_prefix': ' chanalias aliaschan', 'tags': '', 'text': '\n Add a channel alias and/or subscribe to a channel\n\n Usage:\n addcom [alias=] <channel>\n\n Joins a given channel. If alias is given, this will allow you to\n refer to the channel by this alias rather than the full channel\n name. Subsequent calls of this command can be used to add multiple\n aliases to an already joined channel.\n '}¶
aliases = ['quit', 'chicken out', 'abort', 'q']¶aliases = ['q', 'quit', 'abort', 'chicken out']¶
search_index_entry = {'aliases': 'quit chicken out abort q', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' quit chicken out abort q', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}¶search_index_entry = {'aliases': 'q quit abort chicken out', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' q quit abort chicken out', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}¶
aliases = ['l', 'ls']¶aliases = ['ls', 'l']¶
search_index_entry = {'aliases': 'l ls', 'category': 'evscaperoom', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n Look at the room, an object or the currently focused object\n\n Usage:\n look [obj]\n\n '}¶search_index_entry = {'aliases': 'ls l', 'category': 'evscaperoom', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n Look at the room, an object or the currently focused object\n\n Usage:\n look [obj]\n\n '}¶
aliases = ['shout', 'whisper', ';']¶aliases = [';', 'whisper', 'shout']¶
search_index_entry = {'aliases': 'shout whisper ;', 'category': 'general', 'key': 'say', 'no_prefix': ' shout whisper ;', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say <text>\n whisper\n shout\n\n '}¶search_index_entry = {'aliases': '; whisper shout', 'category': 'general', 'key': 'say', 'no_prefix': ' ; whisper shout', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say <text>\n whisper\n shout\n\n '}¶
aliases = ['examine', 'unfocus', 'e', 'ex']¶aliases = ['unfocus', 'ex', 'e', 'examine']¶
search_index_entry = {'aliases': 'examine unfocus e ex', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' examine unfocus e ex', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus <obj>\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}¶search_index_entry = {'aliases': 'unfocus ex e examine', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' unfocus ex e examine', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus <obj>\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}¶
aliases = ['give', 'inventory', 'inv', 'i']¶aliases = ['inventory', 'inv', 'i', 'give']¶
search_index_entry = {'aliases': 'give inventory inv i', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' give inventory inv i', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}¶search_index_entry = {'aliases': 'inventory inv i give', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' inventory inv i give', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}¶
aliases = ['@dig', '@open']¶aliases = ['@open', '@dig']¶
search_index_entry = {'aliases': '@dig @open', 'category': 'general', 'key': 'open', 'no_prefix': ' dig open', 'tags': '', 'text': '\n Interact with an object in focus.\n\n Usage:\n <action> [arg]\n\n '}¶search_index_entry = {'aliases': '@open @dig', 'category': 'general', 'key': 'open', 'no_prefix': ' open dig', 'tags': '', 'text': '\n Interact with an object in focus.\n\n Usage:\n <action> [arg]\n\n '}¶
aliases = ['offers', 'deal']¶aliases = ['deal', 'offers']¶
search_index_entry = {'aliases': 'offers deal', 'category': 'trading', 'key': 'status', 'no_prefix': ' offers deal', 'tags': '', 'text': "\n show a list of the current deal\n\n Usage:\n status\n deal\n offers\n\n Shows the currently suggested offers on each sides of the deal. To\n accept the current deal, use the 'accept' command. Use 'offer' to\n change your deal. You might also want to use 'say', 'emote' etc to\n try to influence the other part in the deal.\n "}¶search_index_entry = {'aliases': 'deal offers', 'category': 'trading', 'key': 'status', 'no_prefix': ' deal offers', 'tags': '', 'text': "\n show a list of the current deal\n\n Usage:\n status\n deal\n offers\n\n Shows the currently suggested offers on each sides of the deal. To\n accept the current deal, use the 'accept' command. Use 'offer' to\n change your deal. You might also want to use 'say', 'emote' etc to\n try to influence the other part in the deal.\n "}¶
aliases = ['i', 'inv']¶aliases = ['inv', 'i']¶
search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}¶search_index_entry = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}¶
aliases = ['wait', 'hold']¶aliases = ['hold', 'wait']¶
search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
aliases = ['wait', 'hold']¶aliases = ['hold', 'wait']¶
search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
aliases = ['wait', 'hold']¶aliases = ['hold', 'wait']¶
search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
aliases = ['wait', 'hold']¶aliases = ['hold', 'wait']¶
search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
aliases = ['wait', 'hold']¶aliases = ['hold', 'wait']¶
search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}¶
aliases = ['l', 'ls']¶aliases = ['ls', 'l']¶
search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look\n\n Usage:\n look\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects in your vicinity.\n '}¶search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look\n\n Usage:\n look\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects in your vicinity.\n '}¶
aliases = ['dive', 'fly']¶aliases = ['fly', 'dive']¶
search_index_entry = {'aliases': 'dive fly', 'category': 'general', 'key': 'fly or dive', 'no_prefix': ' dive fly', 'tags': '', 'text': '\n Fly or Dive up and down.\n\n Usage:\n fly\n dive\n\n Will fly up one room or dive down one room at your current position. If\n there is no room above/below you, your movement will fail.\n\n '}¶search_index_entry = {'aliases': 'fly dive', 'category': 'general', 'key': 'fly or dive', 'no_prefix': ' fly dive', 'tags': '', 'text': '\n Fly or Dive up and down.\n\n Usage:\n fly\n dive\n\n Will fly up one room or dive down one room at your current position. If\n there is no room above/below you, your movement will fail.\n\n '}¶
aliases = ['@dice', 'roll']¶aliases = ['roll', '@dice']¶
search_index_entry = {'aliases': '@dice roll', 'category': 'general', 'key': 'dice', 'no_prefix': ' dice roll', 'tags': '', 'text': "\n roll dice\n\n Usage:\n dice[/switch] <nr>d<sides> [modifier] [success condition]\n\n Switch:\n hidden - tell the room the roll is being done, but don't show the result\n secret - don't inform the room about neither roll nor result\n\n Examples:\n dice 3d6 + 4\n dice 1d100 - 2 < 50\n\n This will roll the given number of dice with given sides and modifiers.\n So e.g. 2d6 + 3 means to 'roll a 6-sided die 2 times and add the result,\n then add 3 to the total'.\n Accepted modifiers are +, -, * and /.\n A success condition is given as normal Python conditionals\n (<,>,<=,>=,==,!=). So e.g. 2d6 + 3 > 10 means that the roll will succeed\n only if the final result is above 8. If a success condition is given, the\n outcome (pass/fail) will be echoed along with how much it succeeded/failed\n with. The hidden/secret switches will hide all or parts of the roll from\n everyone but the person rolling.\n "}¶search_index_entry = {'aliases': 'roll @dice', 'category': 'general', 'key': 'dice', 'no_prefix': ' roll dice', 'tags': '', 'text': "\n roll dice\n\n Usage:\n dice[/switch] <nr>d<sides> [modifier] [success condition]\n\n Switch:\n hidden - tell the room the roll is being done, but don't show the result\n secret - don't inform the room about neither roll nor result\n\n Examples:\n dice 3d6 + 4\n dice 1d100 - 2 < 50\n\n This will roll the given number of dice with given sides and modifiers.\n So e.g. 2d6 + 3 means to 'roll a 6-sided die 2 times and add the result,\n then add 3 to the total'.\n Accepted modifiers are +, -, * and /.\n A success condition is given as normal Python conditionals\n (<,>,<=,>=,==,!=). So e.g. 2d6 + 3 > 10 means that the roll will succeed\n only if the final result is above 8. If a success condition is given, the\n outcome (pass/fail) will be echoed along with how much it succeeded/failed\n with. The hidden/secret switches will hide all or parts of the roll from\n everyone but the person rolling.\n "}¶
aliases = ['recognize', 'forget']¶aliases = ['forget', 'recognize']¶
search_index_entry = {'aliases': 'recognize forget', 'category': 'general', 'key': 'recog', 'no_prefix': ' recognize forget', 'tags': '', 'text': '\n Recognize another person in the same room.\n\n Usage:\n recog\n recog sdesc as alias\n forget alias\n\n Example:\n recog tall man as Griatch\n forget griatch\n\n This will assign a personal alias for a person, or forget said alias.\n Using the command without arguments will list all current recogs.\n\n '}¶search_index_entry = {'aliases': 'forget recognize', 'category': 'general', 'key': 'recog', 'no_prefix': ' forget recognize', 'tags': '', 'text': '\n Recognize another person in the same room.\n\n Usage:\n recog\n recog sdesc as alias\n forget alias\n\n Example:\n recog tall man as Griatch\n forget griatch\n\n This will assign a personal alias for a person, or forget said alias.\n Using the command without arguments will list all current recogs.\n\n '}¶
aliases = ['turnbased combat', 'hit']¶aliases = ['hit', 'turnbased combat']¶
search_index_entry = {'aliases': 'turnbased combat hit', 'category': 'general', 'key': 'attack', 'no_prefix': ' turnbased combat hit', 'tags': '', 'text': '\n Start or join combat.\n\n Usage:\n attack [<target>]\n\n '}¶search_index_entry = {'aliases': 'hit turnbased combat', 'category': 'general', 'key': 'attack', 'no_prefix': ' hit turnbased combat', 'tags': '', 'text': '\n Start or join combat.\n\n Usage:\n attack [<target>]\n\n '}¶
aliases = ['l', 'ls']¶aliases = ['ls', 'l']¶
search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look <obj>\n look *<account>\n\n Observes your location or objects in your vicinity.\n '}¶search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look <obj>\n look *<account>\n\n Observes your location or objects in your vicinity.\n '}¶
aliases = ['i', 'inv']¶aliases = ['inv', 'i']¶
search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n View your inventory\n\n Usage:\n inventory\n\n '}¶search_index_entry = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n View your inventory\n\n Usage:\n inventory\n\n '}¶
aliases = ['press button', 'press', 'push']¶
search_index_entry = {'aliases': 'press button press push', 'category': 'general', 'key': 'push button', 'no_prefix': ' press button press push', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}¶
aliases = ['press button', 'press', 'push']¶
search_index_entry = {'aliases': 'press button press push', 'category': 'general', 'key': 'push button', 'no_prefix': ' press button press push', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}¶
aliases = ['ex', 'l', 'examine', 'listen', 'get', 'feel']¶
search_index_entry = {'aliases': 'ex l examine listen get feel', 'category': 'general', 'key': 'look', 'no_prefix': ' ex l examine listen get feel', 'tags': '', 'text': "\n Looking around in darkness\n\n Usage:\n look <obj>\n\n ... not that there's much to see in the dark.\n\n "}¶
aliases = ['move', 'push', 'shiftroot', 'pull']¶aliases = ['move', 'pull', 'shiftroot', 'push']¶
search_index_entry = {'aliases': 'move push shiftroot pull', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' move push shiftroot pull', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}¶search_index_entry = {'aliases': 'move pull shiftroot push', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' move pull shiftroot push', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}¶
aliases = ['push button', 'button', 'press button']¶aliases = ['press button', 'push button', 'button']¶
search_index_entry = {'aliases': 'push button button press button', 'category': 'tutorialworld', 'key': 'press', 'no_prefix': ' push button button press button', 'tags': '', 'text': '\n Presses a button.\n '}¶search_index_entry = {'aliases': 'press button push button button', 'category': 'tutorialworld', 'key': 'press', 'no_prefix': ' press button push button button', 'tags': '', 'text': '\n Presses a button.\n '}¶
aliases = ['stab', 'pierce', 'slash', 'thrust', 'kill', 'fight', 'chop', 'hit', 'parry', 'bash', 'defend']¶aliases = ['fight', 'parry', 'hit', 'thrust', 'stab', 'slash', 'defend', 'kill', 'chop', 'bash', 'pierce']¶
search_index_entry = {'aliases': 'stab pierce slash thrust kill fight chop hit parry bash defend', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' stab pierce slash thrust kill fight chop hit parry bash defend', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}¶search_index_entry = {'aliases': 'fight parry hit thrust stab slash defend kill chop bash pierce', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' fight parry hit thrust stab slash defend kill chop bash pierce', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}¶
aliases = ['l', 'ls']¶aliases = ['ls', 'l']¶
search_index_entry = {'aliases': 'l ls', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n looks at the room and on details\n\n Usage:\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects\n in your vicinity.\n\n Tutorial: This is a child of the default Look command, that also\n allows us to look at "details" in the room. These details are\n things to examine and offers some extra description without\n actually having to be actual database objects. It uses the\n return_detail() hook on TutorialRooms for this.\n '}¶search_index_entry = {'aliases': 'ls l', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n looks at the room and on details\n\n Usage:\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects\n in your vicinity.\n\n Tutorial: This is a child of the default Look command, that also\n allows us to look at "details" in the room. These details are\n things to examine and offers some extra description without\n actually having to be actual database objects. It uses the\n return_detail() hook on TutorialRooms for this.\n '}¶
aliases = ['l', 'feel around', 'search', 'fiddle', 'feel']¶aliases = ['feel around', 'l', 'fiddle', 'search', 'feel']¶
search_index_entry = {'aliases': 'l feel around search fiddle feel', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' l feel around search fiddle feel', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}¶search_index_entry = {'aliases': 'feel around l fiddle search feel', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' feel around l fiddle search feel', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}¶
directory = '/tmp/tmp1zorx5wl/e516f3221202105a1f423ce21f4dce4254e051dd/evennia'¶directory = '/tmp/tmpcs_6zicv/01783bd3765cb50b28bb4321eca9d3696e9aace3/evennia'¶
directory = '/tmp/tmp1zorx5wl/e516f3221202105a1f423ce21f4dce4254e051dd/evennia/game_template'¶directory = '/tmp/tmpcs_6zicv/01783bd3765cb50b28bb4321eca9d3696e9aace3/evennia/game_template'¶
mccp (bool) – MCCP compression on/off
screenheight (int) – Screen height in lines
screenwidth (int) – Screen width in characters
autoresize (bool) – Use NAWS updates to dynamically adjust format
inputdebug (bool) – Debug input functions
nocolor (bool) – Strip color
raw (bool) – Turn off parsing
mccp (bool) – MCCP compression on/off
screenheight (int) – Screen height in lines
screenwidth (int) – Screen width in characters
autoresize (bool) – Use NAWS updates to dynamically adjust format
inputdebug (bool) – Debug input functions
nocolor (bool) – Strip color
raw (bool) – Turn off parsing
mccp (bool) – MCCP compression on/off
screenheight (int) – Screen height in lines
screenwidth (int) – Screen width in characters
autoresize (bool) – Use NAWS updates to dynamically adjust format
inputdebug (bool) – Debug input functions
nocolor (bool) – Strip color
raw (bool) – Turn off parsing
kwargs (any) – Each key is a command instruction to the protocol on the form key = [[args],{kwargs}]. This will call a method send_<key> on the protocol. If no such -method exixts, it sends the data to a method send_default.
+method exits, it sends the data to a method send_default.Notes
Since protocols can vary, no checking is done -as to the existene of the flag or not. The input +as to the existence of the flag or not. The input data should have been validated before this call.
diff --git a/docs/latest/api/evennia.utils.eveditor.html b/docs/latest/api/evennia.utils.eveditor.html index d5de4b4ae1..4fb0f731b5 100644 --- a/docs/latest/api/evennia.utils.eveditor.html +++ b/docs/latest/api/evennia.utils.eveditor.html @@ -356,7 +356,7 @@ indentation.aliases = ['::', ':w', ':DD', ':dw', ':!', ':u', ':uu', ':wq', ':I', ':x', ':<', ':A', ':q', ':=', ':p', ':>', ':UU', ':S', ':i', ':r', ':f', ':fd', ':dd', ':::', ':fi', ':s', ':', ':echo', ':y', ':q!', ':h', ':j']¶aliases = [':fd', ':UU', ':r', ':A', ':I', ':uu', ':<', ':>', ':wq', ':dd', ':echo', ':::', ':p', ':i', ':q', ':f', ':!', ':y', ':w', ':dw', ':S', ':fi', ':u', ':q!', ':=', ':s', ':', ':DD', ':j', ':h', ':x', '::']¶
search_index_entry = {'aliases': ':: :w :DD :dw :! :u :uu :wq :I :x :< :A :q := :p :> :UU :S :i :r :f :fd :dd ::: :fi :s : :echo :y :q! :h :j', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :: :w :DD :dw :! :u :uu :wq :I :x :< :A :q := :p :> :UU :S :i :r :f :fd :dd ::: :fi :s : :echo :y :q! :h :j', 'tags': '', 'text': '\n Commands for the editor\n '}¶search_index_entry = {'aliases': ':fd :UU :r :A :I :uu :< :> :wq :dd :echo ::: :p :i :q :f :! :y :w :dw :S :fi :u :q! := :s : :DD :j :h :x ::', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :fd :UU :r :A :I :uu :< :> :wq :dd :echo ::: :p :i :q :f :! :y :w :dw :S :fi :u :q! := :s : :DD :j :h :x ::', 'tags': '', 'text': '\n Commands for the editor\n '}¶
aliases = ['__nomatch_command', 'y', 'yes', 'abort', 'n', 'a', 'no']¶
search_index_entry = {'aliases': '__nomatch_command y yes abort n a no', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' __nomatch_command y yes abort n a no', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}¶
aliases = ['p', 'n', 'abort', 'quit', 'e', 'end', 'top', 't', 'next', 'q', 'a', 'previous']¶aliases = ['end', 'previous', 'top', 'next', 'q', 'e', 'abort', 'quit', 't', 'n', 'a', 'p']¶
search_index_entry = {'aliases': 'p n abort quit e end top t next q a previous', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' p n abort quit e end top t next q a previous', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}¶search_index_entry = {'aliases': 'end previous top next q e abort quit t n a p', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' end previous top next q e abort quit t n a p', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}¶
evennia.utils.funcparser.funcparser_callable_conjugate(*args, caller=None, receiver=None, **kwargs)[source]¶Usage: $conj(word, [options])
+evennia.utils.funcparser.funcparser_callable_conjugate(*args, caller=None, receiver=None, mapping=None, **kwargs)[source]¶
+Usage: $conj(word, [key])
Conjugate a verb according to if it should be 2nd or third person.
caller (Object) – The object who represents ‘you’ in the string.
receiver (Object) – The recipient of the string.
mapping (dict, optional) – This is a mapping {key:Object, …} and is +used to find which object the optional key argument refers to. If not given, +the caller kwarg is used.
Notes
-Note that the verb will not be capitalized. It also -assumes that the active party (You) is the one performing the verb. -This automatic conjugation will fail if the active part is another person -than ‘you’. The caller/receiver must be passed to the parser directly.
+Note that the verb will not be capitalized.
Examples
-This is often used in combination with the $you/You( callables.
+This is often used in combination with the $you/You callables.
With a grin, $you() $conj(jump)
evennia.utils.funcparser.funcparser_callable_conjugate_for_pronouns(*args, caller=None, receiver=None, mapping=None, **kwargs)[source]¶Usage: $pconj(word, [key])
+Conjugate a verb according to if it should be 2nd or third person, respecting the +singular/plural gendering for third person.
+caller (Object) – The object who represents ‘you’ in the string.
receiver (Object) – The recipient of the string.
mapping (dict, optional) – This is a mapping {key:Object, …} and is +used to find which object the optional key argument refers to. If not given, +the caller kwarg is used.
str – The parsed string.
+ParsingError – If you and recipient were not both supplied.
+Notes
+Note that the verb will not be capitalized.
+Examples
+This is often used in combination with the $pron/Pron callables.
+With a grin, $pron(you) $pconj(jump)
You will see “With a grin, you jump.” +With your gender as “male”, others will see “With a grin, he jumps.” +With your gender as “plural”, others will see “With a grin, they jump.”
+evennia.utils.funcparser.funcparser_callable_pronoun(*args, caller=None, receiver=None, capitalize=False, **kwargs)[source]¶Usage: $pron(word, [options])
+evennia.utils.funcparser.funcparser_callable_pronoun(*args, caller=None, receiver=None, mapping=None, capitalize=False, **kwargs)[source]¶
+Usage: $pron(word, [options], [key])
Adjust pronouns to the expected form. Pronouns are words you use instead of a proper name, such as ‘him’, ‘herself’, ‘theirs’ etc. These look different depending on who sees the outgoing string.
@@ -970,6 +1005,9 @@ Allowed values are:3rd person/3rd/3
key (str, optional) – If a mapping is provided, a string defining which object to +reference when finding the correct pronoun. If not provided, it defaults +to caller
receiver (Object) – The recipient of the string. This being the same as caller or not helps determine 2nd vs 3rd-person forms. This is provided automatically by the funcparser.
mapping (dict, optional) – This is a mapping {key:Object, …} and is +used to find which object the optional key argument refers to. If not given, +the caller kwarg is used.
capitalize (bool) – The input retains its capitalization. If this is set the output is always capitalized.
evennia.utils.verb_conjugation.conjugate.verb_actor_stance_components(verb)[source]¶evennia.utils.verb_conjugation.conjugate.verb_actor_stance_components(verb, plural=False)[source]¶
Figure out actor stance components of a verb.
verb (str) – The verb to analyze
+verb (str) – The verb to analyze
plural (bool) – Whether to force 3rd person to plural form
tuple –
diff --git a/docs/latest/genindex.html b/docs/latest/genindex.html index f8f1b136fa..45df9cd5a2 100644 --- a/docs/latest/genindex.html +++ b/docs/latest/genindex.html @@ -10294,6 +10294,8 @@Cw8W z0u*N+nYwJ+?Ju(qX&(ik%f03o5vvRJPsN|rPJL9lNA@y@AV8Cjt2kMxC~2CRqj12U z_n%PPnhlfw6Rr}jjuTmGkn8FnsVpsFub z p)G6x5xS1 j>$J$>(UJ;@nR_?2pDPkgq0)*nZk^qczQSH0m*eLUaPG| zj)p)3d-}*#T5pOD)U*GF?}+q7x5*9QcJ`7xpQEgFGYv)MoQ;_vcxnADyg7OA5rB=b zSihFEB3m%aL7mgk4lRu!G$MgX`cs&Eq6v@T5IJA@iUnB5upN79oNxDDHQSDq3#G}m zP?%A$iKd#Emg^nkzuRqOu;slqgw;5;Wwxtyf5`Qvi{EN|^T#F?fFB^G=aZMTc5dz$ z79|R|d0E6}f&)wG`P!V}ewQm N)g^Wm8kRWQ z@jb=LRs<#wh~aebG%JKTSVM=CIUMn5 UzmoPcgT8jPTlY*Et}?Q5wY&8? zBsZgmku@f$=8}H72KySd#F4=(8^D) zYv49_ljo6PU&3jz#Sgwo>@o~_dy<%&5Qj9UDdme?*EJ$AiB2&X$!-%~8%Yf-5Vq|= zS_gD2vVF19NG`?RFNY5?3kbb!DgJ^oyaxe=z9EKztTm#uMr5}=KTE6m sT+wR=pCpgh+IbmSAy4rfq)U`Z zGdJFyUE5Y?)6(rD28#ToK7)BE8x79~O2ow08+n71VZ8jmvU;`}J>a_BqP9lN^c9 Giea1N_l$W+4kt}IOcV1!6xJf6b}a5B6X>&nf-UAFlL%R{LkL9DXV zKN%UB#&sM{(YI%@fTgh~R>55`Lcgut&p~{u;V4}+v)U`W$By!2sdQ>;LI5d&?Wx~a ziXh+{l{BhGy25D)Wo4BFpFAgaOc{;QAtQS&uwVjZEMzsgGlhj)0;lyfxHIOw&T-A> z7@XwWF>=$vt 43@4QGK4M6fRZ)@kW#Z^ zMUZ-~vnR~fSF*!D%!mq~7173y;n}Xt+$;>yrA$KmP;J NC#|cp+;mWe3scs{S2H z+!#6It};?wiRfP }EF4G(?Da)c;q1>M3KEFE8(# z@qH4u2w`4{W Zmr-a9fGAf1_=?b+)3@<4<(Q0Y>5($d50$&%l4h;|rjGnxD6Cwwc>h5p-rZ z1gg{0^20)LRrT|knxmP3xIVtkcL^Kp+Fa@zhzTln@i;v1p4IZm&;oJ9xLKW-d%DsH z4G-xc!C+ZKwhW7vfmn+vp$&D!Jj2oMLJ>i9jO9~Dz9ar7$dK<=UCrw?UvCWzQU-nJ zW NG)e-FpFQ+RU|r2&1e5NUuStKH5IRDwv?=#?o5y5qi ?xVCe)Z8I3ePVB(p?`{&*Fk zny*4F*1&CUqDwn0N1pxxjsa&oW^{E?- MlwZ+(Z=8Od%EHy}^_Z!%By)84Hu|n*oQ-t<9oX@X?_gQH3O%8d&X4!HUd% z93s;8?~#&kRK5ETnAa)A6>>LPc`L!PDbBB1#em!+d=s1jBcVRqzGC;x3{3ms2p2mV zE^n(mF}tmWVH?xG)B^>}_5wLaiqpgU-f*Her#@Le>LwMRL5z8`+G<>K06j5EY9@r> zE>Tbrm0u_Fiu-cK>Yzwc`*f1o*u`jl0I%Op#g{Uid0lp^=8{Ip8X^T0dVSTOjr%wD z5YX307lFU-Q7xsmGwqzws9=1LCvsOs`}HvWC3oCgXv+2@Hei>%;??yRyKI85g+J8% zcXsY01`SquwjzkL;Cr#pq#4|1h32=%Fj^~KGA!J4Y*-ZIM5#K_v6>P;_{z1n158s? zpW7)s)rRsoh8y?65l~LwmMeUJIPEz5TOgSr%}_*ZP0KWTYPKpG;neszI$%%ch%jGA zbJu93>OdlU9%`-&xlch>2pj1)gat16n{|?fA1Yxe#&1k&azwdDN&L 5wK^yMfi>xsGnn>n{2QgVZP|xp(PyL1Vx3u;P|TMRj0^0#mY*wg5`s15RlB z9E5yel2HPXI@8zA7OYd3^ O{56EfbG4X0T*F)cZ54*aU_tlh%Av0t3N9y)s7c=d^xg -6;*lF|090*T2f*sXYc zr&esB# i39U>a^`G9C22a!NhMvXnz}UY9XfGIusBP`s;c) w zH#7vj=%mHEHJ*|c){v*+rGAb7yV}g1eNH;44B_xB CzR5AG6jbWsyA!W3D!v8Tz-;sy>$sdpd!cJHB>+)nR zv<17si0FrjSQAk%1n}>VeIgp T#8-VvUT|(+C0dx9NSdux9jXqF*(s2C*#VPz1~Ms zSq}P$-6@GhXW4KS{1QS3BLm8ynZ~5n?mP#<^jzHW!`2i(4S-D7u((jkOMHMc;fQZY zP+#>R5>aF1IN^_u5gH!cr2mR;hb)F9e3v`dMM;`1TR_OB|LmaK(A>yKkBVpjE94q> zlGs+ReUP>V@9|Ws#^TUK%E4vc|M8p{loGFYa#XHywZ&0bbV)_e3O MZJD*xoKmE0)IHF6iv5BKnaoaz^ zfS7V5C?JF>zW4_7CnuT|o2L5n J|u((a@g!Lcy)>~iDi7*D26qd>}R*c{gHVf=TgIW*b%M6dDn z+72C!8X1?l16Y0=EnoC#LvTgn55=qSR%eP?@fVd&XD#z_*A$FF!Jwqn?{-i Z9|! zbCOu2X4?%WXc<-BrF`#?MJMCRNk`7vvNCxML%6Dw_}}!i%gF6ful^JbcRwxc3NaM* z=#mU#!`ltY=p*s2)7mQjygClAi2L>Jnho1eYX~Soj_)$kM209!F!CK z<>o%QL--`S3=>DS|1t%x`6a(J^rfA)9l;IK^`sWBal6xD2W&ARSP7ef& hRcYgEZ)NsJ6~{ER-`)ws>-xSl7V$#zQN_VI@-{=EAmze+ zixmTf=vST=Q&4tz*)c_*l>GfKV%0Fw0)c6VA9>0m0{S2^B)3T`ON}7~w0rUD( j!jtC=_b_cB z{5jeybpCG0spa%iPeqs>CqXksP`=y3u$bzo+hP<2NX6nIy+veN`Il$7%dN4O69KnP zMV3TApLK7QqL2#Z3X97jq1h#uDZ_K59K`8&qcZX-wc|&Zk#JX97&a@PVi$r*$UZf} zd+g9a4Gi6^mwLqDc};z(>e|9oBlXO{OBV??R=)o&yn8$upr>Rjz|Qv$n;#9GIUTrQ zlKE?5T-^v7r$5wxuCccvXf2bEUJvv;uie1;xTnZuehxF+VLTPm(2WF4a#rzP?zYt@ zCVIX{v2TB9QB17LMm0vL4L%^+wuHa@c35>C)i-WT_A!dKXPSG}U~QSe9=Hc7>2y%h z?ijjBx=>E%8z*k-l6}g0KhOCh;{N#eT$jPxFnKa{=5@H8;Xq+W2x&%N0MZ-U+hlX< zjU=9NMoZ@Q;=dw&VD5~e=r{iaJtdPzg&loA$>t-^(Lqt?wY_my2G5{%-F~>)7@g8E z{0q$>e}ZjH?ZTvkdSz7bwgk!Q1r}kkO@9evLUp-;RiW!X+86AjLwi|hpho71dS+A{ zu ^Og@+Rf%^+ z?eWtOE<_LJj6x$lqoER=P%_(2L5M_H;+112ErGctyaZce|Dm4;>w{gG###x^YCZpB zw1-l%)x}s5>b-^aqZ9jx$`wX)F@%k`tG<( ^8od$2J5zm?Ep0{Ly zx+EeSiGOokT7+GErWAvP+FLrl?mZmcfSdEf#l73T{o#llA-&DPp`teqQ=LecVcdkL z?hj9o-#0H;XLrx;BlV-o;v)XR1AA9zdv}LS%iTWE;eqBV0FPo^NH=aYiHm{Q? hG@PjIm)&a$bgyV z;XrL(e@B}9C)h@{$YEVF{{aPARJBQ!5$2|byv`6Xxs>78= |9 z7Z$Fbi!?VDe%*Bky(m8R_hw~DIg$`^RliWVFUxB~y9MdAOWcA|4ZK#+Wm|A;MX4M% zNLAO6#X;v2_fJq -MjbqjR1e}dNH~jD$|atRI%!x0vViN>&OQ3F^4DNs_47BGventYsKlY zQ?jcq!kCdIE`HcG^&Vz)kuAO(QLiDoMp(WNp_|P(;;r g3mY$9JXx~7yKcQ578omJ47BrD@WRGg*rUFl>l^|k zOhO4W*b1XZR lK*TEhp>lBgS9;_oDcryK=vd!p_nj404aFgx#; zFw{5&{FKoYb?g-5m%tX@f$WK*j#N0NvkKHCq3wMAtyWbIDGS)&LgsK?PmH5`XWr(F z9T0ftOU+Gf*H{o^ hBpkMb(RpZI# z{(HsY;^sxH^zd6@Z0eq2?rFqOjjMeEL61Ge=@y66KYiSmX6+h^_%tRPoKnMBzY8ND zdxXAf`xOBcFZ|>wU{ch9k_1{0Jdg~|jJomw(h!lnA%4sFg`+u!Y9_`M>JxvY7HB
MxHM=JVZ870RI0>>?xtPtM%Zs`9@ zKe;d`nDaWQ`xU<$pZ(wIgFgkmxPL=e*;R17uy1?ycqfd0tz5W~(3g1(1*OCCUljLJ z+xa$6TBZIdqS3e9`Fj}VBiK(Df&ygXPX`SZ+OZhKhr7UIvd{YSa@ha7Db4> OK zzF7jLl|$WzO#Gl`)Ot3gGE>vKc#(!b9)Tez+VDO-l*(dCj$Cd&9SIR&2}ZPpJErjx z-BT3Rj`lZbFG< y{cI8YnPzFW#hN%r5rFhtl>3S7$W|P z HJ6KNoZnE1C{l4zBGD2@AXQt mNp8zvvTn>wA)M1s)}q HZ@~8<0e4o zF&I*4NIBS %&L(6TT4 =2&m`jzbCI21AIoxo=Z8^1sl&&LHjM&@AWY*>v*`J*qfe`U-f9$U{4 z#@XYUc+qGt|6#|*4n(F$D1k18eU13CQ?a?+;M_M)q+o6hMm_s2fY_3(;rurb&>JWj zbj0~)v5ZtnNOeoXpFUpNsr1e(zHr&(^}f$oygt*3v#nD=Kh_`M&w(87bV~q}rX2(i zH~_j^*7?@DZpeLkr^G%Cf6{!lG+?-<0`^4k;Xl(*O(9v4tdJ?)pnFQ{+Vz}_#^{iL z$Gli(F`?uNy{x(j6AI*oV+CtrknBt@kQYx REWx)bPV_ZA1u|;_?uNjrpO1V8X0!;2mSMLG3vQe__(ChrriwgkH=S zo Vn*I&`qLJpB%MR95pVBdYk<7Z)D zt@ygA9 7?(h#%f{~ z*7s(88nCPR(y|4& (#H7QW0b2Db*meQj!SZ@xqunj(FvJN?^37Rl0h(^jvC zaU^D0y%L+~^L3e7Ux?wpybiMugEVgEJZCvBN~etiY1CT*e>I3*2$!UB5=PO8!0tHc zX&8fVl++V{$b6rzZ3z!vEY;yxUx+>JmuC&%rwm#4l89Ex3+B!yl;+hgL9VtWk7-L? z5pBFqk$`HG^@vH7`~lRqMB$I7ICOV3!NgjdtwZ!Q2+1dH&>&lD$u8=?%v!Rp>OGI^ zK7h_7MSU;1e;ZGRy@k-X*`@J_z|_&Ouce^IsjsT-QMU<0Y^+s6zhe>xIF!+9?SLv@ zekGm*Zdw>#iB%^n9vh&7gE!{}6g|OkLboYR0}&JWt#3DT0E`=iur X`Y1AI`{g$XE=M5Rxh2YuNIarWz?CN m7qCe^m35ZO4@Lp4=V%3@X>7BCHC9wG+GTN?Pk_n0ZGLpnE(eT!ApS-*~7*gz8eH zdy~bX^h;h8X^uAet6hr+%pPj;7@?;X;S0Qib`56x;Tc~T$T5$9cd4Uw*JJX{ilARS zHRtFT@{nHKUR(MP?kkK>;m$$w`ReXIp{@oPf78N8w#}_^QSps}{S^*7t=Ra0M{>hC z2U3BNbdNDK3d`sM!@$eDuA~Ql-f`2&gAI9fGU6yVe8nkWSjlbMI)B)??tJS^ZVY}n zR-7EABa{p2Y1QgsmlrGLsx)D*7KbWi6aSgJi;LC7lQ?(|njk=%x9oCSv@&iGJWEYb ze;4!>CO0y-V!eV7PY1*)Wd-QhAL`>#W?g4+gBKR}8+kLQiccsn&IbsPumJqNk60OV zYgptZws%yf+JWU&98&oo9PTOTgZaq(lMC*T!!h&A#F~1ea!?lvtLy=7P)Fcsg?_H8 z7G4M6rtj-)L*%g0+$I@9vldEvfCbaCe ~ARLu5DdQP;N>t{4@I-NV&}F)ks1ndI|rBl2wJ{4z`;NMK9t1Kr%4y zKQd-a6rNcKjoIU_#$8o9PhGi=t+;7>An)0C!oLGmS(B2~uqoH>aSNUlWaE72f5xek z73~A_NbZ ghyZMebep#S@B^H8;QRgNR?#Q&T46-eA{v*qXl zB82bQ-#|+C8kf&RkCRx3xW_lV42F3;N~|%P#`2>yT2Q7xdaTS6iM?xM{;V^D-uDu} zjUeo{Pm`|*USEXGM-WRlbPz*(e^@-J0M;hnXs)hkDdc02FA@;J+mo>6iE)sg&rKpl zq^mVvrop6=bOHK15KQCIr8}L)6s<#ni5fGZ&i(!#oU{R8DMb^rz^)j;Trl|q+GZCg z=>D$n!stq~lT*U*!nWA0^Rf|tBlH!omY9K1R~AIP*p=KeujCIr%y<9Uf2rxZDpsT{ zvVFA+&R|XE1ActO4=W4P1+V?Ug|EgpLs!|1vMiQ~bTrJ>2ke`yq$R)Za{NUETC8_@ zc&2#aQVIuI! Y0hJ=85j(RdzV;~+0j=0e&E7th7QJ|>31+j&e_ `D`7+jc7V3S$*w}%Z6QI8i6S ?#YijsF_)--5 zqcZlZ>`v7%BS&h)UR)h0^2`0rM>jt^eacG?Vl`1ZnB=)0?AR*zLVX&yF3imCx{6Xj z3MngsAL+M;3Re_i9qOUj)emuuJy}kCkIRs-bcN1tewr$nZ#a);3u1gq7o~~=hHJ$` zBrHV2uIlcK;dDhPe<)6(!*VNHX4tSH9Kr>b4G+eZIQm{aGUE>$HacbA7QNQ+l-Y~Y zB6_vZBmx@9O|{A&_hKk5#(`0kZipM eY|(RQ`k(Rm@Mn;kqy-noU-`+)A0-^`!s$lV+&;@bdtEI(Wu_V@r3 zVs8uJZy!ruw)iAP{_J=U$;WC2`L9e3#Z!A6$*ESoD;JoUv8urSG81I%5~ySRIV QRs%k^wc+j8OUn87y+=sG 4rNQ|KmxI4*k7Teu^~3Q%?2J$qy1v`0O!&0BpUV?rq|a^ zL_UZ+<_~?V?l0eC=csIeklwIWs`Qrj8=uLN
&lBXmh|vxqGMdZ2N*wL7nQ@bSmjjl!xibnyyM@o>U3+8ENS6Db6TspH9|Qz=rp;h zTq-X|>#1Uhd+7fUeBnLXFh!{5)tYZmuz_-26=X|0J9`W2)yxh08GQLZ2pf4Tz7dME zgNt}le?++|*o;@&2Kc%2Nz^-sYNJu)%ddFl0ygc >VWj%7r)+JC;Y>N&Cg;(R~!J{g%*dmp^yGw|JjJ#McV_)0@~yMjgF%?Z+`qK zA`J#2|ARXqO)o9jj}#6JKj-Adl2g4 |GM`v#4HX>XJM}AYa);nyICgNDZxD*&ji^B-ZuykOrys>GS zqc=8__l58AO*r|jQI`alWm7mLL2Ru`FVvY>TIDZIE@c2*NF$AdL9;8%7b - AGBK)IfeuPHfr`^ge9mB%W;@zBZg<-) zX`MyIqo@N?QJIIrv6~*sr~KgYINVotj|VJDJE4ZJ&*5I}V0>Uwa
fBu2i2>u!YCxZP3m7dV`B A0{kzWnFa%Lwud zIN~mM=jhibw`Ed{K1Psnc_)?cf2?6et7F2r@7%=spiUV+vE63eK61Z+D*oMl4(^zM zs}YJnV#+r>(yXX>b1Qj {_NO zPi#! Tqs)+L2N`X(W zjELSq&e0&z@latNOfWD0HVB<(v+us>;J}SEa>^`bTU73_ozmLL8{wCrpGlG4^>G;N z74mjzfGTeJ-W_!GmA6t&f9go
_Ntf03-AR(BwC1M3Fjrm9&LnDQ1r)Zgwl3( z!291jWp1@H+;3>4FSl?%ETLV9{!m90XG=_UXp5*e!VwY{e{x@K>=AaseX;6VA3Sm% zgx-_+EZZjdwD5=)50AVX?xdKR22!F;L}GR`#l$wez7UmPcJbl$he5uvJ&^Qc{z#Vl zWkHN(uOCP^#ldZCN?$v;dXq}5MQOytxEiVLAmeo6Ff?ISbhNN*SCCdQ`WOMY4&ayw z#|S;ztZv6Ee}U4P2H+AzUlY8rK89O}a$^1&$O=}K#*w0=Jh*uX4 zWzkXpV_rARX7|B58z4=Jqa`jnnZRIZ54_VJ3?8Ppe_0Lhnf$y@uaqU>eq(D6DmD^Q z_J}-KRNP{i #JnHYAcxNPT2~eIyke`e@qNgp^{R z;8;l0dJ~Y2pVHknrBy-L>xyJF0Nl}m 9c@Z1!q5QpY ze@VEDPla81Kw0Vu|E7KVnBm@6Ztig0tcu`Y di`an+0S$wJ-A|H z3L@^4vEY{8hX=*WW$-Jk<5LKFa=~=@e~M&m)=+MjDFgB6uu5!0xCVC|`uuu(nMil1 zGT}8<(;&RX@3^|AB`+VV2)3SJ*C4^Ci_vI)&_SeIARGj2mrwkBY~?G4YEV%esaw*? zD-V~srLlxkmsC1gUrqC?VTU?Izp!*3D&tP?YPEl~oD+0}RG*#`k??@yhI7^Wf75fo z!^M8BT4O@>NyGzkOsjadp1e1byT?aQ%0UQTKH;YY1E&bvZLx (_j6qf&{efdL-aO-LRY79|g;o>0RKFZ# zG#TnFB62+Z75;JHvKuzyKuj~Du2~U2NDnBFO<3(((>Y#bK6WA>=xorJe``;qfZNEH zM?UQ=J-J`-Gr5tEd)oL$)agznq#ol9hb^7+XK3&OQ({Cmx?yfKUzW&W846b~U@<>k zg-wkVm4>3X+$DL(T^z*!*ujNY^FE-JQWg3S_zm~zYgY?YlT9VkE1XA@`ivjmk_#^k z1 x8VuJbk6SBy*^UF@EH`4fnRi|3IPF7)n1oaMDBJIzqE zJ3H6C31uUOW0O(&E(HF{{+giqYYaD}+ l7mB44J2EqYjQ ztNExMP!|dJNw|-CQ_ZU&f58_b6gu}XDQAKKqrUh9TwODfzEZ2ze`5Jm 083p$ap@m$vEbfL1tcL@A9U*2H5=Eq_U!c0pxWuQlKw zAn@ndr9+Sw<+9i{Bl)H5rTiJfsay-y(r`oxbYQ9XOCQwC2`Q1}nbi9hk4nQ)!3R3$ zl$R0XwRECgNl!d>fA~P?{9JejX!^J-inQ51uvQ^!(uQm^I(8wpN9p|P`XS%b5Qzwp zz_fvfP@bamDK1)C)>@2Evk&lrH_-e$LIsTH=vL5(B9y@d3U3MdvTnQ*LXa;72T+xy zfn(OF^;fbV5%B@Sujs(y3=RQWz?n#PZf9I0+>`&btNHn!f52u~6k@iT57!_I@@;Hu z d`9pU=B#T8Zk)VAk?8z52tgo4?Qh9RaL`JjAt7% zRv{hal7G|Ae+tY72C5P^_O+-Wgt-mgzXWo^7FE6B7r4#VV#D}NK-a2UXG1nft>Aq> zt3JV7fJP1Yf(+pu=r|?%AbcGM3rM~UEf=hVO!=eV`Pdv9!hG7Yk+F0MR0tPnlot-i z=`%pN;||HE&N^LyHZZX#&jB5zMGr+DZtz|`-xxbbe |o4#oC567S%vO|0y!d%V)TeKN$tRen=+=o&=_Ny3572x-!&q4c7v6+^d_sn z?zZk7Q7t4tO}P@gK+IfRvSGd+8gb8xx7cWKF5M_9IAS(X!j5!+c7grjP?=s|7(f+M zeujK8e}$+s7~;-m5looW6W=aK-PnmY9vX!z7{gY^^OU%C>BYv0c4!&UIW$q6jysBi z%E^z&hfOs5tUY0VrargLId$f*C0u^Xn`TF1Q&bcE@9>da_UJw8EduepkRp~d zz%qDu10T-j)MS}&{hgA^WfJFC@ZkbJcXDg6 7K7D`vpe}(}!ff8`nb@M0`cJ8;Qfe^Z~p6FFMwA1>~ zF9tPq8lwe5t#H_n+8RPdo91g?6l9fRfeYxkG(85wcg!IX4hC-aTpv7oB`*hCYrh_r zHv;T!KX^hbH!e)}gyfE7%0+xJG?4ZYM(7aJrkXT}X<3KtK}F0&t8}P_1=)9Ee_hd* zgAjma8wRbb!gy2#gW=mIOFBM;$6&Bjvo|1~vpUa0_U 3DPOmi1y0xy|$Y(`-?*9a3jaI{}C6Z{cHwd1vx&%fA-KpiyL0x5*k1UT~$ zOlcAS%$yT&PH;*A&UP(A>PAQEf36T$8=AD~M`r5WQ7@Em+?WeGfKj`Zu#|4;=v7hZ zu{uFvd_82e(O1BZGg`BVVl>buqP6R>hFmil&?%QpOqu$et>|E)h5N ~W6ELvC2S zu2#F{I95gWTKVv@ZnCeMMXv*r+XZ!lew}$R#m}oE8`JC>^0+Hf>(fRa<;) ch2T5e@O3~%ghNQZ9TMu|u{ntMr^Ml&W)! #L9NlKZQh+m9FbSIK|B`rF-KJbJLBO5U!hM=qs4 z@gF{#n*3vz*WPP-JsK(Xng8(7giMip9L}AX4^VXLX7}JMk1`a0OG$h>@c5~31>CN% z4zGxX5=At6J+6obPh$+phaQzXAM!SZ2XNN4=~*RbSZNRuf5&RnGf_OfOp!LYOx!Vs zxD4z$(>z`0Exz}@4m#{*RKx~#NaDnlEwfJHC2Ytp2K_KKSdF3A0mS2}v>1|AkODyk z-9+pz?$xSlU&upKEx&Thv)0nC1?3G8xPftX=IF!kp8!f(H|>knkl2W#o(bZ1N vPh8pM?C0e8eHB@=hVNu?ooP^mVMIt%qLBrDn{u(ISV&|NTA znAtZN)p9{Hg9rHakomSedK9W)I9o^>^@*J6b6sNNe3Na{cX &4yW^>sq! zlRv=Dm^9GI0g~VD-=}|0I)FrkN*KT&Lz9PH>jk255$)uob0%
;~;DPR{V#X#aEr){Wklr=gm zSDYG$GF|YioZ@gA1cS@b=qQ7Yj4Qll3Fnq*{dmZhU#E#yAM_$&E{Sj%rR+*%urOWS zHdCl;f}N@?;k#ZCNJJcO#5Qmdo`(EN_Agbvf0`r~flP3q8iL83z-zcXSR#Uri>q*a z%>FS+j3ged6aPp=sO0_G#o2$H1*>>fkZ14JVUH}oev>?NgC1aRi_X`GfJVDBvE@X9 zV?BK4=0g~CDxgzl(&muTu0 8wvo9>1pDt@f1JYpXvve=Z6l=#8HVe2&ub@J>+I@SskR^(-%0jj!L< zWS!O6Fg9elLp!Vy3X0ytfp(F6x%m9+^{*e2&sQHVKEH!scUPCceZIc`TZpFJO# |+5lT&<&`_BOMev>+oLh~Wni|v@0CA qyCp3f&o8*C&s0|6Y zM_^IG40S1d*c7qz2~?0jmy2 4(k1hN$97o?=B4Gx@ld-bxV^R-T?c#e zm+UjV_Nga NSGdh4xN(;tdF% zCRv++XMm={P$+xiaZ|Ckw+|>`KENw(f0Vr$$^2=lizsn|flhHZdD8^kf1Gisse%aA z6t@s{_$GwdCf~AwVbC=NlVVP|Ll$qv1;D&ymK;TQB=$(gG|(QrE8#8kx7$$(YQWhs zK{1*hrJxSL4jRhu02S6`#CQXQ)+A(v5x;4o@>{k2@e;w3%mro=%4}F7wteD%Hwv{zpTB){#4hE}Ty`-r}^}>W}LfO1H zw-^8}yeI)M)+~TS!)midvqq2kw{UepDCI&Lgq5f!&6W<#i9Ev|N;VYy%v}=UVkL#9 zk){&7mWY$~P|krI^u9DT;dw=La4_a&z-uN76AypSf7p?$e^nKX3SsX*z58TE3pvjw z;hYEABp_deqHVyksCFx?dVT}13W*JX^=Da0TZ;sJ67Dlp<|fPCmq{RiJR=S^B@!lL znTTO< g+N+P3dBzbUep|Xab$hyh4_*8-Ck<~63OTimB<;EObm~yWr5L|{A z)|L3W5!;^Rf5zAnJW&WI0)wcvcQ>GR<59$#c%L4#sbxcx?{UEJ3yuMzbFhxx;})Y8 zQz5zsG9pyymKq^i%!cr2WsG3TswI>mW|cTzLAI&Q?f9kgi0Q$)+HfZ;iLyn=%lrU^ z`!M2S2mcOM2VQO|m7+XWp8?J-cfiVU {&1BIX%7Csc5?8wsaWB?CK^&@oJ(%55hH43r0$$?1ae zju5^>OwlNUk(s13MrD%5xsj^InC0oy+fYU(M2K;mz6#C F3BYpyEk2A!q|F(-q^w032 cnC&KlHc_34}wu$$dCu ukACn6urILr*j|{RX^o zN!aHuP-#@R3AJWnQo@WAm?ZE5P0C*b_Ov#7e^8e2+^WN`co$cA`B;>*Nz!%?yo}?E zyg>mA4nLSAt^c5FkXp}l@`*MQ0 {K%_7ilj zf0jecN2u(^yJEh{>R lO+=GD =Y+ zQD$Gi?$RbNo=M$o@==L0#Q4`g|Ie@Bf0*2Lj{o}S{|!-yTN}c*Wv%sRaY~tSM)z}g zG=LpT@$QbA)alE^ DS{>3nS1 A$wq-xVmI5@so@7J Vl4+}s;&BG;1IO~d%F#_QSe;h2@>ZcjFYR=ONsvdP$#&A`PM-s0JOA{6mYK7n( zT&`6TvI$t3v+KykRh5{NTZ0CcKH^xp$Q}N1qldISI(SgiBcY?K<{RsBG#fdkcl3j% zX4p!DMTYlq4cV=#l#SDpZivPXb+7ZLH63QLK|-6f0sAZd^A0Yp6p(B2e=ACfts1Lt z;K`4&vsfLXUl9J}Ny`dT*t1Gb^>rXDYxW11K9g1Y^R8_@_DQ;6yf-DQgo_bBG&>Kp zN+0kmG>$r@2_RmJP}|IX@*va9cR1u;Rh}B#1!HN+zTZ`*Ns Ub{ za7slmJc=Q$b)U$+$9Gp$e=q43T;q3UiU`H?gnlOQ>A;K45se`(LsZI;&9fet`&|hQ zy@3xRQY)CD6LX~8eO90m`d_z8XI?1b_ i16 z!fC>=rfxuQ1_@1uI?Fw;;<6w-aq+heMztu?y-eJK-xKYG3jftXe}&77Bus~NPaUK5 zFWldy DDY@v3a_PT}uF?pJGydZbe{|v3{=>~G zI0iqfjmMZfP_VzAe=k}7MSyE!cleRuhl?wggoVEkg2j8*O)NN x@V)_C0kvs$>BDaw#l}|?<5!fdaVI3bBZWA4 zYVWpWIOS~sIGmI;=nBn3O9MG6 Zg|E zsdV)7(Xb)KW)pCI(LmaXUh*FyeBz*!G)nX$BOJ$W0UDnYPdSZ3$i%~>4GO1B`WN{9 zooyyEB#s#;e;BA^#tQ>(J@xREc))3ClNvT8JtOc*AM?5L-^%=(dTZ2H{*`d7@Pk8I z %!_HIxr1!~f%N|MNqgyBi`NhSdxDv8EqZBxXmi zt#>4Sy9#JxRq&qRMFL;R+jr)6R3&_zdN1B<^t#~B>?^@9C*g`bX1k(I3$pefve6iOlJD3joSikEuhBV~?U}4h zzwIOQcPRXhyTDzn|M9mQPd (QH!7YSw@fyg(^B?!pF(9^8Nz#{WA74y$!B6ZfpkrrmHpWqL5%$WX2mTpM zFp!rhd?E9R|8O#l>thtD+pylFrb9GR$7hTt_gVRHvbCfj(1ed+9LU~FhvcK5nfAHA zFDp2)9>dv5!71YZi9ek@yKRamV^*-=e-s_Z-L^0M+cw2RH1DL7lOEO#<-Qj_+AZcL zff|?rzA#s|QjSl5`(`lT_P@tc3z3is5)T{Ox1J~5!3U0uQjit&cfkICKOO^d8UWX` zAS>x_ )O4CQ)I$jP3G?j!>4QX{zX$ zX|npKkGERw!E9*2h;TrwiE3Xy(%s`@EE$U6|6XurW@*8;RO3jv;U*N-fIOt~?Y9M* z3X07^DV_@P0iaKTq5^wyk#$^3i61_es;KJ4Cab^hwvic#qNxzofV`xee=VKrcz0Ka zj8d-q>E$Y0c#xou=8|&V&j7BF5yX%Qr2-p&Iw~(<$Q(^0#N;m@QJp=;_cBsS{P3~h z?$rW}S%CrKNHTU|UJCcXJk%?%#lk)xN~}!Q2z6uv_Wu@zG%gfOfP&1 N1TjJ;xLFKoXu32VVe*(k)Sh`M7`R${_#bUBrj3DHqDWg<@Jfx2~DOQhpQN$5; zV)B=dXjc^DMke?qyO302Jd98~#xbG=Iw7gT_!uGCYdZ3eq?2OumyalK7s2-c2XuL> z-2v=@`KYx=(<7O6S^d+;>s@ykuz`ee%|S KN3kFNLel{eQre+Um3?3R9uqhTV~ z@V^%v%jzcEE>_C(>k&-crt3Bp@ PIRqR;= z6AB^z*F(W>uP)dI+t@hrd$J5fiL3?OrxG2TJ#-gR!?lptLz51|$F+@|*nj~2=Y a%Y*{JL)5aHe{hSEUl9zZ;(~BrE>S>y zbODzd224!Ga+jfxPw4o#yVwvxLI}T7kSHKNI{hj^I9n&z{q%CNv&)NsL+V35?OeJJ z70BC+qih^+is?kV-kIxQDpgSV?W1e+*f=o}{NDrqq914uW>Dn1pB}EDeb7FU5aNFY z#ZIn0>6<6$f6lf`eyLuP`>OLG$puaK4|EFk3n{i5Q2MS~Ha0Z$)OKJPd0WZtItVcY zWT#g*RZY^zf;MrmZ-g(2;So(^GV};t;ui^cCBlonNrqk)O}4pX6MjG}Ltorp>xWEw zu(Z-_;5H$h1MEc~Phj7EnQpT+38eF)T&N)u86trUf5Q-F^)NyHv9n%K=_{g!|GE2Z z0hb#HFjNIodw3STS_X32#pUA>su#r7r%6@P^kY`{bHv(pr{SY?asf&0AP|4wB1iSQ zKps5-8KOgHE-Xi*lp9EEk8NNIa-RS-h7rW$3Qz;$voZv*_cBO7QqZ zXPZ6Evu{Bf^hCr 0H-I-v-m!=Nz%`MsX6lwby&1yA ze}mrRA2ZsnE}EJ=lA4rD_Rc39RNfZZGAueEpV|O^qn_V=mY(ojC_L sXo ztZyFo2z7y9m @^h)tUhWB$yE%k!&%@D3Xz>?5lc=ZQ!5VeXx3xbu&NEN&1=2oC_&~elYvY z%+Ck&A=ilAOA$Qh**w5tP7dyvPg!bWFRM9nJC+alATfu5y0UPf1hXXrh`%}?k45{a z<`FaUjzx{JPKk_CS_tZ&KbcXJf5|SzgC;XNLRT{rYKW<6FV(LZSvcB8J1+hC!#U+? za(s1 h#$y>&ff zrlx#f;4A0&xb=i!M~ZfP=WXX%@+%B5+qt`=L-y^tcM_KAuEeh?DYz7b&-fA-F*W7& z@Ow%S)?CZ^RnHl@A>Gg7mn8MJ&Oeqoe(Q8iixNHdV?zyc;t@Jp*yQxQF*D$s(pEEE z$e$+a(y0dNed&*~2 t=Lm%hgnsSi~u|^RCMVt9@2*$M@7HmQw z)+A^hJE`V(v)APeC=~d xctik14oAo^l^eX2ye;u718un(%w^P+j zCx=GPnv6fuq0FISFP^ZVe>Snjl~rLhKZc_$a5YeT*m(304O=G_W%pE)t#^U9Q2+$+ z7Ar2Sidw+p6hO3I?#@FMpEa>V{J4!(W3=S>eHD`5Hnmxv33)Zg5Ax>=BZF;G=Ovx5 zc70y 9RQ})ZE&faDap25z%2sh&x8lH(hJwRyl2C3QLjn2$+$nc~1 zWtI&V>+3%M3iXK&`|#rd+%eE5ZU^=25!^8xD4`=%^qgw+Z|81E)1K?RV9zjn!VBbR z<_B8`^>4raqtAd=_8lFCiU3Frjq$Gep0)>%nL;qjX+|I^e-lxXS%D4ZKU>s 8y@-iA`S7F znUI*6_c6cEsKjrx;+XN&APlB (M1KNjD%$!3=;swrKLlq2ZLA7WD`WKrE zT!-MC95R$$6iy|ZxJ>H7k2cOA4-UaXIsi@1&-gzT7$37|&HkI_p>Mk9KM*= lzLFXRyK9gSdnKoAix$DWRT z?%05Kw#B;u|Ag!X?HFl5_8J0SmhFppz{m40-&WWue;a_NAlW;4d`MDp)r6@fQzJMhGh9aADvr&O=;JNxhE zoc%<<&0s$kZT|-idG_K$eyOgvxEgj(T6|@kJ?X%1WlC)?2Fl;1zy$!Zy=!C}O}jgs zs&a3IaK4}THclaeg>a|&aWMjt3Kc*njK`R`e;-AbG?iX(QG#8J)i0$b(}9lDiZ;jX z0`53u#B~kv%*-x%47mRoNtr~*eR(+JWeV`v@<59hEmn8sDy7)O>PH?9&0 y}vYq3DRPtFqo=10hs^g ze_U?AvKNz=^Z*)q+z)xDtcbEx4)XNj6-<1SU{@b2!tLFh8ga4eO+sl|i5HC6w*4yz zOD~${%Eby&F)mUd_E +7uUS+we|g!H zS91LUCWP_^23y`=No+Uc6$W6U7tQ%1#FByIgciStC%S32>aiFhKLE0=&fRPWGYMjq z`lbAt2Dco=Z1LU7ZWZ`5Cej2KJS43!aO$}x)w;q+CQ_J79+FlVHn?0@7QsV`!iKMj zB>~@9T`s*9cKn!0xw3E;wo+d3e<|Gk9xTWcVN(X)g%j(b+qUItWq}0`DcuzdNGnNy zH@}9JSP;%)jRqU;D?tdB11u4&nBW=J9a%#x7t41no|QT*e^@FrJSw}382!HdTTvgH z{FgInOR}sZ9g`AE@cdXZJA=y(fv|+biDsT-DR{O{!H-Q#etDknSTcEpe^3=R-hLW! zb?i;dpIkF_-SoOU6KMojs9y}fQve?ZHfsP^sSo3(B*6EHx@8^gf%cE$R|?37wmF~J zf)#Cf2zX?XSM|4~1wXXL$A*%~6$s!pPmV32OwPOp@Z{>7MF})i5!x=p0$2}+Y92^S z9-3;Oub>J&r|cc+fBW?xe_cjnGKk4!%x}N`e<>v7KiTmmcDR7n=M@ArF!~E`An{1l zhfi>h;inJRsU&-ZJs5P3s=ua_Ofn6lzwlt@oK@V^371S9yLwmNwnh6Gb~GxKDC@^1 zi)N3DHR2d;#Zsq}fpt~#iL_?V&zOs~BhGN4(X7IH@xQ3$lWkNbe=-d!XBDNS>jv$@ zC+iSx!ieXYK)-m9fv0^6>$-S9X;EkAB+D*eyv1%8TIItIVwQB$(7y t1a{IL1y3ZK zAdP>Xr-TcaR#$|ae>3_FH~dZtzG@ELn&26I1|EJV0&l!$n+Uy1U-_K~{R6pO1vSv6 z|5Bk$ut{jZiInmG2(0f2^DmNLPYOY7x1=M;x+ZaCi%-6noY&GaVJF*3f7k4CxRZpN z+xLshv{4`fw~LI0(wTH7LlcT M^~3L#dY`5rEFhmqz` zt3@m;SGkUlvDr9wWzlbvoCXV(e0nfU6`UhVC$~5qp02wzi>u@Hk{>x&!qN!`6Y{c7 zw;yU2ZO-YH2+5+CW6fgqZ2_faSFS3O%H nw zdNnD%0q~B#f515nucEh)8Bd4{1DG(mZg}xYcP`zj3=PL880H+CUAcechvQcs oMOr>b>GtQW3>FD7(8H4E7@?SVl~N~jIa2a zUVc`94r-xR4+lBY>EJ2)Rg TsG8=qnrLp$Kl2nBO`#se zDZ!BhqzG37YwYri{HpBP+shw@ni@NWG!f 5Yx#C5#rdw4d% 8N0;x zj)kWcm}@cTUaQva>1NEXxT#@nn95g2Y$Cr07q^sP65kI~Vr+;-Q>*t*D9+QlUygKi z8CG$ `i^y2q6$oj4U07vzvF1v^il?YSI=Q%vbaJ87 zf5zBD^NE+VHH6o5dOz~`%tO E-HqnIrTLrCA({!e+!~-!p|goQ{0oKAlZ5Cu3J8<(IA$T-?6_b zz|tlWCe9D+z;}LE+>;f6>$oIRKl6gd+^Uua7s% mD>=`;~D$=-S>$_U=JP2XSdMp1$*lANRw4$<-+M^|5l`6?-!%<4ffh7Pmx+7 z@XefUD~>_U?xmA!#LfT7d(2YjCOo;|oPP=bn^*+C-Um+>FxR_>wm99D+m*|=nJr&v zgcuwWWWW9T|BA@pe*H&k@!^$d=7jq6xU$G2R`2Ckc6v-K6l*9Ribrhx@wE!+$9M7d zeutC}-XE}qf@pNs3J+#{6i$P8B()yo$r1Ei#9zf)S$;jw;h+k7O5(wZ <8OREPM!QnbG zw4xLSAKR@ezk%l!3uetW6`2J`%gayD;FWpx;OoNqwuY=S;T98n`RrCEjwInub?g~f z3vav{0e7bJqR+9DfD5{1O?6lHuzwPs#+D|rUCb}=K6gfk+9EnrqEl-^4KC{rd2}l) zK+p41F}n<1OI$c$1M5}!_O7gUEvcVK lOX3;3Vg3~B zS;--v(wYp9`xzUx6(#ov^1s&t{;z1p!1TkDNStQ>$0g$8ogljqu-4wuS$|x9XqsJK z+=9pZr?H)lGc5L_FPW~%AUeZnVaSMM9aqxpRRX`9Q(|oJAw%)S_ShzAMq9j6Y=2oe zjSL1(_}+0heVI6kXq?yWV_sBcvHWbhUaUD6{?794W5z?0izBXft}T${Gl(Rwm8KSI zciWQv$^tPSgE07=T9B{gaerkofWsgJ{YouD)ohCdiy SoWPi4qET18N{ z>%ot>ve-ltCmE_5gj+g5)d4=&JJQ0GeW&QFB^7htc~_p+DTp3ye}7h!i2JvrBxy8& zhhSiKe@l2lAv>rZtH^C+hNo^|CE=E2A_D4TxQz10XL;%&cKkgi#YW%o^tlL+eXwCd z7rc%ZM>s>cwBl$052Ro7A1U$X)V7N!a5mJOfxw>OX9@|LdQ0%e8axHRYia^V`|pZf zPU_}-xLZLa7sn5 <>kXmAphf2<1jTB>g&=A^{E3)Yz=U0~f>2$0>60Pi1N z--gZ>{6J6XUyMFe;IB@11@ytB2ztuN7ygL+1$k^W4RL1=nO zR9^Xn*$?m^7wh>)5r@Gkq!c%b)5|0%i%ZK1&_=m^@WiXo_VwZ5hq>7a*W*2*^S>QA zHY=dlak*@E!j1Vg4a^`giA42*wh`wF98HNQ)YcG5$L3NA%|z%wCy+`wtjWus99Jk` zf<7b9pSj7NXMgye0)L&K_-9_AJJl6rnDbbr<2$LnbW#Z X`jDzlc zz2U-yK3i#sA39)o_{B0eDdl3>ABUSwp9_~4GY`s97k|q<5r $oIRzi3NoJsFqHW#z?4mY1D`?X-m#HPB6W*PPkq&6dFWV13$l`Ju#{#J`+L z2g8v)?Bm}x5BaXar4%~-+kR!Sv>Blzt;MC$u8-d(0(o wSW12Mk!^x23LlV5 5vCelI0zHOVYq{h7pR67l7$*Cye{^`1s27ds#ls-;6Xhc}j7Z{8tr(q)Pi 3LJFqkB4Y#~0U1TFqHcHt z?$pv=q9O;v2cU3qll##Y-ap%%cT+7noU5XRdGI4X=~_Y01gChb@<`|MoCMXyskkkx zvVVVk3bQ F-c&Wbl!f)Bj5vO^2C9-j_$*ODZrafx~B2^T7OJu&ZQ&TZ^%lT?;u_Qy2y90kq-i zKQJ;GRzNdG8*U&J8PEpf7MPU40X(FQ?tj=M?NuxYgT8%vxa--aQ{f*I1kLvV0)HRR zbUX-2&mB0G=}u&eyGf)t(H7}z3Flb%tTsG>?b2fgtHGcZsj|DZ!V@T%C1X_KH&Df- zlq!wjRN*=&BmCR1|HyzgdykCLPH(kTYxPc5r&+jnNE7AEB1)VXZx-PK?V91nQGZ9< zV(1M-?+&;6VOm9}STKZ!p)zYunvSq=Xprh%MRu%*#}g=vxA*~f?4)G eV$z>E0&%`%Y?3ONvmZXAhcj5x0YFR~A9RyP@=o{3B_V5_QCtw=lG`T!{pRddUR zEa-n=m}ZC&)D50b>}jR1&lK4sG{bFEktY~PuLN4PoFM!AjM2?F6=g0YLeQ3YCbQ23 zUFbdp-4$$xceuovSZp^Q2!9StsnqvPb*3$K*9d3x;EQ=%wCyA0q3uCg(}`MM9Gf#d z{ejQh9#=P5dc-dqyizER{bEzdXo8Ix&Fs6b5kB?7*EAA^OoC{}i1Jr_kKeCjD_Amt zp*&)T`P{MSp*1OMrEAS|Ok1N?ptau>kF0bPwpqfi<#nX!)*rO`!+#C}jW&bzA0UfL zhZ!g%3sq(qBjgzn&X6#6WRx(gl;j25CSunRIpySbL)m!Gy0WfEtZ=uAf25X4*>Ayq z2fS%0OX=cvD6Nrn(nZ!TVxef>40}8>y|SSH+pqtJXZh{d|A7{O24F_|`C=VS@+vZ{ z+Z+g`!G>$J$N%~y3V(EhV0z>APL~WuCtp`lQB9lRwmEk=bz_qPKD|?Wa5_Vytwq() zM!zaycaX1kiL}^nLuZPsQRpA1ZB9>7JlDk!h7lZa9?E7s{9g5FG=eO$frVJK6BAn; zf&hz*v&fLeDn@-M`QdJU!h_(_a{mP8FmVP&LL8QGcG4VndVe4;xdzHTTleF&2wi^g zjgf+FnqarreFdxtct^IFV9%Ft;bsHrso7TFB} Wk@Kw zA&zu>&i0Aam-FZV99CLUcII>Nbbne|*C9yW)4~5NZGXnnGDS0It>1mT|CoLb7w&^4 zMjz5)j*o|&a3NMZ)a;V$iB34%rB89(*(K d#Sx5y_{)@LSR#K1HTUWZrQv<$3&j?RxW!PJKltsl3 zmED(xaDNC*ikdIJ-=3?A^t2 AP|d!a5v4%1sW=E&V)b80ZeM`|xtwaSUqMTO^|X|uf}ds5)T?zDX4 zYJV#1Q02dzOFE)%Np~t9YPOJ1o9a_rcB>y=Pm6VA7fB7q6pY%7?4ux;A-NaXUw~f5 z>AlFVVY`9O$QZ$OOe2?M*}6*K62g1}V~5O+)GEuc;N_2eqk1S|mmd0iI*V`N$yD%M zMkxR{Qj;Snu4^jw8U;-uHW}AH0r$Tw9Df>Lu4A)BCScDTDg%3Q+;~`{0{+>+ABH)c z|BLL0$BYBWIDi+~6+<9zm(Vl{gmsEb$@SS6`+a^_k`^5MJdXF+XqtQ4{8UvTUgtp7 zbjnH*Z{YBaHyCc?8Ni&5+Q?HBi}i&-^OxNCz$TMyMjMAOVCjYPk*_NuA7vSgw}0RG z>Ye110iX0XhH9dW+SR4Iw%GSn*oXXS78rt{e1`g^%mdUVLP$)N_u%ORHd1L=a>j7K z*6<7jINZA 5^kf#4DYea35iFPr>rj(@4rT&0{+Wj84?6l&*ND(#`HQ{u+!Z5^Eb!MhC! zFYak&new`T&rEzKmTQH>%zB~HpJmpG(>3`62Gjna%&{auWm(x^My^*4>}-uo=I^1h zB`=?H@ 4KhhF)GV8QdjVK|$kcwzeuJ+yZ- WvJ}pZ44B4C7rp8D)H6(nq7+yIfiS2X(E1s!4xzM3gJ9I2FFUUZH~7E zTSX;_aF0k{;s>t2l6Z_U{eP?-Vnl~(2Dq;XNvcAH;E(j@GWC_aDlIyN;M-lb5FK8| zyd%|#Z>~W9NQ*qX57Z_?>|g?qw`V*Wwq9ViOY0Ypj+LxFZMo|NY-Ymt3T@J82&Ze( zpyz7IFXyr)?Af<8m}g|+F+nvT7H``W$E2lOA^3^@TvobSK}%bh$A2`hv8=vXR#eY* z+2cExVe6STlp~Tq(~s<$eS~AY9AANr?fwTc(t*$;RiN)>R|iQL4d9`BJpGLIQ#`=5 zOraClMlKh4FrOXThNggrFBR&x*nUOlKFf>7RFV >&ra{a>ecix00W!Go-L;RT)+PHjF7gCAv3 z#)Fnhp}a0h`;zv&?awVqEQp@R+tHhwJanlz6>}qYEWefYDs@W3;2m>0hCyj+*8C`A zS|R52lXo%UubB7%4|>1E4Km?qVv02JsNz8C#X|~8gN-MK_J8oTyyO!N3_uQ}s9$ zrv$1LSZAa!;CtBiSOi;p*(o7*E&b%mPq*kW2A^u>L4gV zBxFmcx6Lu{;bcV8#(7Nm6MkjvYZ2g%wxXgCba#aGDStuFiC?i0c4!AemVt*LN*~w3 zxEqK(bxUn#a>ZiUG8}gpksX(|+Wn(Y8I K9-`s zKDRY={<{<-e@To#B`s;Q_~jsRl$Uo$c%qi~ls$VZCV`sA=(T( lw%fr+ ;rd)9GnZUVJw&eGiS{&>E z`Uc(nH*i3KRJ)aB)3O`{g=ko2hbICWIDZU5s$D{ KUO z;PJej5%GxxPdyf%3YmC7JOWR?k?pxB%3XJSP8e=jGba}3m0C Zam9jWvS1v3df7{6vQ=qiu@M6any)(EtEz|E3!$DAUp*zeo;y;elUIN04tIR-cu zUvW?6%soNCt_hAm)@f8N?A{mb_~@B?k>J}$%_&ini>%<1RWCx 3qT*Cw^ zr9po=lk=)g>WIN#;DdJ(N%7ZDAb&zVk)lp2NK4u?_}qZ~yH%tZG57=@S%JHSY4CSF zyav2t6&W$Of{&yX0bb)iv39jZFBa&Yxcqz3?p6}V% tNE=7qN+-m-UW(TTL2;#Wg=2kl|+{DS!C&ioDp} z7j<78$gb?{%b_vCKz2uf_F`3la4Er4pY=?xz?O%$TgRhB{@FuQ_-(GMf%>vZRCb zb2psVWaBJ3V@PuFNGq$8>CfG8Vid=C!xSa |J3vXwUh-w;5#YpY%o6r&oi{!BIg8o4aRNcsT4YrOF|V+mmVd9XDuS%NtT+ `P6fq z5%t6~Ym*SeoSF%fYJWm4g-UrFdoD}L3)wT|I3+IwJ^K3sSBSHzed%`Q?*$tVfBO6U&DA zj2`P2`8%(v<|PBvIq~J#U!Lm&X_h%9;54|Cqqf >@t$l!3jJh z!8tR0Mv#{ih>l%~8OhiwK4irGOM&4QyjkDn?BT++0{gS&cN~SA8-5W~)EAaEV`-PF zqTEUhp%0k(h<`jI{{w_cQCjy)W)2b3Eo+RRCtJ`^p^E$Q1@>I3UXnt$u#va$3+x$p ziWwG(wj=mB7w{aH=#+w)nY`pNRIJ^ok}MReD-U(V3+*0~j3~dvPb_C-VU312z{>5p z>K|!aQdG-_!DHNW>Mvzb#)FpOAGe2irjs_4-yZWrTYv77%3|jvTBsjb3Bz-vv17 z2NpCsiHy*nb!&*k2)|Ui&1DUja6QC_++1VHy9*ne*D?+pE?)1KcOPI(S`V9+&KBrk zk lT43ZOk}Q&!pIcOi9y@rA86SvGD5;eXKOw1(?PTO4 z=}yW7Ab*z=0D&N-d=5@4&P3R0Gkk^{=CLU}j*TSK(r2gI-i`v7O93S$_2_3z_= >01pktudody*?(Qr;nwHU4TLe+DeY(U8~fR3EMOt> ziGyLe `r#{D1tgB8Wu<-d2qb3f`BUe;MvVmtDa!=Yv_RM8cc_y@9lRg_h7vjF-y;idA zstI-t{p20xvG}$|3rxw1_E&OPij=u;K*J?+(>VpL B{q;a%00l(NY z`3Pddt?&uXgxlaF#P>y2?!aFbl(n04w}1TH$OO1xfaN-844!GYrjY~hho-NWGwOep z0a=Pl%67|fcwDr{Ch@3YM*TAe;OH9z!qNZq@p9RoJP_cI E4ut zm~LZAfUK#^sUM3N;OeO-)^nOxZUDV_RYL-Udv2#K^JbZ1sHb3@lZF)ycpDA9WPe7E z>OLsXgvZt=PGfw;MG%IH9(njk(1pc;1TB*alM}p%Yk?GCw0hERJcYCF5j>Ub%mDpO_P L1W8It$7$Xc2ziSMi<1bju q z1gBj`FsG#d8{T610p4`Ki#zIy;rWMq(%zS}*;+EX8k6D&UtxFlPaAx%=rh43vTJ;S z{JU4*iX&bGqy5hJOL61tc%zQ|ZWyaUw%ce**e z3OU& lH!Y-oftY6 zOC2i=5H+NQn{9R!iH0l(UX^ XMN`2C*-*R5DM2yipUc`Qi!1ePlsHgIrIq& zFp7nU6bE$`m}9c3iu39Il(-;BiXZPkE;V |rwwWbXn z4atwq?!4Hyh=N~Bogd()ttfo4z$FqigP)>P(Qgx+AyFmJQGeeI-j77!A_>}}g7Y@; z#z8{l3f1@ck>SSzq|NEnfRnqfxEDS?AJQS#QvbjLGZu)hLw_F@NB|WE9i;3?(ch)R zKB4=GexkP({7ixOj- $s-ZF;;4 zZGjpNEwJ};6JUQR`@1}qw-gQj34I|01ZN98q6~7t4{Tv&KbN+o>**&S3aIT?mk$1z z?3L0Ec1yq}Ie&zv!d!X)Z3+!;xqq#TdxE2fE;-UEeGVKh%>O3@ F6B=Bpo$COC(b) zfXG%DcB;P!X#3715#m)m7Q)VHMF~@!4VZ|+NJgFt7=MA=H`R_t4o*0d;+#?c5d#KA zFGSy->l%6-+{jGezIXzEPW}@M$shz9w}k?v>Dwl-7x!-?h-vzU3B<+y!w90dI+$cp zV1jf)Tii-~@39#0Z-#x;e+%Cscau_f$p3A_&q;iS3s;{BJ8wpIOVP&di+e&3+ZXo( ziyPGcmVdLuBoA;i?Sb%Tt#>O(U}d+!GJk%40T(&*4sWY-cW}4)Nlc-93Xp{cD>)Z% zH#B3>+@0KQc5+UaY;?u#RwHmf^}C>3n5-ide;6H>j%6iIB+8UDD<6214Zat_2BN?u zx&Ft5VGaGw_4{|r^$c{+ZIv1-kOYuFe|qPFr+=^ae-3ZI-K3QE`_CH~{6B~*jGvpf z+AT#I*LHit4r{ypz+z+iXP6T`h-;n?pokUF8(BH6@#>z?@nC_AlP}A!=lthR+$tHD z3VlLma~_8anh=*^oSg-mIkn&nc)uqtskesNl7;b{z$FbpPggv^je#7`6+7-uc$&Up zUVo%vdbKB{%B%7#0as=;Uu)R8vw;lbkOPZXB8yaQ-(>H=hc!&=exzBlcQi|Of$Dz# z>BD;uL6sO}bnZ;|hpf`*$;1|ct~ru?UmWR}v}pNt&|pkjB3Cpp`;iCI=2G>@q!N4o z^VJ)#Qa>b|mwJdZi>&0t19tne?cf;wdxY{V1aYci0?426MTQA8NSGak zk0;a`B+NuY4_UT-c`uw8(n8yp`Hpm35&_;w=|aZPk&qhWhPQ1hilO1Y%5ZN0*QxUS z^w{6g@B1$Anti`Dy#{APY$C29eW@m88xpuemS-O^adr>ol_mC&>fH6svHZJe>VHuu zOeJ~uSog)Za9P|WFNY-TwbUU=#*(;^?`Z2$H7EK7>S5OnyI`<-DlcUyXp>!9^r($$ zdv-i`cb?7S6qA8WY#ULNZ>%1NBT=&cM1Nu>_uxo}5Tx!wp>Wj&j}Efuh)%^r9Sp)w z?LSyF*y%rHJa%pWfeCbI+omF5YJa>=O$TZ6oUggT)@7MD-AbxVr1AxTu6fU8#ZTc4 zUOc)xLVBmxi~wy!f8bHH4H;a6U{nZdN|g>Pt8M{CN#c_K2;|SDIyQ6wS8mPM7`@Tx z2o5SzgX54cHR_bo67#Y1@|dRBG9OHIR0$?Ikc8zhj1ND>kJajerG|kkOMjg}T=v|~ z;kc%#9y~@*{JegjMnu<{Ha{U$Dlg}U)_i~vpGG$hos)FRb{Q`9P#YfFf|gl2EI5{n z@f%6P)gW35Fd|bTLh#D-dsuYXK@f6Ja~u~Swh)y^16iTQ6DF_jf22{%QJW9 6a z>TzGI=X-pB!^+y>c&=$pw|`x9^25uB -j$p$LIe6q0_ggd=NG#=&Fh;m)fAz zv4|-zkSzf1NB;v)wHXxu`n^mRBiHG;qz*#vkMDzOmibt{A4`^hbZ*{o zACZxsX6Z)=7MRoF wtU_~0Qa=phuY`{Y?4sB ;WSj9PsEq%_SXeJPeGdy0Nj=5{ZLTmB+Hr%bHrEZ`#NF_L0-ew?*5Q zhRszgI5)|6kRp>QvVYr04mjf}#=!Y7lm2b0UGq>I4K+ ~4v;bS36L`m>gyn^;s+k~QS}GTHCPOn3>V_o6Yn!fX?hTdR24_w|Xhw#( zVbES28w?(l7Z2bTL6GJvE}_W0h|+-pv_j)VVq}o9L~i`(fPaj%T}eBSCAKxuL04un z++p9B=XO|-u+=${P@FR4GedL~+=E{F@`x81_hnsncXn>0sV@2<1`;`tfQFxu@KDGI zln2EGuw_BvC4&~*l8(r+zq)POJ{Yx=ATM>IricUp`T`PoVP@mr+lt>jvJI*oU=5Vy zpjpIBN6cn;r+?zy4bS+oNf4an>UM+<7=kex$>ogRM~KhltARML!uV$xABXo5o_9 p zObcexNGWHOaz+VuJ~<`JYb$n$o`lm0@^JSE-nj6fReh+4N3}3wH`4k{Cz{~$3(oIB zgs}08F@HpuGw0Xkkr*v2Q}9s+EH;C@xQDzgDpK!?mc4w2WKLu{ml!Buvmh!8joFnQ z%s-hI`g4ohb~v@~OM}ZL9i|YP7jkGwyK0^kca(WjCKe>M${-2yJ9DD&NPPrgchb5T zK=HeHq7;fGVOYDqfK0nIXy?>4cts)~#9Lm%_Df;b}D^SoxsC)_ky#d%W+#KL$-$ceV~rYCu{9F;sT>CfzCsXV5m;lZ}t z0vL!4UaD)VofJKQ$2i*uIxmrCvoPx(JEI3