~ "Narodnaya Soljanka 03.09.10" ~
~ "NS DMX mod Series" ~
"Problèmes & Solutions"
(crash "FATAL ERROR" et leurs solutions)
Chers membres!
Cette section est spécialement réservez aux rapports d'erreurs de la version la plus récente de
"Narodnaya Soljanka" qui comprend aussi la séries des DMX mod.
1. Requiert - Narodnaya Soljanka 03.09.10, avec ou sans le patch.
2. Requiert - NS DMX mod de 1.3 à 1.3.5, avec ou sans modifications des fichiers .dds ou .txt sauf
pour toutes autres modifications personnelle des fichiers scripts que vous allez devoir spécifié
dans votre ou vos messages.
3. Les circonstances dans lesquelles vous avez eu un CTD (retour windows).
4. N'oubliez pas de préciser la configuration de votre ordinateur!
Attention! -
Les problèmes publier sans informations précises ci-dessus ne seront pas pris en compte et peuvent être révoqués
à la discrétion des modérateurs! Évitez a tous prix aussi de postez à deux reprise le même rapport d'erreur et si c'est le cas il
s'en suivras d'un avertissement.
Et avant que vous posez votre question ou postez votre log d'erreur, jetez un oeil à ce sujet:
"Il est possible que votre problème est déja été résolu ou déja présent dans la liste des "problèmes & solutions" ..ceci pour évitez justement les doubles postes.
5. Ouvrez - Le fichier text du log d'erreur!
Le fichier text du rapport d'erreur ce trouve ici:
---\---------------------------------------------------------------------------------------------------------------------------------------------
Pour Windows XP: C:\Documents and Settings\All Users\Documents\STALKER-SHOC\logs\xray_ <your user name>. Log
Pour Windows Vista: C:\Users\Public\Documents\STALKER-SHOC\logs\xray_ <your user name>.Log
Pour Windows 7: C:\Users\Public\Documents\STALKER-SHOC\logs\xray_ <your user name>.Log
----\--------------------------------------------------------------------------------------------------------------------------------------------
(Alternative, après un retour bureau (crash "Fatal Error") Ouvrez votre fichier a l'aide du bloc-notes ou tout autre éditeur de texte, rendez-vous à la fin du fichier tout en bas (Si il y a la section inscrit "FATAL ERROR", puis il est automatiquement inséré dans votre ordinateur, vous devez copier le texte et le coller dans votre message) ..
(Alternatively, after the departure of open notepad or any other text editor, and then select the options "insert", or use the keyboard shortcut: "ctrl + v" .. (If there is an error "FATAL ERROR", then it is automatically inserted into your notebook, you need to copy text and paste it into your message) ..
==\==============================================================================
~ FATAL ERROR + Solutions Compilation Partie.1 ~
For departures on invalid vertex, missing paths, swearing at restrictor without object, in other game situations, it is necessary to remove the "nuisance" object.
Note: delete the items, being fully convinced that they are no longer needed.
1. In the file gamedata\scripts\bind_stalker.script find commented-out code block:
- Code:
-
--[[local bad_object_names = {"wpn_lr30053522", "wpn_lr30058409" } --"wpn_lr30025601", "wpn_lr30028817","wpn_lr30033589"
local i, se_name, se_obj
for i, se_name in ipairs(bad_object_names) do
se_obj = alife():object(se_name)
if se_obj then
news_manager.send_tip(db.actor,"Удалили глючный ствол:"..se_name,nil,nil,1000)
alife():release(se_obj, true)
end
end]]
2. Remove comments - [[early before local and]] at the end after the end.
3. In bad_object_names instead of those names for example trunks enter the names of objects that there is a need to remove. Each title is "", the name, if more than one, should be listed separated by commas.
Example 1. Removing the restrictor removal Gray (ATP, mobile merchant)
- Code:
-
local bad_object_names = {"atp_sedoy_delete_restrictor"}
Example 2. Removing forever buggy zombikov (Sarcophagus, for example their 2)
- Code:
-
local bad_object_names = {"sarc_arhara_zombied_respawn_154797", "sarc_arhara_zombied_respawn_149048"}
4. Save the script and load the necessary saves. Removal will be done at boot time, the PC will receive a message. Remote once more to deselect it again.
Treatment: it is enough to add to the file gamedata\scripts\se_respawn.script the following line:
- Code:
-
get_console (): execute ("load ~ Spawn now [" .. tostring (self: name ()) .. "] -> [" .. obj: name () .. "]")
before the line amk.on_REspawn (obj, self).
Note that the console will be displayed in red text like this:
! Cannot find saved game ~ spawn now [amk_embankment_soldat_respawn] -> [esc_soldier_respawn_specnaz21604] - not an error, just information.
Sometimes it can occur spontaneously without crashes sane log. For example it has been observed in laboratory X-10 or wild territory.
In some cases, helps to temporarily reduce the on-line area YY to small values. This will likely go bad patch.
To zoom in / out switch_distance must:
1. Out of the game.
2. Find the file gamedata \ config \ alife.ltx.
3. In its search for the string switch_distance.
4. And change the setting to another number, in this case, we need to reduce. We put a zero. It should look like: switch_distance = 0.
5. Save the file.
6. After passage of the problem space, leave the game and return value back. After that we play on.
In addition:
---\------------------------------------------------------------------------------------------------\---
Information from the High Shaman fashion OGSE KamikaZze (infa stalkers to understand that because of what happens departure) + additions
1) Departures out of memory:
Symptom: Any departure from the reference to the "out of memory" or similar "insufficient resources available" or "no more data is available". In addition, some departures from "Can't open section" may also be associated with a lack of memory.
Reason: STALKER - the game is extremely demanding to resources, it is overloaded, even in its pure form, and in particular some of the cards - Cordon, Dark Valley, Army Warehouses, Pripyat. In this case, it does not matter how much memory you have! Processes for the 32-bit version Vindovs available memory is limited to 2 GB and no more.
Treatment: Reduce texture quality, or in particularly serious cases, go to the static lighting. In addition, you can try to play with the command line option "-noprefetch". This option can drive without the quotes in the shortcut properties stalker by a space just behind the reference to the executable game. If you play on Vista, you can try to play first team running "bcdedit / SetIncreaseUserVA 2700" are logged in with administrative rights.
2) Departures render:
Symptom:
stack trace:
- Code:
-
001B: 0188B3B6 xrRender_R1.dll
or
001B: 02C09EE6 xrRender_R2.dll
The reason: it is a problem with the video driver related to the fact that the game gave the wrong driver functions or possibly stale data stream processing of video data ...
Treatment: well in this mission is that it is usually only a temporary problem and is treated with a simple download the latest saves. The main location of such missions - Amber, they often occur to the north-east of the bunker environmentalists.
3) Departures from the game lost or destroyed weapons
Symptom like this:
- Code:
-
FATAL ERROR
[Error] Expression: e_entity
[Error] Function: xrServer :: Process_event_reject
[Error] File: E:\stalker\patch_1_0004\xr_3da\xrGame\xrServer_process_event_reject.cpp
[Error] Line: 12
[Error] Description: entity not found. id_parent = 1350 id_entity = 1312 frame = 11471
stack trace:
Scheduler tried to update object lvl_community_respawn_xxxxx (eg, esc_soldier_respawn_11350)
Cause: This usually occurs when the boom arms svezheubitogo nepisya destroyed or abandoned level (sink into the ground) at a time when it would pick up another NPC or glavgeroy
Treatment: usually just load the last save game and fly disappears.
4) Departures to fight saves - mostly fixed in the patch 1.0004, but may also occur in 1.0005
Symptom like this:
- Code:
-
stack trace:
xrGame.dll
xrGame.dll
or error "Can't open section"
Reason: Seyvgeym damaged. This may for example be the case when the game has destroyed the corpse, but not cleared the point on the map that was tied to it. You will also get this problem if seen in the log line like:
- Code:
-
"- Critical: SMapLocation binded to non-existent object id = xxxxx"
She, however very easy to miss, as it usually flies in the log is much, much earlier than the moment when you try to load the save game beaten as a result. Failure of such bodies are frequent in the modes or in the Arena, but just as often they occur when an anomaly, such as a strong Gravel breaks corpse.
Treatment: in this case will have to find an earlier save, where the problem has not yet emerged.
5) Incorrect spawn point:
Symptom like this:
- Code:
-
! Cannot build GAME path! (Object m_tushkano_normal21511)
! CURRENT LEVEL: l10_radar
! CURRENT game point position: [376.978180] [-51.199860] [29.992897]
FATAL ERROR
[Error] Expression: I! = Levels (). End ()
[Error] Function: GameGraph :: CHeader :: level
[Error] File: e:\stalker\patch_1_0004\xr_3da\xrgame\game_graph_inline.h
[Error] Line: 171
[Error] Description: there is no specified level in the game graph: 96
stack trace:
Scheduler tried to update object m_tushkano_normal21511
... or something like this here ...
- Code:
-
FATAL ERROR
[Error] Expression: false
[Error] Function: CGameGraph :: distance
[Error] File: e:\stalker\patch_1_0004\xr_3da\xrgame\game_graph_inline.h
[Error] Line: 96
[Error] Description: There is no proper graph point neighbour!
stack trace:
The reason: a mutant or NPC spawned in the incorrect place. The reason for this is that A-life spawns them in some arbitrary radius from the spawn point, which allows you to spawn each time to diversify. Unfortunately, sometimes he manages to put the animals to a point outside the level - the ground or a wall, or zaspavneny object falls through the level.
Treatment: usually just load the last save game and fly disappears. In particularly serious cases, when you have managed to remain close to the already stuck so NPCs or monster you have to run away to another location so that this beast has gone offline in a normal place.
6) Incorrect spawn point - the second option:
Symptom like this:
- Code:
-
! DetailPathManager has failed: from [142.099976, -4.614447,445.899963] to [142.099976, -5.792273,443.799988]
! DetailPathManager has failed: from [142.099976, -4.614447,445.899963] to [142.099976, -5.792273,443.799988]
! DetailPathManager has failed: from [142.099976, -4.614447,445.899963] to [142.099976, -5.792273,443.799988]
stack trace:
001B: 01E59454 xrGame.dll
001B: 01E5E8A4 xrGame.dll
001B: 01E5E584 xrGame.dll
Reason: NPC or mutant went online in the wrong place and can not find a way to go to the destination. The game uses a navigation network entities squares interconnected, but some of them are isolated from each other. For example stones on the map border, or a place at a different height than the point of destination.
Treatment: usually just load the last save game and fly disappears. In particularly serious cases, when you have managed to remain close to the already stuck so NPCs or monster you have to run away to another location so that this beast has gone offline in a normal place.
7) Departures type «Bad argument # 2 to 'format'» or similar
Symptom like this:
- Code:
-
FATAL ERROR
[Error] Expression: fatal error
[Error] Function: CScriptEngine :: lua_error
[Error] File: D:\xray-svn\xr_3da\xrGame\script_engine.cpp
[Error] Line: 74
[Error] Description: <no>
[Error] Arguments: LUA error: e:\stalker\gamedata\scripts\_g.script: 20: bad argument # 2 to 'format' (string expected, got no value)
stack trace:
Reason: The usual cause of these crashes - the transfer of incorrect values of the native functions of the game. These errors usually occur when there was a serious failure, and it is desirable to report such departures to the developers. If such a crash occurred desirable as well throw the text above the line of the log FATAL ERROR.
Treatment: usually just load the last save game and fly disappears. If this happens you have a crash when loading saves - clearing his fashion designers with the log of departure.
A rare native inset 1: CTheoraSurface
Symptom:
- Code:
-
stack trace:
001B: 004BCFBC XR_3DA.exe, CTheoraSurface :: `vftable '()
001B: 0298C084 xrGame.dll
001B: 02994577 xrGame.dll
Reason: what happens when you are browsing the PDA contact at a time when it switches to offline.
Treatment: usually just load the last save game.
9) A rare native crash 2: CKinematicsAnimated
Symptom:
- Code:
-
stack trace:
001B: 00451CE8 XR_3DA.exe, CKinematicsAnimated :: ID_Cycle_Safe ()
Reason: usually associated with working animation and physics. If there is stable at some SPECIFIC character - please let developers.
Treatment: usually just load the last save game.
10) A rare native Aces 3: ParticleManager
Symptom:
Any flight by reference to ParticleManager.
Reason: typically occurs when vosproivedenii particles - the smoke of fires, fire, fire, etc.
Treatment: In many cases, helps to update your video drivers
11) Two or more successive errors
Symptom:
- Code:
-
[Error] [183]: Cannot create a file when that file already exists.
Reason: This is usually just two of the same mistakes that have occurred at the same time
Treatment: In the log, and there is usually a first error of the series. Deal with it as described above for the errors of this kind.
12) Errors path or route
Symptom like this:
- Code:
-
Expression: ai (). Level_graph (). Valid_vertex_id (vertex-> data (). Level_vertex_id ())
Function: CPatrolPathManager :: select_point
File: E :/ stalker/patch_1_0004/xr_3da/xrGame/patrol_path_manager.cpp
Line: 164
Description: patrol path [mil_mercs_walker_3_walk], point on path [name07], object [ros_killer_respawn_230016]
The reason: the game even patched to version 1.0005 still have a problem with routes.
Treatment: usually just load the last save game and kept close to the places where there are such departures.
13) Departures type:
- Code:
-
Expression: error handler is invoked!
Function: invalid_parameter_handler
File: E:\stalker\sources\trunk\xrCore\xrDebugNew.cpp
Line: 800
Description:
Expression: error handler is invoked!
Function: invalid_parameter_handler
File: E:\stalker\sources\trunk\xrCore\xrDebugNew.cpp
Line: 804
Description:
Reason: said boom such that the game is initialized to one in which there is an invalid parameter value (e.g. zero).
Treatment: Search in configs properly prescribed by a string. Error is very rare and is not working saves on which this bug is reproducible, eliminate its not possible.
14) Error type:
- Code:
-
Line: 12
Description: e_parent && e_entity
or
Line: 804
Expression: error handler is invoked!
They are known, but the roots of which go back to the engine, configs, textures ...
Such errors occur in any fashion and in the original and will not play.
15) Errors of the "_g.script: 22":
- It's just a fact of forced call termination due to an error/problem in some of the scripts and invoked artificially!
- If this flag error occurred (ie, game crashes on _g.script) it should not "smear green paint" an abscess and treat! That is, watch over a section line [FATAL ERROR], which usually indicates the source and cause of the error, and look/fix/ ...
16) Error: xr_logic: pstor_load_all: not_registered_type_N = [XXX] _encountered
- A consequence of the fact that an object when the game starts / Seiwa was not until the end of the initialized and when the next record Seiwa not recorded its data. Reading the same Seiwa this thing all non-prescribed one begins to read and ... read data is not intended for it. This leads to incorrect values and thus interrupt the game.
If there is such saves and they started the game on the new Fix - worth it to give them to the development. These objects need to search and look for the causes of their nedoinitsializatsii.
17) Just above the line in the log: "WARNING! _Игра_принудительно_прерывается!"
In this type of error is always a line like:
- Code:
-
"Info ~> xr_logic: pstor_load_all: obj = [prapor_mafon], id = [5818], var [?) = [<nil>], Type = [244] <-? (23/3286163456): <Error!> "
And wherein said specific 'culprit' (in this case: obj = [prapor_mafon]) and obviously weird 'krakozyaba': var [?) = [] And the odd record: type = [244], which in the lower rows referenced in the cause interrupts. All of this suggests the faulty information that the game tries to load.
18) Flight type:
- Code:
-
FATAL ERROR
[Error] Expression: false
[Error] Function: CGameObject :: ef_detector_type
[Error] File: E:\stalker\sources\trunk\xr_3da\xrGame\GameObject.cpp
[Error] Line: 857
[Error] Description: Invalid detector type request, virtual function is not properly overridden!
[Error] Arguments: C_HLCP_S
stack trace:
Explanation: 'C_HLCP_S' - it's something to get lost in the revolving Dark Valley ... Found similar, though on-the-ry rare, so still not were captured.
19) Flight type:
- Code:
-
Expression: e_entity
Function: xrServer :: Process_event_reject
File: E:\stalker\patch_1_0004\xr_3da\xrGame\xrServer_process_event_reject.cpp
Line: 12
Description: entity not found.
Explanation: Error 1.0004 patch. Corrected by installing a newer version of the patch for PM.
20) Flight type:
- Code:
-
FATAL ERROR
[Error] Expression: fatal error
[Error] Function: CInifile :: r_string
[Error] File: E:\stalker\sources\trunk\xrCore\Xr_ini.cpp
[Error] Line: 352
[Error] Description: <no expression>
[Error] Arguments: Can't find variable ammo_mag_size in [wpn_addon_grenade_launcher]
Treatment: Do not store with non-standard rifle grenades to machine guns and grenade launcher in Bulldog + leave in Nychko/backpacks/drawers with loaded weapons in grenade launcher grenades.
21) Reach for the Vertex:
- Code:
-
FATAL ERROR
[Error] Expression: vertex | | show_restrictions (m_object)
[Error] Function: CPatrolPathManager :: select_point
[Error] File: E:\stalker\sources\trunk\xr_3da\xrGame\patrol_path_manager.cpp
[Error] Line: 155
[Error] Description: any vertex in patrol path [rostok_sniper_3_walk] in inaccessible for object [rostok_stalker_0002]
The problems of the game. Maud to do with. This is the end point of the path of some monster or NPC coincides with the point of appearing anomalies (one superimposed on the other logic logic, that flight because of it). This error will occur more and more often with the introduction of dynamic anomalies.
The solution is simple - or re-login to the location (download recording automatically comes to the location) or to record and boot again, maybe anomaly formed elsewhere and then overlay points of logic errors will not.
22) Flight type:
- Code:
-
FATAL ERROR
[Error] Expression: fatal error
[Error] Function: CScriptEngine :: lua_error
[Error] File: E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
[Error] Line: 73
[Error] Description: <no expression>
[Error] Arguments: LUA error: ... obylya\stalker\gamedata\scripts\xr_gulag.script: 1190: attempt to index field 'gulag' (a nil value)
Rare, but a nasty crash. Most often appears on the Wild Territory.
Treatment: download save game to approach the problem location.
--------------------------------------------
Harmless error:
- Code:
-
~ ERROR: can't detach independant object. entity [wpn_ak7414270: 14270], parent [pri_monolith_respawn_114248: 14248], section [wpn_ak74]
~ ERROR: can't detach independant object. entity [wpn_mp52539: 2539], parent [agr_factory_defence_stalker6: 2532], section [wpn_mp5]
~ ERROR: can't detach independant object. entity [wpn_ak742662: 2662], parent [agr_factory_assault_soldier1: 2656], section [wpn_ak74]
or
- Code:
-
~ ERROR: can't detach independant object. entity [wpn_ak7414270: 14270], parent [single_player: 0], section [wpn_ak74]
or
Code
DEBUG: NPC ---
In fact, it's not a bug, but a warning of the engine or debug message. No problems it causes.
Before writing about the departure sure to read the information above - it's possible solution is already there.
----\-----------------------------------------------------------------------------------------------------------------------------------
~ FATAL ERROR + Solutions Compilation Partie.2 ~
What crashes due a controller about x-16 at Yantar, I play the statics.
- Code:
-
FATAL ERROR
[error] Expression: assertion failed
[error] Function: CSafeFixedRotationState :: create
[error] File: e:\stalker\patch_1_0004\xr_3da\xrgame\phvalidevalues.h
[error] Line: 81
[error] Description: dBodyStateValide (b)
Sometimes a flight at Yantar. Treatment is simple:
gamedata\config\creatures\m_controller.ltx
Find the line:
Max_Controlled_Count = 10, 4
And we are doing this:
Max_Controlled_Count = 0
After the assassination of dissent, to return it as it was.
------------------------------------------------------------------------
- Code:
-
FATAL ERROR
[error]Expression : fatal error
[error]Function : CInifile::r_string
[error]File : E:\stalker\patch_1_0004\xrCore\Xr_ini.cpp
[error]Line : 352
[error]Description : <no expression>
[error]Arguments : Can't find variable ammo_mag_size in [grenade_rgd5_new]
in the script bind_stalker.script find a string function actor_binder: update (delta)
and register there is a beginning:
- Code:
-
function actor_binder:update(delta)
for a=1,65535 do
local obj = alife():object(a)
if obj and string.find(obj:name(),"grenade_rgd5_new") then
alife():release(obj,true)
end
end
Like This:
- Code:
-
--колбэк на взятие предмета в инвентарь ГГ
function on_item_take(obj)
if obj:section() == "grenade_rgd5_new" then
alife():release(obj,true)
end
gps_habar.on_item_take(obj) -- Idler ++--
escape_dialog.have_a_art()
flamethrower.have_a_fire_kolobok()
flamethrower.have_a_trubki()
flamethrower.have_a_manometr()
flamethrower.have_a_vodko()
flamethrower.have_a_gorelka()
remove_spot_from_map(obj:id(),"red_location")
mod_call("check_usable_item",obj)
end
------------------------------------------------------------------------
***FATAL***: Too many lmap-textures (limit: 8 textures or 32M).
Reduce pixel density (worse) or use more vertex lighting (better).
* phase time: 7302 ms
* phase cmem: 328752 K
Клиент: Синхронизация...
* phase time: 30 ms
* phase cmem: 328753 K
* [win32]: free[886644 K], reserved[67248 K], committed[1143196 K]
* [ D3D ]: textures[387244 K]
* [x-ray]: crt heap[328753 K], process heap[7980 K], game lua[42462 K], engine lua[243 K], render[0 K]
* [x-ray]: economy: strings[11757 K], smem[28220 K]
Solution -
First Option:Must be reduced in the video settings menu in the game and go to the minimum static lighting.
Second option: reduce switch_distance. To do this:
1. Exit the game.
2. We find in the unpacked file geymdate alife.ltx the path gamedata\config\alife.ltx Open it with a text editor.
3. In it we find the line switch_distance = 140 (or something similar)
4. Change the value to another number. Posed, for example, 20. Will switch_distance = 20
5. Save the file.
6. After passing the problem where they exit from the game and return to the original value.
Walkthrough proposed by IMAGINE..
Edited By Boutch71..
------------------------------------------------------------------------
- Code:
-
[Error] Arguments: LUA error: ... Games\\stalker\\gamedata\\scripts\\state_mgr.script: (...): C stack overflow
"C stack overflow" - Stack Overflow game.
With the game running series/parallel set of operations. The intermediate results are recorded in some selected domains
(stack).The size of this overgrown depends on many factors, including the amount of clean and free RAM at start of the game.
Thus if the "old" computer or RAM crammed various stock/residents - the amount may not be 'enough' for the assembly in
critical conditions.In the assembly added to the various modules/schemes, whose work, in comparison with the original game,
adding to the / fill stack game. With last minifiksom added at least two new schemes, and actually the scheme has not yet
been optimized to the end, and why we test!
Summary:
- Optimize computer RAM (old - add, the rest - unload) at the start of the game;
- Give the stats and waiting edits/optimization.
Departure on a stack overflow happens for two reasons:
- A) 'curve' code;
- B) 'local surge' - usually an isolated case.
In case a) - to try to change your game/Cheats, revert to an early save.
In case b) - do not use it, resulting in the departure (for example the "Contacts" in the PDA) or just continue with the last
Seiwa - departures may not be repeated.
Well, if you really 'torment' departures stack - disable recently added to the assembly modules to debug them, and / or off
is not the most interesting for the modules AI.
As previously explained on the stack: a region of memory allocated in the game and which temporarily stores the results of
the various functions. If you exceed the amount of the results of the selection overflow the stack (stack overflow). Filling the
stack - is a function of time (!), Ie filling changes (usually increases, but can decrease) as the game time on location. Do not
confuse (!) Stack and storadzhi (storage) of data and objects HS games that remembers not only in RAM.
Simple logic dictates - if the stack periodically emptied (cleared of unclaimed/stale) - the overflow can be avoided.Various
(Quick) SAVE-loady least quite simply completely clean the stack, because boot (!) any (Quick) Seiwa be re-initialized
all modules/variables.But (!) Is a loss of earlier inspections/computing/counter/ ... etc.
- Shred wounded in the logic is written to "stand and wait for 60 seconds after contact with GG." If restart after talking
SAVE - trigger a conversation already worked, and time timer was set to zero -> Shreds ran home.
- Petrushka report on the implementation of the death strip, provided all registered in the gulag ATP bandits. Sometimes
or Petrukha dies (it must duplicate report surviving partner), sometimes counter slips as kill not a stalker and/or GH, and
doctor or monster ... After reboot - the trigger to work, live counter thugs empty, there was no report => Report Petrukha.
Etc. etc. ...
Thus "Treatment stale jobs" restarts quite logical, but does not apply to the stack, except for trivial complete cleaning.
Boutch71.. STALKERFOREVER Forum..
------------------------------------------------------------------------