{result:numberBody(req.body.captcha_options_grid_image_size,50,500),expected:true,error:'Captcha options grid image size must be a number from 50-500'},
{result:numberBody(req.body.captcha_options_grid_icon_y_offset,0,50),expected:true,error:'Captcha options icon y offset must be a number from 0-50'},
{result:numberBody(req.body.captcha_options_num_distorts_min,0,10),expected:true,error:'Captcha options min distorts must be a number from 0-10'},
{result:numberBody(req.body.captcha_options_num_distorts_max,0,10),expected:true,error:'Captcha options max distorts must be a number from 0-10'},
{result:minmaxBody(req.body.captcha_options_num_distorts_min,req.body.captcha_options_num_distorts_max),expected:true,error:'Captcha options distorts min must be less than max'},
{result:numberBody(req.body.captcha_options_distortion,0,50),expected:true,error:'Captcha options distortion must be a number from 0-50'},
{result:inArrayBody(req.body.captcha_options_text_font,fontPaths),expected:true,error:'Invalid captcha options text font'},
{result:numberBody(req.body.captcha_options_text_wave,0,10),expected:true,error:'Captcha options text wave effect strength must be a number form 0-10'},
{result:numberBody(req.body.captcha_options_text_paint,0,10),expected:true,error:'Captcha options text paint effect strength must be a number from 0-10'},
{result:numberBody(req.body.captcha_options_text_noise,0,10),expected:true,error:'Captcha options text noise effect strength must be a number from 0-10'},
{result:numberBody(req.body.captcha_options_grid_noise,0,10),expected:true,error:'Captcha options grid noise effect strength must be a number from 0-10'},
{result:numberBody(req.body.captcha_options_grid_edge,0,50),expected:true,error:'Captcha options grid edge effect strength must be a number from 0-50'},
{result:numberBody(req.body.video_thumb_percentage,0,100),expected:true,error:'Video thumbnail percentage must be a number from 1-100'},
{result:numberBody(req.body.default_ban_duration),expected:true,error:'Invalid default ban duration'},
{result:numberBody(req.body.quote_limit),expected:true,error:'Quote limit must be a number'},
{result:numberBody(req.body.preview_replies),expected:true,error:'Preview replies must be a number'},
{result:numberBody(req.body.sticky_preview_replies),expected:true,error:'Sticky preview replies must be a number'},
{result:numberBody(req.body.early_404_fraction),expected:true,error:'Early 404 fraction must be a number'},
{result:numberBody(req.body.early_404_replies),expected:true,error:'Early 404 fraction must be a number'},
{result:numberBody(req.body.max_recent_news),expected:true,error:'Max recent news must be a number'},
{result:lengthBody(req.body.space_file_name_replacement,1,1),expected:false,error:'Space file name replacement must be 1 character'},
{result:lengthBody(req.body.highlight_options_language_subset,0,10000),expected:false,error:'Highlight options language subset must not exceed 10000 characters'},
{result:lengthBody(req.body.highlight_options_threshold),expected:false,error:'Highlight options threshold must be a number'},
{result:numberBody(req.body.global_limits_thread_limit_min),expected:true,error:'Global thread limit minimum must be a number'},
{result:numberBody(req.body.global_limits_thread_limit_max),expected:true,error:'Global thread limit maximum must be a number'},
{result:minmaxBody(req.body.global_limits_thread_limit_min,req.body.global_limits_thread_limit_max),expected:true,error:'Global thread limit min must be less than max'},
{result:numberBody(req.body.global_limits_reply_limit_min),expected:true,error:'Global reply limit minimum must be a number'},
{result:numberBody(req.body.global_limits_reply_limit_max),expected:true,error:'Global reply limit maximum must be a number'},
{result:minmaxBody(req.body.global_limits_reply_limit_min,req.body.global_limits_reply_limit_max),expected:true,error:'Global reply limit min must be less than max'},
{result:numberBody(req.body.global_limits_bump_limit_min),expected:true,error:'Global bump limit minimum must be a number'},
{result:numberBody(req.body.global_limits_bump_limit_max),expected:true,error:'Global bump limit minimum must be a number'},
{result:minmaxBody(req.body.global_limits_bump_limit_min,req.body.global_limits_bump_limit_max),expected:true,error:'Global bump limit min must be less than max'},
{result:numberBody(req.body.global_limits_post_files_max),expected:true,error:'Post files max must be a number'},
{result:numberBody(req.body.global_limits_post_files_size_max),expected:true,error:'Post files size must be a number'},
{result:numberBody(req.body.global_limits_banner_files_width,1),expected:true,error:'Banner files height must be a number > 0'},
{result:numberBody(req.body.global_limits_banner_files_height,1),expected:true,error:'Banner files width must be a number > 0'},
{result:numberBody(req.body.global_limits_banner_files_size_max),expected:true,error:'Banner files size must be a number'},
{result:numberBody(req.body.global_limits_banner_files_max),expected:true,error:'Banner files max must be a number'},
{result:numberBody(req.body.global_limits_banner_files_total),expected:true,error:'Banner files total must be a number'},
{result:numberBody(req.body.global_limits_flag_files_size_max),expected:true,error:'Flag files size must be a number'},
{result:numberBody(req.body.global_limits_flag_files_max),expected:true,error:'Flag files max must be a number'},
{result:numberBody(req.body.global_limits_flag_files_total),expected:true,error:'Flag files total must be a number'},
{result:numberBody(req.body.global_limits_field_length_postpassword,20),expected:true,error:'Global limit postpassword field length must be a number >=20'},
{result:numberBody(req.body.global_limits_field_length_message),expected:true,error:'Global limit message field length must be a number'},
{result:numberBody(req.body.global_limits_field_length_report_reason),expected:true,error:'Global limit report reason field length must be a number'},
{result:numberBody(req.body.global_limits_field_length_ban_reason),expected:true,error:'Global limit ban reason field length must be a number'},
{result:numberBody(req.body.global_limits_field_length_log_message),expected:true,error:'Global limit log message field length must be a number'},
{result:numberBody(req.body.global_limits_field_length_uri),expected:true,error:'Global limit board uri field length must be a number'},
{result:numberBody(req.body.global_limits_field_length_boardname),expected:true,error:'Global limit board name field length must be a number'},
{result:numberBody(req.body.global_limits_field_length_description),expected:true,error:'Global limit board description field length must be a number'},
{result:numberBody(req.body.global_limits_multi_input_posts_anon),expected:true,error:'Multi input anon limit must be a number'},
{result:numberBody(req.body.global_limits_multi_input_posts_staff),expected:true,error:'Multi input staff limit must be a number'},
{result:numberBody(req.body.global_limits_custom_css_max),expected:true,error:'Custom css max must be a number'},
{result:lengthBody(req.body.global_limits_custom_css_filters,0,10000),expected:false,error:'Custom css filters must not exceed 10000 characters'},
{result:numberBody(req.body.global_limits_custom_pages_max),expected:true,error:'Custom pages max must be a number'},
{result:numberBody(req.body.global_limits_custom_pages_max_length),expected:true,error:'Custom pages max length must be a number'},
{result:numberBodyVariable(req.body.board_defaults_reply_limit,globalLimits.replyLimit.min,req.body.global_limits_reply_limit_min,globalLimits.replyLimit.max,req.body.global_limits_reply_limit_max),expected:true,error:'Board defaults reply limit must be within global limits'},
{result:numberBodyVariable(req.body.board_defaults_thread_limit,globalLimits.threadLimit.min,req.body.global_limits_thread_limit_min,globalLimits.threadLimit.max,req.body.global_limits_thread_limit_max),expected:true,error:'Board defaults thread limit must be within global limits'},
{result:numberBodyVariable(req.body.board_defaults_bump_limit,globalLimits.bumpLimit.min,req.body.global_limits_bump_limit_min,globalLimits.bumpLimit.max,req.body.global_limits_bump_limit_max),expected:true,error:'Board defaults bump limit must be within global limits'},
{result:numberBodyVariable(req.body.board_defaults_max_files,0,0,globalLimits.postFiles.max,req.body.global_limits_post_files_max),expected:true,error:'Board defaults max files must be within global limits'},
{result:numberBodyVariable(req.body.board_defaults_max_thread_message_length,0,0,globalLimits.fieldLength.message,req.body.global_limits_field_length_message),expected:true,error:'Board defaults max thread message length must be within global limits'},
{result:numberBodyVariable(req.body.board_defaults_max_reply_message_length,0,0,globalLimits.fieldLength.message,req.body.global_limits_field_length_message),expected:true,error:'Board defaults max reply message length must be within global limits'},
{result:numberBody(req.body.board_defaults_min_thread_message_length),expected:true,error:'Board defaults min thread message length must be a number'},
{result:numberBody(req.body.board_defaults_min_reply_message_length),expected:true,error:'Board defaults min reply message length must be a number'},
{result:minmaxBody(req.body.board_defaults_min_thread_message_length,req.body.board_defaults_max_thread_message_length),expected:true,error:'Board defaults thread message length min must be less than max'},
{result:minmaxBody(req.body.board_defaults_min_reply_message_length,req.body.board_defaults_max_reply_message_length),expected:true,error:'Board defaults reply message length min must be less than max'},