PDA

View Full Version : Troubleshooting KSE Errors


tk102
04-17-2006, 01:12 PM
Symptom:
KSE closes immediately when launched.

Possible Causes:
You have logged in using a username with an accent mark, an umlaut, or other diacritic. This is a known bug associated with PerlApp.
You have a non-English OS

Possible Solutions:
Log in using a username without a diacritic.
Try using KSEa, Kotor Savegame Editor Alternate, which is compiled with an earlier version of Perl without unicode implementations. This available at http://www.starwarsknights.com/tools.php


----

Symptom:
Upon expanding a savegame node in KSE you get an error that looks something like this:

Attempted to read past end of dialog.tlk(tried to read string 136336
but dialog.tlk has 136321 entries

KotOR Spells.2daCause:
This error is caused by installing a mod incorrectly or by trying to edit a savegame after uninstalling a mod.

Details:
The dialog.tlk file contains the bulk of all the names and descriptions in the game. Certain files refer to the entries in the dialog.tlk file by an index number. Many game files are GFF-formatted files and can store names/descriptions internally without the need to refer to the dialog.tlk file; however, the .2da files (eg. spells.2da, feat.2da) require dialog.tlk entries to make their descriptions appear correctly in the game. Mods that add new force powers, for example, must provide a dialog.tlk patch so that the power description becomes visible. This patch (usually provided via TSLPatcher installation file) typically adds news dialog.tlk entries. If the patch is not applied, the modded file (eg. spells.2da) will refer to a non-existant entry, causing the KSE error. Alternatively, the error can also be caused if a mod is removed after a game is played with the mod in place where the PC acquires the new power or feat.

Solution:
Re-install the mod while carefully following the readme instructions or delete the offending savegame.


----

Troubleshooting Other Problems:
Oftentimes, crashes occur due to modified files (ie. mods) placed in the Override folder. You can test to see if this is the cause by temporarily renaming your Override folder to something else and seeing if KSE starts working correctly.

For deeper troubleshooting of KSE problems, you can peform further diagnostics using a kse.log file by following these steps.
Create a file called kse.log and put in the same directory as KSE.
Launch KSE and try to recreate the error.
Close KSE.
Read the contents of kse.log in Notepad. You may be able to diagnose the problem yourself from the last couple entries in the log. If not you can email the log file to me at the email address in kse-readme.txt.

Sicon112
10-05-2008, 06:25 PM
I downloaded the "dark lords force powers" mod a few days ago. when i installed it and tried to use kse i got the attempted to read past dialog.tlk error.
However the mod didn't come with a modified dialog.tlk file and after reinstalling the mod and the game itself i still get the error. I also have no way of getting or making a modified dialog.tlk file. It now it refuses to let me load my save game, as kse has deleted all my chars powers, yet the save has one of the powers in the backround. What should i do?

(if im not supposed to post here i'm really sorry)

Darth333
10-05-2008, 06:37 PM
I knew I have heard this mod name before...now that I remember, that mod came without a dialog.tlk file due to technical restrictions when it was made back in 2004. However, it has been included in the AIOFPM which has a tlk file. You can give it a try if you want: http://www.lucasforums.com/showthread.php?t=135226

Please take the time to read the installation instructions carefully if you try it. This is one of the "early" kotor mods and there were no tools to patch the tlk file at that time so the mod will replace your original tlk file (make a backup).

It's also a good idea to make a copy of the save you want to edit with KSE prior to editing it.

Wittek
10-30-2009, 04:44 PM
Hello!

I have i little problem with gamesave editor for KOTOR II. If I start this program so it immediately closes. I have not english OS, but i downloaded kse 332a. But still it's not work. I try set my OS to english language, but still nothing.

Please help!

Thank you!

Sorry for my english

DiamondBack3003
03-29-2011, 03:50 AM
I'm having a slight well not too slight problem with KSE. Recently I purchased the digital download of KOTOR, installed it added mods everything seemed fine then when I would try to use KSE it would come up saying 'Could not find saves directory for KotOR1' even though I know theres a directory for it.

I'll go to select the right path and it'll show saved games from before I'd uninstalled it, even though I deleted them (repeatedly), lastly the area for quests will not show up either though everything else shows up just fine.

Just tried being sneaky and using switching it from KOTOR savedgame folder to TSL and same problem as before, do I have a virus or a corrupted version of KSE?

Master_Lin
08-31-2011, 05:33 AM
Hi there,
Here is my issue : I've been reinstalling TSL 4 times in less than 1 hour due to some conflicts between mods, and now it's my latest reinstallation.
I've been installing TSLRCM 1.7 + USM + Fashion Force 2 + Coruscant mod ( Jedi Temple ) and finally High Level Force Powers.

Now, when I put KSE 3.3 into the SWKOTOR2 root folder, and I start it, it is still showing my old savegames, while I've been creating new savegames with a totally new playthrough ( since I reinstalled the game and patched it. )

Someone got an idea ?

Thanks

J4ngo
10-27-2011, 01:18 PM
when i run KSE_333 i get a message:Attempted to read past end of end of dialog.tlk
(tried to read string 136366 but dialog.tlk has 136364 entries)

KotOr2 Spells.2da

and then KSE closes. never happened to me before any fixes would be very appreciated

ChAiNz.2da
10-27-2011, 03:55 PM
when i run KSE_333 i get a message:Attempted to read past end of end of dialog.tlk
(tried to read string 136366 but dialog.tlk has 136364 entries)

KotOr2 Spells.2da

and then KSE closes. never happened to me before any fixes would be very appreciated
Your particular case is described in the first post as one of the examples ;)

Cause:
This error is caused by installing a mod incorrectly or by trying to edit a savegame after uninstalling a mod.

Details:
The dialog.tlk file contains the bulk of all the names and descriptions in the game. Certain files refer to the entries in the dialog.tlk file by an index number. Many game files are GFF-formatted files and can store names/descriptions internally without the need to refer to the dialog.tlk file; however, the .2da files (eg. spells.2da, feat.2da) require dialog.tlk entries to make their descriptions appear correctly in the game. Mods that add new force powers, for example, must provide a dialog.tlk patch so that the power description becomes visible. This patch (usually provided via TSLPatcher installation file) typically adds news dialog.tlk entries. If the patch is not applied, the modded file (eg. spells.2da) will refer to a non-existant entry, causing the KSE error. Alternatively, the error can also be caused if a mod is removed after a game is played with the mod in place where the PC acquires the new power or feat.

Solution:
Re-install the mod while carefully following the readme instructions or delete the offending savegame.

DarthDudo
02-01-2012, 12:03 PM
Ok guys I am having an issue as regards KS and I have narrowed my problem down to the Dialog.tlk file I opened it with kotor tool and found 109 errors now I think I know where this problem originated, I attempted to use improved ai + hardcore mods now I did install the force power mod associated with improved ai, I edited all the relevant scripts and renamed them correctly however on further examination there is no append.tlk file with improved ai however it does modify spells.2da so Im thinking my problem lies here,Im unsure how to fix these problems anybody got any ideas?

Heres the errors when saved as xml

<?xml version="1.0" standalone="yes"?>
<DialogTlkFile>
<Table1>
<index>0</index>
<Text>Bad StrRef</Text>
<SoundRef />
</Table1>
<Table1>
<index>1</index>
<Text>ERROR: UNEXPECTED CHARACTER</Text>
<SoundRef />
</Table1>
<Table1>
<index>2</index>
<Text>ERROR: FATAL COMPILER ERROR</Text>
<SoundRef />
</Table1>
<Table1>
<index>3</index>
<Text>ERROR: PROGRAM COMPOUND STATEMENT AT START</Text>
<SoundRef />
</Table1>
<Table1>
<index>4</index>
<Text>ERROR: UNEXPECTED END COMPOUND STATEMENT</Text>
<SoundRef />
</Table1>
<Table1>
<index>5</index>
<Text>ERROR: AFTER END COMPOUND STATEMENT</Text>
<SoundRef />
</Table1>
<Table1>
<index>6</index>
<Text>ERROR: PARSING VARIABLE LIST</Text>
<SoundRef />
</Table1>
<Table1>
<index>7</index>
<Text>ERROR: UNKNOWN STATE IN COMPILER</Text>
<SoundRef />
</Table1>
<Table1>
<index>8</index>
<Text>ERROR: INVALID DECLARATION TYPE</Text>
<SoundRef />
</Table1>
<Table1>
<index>9</index>
<Text>ERROR: NO LEFT BRACKET ON EXPRESSION</Text>
<SoundRef />
</Table1>
<Table1>
<index>10</index>
<Text>ERROR: NO RIGHT BRACKET ON EXPRESSION</Text>
<SoundRef />
</Table1>
<Table1>
<index>11</index>
<Text>ERROR: BAD START OF STATEMENT</Text>
<SoundRef />
</Table1>
<Table1>
<index>12</index>
<Text>ERROR: NO LEFT BRACKET ON ARG LIST</Text>
<SoundRef />
</Table1>
<Table1>
<index>13</index>
<Text>ERROR: NO RIGHT BRACKET ON ARG LIST</Text>
<SoundRef />
</Table1>
<Table1>
<index>14</index>
<Text>ERROR: NO SEMICOLON AFTER EXPRESSION</Text>
<SoundRef />
</Table1>
<Table1>
<index>15</index>
<Text>ERROR: PARSING ASSIGNMENT STATEMENT</Text>
<SoundRef />
</Table1>
<Table1>
<index>16</index>
<Text>ERROR:CANNOT ASSIGN A VALUE TO THE LEFT-SIDE OF THIS STATEMENT.</Text>
<SoundRef />
</Table1>
<Table1>
<index>17</index>
<Text>ERROR: BAD CONSTANT TYPE</Text>
<SoundRef />
</Table1>
<Table1>
<index>18</index>
<Text>ERROR: IDENTIFIER LIST FULL</Text>
<SoundRef />
</Table1>
<Table1>
<index>19</index>
<Text>ERROR: NON-INTEGER ID FOR INTEGER CONSTANT</Text>
<SoundRef />
</Table1>
<Table1>
<index>20</index>
<Text>ERROR: NON FLOAT ID FOR FLOAT CONSTANT</Text>
<SoundRef />
</Table1>
<Table1>
<index>21</index>
<Text>ERROR: NON STRING ID FOR STRING CONSTANT</Text>
<SoundRef />
</Table1>
<Table1>
<index>22</index>
<Text>ERROR: VARIABLE ALREADY USED WITHIN SCOPE</Text>
<SoundRef />
</Table1>
<Table1>
<index>23</index>
<Text>ERROR: VARIABLE DEFINED WITHOUT TYPE</Text>
<SoundRef />
</Table1>
<Table1>
<index>24</index>
<Text>ERROR: INCORRECT VARIABLE STATE LEFT ON STACK</Text>
<SoundRef />
</Table1>
<Table1>
<index>25</index>
<Text>ERROR: NON INTEGER EXPRESSION WHERE INTEGER REQUIRED</Text>
<SoundRef />
</Table1>
<Table1>
<index>26</index>
<Text>ERROR: VOID EXPRESSION WHERE NON VOID REQUIRED</Text>
<SoundRef />
</Table1>
<Table1>
<index>27</index>
<Text>ERROR: INVALID PARAMETERS FOR ASSIGNMENT</Text>
<SoundRef />
</Table1>
<Table1>
<index>28</index>
<Text>ERROR: DECLARATION DOES NOT MATCH PARAMETERS</Text>
<SoundRef />
</Table1>
<Table1>
<index>29</index>
<Text>ERROR: LOGICAL OPERATION HAS INVALID OPERANDS</Text>
<SoundRef />
</Table1>
<Table1>
<index>30</index>
<Text>ERROR: EQUALITY TEST HAS INVALID OPERANDS</Text>
<SoundRef />
</Table1>
<Table1>
<index>31</index>
<Text>ERROR: COMPARISON TEST HAS INVALID OPERANDS</Text>
<SoundRef />
</Table1>
<Table1>
<index>32</index>
<Text>ERROR: SHIFT OPERATION HAS INVALID OPERANDS</Text>
<SoundRef />
</Table1>
<Table1>
<index>33</index>
<Text>ERROR: ARITHMETIC OPERATION HAS INVALID OPERANDS</Text>
<SoundRef />
</Table1>
<Table1>
<index>34</index>
<Text>ERROR: UNKNOWN OPERATION IN SEMANTIC CHECK</Text>
<SoundRef />
</Table1>
<Table1>
<index>35</index>
<Text>ERROR: SCRIPT TOO LARGE</Text>
<SoundRef />
</Table1>
<Table1>
<index>36</index>
<Text>ERROR: RETURN STATEMENT HAS NO PARAMETERS</Text>
<SoundRef />
</Table1>
<Table1>
<index>37</index>
<Text>ERROR: NO WHILE AFTER DO KEYWORD</Text>
<SoundRef />
</Table1>
<Table1>
<index>38</index>
<Text>ERROR: FUNCTION DEFINITION MISSING NAME</Text>
<SoundRef />
</Table1>
<Table1>
<index>39</index>
<Text>ERROR: FUNCTION DEFINITION MISSING PARAMETER LIST</Text>
<SoundRef />
</Table1>
<Table1>
<index>40</index>
<Text>ERROR: MALFORMED PARAMETER LIST</Text>
<SoundRef />
</Table1>
<Table1>
<index>41</index>
<Text>ERROR: BAD TYPE SPECIFIER</Text>
<SoundRef />
</Table1>
<Table1>
<index>42</index>
<Text>ERROR: NO SEMICOLON AFTER STRUCTURE</Text>
<SoundRef />
</Table1>
<Table1>
<index>43</index>
<Text>ERROR: ELLIPSIS IN IDENTIFIER</Text>
<SoundRef />
</Table1>
<Table1>
<index>44</index>
<Text>ERROR: FILE NOT FOUND</Text>
<SoundRef />
</Table1>
<Table1>
<index>45</index>
<Text>ERROR: INCLUDE RECURSIVE</Text>
<SoundRef />
</Table1>
<Table1>
<index>46</index>
<Text>ERROR: INCLUDE TOO MANY LEVELS</Text>
<SoundRef />
</Table1>
<Table1>
<index>47</index>
<Text>ERROR: PARSING RETURN STATEMENT</Text>
<SoundRef />
</Table1>
<Table1>
<index>48</index>
<Text>ERROR: PARSING IDENTIFIER LIST</Text>
<SoundRef />
</Table1>
<Table1>
<index>49</index>
<Text>ERROR: PARSING FUNCTION DECLARATION</Text>
<SoundRef />
</Table1>
<Table1>
<index>50</index>
<Text>ERROR: DUPLICATE FUNCTION IMPLEMENTATION</Text>
<SoundRef />
</Table1>
<Table1>
<index>51</index>
<Text>ERROR: TOKEN TOO LONG</Text>
<SoundRef />
</Table1>
<Table1>
<index>52</index>
<Text>ERROR: UNDEFINED STRUCTURE</Text>
<SoundRef />
</Table1>
<Table1>
<index>53</index>
<Text>ERROR: LEFT OF STRUCTURE PART NOT STRUCTURE</Text>
<SoundRef />
</Table1>
<Table1>
<index>54</index>
<Text>ERROR: RIGHT OF STRUCTURE PART NOT FIELD IN STRUCTURE</Text>
<SoundRef />
</Table1>
<Table1>
<index>55</index>
<Text>ERROR: UNDEFINED FIELD IN STRUCTURE</Text>
<SoundRef />
</Table1>
<Table1>
<index>56</index>
<Text>ERROR: STRUCTURE REDEFINED</Text>
<SoundRef />
</Table1>
<Table1>
<index>57</index>
<Text>ERROR: VARIABLE USED TWICE IN SAME STRUCTURE</Text>
<SoundRef />
</Table1>
<Table1>
<index>58</index>
<Text>ERROR: FUNCTION IMPLEMENTATION AND DEFINTITION DIFFER</Text>
<SoundRef />
</Table1>
<Table1>
<index>59</index>
<Text>ERROR: MISMATCHED TYPES</Text>
<SoundRef />
</Table1>
<Table1>
<index>60</index>
<Text>ERROR: INTEGER NOT AT TOP OF STACK</Text>
<SoundRef />
</Table1>
<Table1>
<index>61</index>
<Text>ERROR: RETURN TYPE AND FUNCTION TYPE MISMATCHED</Text>
<SoundRef />
</Table1>
<Table1>
<index>62</index>
<Text>ERROR: NOT ALL CONTROL PATHS RETURN A VALUE</Text>
<SoundRef />
</Table1>
<Table1>
<index>63</index>
<Text>ERROR: UNDEFINED IDENTIFIER</Text>
<SoundRef />
</Table1>
<Table1>
<index>64</index>
<Text>ERROR: NO FUNCTION MAIN() IN SCRIPT</Text>
<SoundRef />
</Table1>
<Table1>
<index>65</index>
<Text>ERROR: FUNCTION MAIN() MUST HAVE A VOID RETURN VALUE</Text>
<SoundRef />
</Table1>
<Table1>
<index>66</index>
<Text>ERROR: FUNCTION MAIN() MUST HAVE NO PARAMETERS</Text>
<SoundRef />
</Table1>
<Table1>
<index>67</index>
<Text>ERROR: NON VOID FUNCTION CANNOT BE A STATEMENT</Text>
<SoundRef />
</Table1>
<Table1>
<index>68</index>
<Text>ERROR: BAD VARIABLE NAME</Text>
<SoundRef />
</Table1>
<Table1>
<index>69</index>
<Text>ERROR: NON OPTIONAL PARAMETER CANNOT FOLLOW OPTIONAL PARAMETER</Text>
<SoundRef />
</Table1>
<Table1>
<index>70</index>
<Text>ERROR: TYPE DOES NOT HAVE AN OPTIONAL PARAMETER</Text>
<SoundRef />
</Table1>
<Table1>
<index>71</index>
<Text>ERROR: NON CONSTANT IN FUNCTION DECLARATION</Text>
<SoundRef />
</Table1>
<Table1>
<index>72</index>
<Text>ERROR: PARSING CONSTANT VECTOR</Text>
<SoundRef />
</Table1>
<Table1>
<index>73</index>
<Text>ERROR: OPERAND MUST BE AN INTEGER LVALUE</Text>
<SoundRef />
</Table1>
<Table1>
<index>74</index>
<Text>ERROR: CONDITIONAL REQUIRES SECOND EXPRESSION</Text>
<SoundRef />
</Table1>
<Table1>
<index>75</index>
<Text>ERROR: CONDITIONAL MUST HAVE MATCHING RETURN TYPES</Text>
<SoundRef />
</Table1>
<Table1>
<index>76</index>
<Text>ERROR: MULTIPLE DEFAULT STATEMENTS WITHIN SWITCH</Text>
<SoundRef />
</Table1>
<Table1>
<index>77</index>
<Text>ERROR: MULTIPLE CASE CONSTANT STATEMENTS WITHIN SWITCH</Text>
<SoundRef />
</Table1>
<Table1>
<index>78</index>
<Text>ERROR: CASE PARAMETER NOT A CONSTANT INTEGER</Text>
<SoundRef />
</Table1>
<Table1>
<index>79</index>
<Text>ERROR: SWITCH MUST EVALUATE TO AN INTEGER</Text>
<SoundRef />
</Table1>
<Table1>
<index>80</index>
<Text>ERROR: NO COLON AFTER DEFAULT LABEL</Text>
<SoundRef />
</Table1>
<Table1>
<index>81</index>
<Text>ERROR: NO COLON AFTER CASE LABEL</Text>
<SoundRef />
</Table1>
<Table1>
<index>82</index>
<Text>ERROR: NO SEMICOLON AFTER STATEMENT</Text>
<SoundRef />
</Table1>
<Table1>
<index>83</index>
<Text>ERROR: BREAK OUTSIDE OF LOOP OR CASE STATEMENT</Text>
<SoundRef />
</Table1>
<Table1>
<index>84</index>
<Text>ERROR: BREAK OUTSIDE OF LOOP OR CASE STATEMENT</Text>
<SoundRef />
</Table1>
<Table1>
<index>85</index>
<Text>ERROR: UNABLE TO OPEN FILE FOR WRITING</Text>
<SoundRef />
</Table1>
<Table1>
<index>86</index>
<Text>ERROR: UNTERMINATED STRING CONSTANT</Text>
<SoundRef />
</Table1>
<Table1>
<index>87</index>
<Text>ERROR: NO FUNCTION STARTINGCONDITIONAL() IN SCRIPT</Text>
<SoundRef />
</Table1>
<Table1>
<index>88</index>
<Text>ERROR: FUNCTION STARTINGCONDITIONAL() MUST HAVE AN INT RETURN VALUE</Text>
<SoundRef />
</Table1>
<Table1>
<index>89</index>
<Text>ERROR: FUNCTION STARTINGCONDITIONAL() MUST HAVE NO PARAMETERS</Text>
<SoundRef />
</Table1>
<Table1>
<index>90</index>
<Text>ERROR: SKIPPING DECLARATION VIA "case" STATEMENT DISALLOWED.</Text>
<SoundRef />
</Table1>
<Table1>
<index>91</index>
<Text>ERROR: SKIPPING DECLARATION VIA "default" STATEMENT DISALLOWED.</Text>
<SoundRef />
</Table1>
<Table1>
<index>92</index>
<Text>ERROR: "else" WITHOUT "if" STATEMENT.</Text>
<SoundRef />
</Table1>
<Table1>
<index>93</index>
<Text>ERROR: TOO MANY INSTRUCTIONS</Text>
<SoundRef />
</Table1>
<Table1>
<index>94</index>
<Text>ERROR: TOO MANY LEVELS OF RECURSION</Text>
<SoundRef />
</Table1>
<Table1>
<index>95</index>
<Text>ERROR: FILE NOT OPENED</Text>
<SoundRef />
</Table1>
<Table1>
<index>96</index>
<Text>ERROR: FILE NOT COMPILED SUCCESSFULLY</Text>
<SoundRef />
</Table1>
<Table1>
<index>97</index>
<Text>ERROR: INVALID AUX CODE</Text>
<SoundRef />
</Table1>
<Table1>
<index>98</index>
<Text>ERROR: NULL VIRTUAL MACHINE NODE</Text>
<SoundRef />
</Table1>
<Table1>
<index>99</index>
<Text>ERROR: STACK OVERFLOW</Text>
<SoundRef />
</Table1>
<Table1>
<index>100</index>
<Text>ERROR: STACK UNDERFLOW</Text>
<SoundRef />
</Table1>
<Table1>
<index>101</index>
<Text>ERROR: INVALID OP CODE</Text>
<SoundRef />
</Table1>
<Table1>
<index>102</index>
<Text>ERROR: INVALID EXTRA DATA ON OP CODE</Text>
<SoundRef />
</Table1>
<Table1>
<index>103</index>
<Text>ERROR: INVALID COMMAND</Text>
<SoundRef />
</Table1>
<Table1>
<index>104</index>
<Text>ERROR: FAKE SHORTCUT LOGICAL OPERATION</Text>
<SoundRef />
</Table1>
<Table1>
<index>105</index>
<Text>ERROR: DIVIDE BY ZERO</Text>
<SoundRef />
</Table1>
<Table1>
<index>106</index>
<Text>ERROR: FAKE ABORT SCRIPT</Text>
<SoundRef />
</Table1>
<Table1>
<index>107</index>
<Text>ERROR: IP OUT OF CODE SEGMENT</Text>
<SoundRef />
</Table1>
<Table1>
<index>108</index>
<Text>ERROR: COMMAND IMPLEMENTER NOT SET</Text>
<SoundRef />
</Table1>
<Table1>
<index>109</index>
<Text>ERROR: UNKNOWN TYPE ON RUN TIME STACK</Text>
<SoundRef />

EDIT:Got it sorted copied the append.tlk file and copied the relevant lines from the changes ini to improved ai tsl patch data and ran it again all is well now

Fallen Guardian
01-08-2013, 12:35 AM
This just recently started to happen. I've been using KSE for a while now and for some reason it just started saying it can't find my KotOR 2 save directory. I can find it manually but I'd really like to get this fixed so I don't have to find it every time I want to edit a KotOR 2 save.

alopez457
03-02-2013, 08:44 AM
Ok. I need help anybody. Kse worked fine for me on kotor 2 with win7 x32 but it wont pull up feats or skills with kotor 1

misanthrope prime
08-04-2013, 01:33 AM
I'm having a slight well not too slight problem with KSE. Recently I purchased the digital download of KOTOR, installed it added mods everything seemed fine then when I would try to use KSE it would come up saying 'Could not find saves directory for KotOR1' even though I know theres a directory for it.

I'll go to select the right path and it'll show saved games from before I'd uninstalled it, even though I deleted them (repeatedly), lastly the area for quests will not show up either though everything else shows up just fine.

Just tried being sneaky and using switching it from KOTOR savedgame folder to TSL and same problem as before, do I have a virus or a corrupted version of KSE?
I'm having the same problem as this guy regarding quests. Can anyone give me a hand here?