@malloydata/malloy 0.0.36-dev230524224445 → 0.0.36-dev230525034638

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -26,8 +26,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
26
26
  Object.defineProperty(exports, "__esModule", { value: true });
27
27
  exports.DefExploreEditFieldContext = exports.DefExploreRenameContext = exports.DefExplorePrimaryKeyContext = exports.DefExploreWhereContext = exports.DefJoin_stubContext = exports.DefDeclare_stubContext = exports.DefExploreMeasureContext = exports.DefExploreDimensionContext = exports.ExploreStatementContext = exports.ExplorePropertiesContext = exports.SourceIDContext = exports.SourceNameDefContext = exports.SQLSourceNameContext = exports.QuerySourceContext = exports.TableSourceContext = exports.NamedSourceContext = exports.ExploreSourceContext = exports.ExploreContext = exports.SourceDefinitionContext = exports.SourcePropertyListContext = exports.QueryNameContext = exports.ExploreQueryNameContext = exports.FilterShortcutContext = exports.QueryPropertiesContext = exports.ExploreTableContext = exports.PipeElementContext = exports.FirstSegmentContext = exports.PipelineFromNameContext = exports.ArrowQueryContext = exports.ExploreArrowQueryContext = exports.QueryContext = exports.RefineOperatorContext = exports.TopLevelQueryDefContext = exports.TopLevelQueryDefsContext = exports.ImportURLContext = exports.ImportStatementContext = exports.SqlInterpolationContext = exports.SqlStringContext = exports.BlockSQLDefContext = exports.SqlBlockContext = exports.DefineSQLStatementContext = exports.TopLevelAnonQueryDefContext = exports.AnonymousQueryContext = exports.NamedQueries_stubContext = exports.DefineQueryContext = exports.ExploreKeywordContext = exports.DefineSourceStatementContext = exports.MalloyStatementContext = exports.MalloyDocumentContext = exports.MalloyParser = void 0;
28
28
  exports.TopStatementContext = exports.BySpecContext = exports.LimitStatementContext = exports.OrderBySpecContext = exports.OrderingContext = exports.OrderByStatementContext = exports.ProjectStatementContext = exports.AggregateStatementContext = exports.NestDefContext = exports.NestExistingContext = exports.NestEntryContext = exports.NestedQueryListContext = exports.NestStatementContext = exports.QueryFieldDefContext = exports.QueryFieldRefContext = exports.QueryFieldEntryContext = exports.DimensionDefContext = exports.QueryFieldListContext = exports.GroupByStatementContext = exports.QueryStatementContext = exports.ExploreQueryDefContext = exports.ExploreQueryNameDefContext = exports.SubQueryDefListContext = exports.HavingStatementContext = exports.WhereStatementContext = exports.FilterClauseListContext = exports.FilterByWhereContext = exports.FilterByShortcutContext = exports.FilteredByContext = exports.FilterStatementContext = exports.JoinExpressionContext = exports.JoinOnContext = exports.JoinWithContext = exports.JoinDefContext = exports.JoinListContext = exports.DefJoinCrossContext = exports.DefJoinManyContext = exports.DefJoinOneContext = exports.JoinStatementContext = exports.DeclareStatementContext = exports.MeasureDefContext = exports.JoinNameDefContext = exports.FieldNameDefContext = exports.FieldDefContext = exports.MeasureDefListContext = exports.DimensionDefListContext = exports.ExploreRenameDefContext = exports.RenameListContext = exports.DefExploreTimezoneContext = exports.DefExploreQueryContext = void 0;
29
- exports.ExprExprContext = exports.ExprAggregateContext = exports.ExprCountDisinctContext = exports.ExprCastContext = exports.ExprLogicalContext = exports.ExprNotContext = exports.ExprApplyContext = exports.ExprCompareContext = exports.ExprLogicalTreeContext = exports.ExprForRangeContext = exports.ExprRangeContext = exports.ExprAddSubContext = exports.ExprMulDivContext = exports.ExprSafeCastContext = exports.ExprTimeTruncContext = exports.ExprDurationContext = exports.ExprMinusContext = exports.ExprLiteralContext = exports.ExprFilterContext = exports.ExprFieldPathContext = exports.FieldExprContext = exports.UngroupContext = exports.TimeframeContext = exports.IdContext = exports.TableNameContext = exports.LiteralYearContext = exports.LiteralQuarterContext = exports.LiteralMonthContext = exports.LiteralWeekContext = exports.LiteralDayContext = exports.LiteralHourContext = exports.LiteralTimestampContext = exports.DateLiteralContext = exports.ExprNowContext = exports.ExprRegexContext = exports.ExprBoolContext = exports.ExprNULLContext = exports.ExprTimeContext = exports.ExprNumberContext = exports.ExprStringContext = exports.LiteralContext = exports.CompareOpContext = exports.MalloyTypeContext = exports.AggregateContext = exports.SampleSpecContext = exports.TimezoneStatementContext = exports.SampleStatementContext = exports.IndexStatementContext = exports.IndexFieldsContext = exports.IndexElementContext = void 0;
30
- exports.ConnectionNameContext = exports.NameSQLBlockContext = exports.SqlExploreNameRefContext = exports.JsonArrayContext = exports.JsonPropertyContext = exports.JsonObjectContext = exports.JsonValueContext = exports.JsonContext = exports.JustExprContext = exports.FieldNameContext = exports.JoinNameContext = exports.FieldPathContext = exports.NewMemberContext = exports.WildMemberContext = exports.NameMemberContext = exports.CollectionMemberContext = exports.FieldCollectionContext = exports.FieldNameListContext = exports.ArgumentListContext = exports.PickContext = exports.PickStatementContext = exports.PartialAllowedFieldExprContext = exports.ExprUngroupContext = exports.ExprPickContext = exports.ExprFuncContext = void 0;
29
+ exports.ExprCastContext = exports.ExprCoalesceContext = exports.ExprLogicalOrContext = exports.ExprLogicalAndContext = exports.ExprNotContext = exports.ExprApplyContext = exports.ExprCompareContext = exports.ExprOrTreeContext = exports.ExprAndTreeContext = exports.ExprForRangeContext = exports.ExprRangeContext = exports.ExprAddSubContext = exports.ExprMulDivContext = exports.ExprMinusContext = exports.ExprSafeCastContext = exports.ExprTimeTruncContext = exports.ExprDurationContext = exports.ExprLiteralContext = exports.ExprFilterContext = exports.ExprFieldPathContext = exports.FieldExprContext = exports.UngroupContext = exports.TimeframeContext = exports.IdContext = exports.TableNameContext = exports.LiteralYearContext = exports.LiteralQuarterContext = exports.LiteralMonthContext = exports.LiteralWeekContext = exports.LiteralDayContext = exports.LiteralHourContext = exports.LiteralTimestampContext = exports.DateLiteralContext = exports.ExprNowContext = exports.ExprRegexContext = exports.ExprBoolContext = exports.ExprNULLContext = exports.ExprTimeContext = exports.ExprNumberContext = exports.ExprStringContext = exports.LiteralContext = exports.CompareOpContext = exports.MalloyTypeContext = exports.AggregateContext = exports.SampleSpecContext = exports.TimezoneStatementContext = exports.SampleStatementContext = exports.IndexStatementContext = exports.IndexFieldsContext = exports.IndexElementContext = void 0;
30
+ exports.ConnectionNameContext = exports.NameSQLBlockContext = exports.SqlExploreNameRefContext = exports.JsonArrayContext = exports.JsonPropertyContext = exports.JsonObjectContext = exports.JsonValueContext = exports.JsonContext = exports.JustExprContext = exports.FieldNameContext = exports.JoinNameContext = exports.FieldPathContext = exports.NewMemberContext = exports.WildMemberContext = exports.NameMemberContext = exports.CollectionMemberContext = exports.FieldCollectionContext = exports.FieldNameListContext = exports.ArgumentListContext = exports.PickContext = exports.PickStatementContext = exports.PartialAllowedFieldExprContext = exports.ExprUngroupContext = exports.ExprPickContext = exports.ExprFuncContext = exports.ExprExprContext = exports.ExprAggregateContext = exports.ExprCountDisinctContext = void 0;
31
31
  const ATN_1 = require("antlr4ts/atn/ATN");
32
32
  const ATNDeserializer_1 = require("antlr4ts/atn/ATNDeserializer");
33
33
  const FailedPredicateException_1 = require("antlr4ts/FailedPredicateException");
@@ -3333,7 +3333,7 @@ class MalloyParser extends Parser_1.Parser {
3333
3333
  this.state = 715;
3334
3334
  this._errHandler.sync(this);
3335
3335
  _la = this._input.LA(1);
3336
- while (((((_la - 100)) & ~0x1F) === 0 && ((1 << (_la - 100)) & ((1 << (MalloyParser.COMMA - 100)) | (1 << (MalloyParser.STAR - 100)) | (1 << (MalloyParser.STARSTAR - 100)) | (1 << (MalloyParser.IDENTIFIER - 100)) | (1 << (MalloyParser.OBJECT_NAME_LITERAL - 100)))) !== 0)) {
3336
+ while (((((_la - 99)) & ~0x1F) === 0 && ((1 << (_la - 99)) & ((1 << (MalloyParser.COMMA - 99)) | (1 << (MalloyParser.STAR - 99)) | (1 << (MalloyParser.STARSTAR - 99)) | (1 << (MalloyParser.IDENTIFIER - 99)) | (1 << (MalloyParser.OBJECT_NAME_LITERAL - 99)))) !== 0)) {
3337
3337
  {
3338
3338
  {
3339
3339
  this.state = 710;
@@ -3587,7 +3587,7 @@ class MalloyParser extends Parser_1.Parser {
3587
3587
  {
3588
3588
  this.state = 736;
3589
3589
  _la = this._input.LA(1);
3590
- if (!(((((_la - 102)) & ~0x1F) === 0 && ((1 << (_la - 102)) & ((1 << (MalloyParser.LT - 102)) | (1 << (MalloyParser.GT - 102)) | (1 << (MalloyParser.EQ - 102)) | (1 << (MalloyParser.NE - 102)) | (1 << (MalloyParser.LTE - 102)) | (1 << (MalloyParser.GTE - 102)) | (1 << (MalloyParser.NOT_MATCH - 102)) | (1 << (MalloyParser.MATCH - 102)))) !== 0))) {
3590
+ if (!(((((_la - 101)) & ~0x1F) === 0 && ((1 << (_la - 101)) & ((1 << (MalloyParser.LT - 101)) | (1 << (MalloyParser.GT - 101)) | (1 << (MalloyParser.EQ - 101)) | (1 << (MalloyParser.NE - 101)) | (1 << (MalloyParser.LTE - 101)) | (1 << (MalloyParser.GTE - 101)) | (1 << (MalloyParser.NOT_MATCH - 101)) | (1 << (MalloyParser.MATCH - 101)))) !== 0))) {
3591
3591
  this._errHandler.recoverInline(this);
3592
3592
  }
3593
3593
  else {
@@ -4002,7 +4002,7 @@ class MalloyParser extends Parser_1.Parser {
4002
4002
  this.state = 769;
4003
4003
  this.match(MalloyParser.NOT);
4004
4004
  this.state = 770;
4005
- this.fieldExpr(9);
4005
+ this.fieldExpr(11);
4006
4006
  }
4007
4007
  break;
4008
4008
  case 5:
@@ -4171,7 +4171,7 @@ class MalloyParser extends Parser_1.Parser {
4171
4171
  this.state = 807;
4172
4172
  this._errHandler.sync(this);
4173
4173
  _la = this._input.LA(1);
4174
- if (((((_la - 30)) & ~0x1F) === 0 && ((1 << (_la - 30)) & ((1 << (MalloyParser.ALL - 30)) | (1 << (MalloyParser.AVG - 30)) | (1 << (MalloyParser.CAST - 30)) | (1 << (MalloyParser.COUNT - 30)) | (1 << (MalloyParser.DAY - 30)) | (1 << (MalloyParser.EXCLUDE - 30)) | (1 << (MalloyParser.FALSE - 30)) | (1 << (MalloyParser.HOUR - 30)) | (1 << (MalloyParser.MAX - 30)) | (1 << (MalloyParser.MIN - 30)) | (1 << (MalloyParser.MINUTE - 30)) | (1 << (MalloyParser.MONTH - 30)))) !== 0) || ((((_la - 62)) & ~0x1F) === 0 && ((1 << (_la - 62)) & ((1 << (MalloyParser.NOT - 62)) | (1 << (MalloyParser.NOW - 62)) | (1 << (MalloyParser.NULL - 62)) | (1 << (MalloyParser.PICK - 62)) | (1 << (MalloyParser.QUARTER - 62)) | (1 << (MalloyParser.SECOND - 62)) | (1 << (MalloyParser.SUM - 62)) | (1 << (MalloyParser.TRUE - 62)) | (1 << (MalloyParser.WEEK - 62)) | (1 << (MalloyParser.YEAR - 62)) | (1 << (MalloyParser.HACKY_REGEX - 62)) | (1 << (MalloyParser.STRING_LITERAL - 62)) | (1 << (MalloyParser.OPAREN - 62)))) !== 0) || ((((_la - 109)) & ~0x1F) === 0 && ((1 << (_la - 109)) & ((1 << (MalloyParser.MINUS - 109)) | (1 << (MalloyParser.LITERAL_TIMESTAMP - 109)) | (1 << (MalloyParser.LITERAL_HOUR - 109)) | (1 << (MalloyParser.LITERAL_DAY - 109)) | (1 << (MalloyParser.LITERAL_QUARTER - 109)) | (1 << (MalloyParser.LITERAL_MONTH - 109)) | (1 << (MalloyParser.LITERAL_WEEK - 109)) | (1 << (MalloyParser.LITERAL_YEAR - 109)) | (1 << (MalloyParser.IDENTIFIER - 109)) | (1 << (MalloyParser.INTEGER_LITERAL - 109)) | (1 << (MalloyParser.NUMERIC_LITERAL - 109)) | (1 << (MalloyParser.OBJECT_NAME_LITERAL - 109)))) !== 0)) {
4174
+ if (((((_la - 30)) & ~0x1F) === 0 && ((1 << (_la - 30)) & ((1 << (MalloyParser.ALL - 30)) | (1 << (MalloyParser.AVG - 30)) | (1 << (MalloyParser.CAST - 30)) | (1 << (MalloyParser.COUNT - 30)) | (1 << (MalloyParser.DAY - 30)) | (1 << (MalloyParser.EXCLUDE - 30)) | (1 << (MalloyParser.FALSE - 30)) | (1 << (MalloyParser.HOUR - 30)) | (1 << (MalloyParser.MAX - 30)) | (1 << (MalloyParser.MIN - 30)) | (1 << (MalloyParser.MINUTE - 30)) | (1 << (MalloyParser.MONTH - 30)))) !== 0) || ((((_la - 62)) & ~0x1F) === 0 && ((1 << (_la - 62)) & ((1 << (MalloyParser.NOT - 62)) | (1 << (MalloyParser.NOW - 62)) | (1 << (MalloyParser.NULL - 62)) | (1 << (MalloyParser.PICK - 62)) | (1 << (MalloyParser.QUARTER - 62)) | (1 << (MalloyParser.SECOND - 62)) | (1 << (MalloyParser.SUM - 62)) | (1 << (MalloyParser.TRUE - 62)) | (1 << (MalloyParser.WEEK - 62)) | (1 << (MalloyParser.YEAR - 62)) | (1 << (MalloyParser.HACKY_REGEX - 62)) | (1 << (MalloyParser.STRING_LITERAL - 62)) | (1 << (MalloyParser.OPAREN - 62)))) !== 0) || ((((_la - 108)) & ~0x1F) === 0 && ((1 << (_la - 108)) & ((1 << (MalloyParser.MINUS - 108)) | (1 << (MalloyParser.LITERAL_TIMESTAMP - 108)) | (1 << (MalloyParser.LITERAL_HOUR - 108)) | (1 << (MalloyParser.LITERAL_DAY - 108)) | (1 << (MalloyParser.LITERAL_QUARTER - 108)) | (1 << (MalloyParser.LITERAL_MONTH - 108)) | (1 << (MalloyParser.LITERAL_WEEK - 108)) | (1 << (MalloyParser.LITERAL_YEAR - 108)) | (1 << (MalloyParser.IDENTIFIER - 108)) | (1 << (MalloyParser.INTEGER_LITERAL - 108)) | (1 << (MalloyParser.NUMERIC_LITERAL - 108)) | (1 << (MalloyParser.OBJECT_NAME_LITERAL - 108)))) !== 0)) {
4175
4175
  {
4176
4176
  this.state = 806;
4177
4177
  this.argumentList();
@@ -4224,7 +4224,7 @@ class MalloyParser extends Parser_1.Parser {
4224
4224
  break;
4225
4225
  }
4226
4226
  this._ctx._stop = this._input.tryLT(-1);
4227
- this.state = 868;
4227
+ this.state = 877;
4228
4228
  this._errHandler.sync(this);
4229
4229
  _alt = this.interpreter.adaptivePredict(this._input, 91, this._ctx);
4230
4230
  while (_alt !== 2 && _alt !== ATN_1.ATN.INVALID_ALT_NUMBER) {
@@ -4234,7 +4234,7 @@ class MalloyParser extends Parser_1.Parser {
4234
4234
  }
4235
4235
  _prevctx = _localctx;
4236
4236
  {
4237
- this.state = 866;
4237
+ this.state = 875;
4238
4238
  this._errHandler.sync(this);
4239
4239
  switch (this.interpreter.adaptivePredict(this._input, 90, this._ctx)) {
4240
4240
  case 1:
@@ -4242,12 +4242,12 @@ class MalloyParser extends Parser_1.Parser {
4242
4242
  _localctx = new ExprMulDivContext(new FieldExprContext(_parentctx, _parentState));
4243
4243
  this.pushNewRecursionContext(_localctx, _startState, MalloyParser.RULE_fieldExpr);
4244
4244
  this.state = 826;
4245
- if (!(this.precpred(this._ctx, 16))) {
4246
- throw this.createFailedPredicateException("this.precpred(this._ctx, 16)");
4245
+ if (!(this.precpred(this._ctx, 19))) {
4246
+ throw this.createFailedPredicateException("this.precpred(this._ctx, 19)");
4247
4247
  }
4248
4248
  this.state = 827;
4249
4249
  _la = this._input.LA(1);
4250
- if (!(((((_la - 110)) & ~0x1F) === 0 && ((1 << (_la - 110)) & ((1 << (MalloyParser.STAR - 110)) | (1 << (MalloyParser.SLASH - 110)) | (1 << (MalloyParser.PERCENT - 110)))) !== 0))) {
4250
+ if (!(((((_la - 109)) & ~0x1F) === 0 && ((1 << (_la - 109)) & ((1 << (MalloyParser.STAR - 109)) | (1 << (MalloyParser.SLASH - 109)) | (1 << (MalloyParser.PERCENT - 109)))) !== 0))) {
4251
4251
  this._errHandler.recoverInline(this);
4252
4252
  }
4253
4253
  else {
@@ -4258,7 +4258,7 @@ class MalloyParser extends Parser_1.Parser {
4258
4258
  this.consume();
4259
4259
  }
4260
4260
  this.state = 828;
4261
- this.fieldExpr(17);
4261
+ this.fieldExpr(20);
4262
4262
  }
4263
4263
  break;
4264
4264
  case 2:
@@ -4266,8 +4266,8 @@ class MalloyParser extends Parser_1.Parser {
4266
4266
  _localctx = new ExprAddSubContext(new FieldExprContext(_parentctx, _parentState));
4267
4267
  this.pushNewRecursionContext(_localctx, _startState, MalloyParser.RULE_fieldExpr);
4268
4268
  this.state = 829;
4269
- if (!(this.precpred(this._ctx, 15))) {
4270
- throw this.createFailedPredicateException("this.precpred(this._ctx, 15)");
4269
+ if (!(this.precpred(this._ctx, 18))) {
4270
+ throw this.createFailedPredicateException("this.precpred(this._ctx, 18)");
4271
4271
  }
4272
4272
  this.state = 830;
4273
4273
  _la = this._input.LA(1);
@@ -4282,7 +4282,7 @@ class MalloyParser extends Parser_1.Parser {
4282
4282
  this.consume();
4283
4283
  }
4284
4284
  this.state = 831;
4285
- this.fieldExpr(16);
4285
+ this.fieldExpr(19);
4286
4286
  }
4287
4287
  break;
4288
4288
  case 3:
@@ -4290,13 +4290,13 @@ class MalloyParser extends Parser_1.Parser {
4290
4290
  _localctx = new ExprRangeContext(new FieldExprContext(_parentctx, _parentState));
4291
4291
  this.pushNewRecursionContext(_localctx, _startState, MalloyParser.RULE_fieldExpr);
4292
4292
  this.state = 832;
4293
- if (!(this.precpred(this._ctx, 14))) {
4294
- throw this.createFailedPredicateException("this.precpred(this._ctx, 14)");
4293
+ if (!(this.precpred(this._ctx, 17))) {
4294
+ throw this.createFailedPredicateException("this.precpred(this._ctx, 17)");
4295
4295
  }
4296
4296
  this.state = 833;
4297
4297
  this.match(MalloyParser.TO);
4298
4298
  this.state = 834;
4299
- this.fieldExpr(15);
4299
+ this.fieldExpr(18);
4300
4300
  }
4301
4301
  break;
4302
4302
  case 4:
@@ -4304,164 +4304,176 @@ class MalloyParser extends Parser_1.Parser {
4304
4304
  _localctx = new ExprCompareContext(new FieldExprContext(_parentctx, _parentState));
4305
4305
  this.pushNewRecursionContext(_localctx, _startState, MalloyParser.RULE_fieldExpr);
4306
4306
  this.state = 835;
4307
- if (!(this.precpred(this._ctx, 11))) {
4308
- throw this.createFailedPredicateException("this.precpred(this._ctx, 11)");
4307
+ if (!(this.precpred(this._ctx, 13))) {
4308
+ throw this.createFailedPredicateException("this.precpred(this._ctx, 13)");
4309
4309
  }
4310
4310
  this.state = 836;
4311
4311
  this.compareOp();
4312
4312
  this.state = 837;
4313
- this.fieldExpr(12);
4313
+ this.fieldExpr(14);
4314
4314
  }
4315
4315
  break;
4316
4316
  case 5:
4317
4317
  {
4318
- _localctx = new ExprLogicalContext(new FieldExprContext(_parentctx, _parentState));
4318
+ _localctx = new ExprLogicalAndContext(new FieldExprContext(_parentctx, _parentState));
4319
4319
  this.pushNewRecursionContext(_localctx, _startState, MalloyParser.RULE_fieldExpr);
4320
4320
  this.state = 839;
4321
- if (!(this.precpred(this._ctx, 8))) {
4322
- throw this.createFailedPredicateException("this.precpred(this._ctx, 8)");
4321
+ if (!(this.precpred(this._ctx, 10))) {
4322
+ throw this.createFailedPredicateException("this.precpred(this._ctx, 10)");
4323
4323
  }
4324
4324
  this.state = 840;
4325
- _la = this._input.LA(1);
4326
- if (!(_la === MalloyParser.AND || _la === MalloyParser.OR)) {
4327
- this._errHandler.recoverInline(this);
4328
- }
4329
- else {
4330
- if (this._input.LA(1) === Token_1.Token.EOF) {
4331
- this.matchedEOF = true;
4332
- }
4333
- this._errHandler.reportMatch(this);
4334
- this.consume();
4335
- }
4325
+ this.match(MalloyParser.AND);
4336
4326
  this.state = 841;
4337
- this.fieldExpr(9);
4327
+ this.fieldExpr(11);
4338
4328
  }
4339
4329
  break;
4340
4330
  case 6:
4341
4331
  {
4342
- _localctx = new ExprFilterContext(new FieldExprContext(_parentctx, _parentState));
4332
+ _localctx = new ExprLogicalOrContext(new FieldExprContext(_parentctx, _parentState));
4343
4333
  this.pushNewRecursionContext(_localctx, _startState, MalloyParser.RULE_fieldExpr);
4344
4334
  this.state = 842;
4345
- if (!(this.precpred(this._ctx, 22))) {
4346
- throw this.createFailedPredicateException("this.precpred(this._ctx, 22)");
4335
+ if (!(this.precpred(this._ctx, 9))) {
4336
+ throw this.createFailedPredicateException("this.precpred(this._ctx, 9)");
4347
4337
  }
4348
4338
  this.state = 843;
4349
- this.match(MalloyParser.OCURLY);
4339
+ this.match(MalloyParser.OR);
4350
4340
  this.state = 844;
4351
- this.filteredBy();
4341
+ this.fieldExpr(10);
4342
+ }
4343
+ break;
4344
+ case 7:
4345
+ {
4346
+ _localctx = new ExprCoalesceContext(new FieldExprContext(_parentctx, _parentState));
4347
+ this.pushNewRecursionContext(_localctx, _startState, MalloyParser.RULE_fieldExpr);
4352
4348
  this.state = 845;
4349
+ if (!(this.precpred(this._ctx, 8))) {
4350
+ throw this.createFailedPredicateException("this.precpred(this._ctx, 8)");
4351
+ }
4352
+ this.state = 846;
4353
+ this.match(MalloyParser.DOUBLE_QMARK);
4354
+ this.state = 847;
4355
+ this.fieldExpr(9);
4356
+ }
4357
+ break;
4358
+ case 8:
4359
+ {
4360
+ _localctx = new ExprFilterContext(new FieldExprContext(_parentctx, _parentState));
4361
+ this.pushNewRecursionContext(_localctx, _startState, MalloyParser.RULE_fieldExpr);
4362
+ this.state = 848;
4363
+ if (!(this.precpred(this._ctx, 25))) {
4364
+ throw this.createFailedPredicateException("this.precpred(this._ctx, 25)");
4365
+ }
4366
+ this.state = 849;
4367
+ this.match(MalloyParser.OCURLY);
4368
+ this.state = 850;
4369
+ this.filteredBy();
4370
+ this.state = 851;
4353
4371
  this.match(MalloyParser.CCURLY);
4354
4372
  }
4355
4373
  break;
4356
- case 7:
4374
+ case 9:
4357
4375
  {
4358
4376
  _localctx = new ExprDurationContext(new FieldExprContext(_parentctx, _parentState));
4359
4377
  this.pushNewRecursionContext(_localctx, _startState, MalloyParser.RULE_fieldExpr);
4360
- this.state = 847;
4361
- if (!(this.precpred(this._ctx, 19))) {
4362
- throw this.createFailedPredicateException("this.precpred(this._ctx, 19)");
4378
+ this.state = 853;
4379
+ if (!(this.precpred(this._ctx, 23))) {
4380
+ throw this.createFailedPredicateException("this.precpred(this._ctx, 23)");
4363
4381
  }
4364
- this.state = 848;
4382
+ this.state = 854;
4365
4383
  this.timeframe();
4366
4384
  }
4367
4385
  break;
4368
- case 8:
4386
+ case 10:
4369
4387
  {
4370
4388
  _localctx = new ExprTimeTruncContext(new FieldExprContext(_parentctx, _parentState));
4371
4389
  this.pushNewRecursionContext(_localctx, _startState, MalloyParser.RULE_fieldExpr);
4372
- this.state = 849;
4373
- if (!(this.precpred(this._ctx, 18))) {
4374
- throw this.createFailedPredicateException("this.precpred(this._ctx, 18)");
4390
+ this.state = 855;
4391
+ if (!(this.precpred(this._ctx, 22))) {
4392
+ throw this.createFailedPredicateException("this.precpred(this._ctx, 22)");
4375
4393
  }
4376
- this.state = 850;
4394
+ this.state = 856;
4377
4395
  this.match(MalloyParser.DOT);
4378
- this.state = 851;
4396
+ this.state = 857;
4379
4397
  this.timeframe();
4380
4398
  }
4381
4399
  break;
4382
- case 9:
4400
+ case 11:
4383
4401
  {
4384
4402
  _localctx = new ExprSafeCastContext(new FieldExprContext(_parentctx, _parentState));
4385
4403
  this.pushNewRecursionContext(_localctx, _startState, MalloyParser.RULE_fieldExpr);
4386
- this.state = 852;
4387
- if (!(this.precpred(this._ctx, 17))) {
4388
- throw this.createFailedPredicateException("this.precpred(this._ctx, 17)");
4404
+ this.state = 858;
4405
+ if (!(this.precpred(this._ctx, 21))) {
4406
+ throw this.createFailedPredicateException("this.precpred(this._ctx, 21)");
4389
4407
  }
4390
- this.state = 853;
4408
+ this.state = 859;
4391
4409
  this.match(MalloyParser.DOUBLECOLON);
4392
- this.state = 854;
4410
+ this.state = 860;
4393
4411
  this.malloyType();
4394
4412
  }
4395
4413
  break;
4396
- case 10:
4414
+ case 12:
4397
4415
  {
4398
4416
  _localctx = new ExprForRangeContext(new FieldExprContext(_parentctx, _parentState));
4399
4417
  _localctx._startAt = _prevctx;
4400
4418
  this.pushNewRecursionContext(_localctx, _startState, MalloyParser.RULE_fieldExpr);
4401
- this.state = 855;
4402
- if (!(this.precpred(this._ctx, 13))) {
4403
- throw this.createFailedPredicateException("this.precpred(this._ctx, 13)");
4419
+ this.state = 861;
4420
+ if (!(this.precpred(this._ctx, 16))) {
4421
+ throw this.createFailedPredicateException("this.precpred(this._ctx, 16)");
4404
4422
  }
4405
- this.state = 856;
4423
+ this.state = 862;
4406
4424
  this.match(MalloyParser.FOR);
4407
- this.state = 857;
4425
+ this.state = 863;
4408
4426
  _localctx._duration = this.fieldExpr(0);
4409
- this.state = 858;
4427
+ this.state = 864;
4410
4428
  this.timeframe();
4411
4429
  }
4412
4430
  break;
4413
- case 11:
4431
+ case 13:
4414
4432
  {
4415
- _localctx = new ExprLogicalTreeContext(new FieldExprContext(_parentctx, _parentState));
4433
+ _localctx = new ExprAndTreeContext(new FieldExprContext(_parentctx, _parentState));
4416
4434
  this.pushNewRecursionContext(_localctx, _startState, MalloyParser.RULE_fieldExpr);
4417
- this.state = 860;
4418
- if (!(this.precpred(this._ctx, 12))) {
4419
- throw this.createFailedPredicateException("this.precpred(this._ctx, 12)");
4420
- }
4421
- this.state = 861;
4422
- _la = this._input.LA(1);
4423
- if (!(_la === MalloyParser.AMPER || _la === MalloyParser.BAR)) {
4424
- this._errHandler.recoverInline(this);
4435
+ this.state = 866;
4436
+ if (!(this.precpred(this._ctx, 15))) {
4437
+ throw this.createFailedPredicateException("this.precpred(this._ctx, 15)");
4425
4438
  }
4426
- else {
4427
- if (this._input.LA(1) === Token_1.Token.EOF) {
4428
- this.matchedEOF = true;
4429
- }
4430
- this._errHandler.reportMatch(this);
4431
- this.consume();
4439
+ this.state = 867;
4440
+ this.match(MalloyParser.AMPER);
4441
+ this.state = 868;
4442
+ this.partialAllowedFieldExpr();
4443
+ }
4444
+ break;
4445
+ case 14:
4446
+ {
4447
+ _localctx = new ExprOrTreeContext(new FieldExprContext(_parentctx, _parentState));
4448
+ this.pushNewRecursionContext(_localctx, _startState, MalloyParser.RULE_fieldExpr);
4449
+ this.state = 869;
4450
+ if (!(this.precpred(this._ctx, 14))) {
4451
+ throw this.createFailedPredicateException("this.precpred(this._ctx, 14)");
4432
4452
  }
4433
- this.state = 862;
4453
+ this.state = 870;
4454
+ this.match(MalloyParser.BAR);
4455
+ this.state = 871;
4434
4456
  this.partialAllowedFieldExpr();
4435
4457
  }
4436
4458
  break;
4437
- case 12:
4459
+ case 15:
4438
4460
  {
4439
4461
  _localctx = new ExprApplyContext(new FieldExprContext(_parentctx, _parentState));
4440
4462
  this.pushNewRecursionContext(_localctx, _startState, MalloyParser.RULE_fieldExpr);
4441
- this.state = 863;
4442
- if (!(this.precpred(this._ctx, 10))) {
4443
- throw this.createFailedPredicateException("this.precpred(this._ctx, 10)");
4444
- }
4445
- this.state = 864;
4446
- _la = this._input.LA(1);
4447
- if (!(_la === MalloyParser.QMARK || _la === MalloyParser.COLON)) {
4448
- this._errHandler.recoverInline(this);
4449
- }
4450
- else {
4451
- if (this._input.LA(1) === Token_1.Token.EOF) {
4452
- this.matchedEOF = true;
4453
- }
4454
- this._errHandler.reportMatch(this);
4455
- this.consume();
4463
+ this.state = 872;
4464
+ if (!(this.precpred(this._ctx, 12))) {
4465
+ throw this.createFailedPredicateException("this.precpred(this._ctx, 12)");
4456
4466
  }
4457
- this.state = 865;
4467
+ this.state = 873;
4468
+ this.match(MalloyParser.QMARK);
4469
+ this.state = 874;
4458
4470
  this.partialAllowedFieldExpr();
4459
4471
  }
4460
4472
  break;
4461
4473
  }
4462
4474
  }
4463
4475
  }
4464
- this.state = 870;
4476
+ this.state = 879;
4465
4477
  this._errHandler.sync(this);
4466
4478
  _alt = this.interpreter.adaptivePredict(this._input, 91, this._ctx);
4467
4479
  }
@@ -4490,16 +4502,16 @@ class MalloyParser extends Parser_1.Parser {
4490
4502
  try {
4491
4503
  this.enterOuterAlt(_localctx, 1);
4492
4504
  {
4493
- this.state = 872;
4505
+ this.state = 881;
4494
4506
  this._errHandler.sync(this);
4495
4507
  _la = this._input.LA(1);
4496
- if (((((_la - 102)) & ~0x1F) === 0 && ((1 << (_la - 102)) & ((1 << (MalloyParser.LT - 102)) | (1 << (MalloyParser.GT - 102)) | (1 << (MalloyParser.EQ - 102)) | (1 << (MalloyParser.NE - 102)) | (1 << (MalloyParser.LTE - 102)) | (1 << (MalloyParser.GTE - 102)) | (1 << (MalloyParser.NOT_MATCH - 102)) | (1 << (MalloyParser.MATCH - 102)))) !== 0)) {
4508
+ if (((((_la - 101)) & ~0x1F) === 0 && ((1 << (_la - 101)) & ((1 << (MalloyParser.LT - 101)) | (1 << (MalloyParser.GT - 101)) | (1 << (MalloyParser.EQ - 101)) | (1 << (MalloyParser.NE - 101)) | (1 << (MalloyParser.LTE - 101)) | (1 << (MalloyParser.GTE - 101)) | (1 << (MalloyParser.NOT_MATCH - 101)) | (1 << (MalloyParser.MATCH - 101)))) !== 0)) {
4497
4509
  {
4498
- this.state = 871;
4510
+ this.state = 880;
4499
4511
  this.compareOp();
4500
4512
  }
4501
4513
  }
4502
- this.state = 874;
4514
+ this.state = 883;
4503
4515
  this.fieldExpr(0);
4504
4516
  }
4505
4517
  }
@@ -4526,7 +4538,7 @@ class MalloyParser extends Parser_1.Parser {
4526
4538
  let _alt;
4527
4539
  this.enterOuterAlt(_localctx, 1);
4528
4540
  {
4529
- this.state = 877;
4541
+ this.state = 886;
4530
4542
  this._errHandler.sync(this);
4531
4543
  _alt = 1;
4532
4544
  do {
@@ -4534,7 +4546,7 @@ class MalloyParser extends Parser_1.Parser {
4534
4546
  case 1:
4535
4547
  {
4536
4548
  {
4537
- this.state = 876;
4549
+ this.state = 885;
4538
4550
  this.pick();
4539
4551
  }
4540
4552
  }
@@ -4542,18 +4554,18 @@ class MalloyParser extends Parser_1.Parser {
4542
4554
  default:
4543
4555
  throw new NoViableAltException_1.NoViableAltException(this);
4544
4556
  }
4545
- this.state = 879;
4557
+ this.state = 888;
4546
4558
  this._errHandler.sync(this);
4547
4559
  _alt = this.interpreter.adaptivePredict(this._input, 93, this._ctx);
4548
4560
  } while (_alt !== 2 && _alt !== ATN_1.ATN.INVALID_ALT_NUMBER);
4549
- this.state = 883;
4561
+ this.state = 892;
4550
4562
  this._errHandler.sync(this);
4551
4563
  switch (this.interpreter.adaptivePredict(this._input, 94, this._ctx)) {
4552
4564
  case 1:
4553
4565
  {
4554
- this.state = 881;
4566
+ this.state = 890;
4555
4567
  this.match(MalloyParser.ELSE);
4556
- this.state = 882;
4568
+ this.state = 891;
4557
4569
  _localctx._pickElse = this.fieldExpr(0);
4558
4570
  }
4559
4571
  break;
@@ -4583,20 +4595,20 @@ class MalloyParser extends Parser_1.Parser {
4583
4595
  try {
4584
4596
  this.enterOuterAlt(_localctx, 1);
4585
4597
  {
4586
- this.state = 885;
4598
+ this.state = 894;
4587
4599
  this.match(MalloyParser.PICK);
4588
- this.state = 887;
4600
+ this.state = 896;
4589
4601
  this._errHandler.sync(this);
4590
4602
  _la = this._input.LA(1);
4591
- if (((((_la - 30)) & ~0x1F) === 0 && ((1 << (_la - 30)) & ((1 << (MalloyParser.ALL - 30)) | (1 << (MalloyParser.AVG - 30)) | (1 << (MalloyParser.CAST - 30)) | (1 << (MalloyParser.COUNT - 30)) | (1 << (MalloyParser.DAY - 30)) | (1 << (MalloyParser.EXCLUDE - 30)) | (1 << (MalloyParser.FALSE - 30)) | (1 << (MalloyParser.HOUR - 30)) | (1 << (MalloyParser.MAX - 30)) | (1 << (MalloyParser.MIN - 30)) | (1 << (MalloyParser.MINUTE - 30)) | (1 << (MalloyParser.MONTH - 30)))) !== 0) || ((((_la - 62)) & ~0x1F) === 0 && ((1 << (_la - 62)) & ((1 << (MalloyParser.NOT - 62)) | (1 << (MalloyParser.NOW - 62)) | (1 << (MalloyParser.NULL - 62)) | (1 << (MalloyParser.PICK - 62)) | (1 << (MalloyParser.QUARTER - 62)) | (1 << (MalloyParser.SECOND - 62)) | (1 << (MalloyParser.SUM - 62)) | (1 << (MalloyParser.TRUE - 62)) | (1 << (MalloyParser.WEEK - 62)) | (1 << (MalloyParser.YEAR - 62)) | (1 << (MalloyParser.HACKY_REGEX - 62)) | (1 << (MalloyParser.STRING_LITERAL - 62)) | (1 << (MalloyParser.OPAREN - 62)))) !== 0) || ((((_la - 109)) & ~0x1F) === 0 && ((1 << (_la - 109)) & ((1 << (MalloyParser.MINUS - 109)) | (1 << (MalloyParser.LITERAL_TIMESTAMP - 109)) | (1 << (MalloyParser.LITERAL_HOUR - 109)) | (1 << (MalloyParser.LITERAL_DAY - 109)) | (1 << (MalloyParser.LITERAL_QUARTER - 109)) | (1 << (MalloyParser.LITERAL_MONTH - 109)) | (1 << (MalloyParser.LITERAL_WEEK - 109)) | (1 << (MalloyParser.LITERAL_YEAR - 109)) | (1 << (MalloyParser.IDENTIFIER - 109)) | (1 << (MalloyParser.INTEGER_LITERAL - 109)) | (1 << (MalloyParser.NUMERIC_LITERAL - 109)) | (1 << (MalloyParser.OBJECT_NAME_LITERAL - 109)))) !== 0)) {
4603
+ if (((((_la - 30)) & ~0x1F) === 0 && ((1 << (_la - 30)) & ((1 << (MalloyParser.ALL - 30)) | (1 << (MalloyParser.AVG - 30)) | (1 << (MalloyParser.CAST - 30)) | (1 << (MalloyParser.COUNT - 30)) | (1 << (MalloyParser.DAY - 30)) | (1 << (MalloyParser.EXCLUDE - 30)) | (1 << (MalloyParser.FALSE - 30)) | (1 << (MalloyParser.HOUR - 30)) | (1 << (MalloyParser.MAX - 30)) | (1 << (MalloyParser.MIN - 30)) | (1 << (MalloyParser.MINUTE - 30)) | (1 << (MalloyParser.MONTH - 30)))) !== 0) || ((((_la - 62)) & ~0x1F) === 0 && ((1 << (_la - 62)) & ((1 << (MalloyParser.NOT - 62)) | (1 << (MalloyParser.NOW - 62)) | (1 << (MalloyParser.NULL - 62)) | (1 << (MalloyParser.PICK - 62)) | (1 << (MalloyParser.QUARTER - 62)) | (1 << (MalloyParser.SECOND - 62)) | (1 << (MalloyParser.SUM - 62)) | (1 << (MalloyParser.TRUE - 62)) | (1 << (MalloyParser.WEEK - 62)) | (1 << (MalloyParser.YEAR - 62)) | (1 << (MalloyParser.HACKY_REGEX - 62)) | (1 << (MalloyParser.STRING_LITERAL - 62)) | (1 << (MalloyParser.OPAREN - 62)))) !== 0) || ((((_la - 108)) & ~0x1F) === 0 && ((1 << (_la - 108)) & ((1 << (MalloyParser.MINUS - 108)) | (1 << (MalloyParser.LITERAL_TIMESTAMP - 108)) | (1 << (MalloyParser.LITERAL_HOUR - 108)) | (1 << (MalloyParser.LITERAL_DAY - 108)) | (1 << (MalloyParser.LITERAL_QUARTER - 108)) | (1 << (MalloyParser.LITERAL_MONTH - 108)) | (1 << (MalloyParser.LITERAL_WEEK - 108)) | (1 << (MalloyParser.LITERAL_YEAR - 108)) | (1 << (MalloyParser.IDENTIFIER - 108)) | (1 << (MalloyParser.INTEGER_LITERAL - 108)) | (1 << (MalloyParser.NUMERIC_LITERAL - 108)) | (1 << (MalloyParser.OBJECT_NAME_LITERAL - 108)))) !== 0)) {
4592
4604
  {
4593
- this.state = 886;
4605
+ this.state = 895;
4594
4606
  _localctx._pickValue = this.fieldExpr(0);
4595
4607
  }
4596
4608
  }
4597
- this.state = 889;
4609
+ this.state = 898;
4598
4610
  this.match(MalloyParser.WHEN);
4599
- this.state = 890;
4611
+ this.state = 899;
4600
4612
  _localctx._pickWhen = this.partialAllowedFieldExpr();
4601
4613
  }
4602
4614
  }
@@ -4624,32 +4636,32 @@ class MalloyParser extends Parser_1.Parser {
4624
4636
  let _alt;
4625
4637
  this.enterOuterAlt(_localctx, 1);
4626
4638
  {
4627
- this.state = 892;
4639
+ this.state = 901;
4628
4640
  this.fieldExpr(0);
4629
- this.state = 897;
4641
+ this.state = 906;
4630
4642
  this._errHandler.sync(this);
4631
4643
  _alt = this.interpreter.adaptivePredict(this._input, 96, this._ctx);
4632
4644
  while (_alt !== 2 && _alt !== ATN_1.ATN.INVALID_ALT_NUMBER) {
4633
4645
  if (_alt === 1) {
4634
4646
  {
4635
4647
  {
4636
- this.state = 893;
4648
+ this.state = 902;
4637
4649
  this.match(MalloyParser.COMMA);
4638
- this.state = 894;
4650
+ this.state = 903;
4639
4651
  this.fieldExpr(0);
4640
4652
  }
4641
4653
  }
4642
4654
  }
4643
- this.state = 899;
4655
+ this.state = 908;
4644
4656
  this._errHandler.sync(this);
4645
4657
  _alt = this.interpreter.adaptivePredict(this._input, 96, this._ctx);
4646
4658
  }
4647
- this.state = 901;
4659
+ this.state = 910;
4648
4660
  this._errHandler.sync(this);
4649
4661
  _la = this._input.LA(1);
4650
4662
  if (_la === MalloyParser.COMMA) {
4651
4663
  {
4652
- this.state = 900;
4664
+ this.state = 909;
4653
4665
  this.match(MalloyParser.COMMA);
4654
4666
  }
4655
4667
  }
@@ -4678,28 +4690,28 @@ class MalloyParser extends Parser_1.Parser {
4678
4690
  try {
4679
4691
  this.enterOuterAlt(_localctx, 1);
4680
4692
  {
4681
- this.state = 903;
4693
+ this.state = 912;
4682
4694
  this.fieldName();
4683
- this.state = 910;
4695
+ this.state = 919;
4684
4696
  this._errHandler.sync(this);
4685
4697
  _la = this._input.LA(1);
4686
- while (((((_la - 100)) & ~0x1F) === 0 && ((1 << (_la - 100)) & ((1 << (MalloyParser.COMMA - 100)) | (1 << (MalloyParser.IDENTIFIER - 100)) | (1 << (MalloyParser.OBJECT_NAME_LITERAL - 100)))) !== 0)) {
4698
+ while (((((_la - 99)) & ~0x1F) === 0 && ((1 << (_la - 99)) & ((1 << (MalloyParser.COMMA - 99)) | (1 << (MalloyParser.IDENTIFIER - 99)) | (1 << (MalloyParser.OBJECT_NAME_LITERAL - 99)))) !== 0)) {
4687
4699
  {
4688
4700
  {
4689
- this.state = 905;
4701
+ this.state = 914;
4690
4702
  this._errHandler.sync(this);
4691
4703
  _la = this._input.LA(1);
4692
4704
  if (_la === MalloyParser.COMMA) {
4693
4705
  {
4694
- this.state = 904;
4706
+ this.state = 913;
4695
4707
  this.match(MalloyParser.COMMA);
4696
4708
  }
4697
4709
  }
4698
- this.state = 907;
4710
+ this.state = 916;
4699
4711
  this.fieldName();
4700
4712
  }
4701
4713
  }
4702
- this.state = 912;
4714
+ this.state = 921;
4703
4715
  this._errHandler.sync(this);
4704
4716
  _la = this._input.LA(1);
4705
4717
  }
@@ -4729,39 +4741,39 @@ class MalloyParser extends Parser_1.Parser {
4729
4741
  let _alt;
4730
4742
  this.enterOuterAlt(_localctx, 1);
4731
4743
  {
4732
- this.state = 913;
4744
+ this.state = 922;
4733
4745
  this.collectionMember();
4734
- this.state = 920;
4746
+ this.state = 929;
4735
4747
  this._errHandler.sync(this);
4736
4748
  _alt = this.interpreter.adaptivePredict(this._input, 101, this._ctx);
4737
4749
  while (_alt !== 2 && _alt !== ATN_1.ATN.INVALID_ALT_NUMBER) {
4738
4750
  if (_alt === 1) {
4739
4751
  {
4740
4752
  {
4741
- this.state = 915;
4753
+ this.state = 924;
4742
4754
  this._errHandler.sync(this);
4743
4755
  _la = this._input.LA(1);
4744
4756
  if (_la === MalloyParser.COMMA) {
4745
4757
  {
4746
- this.state = 914;
4758
+ this.state = 923;
4747
4759
  this.match(MalloyParser.COMMA);
4748
4760
  }
4749
4761
  }
4750
- this.state = 917;
4762
+ this.state = 926;
4751
4763
  this.collectionMember();
4752
4764
  }
4753
4765
  }
4754
4766
  }
4755
- this.state = 922;
4767
+ this.state = 931;
4756
4768
  this._errHandler.sync(this);
4757
4769
  _alt = this.interpreter.adaptivePredict(this._input, 101, this._ctx);
4758
4770
  }
4759
- this.state = 924;
4771
+ this.state = 933;
4760
4772
  this._errHandler.sync(this);
4761
4773
  _la = this._input.LA(1);
4762
4774
  if (_la === MalloyParser.COMMA) {
4763
4775
  {
4764
- this.state = 923;
4776
+ this.state = 932;
4765
4777
  this.match(MalloyParser.COMMA);
4766
4778
  }
4767
4779
  }
@@ -4788,14 +4800,14 @@ class MalloyParser extends Parser_1.Parser {
4788
4800
  this.enterRule(_localctx, 184, MalloyParser.RULE_collectionMember);
4789
4801
  let _la;
4790
4802
  try {
4791
- this.state = 934;
4803
+ this.state = 943;
4792
4804
  this._errHandler.sync(this);
4793
4805
  switch (this.interpreter.adaptivePredict(this._input, 104, this._ctx)) {
4794
4806
  case 1:
4795
4807
  _localctx = new NameMemberContext(_localctx);
4796
4808
  this.enterOuterAlt(_localctx, 1);
4797
4809
  {
4798
- this.state = 926;
4810
+ this.state = 935;
4799
4811
  this.fieldPath();
4800
4812
  }
4801
4813
  break;
@@ -4803,18 +4815,18 @@ class MalloyParser extends Parser_1.Parser {
4803
4815
  _localctx = new WildMemberContext(_localctx);
4804
4816
  this.enterOuterAlt(_localctx, 2);
4805
4817
  {
4806
- this.state = 930;
4818
+ this.state = 939;
4807
4819
  this._errHandler.sync(this);
4808
4820
  _la = this._input.LA(1);
4809
4821
  if (_la === MalloyParser.IDENTIFIER || _la === MalloyParser.OBJECT_NAME_LITERAL) {
4810
4822
  {
4811
- this.state = 927;
4823
+ this.state = 936;
4812
4824
  this.fieldPath();
4813
- this.state = 928;
4825
+ this.state = 937;
4814
4826
  this.match(MalloyParser.DOT);
4815
4827
  }
4816
4828
  }
4817
- this.state = 932;
4829
+ this.state = 941;
4818
4830
  _la = this._input.LA(1);
4819
4831
  if (!(_la === MalloyParser.STAR || _la === MalloyParser.STARSTAR)) {
4820
4832
  this._errHandler.recoverInline(this);
@@ -4832,7 +4844,7 @@ class MalloyParser extends Parser_1.Parser {
4832
4844
  _localctx = new NewMemberContext(_localctx);
4833
4845
  this.enterOuterAlt(_localctx, 3);
4834
4846
  {
4835
- this.state = 933;
4847
+ this.state = 942;
4836
4848
  this.fieldDef();
4837
4849
  }
4838
4850
  break;
@@ -4861,23 +4873,23 @@ class MalloyParser extends Parser_1.Parser {
4861
4873
  let _alt;
4862
4874
  this.enterOuterAlt(_localctx, 1);
4863
4875
  {
4864
- this.state = 936;
4876
+ this.state = 945;
4865
4877
  this.fieldName();
4866
- this.state = 941;
4878
+ this.state = 950;
4867
4879
  this._errHandler.sync(this);
4868
4880
  _alt = this.interpreter.adaptivePredict(this._input, 105, this._ctx);
4869
4881
  while (_alt !== 2 && _alt !== ATN_1.ATN.INVALID_ALT_NUMBER) {
4870
4882
  if (_alt === 1) {
4871
4883
  {
4872
4884
  {
4873
- this.state = 937;
4885
+ this.state = 946;
4874
4886
  this.match(MalloyParser.DOT);
4875
- this.state = 938;
4887
+ this.state = 947;
4876
4888
  this.fieldName();
4877
4889
  }
4878
4890
  }
4879
4891
  }
4880
- this.state = 943;
4892
+ this.state = 952;
4881
4893
  this._errHandler.sync(this);
4882
4894
  _alt = this.interpreter.adaptivePredict(this._input, 105, this._ctx);
4883
4895
  }
@@ -4905,7 +4917,7 @@ class MalloyParser extends Parser_1.Parser {
4905
4917
  try {
4906
4918
  this.enterOuterAlt(_localctx, 1);
4907
4919
  {
4908
- this.state = 944;
4920
+ this.state = 953;
4909
4921
  this.id();
4910
4922
  }
4911
4923
  }
@@ -4931,7 +4943,7 @@ class MalloyParser extends Parser_1.Parser {
4931
4943
  try {
4932
4944
  this.enterOuterAlt(_localctx, 1);
4933
4945
  {
4934
- this.state = 946;
4946
+ this.state = 955;
4935
4947
  this.id();
4936
4948
  }
4937
4949
  }
@@ -4957,9 +4969,9 @@ class MalloyParser extends Parser_1.Parser {
4957
4969
  try {
4958
4970
  this.enterOuterAlt(_localctx, 1);
4959
4971
  {
4960
- this.state = 948;
4972
+ this.state = 957;
4961
4973
  this.fieldExpr(0);
4962
- this.state = 949;
4974
+ this.state = 958;
4963
4975
  this.match(MalloyParser.EOF);
4964
4976
  }
4965
4977
  }
@@ -4985,7 +4997,7 @@ class MalloyParser extends Parser_1.Parser {
4985
4997
  try {
4986
4998
  this.enterOuterAlt(_localctx, 1);
4987
4999
  {
4988
- this.state = 951;
5000
+ this.state = 960;
4989
5001
  this.jsonValue();
4990
5002
  }
4991
5003
  }
@@ -5009,62 +5021,62 @@ class MalloyParser extends Parser_1.Parser {
5009
5021
  let _localctx = new JsonValueContext(this._ctx, this.state);
5010
5022
  this.enterRule(_localctx, 196, MalloyParser.RULE_jsonValue);
5011
5023
  try {
5012
- this.state = 961;
5024
+ this.state = 970;
5013
5025
  this._errHandler.sync(this);
5014
5026
  switch (this._input.LA(1)) {
5015
5027
  case MalloyParser.JSON_STRING:
5016
5028
  this.enterOuterAlt(_localctx, 1);
5017
5029
  {
5018
- this.state = 953;
5030
+ this.state = 962;
5019
5031
  this.match(MalloyParser.JSON_STRING);
5020
5032
  }
5021
5033
  break;
5022
5034
  case MalloyParser.INTEGER_LITERAL:
5023
5035
  this.enterOuterAlt(_localctx, 2);
5024
5036
  {
5025
- this.state = 954;
5037
+ this.state = 963;
5026
5038
  this.match(MalloyParser.INTEGER_LITERAL);
5027
5039
  }
5028
5040
  break;
5029
5041
  case MalloyParser.NUMERIC_LITERAL:
5030
5042
  this.enterOuterAlt(_localctx, 3);
5031
5043
  {
5032
- this.state = 955;
5044
+ this.state = 964;
5033
5045
  this.match(MalloyParser.NUMERIC_LITERAL);
5034
5046
  }
5035
5047
  break;
5036
5048
  case MalloyParser.OCURLY:
5037
5049
  this.enterOuterAlt(_localctx, 4);
5038
5050
  {
5039
- this.state = 956;
5051
+ this.state = 965;
5040
5052
  this.jsonObject();
5041
5053
  }
5042
5054
  break;
5043
5055
  case MalloyParser.OBRACK:
5044
5056
  this.enterOuterAlt(_localctx, 5);
5045
5057
  {
5046
- this.state = 957;
5058
+ this.state = 966;
5047
5059
  this.jsonArray();
5048
5060
  }
5049
5061
  break;
5050
5062
  case MalloyParser.TRUE:
5051
5063
  this.enterOuterAlt(_localctx, 6);
5052
5064
  {
5053
- this.state = 958;
5065
+ this.state = 967;
5054
5066
  this.match(MalloyParser.TRUE);
5055
5067
  }
5056
5068
  break;
5057
5069
  case MalloyParser.FALSE:
5058
5070
  this.enterOuterAlt(_localctx, 7);
5059
5071
  {
5060
- this.state = 959;
5072
+ this.state = 968;
5061
5073
  this.match(MalloyParser.FALSE);
5062
5074
  }
5063
5075
  break;
5064
5076
  case MalloyParser.NULL:
5065
5077
  this.enterOuterAlt(_localctx, 8);
5066
5078
  {
5067
- this.state = 960;
5079
+ this.state = 969;
5068
5080
  this.match(MalloyParser.NULL);
5069
5081
  }
5070
5082
  break;
@@ -5093,42 +5105,42 @@ class MalloyParser extends Parser_1.Parser {
5093
5105
  this.enterRule(_localctx, 198, MalloyParser.RULE_jsonObject);
5094
5106
  let _la;
5095
5107
  try {
5096
- this.state = 976;
5108
+ this.state = 985;
5097
5109
  this._errHandler.sync(this);
5098
5110
  switch (this.interpreter.adaptivePredict(this._input, 108, this._ctx)) {
5099
5111
  case 1:
5100
5112
  this.enterOuterAlt(_localctx, 1);
5101
5113
  {
5102
- this.state = 963;
5114
+ this.state = 972;
5103
5115
  this.match(MalloyParser.OCURLY);
5104
- this.state = 964;
5116
+ this.state = 973;
5105
5117
  this.jsonProperty();
5106
- this.state = 969;
5118
+ this.state = 978;
5107
5119
  this._errHandler.sync(this);
5108
5120
  _la = this._input.LA(1);
5109
5121
  while (_la === MalloyParser.COMMA) {
5110
5122
  {
5111
5123
  {
5112
- this.state = 965;
5124
+ this.state = 974;
5113
5125
  this.match(MalloyParser.COMMA);
5114
- this.state = 966;
5126
+ this.state = 975;
5115
5127
  this.jsonProperty();
5116
5128
  }
5117
5129
  }
5118
- this.state = 971;
5130
+ this.state = 980;
5119
5131
  this._errHandler.sync(this);
5120
5132
  _la = this._input.LA(1);
5121
5133
  }
5122
- this.state = 972;
5134
+ this.state = 981;
5123
5135
  this.match(MalloyParser.CCURLY);
5124
5136
  }
5125
5137
  break;
5126
5138
  case 2:
5127
5139
  this.enterOuterAlt(_localctx, 2);
5128
5140
  {
5129
- this.state = 974;
5141
+ this.state = 983;
5130
5142
  this.match(MalloyParser.OCURLY);
5131
- this.state = 975;
5143
+ this.state = 984;
5132
5144
  this.match(MalloyParser.CCURLY);
5133
5145
  }
5134
5146
  break;
@@ -5156,11 +5168,11 @@ class MalloyParser extends Parser_1.Parser {
5156
5168
  try {
5157
5169
  this.enterOuterAlt(_localctx, 1);
5158
5170
  {
5159
- this.state = 978;
5171
+ this.state = 987;
5160
5172
  this.match(MalloyParser.JSON_STRING);
5161
- this.state = 979;
5173
+ this.state = 988;
5162
5174
  this.match(MalloyParser.COLON);
5163
- this.state = 980;
5175
+ this.state = 989;
5164
5176
  this.jsonValue();
5165
5177
  }
5166
5178
  }
@@ -5185,42 +5197,42 @@ class MalloyParser extends Parser_1.Parser {
5185
5197
  this.enterRule(_localctx, 202, MalloyParser.RULE_jsonArray);
5186
5198
  let _la;
5187
5199
  try {
5188
- this.state = 995;
5200
+ this.state = 1004;
5189
5201
  this._errHandler.sync(this);
5190
5202
  switch (this.interpreter.adaptivePredict(this._input, 110, this._ctx)) {
5191
5203
  case 1:
5192
5204
  this.enterOuterAlt(_localctx, 1);
5193
5205
  {
5194
- this.state = 982;
5206
+ this.state = 991;
5195
5207
  this.match(MalloyParser.OBRACK);
5196
- this.state = 983;
5208
+ this.state = 992;
5197
5209
  this.jsonValue();
5198
- this.state = 988;
5210
+ this.state = 997;
5199
5211
  this._errHandler.sync(this);
5200
5212
  _la = this._input.LA(1);
5201
5213
  while (_la === MalloyParser.COMMA) {
5202
5214
  {
5203
5215
  {
5204
- this.state = 984;
5216
+ this.state = 993;
5205
5217
  this.match(MalloyParser.COMMA);
5206
- this.state = 985;
5218
+ this.state = 994;
5207
5219
  this.jsonValue();
5208
5220
  }
5209
5221
  }
5210
- this.state = 990;
5222
+ this.state = 999;
5211
5223
  this._errHandler.sync(this);
5212
5224
  _la = this._input.LA(1);
5213
5225
  }
5214
- this.state = 991;
5226
+ this.state = 1000;
5215
5227
  this.match(MalloyParser.CBRACK);
5216
5228
  }
5217
5229
  break;
5218
5230
  case 2:
5219
5231
  this.enterOuterAlt(_localctx, 2);
5220
5232
  {
5221
- this.state = 993;
5233
+ this.state = 1002;
5222
5234
  this.match(MalloyParser.OBRACK);
5223
- this.state = 994;
5235
+ this.state = 1003;
5224
5236
  this.match(MalloyParser.CBRACK);
5225
5237
  }
5226
5238
  break;
@@ -5248,7 +5260,7 @@ class MalloyParser extends Parser_1.Parser {
5248
5260
  try {
5249
5261
  this.enterOuterAlt(_localctx, 1);
5250
5262
  {
5251
- this.state = 997;
5263
+ this.state = 1006;
5252
5264
  this.id();
5253
5265
  }
5254
5266
  }
@@ -5274,7 +5286,7 @@ class MalloyParser extends Parser_1.Parser {
5274
5286
  try {
5275
5287
  this.enterOuterAlt(_localctx, 1);
5276
5288
  {
5277
- this.state = 999;
5289
+ this.state = 1008;
5278
5290
  this.id();
5279
5291
  }
5280
5292
  }
@@ -5300,7 +5312,7 @@ class MalloyParser extends Parser_1.Parser {
5300
5312
  try {
5301
5313
  this.enterOuterAlt(_localctx, 1);
5302
5314
  {
5303
- this.state = 1001;
5315
+ this.state = 1010;
5304
5316
  this.match(MalloyParser.JSON_STRING);
5305
5317
  }
5306
5318
  }
@@ -5329,29 +5341,35 @@ class MalloyParser extends Parser_1.Parser {
5329
5341
  fieldExpr_sempred(_localctx, predIndex) {
5330
5342
  switch (predIndex) {
5331
5343
  case 0:
5332
- return this.precpred(this._ctx, 16);
5344
+ return this.precpred(this._ctx, 19);
5333
5345
  case 1:
5334
- return this.precpred(this._ctx, 15);
5346
+ return this.precpred(this._ctx, 18);
5335
5347
  case 2:
5336
- return this.precpred(this._ctx, 14);
5348
+ return this.precpred(this._ctx, 17);
5337
5349
  case 3:
5338
- return this.precpred(this._ctx, 11);
5350
+ return this.precpred(this._ctx, 13);
5339
5351
  case 4:
5340
- return this.precpred(this._ctx, 8);
5352
+ return this.precpred(this._ctx, 10);
5341
5353
  case 5:
5342
- return this.precpred(this._ctx, 22);
5354
+ return this.precpred(this._ctx, 9);
5343
5355
  case 6:
5344
- return this.precpred(this._ctx, 19);
5356
+ return this.precpred(this._ctx, 8);
5345
5357
  case 7:
5346
- return this.precpred(this._ctx, 18);
5358
+ return this.precpred(this._ctx, 25);
5347
5359
  case 8:
5348
- return this.precpred(this._ctx, 17);
5360
+ return this.precpred(this._ctx, 23);
5349
5361
  case 9:
5350
- return this.precpred(this._ctx, 13);
5362
+ return this.precpred(this._ctx, 22);
5351
5363
  case 10:
5352
- return this.precpred(this._ctx, 12);
5364
+ return this.precpred(this._ctx, 21);
5353
5365
  case 11:
5354
- return this.precpred(this._ctx, 10);
5366
+ return this.precpred(this._ctx, 16);
5367
+ case 12:
5368
+ return this.precpred(this._ctx, 15);
5369
+ case 13:
5370
+ return this.precpred(this._ctx, 14);
5371
+ case 14:
5372
+ return this.precpred(this._ctx, 12);
5355
5373
  }
5356
5374
  return true;
5357
5375
  }
@@ -5431,76 +5449,77 @@ MalloyParser.NUMBER = 65;
5431
5449
  MalloyParser.ON = 66;
5432
5450
  MalloyParser.OR = 67;
5433
5451
  MalloyParser.PICK = 68;
5434
- MalloyParser.QMARK = 69;
5435
- MalloyParser.QUARTER = 70;
5436
- MalloyParser.SECOND = 71;
5437
- MalloyParser.STRING = 72;
5438
- MalloyParser.SUM = 73;
5439
- MalloyParser.TABLE = 74;
5440
- MalloyParser.THEN = 75;
5441
- MalloyParser.THIS = 76;
5442
- MalloyParser.TIMESTAMP = 77;
5443
- MalloyParser.TO = 78;
5444
- MalloyParser.TRUE = 79;
5445
- MalloyParser.TURTLE = 80;
5446
- MalloyParser.WEEK = 81;
5447
- MalloyParser.WHEN = 82;
5448
- MalloyParser.WITH = 83;
5449
- MalloyParser.YEAR = 84;
5450
- MalloyParser.UNGROUPED = 85;
5451
- MalloyParser.STRING_ESCAPE = 86;
5452
- MalloyParser.HACKY_REGEX = 87;
5453
- MalloyParser.STRING_LITERAL = 88;
5454
- MalloyParser.AMPER = 89;
5455
- MalloyParser.ARROW = 90;
5456
- MalloyParser.FAT_ARROW = 91;
5457
- MalloyParser.OPAREN = 92;
5458
- MalloyParser.CPAREN = 93;
5459
- MalloyParser.OBRACK = 94;
5460
- MalloyParser.CBRACK = 95;
5461
- MalloyParser.OCURLY = 96;
5462
- MalloyParser.CCURLY = 97;
5463
- MalloyParser.DOUBLECOLON = 98;
5464
- MalloyParser.COLON = 99;
5465
- MalloyParser.COMMA = 100;
5466
- MalloyParser.DOT = 101;
5467
- MalloyParser.LT = 102;
5468
- MalloyParser.GT = 103;
5469
- MalloyParser.EQ = 104;
5470
- MalloyParser.NE = 105;
5471
- MalloyParser.LTE = 106;
5472
- MalloyParser.GTE = 107;
5473
- MalloyParser.PLUS = 108;
5474
- MalloyParser.MINUS = 109;
5475
- MalloyParser.STAR = 110;
5476
- MalloyParser.STARSTAR = 111;
5477
- MalloyParser.SLASH = 112;
5478
- MalloyParser.BAR = 113;
5479
- MalloyParser.SEMI = 114;
5480
- MalloyParser.NOT_MATCH = 115;
5481
- MalloyParser.MATCH = 116;
5482
- MalloyParser.PERCENT = 117;
5483
- MalloyParser.LITERAL_TIMESTAMP = 118;
5484
- MalloyParser.LITERAL_HOUR = 119;
5485
- MalloyParser.LITERAL_DAY = 120;
5486
- MalloyParser.LITERAL_QUARTER = 121;
5487
- MalloyParser.LITERAL_MONTH = 122;
5488
- MalloyParser.LITERAL_WEEK = 123;
5489
- MalloyParser.LITERAL_YEAR = 124;
5490
- MalloyParser.IDENTIFIER = 125;
5491
- MalloyParser.PERCENT_LITERAL = 126;
5492
- MalloyParser.INTEGER_LITERAL = 127;
5493
- MalloyParser.NUMERIC_LITERAL = 128;
5494
- MalloyParser.OBJECT_NAME_LITERAL = 129;
5495
- MalloyParser.BLOCK_COMMENT = 130;
5496
- MalloyParser.COMMENT_TO_EOL = 131;
5497
- MalloyParser.WHITE_SPACE = 132;
5498
- MalloyParser.SQL_BEGIN = 133;
5499
- MalloyParser.CLOSE_CODE = 134;
5500
- MalloyParser.UNWATED_CHARS_TRAILING_NUMBERS = 135;
5501
- MalloyParser.UNEXPECTED_CHAR = 136;
5502
- MalloyParser.OPEN_CODE = 137;
5503
- MalloyParser.SQL_END = 138;
5452
+ MalloyParser.QUARTER = 69;
5453
+ MalloyParser.SECOND = 70;
5454
+ MalloyParser.STRING = 71;
5455
+ MalloyParser.SUM = 72;
5456
+ MalloyParser.TABLE = 73;
5457
+ MalloyParser.THEN = 74;
5458
+ MalloyParser.THIS = 75;
5459
+ MalloyParser.TIMESTAMP = 76;
5460
+ MalloyParser.TO = 77;
5461
+ MalloyParser.TRUE = 78;
5462
+ MalloyParser.TURTLE = 79;
5463
+ MalloyParser.WEEK = 80;
5464
+ MalloyParser.WHEN = 81;
5465
+ MalloyParser.WITH = 82;
5466
+ MalloyParser.YEAR = 83;
5467
+ MalloyParser.UNGROUPED = 84;
5468
+ MalloyParser.STRING_ESCAPE = 85;
5469
+ MalloyParser.HACKY_REGEX = 86;
5470
+ MalloyParser.STRING_LITERAL = 87;
5471
+ MalloyParser.AMPER = 88;
5472
+ MalloyParser.ARROW = 89;
5473
+ MalloyParser.FAT_ARROW = 90;
5474
+ MalloyParser.OPAREN = 91;
5475
+ MalloyParser.CPAREN = 92;
5476
+ MalloyParser.OBRACK = 93;
5477
+ MalloyParser.CBRACK = 94;
5478
+ MalloyParser.OCURLY = 95;
5479
+ MalloyParser.CCURLY = 96;
5480
+ MalloyParser.DOUBLECOLON = 97;
5481
+ MalloyParser.COLON = 98;
5482
+ MalloyParser.COMMA = 99;
5483
+ MalloyParser.DOT = 100;
5484
+ MalloyParser.LT = 101;
5485
+ MalloyParser.GT = 102;
5486
+ MalloyParser.EQ = 103;
5487
+ MalloyParser.NE = 104;
5488
+ MalloyParser.LTE = 105;
5489
+ MalloyParser.GTE = 106;
5490
+ MalloyParser.PLUS = 107;
5491
+ MalloyParser.MINUS = 108;
5492
+ MalloyParser.STAR = 109;
5493
+ MalloyParser.STARSTAR = 110;
5494
+ MalloyParser.SLASH = 111;
5495
+ MalloyParser.BAR = 112;
5496
+ MalloyParser.SEMI = 113;
5497
+ MalloyParser.NOT_MATCH = 114;
5498
+ MalloyParser.MATCH = 115;
5499
+ MalloyParser.PERCENT = 116;
5500
+ MalloyParser.DOUBLE_QMARK = 117;
5501
+ MalloyParser.QMARK = 118;
5502
+ MalloyParser.LITERAL_TIMESTAMP = 119;
5503
+ MalloyParser.LITERAL_HOUR = 120;
5504
+ MalloyParser.LITERAL_DAY = 121;
5505
+ MalloyParser.LITERAL_QUARTER = 122;
5506
+ MalloyParser.LITERAL_MONTH = 123;
5507
+ MalloyParser.LITERAL_WEEK = 124;
5508
+ MalloyParser.LITERAL_YEAR = 125;
5509
+ MalloyParser.IDENTIFIER = 126;
5510
+ MalloyParser.PERCENT_LITERAL = 127;
5511
+ MalloyParser.INTEGER_LITERAL = 128;
5512
+ MalloyParser.NUMERIC_LITERAL = 129;
5513
+ MalloyParser.OBJECT_NAME_LITERAL = 130;
5514
+ MalloyParser.BLOCK_COMMENT = 131;
5515
+ MalloyParser.COMMENT_TO_EOL = 132;
5516
+ MalloyParser.WHITE_SPACE = 133;
5517
+ MalloyParser.SQL_BEGIN = 134;
5518
+ MalloyParser.CLOSE_CODE = 135;
5519
+ MalloyParser.UNWATED_CHARS_TRAILING_NUMBERS = 136;
5520
+ MalloyParser.UNEXPECTED_CHAR = 137;
5521
+ MalloyParser.OPEN_CODE = 138;
5522
+ MalloyParser.SQL_END = 139;
5504
5523
  MalloyParser.RULE_malloyDocument = 0;
5505
5524
  MalloyParser.RULE_malloyStatement = 1;
5506
5525
  MalloyParser.RULE_defineSourceStatement = 2;
@@ -5642,13 +5661,13 @@ MalloyParser._LITERAL_NAMES = [
5642
5661
  undefined, undefined, undefined, undefined, undefined, undefined, undefined,
5643
5662
  undefined, undefined, undefined, undefined, undefined, undefined, undefined,
5644
5663
  undefined, undefined, undefined, undefined, undefined, undefined, undefined,
5645
- undefined, undefined, undefined, undefined, undefined, undefined, "'?'",
5646
5664
  undefined, undefined, undefined, undefined, undefined, undefined, undefined,
5647
5665
  undefined, undefined, undefined, undefined, undefined, undefined, undefined,
5648
- undefined, undefined, undefined, undefined, undefined, "'&'", "'->'",
5649
- "'=>'", "'('", "')'", "'['", "']'", "'{'", "'}'", "'::'", "':'", "','",
5650
- "'.'", "'<'", "'>'", "'='", "'!='", "'<='", "'>='", "'+'", "'-'", "'*'",
5651
- "'**'", "'/'", "'|'", "';'", "'!~'", "'~'", "'%'", undefined, undefined,
5666
+ undefined, undefined, undefined, undefined, undefined, undefined, undefined,
5667
+ undefined, undefined, undefined, undefined, "'&'", "'->'", "'=>'", "'('",
5668
+ "')'", "'['", "']'", "'{'", "'}'", "'::'", "':'", "','", "'.'", "'<'",
5669
+ "'>'", "'='", "'!='", "'<='", "'>='", "'+'", "'-'", "'*'", "'**'", "'/'",
5670
+ "'|'", "';'", "'!~'", "'~'", "'%'", "'??'", "'?'", undefined, undefined,
5652
5671
  undefined, undefined, undefined, undefined, undefined, undefined, undefined,
5653
5672
  undefined, undefined, undefined, undefined, undefined, undefined, "'\"\"\"'",
5654
5673
  "'}%'",
@@ -5662,22 +5681,22 @@ MalloyParser._SYMBOLIC_NAMES = [
5662
5681
  "CASE", "CAST", "CONDITION", "COUNT", "DATE", "DAY", "DESC", "DISTINCT",
5663
5682
  "ELSE", "END", "EXCLUDE", "FALSE", "FOR", "FROM", "FROM_SQL", "HAS", "HOUR",
5664
5683
  "IMPORT", "IS", "JSON", "LAST", "MAX", "MIN", "MINUTE", "MONTH", "NOT",
5665
- "NOW", "NULL", "NUMBER", "ON", "OR", "PICK", "QMARK", "QUARTER", "SECOND",
5666
- "STRING", "SUM", "TABLE", "THEN", "THIS", "TIMESTAMP", "TO", "TRUE", "TURTLE",
5667
- "WEEK", "WHEN", "WITH", "YEAR", "UNGROUPED", "STRING_ESCAPE", "HACKY_REGEX",
5668
- "STRING_LITERAL", "AMPER", "ARROW", "FAT_ARROW", "OPAREN", "CPAREN", "OBRACK",
5669
- "CBRACK", "OCURLY", "CCURLY", "DOUBLECOLON", "COLON", "COMMA", "DOT",
5670
- "LT", "GT", "EQ", "NE", "LTE", "GTE", "PLUS", "MINUS", "STAR", "STARSTAR",
5671
- "SLASH", "BAR", "SEMI", "NOT_MATCH", "MATCH", "PERCENT", "LITERAL_TIMESTAMP",
5672
- "LITERAL_HOUR", "LITERAL_DAY", "LITERAL_QUARTER", "LITERAL_MONTH", "LITERAL_WEEK",
5673
- "LITERAL_YEAR", "IDENTIFIER", "PERCENT_LITERAL", "INTEGER_LITERAL", "NUMERIC_LITERAL",
5674
- "OBJECT_NAME_LITERAL", "BLOCK_COMMENT", "COMMENT_TO_EOL", "WHITE_SPACE",
5675
- "SQL_BEGIN", "CLOSE_CODE", "UNWATED_CHARS_TRAILING_NUMBERS", "UNEXPECTED_CHAR",
5676
- "OPEN_CODE", "SQL_END",
5684
+ "NOW", "NULL", "NUMBER", "ON", "OR", "PICK", "QUARTER", "SECOND", "STRING",
5685
+ "SUM", "TABLE", "THEN", "THIS", "TIMESTAMP", "TO", "TRUE", "TURTLE", "WEEK",
5686
+ "WHEN", "WITH", "YEAR", "UNGROUPED", "STRING_ESCAPE", "HACKY_REGEX", "STRING_LITERAL",
5687
+ "AMPER", "ARROW", "FAT_ARROW", "OPAREN", "CPAREN", "OBRACK", "CBRACK",
5688
+ "OCURLY", "CCURLY", "DOUBLECOLON", "COLON", "COMMA", "DOT", "LT", "GT",
5689
+ "EQ", "NE", "LTE", "GTE", "PLUS", "MINUS", "STAR", "STARSTAR", "SLASH",
5690
+ "BAR", "SEMI", "NOT_MATCH", "MATCH", "PERCENT", "DOUBLE_QMARK", "QMARK",
5691
+ "LITERAL_TIMESTAMP", "LITERAL_HOUR", "LITERAL_DAY", "LITERAL_QUARTER",
5692
+ "LITERAL_MONTH", "LITERAL_WEEK", "LITERAL_YEAR", "IDENTIFIER", "PERCENT_LITERAL",
5693
+ "INTEGER_LITERAL", "NUMERIC_LITERAL", "OBJECT_NAME_LITERAL", "BLOCK_COMMENT",
5694
+ "COMMENT_TO_EOL", "WHITE_SPACE", "SQL_BEGIN", "CLOSE_CODE", "UNWATED_CHARS_TRAILING_NUMBERS",
5695
+ "UNEXPECTED_CHAR", "OPEN_CODE", "SQL_END",
5677
5696
  ];
5678
5697
  MalloyParser.VOCABULARY = new VocabularyImpl_1.VocabularyImpl(MalloyParser._LITERAL_NAMES, MalloyParser._SYMBOLIC_NAMES, []);
5679
5698
  MalloyParser._serializedATNSegments = 2;
5680
- MalloyParser._serializedATNSegment0 = "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03\x8C\u03EE\x04" +
5699
+ MalloyParser._serializedATNSegment0 = "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03\x8D\u03F7\x04" +
5681
5700
  "\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04" +
5682
5701
  "\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r" +
5683
5702
  "\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12" +
@@ -5751,208 +5770,208 @@ MalloyParser._serializedATNSegment0 = "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\
5751
5770
  "\nW\fW\x0EW\u0337\vW\x03W\x03W\x05W\u033B\nW\x03W\x03W\x03W\x03W\x03W" +
5752
5771
  "\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03" +
5753
5772
  "W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03" +
5754
- "W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x07W\u0365\nW\fW\x0EW\u0368\vW\x03" +
5755
- "X\x05X\u036B\nX\x03X\x03X\x03Y\x06Y\u0370\nY\rY\x0EY\u0371\x03Y\x03Y\x05" +
5756
- "Y\u0376\nY\x03Z\x03Z\x05Z\u037A\nZ\x03Z\x03Z\x03Z\x03[\x03[\x03[\x07[" +
5757
- "\u0382\n[\f[\x0E[\u0385\v[\x03[\x05[\u0388\n[\x03\\\x03\\\x05\\\u038C" +
5758
- "\n\\\x03\\\x07\\\u038F\n\\\f\\\x0E\\\u0392\v\\\x03]\x03]\x05]\u0396\n" +
5759
- "]\x03]\x07]\u0399\n]\f]\x0E]\u039C\v]\x03]\x05]\u039F\n]\x03^\x03^\x03" +
5760
- "^\x03^\x05^\u03A5\n^\x03^\x03^\x05^\u03A9\n^\x03_\x03_\x03_\x07_\u03AE" +
5761
- "\n_\f_\x0E_\u03B1\v_\x03`\x03`\x03a\x03a\x03b\x03b\x03b\x03c\x03c\x03" +
5762
- "d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x05d\u03C4\nd\x03e\x03e\x03e\x03" +
5763
- "e\x07e\u03CA\ne\fe\x0Ee\u03CD\ve\x03e\x03e\x03e\x03e\x05e\u03D3\ne\x03" +
5764
- "f\x03f\x03f\x03f\x03g\x03g\x03g\x03g\x07g\u03DD\ng\fg\x0Eg\u03E0\vg\x03" +
5765
- "g\x03g\x03g\x03g\x05g\u03E6\ng\x03h\x03h\x03i\x03i\x03j\x03j\x03j\x02" +
5766
- "\x02\x03\xACk\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E\x02\x10\x02" +
5767
- "\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02 \x02\"\x02$\x02" +
5768
- "&\x02(\x02*\x02,\x02.\x020\x022\x024\x026\x028\x02:\x02<\x02>\x02@\x02" +
5769
- "B\x02D\x02F\x02H\x02J\x02L\x02N\x02P\x02R\x02T\x02V\x02X\x02Z\x02\\\x02" +
5770
- "^\x02`\x02b\x02d\x02f\x02h\x02j\x02l\x02n\x02p\x02r\x02t\x02v\x02x\x02" +
5771
- "z\x02|\x02~\x02\x80\x02\x82\x02\x84\x02\x86\x02\x88\x02\x8A\x02\x8C\x02" +
5772
- "\x8E\x02\x90\x02\x92\x02\x94\x02\x96\x02\x98\x02\x9A\x02\x9C\x02\x9E\x02" +
5773
- "\xA0\x02\xA2\x02\xA4\x02\xA6\x02\xA8\x02\xAA\x02\xAC\x02\xAE\x02\xB0\x02" +
5774
- "\xB2\x02\xB4\x02\xB6\x02\xB8\x02\xBA\x02\xBC\x02\xBE\x02\xC0\x02\xC2\x02" +
5775
- "\xC4\x02\xC6\x02\xC8\x02\xCA\x02\xCC\x02\xCE\x02\xD0\x02\xD2\x02\x02\x14" +
5776
- "\x04\x02\n\n\x1B\x1B\x04\x02\x04\x04\t\t\x04\x02##--\x05\x0222QQ\x80\x81" +
5777
- "\x06\x02$$**<=KK\x07\x02%%++CCJJOO\x04\x02hmuv\x03\x02\x81\x82\x04\x02" +
5778
- "22QQ\x04\x02\x7F\x7F\x83\x83\b\x02,,77>?HISSVV\x04\x02 11\x05\x02ppr" +
5779
- "rww\x03\x02no\x04\x02!!EE\x04\x02[[ss\x04\x02GGee\x03\x02pq\x02\u0432" +
5780
- "\x02\xD8\x03\x02\x02\x02\x04\xE1\x03\x02\x02\x02\x06\xE3\x03\x02\x02\x02" +
5781
- "\b\xE6\x03\x02\x02\x02\n\xEC\x03\x02\x02\x02\f\xEE\x03\x02\x02\x02\x0E" +
5782
- "\xF0\x03\x02\x02\x02\x10\xF8\x03\x02\x02\x02\x12\u0104\x03\x02\x02\x02" +
5783
- "\x14\u0106\x03\x02\x02\x02\x16\u010F\x03\x02\x02\x02\x18\u0113\x03\x02" +
5784
- "\x02\x02\x1A\u0116\x03\x02\x02\x02\x1C\u0118\x03\x02\x02\x02\x1E\u0125" +
5785
- "\x03\x02\x02\x02 \u0129\x03\x02\x02\x02\"\u013D\x03\x02\x02\x02$\u013F" +
5786
- "\x03\x02\x02\x02&\u014E\x03\x02\x02\x02(\u0150\x03\x02\x02\x02*\u0153" +
5787
- "\x03\x02\x02\x02,\u0162\x03\x02\x02\x02.\u0164\x03\x02\x02\x020\u0169" +
5788
- "\x03\x02\x02\x022\u016B\x03\x02\x02\x024\u016D\x03\x02\x02\x026\u017A" +
5789
- "\x03\x02\x02\x028\u017E\x03\x02\x02\x02:\u0191\x03\x02\x02\x02<\u0193" +
5790
- "\x03\x02\x02\x02>\u0195\x03\x02\x02\x02@\u01A1\x03\x02\x02\x02B\u01B3" +
5791
- "\x03\x02\x02\x02D\u01B5\x03\x02\x02\x02F\u01C2\x03\x02\x02\x02H\u01C6" +
5792
- "\x03\x02\x02\x02J\u01D3\x03\x02\x02\x02L\u01E0\x03\x02\x02\x02N\u01E4" +
5793
- "\x03\x02\x02\x02P\u01E6\x03\x02\x02\x02R\u01E8\x03\x02\x02\x02T\u01EA" +
5794
- "\x03\x02\x02\x02V\u01FE\x03\x02\x02\x02X\u0200\x03\x02\x02\x02Z\u021E" +
5795
- "\x03\x02\x02\x02\\\u0220\x03\x02\x02\x02^\u0224\x03\x02\x02\x02`\u0229" +
5796
- "\x03\x02\x02\x02b\u022B\x03\x02\x02\x02d\u0236\x03\x02\x02\x02f\u0239" +
5797
- "\x03\x02\x02\x02h\u023C\x03\x02\x02\x02j\u0249\x03\x02\x02\x02l\u024B" +
5798
- "\x03\x02\x02\x02n\u025D\x03\x02\x02\x02p\u025F\x03\x02\x02\x02r\u0262" +
5799
- "\x03\x02\x02\x02t\u026F\x03\x02\x02\x02v\u0273\x03\x02\x02\x02x\u0275" +
5800
- "\x03\x02\x02\x02z\u0278\x03\x02\x02\x02|\u0290\x03\x02\x02\x02~\u0292" +
5801
- "\x03\x02\x02\x02\x80\u0295\x03\x02\x02\x02\x82\u0298\x03\x02\x02\x02\x84" +
5802
- "\u029B\x03\x02\x02\x02\x86\u02AA\x03\x02\x02\x02\x88\u02AF\x03\x02\x02" +
5803
- "\x02\x8A\u02B6\x03\x02\x02\x02\x8C\u02B8\x03\x02\x02\x02\x8E\u02C4\x03" +
5804
- "\x02\x02\x02\x90\u02C6\x03\x02\x02\x02\x92\u02D0\x03\x02\x02\x02\x94\u02D6" +
5805
- "\x03\x02\x02\x02\x96\u02D9\x03\x02\x02\x02\x98\u02DC\x03\x02\x02\x02\x9A" +
5806
- "\u02DE\x03\x02\x02\x02\x9C\u02E0\x03\x02\x02\x02\x9E\u02E2\x03\x02\x02" +
5807
- "\x02\xA0\u02EB\x03\x02\x02\x02\xA2\u02F4\x03\x02\x02\x02\xA4\u02F6\x03" +
5808
- "\x02\x02\x02\xA6\u02F8\x03\x02\x02\x02\xA8\u02FA\x03\x02\x02\x02\xAA\u02FC" +
5809
- "\x03\x02\x02\x02\xAC\u033A\x03\x02\x02\x02\xAE\u036A\x03\x02\x02\x02\xB0" +
5810
- "\u036F\x03\x02\x02\x02\xB2\u0377\x03\x02\x02\x02\xB4\u037E\x03\x02\x02" +
5811
- "\x02\xB6\u0389\x03\x02\x02\x02\xB8\u0393\x03\x02\x02\x02\xBA\u03A8\x03" +
5812
- "\x02\x02\x02\xBC\u03AA\x03\x02\x02\x02\xBE\u03B2\x03\x02\x02\x02\xC0\u03B4" +
5813
- "\x03\x02\x02\x02\xC2\u03B6\x03\x02\x02\x02\xC4\u03B9\x03\x02\x02\x02\xC6" +
5814
- "\u03C3\x03\x02\x02\x02\xC8\u03D2\x03\x02\x02\x02\xCA\u03D4\x03\x02\x02" +
5815
- "\x02\xCC\u03E5\x03\x02\x02\x02\xCE\u03E7\x03\x02\x02\x02\xD0\u03E9\x03" +
5816
- "\x02\x02\x02\xD2\u03EB\x03\x02\x02\x02\xD4\xD7\x05\x04\x03\x02\xD5\xD7" +
5817
- "\x07t\x02\x02\xD6\xD4\x03\x02\x02\x02\xD6\xD5\x03\x02\x02\x02\xD7\xDA" +
5818
- "\x03\x02\x02\x02\xD8\xD6\x03\x02\x02\x02\xD8\xD9\x03\x02\x02\x02\xD9\xDB" +
5819
- "\x03\x02\x02\x02\xDA\xD8\x03\x02\x02\x02\xDB\xDC\x07\x02\x02\x03\xDC\x03" +
5820
- "\x03\x02\x02\x02\xDD\xE2\x05\x06\x04\x02\xDE\xE2\x05\x0E\b\x02\xDF\xE2" +
5821
- "\x05\n\x06\x02\xE0\xE2\x05\x18\r\x02\xE1\xDD\x03\x02\x02\x02\xE1\xDE\x03" +
5822
- "\x02\x02\x02\xE1\xDF\x03\x02\x02\x02\xE1\xE0\x03\x02\x02\x02\xE2\x05\x03" +
5823
- "\x02\x02\x02\xE3\xE4\x05\b\x05\x02\xE4\xE5\x054\x1B\x02\xE5\x07\x03\x02" +
5824
- "\x02\x02\xE6\xE7\t\x02\x02\x02\xE7\t\x03\x02\x02\x02\xE8\xE9\x07\x17\x02" +
5825
- "\x02\xE9\xED\x05\x1C\x0F\x02\xEA\xEB\x07\x17\x02\x02\xEB\xED\x05\f\x07" +
5826
- "\x02\xEC\xE8\x03\x02\x02\x02\xEC\xEA\x03\x02\x02\x02\xED\v\x03\x02\x02" +
5827
- "\x02\xEE\xEF\x05\"\x12\x02\xEF\r\x03\x02\x02\x02\xF0\xF4\x07\x1C\x02\x02" +
5828
- "\xF1\xF2\x05\xD0i\x02\xF2\xF3\x079\x02\x02\xF3\xF5\x03\x02\x02\x02\xF4" +
5829
- "\xF1\x03\x02\x02\x02\xF4\xF5\x03\x02\x02\x02\xF5\xF6\x03\x02\x02\x02\xF6" +
5830
- "\xF7\x05\x10\t\x02\xF7\x0F\x03\x02\x02\x02\xF8\xFA\x07b\x02\x02\xF9\xFB" +
5831
- "\x05\x12\n\x02\xFA\xF9\x03\x02\x02\x02\xFB\xFC\x03\x02\x02\x02\xFC\xFA" +
5832
- "\x03\x02\x02\x02\xFC\xFD\x03\x02\x02\x02\xFD\xFE\x03\x02\x02\x02\xFE\xFF" +
5833
- "\x07c\x02\x02\xFF\x11\x03\x02\x02\x02\u0100\u0101\x07\x06\x02\x02\u0101" +
5834
- "\u0105\x05\xD2j\x02\u0102\u0103\x07\x1A\x02\x02\u0103\u0105\x05\x14\v" +
5835
- "\x02\u0104\u0100\x03\x02\x02\x02\u0104\u0102\x03\x02\x02\x02\u0105\x13" +
5836
- "\x03\x02\x02\x02\u0106\u010A\x07\x87\x02\x02\u0107\u0109\x05\x16\f\x02" +
5837
- "\u0108\u0107\x03\x02\x02\x02\u0109\u010C\x03\x02\x02\x02\u010A\u0108\x03" +
5838
- "\x02\x02\x02\u010A\u010B\x03\x02\x02\x02\u010B\u010D\x03\x02\x02\x02\u010C" +
5839
- "\u010A\x03\x02\x02\x02\u010D\u010E\x07\x8C\x02\x02\u010E\x15\x03\x02\x02" +
5840
- "\x02\u010F\u0110\x07\x8B\x02\x02\u0110\u0111\x05\"\x12\x02\u0111\u0112" +
5841
- "\x07\x88\x02\x02\u0112\x17\x03\x02\x02\x02\u0113\u0114\x078\x02\x02\u0114" +
5842
- "\u0115\x05\x1A\x0E\x02\u0115\x19\x03\x02\x02\x02\u0116\u0117\x07\x03\x02" +
5843
- "\x02\u0117\x1B\x03\x02\x02\x02\u0118\u011F\x05\x1E\x10\x02\u0119\u011B" +
5844
- "\x07f\x02\x02\u011A\u0119\x03\x02\x02\x02\u011A\u011B\x03\x02\x02\x02" +
5845
- "\u011B\u011C\x03\x02\x02\x02\u011C\u011E\x05\x1E\x10\x02\u011D\u011A\x03" +
5846
- "\x02\x02\x02\u011E\u0121\x03\x02\x02\x02\u011F\u011D\x03\x02\x02\x02\u011F" +
5847
- "\u0120\x03\x02\x02\x02\u0120\u0123\x03\x02\x02\x02\u0121\u011F\x03\x02" +
5848
- "\x02\x02\u0122\u0124\x07f\x02\x02\u0123\u0122\x03\x02\x02\x02\u0123\u0124" +
5849
- "\x03\x02\x02\x02\u0124\x1D\x03\x02\x02\x02\u0125\u0126\x052\x1A\x02\u0126" +
5850
- "\u0127\x079\x02\x02\u0127\u0128\x05\"\x12\x02\u0128\x1F\x03\x02\x02\x02" +
5851
- "\u0129\u012A\x07n\x02\x02\u012A!\x03\x02\x02\x02\u012B\u012C\x058\x1D" +
5852
- "\x02\u012C\u012D\x07\\\x02\x02\u012D\u012E\x05$\x13\x02\u012E\u013E\x03" +
5853
- "\x02\x02\x02\u012F\u0130\x07\\\x02\x02\u0130\u0135\x052\x1A\x02\u0131" +
5854
- "\u0133\x05 \x11\x02\u0132\u0131\x03\x02\x02\x02\u0132\u0133\x03\x02\x02" +
5855
- "\x02\u0133\u0134\x03\x02\x02\x02\u0134\u0136\x05,\x17\x02\u0135\u0132" +
5856
- "\x03\x02\x02\x02\u0135\u0136\x03\x02\x02\x02\u0136\u013A\x03\x02\x02\x02" +
5857
- "\u0137\u0139\x05(\x15\x02\u0138\u0137\x03\x02\x02\x02\u0139\u013C\x03" +
5858
- "\x02\x02\x02\u013A\u0138\x03\x02\x02\x02\u013A\u013B\x03\x02\x02\x02\u013B" +
5859
- "\u013E\x03\x02\x02\x02\u013C\u013A\x03\x02\x02\x02\u013D\u012B\x03\x02" +
5860
- "\x02\x02\u013D\u012F\x03\x02\x02\x02\u013E#\x03\x02\x02\x02\u013F\u0143" +
5861
- "\x05&\x14\x02\u0140\u0142\x05(\x15\x02\u0141\u0140\x03\x02\x02\x02\u0142" +
5862
- "\u0145\x03\x02\x02\x02\u0143\u0141\x03\x02\x02\x02\u0143\u0144\x03\x02" +
5863
- "\x02\x02\u0144%\x03\x02\x02\x02\u0145\u0143\x03\x02\x02\x02\u0146\u014F" +
5864
- "\x05,\x17\x02\u0147\u014C\x050\x19\x02\u0148\u014A\x05 \x11\x02\u0149" +
5865
- "\u0148\x03\x02\x02\x02\u0149\u014A\x03\x02\x02\x02\u014A\u014B\x03\x02" +
5866
- "\x02\x02\u014B\u014D\x05,\x17\x02\u014C\u0149\x03\x02\x02\x02\u014C\u014D" +
5867
- "\x03\x02\x02\x02\u014D\u014F\x03\x02\x02\x02\u014E\u0146\x03\x02\x02\x02" +
5868
- "\u014E\u0147\x03\x02\x02\x02\u014F\'\x03\x02\x02\x02\u0150\u0151\x07\\" +
5869
- "\x02\x02\u0151\u0152\x05,\x17\x02\u0152)\x03\x02\x02\x02\u0153\u0154\x07" +
5870
- "L\x02\x02\u0154\u0155\x07^\x02\x02\u0155\u0156\x05\xA4S\x02\u0156\u0157" +
5871
- "\x07_\x02\x02\u0157+\x03\x02\x02\x02\u0158\u0163\x05.\x18\x02\u0159\u015E" +
5872
- "\x07b\x02\x02\u015A\u015D\x05n8\x02\u015B\u015D\x07t\x02\x02\u015C\u015A" +
5873
- "\x03\x02\x02\x02\u015C\u015B\x03\x02\x02\x02\u015D\u0160\x03\x02\x02\x02" +
5874
- "\u015E\u015C\x03\x02\x02\x02\u015E\u015F\x03\x02\x02\x02\u015F\u0161\x03" +
5875
- "\x02\x02\x02\u0160\u015E\x03\x02\x02\x02\u0161\u0163\x07c\x02\x02\u0162" +
5876
- "\u0158\x03\x02\x02\x02\u0162\u0159\x03\x02\x02\x02\u0163-\x03\x02\x02" +
5877
- "\x02\u0164\u0165\x07b\x02\x02\u0165\u0166\x07G\x02\x02\u0166\u0167\x05" +
5878
- "\xACW\x02\u0167\u0168\x07c\x02\x02\u0168/\x03\x02\x02\x02\u0169\u016A" +
5879
- "\x05\xA6T\x02\u016A1\x03\x02\x02\x02\u016B\u016C\x05\xA6T\x02\u016C3\x03" +
5880
- "\x02\x02\x02\u016D\u0174\x056\x1C\x02\u016E\u0170\x07f\x02\x02\u016F\u016E" +
5881
- "\x03\x02\x02\x02\u016F\u0170\x03\x02\x02\x02\u0170\u0171\x03\x02\x02\x02" +
5882
- "\u0171\u0173\x056\x1C\x02\u0172\u016F\x03\x02\x02\x02\u0173\u0176\x03" +
5883
- "\x02\x02\x02\u0174\u0172\x03\x02\x02\x02\u0174\u0175\x03\x02\x02\x02\u0175" +
5884
- "\u0178\x03\x02\x02\x02\u0176\u0174\x03\x02\x02\x02\u0177\u0179\x07f\x02" +
5885
- "\x02\u0178\u0177\x03\x02\x02\x02\u0178\u0179\x03\x02\x02\x02\u01795\x03" +
5886
- "\x02\x02\x02\u017A\u017B\x05<\x1F\x02\u017B\u017C\x079\x02\x02\u017C\u017D" +
5887
- "\x058\x1D\x02\u017D7\x03\x02\x02\x02\u017E\u0183\x05:\x1E\x02\u017F\u0181" +
5888
- "\x05 \x11\x02\u0180\u017F\x03\x02\x02\x02\u0180\u0181\x03\x02\x02\x02" +
5889
- "\u0181\u0182\x03\x02\x02\x02\u0182\u0184\x05@!\x02\u0183\u0180\x03\x02" +
5890
- "\x02\x02\u0183\u0184\x03\x02\x02\x02\u01849\x03\x02\x02\x02\u0185\u0192" +
5891
- "\x05> \x02\u0186\u0192\x05*\x16\x02\u0187\u0188\x074\x02\x02\u0188\u0189" +
5892
- "\x07^\x02\x02\u0189\u018A\x05\"\x12\x02\u018A\u018B\x07_\x02\x02\u018B" +
5893
- "\u0192\x03\x02\x02\x02\u018C\u018D\x075\x02\x02\u018D\u018E\x07^\x02\x02" +
5894
- "\u018E\u018F\x05\xCEh\x02\u018F\u0190\x07_\x02\x02\u0190\u0192\x03\x02" +
5895
- "\x02\x02\u0191\u0185\x03\x02\x02\x02\u0191\u0186\x03\x02\x02\x02\u0191" +
5896
- "\u0187\x03\x02\x02\x02\u0191\u018C\x03\x02\x02\x02\u0192;\x03\x02\x02" +
5897
- "\x02\u0193\u0194\x05\xA6T\x02\u0194=\x03\x02\x02\x02\u0195\u0196\x05\xA6" +
5898
- "T\x02\u0196?\x03\x02\x02\x02\u0197\u019C\x07b\x02\x02\u0198\u019B\x05" +
5899
- "B\"\x02\u0199\u019B\x07t\x02\x02\u019A\u0198\x03\x02\x02\x02\u019A\u0199" +
5900
- "\x03\x02\x02\x02\u019B\u019E\x03\x02\x02\x02\u019C\u019A\x03\x02\x02\x02" +
5901
- "\u019C\u019D\x03\x02\x02\x02\u019D\u019F\x03\x02\x02\x02\u019E\u019C\x03" +
5902
- "\x02\x02\x02\u019F\u01A2\x07c\x02\x02\u01A0\u01A2\x05.\x18\x02\u01A1\u0197" +
5903
- "\x03\x02\x02\x02\u01A1\u01A0\x03\x02\x02\x02\u01A2A\x03\x02\x02\x02\u01A3" +
5904
- "\u01A4\x07\b\x02\x02\u01A4\u01B4\x05H%\x02\u01A5\u01A6\x07\x12\x02\x02" +
5905
- "\u01A6\u01B4\x05J&\x02\u01A7\u01B4\x05T+\x02\u01A8\u01B4\x05V,\x02\u01A9" +
5906
- "\u01B4\x05d3\x02\u01AA\u01AB\x07\x15\x02\x02\u01AB\u01B4\x05\xC0a\x02" +
5907
- "\u01AC\u01AD\x07\x18\x02\x02\u01AD\u01B4\x05D#\x02\u01AE\u01AF\t\x03\x02" +
5908
- "\x02\u01AF\u01B4\x05\xB6\\\x02\u01B0\u01B1\x07\x17\x02\x02\u01B1\u01B4" +
5909
- "\x05h5\x02\u01B2\u01B4\x05\x96L\x02\u01B3\u01A3\x03\x02\x02\x02\u01B3" +
5910
- "\u01A5\x03\x02\x02\x02\u01B3\u01A7\x03\x02\x02\x02\u01B3\u01A8\x03\x02" +
5911
- "\x02\x02\u01B3\u01A9\x03\x02\x02\x02\u01B3\u01AA\x03\x02\x02\x02\u01B3" +
5773
+ "W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03" +
5774
+ "W\x03W\x03W\x07W\u036E\nW\fW\x0EW\u0371\vW\x03X\x05X\u0374\nX\x03X\x03" +
5775
+ "X\x03Y\x06Y\u0379\nY\rY\x0EY\u037A\x03Y\x03Y\x05Y\u037F\nY\x03Z\x03Z\x05" +
5776
+ "Z\u0383\nZ\x03Z\x03Z\x03Z\x03[\x03[\x03[\x07[\u038B\n[\f[\x0E[\u038E\v" +
5777
+ "[\x03[\x05[\u0391\n[\x03\\\x03\\\x05\\\u0395\n\\\x03\\\x07\\\u0398\n\\" +
5778
+ "\f\\\x0E\\\u039B\v\\\x03]\x03]\x05]\u039F\n]\x03]\x07]\u03A2\n]\f]\x0E" +
5779
+ "]\u03A5\v]\x03]\x05]\u03A8\n]\x03^\x03^\x03^\x03^\x05^\u03AE\n^\x03^\x03" +
5780
+ "^\x05^\u03B2\n^\x03_\x03_\x03_\x07_\u03B7\n_\f_\x0E_\u03BA\v_\x03`\x03" +
5781
+ "`\x03a\x03a\x03b\x03b\x03b\x03c\x03c\x03d\x03d\x03d\x03d\x03d\x03d\x03" +
5782
+ "d\x03d\x05d\u03CD\nd\x03e\x03e\x03e\x03e\x07e\u03D3\ne\fe\x0Ee\u03D6\v" +
5783
+ "e\x03e\x03e\x03e\x03e\x05e\u03DC\ne\x03f\x03f\x03f\x03f\x03g\x03g\x03" +
5784
+ "g\x03g\x07g\u03E6\ng\fg\x0Eg\u03E9\vg\x03g\x03g\x03g\x03g\x05g\u03EF\n" +
5785
+ "g\x03h\x03h\x03i\x03i\x03j\x03j\x03j\x02\x02\x03\xACk\x02\x02\x04\x02" +
5786
+ "\x06\x02\b\x02\n\x02\f\x02\x0E\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18" +
5787
+ "\x02\x1A\x02\x1C\x02\x1E\x02 \x02\"\x02$\x02&\x02(\x02*\x02,\x02.\x02" +
5788
+ "0\x022\x024\x026\x028\x02:\x02<\x02>\x02@\x02B\x02D\x02F\x02H\x02J\x02" +
5789
+ "L\x02N\x02P\x02R\x02T\x02V\x02X\x02Z\x02\\\x02^\x02`\x02b\x02d\x02f\x02" +
5790
+ "h\x02j\x02l\x02n\x02p\x02r\x02t\x02v\x02x\x02z\x02|\x02~\x02\x80\x02\x82" +
5791
+ "\x02\x84\x02\x86\x02\x88\x02\x8A\x02\x8C\x02\x8E\x02\x90\x02\x92\x02\x94" +
5792
+ "\x02\x96\x02\x98\x02\x9A\x02\x9C\x02\x9E\x02\xA0\x02\xA2\x02\xA4\x02\xA6" +
5793
+ "\x02\xA8\x02\xAA\x02\xAC\x02\xAE\x02\xB0\x02\xB2\x02\xB4\x02\xB6\x02\xB8" +
5794
+ "\x02\xBA\x02\xBC\x02\xBE\x02\xC0\x02\xC2\x02\xC4\x02\xC6\x02\xC8\x02\xCA" +
5795
+ "\x02\xCC\x02\xCE\x02\xD0\x02\xD2\x02\x02\x11\x04\x02\n\n\x1B\x1B\x04\x02" +
5796
+ "\x04\x04\t\t\x04\x02##--\x05\x0222PP\x81\x82\x06\x02$$**<=JJ\x07\x02%" +
5797
+ "%++CCIINN\x04\x02gltu\x03\x02\x82\x83\x04\x0222PP\x04\x02\x80\x80\x84" +
5798
+ "\x84\b\x02,,77>?GHRRUU\x04\x02 11\x05\x02ooqqvv\x03\x02mn\x03\x02op\x02" +
5799
+ "\u043E\x02\xD8\x03\x02\x02\x02\x04\xE1\x03\x02\x02\x02\x06\xE3\x03\x02" +
5800
+ "\x02\x02\b\xE6\x03\x02\x02\x02\n\xEC\x03\x02\x02\x02\f\xEE\x03\x02\x02" +
5801
+ "\x02\x0E\xF0\x03\x02\x02\x02\x10\xF8\x03\x02\x02\x02\x12\u0104\x03\x02" +
5802
+ "\x02\x02\x14\u0106\x03\x02\x02\x02\x16\u010F\x03\x02\x02\x02\x18\u0113" +
5803
+ "\x03\x02\x02\x02\x1A\u0116\x03\x02\x02\x02\x1C\u0118\x03\x02\x02\x02\x1E" +
5804
+ "\u0125\x03\x02\x02\x02 \u0129\x03\x02\x02\x02\"\u013D\x03\x02\x02\x02" +
5805
+ "$\u013F\x03\x02\x02\x02&\u014E\x03\x02\x02\x02(\u0150\x03\x02\x02\x02" +
5806
+ "*\u0153\x03\x02\x02\x02,\u0162\x03\x02\x02\x02.\u0164\x03\x02\x02\x02" +
5807
+ "0\u0169\x03\x02\x02\x022\u016B\x03\x02\x02\x024\u016D\x03\x02\x02\x02" +
5808
+ "6\u017A\x03\x02\x02\x028\u017E\x03\x02\x02\x02:\u0191\x03\x02\x02\x02" +
5809
+ "<\u0193\x03\x02\x02\x02>\u0195\x03\x02\x02\x02@\u01A1\x03\x02\x02\x02" +
5810
+ "B\u01B3\x03\x02\x02\x02D\u01B5\x03\x02\x02\x02F\u01C2\x03\x02\x02\x02" +
5811
+ "H\u01C6\x03\x02\x02\x02J\u01D3\x03\x02\x02\x02L\u01E0\x03\x02\x02\x02" +
5812
+ "N\u01E4\x03\x02\x02\x02P\u01E6\x03\x02\x02\x02R\u01E8\x03\x02\x02\x02" +
5813
+ "T\u01EA\x03\x02\x02\x02V\u01FE\x03\x02\x02\x02X\u0200\x03\x02\x02\x02" +
5814
+ "Z\u021E\x03\x02\x02\x02\\\u0220\x03\x02\x02\x02^\u0224\x03\x02\x02\x02" +
5815
+ "`\u0229\x03\x02\x02\x02b\u022B\x03\x02\x02\x02d\u0236\x03\x02\x02\x02" +
5816
+ "f\u0239\x03\x02\x02\x02h\u023C\x03\x02\x02\x02j\u0249\x03\x02\x02\x02" +
5817
+ "l\u024B\x03\x02\x02\x02n\u025D\x03\x02\x02\x02p\u025F\x03\x02\x02\x02" +
5818
+ "r\u0262\x03\x02\x02\x02t\u026F\x03\x02\x02\x02v\u0273\x03\x02\x02\x02" +
5819
+ "x\u0275\x03\x02\x02\x02z\u0278\x03\x02\x02\x02|\u0290\x03\x02\x02\x02" +
5820
+ "~\u0292\x03\x02\x02\x02\x80\u0295\x03\x02\x02\x02\x82\u0298\x03\x02\x02" +
5821
+ "\x02\x84\u029B\x03\x02\x02\x02\x86\u02AA\x03\x02\x02\x02\x88\u02AF\x03" +
5822
+ "\x02\x02\x02\x8A\u02B6\x03\x02\x02\x02\x8C\u02B8\x03\x02\x02\x02\x8E\u02C4" +
5823
+ "\x03\x02\x02\x02\x90\u02C6\x03\x02\x02\x02\x92\u02D0\x03\x02\x02\x02\x94" +
5824
+ "\u02D6\x03\x02\x02\x02\x96\u02D9\x03\x02\x02\x02\x98\u02DC\x03\x02\x02" +
5825
+ "\x02\x9A\u02DE\x03\x02\x02\x02\x9C\u02E0\x03\x02\x02\x02\x9E\u02E2\x03" +
5826
+ "\x02\x02\x02\xA0\u02EB\x03\x02\x02\x02\xA2\u02F4\x03\x02\x02\x02\xA4\u02F6" +
5827
+ "\x03\x02\x02\x02\xA6\u02F8\x03\x02\x02\x02\xA8\u02FA\x03\x02\x02\x02\xAA" +
5828
+ "\u02FC\x03\x02\x02\x02\xAC\u033A\x03\x02\x02\x02\xAE\u0373\x03\x02\x02" +
5829
+ "\x02\xB0\u0378\x03\x02\x02\x02\xB2\u0380\x03\x02\x02\x02\xB4\u0387\x03" +
5830
+ "\x02\x02\x02\xB6\u0392\x03\x02\x02\x02\xB8\u039C\x03\x02\x02\x02\xBA\u03B1" +
5831
+ "\x03\x02\x02\x02\xBC\u03B3\x03\x02\x02\x02\xBE\u03BB\x03\x02\x02\x02\xC0" +
5832
+ "\u03BD\x03\x02\x02\x02\xC2\u03BF\x03\x02\x02\x02\xC4\u03C2\x03\x02\x02" +
5833
+ "\x02\xC6\u03CC\x03\x02\x02\x02\xC8\u03DB\x03\x02\x02\x02\xCA\u03DD\x03" +
5834
+ "\x02\x02\x02\xCC\u03EE\x03\x02\x02\x02\xCE\u03F0\x03\x02\x02\x02\xD0\u03F2" +
5835
+ "\x03\x02\x02\x02\xD2\u03F4\x03\x02\x02\x02\xD4\xD7\x05\x04\x03\x02\xD5" +
5836
+ "\xD7\x07s\x02\x02\xD6\xD4\x03\x02\x02\x02\xD6\xD5\x03\x02\x02\x02\xD7" +
5837
+ "\xDA\x03\x02\x02\x02\xD8\xD6\x03\x02\x02\x02\xD8\xD9\x03\x02\x02\x02\xD9" +
5838
+ "\xDB\x03\x02\x02\x02\xDA\xD8\x03\x02\x02\x02\xDB\xDC\x07\x02\x02\x03\xDC" +
5839
+ "\x03\x03\x02\x02\x02\xDD\xE2\x05\x06\x04\x02\xDE\xE2\x05\x0E\b\x02\xDF" +
5840
+ "\xE2\x05\n\x06\x02\xE0\xE2\x05\x18\r\x02\xE1\xDD\x03\x02\x02\x02\xE1\xDE" +
5841
+ "\x03\x02\x02\x02\xE1\xDF\x03\x02\x02\x02\xE1\xE0\x03\x02\x02\x02\xE2\x05" +
5842
+ "\x03\x02\x02\x02\xE3\xE4\x05\b\x05\x02\xE4\xE5\x054\x1B\x02\xE5\x07\x03" +
5843
+ "\x02\x02\x02\xE6\xE7\t\x02\x02\x02\xE7\t\x03\x02\x02\x02\xE8\xE9\x07\x17" +
5844
+ "\x02\x02\xE9\xED\x05\x1C\x0F\x02\xEA\xEB\x07\x17\x02\x02\xEB\xED\x05\f" +
5845
+ "\x07\x02\xEC\xE8\x03\x02\x02\x02\xEC\xEA\x03\x02\x02\x02\xED\v\x03\x02" +
5846
+ "\x02\x02\xEE\xEF\x05\"\x12\x02\xEF\r\x03\x02\x02\x02\xF0\xF4\x07\x1C\x02" +
5847
+ "\x02\xF1\xF2\x05\xD0i\x02\xF2\xF3\x079\x02\x02\xF3\xF5\x03\x02\x02\x02" +
5848
+ "\xF4\xF1\x03\x02\x02\x02\xF4\xF5\x03\x02\x02\x02\xF5\xF6\x03\x02\x02\x02" +
5849
+ "\xF6\xF7\x05\x10\t\x02\xF7\x0F\x03\x02\x02\x02\xF8\xFA\x07a\x02\x02\xF9" +
5850
+ "\xFB\x05\x12\n\x02\xFA\xF9\x03\x02\x02\x02\xFB\xFC\x03\x02\x02\x02\xFC" +
5851
+ "\xFA\x03\x02\x02\x02\xFC\xFD\x03\x02\x02\x02\xFD\xFE\x03\x02\x02\x02\xFE" +
5852
+ "\xFF\x07b\x02\x02\xFF\x11\x03\x02\x02\x02\u0100\u0101\x07\x06\x02\x02" +
5853
+ "\u0101\u0105\x05\xD2j\x02\u0102\u0103\x07\x1A\x02\x02\u0103\u0105\x05" +
5854
+ "\x14\v\x02\u0104\u0100\x03\x02\x02\x02\u0104\u0102\x03\x02\x02\x02\u0105" +
5855
+ "\x13\x03\x02\x02\x02\u0106\u010A\x07\x88\x02\x02\u0107\u0109\x05\x16\f" +
5856
+ "\x02\u0108\u0107\x03\x02\x02\x02\u0109\u010C\x03\x02\x02\x02\u010A\u0108" +
5857
+ "\x03\x02\x02\x02\u010A\u010B\x03\x02\x02\x02\u010B\u010D\x03\x02\x02\x02" +
5858
+ "\u010C\u010A\x03\x02\x02\x02\u010D\u010E\x07\x8D\x02\x02\u010E\x15\x03" +
5859
+ "\x02\x02\x02\u010F\u0110\x07\x8C\x02\x02\u0110\u0111\x05\"\x12\x02\u0111" +
5860
+ "\u0112\x07\x89\x02\x02\u0112\x17\x03\x02\x02\x02\u0113\u0114\x078\x02" +
5861
+ "\x02\u0114\u0115\x05\x1A\x0E\x02\u0115\x19\x03\x02\x02\x02\u0116\u0117" +
5862
+ "\x07\x03\x02\x02\u0117\x1B\x03\x02\x02\x02\u0118\u011F\x05\x1E\x10\x02" +
5863
+ "\u0119\u011B\x07e\x02\x02\u011A\u0119\x03\x02\x02\x02\u011A\u011B\x03" +
5864
+ "\x02\x02\x02\u011B\u011C\x03\x02\x02\x02\u011C\u011E\x05\x1E\x10\x02\u011D" +
5865
+ "\u011A\x03\x02\x02\x02\u011E\u0121\x03\x02\x02\x02\u011F\u011D\x03\x02" +
5866
+ "\x02\x02\u011F\u0120\x03\x02\x02\x02\u0120\u0123\x03\x02\x02\x02\u0121" +
5867
+ "\u011F\x03\x02\x02\x02\u0122\u0124\x07e\x02\x02\u0123\u0122\x03\x02\x02" +
5868
+ "\x02\u0123\u0124\x03\x02\x02\x02\u0124\x1D\x03\x02\x02\x02\u0125\u0126" +
5869
+ "\x052\x1A\x02\u0126\u0127\x079\x02\x02\u0127\u0128\x05\"\x12\x02\u0128" +
5870
+ "\x1F\x03\x02\x02\x02\u0129\u012A\x07m\x02\x02\u012A!\x03\x02\x02\x02\u012B" +
5871
+ "\u012C\x058\x1D\x02\u012C\u012D\x07[\x02\x02\u012D\u012E\x05$\x13\x02" +
5872
+ "\u012E\u013E\x03\x02\x02\x02\u012F\u0130\x07[\x02\x02\u0130\u0135\x05" +
5873
+ "2\x1A\x02\u0131\u0133\x05 \x11\x02\u0132\u0131\x03\x02\x02\x02\u0132\u0133" +
5874
+ "\x03\x02\x02\x02\u0133\u0134\x03\x02\x02\x02\u0134\u0136\x05,\x17\x02" +
5875
+ "\u0135\u0132\x03\x02\x02\x02\u0135\u0136\x03\x02\x02\x02\u0136\u013A\x03" +
5876
+ "\x02\x02\x02\u0137\u0139\x05(\x15\x02\u0138\u0137\x03\x02\x02\x02\u0139" +
5877
+ "\u013C\x03\x02\x02\x02\u013A\u0138\x03\x02\x02\x02\u013A\u013B\x03\x02" +
5878
+ "\x02\x02\u013B\u013E\x03\x02\x02\x02\u013C\u013A\x03\x02\x02\x02\u013D" +
5879
+ "\u012B\x03\x02\x02\x02\u013D\u012F\x03\x02\x02\x02\u013E#\x03\x02\x02" +
5880
+ "\x02\u013F\u0143\x05&\x14\x02\u0140\u0142\x05(\x15\x02\u0141\u0140\x03" +
5881
+ "\x02\x02\x02\u0142\u0145\x03\x02\x02\x02\u0143\u0141\x03\x02\x02\x02\u0143" +
5882
+ "\u0144\x03\x02\x02\x02\u0144%\x03\x02\x02\x02\u0145\u0143\x03\x02\x02" +
5883
+ "\x02\u0146\u014F\x05,\x17\x02\u0147\u014C\x050\x19\x02\u0148\u014A\x05" +
5884
+ " \x11\x02\u0149\u0148\x03\x02\x02\x02\u0149\u014A\x03\x02\x02\x02\u014A" +
5885
+ "\u014B\x03\x02\x02\x02\u014B\u014D\x05,\x17\x02\u014C\u0149\x03\x02\x02" +
5886
+ "\x02\u014C\u014D\x03\x02\x02\x02\u014D\u014F\x03\x02\x02\x02\u014E\u0146" +
5887
+ "\x03\x02\x02\x02\u014E\u0147\x03\x02\x02\x02\u014F\'\x03\x02\x02\x02\u0150" +
5888
+ "\u0151\x07[\x02\x02\u0151\u0152\x05,\x17\x02\u0152)\x03\x02\x02\x02\u0153" +
5889
+ "\u0154\x07K\x02\x02\u0154\u0155\x07]\x02\x02\u0155\u0156\x05\xA4S\x02" +
5890
+ "\u0156\u0157\x07^\x02\x02\u0157+\x03\x02\x02\x02\u0158\u0163\x05.\x18" +
5891
+ "\x02\u0159\u015E\x07a\x02\x02\u015A\u015D\x05n8\x02\u015B\u015D\x07s\x02" +
5892
+ "\x02\u015C\u015A\x03\x02\x02\x02\u015C\u015B\x03\x02\x02\x02\u015D\u0160" +
5893
+ "\x03\x02\x02\x02\u015E\u015C\x03\x02\x02\x02\u015E\u015F\x03\x02\x02\x02" +
5894
+ "\u015F\u0161\x03\x02\x02\x02\u0160\u015E\x03\x02\x02\x02\u0161\u0163\x07" +
5895
+ "b\x02\x02\u0162\u0158\x03\x02\x02\x02\u0162\u0159\x03\x02\x02\x02\u0163" +
5896
+ "-\x03\x02\x02\x02\u0164\u0165\x07a\x02\x02\u0165\u0166\x07x\x02\x02\u0166" +
5897
+ "\u0167\x05\xACW\x02\u0167\u0168\x07b\x02\x02\u0168/\x03\x02\x02\x02\u0169" +
5898
+ "\u016A\x05\xA6T\x02\u016A1\x03\x02\x02\x02\u016B\u016C\x05\xA6T\x02\u016C" +
5899
+ "3\x03\x02\x02\x02\u016D\u0174\x056\x1C\x02\u016E\u0170\x07e\x02\x02\u016F" +
5900
+ "\u016E\x03\x02\x02\x02\u016F\u0170\x03\x02\x02\x02\u0170\u0171\x03\x02" +
5901
+ "\x02\x02\u0171\u0173\x056\x1C\x02\u0172\u016F\x03\x02\x02\x02\u0173\u0176" +
5902
+ "\x03\x02\x02\x02\u0174\u0172\x03\x02\x02\x02\u0174\u0175\x03\x02\x02\x02" +
5903
+ "\u0175\u0178\x03\x02\x02\x02\u0176\u0174\x03\x02\x02\x02\u0177\u0179\x07" +
5904
+ "e\x02\x02\u0178\u0177\x03\x02\x02\x02\u0178\u0179\x03\x02\x02\x02\u0179" +
5905
+ "5\x03\x02\x02\x02\u017A\u017B\x05<\x1F\x02\u017B\u017C\x079\x02\x02\u017C" +
5906
+ "\u017D\x058\x1D\x02\u017D7\x03\x02\x02\x02\u017E\u0183\x05:\x1E\x02\u017F" +
5907
+ "\u0181\x05 \x11\x02\u0180\u017F\x03\x02\x02\x02\u0180\u0181\x03\x02\x02" +
5908
+ "\x02\u0181\u0182\x03\x02\x02\x02\u0182\u0184\x05@!\x02\u0183\u0180\x03" +
5909
+ "\x02\x02\x02\u0183\u0184\x03\x02\x02\x02\u01849\x03\x02\x02\x02\u0185" +
5910
+ "\u0192\x05> \x02\u0186\u0192\x05*\x16\x02\u0187\u0188\x074\x02\x02\u0188" +
5911
+ "\u0189\x07]\x02\x02\u0189\u018A\x05\"\x12\x02\u018A\u018B\x07^\x02\x02" +
5912
+ "\u018B\u0192\x03\x02\x02\x02\u018C\u018D\x075\x02\x02\u018D\u018E\x07" +
5913
+ "]\x02\x02\u018E\u018F\x05\xCEh\x02\u018F\u0190\x07^\x02\x02\u0190\u0192" +
5914
+ "\x03\x02\x02\x02\u0191\u0185\x03\x02\x02\x02\u0191\u0186\x03\x02\x02\x02" +
5915
+ "\u0191\u0187\x03\x02\x02\x02\u0191\u018C\x03\x02\x02\x02\u0192;\x03\x02" +
5916
+ "\x02\x02\u0193\u0194\x05\xA6T\x02\u0194=\x03\x02\x02\x02\u0195\u0196\x05" +
5917
+ "\xA6T\x02\u0196?\x03\x02\x02\x02\u0197\u019C\x07a\x02\x02\u0198\u019B" +
5918
+ "\x05B\"\x02\u0199\u019B\x07s\x02\x02\u019A\u0198\x03\x02\x02\x02\u019A" +
5919
+ "\u0199\x03\x02\x02\x02\u019B\u019E\x03\x02\x02\x02\u019C\u019A\x03\x02" +
5920
+ "\x02\x02\u019C\u019D\x03\x02\x02\x02\u019D\u019F\x03\x02\x02\x02\u019E" +
5921
+ "\u019C\x03\x02\x02\x02\u019F\u01A2\x07b\x02\x02\u01A0\u01A2\x05.\x18\x02" +
5922
+ "\u01A1\u0197\x03\x02\x02\x02\u01A1\u01A0\x03\x02\x02\x02\u01A2A\x03\x02" +
5923
+ "\x02\x02\u01A3\u01A4\x07\b\x02\x02\u01A4\u01B4\x05H%\x02\u01A5\u01A6\x07" +
5924
+ "\x12\x02\x02\u01A6\u01B4\x05J&\x02\u01A7\u01B4\x05T+\x02\u01A8\u01B4\x05" +
5925
+ "V,\x02\u01A9\u01B4\x05d3\x02\u01AA\u01AB\x07\x15\x02\x02\u01AB\u01B4\x05" +
5926
+ "\xC0a\x02\u01AC\u01AD\x07\x18\x02\x02\u01AD\u01B4\x05D#\x02\u01AE\u01AF" +
5927
+ "\t\x03\x02\x02\u01AF\u01B4\x05\xB6\\\x02\u01B0\u01B1\x07\x17\x02\x02\u01B1" +
5928
+ "\u01B4\x05h5\x02\u01B2\u01B4\x05\x96L\x02\u01B3\u01A3\x03\x02\x02\x02" +
5929
+ "\u01B3\u01A5\x03\x02\x02\x02\u01B3\u01A7\x03\x02\x02\x02\u01B3\u01A8\x03" +
5930
+ "\x02\x02\x02\u01B3\u01A9\x03\x02\x02\x02\u01B3\u01AA\x03\x02\x02\x02\u01B3" +
5912
5931
  "\u01AC\x03\x02\x02\x02\u01B3\u01AE\x03\x02\x02\x02\u01B3\u01B0\x03\x02" +
5913
5932
  "\x02\x02\u01B3\u01B2\x03\x02\x02\x02\u01B4C\x03\x02\x02\x02\u01B5\u01BC" +
5914
- "\x05F$\x02\u01B6\u01B8\x07f\x02\x02\u01B7\u01B6\x03\x02\x02\x02\u01B7" +
5933
+ "\x05F$\x02\u01B6\u01B8\x07e\x02\x02\u01B7\u01B6\x03\x02\x02\x02\u01B7" +
5915
5934
  "\u01B8\x03\x02\x02\x02\u01B8\u01B9\x03\x02\x02\x02\u01B9\u01BB\x05F$\x02" +
5916
5935
  "\u01BA\u01B7\x03\x02\x02\x02\u01BB\u01BE\x03\x02\x02\x02\u01BC\u01BA\x03" +
5917
5936
  "\x02\x02\x02\u01BC\u01BD\x03\x02\x02\x02\u01BD\u01C0\x03\x02\x02\x02\u01BE" +
5918
- "\u01BC\x03\x02\x02\x02\u01BF\u01C1\x07f\x02\x02\u01C0\u01BF\x03\x02\x02" +
5937
+ "\u01BC\x03\x02\x02\x02\u01BF\u01C1\x07e\x02\x02\u01C0\u01BF\x03\x02\x02" +
5919
5938
  "\x02\u01C0\u01C1\x03\x02\x02\x02\u01C1E\x03\x02\x02\x02\u01C2\u01C3\x05" +
5920
5939
  "\xC0a\x02\u01C3\u01C4\x079\x02\x02\u01C4\u01C5\x05\xC0a\x02\u01C5G\x03" +
5921
- "\x02\x02\x02\u01C6\u01CD\x05t;\x02\u01C7\u01C9\x07f\x02\x02\u01C8\u01C7" +
5940
+ "\x02\x02\x02\u01C6\u01CD\x05t;\x02\u01C7\u01C9\x07e\x02\x02\u01C8\u01C7" +
5922
5941
  "\x03\x02\x02\x02\u01C8\u01C9\x03\x02\x02\x02\u01C9\u01CA\x03\x02\x02\x02" +
5923
5942
  "\u01CA\u01CC\x05t;\x02\u01CB\u01C8\x03\x02\x02\x02\u01CC\u01CF\x03\x02" +
5924
5943
  "\x02\x02\u01CD\u01CB\x03\x02\x02\x02\u01CD\u01CE\x03\x02\x02\x02\u01CE" +
5925
- "\u01D1\x03\x02\x02\x02\u01CF\u01CD\x03\x02\x02\x02\u01D0\u01D2\x07f\x02" +
5944
+ "\u01D1\x03\x02\x02\x02\u01CF\u01CD\x03\x02\x02\x02\u01D0\u01D2\x07e\x02" +
5926
5945
  "\x02\u01D1\u01D0\x03\x02\x02\x02\u01D1\u01D2\x03\x02\x02\x02\u01D2I\x03" +
5927
- "\x02\x02\x02\u01D3\u01DA\x05R*\x02\u01D4\u01D6\x07f\x02\x02\u01D5\u01D4" +
5946
+ "\x02\x02\x02\u01D3\u01DA\x05R*\x02\u01D4\u01D6\x07e\x02\x02\u01D5\u01D4" +
5928
5947
  "\x03\x02\x02\x02\u01D5\u01D6\x03\x02\x02\x02\u01D6\u01D7\x03\x02\x02\x02" +
5929
5948
  "\u01D7\u01D9\x05R*\x02\u01D8\u01D5\x03\x02\x02";
5930
5949
  MalloyParser._serializedATNSegment1 = "\x02\u01D9\u01DC\x03\x02\x02\x02\u01DA\u01D8\x03\x02\x02\x02\u01DA\u01DB" +
5931
5950
  "\x03\x02\x02\x02\u01DB\u01DE\x03\x02\x02\x02\u01DC\u01DA\x03\x02\x02\x02" +
5932
- "\u01DD\u01DF\x07f\x02\x02\u01DE\u01DD\x03\x02\x02\x02\u01DE\u01DF\x03" +
5951
+ "\u01DD\u01DF\x07e\x02\x02\u01DE\u01DD\x03\x02\x02\x02\u01DE\u01DF\x03" +
5933
5952
  "\x02\x02\x02\u01DFK\x03\x02\x02\x02\u01E0\u01E1\x05N(\x02\u01E1\u01E2" +
5934
5953
  "\x079\x02\x02\u01E2\u01E3\x05\xACW\x02\u01E3M\x03\x02\x02\x02\u01E4\u01E5" +
5935
5954
  "\x05\xA6T\x02\u01E5O\x03\x02\x02\x02\u01E6\u01E7\x05\xA6T\x02\u01E7Q\x03" +
5936
5955
  "\x02\x02\x02\u01E8\u01E9\x05L\'\x02\u01E9S\x03\x02\x02\x02\u01EA\u01EB" +
5937
- "\x07\x07\x02\x02\u01EB\u01F2\x05L\'\x02\u01EC\u01EE\x07f\x02\x02\u01ED" +
5956
+ "\x07\x07\x02\x02\u01EB\u01F2\x05L\'\x02\u01EC\u01EE\x07e\x02\x02\u01ED" +
5938
5957
  "\u01EC\x03\x02\x02\x02\u01ED\u01EE\x03\x02\x02\x02\u01EE\u01EF\x03\x02" +
5939
5958
  "\x02\x02\u01EF\u01F1\x05L\'\x02\u01F0\u01ED\x03\x02\x02\x02\u01F1\u01F4" +
5940
5959
  "\x03\x02\x02\x02\u01F2\u01F0\x03\x02\x02\x02\u01F2\u01F3\x03\x02\x02\x02" +
5941
5960
  "\u01F3\u01F6\x03\x02\x02\x02\u01F4\u01F2\x03\x02\x02\x02\u01F5\u01F7\x07" +
5942
- "f\x02\x02\u01F6\u01F5\x03\x02\x02\x02\u01F6\u01F7\x03\x02\x02\x02\u01F7" +
5961
+ "e\x02\x02\u01F6\u01F5\x03\x02\x02\x02\u01F6\u01F7\x03\x02\x02\x02\u01F7" +
5943
5962
  "U\x03\x02\x02\x02\u01F8\u01F9\x07\x0F\x02\x02\u01F9\u01FF\x05X-\x02\u01FA" +
5944
5963
  "\u01FB\x07\x10\x02\x02\u01FB\u01FF\x05X-\x02\u01FC\u01FD\x07\x0E\x02\x02" +
5945
5964
  "\u01FD\u01FF\x05X-\x02\u01FE\u01F8\x03\x02\x02\x02\u01FE\u01FA\x03\x02" +
5946
5965
  "\x02\x02\u01FE\u01FC\x03\x02\x02\x02\u01FFW\x03\x02\x02\x02\u0200\u0207" +
5947
- "\x05Z.\x02\u0201\u0203\x07f\x02\x02\u0202\u0201\x03\x02\x02\x02\u0202" +
5966
+ "\x05Z.\x02\u0201\u0203\x07e\x02\x02\u0202\u0201\x03\x02\x02\x02\u0202" +
5948
5967
  "\u0203\x03\x02\x02\x02\u0203\u0204\x03\x02\x02\x02\u0204\u0206\x05Z.\x02" +
5949
5968
  "\u0205\u0202\x03\x02\x02\x02\u0206\u0209\x03\x02\x02\x02\u0207\u0205\x03" +
5950
5969
  "\x02\x02\x02\u0207\u0208\x03\x02\x02\x02\u0208\u020B\x03\x02\x02\x02\u0209" +
5951
- "\u0207\x03\x02\x02\x02\u020A\u020C\x07f\x02\x02\u020B\u020A\x03\x02\x02" +
5970
+ "\u0207\x03\x02\x02\x02\u020A\u020C\x07e\x02\x02\u020B\u020A\x03\x02\x02" +
5952
5971
  "\x02\u020B\u020C\x03\x02\x02\x02\u020CY\x03\x02\x02\x02\u020D\u0210\x05" +
5953
5972
  "P)\x02\u020E\u020F\x079\x02\x02\u020F\u0211\x058\x1D\x02\u0210\u020E\x03" +
5954
5973
  "\x02\x02\x02\u0210\u0211\x03\x02\x02\x02\u0211\u0212\x03\x02\x02\x02\u0212" +
5955
- "\u0213\x07U\x02\x02\u0213\u0214\x05\xACW\x02\u0214\u021F\x03\x02\x02\x02" +
5974
+ "\u0213\x07T\x02\x02\u0213\u0214\x05\xACW\x02\u0214\u021F\x03\x02\x02\x02" +
5956
5975
  "\u0215\u0218\x05P)\x02\u0216\u0217\x079\x02\x02\u0217\u0219\x058\x1D\x02" +
5957
5976
  "\u0218\u0216\x03\x02\x02\x02\u0218\u0219\x03\x02\x02\x02\u0219\u021C\x03" +
5958
5977
  "\x02\x02\x02\u021A\u021B\x07D\x02\x02\u021B\u021D\x05\\/\x02\u021C\u021A" +
@@ -5960,21 +5979,21 @@ MalloyParser._serializedATNSegment1 = "\x02\u01D9\u01DC\x03\x02\x02\x02\u01DA\u0
5960
5979
  "\u021E\u020D\x03\x02\x02\x02\u021E\u0215\x03\x02\x02\x02\u021F[\x03\x02" +
5961
5980
  "\x02\x02\u0220\u0221\x05\xACW\x02\u0221]\x03\x02\x02\x02\u0222\u0225\x05" +
5962
5981
  "d3\x02\u0223\u0225\x05f4\x02\u0224\u0222\x03\x02\x02\x02\u0224\u0223\x03" +
5963
- "\x02\x02\x02\u0225_\x03\x02\x02\x02\u0226\u0227\x07G\x02\x02\u0227\u022A" +
5982
+ "\x02\x02\x02\u0225_\x03\x02\x02\x02\u0226\u0227\x07x\x02\x02\u0227\u022A" +
5964
5983
  "\x05\xACW\x02\u0228\u022A\x05d3\x02\u0229\u0226\x03\x02\x02\x02\u0229" +
5965
5984
  "\u0228\x03\x02\x02\x02\u022Aa\x03\x02\x02\x02\u022B\u0230\x05\xACW\x02" +
5966
- "\u022C\u022D\x07f\x02\x02\u022D\u022F\x05\xACW\x02\u022E\u022C\x03\x02" +
5985
+ "\u022C\u022D\x07e\x02\x02\u022D\u022F\x05\xACW\x02\u022E\u022C\x03\x02" +
5967
5986
  "\x02\x02\u022F\u0232\x03\x02\x02\x02\u0230\u022E\x03\x02\x02\x02\u0230" +
5968
5987
  "\u0231\x03\x02\x02\x02\u0231\u0234\x03\x02\x02\x02\u0232\u0230\x03\x02" +
5969
- "\x02\x02\u0233\u0235\x07f\x02\x02\u0234\u0233\x03\x02\x02\x02\u0234\u0235" +
5988
+ "\x02\x02\u0233\u0235\x07e\x02\x02\u0234\u0233\x03\x02\x02\x02\u0234\u0235" +
5970
5989
  "\x03\x02\x02\x02\u0235c\x03\x02\x02\x02\u0236\u0237\x07\x1E\x02\x02\u0237" +
5971
5990
  "\u0238\x05b2\x02\u0238e\x03\x02\x02\x02\u0239\u023A\x07\f\x02\x02\u023A" +
5972
5991
  "\u023B\x05b2\x02\u023Bg\x03\x02\x02\x02\u023C\u0243\x05l7\x02\u023D\u023F" +
5973
- "\x07f\x02\x02\u023E\u023D\x03\x02\x02\x02\u023E\u023F\x03\x02\x02\x02" +
5992
+ "\x07e\x02\x02\u023E\u023D\x03\x02\x02\x02\u023E\u023F\x03\x02\x02\x02" +
5974
5993
  "\u023F\u0240\x03\x02\x02\x02\u0240\u0242\x05l7\x02\u0241\u023E\x03\x02" +
5975
5994
  "\x02\x02\u0242\u0245\x03\x02\x02\x02\u0243\u0241\x03\x02\x02\x02\u0243" +
5976
5995
  "\u0244\x03\x02\x02\x02\u0244\u0247\x03\x02\x02\x02\u0245\u0243\x03\x02" +
5977
- "\x02\x02\u0246\u0248\x07f\x02\x02\u0247\u0246\x03\x02\x02\x02\u0247\u0248" +
5996
+ "\x02\x02\u0246\u0248\x07e\x02\x02\u0247\u0246\x03\x02\x02\x02\u0247\u0248" +
5978
5997
  "\x03\x02\x02\x02\u0248i\x03\x02\x02\x02\u0249\u024A\x05\xA6T\x02\u024A" +
5979
5998
  "k\x03\x02\x02\x02\u024B\u024C\x05j6\x02\u024C\u024D\x079\x02\x02\u024D" +
5980
5999
  "\u024E\x05$\x13\x02\u024Em\x03\x02\x02\x02\u024F\u025E\x05p9\x02\u0250" +
@@ -5989,21 +6008,21 @@ MalloyParser._serializedATNSegment1 = "\x02\u01D9\u01DC\x03\x02\x02\x02\u01DA\u0
5989
6008
  "\x02\x02\x02\u025D\u0259\x03\x02\x02\x02\u025D\u025A\x03\x02\x02\x02\u025D" +
5990
6009
  "\u025B\x03\x02\x02\x02\u025D\u025C\x03\x02\x02\x02\u025Eo\x03\x02\x02" +
5991
6010
  "\x02\u025F\u0260\x07\v\x02\x02\u0260\u0261\x05r:\x02\u0261q\x03\x02\x02" +
5992
- "\x02\u0262\u0269\x05v<\x02\u0263\u0265\x07f\x02\x02\u0264\u0263\x03\x02" +
6011
+ "\x02\u0262\u0269\x05v<\x02\u0263\u0265\x07e\x02\x02\u0264\u0263\x03\x02" +
5993
6012
  "\x02\x02\u0264\u0265\x03\x02\x02\x02\u0265\u0266\x03\x02\x02\x02\u0266" +
5994
6013
  "\u0268\x05v<\x02\u0267\u0264\x03\x02\x02\x02\u0268\u026B\x03\x02\x02\x02" +
5995
6014
  "\u0269\u0267\x03\x02\x02\x02\u0269\u026A\x03\x02\x02\x02\u026A\u026D\x03" +
5996
- "\x02\x02\x02\u026B\u0269\x03\x02\x02\x02\u026C\u026E\x07f\x02\x02\u026D" +
6015
+ "\x02\x02\x02\u026B\u0269\x03\x02\x02\x02\u026C\u026E\x07e\x02\x02\u026D" +
5997
6016
  "\u026C\x03\x02\x02\x02\u026D\u026E\x03\x02\x02\x02\u026Es\x03\x02\x02" +
5998
6017
  "\x02\u026F\u0270\x05L\'\x02\u0270u\x03\x02\x02\x02\u0271\u0274\x05\xBC" +
5999
6018
  "_\x02\u0272\u0274\x05t;\x02\u0273\u0271\x03\x02\x02\x02\u0273\u0272\x03" +
6000
6019
  "\x02\x02\x02\u0274w\x03\x02\x02\x02\u0275\u0276\x07\x13\x02\x02\u0276" +
6001
6020
  "\u0277\x05z>\x02\u0277y\x03\x02\x02\x02\u0278\u027F\x05|?\x02\u0279\u027B" +
6002
- "\x07f\x02\x02\u027A\u0279\x03\x02\x02\x02\u027A\u027B\x03\x02\x02\x02" +
6021
+ "\x07e\x02\x02\u027A\u0279\x03\x02\x02\x02\u027A\u027B\x03\x02\x02\x02" +
6003
6022
  "\u027B\u027C\x03\x02\x02\x02\u027C\u027E\x05|?\x02\u027D\u027A\x03\x02" +
6004
6023
  "\x02\x02\u027E\u0281\x03\x02\x02\x02\u027F\u027D\x03\x02\x02\x02\u027F" +
6005
6024
  "\u0280\x03\x02\x02\x02\u0280\u0283\x03\x02\x02\x02\u0281\u027F\x03\x02" +
6006
- "\x02\x02\u0282\u0284\x07f\x02\x02\u0283\u0282\x03\x02\x02\x02\u0283\u0284" +
6025
+ "\x02\x02\u0282\u0284\x07e\x02\x02\u0283\u0282\x03\x02\x02\x02\u0283\u0284" +
6007
6026
  "\x03\x02\x02\x02\u0284{\x03\x02\x02\x02\u0285\u028A\x052\x1A\x02\u0286" +
6008
6027
  "\u0288\x05 \x11\x02\u0287\u0286\x03\x02\x02\x02\u0287\u0288\x03\x02\x02" +
6009
6028
  "\x02\u0288\u0289\x03\x02\x02\x02\u0289\u028B\x05,\x17\x02\u028A\u0287" +
@@ -6014,27 +6033,27 @@ MalloyParser._serializedATNSegment1 = "\x02\u01D9\u01DC\x03\x02\x02\x02\u01DA\u0
6014
6033
  "\u0294\x05r:\x02\u0294\x7F\x03\x02\x02\x02\u0295\u0296\x07\x16\x02\x02" +
6015
6034
  "\u0296\u0297\x05\xB8]\x02\u0297\x81\x03\x02\x02\x02\u0298\u0299\x07\x14" +
6016
6035
  "\x02\x02\u0299\u029A\x05\x84C\x02\u029A\x83\x03\x02\x02\x02\u029B\u02A2" +
6017
- "\x05\x86D\x02\u029C\u029E\x07f\x02\x02\u029D\u029C\x03\x02\x02\x02\u029D" +
6036
+ "\x05\x86D\x02\u029C\u029E\x07e\x02\x02\u029D\u029C\x03\x02\x02\x02\u029D" +
6018
6037
  "\u029E\x03\x02\x02\x02\u029E\u029F\x03\x02\x02\x02\u029F\u02A1\x05\x86" +
6019
6038
  "D\x02\u02A0\u029D\x03\x02\x02\x02\u02A1\u02A4\x03\x02\x02\x02\u02A2\u02A0" +
6020
6039
  "\x03\x02\x02\x02\u02A2\u02A3\x03\x02\x02\x02\u02A3\u02A6\x03\x02\x02\x02" +
6021
- "\u02A4\u02A2\x03\x02\x02\x02\u02A5\u02A7\x07f\x02\x02\u02A6\u02A5\x03" +
6040
+ "\u02A4\u02A2\x03\x02\x02\x02\u02A5\u02A7\x07e\x02\x02\u02A6\u02A5\x03" +
6022
6041
  "\x02\x02\x02\u02A6\u02A7\x03\x02\x02\x02\u02A7\x85\x03\x02\x02\x02\u02A8" +
6023
- "\u02AB\x07\x81\x02\x02\u02A9\u02AB\x05\xC0a\x02\u02AA\u02A8\x03\x02\x02" +
6042
+ "\u02AB\x07\x82\x02\x02\u02A9\u02AB\x05\xC0a\x02\u02AA\u02A8\x03\x02\x02" +
6024
6043
  "\x02\u02AA\u02A9\x03\x02\x02\x02\u02AB\u02AD\x03\x02\x02\x02\u02AC\u02AE" +
6025
6044
  "\t\x04\x02\x02\u02AD\u02AC\x03\x02\x02\x02\u02AD\u02AE\x03\x02\x02\x02" +
6026
6045
  "\u02AE\x87\x03\x02\x02\x02\u02AF\u02B0\x07\x11\x02\x02\u02B0\u02B1\x07" +
6027
- "\x81\x02\x02\u02B1\x89\x03\x02\x02\x02\u02B2\u02B3\x07&\x02\x02\u02B3" +
6046
+ "\x82\x02\x02\u02B1\x89\x03\x02\x02\x02\u02B2\u02B3\x07&\x02\x02\u02B3" +
6028
6047
  "\u02B7\x05\xC0a\x02\u02B4\u02B5\x07&\x02\x02\u02B5\u02B7\x05\xACW\x02" +
6029
6048
  "\u02B6\u02B2\x03\x02\x02\x02\u02B6\u02B4\x03\x02\x02\x02\u02B7\x8B\x03" +
6030
- "\x02\x02\x02\u02B8\u02B9\x07\x1D\x02\x02\u02B9\u02BB\x07\x81\x02\x02\u02BA" +
6049
+ "\x02\x02\x02\u02B8\u02B9\x07\x1D\x02\x02\u02B9\u02BB\x07\x82\x02\x02\u02BA" +
6031
6050
  "\u02BC\x05\x8AF\x02\u02BB\u02BA\x03\x02\x02\x02\u02BB\u02BC\x03\x02\x02" +
6032
6051
  "\x02\u02BC\x8D\x03\x02\x02\x02\u02BD\u02C0\x05\xBC_\x02\u02BE\u02BF\x07" +
6033
- "g\x02\x02\u02BF\u02C1\x07p\x02\x02\u02C0\u02BE\x03\x02\x02\x02\u02C0\u02C1" +
6034
- "\x03\x02\x02\x02\u02C1\u02C5\x03\x02\x02\x02\u02C2\u02C5\x07p\x02\x02" +
6035
- "\u02C3\u02C5\x07q\x02\x02\u02C4\u02BD\x03\x02\x02\x02\u02C4\u02C2\x03" +
6052
+ "f\x02\x02\u02BF\u02C1\x07o\x02\x02\u02C0\u02BE\x03\x02\x02\x02\u02C0\u02C1" +
6053
+ "\x03\x02\x02\x02\u02C1\u02C5\x03\x02\x02\x02\u02C2\u02C5\x07o\x02\x02" +
6054
+ "\u02C3\u02C5\x07p\x02\x02\u02C4\u02BD\x03\x02\x02\x02\u02C4\u02C2\x03" +
6036
6055
  "\x02\x02\x02\u02C4\u02C3\x03\x02\x02\x02\u02C5\x8F\x03\x02\x02\x02\u02C6" +
6037
- "\u02CD\x05\x8EH\x02\u02C7\u02C9\x07f\x02\x02\u02C8\u02C7\x03\x02\x02\x02" +
6056
+ "\u02CD\x05\x8EH\x02\u02C7\u02C9\x07e\x02\x02\u02C8\u02C7\x03\x02\x02\x02" +
6038
6057
  "\u02C8\u02C9\x03\x02\x02\x02\u02C9\u02CA\x03\x02\x02\x02\u02CA\u02CC\x05" +
6039
6058
  "\x8EH\x02\u02CB\u02C8\x03\x02\x02\x02\u02CC\u02CF\x03\x02\x02\x02\u02CD" +
6040
6059
  "\u02CB\x03\x02\x02\x02\u02CD\u02CE\x03\x02\x02\x02\u02CE\x91\x03\x02\x02" +
@@ -6042,134 +6061,138 @@ MalloyParser._serializedATNSegment1 = "\x02\u01D9\u01DC\x03\x02\x02\x02\u01DA\u0
6042
6061
  "\x05\x90I\x02\u02D2\u02D3\x07&\x02\x02\u02D3\u02D5\x05\xC0a\x02\u02D4" +
6043
6062
  "\u02D2\x03\x02\x02\x02\u02D4\u02D5\x03\x02\x02\x02\u02D5\x93\x03\x02\x02" +
6044
6063
  "\x02\u02D6\u02D7\x07\x19\x02\x02\u02D7\u02D8\x05\x98M\x02\u02D8\x95\x03" +
6045
- "\x02\x02\x02\u02D9\u02DA\x07\x1F\x02\x02\u02DA\u02DB\x07Z\x02\x02\u02DB" +
6064
+ "\x02\x02\x02\u02D9\u02DA\x07\x1F\x02\x02\u02DA\u02DB\x07Y\x02\x02\u02DB" +
6046
6065
  "\x97\x03\x02\x02\x02\u02DC\u02DD\t\x05\x02\x02\u02DD\x99\x03\x02\x02\x02" +
6047
6066
  "\u02DE\u02DF\t\x06\x02\x02\u02DF\x9B\x03\x02\x02\x02\u02E0\u02E1\t\x07" +
6048
6067
  "\x02\x02\u02E1\x9D\x03\x02\x02\x02\u02E2\u02E3\t\b\x02\x02\u02E3\x9F\x03" +
6049
- "\x02\x02\x02\u02E4\u02EC\x07Z\x02\x02\u02E5\u02EC\t\t\x02\x02\u02E6\u02EC" +
6068
+ "\x02\x02\x02\u02E4\u02EC\x07Y\x02\x02\u02E5\u02EC\t\t\x02\x02\u02E6\u02EC" +
6050
6069
  "\x05\xA2R\x02\u02E7\u02EC\x07B\x02\x02\u02E8\u02EC\t\n\x02\x02\u02E9\u02EC" +
6051
- "\x07Y\x02\x02\u02EA\u02EC\x07A\x02\x02\u02EB\u02E4\x03\x02\x02\x02\u02EB" +
6070
+ "\x07X\x02\x02\u02EA\u02EC\x07A\x02\x02\u02EB\u02E4\x03\x02\x02\x02\u02EB" +
6052
6071
  "\u02E5\x03\x02\x02\x02\u02EB\u02E6\x03\x02\x02\x02\u02EB\u02E7\x03\x02" +
6053
6072
  "\x02\x02\u02EB\u02E8\x03\x02\x02\x02\u02EB\u02E9\x03\x02\x02\x02\u02EB" +
6054
- "\u02EA\x03\x02\x02\x02\u02EC\xA1\x03\x02\x02\x02\u02ED\u02F5\x07x\x02" +
6055
- "\x02\u02EE\u02F5\x07y\x02\x02\u02EF\u02F5\x07z\x02\x02\u02F0\u02F5\x07" +
6056
- "}\x02\x02\u02F1\u02F5\x07|\x02\x02\u02F2\u02F5\x07{\x02\x02\u02F3\u02F5" +
6057
- "\x07~\x02\x02\u02F4\u02ED\x03\x02\x02\x02\u02F4\u02EE\x03\x02\x02\x02" +
6073
+ "\u02EA\x03\x02\x02\x02\u02EC\xA1\x03\x02\x02\x02\u02ED\u02F5\x07y\x02" +
6074
+ "\x02\u02EE\u02F5\x07z\x02\x02\u02EF\u02F5\x07{\x02\x02\u02F0\u02F5\x07" +
6075
+ "~\x02\x02\u02F1\u02F5\x07}\x02\x02\u02F2\u02F5\x07|\x02\x02\u02F3\u02F5" +
6076
+ "\x07\x7F\x02\x02\u02F4\u02ED\x03\x02\x02\x02\u02F4\u02EE\x03\x02\x02\x02" +
6058
6077
  "\u02F4\u02EF\x03\x02\x02\x02\u02F4\u02F0\x03\x02\x02\x02\u02F4\u02F1\x03" +
6059
6078
  "\x02\x02\x02\u02F4\u02F2\x03\x02\x02\x02\u02F4\u02F3\x03\x02\x02\x02\u02F5" +
6060
- "\xA3\x03\x02\x02\x02\u02F6\u02F7\x07Z\x02\x02\u02F7\xA5\x03\x02\x02\x02" +
6079
+ "\xA3\x03\x02\x02\x02\u02F6\u02F7\x07Y\x02\x02\u02F7\xA5\x03\x02\x02\x02" +
6061
6080
  "\u02F8\u02F9\t\v\x02\x02\u02F9\xA7\x03\x02\x02\x02\u02FA\u02FB\t\f\x02" +
6062
6081
  "\x02\u02FB\xA9\x03\x02\x02\x02\u02FC\u02FD\t\r\x02\x02\u02FD\xAB\x03\x02" +
6063
6082
  "\x02\x02\u02FE\u02FF\bW\x01\x02\u02FF\u033B\x05\xBC_\x02\u0300\u033B\x05" +
6064
- "\xA0Q\x02\u0301\u0302\x07o\x02\x02\u0302\u033B\x05\xACW\x16\u0303\u0304" +
6065
- "\x07@\x02\x02\u0304\u033B\x05\xACW\v\u0305\u0306\x07(\x02\x02\u0306\u0307" +
6066
- "\x07^\x02\x02\u0307\u0308\x05\xACW\x02\u0308\u0309\x07\"\x02\x02\u0309" +
6067
- "\u030A\x05\x9CO\x02\u030A\u030B\x07_\x02\x02\u030B\u033B\x03\x02\x02\x02" +
6068
- "\u030C\u030D\x07*\x02\x02\u030D\u030E\x07^\x02\x02\u030E\u030F\x07.\x02" +
6069
- "\x02\u030F\u0310\x05\xACW\x02\u0310\u0311\x07_\x02\x02\u0311\u033B\x03" +
6070
- "\x02\x02\x02\u0312\u0313\x05\xBC_\x02\u0313\u0314\x07g\x02\x02\u0314\u0316" +
6083
+ "\xA0Q\x02\u0301\u0302\x07n\x02\x02\u0302\u033B\x05\xACW\x16\u0303\u0304" +
6084
+ "\x07@\x02\x02\u0304\u033B\x05\xACW\r\u0305\u0306\x07(\x02\x02\u0306\u0307" +
6085
+ "\x07]\x02\x02\u0307\u0308\x05\xACW\x02\u0308\u0309\x07\"\x02\x02\u0309" +
6086
+ "\u030A\x05\x9CO\x02\u030A\u030B\x07^\x02\x02\u030B\u033B\x03\x02\x02\x02" +
6087
+ "\u030C\u030D\x07*\x02\x02\u030D\u030E\x07]\x02\x02\u030E\u030F\x07.\x02" +
6088
+ "\x02\u030F\u0310\x05\xACW\x02\u0310\u0311\x07^\x02\x02\u0311\u033B\x03" +
6089
+ "\x02\x02\x02\u0312\u0313\x05\xBC_\x02\u0313\u0314\x07f\x02\x02\u0314\u0316" +
6071
6090
  "\x03\x02\x02\x02\u0315\u0312\x03\x02\x02\x02\u0315\u0316\x03\x02\x02\x02" +
6072
6091
  "\u0316\u0317\x03\x02\x02\x02\u0317\u0318\x05\x9AN\x02\u0318\u031B\x07" +
6073
- "^\x02\x02\u0319\u031C\x05\xACW\x02\u031A\u031C\x07p\x02\x02\u031B\u0319" +
6092
+ "]\x02\x02\u0319\u031C\x05\xACW\x02\u031A\u031C\x07o\x02\x02\u031B\u0319" +
6074
6093
  "\x03\x02\x02\x02\u031B\u031A\x03\x02\x02\x02\u031B\u031C\x03\x02\x02\x02" +
6075
- "\u031C\u031D\x03\x02\x02\x02\u031D\u031E\x07_\x02\x02\u031E\u033B\x03" +
6076
- "\x02\x02\x02\u031F\u0320\x07^\x02\x02\u0320\u0321\x05\xAEX\x02\u0321\u0322" +
6077
- "\x07_\x02\x02\u0322\u033B\x03\x02\x02\x02\u0323\u0326\x05\xA6T\x02\u0324" +
6094
+ "\u031C\u031D\x03\x02\x02\x02\u031D\u031E\x07^\x02\x02\u031E\u033B\x03" +
6095
+ "\x02\x02\x02\u031F\u0320\x07]\x02\x02\u0320\u0321\x05\xAEX\x02\u0321\u0322" +
6096
+ "\x07^\x02\x02\u0322\u033B\x03\x02\x02\x02\u0323\u0326\x05\xA6T\x02\u0324" +
6078
6097
  "\u0326\x05\xA8U\x02\u0325\u0323\x03\x02\x02\x02\u0325\u0324\x03\x02\x02" +
6079
- "\x02\u0326\u0327\x03\x02\x02\x02\u0327\u0329\x07^\x02\x02\u0328\u032A" +
6098
+ "\x02\u0326\u0327\x03\x02\x02\x02\u0327\u0329\x07]\x02\x02\u0328\u032A" +
6080
6099
  "\x05\xB4[\x02\u0329\u0328\x03\x02\x02\x02\u0329\u032A\x03\x02\x02\x02" +
6081
- "\u032A\u032B\x03\x02\x02\x02\u032B\u032C\x07_\x02\x02\u032C\u033B\x03" +
6100
+ "\u032A\u032B\x03\x02\x02\x02\u032B\u032C\x07^\x02\x02\u032C\u033B\x03" +
6082
6101
  "\x02\x02\x02\u032D\u033B\x05\xB0Y\x02\u032E\u032F\x05\xAAV\x02\u032F\u0330" +
6083
- "\x07^\x02\x02\u0330\u0335\x05\xACW\x02\u0331\u0332\x07f\x02\x02\u0332" +
6102
+ "\x07]\x02\x02\u0330\u0335\x05\xACW\x02\u0331\u0332\x07e\x02\x02\u0332" +
6084
6103
  "\u0334\x05\xC0a\x02\u0333\u0331\x03\x02\x02\x02\u0334\u0337\x03\x02\x02" +
6085
6104
  "\x02\u0335\u0333\x03\x02\x02\x02\u0335\u0336\x03\x02\x02\x02\u0336\u0338" +
6086
- "\x03\x02\x02\x02\u0337\u0335\x03\x02\x02\x02\u0338\u0339\x07_\x02\x02" +
6105
+ "\x03\x02\x02\x02\u0337\u0335\x03\x02\x02\x02\u0338\u0339\x07^\x02\x02" +
6087
6106
  "\u0339\u033B\x03\x02\x02\x02\u033A\u02FE\x03\x02\x02\x02\u033A\u0300\x03" +
6088
6107
  "\x02\x02\x02\u033A\u0301\x03\x02\x02\x02\u033A\u0303\x03\x02\x02\x02\u033A" +
6089
6108
  "\u0305\x03\x02\x02\x02\u033A\u030C\x03\x02\x02\x02\u033A\u0315\x03\x02" +
6090
6109
  "\x02\x02\u033A\u031F\x03\x02\x02\x02\u033A\u0325\x03\x02\x02\x02\u033A" +
6091
- "\u032D\x03\x02\x02\x02\u033A\u032E\x03\x02\x02\x02\u033B\u0366\x03\x02" +
6092
- "\x02\x02\u033C\u033D\f\x12\x02\x02\u033D\u033E\t\x0E\x02\x02\u033E\u0365" +
6093
- "\x05\xACW\x13\u033F\u0340\f\x11\x02\x02\u0340\u0341\t\x0F\x02\x02\u0341" +
6094
- "\u0365\x05\xACW\x12\u0342\u0343\f\x10\x02\x02\u0343\u0344\x07P\x02\x02" +
6095
- "\u0344\u0365\x05\xACW\x11\u0345\u0346\f\r\x02\x02\u0346\u0347\x05\x9E" +
6096
- "P\x02\u0347\u0348\x05\xACW\x0E\u0348\u0365\x03\x02\x02\x02\u0349\u034A" +
6097
- "\f\n\x02\x02\u034A\u034B\t\x10\x02\x02\u034B\u0365\x05\xACW\v\u034C\u034D" +
6098
- "\f\x18\x02\x02\u034D\u034E\x07b\x02\x02\u034E\u034F\x05`1\x02\u034F\u0350" +
6099
- "\x07c\x02\x02\u0350\u0365\x03\x02\x02\x02\u0351\u0352\f\x15\x02\x02\u0352" +
6100
- "\u0365\x05\xA8U\x02\u0353\u0354\f\x14\x02\x02\u0354\u0355\x07g\x02\x02" +
6101
- "\u0355\u0365\x05\xA8U\x02\u0356\u0357\f\x13\x02\x02\u0357\u0358\x07d\x02" +
6102
- "\x02\u0358\u0365\x05\x9CO\x02\u0359\u035A\f\x0F\x02\x02\u035A\u035B\x07" +
6103
- "3\x02\x02\u035B\u035C\x05\xACW\x02\u035C\u035D\x05\xA8U\x02\u035D\u0365" +
6104
- "\x03\x02\x02\x02\u035E\u035F\f\x0E\x02\x02\u035F\u0360\t\x11\x02\x02\u0360" +
6105
- "\u0365\x05\xAEX\x02\u0361\u0362\f\f\x02\x02\u0362\u0363\t\x12\x02\x02" +
6106
- "\u0363\u0365\x05\xAEX\x02\u0364\u033C\x03\x02\x02\x02\u0364\u033F\x03" +
6107
- "\x02\x02\x02\u0364\u0342\x03\x02\x02\x02\u0364\u0345\x03\x02\x02\x02\u0364" +
6108
- "\u0349\x03\x02\x02\x02\u0364\u034C\x03\x02\x02\x02\u0364\u0351\x03\x02" +
6109
- "\x02\x02\u0364\u0353\x03\x02\x02\x02\u0364\u0356\x03\x02\x02\x02\u0364" +
6110
- "\u0359\x03\x02\x02\x02\u0364\u035E\x03\x02\x02\x02\u0364\u0361\x03\x02" +
6111
- "\x02\x02\u0365\u0368\x03\x02\x02\x02\u0366\u0364\x03\x02\x02\x02\u0366" +
6112
- "\u0367\x03\x02\x02\x02\u0367\xAD\x03\x02\x02\x02\u0368\u0366\x03\x02\x02" +
6113
- "\x02\u0369\u036B\x05\x9EP\x02\u036A\u0369\x03\x02\x02\x02\u036A\u036B" +
6114
- "\x03\x02\x02\x02\u036B\u036C\x03\x02\x02\x02\u036C\u036D\x05\xACW\x02" +
6115
- "\u036D\xAF\x03\x02\x02\x02\u036E\u0370\x05\xB2Z\x02\u036F\u036E\x03\x02" +
6116
- "\x02\x02\u0370\u0371\x03\x02\x02\x02\u0371\u036F\x03\x02\x02\x02\u0371" +
6117
- "\u0372\x03\x02\x02\x02\u0372\u0375\x03\x02\x02\x02\u0373\u0374\x07/\x02" +
6118
- "\x02\u0374\u0376\x05\xACW\x02\u0375\u0373\x03\x02\x02\x02\u0375\u0376" +
6119
- "\x03\x02\x02\x02\u0376\xB1\x03\x02\x02\x02\u0377\u0379\x07F\x02\x02\u0378" +
6120
- "\u037A\x05\xACW\x02\u0379\u0378\x03\x02\x02\x02\u0379\u037A\x03\x02\x02" +
6121
- "\x02\u037A\u037B\x03\x02\x02\x02\u037B\u037C\x07T\x02\x02\u037C\u037D" +
6122
- "\x05\xAEX\x02\u037D\xB3\x03\x02\x02\x02\u037E\u0383\x05\xACW\x02\u037F" +
6123
- "\u0380\x07f\x02\x02\u0380\u0382\x05\xACW\x02\u0381\u037F\x03\x02\x02\x02" +
6124
- "\u0382\u0385\x03\x02\x02\x02\u0383\u0381\x03\x02\x02\x02\u0383\u0384\x03" +
6125
- "\x02\x02\x02\u0384\u0387\x03\x02\x02\x02\u0385\u0383\x03\x02\x02\x02\u0386" +
6126
- "\u0388\x07f\x02\x02\u0387\u0386\x03\x02\x02\x02\u0387\u0388\x03\x02\x02" +
6127
- "\x02\u0388\xB5\x03\x02\x02\x02\u0389\u0390\x05\xC0a\x02\u038A\u038C\x07" +
6128
- "f\x02\x02\u038B\u038A\x03\x02\x02\x02\u038B\u038C\x03\x02\x02\x02\u038C" +
6129
- "\u038D\x03\x02\x02\x02\u038D\u038F\x05\xC0a\x02\u038E\u038B\x03\x02\x02" +
6130
- "\x02\u038F\u0392\x03\x02\x02\x02\u0390\u038E\x03\x02\x02\x02\u0390\u0391" +
6131
- "\x03\x02\x02\x02\u0391\xB7\x03\x02\x02\x02\u0392\u0390\x03\x02\x02\x02" +
6132
- "\u0393\u039A\x05\xBA^\x02\u0394\u0396\x07f\x02\x02\u0395\u0394\x03\x02" +
6133
- "\x02\x02\u0395\u0396\x03\x02\x02\x02\u0396\u0397\x03\x02\x02\x02\u0397" +
6134
- "\u0399\x05\xBA^\x02\u0398\u0395\x03\x02\x02\x02\u0399\u039C\x03\x02\x02" +
6135
- "\x02\u039A\u0398\x03\x02\x02\x02\u039A\u039B\x03\x02\x02\x02\u039B\u039E" +
6136
- "\x03\x02\x02\x02\u039C\u039A\x03\x02\x02\x02\u039D\u039F\x07f\x02\x02" +
6137
- "\u039E\u039D\x03\x02\x02\x02\u039E\u039F\x03\x02\x02\x02\u039F\xB9\x03" +
6138
- "\x02\x02\x02\u03A0\u03A9\x05\xBC_\x02\u03A1\u03A2\x05\xBC_\x02\u03A2\u03A3" +
6139
- "\x07g\x02\x02\u03A3\u03A5\x03\x02\x02\x02\u03A4\u03A1\x03\x02\x02\x02" +
6140
- "\u03A4\u03A5\x03\x02\x02\x02\u03A5\u03A6\x03\x02\x02\x02\u03A6\u03A9\t" +
6141
- "\x13\x02\x02\u03A7\u03A9\x05L\'\x02\u03A8\u03A0\x03\x02\x02\x02\u03A8" +
6142
- "\u03A4\x03\x02\x02\x02\u03A8\u03A7\x03\x02\x02\x02\u03A9\xBB\x03\x02\x02" +
6143
- "\x02\u03AA\u03AF\x05\xC0a\x02\u03AB\u03AC\x07g\x02\x02\u03AC\u03AE\x05" +
6144
- "\xC0a\x02\u03AD\u03AB\x03\x02\x02\x02\u03AE\u03B1\x03\x02\x02\x02\u03AF" +
6145
- "\u03AD\x03\x02\x02\x02\u03AF\u03B0\x03\x02\x02\x02\u03B0\xBD\x03\x02\x02" +
6146
- "\x02\u03B1\u03AF\x03\x02\x02\x02\u03B2\u03B3\x05\xA6T\x02\u03B3\xBF\x03" +
6147
- "\x02\x02\x02\u03B4\u03B5\x05\xA6T\x02\u03B5\xC1\x03\x02\x02\x02\u03B6" +
6148
- "\u03B7\x05\xACW\x02\u03B7\u03B8\x07\x02\x02\x03\u03B8\xC3\x03\x02\x02" +
6149
- "\x02\u03B9\u03BA\x05\xC6d\x02\u03BA\xC5\x03\x02\x02\x02\u03BB\u03C4\x07" +
6150
- "\x03\x02\x02\u03BC\u03C4\x07\x81\x02\x02\u03BD\u03C4\x07\x82\x02\x02\u03BE" +
6151
- "\u03C4\x05\xC8e\x02\u03BF\u03C4\x05\xCCg\x02\u03C0\u03C4\x07Q\x02\x02" +
6152
- "\u03C1\u03C4\x072\x02\x02\u03C2\u03C4\x07B\x02\x02\u03C3\u03BB\x03\x02" +
6153
- "\x02\x02\u03C3\u03BC\x03\x02\x02\x02\u03C3\u03BD\x03\x02\x02\x02\u03C3" +
6154
- "\u03BE\x03\x02\x02\x02\u03C3\u03BF\x03\x02\x02\x02\u03C3\u03C0\x03\x02" +
6155
- "\x02\x02\u03C3\u03C1\x03\x02\x02\x02\u03C3\u03C2\x03\x02\x02\x02\u03C4" +
6156
- "\xC7\x03\x02\x02\x02\u03C5\u03C6\x07b\x02\x02\u03C6\u03CB\x05\xCAf\x02" +
6157
- "\u03C7\u03C8\x07f\x02\x02\u03C8\u03CA\x05\xCAf\x02\u03C9\u03C7\x03\x02" +
6158
- "\x02\x02\u03CA\u03CD\x03\x02\x02\x02\u03CB\u03C9\x03\x02\x02\x02\u03CB" +
6159
- "\u03CC\x03\x02\x02\x02\u03CC\u03CE\x03\x02\x02\x02\u03CD\u03CB\x03\x02" +
6160
- "\x02\x02\u03CE\u03CF\x07c\x02\x02\u03CF\u03D3\x03\x02\x02\x02\u03D0\u03D1" +
6161
- "\x07b\x02\x02\u03D1\u03D3\x07c\x02\x02\u03D2\u03C5\x03\x02\x02\x02\u03D2" +
6162
- "\u03D0\x03\x02\x02\x02\u03D3\xC9\x03\x02\x02\x02\u03D4\u03D5\x07\x03\x02" +
6163
- "\x02\u03D5\u03D6\x07e\x02\x02\u03D6\u03D7\x05\xC6d\x02\u03D7\xCB\x03\x02" +
6164
- "\x02\x02\u03D8\u03D9\x07`\x02\x02\u03D9\u03DE\x05\xC6d\x02\u03DA\u03DB" +
6165
- "\x07f\x02\x02\u03DB\u03DD\x05\xC6d\x02\u03DC\u03DA\x03\x02\x02\x02\u03DD" +
6166
- "\u03E0\x03\x02\x02\x02\u03DE\u03DC\x03\x02\x02\x02\u03DE\u03DF\x03\x02" +
6167
- "\x02\x02\u03DF\u03E1\x03\x02\x02\x02\u03E0\u03DE\x03\x02\x02\x02\u03E1" +
6168
- "\u03E2\x07a\x02\x02\u03E2\u03E6\x03\x02\x02\x02\u03E3\u03E4\x07`\x02\x02" +
6169
- "\u03E4\u03E6\x07a\x02\x02\u03E5\u03D8\x03\x02\x02\x02\u03E5\u03E3\x03" +
6170
- "\x02\x02\x02\u03E6\xCD\x03\x02\x02\x02\u03E7\u03E8\x05\xA6T\x02\u03E8" +
6171
- "\xCF\x03\x02\x02\x02\u03E9\u03EA\x05\xA6T\x02\u03EA\xD1\x03\x02\x02\x02" +
6172
- "\u03EB\u03EC\x07\x03\x02\x02\u03EC\xD3\x03\x02\x02\x02q\xD6\xD8\xE1\xEC" +
6110
+ "\u032D\x03\x02\x02\x02\u033A\u032E\x03\x02\x02\x02\u033B\u036F\x03\x02" +
6111
+ "\x02\x02\u033C\u033D\f\x15\x02\x02\u033D\u033E\t\x0E\x02\x02\u033E\u036E" +
6112
+ "\x05\xACW\x16\u033F\u0340\f\x14\x02\x02\u0340\u0341\t\x0F\x02\x02\u0341" +
6113
+ "\u036E\x05\xACW\x15\u0342\u0343\f\x13\x02\x02\u0343\u0344\x07O\x02\x02" +
6114
+ "\u0344\u036E\x05\xACW\x14\u0345\u0346\f\x0F\x02\x02\u0346\u0347\x05\x9E" +
6115
+ "P\x02\u0347\u0348\x05\xACW\x10\u0348\u036E\x03\x02\x02\x02\u0349\u034A" +
6116
+ "\f\f\x02\x02\u034A\u034B\x07!\x02\x02\u034B\u036E\x05\xACW\r\u034C\u034D" +
6117
+ "\f\v\x02\x02\u034D\u034E\x07E\x02\x02\u034E\u036E\x05\xACW\f\u034F\u0350" +
6118
+ "\f\n\x02\x02\u0350\u0351\x07w\x02\x02\u0351\u036E\x05\xACW\v\u0352\u0353" +
6119
+ "\f\x1B\x02\x02\u0353\u0354\x07a\x02\x02\u0354\u0355\x05`1\x02\u0355\u0356" +
6120
+ "\x07b\x02\x02\u0356\u036E\x03\x02\x02\x02\u0357\u0358\f\x19\x02\x02\u0358" +
6121
+ "\u036E\x05\xA8U\x02\u0359\u035A\f\x18\x02\x02\u035A\u035B\x07f\x02\x02" +
6122
+ "\u035B\u036E\x05\xA8U\x02\u035C\u035D\f\x17\x02\x02\u035D\u035E\x07c\x02" +
6123
+ "\x02\u035E\u036E\x05\x9CO\x02\u035F\u0360\f\x12\x02\x02\u0360\u0361\x07" +
6124
+ "3\x02\x02\u0361\u0362\x05\xACW\x02\u0362\u0363\x05\xA8U\x02\u0363\u036E" +
6125
+ "\x03\x02\x02\x02\u0364\u0365\f\x11\x02\x02\u0365\u0366\x07Z\x02\x02\u0366" +
6126
+ "\u036E\x05\xAEX\x02\u0367\u0368\f\x10\x02\x02\u0368\u0369\x07r\x02\x02" +
6127
+ "\u0369\u036E\x05\xAEX\x02\u036A\u036B\f\x0E\x02\x02\u036B\u036C\x07x\x02" +
6128
+ "\x02\u036C\u036E\x05\xAEX\x02\u036D\u033C\x03\x02\x02\x02\u036D\u033F" +
6129
+ "\x03\x02\x02\x02\u036D\u0342\x03\x02\x02\x02\u036D\u0345\x03\x02\x02\x02" +
6130
+ "\u036D\u0349\x03\x02\x02\x02\u036D\u034C\x03\x02\x02\x02\u036D\u034F\x03" +
6131
+ "\x02\x02\x02\u036D\u0352\x03\x02\x02\x02\u036D\u0357\x03\x02\x02\x02\u036D" +
6132
+ "\u0359\x03\x02\x02\x02\u036D\u035C\x03\x02\x02\x02\u036D\u035F\x03\x02" +
6133
+ "\x02\x02\u036D\u0364\x03\x02\x02\x02\u036D\u0367\x03\x02\x02\x02\u036D" +
6134
+ "\u036A\x03\x02\x02\x02\u036E\u0371\x03\x02\x02\x02\u036F\u036D\x03\x02" +
6135
+ "\x02\x02\u036F\u0370\x03\x02\x02\x02\u0370\xAD\x03\x02\x02\x02\u0371\u036F" +
6136
+ "\x03\x02\x02\x02\u0372\u0374\x05\x9EP\x02\u0373\u0372\x03\x02\x02\x02" +
6137
+ "\u0373\u0374\x03\x02\x02\x02\u0374\u0375\x03\x02\x02\x02\u0375\u0376\x05" +
6138
+ "\xACW\x02\u0376\xAF\x03\x02\x02\x02\u0377\u0379\x05\xB2Z\x02\u0378\u0377" +
6139
+ "\x03\x02\x02\x02\u0379\u037A\x03\x02\x02\x02\u037A\u0378\x03\x02\x02\x02" +
6140
+ "\u037A\u037B\x03\x02\x02\x02\u037B\u037E\x03\x02\x02\x02\u037C\u037D\x07" +
6141
+ "/\x02\x02\u037D\u037F\x05\xACW\x02\u037E\u037C\x03\x02\x02\x02\u037E\u037F" +
6142
+ "\x03\x02\x02\x02\u037F\xB1\x03\x02\x02\x02\u0380\u0382\x07F\x02\x02\u0381" +
6143
+ "\u0383\x05\xACW\x02\u0382\u0381\x03\x02\x02\x02\u0382\u0383\x03\x02\x02" +
6144
+ "\x02\u0383\u0384\x03\x02\x02\x02\u0384\u0385\x07S\x02\x02\u0385\u0386" +
6145
+ "\x05\xAEX\x02\u0386\xB3\x03\x02\x02\x02\u0387\u038C\x05\xACW\x02\u0388" +
6146
+ "\u0389\x07e\x02\x02\u0389\u038B\x05\xACW\x02\u038A\u0388\x03\x02\x02\x02" +
6147
+ "\u038B\u038E\x03\x02\x02\x02\u038C\u038A\x03\x02\x02\x02\u038C\u038D\x03" +
6148
+ "\x02\x02\x02\u038D\u0390\x03\x02\x02\x02\u038E\u038C\x03\x02\x02\x02\u038F" +
6149
+ "\u0391\x07e\x02\x02\u0390\u038F\x03\x02\x02\x02\u0390\u0391\x03\x02\x02" +
6150
+ "\x02\u0391\xB5\x03\x02\x02\x02\u0392\u0399\x05\xC0a\x02\u0393\u0395\x07" +
6151
+ "e\x02\x02\u0394\u0393\x03\x02\x02\x02\u0394\u0395\x03\x02\x02\x02\u0395" +
6152
+ "\u0396\x03\x02\x02\x02\u0396\u0398\x05\xC0a\x02\u0397\u0394\x03\x02\x02" +
6153
+ "\x02\u0398\u039B\x03\x02\x02\x02\u0399\u0397\x03\x02\x02\x02\u0399\u039A" +
6154
+ "\x03\x02\x02\x02\u039A\xB7\x03\x02\x02\x02\u039B\u0399\x03\x02\x02\x02" +
6155
+ "\u039C\u03A3\x05\xBA^\x02\u039D\u039F\x07e\x02\x02\u039E\u039D\x03\x02" +
6156
+ "\x02\x02\u039E\u039F\x03\x02\x02\x02\u039F\u03A0\x03\x02\x02\x02\u03A0" +
6157
+ "\u03A2\x05\xBA^\x02\u03A1\u039E\x03\x02\x02\x02\u03A2\u03A5\x03\x02\x02" +
6158
+ "\x02\u03A3\u03A1\x03\x02\x02\x02\u03A3\u03A4\x03\x02\x02\x02\u03A4\u03A7" +
6159
+ "\x03\x02\x02\x02\u03A5\u03A3\x03\x02\x02\x02\u03A6\u03A8\x07e\x02\x02" +
6160
+ "\u03A7\u03A6\x03\x02\x02\x02\u03A7\u03A8\x03\x02\x02\x02\u03A8\xB9\x03" +
6161
+ "\x02\x02\x02\u03A9\u03B2\x05\xBC_\x02\u03AA\u03AB\x05\xBC_\x02\u03AB\u03AC" +
6162
+ "\x07f\x02\x02\u03AC\u03AE\x03\x02\x02\x02\u03AD\u03AA\x03\x02\x02\x02" +
6163
+ "\u03AD\u03AE\x03\x02\x02\x02\u03AE\u03AF\x03\x02\x02\x02\u03AF\u03B2\t" +
6164
+ "\x10\x02\x02\u03B0\u03B2\x05L\'\x02\u03B1\u03A9\x03\x02\x02\x02\u03B1" +
6165
+ "\u03AD\x03\x02\x02\x02\u03B1\u03B0\x03\x02\x02\x02\u03B2\xBB\x03\x02\x02" +
6166
+ "\x02\u03B3\u03B8\x05\xC0a\x02\u03B4\u03B5\x07f\x02\x02\u03B5\u03B7\x05" +
6167
+ "\xC0a\x02\u03B6\u03B4\x03\x02\x02\x02\u03B7\u03BA\x03\x02\x02\x02\u03B8" +
6168
+ "\u03B6\x03\x02\x02\x02\u03B8\u03B9\x03\x02\x02\x02\u03B9\xBD\x03\x02\x02" +
6169
+ "\x02\u03BA\u03B8\x03\x02\x02\x02\u03BB\u03BC\x05\xA6T\x02\u03BC\xBF\x03" +
6170
+ "\x02\x02\x02\u03BD\u03BE\x05\xA6T\x02\u03BE\xC1\x03\x02\x02\x02\u03BF" +
6171
+ "\u03C0\x05\xACW\x02\u03C0\u03C1\x07\x02\x02\x03\u03C1\xC3\x03\x02\x02" +
6172
+ "\x02\u03C2\u03C3\x05\xC6d\x02\u03C3\xC5\x03\x02\x02\x02\u03C4\u03CD\x07" +
6173
+ "\x03\x02\x02\u03C5\u03CD\x07\x82\x02\x02\u03C6\u03CD\x07\x83\x02\x02\u03C7" +
6174
+ "\u03CD\x05\xC8e\x02\u03C8\u03CD\x05\xCCg\x02\u03C9\u03CD\x07P\x02\x02" +
6175
+ "\u03CA\u03CD\x072\x02\x02\u03CB\u03CD\x07B\x02\x02\u03CC\u03C4\x03\x02" +
6176
+ "\x02\x02\u03CC\u03C5\x03\x02\x02\x02\u03CC\u03C6\x03\x02\x02\x02\u03CC" +
6177
+ "\u03C7\x03\x02\x02\x02\u03CC\u03C8\x03\x02\x02\x02\u03CC\u03C9\x03\x02" +
6178
+ "\x02\x02\u03CC\u03CA\x03\x02\x02\x02\u03CC\u03CB\x03\x02\x02\x02\u03CD" +
6179
+ "\xC7\x03\x02\x02\x02\u03CE\u03CF\x07a\x02\x02\u03CF\u03D4\x05\xCAf\x02" +
6180
+ "\u03D0\u03D1\x07e\x02\x02\u03D1\u03D3\x05\xCAf\x02\u03D2\u03D0\x03\x02" +
6181
+ "\x02\x02\u03D3\u03D6\x03\x02\x02\x02\u03D4\u03D2\x03\x02\x02\x02\u03D4" +
6182
+ "\u03D5\x03\x02\x02\x02\u03D5\u03D7\x03\x02\x02\x02\u03D6\u03D4\x03\x02" +
6183
+ "\x02\x02\u03D7\u03D8\x07b\x02\x02\u03D8\u03DC\x03\x02\x02\x02\u03D9\u03DA" +
6184
+ "\x07a\x02\x02\u03DA\u03DC\x07b\x02\x02\u03DB\u03CE\x03\x02\x02\x02\u03DB" +
6185
+ "\u03D9\x03\x02\x02\x02\u03DC\xC9\x03\x02\x02\x02\u03DD\u03DE\x07\x03\x02" +
6186
+ "\x02\u03DE\u03DF\x07d\x02\x02\u03DF\u03E0\x05\xC6d\x02\u03E0\xCB\x03\x02" +
6187
+ "\x02\x02\u03E1\u03E2\x07_\x02\x02\u03E2\u03E7\x05\xC6d\x02\u03E3\u03E4" +
6188
+ "\x07e\x02\x02\u03E4\u03E6\x05\xC6d\x02\u03E5\u03E3\x03\x02\x02\x02\u03E6" +
6189
+ "\u03E9\x03\x02\x02\x02\u03E7\u03E5\x03\x02\x02\x02\u03E7\u03E8\x03\x02" +
6190
+ "\x02\x02\u03E8\u03EA\x03\x02\x02\x02\u03E9\u03E7\x03\x02\x02\x02\u03EA" +
6191
+ "\u03EB\x07`\x02\x02\u03EB\u03EF\x03\x02\x02\x02\u03EC\u03ED\x07_\x02\x02" +
6192
+ "\u03ED\u03EF\x07`\x02\x02\u03EE\u03E1\x03\x02\x02\x02\u03EE\u03EC\x03" +
6193
+ "\x02\x02\x02\u03EF\xCD\x03\x02\x02\x02\u03F0\u03F1\x05\xA6T\x02\u03F1" +
6194
+ "\xCF\x03\x02\x02\x02\u03F2\u03F3\x05\xA6T\x02\u03F3\xD1\x03\x02\x02\x02" +
6195
+ "\u03F4\u03F5\x07\x03\x02\x02\u03F5\xD3\x03\x02\x02\x02q\xD6\xD8\xE1\xEC" +
6173
6196
  "\xF4\xFC\u0104\u010A\u011A\u011F\u0123\u0132\u0135\u013A\u013D\u0143\u0149" +
6174
6197
  "\u014C\u014E\u015C\u015E\u0162\u016F\u0174\u0178\u0180\u0183\u0191\u019A" +
6175
6198
  "\u019C\u01A1\u01B3\u01B7\u01BC\u01C0\u01C8\u01CD\u01D1\u01D5\u01DA\u01DE" +
@@ -6177,8 +6200,8 @@ MalloyParser._serializedATNSegment1 = "\x02\u01D9\u01DC\x03\x02\x02\x02\u01DA\u0
6177
6200
  "\u0229\u0230\u0234\u023E\u0243\u0247\u025D\u0264\u0269\u026D\u0273\u027A" +
6178
6201
  "\u027F\u0283\u0287\u028A\u0290\u029D\u02A2\u02A6\u02AA\u02AD\u02B6\u02BB" +
6179
6202
  "\u02C0\u02C4\u02C8\u02CD\u02D4\u02EB\u02F4\u0315\u031B\u0325\u0329\u0335" +
6180
- "\u033A\u0364\u0366\u036A\u0371\u0375\u0379\u0383\u0387\u038B\u0390\u0395" +
6181
- "\u039A\u039E\u03A4\u03A8\u03AF\u03C3\u03CB\u03D2\u03DE\u03E5";
6203
+ "\u033A\u036D\u036F\u0373\u037A\u037E\u0382\u038C\u0390\u0394\u0399\u039E" +
6204
+ "\u03A3\u03A7\u03AD\u03B1\u03B8\u03CC\u03D4\u03DB\u03E7\u03EE";
6182
6205
  MalloyParser._serializedATN = Utils.join([
6183
6206
  MalloyParser._serializedATNSegment0,
6184
6207
  MalloyParser._serializedATNSegment1,
@@ -10533,38 +10556,6 @@ class ExprLiteralContext extends FieldExprContext {
10533
10556
  }
10534
10557
  }
10535
10558
  exports.ExprLiteralContext = ExprLiteralContext;
10536
- class ExprMinusContext extends FieldExprContext {
10537
- MINUS() { return this.getToken(MalloyParser.MINUS, 0); }
10538
- fieldExpr() {
10539
- return this.getRuleContext(0, FieldExprContext);
10540
- }
10541
- constructor(ctx) {
10542
- super(ctx.parent, ctx.invokingState);
10543
- this.copyFrom(ctx);
10544
- }
10545
- // @Override
10546
- enterRule(listener) {
10547
- if (listener.enterExprMinus) {
10548
- listener.enterExprMinus(this);
10549
- }
10550
- }
10551
- // @Override
10552
- exitRule(listener) {
10553
- if (listener.exitExprMinus) {
10554
- listener.exitExprMinus(this);
10555
- }
10556
- }
10557
- // @Override
10558
- accept(visitor) {
10559
- if (visitor.visitExprMinus) {
10560
- return visitor.visitExprMinus(this);
10561
- }
10562
- else {
10563
- return visitor.visitChildren(this);
10564
- }
10565
- }
10566
- }
10567
- exports.ExprMinusContext = ExprMinusContext;
10568
10559
  class ExprDurationContext extends FieldExprContext {
10569
10560
  fieldExpr() {
10570
10561
  return this.getRuleContext(0, FieldExprContext);
@@ -10669,6 +10660,38 @@ class ExprSafeCastContext extends FieldExprContext {
10669
10660
  }
10670
10661
  }
10671
10662
  exports.ExprSafeCastContext = ExprSafeCastContext;
10663
+ class ExprMinusContext extends FieldExprContext {
10664
+ MINUS() { return this.getToken(MalloyParser.MINUS, 0); }
10665
+ fieldExpr() {
10666
+ return this.getRuleContext(0, FieldExprContext);
10667
+ }
10668
+ constructor(ctx) {
10669
+ super(ctx.parent, ctx.invokingState);
10670
+ this.copyFrom(ctx);
10671
+ }
10672
+ // @Override
10673
+ enterRule(listener) {
10674
+ if (listener.enterExprMinus) {
10675
+ listener.enterExprMinus(this);
10676
+ }
10677
+ }
10678
+ // @Override
10679
+ exitRule(listener) {
10680
+ if (listener.exitExprMinus) {
10681
+ listener.exitExprMinus(this);
10682
+ }
10683
+ }
10684
+ // @Override
10685
+ accept(visitor) {
10686
+ if (visitor.visitExprMinus) {
10687
+ return visitor.visitExprMinus(this);
10688
+ }
10689
+ else {
10690
+ return visitor.visitChildren(this);
10691
+ }
10692
+ }
10693
+ }
10694
+ exports.ExprMinusContext = ExprMinusContext;
10672
10695
  class ExprMulDivContext extends FieldExprContext {
10673
10696
  fieldExpr(i) {
10674
10697
  if (i === undefined) {
@@ -10823,42 +10846,76 @@ class ExprForRangeContext extends FieldExprContext {
10823
10846
  }
10824
10847
  }
10825
10848
  exports.ExprForRangeContext = ExprForRangeContext;
10826
- class ExprLogicalTreeContext extends FieldExprContext {
10849
+ class ExprAndTreeContext extends FieldExprContext {
10850
+ fieldExpr() {
10851
+ return this.getRuleContext(0, FieldExprContext);
10852
+ }
10853
+ AMPER() { return this.getToken(MalloyParser.AMPER, 0); }
10854
+ partialAllowedFieldExpr() {
10855
+ return this.getRuleContext(0, PartialAllowedFieldExprContext);
10856
+ }
10857
+ constructor(ctx) {
10858
+ super(ctx.parent, ctx.invokingState);
10859
+ this.copyFrom(ctx);
10860
+ }
10861
+ // @Override
10862
+ enterRule(listener) {
10863
+ if (listener.enterExprAndTree) {
10864
+ listener.enterExprAndTree(this);
10865
+ }
10866
+ }
10867
+ // @Override
10868
+ exitRule(listener) {
10869
+ if (listener.exitExprAndTree) {
10870
+ listener.exitExprAndTree(this);
10871
+ }
10872
+ }
10873
+ // @Override
10874
+ accept(visitor) {
10875
+ if (visitor.visitExprAndTree) {
10876
+ return visitor.visitExprAndTree(this);
10877
+ }
10878
+ else {
10879
+ return visitor.visitChildren(this);
10880
+ }
10881
+ }
10882
+ }
10883
+ exports.ExprAndTreeContext = ExprAndTreeContext;
10884
+ class ExprOrTreeContext extends FieldExprContext {
10827
10885
  fieldExpr() {
10828
10886
  return this.getRuleContext(0, FieldExprContext);
10829
10887
  }
10888
+ BAR() { return this.getToken(MalloyParser.BAR, 0); }
10830
10889
  partialAllowedFieldExpr() {
10831
10890
  return this.getRuleContext(0, PartialAllowedFieldExprContext);
10832
10891
  }
10833
- AMPER() { return this.tryGetToken(MalloyParser.AMPER, 0); }
10834
- BAR() { return this.tryGetToken(MalloyParser.BAR, 0); }
10835
10892
  constructor(ctx) {
10836
10893
  super(ctx.parent, ctx.invokingState);
10837
10894
  this.copyFrom(ctx);
10838
10895
  }
10839
10896
  // @Override
10840
10897
  enterRule(listener) {
10841
- if (listener.enterExprLogicalTree) {
10842
- listener.enterExprLogicalTree(this);
10898
+ if (listener.enterExprOrTree) {
10899
+ listener.enterExprOrTree(this);
10843
10900
  }
10844
10901
  }
10845
10902
  // @Override
10846
10903
  exitRule(listener) {
10847
- if (listener.exitExprLogicalTree) {
10848
- listener.exitExprLogicalTree(this);
10904
+ if (listener.exitExprOrTree) {
10905
+ listener.exitExprOrTree(this);
10849
10906
  }
10850
10907
  }
10851
10908
  // @Override
10852
10909
  accept(visitor) {
10853
- if (visitor.visitExprLogicalTree) {
10854
- return visitor.visitExprLogicalTree(this);
10910
+ if (visitor.visitExprOrTree) {
10911
+ return visitor.visitExprOrTree(this);
10855
10912
  }
10856
10913
  else {
10857
10914
  return visitor.visitChildren(this);
10858
10915
  }
10859
10916
  }
10860
10917
  }
10861
- exports.ExprLogicalTreeContext = ExprLogicalTreeContext;
10918
+ exports.ExprOrTreeContext = ExprOrTreeContext;
10862
10919
  class ExprCompareContext extends FieldExprContext {
10863
10920
  fieldExpr(i) {
10864
10921
  if (i === undefined) {
@@ -10902,11 +10959,10 @@ class ExprApplyContext extends FieldExprContext {
10902
10959
  fieldExpr() {
10903
10960
  return this.getRuleContext(0, FieldExprContext);
10904
10961
  }
10962
+ QMARK() { return this.getToken(MalloyParser.QMARK, 0); }
10905
10963
  partialAllowedFieldExpr() {
10906
10964
  return this.getRuleContext(0, PartialAllowedFieldExprContext);
10907
10965
  }
10908
- COLON() { return this.tryGetToken(MalloyParser.COLON, 0); }
10909
- QMARK() { return this.tryGetToken(MalloyParser.QMARK, 0); }
10910
10966
  constructor(ctx) {
10911
10967
  super(ctx.parent, ctx.invokingState);
10912
10968
  this.copyFrom(ctx);
@@ -10966,7 +11022,81 @@ class ExprNotContext extends FieldExprContext {
10966
11022
  }
10967
11023
  }
10968
11024
  exports.ExprNotContext = ExprNotContext;
10969
- class ExprLogicalContext extends FieldExprContext {
11025
+ class ExprLogicalAndContext extends FieldExprContext {
11026
+ fieldExpr(i) {
11027
+ if (i === undefined) {
11028
+ return this.getRuleContexts(FieldExprContext);
11029
+ }
11030
+ else {
11031
+ return this.getRuleContext(i, FieldExprContext);
11032
+ }
11033
+ }
11034
+ AND() { return this.getToken(MalloyParser.AND, 0); }
11035
+ constructor(ctx) {
11036
+ super(ctx.parent, ctx.invokingState);
11037
+ this.copyFrom(ctx);
11038
+ }
11039
+ // @Override
11040
+ enterRule(listener) {
11041
+ if (listener.enterExprLogicalAnd) {
11042
+ listener.enterExprLogicalAnd(this);
11043
+ }
11044
+ }
11045
+ // @Override
11046
+ exitRule(listener) {
11047
+ if (listener.exitExprLogicalAnd) {
11048
+ listener.exitExprLogicalAnd(this);
11049
+ }
11050
+ }
11051
+ // @Override
11052
+ accept(visitor) {
11053
+ if (visitor.visitExprLogicalAnd) {
11054
+ return visitor.visitExprLogicalAnd(this);
11055
+ }
11056
+ else {
11057
+ return visitor.visitChildren(this);
11058
+ }
11059
+ }
11060
+ }
11061
+ exports.ExprLogicalAndContext = ExprLogicalAndContext;
11062
+ class ExprLogicalOrContext extends FieldExprContext {
11063
+ fieldExpr(i) {
11064
+ if (i === undefined) {
11065
+ return this.getRuleContexts(FieldExprContext);
11066
+ }
11067
+ else {
11068
+ return this.getRuleContext(i, FieldExprContext);
11069
+ }
11070
+ }
11071
+ OR() { return this.getToken(MalloyParser.OR, 0); }
11072
+ constructor(ctx) {
11073
+ super(ctx.parent, ctx.invokingState);
11074
+ this.copyFrom(ctx);
11075
+ }
11076
+ // @Override
11077
+ enterRule(listener) {
11078
+ if (listener.enterExprLogicalOr) {
11079
+ listener.enterExprLogicalOr(this);
11080
+ }
11081
+ }
11082
+ // @Override
11083
+ exitRule(listener) {
11084
+ if (listener.exitExprLogicalOr) {
11085
+ listener.exitExprLogicalOr(this);
11086
+ }
11087
+ }
11088
+ // @Override
11089
+ accept(visitor) {
11090
+ if (visitor.visitExprLogicalOr) {
11091
+ return visitor.visitExprLogicalOr(this);
11092
+ }
11093
+ else {
11094
+ return visitor.visitChildren(this);
11095
+ }
11096
+ }
11097
+ }
11098
+ exports.ExprLogicalOrContext = ExprLogicalOrContext;
11099
+ class ExprCoalesceContext extends FieldExprContext {
10970
11100
  fieldExpr(i) {
10971
11101
  if (i === undefined) {
10972
11102
  return this.getRuleContexts(FieldExprContext);
@@ -10975,35 +11105,34 @@ class ExprLogicalContext extends FieldExprContext {
10975
11105
  return this.getRuleContext(i, FieldExprContext);
10976
11106
  }
10977
11107
  }
10978
- AND() { return this.tryGetToken(MalloyParser.AND, 0); }
10979
- OR() { return this.tryGetToken(MalloyParser.OR, 0); }
11108
+ DOUBLE_QMARK() { return this.getToken(MalloyParser.DOUBLE_QMARK, 0); }
10980
11109
  constructor(ctx) {
10981
11110
  super(ctx.parent, ctx.invokingState);
10982
11111
  this.copyFrom(ctx);
10983
11112
  }
10984
11113
  // @Override
10985
11114
  enterRule(listener) {
10986
- if (listener.enterExprLogical) {
10987
- listener.enterExprLogical(this);
11115
+ if (listener.enterExprCoalesce) {
11116
+ listener.enterExprCoalesce(this);
10988
11117
  }
10989
11118
  }
10990
11119
  // @Override
10991
11120
  exitRule(listener) {
10992
- if (listener.exitExprLogical) {
10993
- listener.exitExprLogical(this);
11121
+ if (listener.exitExprCoalesce) {
11122
+ listener.exitExprCoalesce(this);
10994
11123
  }
10995
11124
  }
10996
11125
  // @Override
10997
11126
  accept(visitor) {
10998
- if (visitor.visitExprLogical) {
10999
- return visitor.visitExprLogical(this);
11127
+ if (visitor.visitExprCoalesce) {
11128
+ return visitor.visitExprCoalesce(this);
11000
11129
  }
11001
11130
  else {
11002
11131
  return visitor.visitChildren(this);
11003
11132
  }
11004
11133
  }
11005
11134
  }
11006
- exports.ExprLogicalContext = ExprLogicalContext;
11135
+ exports.ExprCoalesceContext = ExprCoalesceContext;
11007
11136
  class ExprCastContext extends FieldExprContext {
11008
11137
  CAST() { return this.getToken(MalloyParser.CAST, 0); }
11009
11138
  OPAREN() { return this.getToken(MalloyParser.OPAREN, 0); }