Files
coa-server-manager/schemas/bots.json
T
ДмитрийandClaude Sonnet 5.5 5b5255cca8 Phase 3: config engine (line-preserving parser, schemas, validation, atomic save, snapshots, merge, presets) and Bots/Server settings UI
Verified: 28 real config files round-trip byte-identical; native UI edit changes
exactly one line in template and generated conf; snapshot restore is byte-exact.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-09-30 07:33:54 +05:00

977 lines
28 KiB
JSON

{
"schema": 1,
"scope": "bots",
"categories": [
{
"id": "general",
"title": "General"
},
{
"id": "population",
"title": "Population"
},
{
"id": "login",
"title": "Login"
},
{
"id": "roles",
"title": "Roles"
},
{
"id": "openworld",
"title": "Open World"
},
{
"id": "quests",
"title": "Quests"
},
{
"id": "combat",
"title": "Combat"
},
{
"id": "dungeon",
"title": "Dungeon Finder"
},
{
"id": "battlegrounds",
"title": "Battlegrounds"
},
{
"id": "social",
"title": "Social Behavior"
},
{
"id": "advanced",
"title": "Advanced"
}
],
"settings": [
{
"key": "CoaBots.RandomSpawn.DefaultCount",
"type": "int",
"category": "population",
"title": "Bots created per spawn command",
"description": "How many bots the spawn command creates when you do not give a number.",
"default": 10,
"advanced": false,
"restartRequired": "world",
"dangerous": false,
"min": 1,
"max": 1000
},
{
"key": "CoaBots.RandomSpawn.MaxCount",
"type": "int",
"category": "population",
"title": "Largest single spawn",
"description": "Safety limit for one spawn command. Very large batches can freeze the server for a moment, so raise this only when nobody else is playing.",
"default": 1000,
"advanced": true,
"restartRequired": "world",
"dangerous": true,
"min": 1,
"max": 5000
},
{
"key": "CoaBots.LeveledSpawn.Brackets",
"type": "string",
"category": "population",
"title": "Level mix of new bots",
"description": "How new levelling bots are spread over levels, as ranges with weights (1-20:40 means 40 parts of bots between level 1 and 20).",
"default": "1-20:40,21-60:33,61-79:20,80-80:7",
"advanced": true,
"restartRequired": "world",
"dangerous": false
},
{
"key": "CoaBots.RandomSpawn.AutoLogin",
"type": "bool",
"category": "population",
"title": "Bring new bots online immediately",
"description": "Newly created bots log in right away instead of waiting in the database.",
"default": true,
"advanced": false,
"restartRequired": "world",
"dangerous": false
},
{
"key": "CoaBots.RandomSpawn.AccountPrefix",
"type": "string",
"category": "population",
"title": "Bot account name prefix",
"description": "Bots live on accounts that start with this name. Changing it makes existing bots stop logging in automatically.",
"default": "CoaBotHost",
"advanced": true,
"restartRequired": "world",
"dangerous": true
},
{
"key": "CoaBots.RandomSpawn.BatchSize",
"type": "int",
"category": "population",
"title": "Bots created per step",
"description": "Creation is spread over time to keep the server smooth. Higher values are faster but can cause freezes.",
"default": 5,
"advanced": true,
"restartRequired": "world",
"dangerous": true,
"min": 1,
"max": 50
},
{
"key": "CoaBots.RandomSpawn.BatchIntervalMs",
"type": "int",
"category": "population",
"title": "Pause between creation steps",
"description": "Time between creation steps. Lower values are faster but can cause freezes.",
"default": 500,
"advanced": true,
"restartRequired": "world",
"dangerous": true,
"min": 100,
"max": 60000,
"unit": "ms"
},
{
"key": "CoaBots.AutoLoginOnStartup",
"type": "bool",
"category": "login",
"title": "Automatic bot login",
"description": "Existing bots log themselves in every time the server starts.",
"default": false,
"advanced": false,
"restartRequired": "world",
"dangerous": false
},
{
"key": "CoaBots.AutoLogin.MaxCount",
"type": "int",
"category": "login",
"title": "Maximum bots online",
"description": "The most bots that log in automatically at startup.",
"default": 800,
"advanced": false,
"restartRequired": "world",
"dangerous": false,
"min": 0,
"max": 5000
},
{
"key": "CoaBots.AutoLogin.BatchSize",
"type": "int",
"category": "login",
"title": "Bots logging in per step",
"description": "Logins are spread over time. Higher values bring bots online faster but load the server harder.",
"default": 10,
"advanced": true,
"restartRequired": "world",
"dangerous": true,
"min": 1,
"max": 100
},
{
"key": "CoaBots.AutoLogin.BatchIntervalMs",
"type": "int",
"category": "login",
"title": "Pause between login steps",
"description": "Time between login steps.",
"default": 500,
"advanced": true,
"restartRequired": "world",
"dangerous": true,
"min": 100,
"max": 60000,
"unit": "ms"
},
{
"key": "CoaBots.SpecBalance.TankTargetPct",
"type": "int",
"category": "roles",
"title": "Tank population target",
"description": "Share of bots that should be tanks.",
"default": 20,
"advanced": false,
"restartRequired": "world",
"dangerous": false,
"min": 0,
"max": 50,
"unit": "%"
},
{
"key": "CoaBots.SpecBalance.HealerTargetPct",
"type": "int",
"category": "roles",
"title": "Healer population target",
"description": "Share of bots that should be healers.",
"default": 20,
"advanced": false,
"restartRequired": "world",
"dangerous": false,
"min": 0,
"max": 50,
"unit": "%"
},
{
"key": "CoaBots.TalentBuildsPath",
"type": "string",
"category": "general",
"title": "Talent data file",
"description": "Where the community talent builds are stored. Leave empty to use the built-in search.",
"default": "",
"advanced": true,
"restartRequired": "world",
"dangerous": false
},
{
"key": "CoaBots.World.Enable",
"type": "bool",
"category": "openworld",
"title": "Bots wander the world",
"description": "Idle bots run errands: visit town services, travel to gathering or grinding areas, or wander a little.",
"default": true,
"advanced": false,
"restartRequired": "world",
"dangerous": false
},
{
"key": "CoaBots.WorldBrain.Enable",
"type": "bool",
"category": "quests",
"title": "Questing AI",
"description": "Bots pick up and complete quests on their own. When off, bots only gather, fish, grind and wander.",
"default": true,
"advanced": false,
"restartRequired": "world",
"dangerous": false
},
{
"key": "CoaBots.World.ServiceRadius",
"type": "int",
"category": "openworld",
"title": "Town services search radius",
"description": "How far a bot looks for vendors and mailboxes.",
"default": 200,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 50,
"max": 1000,
"unit": "yards"
},
{
"key": "CoaBots.World.AreaRadius",
"type": "int",
"category": "openworld",
"title": "Errand area radius",
"description": "How far a bot looks for gathering or grinding areas.",
"default": 350,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 50,
"max": 2000,
"unit": "yards"
},
{
"key": "CoaBots.World.ThinkIntervalMs",
"type": "int",
"category": "advanced",
"title": "Errand check interval",
"description": "How often each bot reconsiders its errand.",
"default": 2000,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 500,
"max": 60000,
"unit": "ms"
},
{
"key": "CoaBots.World.IdleBeforeErrandMs",
"type": "int",
"category": "advanced",
"title": "Idle time before an errand",
"description": "How long a bot must find nothing to do before it starts an errand.",
"default": 10000,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 1000,
"max": 600000,
"unit": "ms"
},
{
"key": "CoaBots.World.VerboseLog",
"type": "bool",
"category": "advanced",
"title": "Detailed errand logging",
"description": "Writes every errand step to the log. Useful for debugging, noisy with many bots.",
"default": true,
"advanced": true,
"restartRequired": "world",
"dangerous": false
},
{
"key": "CoaBots.Combat.VerboseLog",
"type": "bool",
"category": "advanced",
"title": "Detailed combat logging",
"description": "Writes combat decisions to the log. Very noisy; turn on only while hunting a specific problem.",
"default": false,
"advanced": true,
"restartRequired": "world",
"dangerous": false
},
{
"key": "CoaBots.Profile.IntentMinMs",
"type": "int",
"category": "advanced",
"title": "Shortest activity",
"description": "The shortest time a bot sticks with one kind of activity.",
"default": 900000,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 60000,
"max": 7200000,
"unit": "ms"
},
{
"key": "CoaBots.Profile.IntentMaxMs",
"type": "int",
"category": "advanced",
"title": "Longest activity",
"description": "The longest time a bot sticks with one kind of activity.",
"default": 2100000,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 60000,
"max": 14400000,
"unit": "ms"
},
{
"key": "CoaBots.Grind.SearchRadius",
"type": "int",
"category": "openworld",
"title": "Grinding search radius",
"description": "How far a bot looks for monsters to grind.",
"default": 30,
"advanced": false,
"restartRequired": "world",
"dangerous": false,
"min": 5,
"max": 200,
"unit": "yards"
},
{
"key": "CoaBots.Grind.MaxLevelAbove",
"type": "int",
"category": "openworld",
"title": "Highest monster level to grind",
"description": "How many levels above itself a bot will fight while grinding.",
"default": 3,
"advanced": false,
"restartRequired": "world",
"dangerous": false,
"min": 0,
"max": 10,
"unit": "levels"
},
{
"key": "CoaBots.Healer.CriticalHealPct",
"type": "int",
"category": "combat",
"title": "Emergency heal threshold",
"description": "Healers switch to their strongest heals when an ally falls below this health.",
"default": 50,
"advanced": false,
"restartRequired": "world",
"dangerous": false,
"min": 5,
"max": 95,
"unit": "%"
},
{
"key": "CoaBots.WorldBrain.SearchRadius",
"type": "int",
"category": "openworld",
"title": "Target search radius",
"description": "How far a bot scans for quest targets inside an objective area.",
"default": 50,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 10,
"max": 300,
"unit": "yards"
},
{
"key": "CoaBots.WorldBrain.EngageRange",
"type": "int",
"category": "combat",
"title": "Engage distance",
"description": "Distance at which a bot starts fighting a quest monster.",
"default": 28,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 5,
"max": 40,
"unit": "yards"
},
{
"key": "CoaBots.WorldBrain.MountDistanceMin",
"type": "int",
"category": "openworld",
"title": "Mount up beyond (min)",
"description": "Each bot mounts for trips longer than a personal distance drawn between this and the maximum.",
"default": 60,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 10,
"max": 500,
"unit": "yards"
},
{
"key": "CoaBots.WorldBrain.MountDistanceMax",
"type": "int",
"category": "openworld",
"title": "Mount up beyond (max)",
"description": "Upper end of the personal mount distance.",
"default": 95,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 10,
"max": 500,
"unit": "yards"
},
{
"key": "CoaBots.WorldBrain.TaxiMinDistance",
"type": "int",
"category": "openworld",
"title": "Use flight paths beyond",
"description": "Trips longer than this use a flight path when the bot knows a route.",
"default": 900,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 100,
"max": 10000,
"unit": "yards"
},
{
"key": "CoaBots.WorldBrain.SessionBreaks",
"type": "bool",
"category": "openworld",
"title": "Take breaks",
"description": "Bots alternate questing with a few minutes of town life, like a player would.",
"default": true,
"advanced": false,
"restartRequired": "world",
"dangerous": false
},
{
"key": "CoaBots.WorldBrain.GatherDetours",
"type": "bool",
"category": "openworld",
"title": "Gather nearby herbs and ore",
"description": "Gatherers step off their path for a node right next to it.",
"default": true,
"advanced": false,
"restartRequired": "world",
"dangerous": false
},
{
"key": "CoaBots.WorldBrain.MaxActiveQuests",
"type": "int",
"category": "quests",
"title": "Maximum active quests",
"description": "How many quests a bot carries at once.",
"default": 15,
"advanced": false,
"restartRequired": "world",
"dangerous": false,
"min": 1,
"max": 25
},
{
"key": "CoaBots.WorldBrain.AcceptEliteQuests",
"type": "bool",
"category": "quests",
"title": "Accept elite quests",
"description": "Solo bots take on elite quests. Off by default because they usually cannot finish them alone.",
"default": false,
"advanced": false,
"restartRequired": "world",
"dangerous": false
},
{
"key": "CoaBots.WorldBrain.QuestLevelBelow",
"type": "int",
"category": "quests",
"title": "Quests below own level",
"description": "How many levels below itself a bot still accepts quests.",
"default": 6,
"advanced": false,
"restartRequired": "world",
"dangerous": false,
"min": 0,
"max": 20,
"unit": "levels"
},
{
"key": "CoaBots.WorldBrain.QuestLevelAbove",
"type": "int",
"category": "quests",
"title": "Quests above own level",
"description": "How many levels above itself a bot still accepts quests.",
"default": 3,
"advanced": false,
"restartRequired": "world",
"dangerous": false,
"min": 0,
"max": 10,
"unit": "levels"
},
{
"key": "CoaBots.WorldBrain.MaxMobLevelAbove",
"type": "int",
"category": "quests",
"title": "Highest quest monster level",
"description": "How far above its level a quest monster may be.",
"default": 3,
"advanced": false,
"restartRequired": "world",
"dangerous": false,
"min": 0,
"max": 10,
"unit": "levels"
},
{
"key": "CoaBots.WorldBrain.MaxObjectiveDistance",
"type": "int",
"category": "quests",
"title": "Farthest quest objective",
"description": "Quests whose objectives are farther than this are not taken.",
"default": 3000,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 200,
"max": 10000,
"unit": "yards"
},
{
"key": "CoaBots.WorldBrain.GiverSearchRadius",
"type": "int",
"category": "quests",
"title": "Quest giver search radius",
"description": "How far a bot looks for quest givers.",
"default": 500,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 50,
"max": 3000,
"unit": "yards"
},
{
"key": "CoaBots.WorldBrain.MaxBadAreasPerObjective",
"type": "int",
"category": "quests",
"title": "Areas tried per objective",
"description": "How many areas a bot gives up on before setting the quest aside.",
"default": 3,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 1,
"max": 10
},
{
"key": "CoaBots.WorldBrain.QuestSuspendMs",
"type": "int",
"category": "quests",
"title": "Set-aside time (short)",
"description": "How long a quest is set aside after the bot gives up on it.",
"default": 600000,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 60000,
"max": 86400000,
"unit": "ms"
},
{
"key": "CoaBots.WorldBrain.QuestSuspendMaxMs",
"type": "int",
"category": "quests",
"title": "Set-aside time (long)",
"description": "The longest a quest can stay set aside after repeated failures.",
"default": 7200000,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 60000,
"max": 86400000,
"unit": "ms"
},
{
"key": "CoaBots.LfgFill.Enable",
"type": "bool",
"category": "dungeon",
"title": "Dungeon Finder bot fill",
"description": "When you queue alone for a dungeon, bots fill the missing tank, healer and damage roles.",
"default": true,
"advanced": false,
"restartRequired": "world",
"dangerous": false
},
{
"key": "CoaBots.AutoQueueDungeon.Enable",
"type": "bool",
"category": "dungeon",
"title": "Bots queue for dungeons by themselves",
"description": "Experimental: idle tank bots queue for a dungeon on their own and the fill above completes the party.",
"default": false,
"advanced": true,
"restartRequired": "world",
"dangerous": true
},
{
"key": "CoaBots.BGFill.Enable",
"type": "bool",
"category": "battlegrounds",
"title": "Battleground bot fill",
"description": "When anyone queues for a battleground, both teams are topped up with bots so the match starts at once.",
"default": true,
"advanced": false,
"restartRequired": "world",
"dangerous": false
},
{
"key": "CoaBots.BGFill.TargetPlayersPerTeam",
"type": "int",
"category": "battlegrounds",
"title": "Battleground team size",
"description": "Bots per team to fill up to. 0 means a full team for that battleground.",
"default": 0,
"advanced": false,
"restartRequired": "world",
"dangerous": false,
"min": 0,
"max": 40
},
{
"key": "CoaBots.WorldBrain.HelpOthers",
"type": "bool",
"category": "social",
"title": "Bots help nearby players",
"description": "A passing bot joins a fight that a friendly player is losing, without taking their loot or credit.",
"default": true,
"advanced": false,
"restartRequired": "world",
"dangerous": false
},
{
"key": "CoaBots.WorldBrain.HelpRadius",
"type": "int",
"category": "social",
"title": "Help distance",
"description": "How close a bot must be to step into a fight.",
"default": 30,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 5,
"max": 100,
"unit": "yards"
},
{
"key": "CoaBots.WorldBrain.HelpHealthPct",
"type": "int",
"category": "social",
"title": "Help below health",
"description": "Bots help when the fighting player is below this health.",
"default": 40,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 5,
"max": 95,
"unit": "%"
},
{
"key": "CoaBots.WorldBrain.ResurrectOthers",
"type": "bool",
"category": "social",
"title": "Bots resurrect fallen players",
"description": "Bots that know a resurrection spell revive friendly corpses.",
"default": true,
"advanced": false,
"restartRequired": "world",
"dangerous": false
},
{
"key": "CoaBots.WorldBrain.TemporaryParties",
"type": "bool",
"category": "social",
"title": "Temporary bot parties",
"description": "Bots of similar level with the same quest briefly team up.",
"default": false,
"advanced": false,
"restartRequired": "world",
"dangerous": false
},
{
"key": "CoaBots.WorldBrain.PartyMaxSize",
"type": "int",
"category": "social",
"title": "Temporary party size",
"description": "Largest temporary party.",
"default": 3,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 2,
"max": 5
},
{
"key": "CoaBots.WorldBrain.PartyRadius",
"type": "int",
"category": "social",
"title": "Party formation distance",
"description": "How close bots must be to team up.",
"default": 60,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 10,
"max": 300,
"unit": "yards"
},
{
"key": "CoaBots.WorldBrain.PartyMinMinutes",
"type": "int",
"category": "social",
"title": "Shortest party time",
"description": "Minimum duration of a temporary party.",
"default": 5,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 1,
"max": 120,
"unit": "min"
},
{
"key": "CoaBots.WorldBrain.PartyMaxMinutes",
"type": "int",
"category": "social",
"title": "Longest party time",
"description": "Maximum duration of a temporary party.",
"default": 20,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 1,
"max": 240,
"unit": "min"
},
{
"key": "CoaBots.WorldBrain.PlannerMinMs",
"type": "int",
"category": "advanced",
"title": "Planner interval (min)",
"description": "Shortest time between a bot's planning passes.",
"default": 2000,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 500,
"max": 60000,
"unit": "ms"
},
{
"key": "CoaBots.WorldBrain.PlannerMaxMs",
"type": "int",
"category": "advanced",
"title": "Planner interval (max)",
"description": "Longest time between a bot's planning passes.",
"default": 8000,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 500,
"max": 120000,
"unit": "ms"
},
{
"key": "CoaBots.WorldBrain.ScanMinMs",
"type": "int",
"category": "advanced",
"title": "Target scan interval (min)",
"description": "Shortest time between target scans.",
"default": 500,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 100,
"max": 10000,
"unit": "ms"
},
{
"key": "CoaBots.WorldBrain.ScanMaxMs",
"type": "int",
"category": "advanced",
"title": "Target scan interval (max)",
"description": "Longest time between target scans.",
"default": 1500,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 100,
"max": 20000,
"unit": "ms"
},
{
"key": "CoaBots.WorldBrain.SearchTimeoutMs",
"type": "int",
"category": "advanced",
"title": "Area search time limit",
"description": "How long a bot searches an empty area before trying another.",
"default": 35000,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 5000,
"max": 600000,
"unit": "ms"
},
{
"key": "CoaBots.WorldBrain.ApproachTimeoutMs",
"type": "int",
"category": "advanced",
"title": "Approach time limit",
"description": "How long a bot walks toward a claimed target.",
"default": 25000,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 5000,
"max": 600000,
"unit": "ms"
},
{
"key": "CoaBots.WorldBrain.TravelTimeoutMs",
"type": "int",
"category": "advanced",
"title": "Travel time limit",
"description": "How long a whole trip to an area may take.",
"default": 360000,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 30000,
"max": 3600000,
"unit": "ms"
},
{
"key": "CoaBots.WorldBrain.Weight.TravelPer100Yards",
"type": "int",
"category": "advanced",
"title": "Preference weight: TravelPer100Yards",
"description": "How strongly bots weigh this factor when choosing what to do next. Change only if you know the planner.",
"default": 7,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 0,
"max": 1000
},
{
"key": "CoaBots.WorldBrain.Weight.CrowdPerBot",
"type": "int",
"category": "advanced",
"title": "Preference weight: CrowdPerBot",
"description": "How strongly bots weigh this factor when choosing what to do next. Change only if you know the planner.",
"default": 6,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 0,
"max": 1000
},
{
"key": "CoaBots.WorldBrain.Weight.Overlap",
"type": "int",
"category": "advanced",
"title": "Preference weight: Overlap",
"description": "How strongly bots weigh this factor when choosing what to do next. Change only if you know the planner.",
"default": 35,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 0,
"max": 1000
},
{
"key": "CoaBots.WorldBrain.Weight.TurnIn",
"type": "int",
"category": "advanced",
"title": "Preference weight: TurnIn",
"description": "How strongly bots weigh this factor when choosing what to do next. Change only if you know the planner.",
"default": 120,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 0,
"max": 1000
},
{
"key": "CoaBots.WorldBrain.Weight.Accept",
"type": "int",
"category": "advanced",
"title": "Preference weight: Accept",
"description": "How strongly bots weigh this factor when choosing what to do next. Change only if you know the planner.",
"default": 55,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 0,
"max": 1000
},
{
"key": "CoaBots.WorldBrain.Weight.AreaOccupancy",
"type": "int",
"category": "advanced",
"title": "Preference weight: AreaOccupancy",
"description": "How strongly bots weigh this factor when choosing what to do next. Change only if you know the planner.",
"default": 12,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 0,
"max": 1000
},
{
"key": "CoaBots.WorldBrain.Weight.TargetReserved",
"type": "int",
"category": "advanced",
"title": "Preference weight: TargetReserved",
"description": "How strongly bots weigh this factor when choosing what to do next. Change only if you know the planner.",
"default": 200,
"advanced": true,
"restartRequired": "world",
"dangerous": false,
"min": 0,
"max": 1000
}
]
}