| 
						 | 
						- {{# def.definitions }}
 - {{# def.errors }}
 - {{# def.setupKeyword }}
 - {{# def.$data }}
 - 
 - {{
 -   var $rule = this
 -     , $definition = 'definition' + $lvl
 -     , $rDef = $rule.definition
 -     , $closingBraces = '';
 -   var $validate = $rDef.validate;
 -   var $compile, $inline, $macro, $ruleValidate, $validateCode;
 - }}
 - 
 - {{? $isData && $rDef.$data }}
 -   {{
 -     $validateCode = 'keywordValidate' + $lvl;
 -     var $validateSchema = $rDef.validateSchema;
 -   }}
 -   var {{=$definition}} = RULES.custom['{{=$keyword}}'].definition;
 -   var {{=$validateCode}} = {{=$definition}}.validate;
 - {{??}}
 -   {{
 -     $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it);
 -     if (!$ruleValidate) return;
 -     $schemaValue = 'validate.schema' + $schemaPath;
 -     $validateCode = $ruleValidate.code;
 -     $compile = $rDef.compile;
 -     $inline = $rDef.inline;
 -     $macro = $rDef.macro;
 -   }}
 - {{?}}
 - 
 - {{
 -   var $ruleErrs = $validateCode + '.errors'
 -     , $i = 'i' + $lvl
 -     , $ruleErr = 'ruleErr' + $lvl
 -     , $asyncKeyword = $rDef.async;
 - 
 -   if ($asyncKeyword && !it.async)
 -     throw new Error('async keyword in sync schema');
 - }}
 - 
 - 
 - {{? !($inline || $macro) }}{{=$ruleErrs}} = null;{{?}}
 - var {{=$errs}} = errors;
 - var {{=$valid}};
 - 
 - {{## def.callRuleValidate:
 -   {{=$validateCode}}.call(
 -     {{? it.opts.passContext }}this{{??}}self{{?}}
 -     {{? $compile || $rDef.schema === false }}
 -       , {{=$data}}
 -     {{??}}
 -       , {{=$schemaValue}}
 -       , {{=$data}}
 -       , validate.schema{{=it.schemaPath}}
 -     {{?}}
 -     , {{# def.dataPath }}
 -     {{# def.passParentData }}
 -     , rootData
 -   )
 - #}}
 - 
 - {{## def.extendErrors:_inline:
 -   for (var {{=$i}}={{=$errs}}; {{=$i}}<errors; {{=$i}}++) {
 -     var {{=$ruleErr}} = vErrors[{{=$i}}];
 -     if ({{=$ruleErr}}.dataPath === undefined)
 -       {{=$ruleErr}}.dataPath = (dataPath || '') + {{= it.errorPath }};
 -     {{# _inline ? 'if (\{\{=$ruleErr\}\}.schemaPath === undefined) {' : '' }}
 -       {{=$ruleErr}}.schemaPath = "{{=$errSchemaPath}}";
 -     {{# _inline ? '}' : '' }}
 -     {{? it.opts.verbose }}
 -       {{=$ruleErr}}.schema = {{=$schemaValue}};
 -       {{=$ruleErr}}.data = {{=$data}};
 -     {{?}}
 -   }
 - #}}
 - 
 - 
 - {{? $isData && $rDef.$data }}
 -   {{ $closingBraces += '}'; }}
 -   if ({{=$schemaValue}} === undefined) {
 -     {{=$valid}} = true;
 -   } else {
 -   {{? $validateSchema }}
 -     {{ $closingBraces += '}'; }}
 -     {{=$valid}} = {{=$definition}}.validateSchema({{=$schemaValue}});
 -     if ({{=$valid}}) {
 -   {{?}}
 - {{?}}
 - 
 - {{? $inline }}
 -   {{? $rDef.statements }}
 -     {{= $ruleValidate.validate }}
 -   {{??}}
 -     {{=$valid}} = {{= $ruleValidate.validate }};
 -   {{?}}
 - {{?? $macro }}
 -   {{# def.setupNextLevel }}
 -   {{
 -     $it.schema = $ruleValidate.validate;
 -     $it.schemaPath = '';
 -   }}
 -   {{# def.setCompositeRule }}
 -   {{ var $code = it.validate($it).replace(/validate\.schema/g, $validateCode); }}
 -   {{# def.resetCompositeRule }}
 -   {{= $code }}
 - {{??}}
 -   {{# def.beginDefOut}}
 -     {{# def.callRuleValidate }}
 -   {{# def.storeDefOut:def_callRuleValidate }}
 - 
 -   {{? $rDef.errors === false }}
 -     {{=$valid}} = {{? $asyncKeyword }}await {{?}}{{= def_callRuleValidate }};
 -   {{??}}
 -     {{? $asyncKeyword }}
 -       {{ $ruleErrs = 'customErrors' + $lvl; }}
 -       var {{=$ruleErrs}} = null;
 -       try {
 -         {{=$valid}} = await {{= def_callRuleValidate }};
 -       } catch (e) {
 -         {{=$valid}} = false;
 -         if (e instanceof ValidationError) {{=$ruleErrs}} = e.errors;
 -         else throw e;
 -       }
 -     {{??}}
 -       {{=$ruleErrs}} = null;
 -       {{=$valid}} = {{= def_callRuleValidate }};
 -     {{?}}
 -   {{?}}
 - {{?}}
 - 
 - {{? $rDef.modifying }}
 -   if ({{=$parentData}}) {{=$data}} = {{=$parentData}}[{{=$parentDataProperty}}];
 - {{?}}
 - 
 - {{= $closingBraces }}
 - 
 - {{## def.notValidationResult:
 -   {{? $rDef.valid === undefined }}
 -     !{{? $macro }}{{=$nextValid}}{{??}}{{=$valid}}{{?}}
 -   {{??}}
 -     {{= !$rDef.valid }}
 -   {{?}}
 - #}}
 - 
 - {{? $rDef.valid }}
 -   {{? $breakOnError }} if (true) { {{?}}
 - {{??}}
 -   if ({{# def.notValidationResult }}) {
 -     {{ $errorKeyword = $rule.keyword; }}
 -     {{# def.beginDefOut}}
 -       {{# def.error:'custom' }}
 -     {{# def.storeDefOut:def_customError }}
 - 
 -     {{? $inline }}
 -       {{? $rDef.errors }}
 -         {{? $rDef.errors != 'full' }}
 -           {{# def.extendErrors:true }}
 -         {{?}}
 -       {{??}}
 -         {{? $rDef.errors === false}}
 -           {{= def_customError }}
 -         {{??}}
 -           if ({{=$errs}} == errors) {
 -             {{= def_customError }}
 -           } else {
 -             {{# def.extendErrors:true }}
 -           }
 -         {{?}}
 -       {{?}}
 -     {{?? $macro }}
 -       {{# def.extraError:'custom' }}
 -     {{??}}
 -       {{? $rDef.errors === false}}
 -         {{= def_customError }}
 -       {{??}}
 -         if (Array.isArray({{=$ruleErrs}})) {
 -           if (vErrors === null) vErrors = {{=$ruleErrs}};
 -           else vErrors = vErrors.concat({{=$ruleErrs}});
 -           errors = vErrors.length;
 -           {{# def.extendErrors:false }}
 -         } else {
 -           {{= def_customError }}
 -         }
 -       {{?}}
 -     {{?}}
 - 
 -   } {{? $breakOnError }} else { {{?}}
 - {{?}}
 
 
  |