
04/13/1999 - POL071
==========
    files in data/ will use ".txt" extension
       existing .dat files will be converted automatically
    Boats are no longer broken (objtype/graphic holdover)
    Boat components will be created non-movable
    Both attacker and defender must be visible for attacks to occur
    Weapon templates can now share the same objtype
       (this is a temporary solution, pending a bit of rework)
    Holds use the correct gump (itemdesc.cfg)
    Script scheduler modified to improve performance
    Item decay scheduling modified


04/09/1999 - POL070
==========
    Added npc::Wander() - moves, usually forward, sometimes turns
    Added ai/killpcs.src, made default_AI redirect to these for some monsters
    Another try at making corpses unmovable.
    NPCs will be default only pay attention to spoken text @ 1 pace away
    Boat components will be set for no-decay :)
    Boats should respond to "right", "left", "drift right", and "drift left"
    Tests for 'walk-on' scripts will no longer depend on the uo client files
    Merchants will run critical, to be more responsive
    SendBuyWindow should handle larger inventories
    Output trimmed in several scripts
    coun, seer, and gm textcmd directories now exist
    MoveToward/RunToward will now try adjacent moves if a direct move is blocked
       (doesn't work yet..oops!  take a look, it's funny)
    Client encryption keys are now read from POL.CFG.
    Client 37 supported; core now supports RemoveTrap and Stealth skills.
    'invul' priv/setting added.
    PC corpse decay will dump contents to the ground; all others will not.
    The server should cope with T2A installations with no VERDATA.MUL
    Added uo::GetObjtypeByName( name ) - uses NAME prop from itemdesc.cfg
    Doors are now configured in itemdesc.cfg
    CreateItem.. functions will refuse to create a nonstackable with amount > 1
    Items now have a ".decayat" member.  Set to zero to disable decay,
      or gameclock() + number_of_seconds to make an item decay in the future.
    Added uo::GetEquipmentByLayer( character, layer )
    0x3ff will be the highest allowed mobile graphic
    non-'movable' items will no longer decay.


03/30/1999 - POLC069           
==========
    NPC corpses will contain an "npctemplate" property (use GetObjProperty)
    ".destroy" text command moved to a script
    "misc/oncreate.src" will run critical on character creation.
        - this is where initial equipment should be created.
    "item.movable" added - default depends on item type
    Added option to POL.CFG: "LogScriptCycles"  If set to 1, a breakdown of
      how many instructions per script were executed will be written to pol.log
    Item decay is in.  Specify 'DecayTime' in minutes in itemdesc.cfg per 
      object type.  The default is 10 minutes.
    Corpses are no longer "SaveOnExit 0"
    Split OBJECTS.DAT into POL.DAT, PCS.DAT, PCEQUIP.DAT, NPCS.DAT, 
      NPCEQUIP.DAT, and ITEMS.DAT.  Each of these contains a descriptive comment.
    Added uo::ListHostiles( character, range, flags );
    "--lan--" in servers.cfg will use your LAN IP address (192.168.*, 10.*)
    'const' declarations can be specified in .EM files

03/23/1999 - POLC068
==========
    Added "character.ar_mod" AR modifier (use same as strength_mod, etc)
    Added ".setarmod" text command to test
    Added uo::DisconnectClient( character ) [note still no way to ban]
    Added ".kick" text command to admin
    Scripts waiting for a menu selection will return if the client disconnects
    Added "character.weapon" returns weaponref to equipped weapon
    Added "weapon.skillid" returns SkillId for a weapon
    Corpses should be immovable, by clients and scripts
       [I'm not sure what happens if a corpse is on a moving boat --
        has anyone tried?]
    ".create" implemented as a script (builtin renamed to ".i_create")
    The structure returned by SelectMenuItem2() will contain the color
    Tweaked loot.inc so it doesn't create hundreds of individual gold pieces

03/19/1999 - POLC067
==========
    SaveOnExit logic will now use objtype, not graphic
    Objtype is specified in the key-position in itemdesc.cfg
      This means only one objtype can be specified per element.
      Itemdesc.cfg still has the ObjType 0xHHHH entries, for compatibility.
    object.facing is now writable.
    Added cfgfile::GetConfigStringArray
    You can buy stuff from merchants.  Try ".createnpc merchant"
      - See merchant.src, mrcspawn.src, mrcspawn.inc, mrcspawn.cfg
      - It's not complete/perfect yet, but works for the basics.
      - The whole merchant inventory spawn thing is overly complex; considering
        making each merchant NPC AI script respawn its own inventory, but
        that's all scriptside, so easy to change later


03/09/1999 - POLC066
==========
    Fixed server AV on skills window opening
    Added uo::GetRegionString() for config data per resource-region.
    Reordered parameters of GetHarvestDifficulty and HarvestResource.
    Character creation will be rejected if a stat was specified < 10
    Stats will be stored as raw values, same scale as skills.
    StrAdv, IntAdv, and DexAdv can be specified in skills.cfg.
      - Format is "chance points", where chance is a percentage, and 
        points is a die-roll specification.  Examples: "1.5 1d4", "75 1"
      - advancement is done, but sometimes doesn't display the new value
    Some additions to error messages displayed for bad die-roll specifiers.
    Starting skills will start near (known bug) values specified.




02/05/1999 - POLC065
==========
	Spells.cfg entries can specify "animation", the spell casting animation.
	    The default is 0x10
	Added uo::PlayStationaryEffect( x,y,z, effect, speed, loop );
    Added uo::DestroyRootItemInStorageArea( itemname );
    Added os::system_rpm();
    Weapons have 'quality' and 'hp' read-write properties.
    Weapons also have a readonly 'maxhp' property, which is the calculation of
      (template MaxHp) * (weapon quality)
    Damage done is now (random damage) * hp / (template maxhp)
    Added ".smember" test textcmd.  ".smember quality", then target, will
      show you "[targetted].quality" for example.
    Non-projectile weapons will take 1 hp damage occasionally when they hit
       (25% chance)
    Movement will reset the swing timer if you have a projectile weapon equipped

02/03/1999 - POLC064
==========
	Maps will display now, if they have a location set.
	  (see textcmd/test/makemap.src)
	Map items have xwest,ynorth,xeast,ysouth,gumpheight,gumpwidth properties
	Some fixes for boat creation.
	Added uo::GetMapInfo(x,y)
	Resource types are now defined in regions/resource.cfg, so others can be added.

02/01/1999 - POLC063 - Pol Core 063 
==========
	ecompile will check the environment for ECOMPILE_PATH_EM and
	  ECOMPILE_PATH_INC.  If .em or .inc files are not found by
	  searching from the current directory, these paths will be
	  searched.
    Objtype and Graphic ID are split; 'graphic' is now read/write,
	  while 'objtype' is read-only.  'objtype' can be anything from
	  0x0000 to 0xFFFF; Values above 0xF000 are reserved by the system.
      'include/extobj.inc' defines some values.
	Doors will use objtypes 0xF000 - 0xF003.  These open in different
	  ways; it should now be possible to create all types of doors.
	Ship components will use objtypes from 0xF010 to 0xF013.
	  Existing ship planks and holds will no longer function.
	It is now possible to create objects with objtypes >= 0x5000

01/27/1999 - POLC062X - Pol Core 062 (Experimental)
==========
	Added 'enum' facility to script compiler (see above, and docs)
	Added array( 1,5,9,... ) syntax to script compiler/executor
		- scripts which use this will only work with Core V062+
		- Note, 'local a := array' now obsoletes 'local a array'
	Next non-experimental release after a script/config release can
	  be made.

01/26/1999 - POLC061X - Pol Core 061 (Experimental)
==========
	Added ConsumeMana( who, spellid )
	Added ConsumeReagents( who, spellid )
	Added AppendConfigFileElement( configfile, elemtype, elemkey, properties );
	Added UnloadConfigFile( configfile );
	Added ListEquippedItems( who );
	Added ListObjectsInBox(x1,y1,z1,x2,y2,z2);
	Added ".writequip [tag]", writes your equipment to equip.cfg
	Added to textcmd/test: ".consmana", ".consreg", ".listbox"

01/24/1999 - POL060Ex - Experimental, dev-only release
==========
	That means, doesn't go to any test system! developer machines only.
    Performance enhancements to ListMobilesInLineOfSight
    Added uo::SendPacket( to_whom, packet_hex_string );
    Added ".sendpacket" to test this
    Reorganized locations of scripts.
      AI scripts go in ai/
      Skill-window skill scripts go in skills/
      Item-use scripts go in items/
      Startup scripts go in startup/
      4 leftover scripts go in misc/
      .inc files go in include/
      (many .inc files are still in util/ - they'll be okay there for a while)
      The only script in /scripts is start.src
	Changes made to segment map into zones for item/mobile existence,
	  so 'search near' and line-of-sight type stuff will take far less time.
	  (This is why it's devel-only - we need to beat on this)
	  Only a few functions take advantage of this - the first step is to get
	  all the items and mobiles into the segmented storage.


01/23/1999 - POL059
==========
    New event types: EVID_ENTEREDAREA, EVID_LEFTAREA, EVID_OPPONENT_MOVED
        - More to do yet on these, but they will tell you whenever anything
          enters or leaves a given range threshold
        - See CSTGUARD.SRC, as always :)
    spawner.src rewritten somewhat - more to come
    It should be impossible to set an item's color to a color that will
      cause a client crash.
    Added cfgfile::GetConfigMaxIntKey(config_file)
    uo::EnableEventType renamed to EnableEvents, takes an optional 'range'
    Added uo::DisableEvents
    Tachometer added.  ".rpm" to view last minute's game-loop iteration count.
        - "WatchRpm=1" in pol.cfg will display every minute, also.
        - My P133/Win98 gets around 300, P166/WinNT gets around 560
           (hmm, those are debug build.. release: ~800 P133/Win98)
        - This number is highly dependent upon # of NPCs
    Pirate.src changed to use EVID_ constants from include/eventid.inc

01/21/1999 - POL058
==========
    Inscription updated to build smaller menus, and other fixes (DT)
    Scripts updated to correct boolean-return values: (DT)
        - tinkering
        - creature_spellcast
        - carpentry
    Alchemy re-implemented as OSI-style. (DT)
    Text commands split into command levels.
        - textcmd has five subdirectories: admin gm seer coun player
        - Characters can have a CmdLevel property in OBJECTS.DAT, which specifies
          which of these they fall under.  'player' is the default.
          CmdLevel _must_ be one of these, or not specified.
        - All text commands moved to textcmd/admin
        - All "built-in" text commands assumed to be admin level.
    Client V 0.36+ (until they change again :) only will be accepted.
    Equip.cfg now detects decimal/hex values for objtype and color, like everywhere else.
      (hex only was by design, but not commented, and different from all else, so..)            
    Fixed a crash bug in compiler if ';' was the first effective statement
    AI updated, consolidated further into default_AI with new natures (rje)
    Several AI scripts removed; use default_AI instead.
    Energy bolt unbroken (DC)
    Healers will heal poison and damage (DC)
    Field spells updated for different orientations (DT)
    Fire field, poison field use walk-on scripts (DT)
    Spellbook.src updated to put the scrolls in the spellbook (DT)

01/18/1999 - POL057
==========
    Added SplitWords( text ): returns array of words in a string 
        (space-delimited only, no commas, sorry)
    NPCs will have their template name follow "NPC" in objects.dat
    NPC Templates can specify AttackSpeed, AttackDamage, and AttackSkillId
      these are exactly the same as Speed, Damage, and SkillId properties in
      weapon.cfg; in fact, a weapon template is generated for each NPC.
      This has some repurcussions if you, say, create an ettin, then edit 
      npcdesc.cfg to change damage, then create another ettin.  The new
      values won't take effect until a system restart.
    SelectMenuItem will return an error if the menu is too large.
    AR can be specified in NPC templates, in standard die form.  This will be
      "rolled" on creation, then saved with each individual creature.
    Spellbooks may be opened with the Open Spellbook macro, if the spellbook
      is equipped or in the top level of your backpack.
    Spells may be cast directly from spellbooks.
    Formulas, animations updated for spells:
        - Agility
        - Bless    (plays anim on caster?)
        - Clumsy
        - Cunning
        - Curse
        - Feeblemind
        - Mass Curse
        - Strength
        - Weaken
        - Greater Heal
    Explosion spell added


01/17/1999 - POL056
==========
    RequestInput( character, item, text ) - displays message, gets next input line
    ReadGameClock() - elapsed game seconds counter
    Alchemy, Inscription, Blacksmithy, Carpentry, Tinkering updated (DT)
    Loot script updated (DT)
    Recall rune double-click script added
    Compiler updated; would sometimes not emit the "implicit return" at end of functions.
        - this affected make_blacksmith_items, at least.
    make_blacksmith_items updated to use (menuselection.objtype) (ES)
    Script profiling info will only be displayed if ProfileScripts is set in watch.cfg
    default_AI changed to kill creatures with unknown natures.
    Corpses will have all the custom properties that the creature had when living.
    Limited skill delay added.
        - Set a "Delay" property in skills.cfg.  Other skill use will
          be disabled until 'n' seconds after the initial skill was begun.  Note, we
          may want to change this timer to start after the skill is complete,
          or after the skill script calls Detach().
        - Only Hiding has a skill delay at this time.
        - No attempt is made to disable skill use in item-use scripts.
          (So, you could hide, then turn around and use a hammer etc)
    Net-negative stat modifiers should be handled correctly.
        - If they would modify the stat below 1, it is assumed to be 1.
        - the real modifier is "hidden" so scripts don't have to do anything special.
    Fixed stat-modifying scripts (durations,amounts to be debated) (ES)
        - Agility
        - Bless
        - Clumsy
        - Cunning
        - Curse
        - Feeblemind
        - Mass Curse (pretty major rewrite)
        - Strength
        - Weaken
      The fix made was to change the stats by an amount, then change
          them back by the same amount - this way, curse can cancel
          bless, etc, but a weak curse will only partially cancel
          a strong bless.
      No attempt was made to fix the animations, which don't appear.
    Added animations, sounds to the following spells:
        - Cure
        - Dispel Field
        - Mana Drain (also, uses resist vs magery)
        - Mana Vampire (also, uses resist vs magery)
        - Mind Blast
        - Flame Strike
    Fireball spell added
    Heal spell added
    Greater Heal spell added
    Damage changed on the following spells:
        - Magic Arrow
        - Lightning Bolt
        - Harm
        - Flame Strike
    Damage messages for Earthquake are sent private (Thank you!)
    strength, intelligence, and dexterity object members will reflect
       the modified values, not underlying values.
    Chain Lightning moved back to 7th circle
    Meteor Swarm moved back to 7th circle
    Docs updated for new UO.EM functions
    '.objtype' is writable for mobiles.  If world state is saved with this
      modified, such modifications will become undone when the system reloads.
    ".setobjtype", ".showstats", ".powerup" added

01/16/1999 - POL055
==========
    Timer granularity improved  (scripts, combat timers, casting delay timers)
    npc::Move/Run functions use the following formula for timeout:
       after moving, sleep (1000 - dexterity * 3) milliseconds
       minimum is 250 milliseconds.
       If running, halve this (min. 125 ms)
       Give me a better formula, and I'll use it.
    os::sleepms( milliseconds ) added.
    Castle Guards always run critical.
    util/skillid.inc filled in.  Scripts modified to use.
    Pirate script added, equip.cfg updated with an outfit (Rob)
    default_AI updated (trapper) (Rob)
    Access violations will be written to the log file.  Email any
     that hit you to syzygy@pobox.com
    "showadv" privilege/setting will show raw skill updates as they occur.
    Comments at the top of OBJECTS.DAT will show mobile/toplevel item count.
    Game time counter added (can't access from scripts yet)

01/15/1999 - POL054
==========
    "SelectTimeout" option in POL.CFG.  Set to 0 to hog the processor.
    Added EquipFromTemplate(npc,template) - equips from EQUIP.CFG by name
    Internal: build mode changed to multithreaded.
    "--ip--" can be substituted for IP in SERVERS.CFG; uses the first 
      non-127.*, 192.168.*, 10.* IP address found.
    Compiler bug fixed, where in some cases functions would be called incorrectly.
      This afflicted skeleton and default_AI, and likely others, resulting in
      ever-increasing memory usage and incorrect behaviour.
    Telekinesis added (DC)  
      (I notice it's a bit too powerful: can take equipped items, 
       and items in any container - syz)
    Detect Hidden to pit Detect Hidden versus Hiding (DC)
    Skills updated to use non-difficulty-based CheckSkill:
        Eval Int, Fletching, Healing, Item ID, Musicianship, Spirit Speak,
        Taste ID, Tracking, Hiding
        "Point Value" also increased on these.
        (lumberjacking is and should be difficulty-based, due to resources)
    Casting delay added.  Delay, in milliseconds, can be set in CIRCLES.CFG.
      Note, the delay is rounded to seconds ((delay+500)/1000).
      This will be true until timer granularity in general is improved.
      Also note, the animation isn't played long enough.
    Client disconnect with target cursor active handled appropriately. 
    Added GrantPrivilege( chr, priv ), ".grantpriv priv" + target
    Added RevokePrivilege( chr, priv ),".revokepriv priv" + target
     (see docs for info on privileges/settings)
!!! Script "case" syntax modified to disallow bare-string tags.  Misspellings
     of things like UOBJ_PURPLE_POTION were being seen as strings, and
     not flagged as errors.  All scripts that used the offending syntax updated.
    Changes to carpentry, tinkering, blacksmithy for repair
    Loot on corpses added


01/12/1999 - POL053
==========
    "color" is now read-write, for mobiles and items.
    ".mycolor", ".showcolor", ".setcolor" text commands added.
    "name" is now read-write, for mobiles and items.
    ".setname" text command added.
    If CheckSkill is passed a negative value for difficulty, it will make a
      non-difficulty based skill check.  If successful, 100% of points are awarded.
      The percentage chance will be the effective skill (min 2, max 98).
      In the future, perhaps different curves will be defined in SKILLS.CFG.
    Characters can be deleted.
    Mining updated (DT)
    alchemy.src, alchemy2.src, drink_potion, eat, poison_skill updated (DT)
    taming.src updated (DT)
    Docs on Alchemy, Blacksmithy, Inscription, Tinkering added (DT)
    Start of resource system - local depletions only, so far (see lumberjack.src)
    Added GetHarvestDifficulty()
    Added HarvestResource()


01/10/1999 - POL052
==========
    "TemplateName" in NPCDESC is gone.  The tag now follows "NpcTemplate", so NPCDESC.CFG
       can be accessed through the CFGFILE module.
    Updated all entries in NPCDESC.CFG to follow this format.
      (Note many entries in NPCDESC still don't have "natures" matching default_AI,
       so they just exit, and so stand around)
    Added a default: clause to default_AI which syslogs when an unknown nature comes up.
    ".script" read-write property added to NPCs. (writing doesn't restart the script)
    Added uo::RestartScript( npc )
    Detect Hidden skill added (DC)
    Earthquake spell added (DC)
    Mana Drain spell added (DC)
    Mana Vampire spell added (DC)
    Object reference added to docs (help welcome, class hierarchy visuals esp.)

01/09/1999 - POL051
==========
    Documentation added for 26 script functions
    Changed many script names in NPCDESC to default_AI per Rob's instructions
    Speech event types will be "speech", not "Speech"
    Scripts updated to check for either of the above possibilities
    Script errors in functions will display the line # of the error, not the function.
    "engage" and "disengage" event types added (see docs)
    Added EnableEventType( eventtype ) 
    "damage" event type added
    npc::move() can take a number.  0=N,1=NE,2=E, ..., 7=NW, 8=N, ...
      (so, move( self().facing-2 ) turns left, for example)
    See CSTGUARD.SRC for an example of a script using the new events.    

01/08/1999 - POL050
==========
    Internal: STLport used rather than MS STL
    Added MoveItemToLocation( item, x, y, z )
    Added MoveItemToContainer( item, container, x := -1, y := -1 )
    Added boat::SystemFindBoatBySerial( serial )
    Added EquipItem( character, item )
    Added ".whereship" command (target ship deed)
    Added ".equip" command
    Added ".moveitem" command
    Added ".movetocont" command
    Items in bankboxes should be targettable
    Light levels will be resent even if you don't move between transportation
    Scripts that execute 500 or more "instructions" will have profiling information logged.
    Files in the devel distribution will no longer be read-only
    Script .ECL files will be included in the devel distribution.
    AI scripts reorganized (Rob)

01/07/1999 - POL049
==========
    Ship holds are now locked on creation, and associated with the keys.
    First attempt at character logout on disconnect (no timeouts yet)
    Scripts must now use program foo(param,param,..) .. endprogram to get arguments
    SPELCAST.EM, SKILLUSE.EM, and ITEMUSE.EM are all history.
    text command scripts can use program .. endprogram to get arguments.
    All scripts converted to use program..endprogram to get args.
    Hiding skill added (DC)
    Healers added (DC)
    Invisibility spell added (DT)

01/07/1999 - POL048
==========
    All scripts updated to use function .. endfunction
    ".makeshipdeed" script added - creates a ship deed in your backpack (only 0x4000)
    ship deeds can be used to place ships. They create keys and a deed certifying ownership.
    the "." member operator will have higher precedence than the unary operators.
    script functions can be called before they are defined.
    unused script functions will not be included in .ECL files.
    Corrected a precedence error in compiler - ev.text["bank"] will work correctly now.

01/05/1999 - POL047
==========
    Fixed a compiler bug where 'default:' followed by 'endcase' would be flagged an error
    os::syslog( text ) function added - logs to pol.log and prints to console
    Entries in ITEMDESC.CFG can have more than one OBJTYPE property. Note that 
     the 'name' property in ITEMDESC.CFG is not used.
    ".objtype" is writable, for non-multi items only.  Use with caution! This should not be
      used to convert, say, an apple to a container.
    Object types and serial numbers will be stored in hex format in data files.
    "death" script will be executed on NPC death
    "chrdeath" script will be executed on player character death.
      - os::parameter() will return the corpse for each.
    Many AI scripts updated (Rob)
    SystemFindObjectBySerial( serial ) added - searches everywhere.
    Hidden characters who take damage will become unhidden.
    ListMobilesNearLocationEx(x,y,z, range, flags) added
      Add together constants in LISTEX.INC to build flags.
    CreateItemInContainer( container, objtype, amount ) added - almost forgot!

01/03/1999 - POL046
==========
    Some changes to resurrection so the rezzed won't see peacemode ghosts
    Newly killed characters should now see nearby ghosts.
    Beginnings of a hidden flag - ".hidden" property added to mobiles
     The following functions ignore hidden characters:
       - ListMobilesNearLocation
            This means firefield etc won't affect hidden characters, 
            for the time being.
       - ListMobilesInLineOfSight
     The following actions unhide a character:
       - Movement
       - Speech
       - Casting a spell
       - Using a skill
       - Double-clicking any item that 'RequiresAttention'
         (this isn't quite right - just a quick fix to allow container use)
     Note again that this is just a start - it doesn't take much thinking for 
      me to come up with something that won't work right with hiding. But 
      here's something to bang on.
    ".hideme" text command added.

01/02/1999 - POL045
==========
    case..endcase script construct added
    Taste Identification script updated to use                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  