From 3b78e01122d72442d98ace46b5da08ac7bcd52d0 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Tue, 5 Dec 2023 19:42:43 +0800 Subject: [PATCH 01/54] feat: demo, delete without pause and resume, rebase main(74fe562b1ab99ff75bba7c1faaf4c7ea73017409) Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/proto/automation/automation.pb.go | 2 +- .../automationservice/automationservice.pb.go | 2 +- go/vt/proto/binlogdata/binlogdata.pb.go | 2 +- go/vt/proto/binlogservice/binlogservice.pb.go | 2 +- go/vt/proto/logutil/logutil.pb.go | 2 +- go/vt/proto/mysqlctl/mysqlctl.pb.go | 2 +- go/vt/proto/query/query.pb.go | 472 +- go/vt/proto/query/query_vtproto.pb.go | 530 + go/vt/proto/queryservice/queryservice.pb.go | 148 +- .../queryservice/queryservice_grpc.pb.go | 36 + .../replicationdata/replicationdata.pb.go | 2 +- go/vt/proto/tableacl/tableacl.pb.go | 2 +- .../tabletmanagerdata/tabletmanagerdata.pb.go | 2 +- .../tabletmanagerservice.pb.go | 2 +- go/vt/proto/throttlerdata/throttlerdata.pb.go | 2 +- .../throttlerservice/throttlerservice.pb.go | 2 +- go/vt/proto/topodata/topodata.pb.go | 2 +- go/vt/proto/vschema/vschema.pb.go | 2 +- go/vt/proto/vtadmin/vtadmin.pb.go | 2 +- go/vt/proto/vtctldata/vtctldata.pb.go | 2 +- go/vt/proto/vtctlservice/vtctlservice.pb.go | 2 +- go/vt/proto/vtgate/vtgate.pb.go | 2 +- go/vt/proto/vtgateservice/vtgateservice.pb.go | 2 +- go/vt/proto/vtrpc/vtrpc.pb.go | 2 +- go/vt/proto/vttest/vttest.pb.go | 2 +- go/vt/proto/vttime/vttime.pb.go | 2 +- .../schema/job/big_dml_jobs_table.sql | 32 + go/vt/sqlparser/ast_format_fast.go | 1 - go/vt/sqlparser/comments.go | 27 + go/vt/sqlparser/constants.go | 1 + go/vt/sqlparser/keywords.go | 1 + go/vt/sqlparser/sql.go | 14540 ++++++++-------- go/vt/sqlparser/sql.y | 6 + go/vt/vtgate/executor.go | 15 + go/vt/vtgate/plan_execute.go | 33 + go/vt/vtgate/planbuilder/show.go | 36 + go/vt/vtgate/vcursor_impl.go | 1 + go/vt/vttablet/grpcqueryservice/server.go | 5 + go/vt/vttablet/grpctabletconn/conn.go | 20 + go/vt/vttablet/jobcontroller/controller.go | 411 + go/vt/vttablet/queryservice/queryservice.go | 2 + go/vt/vttablet/queryservice/wrapped.go | 10 + go/vt/vttablet/sandboxconn/sandboxconn.go | 4 + .../tabletconntest/fakequeryservice.go | 4 + go/vt/vttablet/tabletserver/state_manager.go | 39 +- go/vt/vttablet/tabletserver/tabletserver.go | 9 + proto/query.proto | 14 + proto/queryservice.proto | 2 +- 48 files changed, 8967 insertions(+), 7476 deletions(-) create mode 100644 go/vt/sidecardb/schema/job/big_dml_jobs_table.sql create mode 100644 go/vt/vttablet/jobcontroller/controller.go diff --git a/go/vt/proto/automation/automation.pb.go b/go/vt/proto/automation/automation.pb.go index 45a2d192e4..752d55adfb 100644 --- a/go/vt/proto/automation/automation.pb.go +++ b/go/vt/proto/automation/automation.pb.go @@ -20,7 +20,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: automation.proto diff --git a/go/vt/proto/automationservice/automationservice.pb.go b/go/vt/proto/automationservice/automationservice.pb.go index 2c3ff0b031..325722b5b7 100644 --- a/go/vt/proto/automationservice/automationservice.pb.go +++ b/go/vt/proto/automationservice/automationservice.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: automationservice.proto diff --git a/go/vt/proto/binlogdata/binlogdata.pb.go b/go/vt/proto/binlogdata/binlogdata.pb.go index 4ca1128412..9ccf50a014 100644 --- a/go/vt/proto/binlogdata/binlogdata.pb.go +++ b/go/vt/proto/binlogdata/binlogdata.pb.go @@ -23,7 +23,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: binlogdata.proto diff --git a/go/vt/proto/binlogservice/binlogservice.pb.go b/go/vt/proto/binlogservice/binlogservice.pb.go index 44b47ac33f..4eac50296c 100644 --- a/go/vt/proto/binlogservice/binlogservice.pb.go +++ b/go/vt/proto/binlogservice/binlogservice.pb.go @@ -19,7 +19,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: binlogservice.proto diff --git a/go/vt/proto/logutil/logutil.pb.go b/go/vt/proto/logutil/logutil.pb.go index 4e41806d4a..b267571616 100644 --- a/go/vt/proto/logutil/logutil.pb.go +++ b/go/vt/proto/logutil/logutil.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: logutil.proto diff --git a/go/vt/proto/mysqlctl/mysqlctl.pb.go b/go/vt/proto/mysqlctl/mysqlctl.pb.go index b6a407ea60..b3aaf1933d 100644 --- a/go/vt/proto/mysqlctl/mysqlctl.pb.go +++ b/go/vt/proto/mysqlctl/mysqlctl.pb.go @@ -18,7 +18,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: mysqlctl.proto diff --git a/go/vt/proto/query/query.pb.go b/go/vt/proto/query/query.pb.go index f6229d2e24..92334ab791 100644 --- a/go/vt/proto/query/query.pb.go +++ b/go/vt/proto/query/query.pb.go @@ -22,7 +22,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: query.proto @@ -6128,6 +6128,156 @@ func (*ReloadExecResponse) Descriptor() ([]byte, []int) { return file_query_proto_rawDescGZIP(), []int{71} } +type DMLJobRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Cmd string `protobuf:"bytes,1,opt,name=cmd,proto3" json:"cmd,omitempty"` + JobUuid string `protobuf:"bytes,2,opt,name=job_uuid,json=jobUuid,proto3" json:"job_uuid,omitempty"` + Sql string `protobuf:"bytes,3,opt,name=sql,proto3" json:"sql,omitempty"` + RelatedSchema string `protobuf:"bytes,4,opt,name=related_schema,json=relatedSchema,proto3" json:"related_schema,omitempty"` + Timegap int64 `protobuf:"varint,6,opt,name=timegap,proto3" json:"timegap,omitempty"` + SubtaskRows int64 `protobuf:"varint,7,opt,name=subtask_rows,json=subtaskRows,proto3" json:"subtask_rows,omitempty"` + AutoRetry bool `protobuf:"varint,8,opt,name=auto_retry,json=autoRetry,proto3" json:"auto_retry,omitempty"` + PostponeLaunch bool `protobuf:"varint,9,opt,name=postpone_launch,json=postponeLaunch,proto3" json:"postpone_launch,omitempty"` +} + +func (x *DMLJobRequest) Reset() { + *x = DMLJobRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_query_proto_msgTypes[72] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DMLJobRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DMLJobRequest) ProtoMessage() {} + +func (x *DMLJobRequest) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[72] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DMLJobRequest.ProtoReflect.Descriptor instead. +func (*DMLJobRequest) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{72} +} + +func (x *DMLJobRequest) GetCmd() string { + if x != nil { + return x.Cmd + } + return "" +} + +func (x *DMLJobRequest) GetJobUuid() string { + if x != nil { + return x.JobUuid + } + return "" +} + +func (x *DMLJobRequest) GetSql() string { + if x != nil { + return x.Sql + } + return "" +} + +func (x *DMLJobRequest) GetRelatedSchema() string { + if x != nil { + return x.RelatedSchema + } + return "" +} + +func (x *DMLJobRequest) GetTimegap() int64 { + if x != nil { + return x.Timegap + } + return 0 +} + +func (x *DMLJobRequest) GetSubtaskRows() int64 { + if x != nil { + return x.SubtaskRows + } + return 0 +} + +func (x *DMLJobRequest) GetAutoRetry() bool { + if x != nil { + return x.AutoRetry + } + return false +} + +func (x *DMLJobRequest) GetPostponeLaunch() bool { + if x != nil { + return x.PostponeLaunch + } + return false +} + +type DMLJobResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Result *QueryResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` +} + +func (x *DMLJobResponse) Reset() { + *x = DMLJobResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_query_proto_msgTypes[73] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DMLJobResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DMLJobResponse) ProtoMessage() {} + +func (x *DMLJobResponse) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[73] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DMLJobResponse.ProtoReflect.Descriptor instead. +func (*DMLJobResponse) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{73} +} + +func (x *DMLJobResponse) GetResult() *QueryResult { + if x != nil { + return x.Result + } + return nil +} + // One individual Statement in a transaction. type StreamEvent_Statement struct { state protoimpl.MessageState @@ -6147,7 +6297,7 @@ type StreamEvent_Statement struct { func (x *StreamEvent_Statement) Reset() { *x = StreamEvent_Statement{} if protoimpl.UnsafeEnabled { - mi := &file_query_proto_msgTypes[73] + mi := &file_query_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6160,7 +6310,7 @@ func (x *StreamEvent_Statement) String() string { func (*StreamEvent_Statement) ProtoMessage() {} func (x *StreamEvent_Statement) ProtoReflect() protoreflect.Message { - mi := &file_query_proto_msgTypes[73] + mi := &file_query_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7147,79 +7297,98 @@ var file_query_proto_rawDesc = []byte{ 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x92, 0x03, 0x0a, 0x09, 0x4d, 0x79, 0x53, 0x71, 0x6c, 0x46, 0x6c, - 0x61, 0x67, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x10, 0x00, 0x12, 0x11, 0x0a, - 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x01, - 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x52, 0x49, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, - 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x4e, 0x49, 0x51, 0x55, 0x45, 0x5f, 0x4b, 0x45, 0x59, - 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x55, 0x4c, 0x54, 0x49, - 0x50, 0x4c, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x08, 0x12, 0x0d, - 0x0a, 0x09, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x10, 0x12, 0x11, 0x0a, - 0x0d, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x20, - 0x12, 0x11, 0x0a, 0x0d, 0x5a, 0x45, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x4c, 0x5f, 0x46, 0x4c, 0x41, - 0x47, 0x10, 0x40, 0x12, 0x10, 0x0a, 0x0b, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x5f, 0x46, 0x4c, - 0x41, 0x47, 0x10, 0x80, 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, - 0x41, 0x47, 0x10, 0x80, 0x02, 0x12, 0x18, 0x0a, 0x13, 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x49, 0x4e, - 0x43, 0x52, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x04, 0x12, - 0x13, 0x0a, 0x0e, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, - 0x47, 0x10, 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x4c, 0x41, 0x47, - 0x10, 0x80, 0x10, 0x12, 0x1a, 0x0a, 0x15, 0x4e, 0x4f, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, - 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x20, 0x12, - 0x17, 0x0a, 0x12, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x57, - 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x40, 0x12, 0x0e, 0x0a, 0x08, 0x4e, 0x55, 0x4d, 0x5f, - 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x02, 0x12, 0x13, 0x0a, 0x0d, 0x50, 0x41, 0x52, 0x54, - 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x01, 0x12, 0x10, 0x0a, - 0x0a, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x02, 0x12, - 0x11, 0x0a, 0x0b, 0x55, 0x4e, 0x49, 0x51, 0x55, 0x45, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, - 0x80, 0x04, 0x12, 0x11, 0x0a, 0x0b, 0x42, 0x49, 0x4e, 0x43, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, - 0x47, 0x10, 0x80, 0x80, 0x08, 0x1a, 0x02, 0x10, 0x01, 0x2a, 0x6b, 0x0a, 0x04, 0x46, 0x6c, 0x61, - 0x67, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0a, 0x49, - 0x53, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x4c, 0x10, 0x80, 0x02, 0x12, 0x0f, 0x0a, 0x0a, - 0x49, 0x53, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, 0x10, 0x80, 0x04, 0x12, 0x0c, 0x0a, - 0x07, 0x49, 0x53, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x49, - 0x53, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x44, 0x10, 0x80, 0x10, 0x12, 0x0b, 0x0a, 0x06, 0x49, 0x53, - 0x54, 0x45, 0x58, 0x54, 0x10, 0x80, 0x20, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x53, 0x42, 0x49, 0x4e, - 0x41, 0x52, 0x59, 0x10, 0x80, 0x40, 0x2a, 0xc0, 0x03, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x0d, 0x0a, 0x09, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x09, - 0x0a, 0x04, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x81, 0x02, 0x12, 0x0a, 0x0a, 0x05, 0x55, 0x49, 0x4e, - 0x54, 0x38, 0x10, 0x82, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x31, 0x36, 0x10, 0x83, - 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x31, 0x36, 0x10, 0x84, 0x06, 0x12, 0x0a, - 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x85, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, - 0x4e, 0x54, 0x32, 0x34, 0x10, 0x86, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x33, 0x32, - 0x10, 0x87, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x88, 0x06, - 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x89, 0x02, 0x12, 0x0b, 0x0a, 0x06, - 0x55, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x8a, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x4c, 0x4f, - 0x41, 0x54, 0x33, 0x32, 0x10, 0x8b, 0x08, 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, - 0x36, 0x34, 0x10, 0x8c, 0x08, 0x12, 0x0e, 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, - 0x4d, 0x50, 0x10, 0x8d, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x44, 0x41, 0x54, 0x45, 0x10, 0x8e, 0x10, - 0x12, 0x09, 0x0a, 0x04, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x8f, 0x10, 0x12, 0x0d, 0x0a, 0x08, 0x44, - 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x90, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x59, 0x45, - 0x41, 0x52, 0x10, 0x91, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x43, 0x49, 0x4d, 0x41, 0x4c, - 0x10, 0x12, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x45, 0x58, 0x54, 0x10, 0x93, 0x30, 0x12, 0x09, 0x0a, - 0x04, 0x42, 0x4c, 0x4f, 0x42, 0x10, 0x94, 0x50, 0x12, 0x0c, 0x0a, 0x07, 0x56, 0x41, 0x52, 0x43, - 0x48, 0x41, 0x52, 0x10, 0x95, 0x30, 0x12, 0x0e, 0x0a, 0x09, 0x56, 0x41, 0x52, 0x42, 0x49, 0x4e, - 0x41, 0x52, 0x59, 0x10, 0x96, 0x50, 0x12, 0x09, 0x0a, 0x04, 0x43, 0x48, 0x41, 0x52, 0x10, 0x97, - 0x30, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x98, 0x50, 0x12, 0x08, - 0x0a, 0x03, 0x42, 0x49, 0x54, 0x10, 0x99, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x45, 0x4e, 0x55, 0x4d, - 0x10, 0x9a, 0x10, 0x12, 0x08, 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, 0x9b, 0x10, 0x12, 0x09, 0x0a, - 0x05, 0x54, 0x55, 0x50, 0x4c, 0x45, 0x10, 0x1c, 0x12, 0x0d, 0x0a, 0x08, 0x47, 0x45, 0x4f, 0x4d, - 0x45, 0x54, 0x52, 0x59, 0x10, 0x9d, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x10, - 0x9e, 0x10, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x58, 0x50, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, - 0x10, 0x1f, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45, 0x58, 0x4e, 0x55, 0x4d, 0x10, 0xa0, 0x20, 0x12, - 0x0b, 0x0a, 0x06, 0x48, 0x45, 0x58, 0x56, 0x41, 0x4c, 0x10, 0xa1, 0x20, 0x12, 0x0b, 0x0a, 0x06, - 0x42, 0x49, 0x54, 0x4e, 0x55, 0x4d, 0x10, 0xa2, 0x20, 0x2a, 0x46, 0x0a, 0x10, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, - 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, - 0x45, 0x50, 0x41, 0x52, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4d, 0x4d, 0x49, - 0x54, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x4f, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, - 0x03, 0x2a, 0x31, 0x0a, 0x0f, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x56, 0x49, 0x45, 0x57, 0x53, 0x10, 0x00, 0x12, - 0x0a, 0x0a, 0x06, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x53, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, - 0x4c, 0x4c, 0x10, 0x02, 0x42, 0x35, 0x0a, 0x0f, 0x69, 0x6f, 0x2e, 0x76, 0x69, 0x74, 0x65, 0x73, - 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x22, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, - 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xfa, 0x01, 0x0a, 0x0d, 0x44, 0x4d, 0x4c, 0x4a, 0x6f, 0x62, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, + 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x55, + 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x73, 0x71, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, + 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x18, 0x0a, 0x07, + 0x74, 0x69, 0x6d, 0x65, 0x67, 0x61, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x74, + 0x69, 0x6d, 0x65, 0x67, 0x61, 0x70, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x74, 0x61, 0x73, + 0x6b, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x75, + 0x62, 0x74, 0x61, 0x73, 0x6b, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, + 0x6f, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, + 0x75, 0x74, 0x6f, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x6f, 0x73, 0x74, + 0x70, 0x6f, 0x6e, 0x65, 0x5f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0e, 0x70, 0x6f, 0x73, 0x74, 0x70, 0x6f, 0x6e, 0x65, 0x4c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x22, 0x3c, 0x0a, 0x0e, 0x44, 0x4d, 0x4c, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, + 0x92, 0x03, 0x0a, 0x09, 0x4d, 0x79, 0x53, 0x71, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x09, 0x0a, + 0x05, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, + 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50, + 0x52, 0x49, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, + 0x0f, 0x55, 0x4e, 0x49, 0x51, 0x55, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, + 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x45, 0x5f, 0x4b, + 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x4c, 0x4f, + 0x42, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x10, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x53, 0x49, + 0x47, 0x4e, 0x45, 0x44, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x20, 0x12, 0x11, 0x0a, 0x0d, 0x5a, + 0x45, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x4c, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x40, 0x12, 0x10, + 0x0a, 0x0b, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x01, + 0x12, 0x0e, 0x0a, 0x09, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x02, + 0x12, 0x18, 0x0a, 0x13, 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x49, 0x4e, 0x43, 0x52, 0x45, 0x4d, 0x45, + 0x4e, 0x54, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x04, 0x12, 0x13, 0x0a, 0x0e, 0x54, 0x49, + 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x08, 0x12, + 0x0d, 0x0a, 0x08, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x10, 0x12, 0x1a, + 0x0a, 0x15, 0x4e, 0x4f, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x56, 0x41, 0x4c, + 0x55, 0x45, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x20, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x4e, + 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x57, 0x5f, 0x46, 0x4c, 0x41, 0x47, + 0x10, 0x80, 0x40, 0x12, 0x0e, 0x0a, 0x08, 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, + 0x80, 0x80, 0x02, 0x12, 0x13, 0x0a, 0x0d, 0x50, 0x41, 0x52, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x5f, + 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x01, 0x12, 0x10, 0x0a, 0x0a, 0x47, 0x52, 0x4f, 0x55, + 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x02, 0x12, 0x11, 0x0a, 0x0b, 0x55, 0x4e, + 0x49, 0x51, 0x55, 0x45, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x04, 0x12, 0x11, 0x0a, + 0x0b, 0x42, 0x49, 0x4e, 0x43, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x08, + 0x1a, 0x02, 0x10, 0x01, 0x2a, 0x6b, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x08, 0x0a, 0x04, + 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x49, 0x4e, 0x54, 0x45, + 0x47, 0x52, 0x41, 0x4c, 0x10, 0x80, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x55, 0x4e, 0x53, + 0x49, 0x47, 0x4e, 0x45, 0x44, 0x10, 0x80, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x49, 0x53, 0x46, 0x4c, + 0x4f, 0x41, 0x54, 0x10, 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x53, 0x51, 0x55, 0x4f, 0x54, + 0x45, 0x44, 0x10, 0x80, 0x10, 0x12, 0x0b, 0x0a, 0x06, 0x49, 0x53, 0x54, 0x45, 0x58, 0x54, 0x10, + 0x80, 0x20, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x53, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x80, + 0x40, 0x2a, 0xc0, 0x03, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x55, + 0x4c, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x04, 0x49, 0x4e, 0x54, + 0x38, 0x10, 0x81, 0x02, 0x12, 0x0a, 0x0a, 0x05, 0x55, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x82, 0x06, + 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x31, 0x36, 0x10, 0x83, 0x02, 0x12, 0x0b, 0x0a, 0x06, + 0x55, 0x49, 0x4e, 0x54, 0x31, 0x36, 0x10, 0x84, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, + 0x32, 0x34, 0x10, 0x85, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, + 0x86, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x87, 0x02, 0x12, 0x0b, + 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x88, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, + 0x4e, 0x54, 0x36, 0x34, 0x10, 0x89, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x36, + 0x34, 0x10, 0x8a, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x33, 0x32, 0x10, + 0x8b, 0x08, 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x36, 0x34, 0x10, 0x8c, 0x08, + 0x12, 0x0e, 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x8d, 0x10, + 0x12, 0x09, 0x0a, 0x04, 0x44, 0x41, 0x54, 0x45, 0x10, 0x8e, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x54, + 0x49, 0x4d, 0x45, 0x10, 0x8f, 0x10, 0x12, 0x0d, 0x0a, 0x08, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, + 0x4d, 0x45, 0x10, 0x90, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x59, 0x45, 0x41, 0x52, 0x10, 0x91, 0x06, + 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x43, 0x49, 0x4d, 0x41, 0x4c, 0x10, 0x12, 0x12, 0x09, 0x0a, + 0x04, 0x54, 0x45, 0x58, 0x54, 0x10, 0x93, 0x30, 0x12, 0x09, 0x0a, 0x04, 0x42, 0x4c, 0x4f, 0x42, + 0x10, 0x94, 0x50, 0x12, 0x0c, 0x0a, 0x07, 0x56, 0x41, 0x52, 0x43, 0x48, 0x41, 0x52, 0x10, 0x95, + 0x30, 0x12, 0x0e, 0x0a, 0x09, 0x56, 0x41, 0x52, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x96, + 0x50, 0x12, 0x09, 0x0a, 0x04, 0x43, 0x48, 0x41, 0x52, 0x10, 0x97, 0x30, 0x12, 0x0b, 0x0a, 0x06, + 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x98, 0x50, 0x12, 0x08, 0x0a, 0x03, 0x42, 0x49, 0x54, + 0x10, 0x99, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x9a, 0x10, 0x12, 0x08, + 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, 0x9b, 0x10, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x55, 0x50, 0x4c, + 0x45, 0x10, 0x1c, 0x12, 0x0d, 0x0a, 0x08, 0x47, 0x45, 0x4f, 0x4d, 0x45, 0x54, 0x52, 0x59, 0x10, + 0x9d, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x9e, 0x10, 0x12, 0x0e, 0x0a, + 0x0a, 0x45, 0x58, 0x50, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x1f, 0x12, 0x0b, 0x0a, + 0x06, 0x48, 0x45, 0x58, 0x4e, 0x55, 0x4d, 0x10, 0xa0, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45, + 0x58, 0x56, 0x41, 0x4c, 0x10, 0xa1, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x54, 0x4e, 0x55, + 0x4d, 0x10, 0xa2, 0x20, 0x2a, 0x46, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, + 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x45, + 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x12, 0x0c, + 0x0a, 0x08, 0x52, 0x4f, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x03, 0x2a, 0x31, 0x0a, 0x0f, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x09, 0x0a, 0x05, 0x56, 0x49, 0x45, 0x57, 0x53, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x54, 0x41, + 0x42, 0x4c, 0x45, 0x53, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x02, 0x42, + 0x35, 0x0a, 0x0f, 0x69, 0x6f, 0x2e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x5a, 0x22, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, + 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -7235,7 +7404,7 @@ func file_query_proto_rawDescGZIP() []byte { } var file_query_proto_enumTypes = make([]protoimpl.EnumInfo, 13) -var file_query_proto_msgTypes = make([]protoimpl.MessageInfo, 75) +var file_query_proto_msgTypes = make([]protoimpl.MessageInfo, 77) var file_query_proto_goTypes = []interface{}{ (MySqlFlag)(0), // 0: query.MySqlFlag (Flag)(0), // 1: query.Flag @@ -7322,20 +7491,22 @@ var file_query_proto_goTypes = []interface{}{ (*DropSchemaResponse)(nil), // 82: query.DropSchemaResponse (*ReloadExecRequest)(nil), // 83: query.ReloadExecRequest (*ReloadExecResponse)(nil), // 84: query.ReloadExecResponse - nil, // 85: query.BoundQuery.BindVariablesEntry - (*StreamEvent_Statement)(nil), // 86: query.StreamEvent.Statement - nil, // 87: query.GetSchemaResponse.TableDefinitionEntry - (topodata.TabletType)(0), // 88: topodata.TabletType - (*topodata.TabletAlias)(nil), // 89: topodata.TabletAlias - (*vtrpc.CallerID)(nil), // 90: vtrpc.CallerID - (*vtrpc.RPCError)(nil), // 91: vtrpc.RPCError + (*DMLJobRequest)(nil), // 85: query.DMLJobRequest + (*DMLJobResponse)(nil), // 86: query.DMLJobResponse + nil, // 87: query.BoundQuery.BindVariablesEntry + (*StreamEvent_Statement)(nil), // 88: query.StreamEvent.Statement + nil, // 89: query.GetSchemaResponse.TableDefinitionEntry + (topodata.TabletType)(0), // 90: topodata.TabletType + (*topodata.TabletAlias)(nil), // 91: topodata.TabletAlias + (*vtrpc.CallerID)(nil), // 92: vtrpc.CallerID + (*vtrpc.RPCError)(nil), // 93: vtrpc.RPCError } var file_query_proto_depIdxs = []int32{ - 88, // 0: query.Target.tablet_type:type_name -> topodata.TabletType + 90, // 0: query.Target.tablet_type:type_name -> topodata.TabletType 2, // 1: query.Value.type:type_name -> query.Type 2, // 2: query.BindVariable.type:type_name -> query.Type 16, // 3: query.BindVariable.values:type_name -> query.Value - 85, // 4: query.BoundQuery.bind_variables:type_name -> query.BoundQuery.BindVariablesEntry + 87, // 4: query.BoundQuery.bind_variables:type_name -> query.BoundQuery.BindVariablesEntry 5, // 5: query.ExecuteOptions.included_fields:type_name -> query.ExecuteOptions.IncludedFields 6, // 6: query.ExecuteOptions.workload:type_name -> query.ExecuteOptions.Workload 7, // 7: query.ExecuteOptions.transaction_isolation:type_name -> query.ExecuteOptions.TransactionIsolation @@ -7344,144 +7515,145 @@ var file_query_proto_depIdxs = []int32{ 10, // 10: query.ExecuteOptions.transaction_access_mode:type_name -> query.ExecuteOptions.TransactionAccessMode 11, // 11: query.ExecuteOptions.load_balance_policy:type_name -> query.ExecuteOptions.LoadBalancePolicy 20, // 12: query.ExecuteOptions.tablet_info_to_display:type_name -> query.TabletInfoToDisplay - 89, // 13: query.TabletInfoToDisplay.tablet_alias:type_name -> topodata.TabletAlias - 88, // 14: query.TabletInfoToDisplay.tablet_type:type_name -> topodata.TabletType + 91, // 13: query.TabletInfoToDisplay.tablet_alias:type_name -> topodata.TabletAlias + 90, // 14: query.TabletInfoToDisplay.tablet_type:type_name -> topodata.TabletType 2, // 15: query.Field.type:type_name -> query.Type 21, // 16: query.QueryResult.fields:type_name -> query.Field 22, // 17: query.QueryResult.rows:type_name -> query.Row - 86, // 18: query.StreamEvent.statements:type_name -> query.StreamEvent.Statement + 88, // 18: query.StreamEvent.statements:type_name -> query.StreamEvent.Statement 15, // 19: query.StreamEvent.event_token:type_name -> query.EventToken - 90, // 20: query.ExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID + 92, // 20: query.ExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID 14, // 21: query.ExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID 13, // 22: query.ExecuteRequest.target:type_name -> query.Target 18, // 23: query.ExecuteRequest.query:type_name -> query.BoundQuery 19, // 24: query.ExecuteRequest.options:type_name -> query.ExecuteOptions 23, // 25: query.ExecuteResponse.result:type_name -> query.QueryResult - 91, // 26: query.ResultWithError.error:type_name -> vtrpc.RPCError + 93, // 26: query.ResultWithError.error:type_name -> vtrpc.RPCError 23, // 27: query.ResultWithError.result:type_name -> query.QueryResult - 90, // 28: query.StreamExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID + 92, // 28: query.StreamExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID 14, // 29: query.StreamExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID 13, // 30: query.StreamExecuteRequest.target:type_name -> query.Target 18, // 31: query.StreamExecuteRequest.query:type_name -> query.BoundQuery 19, // 32: query.StreamExecuteRequest.options:type_name -> query.ExecuteOptions 23, // 33: query.StreamExecuteResponse.result:type_name -> query.QueryResult - 90, // 34: query.BeginRequest.effective_caller_id:type_name -> vtrpc.CallerID + 92, // 34: query.BeginRequest.effective_caller_id:type_name -> vtrpc.CallerID 14, // 35: query.BeginRequest.immediate_caller_id:type_name -> query.VTGateCallerID 13, // 36: query.BeginRequest.target:type_name -> query.Target 19, // 37: query.BeginRequest.options:type_name -> query.ExecuteOptions - 89, // 38: query.BeginResponse.tablet_alias:type_name -> topodata.TabletAlias - 90, // 39: query.CommitRequest.effective_caller_id:type_name -> vtrpc.CallerID + 91, // 38: query.BeginResponse.tablet_alias:type_name -> topodata.TabletAlias + 92, // 39: query.CommitRequest.effective_caller_id:type_name -> vtrpc.CallerID 14, // 40: query.CommitRequest.immediate_caller_id:type_name -> query.VTGateCallerID 13, // 41: query.CommitRequest.target:type_name -> query.Target - 90, // 42: query.RollbackRequest.effective_caller_id:type_name -> vtrpc.CallerID + 92, // 42: query.RollbackRequest.effective_caller_id:type_name -> vtrpc.CallerID 14, // 43: query.RollbackRequest.immediate_caller_id:type_name -> query.VTGateCallerID 13, // 44: query.RollbackRequest.target:type_name -> query.Target - 90, // 45: query.PrepareRequest.effective_caller_id:type_name -> vtrpc.CallerID + 92, // 45: query.PrepareRequest.effective_caller_id:type_name -> vtrpc.CallerID 14, // 46: query.PrepareRequest.immediate_caller_id:type_name -> query.VTGateCallerID 13, // 47: query.PrepareRequest.target:type_name -> query.Target - 90, // 48: query.CommitPreparedRequest.effective_caller_id:type_name -> vtrpc.CallerID + 92, // 48: query.CommitPreparedRequest.effective_caller_id:type_name -> vtrpc.CallerID 14, // 49: query.CommitPreparedRequest.immediate_caller_id:type_name -> query.VTGateCallerID 13, // 50: query.CommitPreparedRequest.target:type_name -> query.Target - 90, // 51: query.RollbackPreparedRequest.effective_caller_id:type_name -> vtrpc.CallerID + 92, // 51: query.RollbackPreparedRequest.effective_caller_id:type_name -> vtrpc.CallerID 14, // 52: query.RollbackPreparedRequest.immediate_caller_id:type_name -> query.VTGateCallerID 13, // 53: query.RollbackPreparedRequest.target:type_name -> query.Target - 90, // 54: query.CreateTransactionRequest.effective_caller_id:type_name -> vtrpc.CallerID + 92, // 54: query.CreateTransactionRequest.effective_caller_id:type_name -> vtrpc.CallerID 14, // 55: query.CreateTransactionRequest.immediate_caller_id:type_name -> query.VTGateCallerID 13, // 56: query.CreateTransactionRequest.target:type_name -> query.Target 13, // 57: query.CreateTransactionRequest.participants:type_name -> query.Target - 90, // 58: query.StartCommitRequest.effective_caller_id:type_name -> vtrpc.CallerID + 92, // 58: query.StartCommitRequest.effective_caller_id:type_name -> vtrpc.CallerID 14, // 59: query.StartCommitRequest.immediate_caller_id:type_name -> query.VTGateCallerID 13, // 60: query.StartCommitRequest.target:type_name -> query.Target - 90, // 61: query.SetRollbackRequest.effective_caller_id:type_name -> vtrpc.CallerID + 92, // 61: query.SetRollbackRequest.effective_caller_id:type_name -> vtrpc.CallerID 14, // 62: query.SetRollbackRequest.immediate_caller_id:type_name -> query.VTGateCallerID 13, // 63: query.SetRollbackRequest.target:type_name -> query.Target - 90, // 64: query.ConcludeTransactionRequest.effective_caller_id:type_name -> vtrpc.CallerID + 92, // 64: query.ConcludeTransactionRequest.effective_caller_id:type_name -> vtrpc.CallerID 14, // 65: query.ConcludeTransactionRequest.immediate_caller_id:type_name -> query.VTGateCallerID 13, // 66: query.ConcludeTransactionRequest.target:type_name -> query.Target - 90, // 67: query.ReadTransactionRequest.effective_caller_id:type_name -> vtrpc.CallerID + 92, // 67: query.ReadTransactionRequest.effective_caller_id:type_name -> vtrpc.CallerID 14, // 68: query.ReadTransactionRequest.immediate_caller_id:type_name -> query.VTGateCallerID 13, // 69: query.ReadTransactionRequest.target:type_name -> query.Target 76, // 70: query.ReadTransactionResponse.metadata:type_name -> query.TransactionMetadata - 90, // 71: query.BeginExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID + 92, // 71: query.BeginExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID 14, // 72: query.BeginExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID 13, // 73: query.BeginExecuteRequest.target:type_name -> query.Target 18, // 74: query.BeginExecuteRequest.query:type_name -> query.BoundQuery 19, // 75: query.BeginExecuteRequest.options:type_name -> query.ExecuteOptions - 91, // 76: query.BeginExecuteResponse.error:type_name -> vtrpc.RPCError + 93, // 76: query.BeginExecuteResponse.error:type_name -> vtrpc.RPCError 23, // 77: query.BeginExecuteResponse.result:type_name -> query.QueryResult - 89, // 78: query.BeginExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias - 90, // 79: query.BeginStreamExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID + 91, // 78: query.BeginExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias + 92, // 79: query.BeginStreamExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID 14, // 80: query.BeginStreamExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID 13, // 81: query.BeginStreamExecuteRequest.target:type_name -> query.Target 18, // 82: query.BeginStreamExecuteRequest.query:type_name -> query.BoundQuery 19, // 83: query.BeginStreamExecuteRequest.options:type_name -> query.ExecuteOptions - 91, // 84: query.BeginStreamExecuteResponse.error:type_name -> vtrpc.RPCError + 93, // 84: query.BeginStreamExecuteResponse.error:type_name -> vtrpc.RPCError 23, // 85: query.BeginStreamExecuteResponse.result:type_name -> query.QueryResult - 89, // 86: query.BeginStreamExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias - 90, // 87: query.MessageStreamRequest.effective_caller_id:type_name -> vtrpc.CallerID + 91, // 86: query.BeginStreamExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias + 92, // 87: query.MessageStreamRequest.effective_caller_id:type_name -> vtrpc.CallerID 14, // 88: query.MessageStreamRequest.immediate_caller_id:type_name -> query.VTGateCallerID 13, // 89: query.MessageStreamRequest.target:type_name -> query.Target 23, // 90: query.MessageStreamResponse.result:type_name -> query.QueryResult - 90, // 91: query.MessageAckRequest.effective_caller_id:type_name -> vtrpc.CallerID + 92, // 91: query.MessageAckRequest.effective_caller_id:type_name -> vtrpc.CallerID 14, // 92: query.MessageAckRequest.immediate_caller_id:type_name -> query.VTGateCallerID 13, // 93: query.MessageAckRequest.target:type_name -> query.Target 16, // 94: query.MessageAckRequest.ids:type_name -> query.Value 23, // 95: query.MessageAckResponse.result:type_name -> query.QueryResult - 90, // 96: query.ReserveExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID + 92, // 96: query.ReserveExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID 14, // 97: query.ReserveExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID 13, // 98: query.ReserveExecuteRequest.target:type_name -> query.Target 18, // 99: query.ReserveExecuteRequest.query:type_name -> query.BoundQuery 19, // 100: query.ReserveExecuteRequest.options:type_name -> query.ExecuteOptions - 91, // 101: query.ReserveExecuteResponse.error:type_name -> vtrpc.RPCError + 93, // 101: query.ReserveExecuteResponse.error:type_name -> vtrpc.RPCError 23, // 102: query.ReserveExecuteResponse.result:type_name -> query.QueryResult - 89, // 103: query.ReserveExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias - 90, // 104: query.ReserveStreamExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID + 91, // 103: query.ReserveExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias + 92, // 104: query.ReserveStreamExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID 14, // 105: query.ReserveStreamExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID 13, // 106: query.ReserveStreamExecuteRequest.target:type_name -> query.Target 18, // 107: query.ReserveStreamExecuteRequest.query:type_name -> query.BoundQuery 19, // 108: query.ReserveStreamExecuteRequest.options:type_name -> query.ExecuteOptions - 91, // 109: query.ReserveStreamExecuteResponse.error:type_name -> vtrpc.RPCError + 93, // 109: query.ReserveStreamExecuteResponse.error:type_name -> vtrpc.RPCError 23, // 110: query.ReserveStreamExecuteResponse.result:type_name -> query.QueryResult - 89, // 111: query.ReserveStreamExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias - 90, // 112: query.ReserveBeginExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID + 91, // 111: query.ReserveStreamExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias + 92, // 112: query.ReserveBeginExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID 14, // 113: query.ReserveBeginExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID 13, // 114: query.ReserveBeginExecuteRequest.target:type_name -> query.Target 18, // 115: query.ReserveBeginExecuteRequest.query:type_name -> query.BoundQuery 19, // 116: query.ReserveBeginExecuteRequest.options:type_name -> query.ExecuteOptions - 91, // 117: query.ReserveBeginExecuteResponse.error:type_name -> vtrpc.RPCError + 93, // 117: query.ReserveBeginExecuteResponse.error:type_name -> vtrpc.RPCError 23, // 118: query.ReserveBeginExecuteResponse.result:type_name -> query.QueryResult - 89, // 119: query.ReserveBeginExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias - 90, // 120: query.ReserveBeginStreamExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID + 91, // 119: query.ReserveBeginExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias + 92, // 120: query.ReserveBeginStreamExecuteRequest.effective_caller_id:type_name -> vtrpc.CallerID 14, // 121: query.ReserveBeginStreamExecuteRequest.immediate_caller_id:type_name -> query.VTGateCallerID 13, // 122: query.ReserveBeginStreamExecuteRequest.target:type_name -> query.Target 18, // 123: query.ReserveBeginStreamExecuteRequest.query:type_name -> query.BoundQuery 19, // 124: query.ReserveBeginStreamExecuteRequest.options:type_name -> query.ExecuteOptions - 91, // 125: query.ReserveBeginStreamExecuteResponse.error:type_name -> vtrpc.RPCError + 93, // 125: query.ReserveBeginStreamExecuteResponse.error:type_name -> vtrpc.RPCError 23, // 126: query.ReserveBeginStreamExecuteResponse.result:type_name -> query.QueryResult - 89, // 127: query.ReserveBeginStreamExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias - 90, // 128: query.ReleaseRequest.effective_caller_id:type_name -> vtrpc.CallerID + 91, // 127: query.ReserveBeginStreamExecuteResponse.tablet_alias:type_name -> topodata.TabletAlias + 92, // 128: query.ReleaseRequest.effective_caller_id:type_name -> vtrpc.CallerID 14, // 129: query.ReleaseRequest.immediate_caller_id:type_name -> query.VTGateCallerID 13, // 130: query.ReleaseRequest.target:type_name -> query.Target 72, // 131: query.RealtimeStats.mysql_thread_stats:type_name -> query.MysqlThreadsStats 13, // 132: query.StreamHealthResponse.target:type_name -> query.Target 73, // 133: query.StreamHealthResponse.realtime_stats:type_name -> query.RealtimeStats - 89, // 134: query.StreamHealthResponse.tablet_alias:type_name -> topodata.TabletAlias + 91, // 134: query.StreamHealthResponse.tablet_alias:type_name -> topodata.TabletAlias 3, // 135: query.TransactionMetadata.state:type_name -> query.TransactionState 13, // 136: query.TransactionMetadata.participants:type_name -> query.Target 13, // 137: query.GetSchemaRequest.target:type_name -> query.Target 4, // 138: query.GetSchemaRequest.table_type:type_name -> query.SchemaTableType - 87, // 139: query.GetSchemaResponse.table_definition:type_name -> query.GetSchemaResponse.TableDefinitionEntry - 91, // 140: query.SetFailPointResponse.error:type_name -> vtrpc.RPCError + 89, // 139: query.GetSchemaResponse.table_definition:type_name -> query.GetSchemaResponse.TableDefinitionEntry + 93, // 140: query.SetFailPointResponse.error:type_name -> vtrpc.RPCError 13, // 141: query.DropSchemaRequest.target:type_name -> query.Target - 17, // 142: query.BoundQuery.BindVariablesEntry.value:type_name -> query.BindVariable - 12, // 143: query.StreamEvent.Statement.category:type_name -> query.StreamEvent.Statement.Category - 21, // 144: query.StreamEvent.Statement.primary_key_fields:type_name -> query.Field - 22, // 145: query.StreamEvent.Statement.primary_key_values:type_name -> query.Row - 146, // [146:146] is the sub-list for method output_type - 146, // [146:146] is the sub-list for method input_type - 146, // [146:146] is the sub-list for extension type_name - 146, // [146:146] is the sub-list for extension extendee - 0, // [0:146] is the sub-list for field type_name + 23, // 142: query.DMLJobResponse.result:type_name -> query.QueryResult + 17, // 143: query.BoundQuery.BindVariablesEntry.value:type_name -> query.BindVariable + 12, // 144: query.StreamEvent.Statement.category:type_name -> query.StreamEvent.Statement.Category + 21, // 145: query.StreamEvent.Statement.primary_key_fields:type_name -> query.Field + 22, // 146: query.StreamEvent.Statement.primary_key_values:type_name -> query.Row + 147, // [147:147] is the sub-list for method output_type + 147, // [147:147] is the sub-list for method input_type + 147, // [147:147] is the sub-list for extension type_name + 147, // [147:147] is the sub-list for extension extendee + 0, // [0:147] is the sub-list for field type_name } func init() { file_query_proto_init() } @@ -8354,7 +8526,31 @@ func file_query_proto_init() { return nil } } + file_query_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DMLJobRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } file_query_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DMLJobResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_query_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StreamEvent_Statement); i { case 0: return &v.state @@ -8373,7 +8569,7 @@ func file_query_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_query_proto_rawDesc, NumEnums: 13, - NumMessages: 75, + NumMessages: 77, NumExtensions: 0, NumServices: 0, }, diff --git a/go/vt/proto/query/query_vtproto.pb.go b/go/vt/proto/query/query_vtproto.pb.go index 36190d2825..b1195c2ae9 100644 --- a/go/vt/proto/query/query_vtproto.pb.go +++ b/go/vt/proto/query/query_vtproto.pb.go @@ -4677,6 +4677,140 @@ func (m *ReloadExecResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *DMLJobRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DMLJobRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *DMLJobRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.PostponeLaunch { + i-- + if m.PostponeLaunch { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x48 + } + if m.AutoRetry { + i-- + if m.AutoRetry { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x40 + } + if m.SubtaskRows != 0 { + i = encodeVarint(dAtA, i, uint64(m.SubtaskRows)) + i-- + dAtA[i] = 0x38 + } + if m.Timegap != 0 { + i = encodeVarint(dAtA, i, uint64(m.Timegap)) + i-- + dAtA[i] = 0x30 + } + if len(m.RelatedSchema) > 0 { + i -= len(m.RelatedSchema) + copy(dAtA[i:], m.RelatedSchema) + i = encodeVarint(dAtA, i, uint64(len(m.RelatedSchema))) + i-- + dAtA[i] = 0x22 + } + if len(m.Sql) > 0 { + i -= len(m.Sql) + copy(dAtA[i:], m.Sql) + i = encodeVarint(dAtA, i, uint64(len(m.Sql))) + i-- + dAtA[i] = 0x1a + } + if len(m.JobUuid) > 0 { + i -= len(m.JobUuid) + copy(dAtA[i:], m.JobUuid) + i = encodeVarint(dAtA, i, uint64(len(m.JobUuid))) + i-- + dAtA[i] = 0x12 + } + if len(m.Cmd) > 0 { + i -= len(m.Cmd) + copy(dAtA[i:], m.Cmd) + i = encodeVarint(dAtA, i, uint64(len(m.Cmd))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DMLJobResponse) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DMLJobResponse) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *DMLJobResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if m.Result != nil { + size, err := m.Result.MarshalToSizedBufferVT(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarint(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func encodeVarint(dAtA []byte, offset int, v uint64) int { offset -= sov(v) base := offset @@ -6493,6 +6627,58 @@ func (m *ReloadExecResponse) SizeVT() (n int) { return n } +func (m *DMLJobRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Cmd) + if l > 0 { + n += 1 + l + sov(uint64(l)) + } + l = len(m.JobUuid) + if l > 0 { + n += 1 + l + sov(uint64(l)) + } + l = len(m.Sql) + if l > 0 { + n += 1 + l + sov(uint64(l)) + } + l = len(m.RelatedSchema) + if l > 0 { + n += 1 + l + sov(uint64(l)) + } + if m.Timegap != 0 { + n += 1 + sov(uint64(m.Timegap)) + } + if m.SubtaskRows != 0 { + n += 1 + sov(uint64(m.SubtaskRows)) + } + if m.AutoRetry { + n += 2 + } + if m.PostponeLaunch { + n += 2 + } + n += len(m.unknownFields) + return n +} + +func (m *DMLJobResponse) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Result != nil { + l = m.Result.SizeVT() + n += 1 + l + sov(uint64(l)) + } + n += len(m.unknownFields) + return n +} + func sov(x uint64) (n int) { return (bits.Len64(x|1) + 6) / 7 } @@ -18519,6 +18705,350 @@ func (m *ReloadExecResponse) UnmarshalVT(dAtA []byte) error { } return nil } +func (m *DMLJobRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DMLJobRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DMLJobRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Cmd", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Cmd = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field JobUuid", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.JobUuid = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sql", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Sql = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RelatedSchema", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RelatedSchema = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Timegap", wireType) + } + m.Timegap = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Timegap |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SubtaskRows", wireType) + } + m.SubtaskRows = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.SubtaskRows |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AutoRetry", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.AutoRetry = bool(v != 0) + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PostponeLaunch", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.PostponeLaunch = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DMLJobResponse) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DMLJobResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DMLJobResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Result", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Result == nil { + m.Result = &QueryResult{} + } + if err := m.Result.UnmarshalVT(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skip(dAtA []byte) (n int, err error) { l := len(dAtA) diff --git a/go/vt/proto/queryservice/queryservice.pb.go b/go/vt/proto/queryservice/queryservice.pb.go index 3a763e4d89..98dacf1b64 100644 --- a/go/vt/proto/queryservice/queryservice.pb.go +++ b/go/vt/proto/queryservice/queryservice.pb.go @@ -21,7 +21,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: queryservice.proto @@ -49,7 +49,7 @@ var file_queryservice_proto_rawDesc = []byte{ 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x71, 0x75, 0x65, 0x72, 0x79, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x1a, 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x10, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x32, 0xeb, 0x12, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x43, 0x0a, 0x0a, 0x52, + 0x6f, 0x32, 0xaa, 0x13, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x43, 0x0a, 0x0a, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x78, 0x65, 0x63, 0x12, 0x18, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x6c, 0x6f, @@ -199,11 +199,15 @@ var file_queryservice_proto_rawDesc = []byte{ 0x6f, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x18, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, - 0x2b, 0x5a, 0x29, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, - 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x3d, 0x0a, 0x0c, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x4d, 0x4c, 0x4a, 0x6f, 0x62, 0x12, + 0x14, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x4d, 0x4c, 0x4a, 0x6f, 0x62, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x4d, + 0x4c, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x2b, + 0x5a, 0x29, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, + 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var file_queryservice_proto_goTypes = []interface{}{ @@ -237,36 +241,38 @@ var file_queryservice_proto_goTypes = []interface{}{ (*query.GetSchemaRequest)(nil), // 27: query.GetSchemaRequest (*query.SetFailPointRequest)(nil), // 28: query.SetFailPointRequest (*query.DropSchemaRequest)(nil), // 29: query.DropSchemaRequest - (*query.ReloadExecResponse)(nil), // 30: query.ReloadExecResponse - (*query.ExecuteResponse)(nil), // 31: query.ExecuteResponse - (*query.StreamExecuteResponse)(nil), // 32: query.StreamExecuteResponse - (*query.BeginResponse)(nil), // 33: query.BeginResponse - (*query.CommitResponse)(nil), // 34: query.CommitResponse - (*query.RollbackResponse)(nil), // 35: query.RollbackResponse - (*query.PrepareResponse)(nil), // 36: query.PrepareResponse - (*query.CommitPreparedResponse)(nil), // 37: query.CommitPreparedResponse - (*query.RollbackPreparedResponse)(nil), // 38: query.RollbackPreparedResponse - (*query.CreateTransactionResponse)(nil), // 39: query.CreateTransactionResponse - (*query.StartCommitResponse)(nil), // 40: query.StartCommitResponse - (*query.SetRollbackResponse)(nil), // 41: query.SetRollbackResponse - (*query.ConcludeTransactionResponse)(nil), // 42: query.ConcludeTransactionResponse - (*query.ReadTransactionResponse)(nil), // 43: query.ReadTransactionResponse - (*query.BeginExecuteResponse)(nil), // 44: query.BeginExecuteResponse - (*query.BeginStreamExecuteResponse)(nil), // 45: query.BeginStreamExecuteResponse - (*query.MessageStreamResponse)(nil), // 46: query.MessageStreamResponse - (*query.MessageAckResponse)(nil), // 47: query.MessageAckResponse - (*query.ReserveExecuteResponse)(nil), // 48: query.ReserveExecuteResponse - (*query.ReserveBeginExecuteResponse)(nil), // 49: query.ReserveBeginExecuteResponse - (*query.ReserveStreamExecuteResponse)(nil), // 50: query.ReserveStreamExecuteResponse - (*query.ReserveBeginStreamExecuteResponse)(nil), // 51: query.ReserveBeginStreamExecuteResponse - (*query.ReleaseResponse)(nil), // 52: query.ReleaseResponse - (*query.StreamHealthResponse)(nil), // 53: query.StreamHealthResponse - (*binlogdata.VStreamResponse)(nil), // 54: binlogdata.VStreamResponse - (*binlogdata.VStreamRowsResponse)(nil), // 55: binlogdata.VStreamRowsResponse - (*binlogdata.VStreamResultsResponse)(nil), // 56: binlogdata.VStreamResultsResponse - (*query.GetSchemaResponse)(nil), // 57: query.GetSchemaResponse - (*query.SetFailPointResponse)(nil), // 58: query.SetFailPointResponse - (*query.DropSchemaResponse)(nil), // 59: query.DropSchemaResponse + (*query.DMLJobRequest)(nil), // 30: query.DMLJobRequest + (*query.ReloadExecResponse)(nil), // 31: query.ReloadExecResponse + (*query.ExecuteResponse)(nil), // 32: query.ExecuteResponse + (*query.StreamExecuteResponse)(nil), // 33: query.StreamExecuteResponse + (*query.BeginResponse)(nil), // 34: query.BeginResponse + (*query.CommitResponse)(nil), // 35: query.CommitResponse + (*query.RollbackResponse)(nil), // 36: query.RollbackResponse + (*query.PrepareResponse)(nil), // 37: query.PrepareResponse + (*query.CommitPreparedResponse)(nil), // 38: query.CommitPreparedResponse + (*query.RollbackPreparedResponse)(nil), // 39: query.RollbackPreparedResponse + (*query.CreateTransactionResponse)(nil), // 40: query.CreateTransactionResponse + (*query.StartCommitResponse)(nil), // 41: query.StartCommitResponse + (*query.SetRollbackResponse)(nil), // 42: query.SetRollbackResponse + (*query.ConcludeTransactionResponse)(nil), // 43: query.ConcludeTransactionResponse + (*query.ReadTransactionResponse)(nil), // 44: query.ReadTransactionResponse + (*query.BeginExecuteResponse)(nil), // 45: query.BeginExecuteResponse + (*query.BeginStreamExecuteResponse)(nil), // 46: query.BeginStreamExecuteResponse + (*query.MessageStreamResponse)(nil), // 47: query.MessageStreamResponse + (*query.MessageAckResponse)(nil), // 48: query.MessageAckResponse + (*query.ReserveExecuteResponse)(nil), // 49: query.ReserveExecuteResponse + (*query.ReserveBeginExecuteResponse)(nil), // 50: query.ReserveBeginExecuteResponse + (*query.ReserveStreamExecuteResponse)(nil), // 51: query.ReserveStreamExecuteResponse + (*query.ReserveBeginStreamExecuteResponse)(nil), // 52: query.ReserveBeginStreamExecuteResponse + (*query.ReleaseResponse)(nil), // 53: query.ReleaseResponse + (*query.StreamHealthResponse)(nil), // 54: query.StreamHealthResponse + (*binlogdata.VStreamResponse)(nil), // 55: binlogdata.VStreamResponse + (*binlogdata.VStreamRowsResponse)(nil), // 56: binlogdata.VStreamRowsResponse + (*binlogdata.VStreamResultsResponse)(nil), // 57: binlogdata.VStreamResultsResponse + (*query.GetSchemaResponse)(nil), // 58: query.GetSchemaResponse + (*query.SetFailPointResponse)(nil), // 59: query.SetFailPointResponse + (*query.DropSchemaResponse)(nil), // 60: query.DropSchemaResponse + (*query.DMLJobResponse)(nil), // 61: query.DMLJobResponse } var file_queryservice_proto_depIdxs = []int32{ 0, // 0: queryservice.Query.ReloadExec:input_type -> query.ReloadExecRequest @@ -300,39 +306,41 @@ var file_queryservice_proto_depIdxs = []int32{ 27, // 28: queryservice.Query.GetSchema:input_type -> query.GetSchemaRequest 28, // 29: queryservice.Query.SetFailPoint:input_type -> query.SetFailPointRequest 29, // 30: queryservice.Query.DropSchema:input_type -> query.DropSchemaRequest - 30, // 31: queryservice.Query.ReloadExec:output_type -> query.ReloadExecResponse - 31, // 32: queryservice.Query.ExecuteInternal:output_type -> query.ExecuteResponse - 31, // 33: queryservice.Query.Execute:output_type -> query.ExecuteResponse - 32, // 34: queryservice.Query.StreamExecute:output_type -> query.StreamExecuteResponse - 33, // 35: queryservice.Query.Begin:output_type -> query.BeginResponse - 34, // 36: queryservice.Query.Commit:output_type -> query.CommitResponse - 35, // 37: queryservice.Query.Rollback:output_type -> query.RollbackResponse - 36, // 38: queryservice.Query.Prepare:output_type -> query.PrepareResponse - 37, // 39: queryservice.Query.CommitPrepared:output_type -> query.CommitPreparedResponse - 38, // 40: queryservice.Query.RollbackPrepared:output_type -> query.RollbackPreparedResponse - 39, // 41: queryservice.Query.CreateTransaction:output_type -> query.CreateTransactionResponse - 40, // 42: queryservice.Query.StartCommit:output_type -> query.StartCommitResponse - 41, // 43: queryservice.Query.SetRollback:output_type -> query.SetRollbackResponse - 42, // 44: queryservice.Query.ConcludeTransaction:output_type -> query.ConcludeTransactionResponse - 43, // 45: queryservice.Query.ReadTransaction:output_type -> query.ReadTransactionResponse - 44, // 46: queryservice.Query.BeginExecute:output_type -> query.BeginExecuteResponse - 45, // 47: queryservice.Query.BeginStreamExecute:output_type -> query.BeginStreamExecuteResponse - 46, // 48: queryservice.Query.MessageStream:output_type -> query.MessageStreamResponse - 47, // 49: queryservice.Query.MessageAck:output_type -> query.MessageAckResponse - 48, // 50: queryservice.Query.ReserveExecute:output_type -> query.ReserveExecuteResponse - 49, // 51: queryservice.Query.ReserveBeginExecute:output_type -> query.ReserveBeginExecuteResponse - 50, // 52: queryservice.Query.ReserveStreamExecute:output_type -> query.ReserveStreamExecuteResponse - 51, // 53: queryservice.Query.ReserveBeginStreamExecute:output_type -> query.ReserveBeginStreamExecuteResponse - 52, // 54: queryservice.Query.Release:output_type -> query.ReleaseResponse - 53, // 55: queryservice.Query.StreamHealth:output_type -> query.StreamHealthResponse - 54, // 56: queryservice.Query.VStream:output_type -> binlogdata.VStreamResponse - 55, // 57: queryservice.Query.VStreamRows:output_type -> binlogdata.VStreamRowsResponse - 56, // 58: queryservice.Query.VStreamResults:output_type -> binlogdata.VStreamResultsResponse - 57, // 59: queryservice.Query.GetSchema:output_type -> query.GetSchemaResponse - 58, // 60: queryservice.Query.SetFailPoint:output_type -> query.SetFailPointResponse - 59, // 61: queryservice.Query.DropSchema:output_type -> query.DropSchemaResponse - 31, // [31:62] is the sub-list for method output_type - 0, // [0:31] is the sub-list for method input_type + 30, // 31: queryservice.Query.HandleDMLJob:input_type -> query.DMLJobRequest + 31, // 32: queryservice.Query.ReloadExec:output_type -> query.ReloadExecResponse + 32, // 33: queryservice.Query.ExecuteInternal:output_type -> query.ExecuteResponse + 32, // 34: queryservice.Query.Execute:output_type -> query.ExecuteResponse + 33, // 35: queryservice.Query.StreamExecute:output_type -> query.StreamExecuteResponse + 34, // 36: queryservice.Query.Begin:output_type -> query.BeginResponse + 35, // 37: queryservice.Query.Commit:output_type -> query.CommitResponse + 36, // 38: queryservice.Query.Rollback:output_type -> query.RollbackResponse + 37, // 39: queryservice.Query.Prepare:output_type -> query.PrepareResponse + 38, // 40: queryservice.Query.CommitPrepared:output_type -> query.CommitPreparedResponse + 39, // 41: queryservice.Query.RollbackPrepared:output_type -> query.RollbackPreparedResponse + 40, // 42: queryservice.Query.CreateTransaction:output_type -> query.CreateTransactionResponse + 41, // 43: queryservice.Query.StartCommit:output_type -> query.StartCommitResponse + 42, // 44: queryservice.Query.SetRollback:output_type -> query.SetRollbackResponse + 43, // 45: queryservice.Query.ConcludeTransaction:output_type -> query.ConcludeTransactionResponse + 44, // 46: queryservice.Query.ReadTransaction:output_type -> query.ReadTransactionResponse + 45, // 47: queryservice.Query.BeginExecute:output_type -> query.BeginExecuteResponse + 46, // 48: queryservice.Query.BeginStreamExecute:output_type -> query.BeginStreamExecuteResponse + 47, // 49: queryservice.Query.MessageStream:output_type -> query.MessageStreamResponse + 48, // 50: queryservice.Query.MessageAck:output_type -> query.MessageAckResponse + 49, // 51: queryservice.Query.ReserveExecute:output_type -> query.ReserveExecuteResponse + 50, // 52: queryservice.Query.ReserveBeginExecute:output_type -> query.ReserveBeginExecuteResponse + 51, // 53: queryservice.Query.ReserveStreamExecute:output_type -> query.ReserveStreamExecuteResponse + 52, // 54: queryservice.Query.ReserveBeginStreamExecute:output_type -> query.ReserveBeginStreamExecuteResponse + 53, // 55: queryservice.Query.Release:output_type -> query.ReleaseResponse + 54, // 56: queryservice.Query.StreamHealth:output_type -> query.StreamHealthResponse + 55, // 57: queryservice.Query.VStream:output_type -> binlogdata.VStreamResponse + 56, // 58: queryservice.Query.VStreamRows:output_type -> binlogdata.VStreamRowsResponse + 57, // 59: queryservice.Query.VStreamResults:output_type -> binlogdata.VStreamResultsResponse + 58, // 60: queryservice.Query.GetSchema:output_type -> query.GetSchemaResponse + 59, // 61: queryservice.Query.SetFailPoint:output_type -> query.SetFailPointResponse + 60, // 62: queryservice.Query.DropSchema:output_type -> query.DropSchemaResponse + 61, // 63: queryservice.Query.HandleDMLJob:output_type -> query.DMLJobResponse + 32, // [32:64] is the sub-list for method output_type + 0, // [0:32] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name 0, // [0:0] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name diff --git a/go/vt/proto/queryservice/queryservice_grpc.pb.go b/go/vt/proto/queryservice/queryservice_grpc.pb.go index 481f24b425..c80c7b456a 100644 --- a/go/vt/proto/queryservice/queryservice_grpc.pb.go +++ b/go/vt/proto/queryservice/queryservice_grpc.pb.go @@ -90,6 +90,7 @@ type QueryClient interface { SetFailPoint(ctx context.Context, in *query.SetFailPointRequest, opts ...grpc.CallOption) (*query.SetFailPointResponse, error) // DropSchema drops the schema on the tablet and cleans up the relevant resources such as OnlineDDL and VReplication DropSchema(ctx context.Context, in *query.DropSchemaRequest, opts ...grpc.CallOption) (*query.DropSchemaResponse, error) + HandleDMLJob(ctx context.Context, in *query.DMLJobRequest, opts ...grpc.CallOption) (*query.DMLJobResponse, error) } type queryClient struct { @@ -609,6 +610,15 @@ func (c *queryClient) DropSchema(ctx context.Context, in *query.DropSchemaReques return out, nil } +func (c *queryClient) HandleDMLJob(ctx context.Context, in *query.DMLJobRequest, opts ...grpc.CallOption) (*query.DMLJobResponse, error) { + out := new(query.DMLJobResponse) + err := c.cc.Invoke(ctx, "/queryservice.Query/HandleDMLJob", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // QueryServer is the server API for Query service. // All implementations must embed UnimplementedQueryServer // for forward compatibility @@ -679,6 +689,7 @@ type QueryServer interface { SetFailPoint(context.Context, *query.SetFailPointRequest) (*query.SetFailPointResponse, error) // DropSchema drops the schema on the tablet and cleans up the relevant resources such as OnlineDDL and VReplication DropSchema(context.Context, *query.DropSchemaRequest) (*query.DropSchemaResponse, error) + HandleDMLJob(context.Context, *query.DMLJobRequest) (*query.DMLJobResponse, error) mustEmbedUnimplementedQueryServer() } @@ -779,6 +790,9 @@ func (UnimplementedQueryServer) SetFailPoint(context.Context, *query.SetFailPoin func (UnimplementedQueryServer) DropSchema(context.Context, *query.DropSchemaRequest) (*query.DropSchemaResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method DropSchema not implemented") } +func (UnimplementedQueryServer) HandleDMLJob(context.Context, *query.DMLJobRequest) (*query.DMLJobResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method HandleDMLJob not implemented") +} func (UnimplementedQueryServer) mustEmbedUnimplementedQueryServer() {} // UnsafeQueryServer may be embedded to opt out of forward compatibility for this service. @@ -1380,6 +1394,24 @@ func _Query_DropSchema_Handler(srv interface{}, ctx context.Context, dec func(in return interceptor(ctx, in, info, handler) } +func _Query_HandleDMLJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(query.DMLJobRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).HandleDMLJob(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/queryservice.Query/HandleDMLJob", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).HandleDMLJob(ctx, req.(*query.DMLJobRequest)) + } + return interceptor(ctx, in, info, handler) +} + // Query_ServiceDesc is the grpc.ServiceDesc for Query service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -1471,6 +1503,10 @@ var Query_ServiceDesc = grpc.ServiceDesc{ MethodName: "DropSchema", Handler: _Query_DropSchema_Handler, }, + { + MethodName: "HandleDMLJob", + Handler: _Query_HandleDMLJob_Handler, + }, }, Streams: []grpc.StreamDesc{ { diff --git a/go/vt/proto/replicationdata/replicationdata.pb.go b/go/vt/proto/replicationdata/replicationdata.pb.go index 55bcdf99b5..5b0969cc8c 100644 --- a/go/vt/proto/replicationdata/replicationdata.pb.go +++ b/go/vt/proto/replicationdata/replicationdata.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: replicationdata.proto diff --git a/go/vt/proto/tableacl/tableacl.pb.go b/go/vt/proto/tableacl/tableacl.pb.go index bdf863601b..3b26ace815 100644 --- a/go/vt/proto/tableacl/tableacl.pb.go +++ b/go/vt/proto/tableacl/tableacl.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: tableacl.proto diff --git a/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go b/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go index 9f8bd4421b..8edb4390d3 100644 --- a/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go +++ b/go/vt/proto/tabletmanagerdata/tabletmanagerdata.pb.go @@ -22,7 +22,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: tabletmanagerdata.proto diff --git a/go/vt/proto/tabletmanagerservice/tabletmanagerservice.pb.go b/go/vt/proto/tabletmanagerservice/tabletmanagerservice.pb.go index 1d5c48420a..772949c8c5 100644 --- a/go/vt/proto/tabletmanagerservice/tabletmanagerservice.pb.go +++ b/go/vt/proto/tabletmanagerservice/tabletmanagerservice.pb.go @@ -18,7 +18,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: tabletmanagerservice.proto diff --git a/go/vt/proto/throttlerdata/throttlerdata.pb.go b/go/vt/proto/throttlerdata/throttlerdata.pb.go index 8a52d2344f..fb12bc09ce 100644 --- a/go/vt/proto/throttlerdata/throttlerdata.pb.go +++ b/go/vt/proto/throttlerdata/throttlerdata.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: throttlerdata.proto diff --git a/go/vt/proto/throttlerservice/throttlerservice.pb.go b/go/vt/proto/throttlerservice/throttlerservice.pb.go index 83d6f506a7..9bca73e067 100644 --- a/go/vt/proto/throttlerservice/throttlerservice.pb.go +++ b/go/vt/proto/throttlerservice/throttlerservice.pb.go @@ -18,7 +18,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: throttlerservice.proto diff --git a/go/vt/proto/topodata/topodata.pb.go b/go/vt/proto/topodata/topodata.pb.go index 223402e4ce..a339a05bd8 100644 --- a/go/vt/proto/topodata/topodata.pb.go +++ b/go/vt/proto/topodata/topodata.pb.go @@ -20,7 +20,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: topodata.proto diff --git a/go/vt/proto/vschema/vschema.pb.go b/go/vt/proto/vschema/vschema.pb.go index e86c161368..6273229a60 100644 --- a/go/vt/proto/vschema/vschema.pb.go +++ b/go/vt/proto/vschema/vschema.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: vschema.proto diff --git a/go/vt/proto/vtadmin/vtadmin.pb.go b/go/vt/proto/vtadmin/vtadmin.pb.go index 8b961cce4a..6b1d56dc4a 100644 --- a/go/vt/proto/vtadmin/vtadmin.pb.go +++ b/go/vt/proto/vtadmin/vtadmin.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: vtadmin.proto diff --git a/go/vt/proto/vtctldata/vtctldata.pb.go b/go/vt/proto/vtctldata/vtctldata.pb.go index b9cffbb45f..32db91fb1c 100644 --- a/go/vt/proto/vtctldata/vtctldata.pb.go +++ b/go/vt/proto/vtctldata/vtctldata.pb.go @@ -22,7 +22,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: vtctldata.proto diff --git a/go/vt/proto/vtctlservice/vtctlservice.pb.go b/go/vt/proto/vtctlservice/vtctlservice.pb.go index 615622a97a..87d73df160 100644 --- a/go/vt/proto/vtctlservice/vtctlservice.pb.go +++ b/go/vt/proto/vtctlservice/vtctlservice.pb.go @@ -18,7 +18,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: vtctlservice.proto diff --git a/go/vt/proto/vtgate/vtgate.pb.go b/go/vt/proto/vtgate/vtgate.pb.go index f9a2025e0e..3366e406d9 100644 --- a/go/vt/proto/vtgate/vtgate.pb.go +++ b/go/vt/proto/vtgate/vtgate.pb.go @@ -21,7 +21,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: vtgate.proto diff --git a/go/vt/proto/vtgateservice/vtgateservice.pb.go b/go/vt/proto/vtgateservice/vtgateservice.pb.go index 7c7d049867..2008d486dc 100644 --- a/go/vt/proto/vtgateservice/vtgateservice.pb.go +++ b/go/vt/proto/vtgateservice/vtgateservice.pb.go @@ -18,7 +18,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: vtgateservice.proto diff --git a/go/vt/proto/vtrpc/vtrpc.pb.go b/go/vt/proto/vtrpc/vtrpc.pb.go index abde129b47..0c82dc34bf 100644 --- a/go/vt/proto/vtrpc/vtrpc.pb.go +++ b/go/vt/proto/vtrpc/vtrpc.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: vtrpc.proto diff --git a/go/vt/proto/vttest/vttest.pb.go b/go/vt/proto/vttest/vttest.pb.go index 0ab40f1692..4b4f269d38 100644 --- a/go/vt/proto/vttest/vttest.pb.go +++ b/go/vt/proto/vttest/vttest.pb.go @@ -41,7 +41,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: vttest.proto diff --git a/go/vt/proto/vttime/vttime.pb.go b/go/vt/proto/vttime/vttime.pb.go index 96ac33eecd..5cdf3f616c 100644 --- a/go/vt/proto/vttime/vttime.pb.go +++ b/go/vt/proto/vttime/vttime.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.30.0 // protoc v3.21.3 // source: vttime.proto diff --git a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql new file mode 100644 index 0000000000..8ac82d262d --- /dev/null +++ b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql @@ -0,0 +1,32 @@ +/* +Copyright 2023 The Vitess Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +-- todo newborn22 ,需要索引?,名字 +CREATE TABLE IF NOT EXISTS mysql.big_dml_jobs_table +( + `id` bigint unsigned NOT NULL AUTO_INCREMENT, + `job_uuid` varchar(64) NOT NULL, + `job_status` varchar(128) NOT NULL, + `message` varchar(2048) NULL DEFAULT NULL, + `dml_sql` varchar(256) NOT NULL, + `related_schema` varchar(256) NOT NULL, + `related_table` varchar(256) NOT NULL, + `timegap_in_ms` bigint NOT NULL , + `subtask_rows` bigint NOT NULL , + `subtask_sql` varchar(256) NULL DEFAULT NULL, + `affected_rows` bigint NOT NULL DEFAULT 0, + PRIMARY KEY (`id`) +) ENGINE = InnoDB diff --git a/go/vt/sqlparser/ast_format_fast.go b/go/vt/sqlparser/ast_format_fast.go index 50e5e0dcd6..e07e0f1f5a 100644 --- a/go/vt/sqlparser/ast_format_fast.go +++ b/go/vt/sqlparser/ast_format_fast.go @@ -24,7 +24,6 @@ package sqlparser import ( "fmt" - "vitess.io/vitess/go/sqltypes" ) diff --git a/go/vt/sqlparser/comments.go b/go/vt/sqlparser/comments.go index 3851f03574..cd04e674ee 100644 --- a/go/vt/sqlparser/comments.go +++ b/go/vt/sqlparser/comments.go @@ -57,6 +57,8 @@ const ( DirectiveConsolidator = "CONSOLIDATOR" // DirectiveRole specifies the node type for the query. possible values are: PRIMARY/REPLICA/RDONLY DirectiveRole = "ROLE" + + DirectiveDMLCMD = "DML_CMD" ) func isNonSpace(r rune) bool { @@ -431,3 +433,28 @@ func GetNodeType(stmt Statement) tabletpb.TabletType { } return tabletpb.TabletType_UNKNOWN } + +// todo newborn22,是否换成别的命令名字 +// 改成enum? +func GetDMLJobCmd(stmt Statement) string { + var comments *ParsedComments + switch stmt := stmt.(type) { + case *Select: + return "" + case *Insert: + return "" + case *Update: + comments = stmt.Comments + case *Delete: + comments = stmt.Comments + } + if comments == nil { + return "" + } + directives := comments.Directives() + str, isSet := directives.GetString(DirectiveDMLCMD, "") + if !isSet { + return "" + } + return str +} diff --git a/go/vt/sqlparser/constants.go b/go/vt/sqlparser/constants.go index 84a3c8e59f..97d84e2f53 100644 --- a/go/vt/sqlparser/constants.go +++ b/go/vt/sqlparser/constants.go @@ -855,6 +855,7 @@ const ( LastSeenGTID FailPoints SchemaMigration + DMLJobs ) // DropKeyType constants diff --git a/go/vt/sqlparser/keywords.go b/go/vt/sqlparser/keywords.go index 8d50432bd9..83d5ac9c66 100644 --- a/go/vt/sqlparser/keywords.go +++ b/go/vt/sqlparser/keywords.go @@ -679,6 +679,7 @@ var keywords = []keyword{ {"vitess_metadata", VITESS_METADATA}, {"vitess_migration", VITESS_MIGRATION}, {"vitess_migrations", VITESS_MIGRATIONS}, + {"dml_jobs", DML_JOBS}, {"vitess_replication_status", VITESS_REPLICATION_STATUS}, {"vitess_shards", VITESS_SHARDS}, {"vitess_tablets", VITESS_TABLETS}, diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index f0a8fe7173..1edaff0d97 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -1,8 +1,3 @@ -/* -Copyright ApeCloud, Inc. -Licensed under the Apache v2(found in the LICENSE file in the root directory). -*/ - // Code generated by goyacc -fo sql.go sql.y. DO NOT EDIT. //line sql.y:23 @@ -443,270 +438,271 @@ const VITESS_THROTTLED_APPS = 57735 const WORKLOAD = 57736 const LASTSEENGTID = 57737 const FAILPOINTS = 57738 -const NAMES = 57739 -const GLOBAL = 57740 -const SESSION = 57741 -const ISOLATION = 57742 -const LEVEL = 57743 -const READ = 57744 -const WRITE = 57745 -const ONLY = 57746 -const REPEATABLE = 57747 -const COMMITTED = 57748 -const UNCOMMITTED = 57749 -const SERIALIZABLE = 57750 -const FAST = 57751 -const QUICK = 57752 -const CHANGED = 57753 -const MEDIUM = 57754 -const CURRENT_TIMESTAMP = 57755 -const DATABASE = 57756 -const CURRENT_DATE = 57757 -const NOW = 57758 -const CURRENT_TIME = 57759 -const LOCALTIME = 57760 -const LOCALTIMESTAMP = 57761 -const CURRENT_USER = 57762 -const UTC_DATE = 57763 -const UTC_TIME = 57764 -const UTC_TIMESTAMP = 57765 -const DAY = 57766 -const DAY_HOUR = 57767 -const DAY_MICROSECOND = 57768 -const DAY_MINUTE = 57769 -const DAY_SECOND = 57770 -const HOUR = 57771 -const HOUR_MICROSECOND = 57772 -const HOUR_MINUTE = 57773 -const HOUR_SECOND = 57774 -const MICROSECOND = 57775 -const MINUTE = 57776 -const MINUTE_MICROSECOND = 57777 -const MINUTE_SECOND = 57778 -const MONTH = 57779 -const QUARTER = 57780 -const SECOND = 57781 -const SECOND_MICROSECOND = 57782 -const YEAR_MONTH = 57783 -const WEEK = 57784 -const REPLACE = 57785 -const CONVERT = 57786 -const CAST = 57787 -const SUBSTR = 57788 -const SUBSTRING = 57789 -const SEPARATOR = 57790 -const TIMESTAMPADD = 57791 -const TIMESTAMPDIFF = 57792 -const WEIGHT_STRING = 57793 -const LTRIM = 57794 -const RTRIM = 57795 -const TRIM = 57796 -const JSON_ARRAY = 57797 -const JSON_OBJECT = 57798 -const JSON_QUOTE = 57799 -const JSON_DEPTH = 57800 -const JSON_TYPE = 57801 -const JSON_LENGTH = 57802 -const JSON_VALID = 57803 -const JSON_ARRAY_APPEND = 57804 -const JSON_ARRAY_INSERT = 57805 -const JSON_INSERT = 57806 -const JSON_MERGE = 57807 -const JSON_MERGE_PATCH = 57808 -const JSON_MERGE_PRESERVE = 57809 -const JSON_REMOVE = 57810 -const JSON_REPLACE = 57811 -const JSON_SET = 57812 -const JSON_UNQUOTE = 57813 -const COUNT = 57814 -const AVG = 57815 -const MAX = 57816 -const MIN = 57817 -const SUM = 57818 -const GROUP_CONCAT = 57819 -const BIT_AND = 57820 -const BIT_OR = 57821 -const BIT_XOR = 57822 -const STD = 57823 -const STDDEV = 57824 -const STDDEV_POP = 57825 -const STDDEV_SAMP = 57826 -const VAR_POP = 57827 -const VAR_SAMP = 57828 -const VARIANCE = 57829 -const REGEXP_INSTR = 57830 -const REGEXP_LIKE = 57831 -const REGEXP_REPLACE = 57832 -const REGEXP_SUBSTR = 57833 -const ExtractValue = 57834 -const UpdateXML = 57835 -const GET_LOCK = 57836 -const RELEASE_LOCK = 57837 -const RELEASE_ALL_LOCKS = 57838 -const IS_FREE_LOCK = 57839 -const IS_USED_LOCK = 57840 -const LOCATE = 57841 -const POSITION = 57842 -const MATCH = 57843 -const AGAINST = 57844 -const BOOLEAN = 57845 -const LANGUAGE = 57846 -const WITH = 57847 -const QUERY = 57848 -const EXPANSION = 57849 -const WITHOUT = 57850 -const VALIDATION = 57851 -const UNUSED = 57852 -const ARRAY = 57853 -const BYTE = 57854 -const CUME_DIST = 57855 -const DESCRIPTION = 57856 -const DENSE_RANK = 57857 -const EMPTY = 57858 -const EXCEPT = 57859 -const FIRST_VALUE = 57860 -const GROUPING = 57861 -const GROUPS = 57862 -const JSON_TABLE = 57863 -const LAG = 57864 -const LAST_VALUE = 57865 -const LATERAL = 57866 -const LEAD = 57867 -const NTH_VALUE = 57868 -const NTILE = 57869 -const OF = 57870 -const OVER = 57871 -const PERCENT_RANK = 57872 -const RANK = 57873 -const RECURSIVE = 57874 -const ROW_NUMBER = 57875 -const SYSTEM = 57876 -const WINDOW = 57877 -const ACTIVE = 57878 -const ADMIN = 57879 -const AUTOEXTEND_SIZE = 57880 -const BUCKETS = 57881 -const CLONE = 57882 -const COLUMN_FORMAT = 57883 -const COMPONENT = 57884 -const DEFINITION = 57885 -const ENFORCED = 57886 -const ENGINE_ATTRIBUTE = 57887 -const EXCLUDE = 57888 -const FOLLOWING = 57889 -const GET_MASTER_PUBLIC_KEY = 57890 -const HISTOGRAM = 57891 -const HISTORY = 57892 -const INACTIVE = 57893 -const INVISIBLE = 57894 -const LOCKED = 57895 -const MASTER_COMPRESSION_ALGORITHMS = 57896 -const MASTER_PUBLIC_KEY_PATH = 57897 -const MASTER_TLS_CIPHERSUITES = 57898 -const MASTER_ZSTD_COMPRESSION_LEVEL = 57899 -const NESTED = 57900 -const NETWORK_NAMESPACE = 57901 -const NOWAIT = 57902 -const NULLS = 57903 -const OJ = 57904 -const OLD = 57905 -const OPTIONAL = 57906 -const ORDINALITY = 57907 -const ORGANIZATION = 57908 -const OTHERS = 57909 -const PARTIAL = 57910 -const PATH = 57911 -const PERSIST = 57912 -const PERSIST_ONLY = 57913 -const PRECEDING = 57914 -const PRIVILEGE_CHECKS_USER = 57915 -const PROCESS = 57916 -const RANDOM = 57917 -const REFERENCE = 57918 -const REQUIRE_ROW_FORMAT = 57919 -const RESOURCE = 57920 -const RESPECT = 57921 -const RESTART = 57922 -const RETAIN = 57923 -const REUSE = 57924 -const ROLE = 57925 -const SECONDARY = 57926 -const SECONDARY_ENGINE = 57927 -const SECONDARY_ENGINE_ATTRIBUTE = 57928 -const SECONDARY_LOAD = 57929 -const SECONDARY_UNLOAD = 57930 -const SIMPLE = 57931 -const SKIP = 57932 -const SRID = 57933 -const THREAD_PRIORITY = 57934 -const TIES = 57935 -const UNBOUNDED = 57936 -const VCPU = 57937 -const VISIBLE = 57938 -const RETURNING = 57939 -const FORMAT_BYTES = 57940 -const FORMAT_PICO_TIME = 57941 -const PS_CURRENT_THREAD_ID = 57942 -const PS_THREAD_ID = 57943 -const GTID_SUBSET = 57944 -const GTID_SUBTRACT = 57945 -const WAIT_FOR_EXECUTED_GTID_SET = 57946 -const WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 57947 -const FORMAT = 57948 -const TREE = 57949 -const VITESS = 57950 -const TRADITIONAL = 57951 -const VTEXPLAIN = 57952 -const VEXPLAIN = 57953 -const PLAN = 57954 -const LOCAL = 57955 -const LOW_PRIORITY = 57956 -const KILL = 57957 -const USERS = 57958 -const NO_WRITE_TO_BINLOG = 57959 -const LOGS = 57960 -const ERROR = 57961 -const GENERAL = 57962 -const HOSTS = 57963 -const OPTIMIZER_COSTS = 57964 -const USER_RESOURCES = 57965 -const SLOW = 57966 -const CHANNEL = 57967 -const RELAY = 57968 -const EXPORT = 57969 -const CURRENT = 57970 -const ROW = 57971 -const ROWS = 57972 -const AVG_ROW_LENGTH = 57973 -const CONNECTION = 57974 -const CHECKSUM = 57975 -const DELAY_KEY_WRITE = 57976 -const ENCRYPTION = 57977 -const ENGINE = 57978 -const INSERT_METHOD = 57979 -const MAX_ROWS = 57980 -const MIN_ROWS = 57981 -const PACK_KEYS = 57982 -const PASSWORD = 57983 -const FIXED = 57984 -const DYNAMIC = 57985 -const COMPRESSED = 57986 -const REDUNDANT = 57987 -const COMPACT = 57988 -const ROW_FORMAT = 57989 -const STATS_AUTO_RECALC = 57990 -const STATS_PERSISTENT = 57991 -const STATS_SAMPLE_PAGES = 57992 -const STORAGE = 57993 -const MEMORY = 57994 -const DISK = 57995 -const PARTITIONS = 57996 -const LINEAR = 57997 -const RANGE = 57998 -const LIST = 57999 -const SUBPARTITION = 58000 -const SUBPARTITIONS = 58001 -const HASH = 58002 +const DML_JOBS = 57739 +const NAMES = 57740 +const GLOBAL = 57741 +const SESSION = 57742 +const ISOLATION = 57743 +const LEVEL = 57744 +const READ = 57745 +const WRITE = 57746 +const ONLY = 57747 +const REPEATABLE = 57748 +const COMMITTED = 57749 +const UNCOMMITTED = 57750 +const SERIALIZABLE = 57751 +const FAST = 57752 +const QUICK = 57753 +const CHANGED = 57754 +const MEDIUM = 57755 +const CURRENT_TIMESTAMP = 57756 +const DATABASE = 57757 +const CURRENT_DATE = 57758 +const NOW = 57759 +const CURRENT_TIME = 57760 +const LOCALTIME = 57761 +const LOCALTIMESTAMP = 57762 +const CURRENT_USER = 57763 +const UTC_DATE = 57764 +const UTC_TIME = 57765 +const UTC_TIMESTAMP = 57766 +const DAY = 57767 +const DAY_HOUR = 57768 +const DAY_MICROSECOND = 57769 +const DAY_MINUTE = 57770 +const DAY_SECOND = 57771 +const HOUR = 57772 +const HOUR_MICROSECOND = 57773 +const HOUR_MINUTE = 57774 +const HOUR_SECOND = 57775 +const MICROSECOND = 57776 +const MINUTE = 57777 +const MINUTE_MICROSECOND = 57778 +const MINUTE_SECOND = 57779 +const MONTH = 57780 +const QUARTER = 57781 +const SECOND = 57782 +const SECOND_MICROSECOND = 57783 +const YEAR_MONTH = 57784 +const WEEK = 57785 +const REPLACE = 57786 +const CONVERT = 57787 +const CAST = 57788 +const SUBSTR = 57789 +const SUBSTRING = 57790 +const SEPARATOR = 57791 +const TIMESTAMPADD = 57792 +const TIMESTAMPDIFF = 57793 +const WEIGHT_STRING = 57794 +const LTRIM = 57795 +const RTRIM = 57796 +const TRIM = 57797 +const JSON_ARRAY = 57798 +const JSON_OBJECT = 57799 +const JSON_QUOTE = 57800 +const JSON_DEPTH = 57801 +const JSON_TYPE = 57802 +const JSON_LENGTH = 57803 +const JSON_VALID = 57804 +const JSON_ARRAY_APPEND = 57805 +const JSON_ARRAY_INSERT = 57806 +const JSON_INSERT = 57807 +const JSON_MERGE = 57808 +const JSON_MERGE_PATCH = 57809 +const JSON_MERGE_PRESERVE = 57810 +const JSON_REMOVE = 57811 +const JSON_REPLACE = 57812 +const JSON_SET = 57813 +const JSON_UNQUOTE = 57814 +const COUNT = 57815 +const AVG = 57816 +const MAX = 57817 +const MIN = 57818 +const SUM = 57819 +const GROUP_CONCAT = 57820 +const BIT_AND = 57821 +const BIT_OR = 57822 +const BIT_XOR = 57823 +const STD = 57824 +const STDDEV = 57825 +const STDDEV_POP = 57826 +const STDDEV_SAMP = 57827 +const VAR_POP = 57828 +const VAR_SAMP = 57829 +const VARIANCE = 57830 +const REGEXP_INSTR = 57831 +const REGEXP_LIKE = 57832 +const REGEXP_REPLACE = 57833 +const REGEXP_SUBSTR = 57834 +const ExtractValue = 57835 +const UpdateXML = 57836 +const GET_LOCK = 57837 +const RELEASE_LOCK = 57838 +const RELEASE_ALL_LOCKS = 57839 +const IS_FREE_LOCK = 57840 +const IS_USED_LOCK = 57841 +const LOCATE = 57842 +const POSITION = 57843 +const MATCH = 57844 +const AGAINST = 57845 +const BOOLEAN = 57846 +const LANGUAGE = 57847 +const WITH = 57848 +const QUERY = 57849 +const EXPANSION = 57850 +const WITHOUT = 57851 +const VALIDATION = 57852 +const UNUSED = 57853 +const ARRAY = 57854 +const BYTE = 57855 +const CUME_DIST = 57856 +const DESCRIPTION = 57857 +const DENSE_RANK = 57858 +const EMPTY = 57859 +const EXCEPT = 57860 +const FIRST_VALUE = 57861 +const GROUPING = 57862 +const GROUPS = 57863 +const JSON_TABLE = 57864 +const LAG = 57865 +const LAST_VALUE = 57866 +const LATERAL = 57867 +const LEAD = 57868 +const NTH_VALUE = 57869 +const NTILE = 57870 +const OF = 57871 +const OVER = 57872 +const PERCENT_RANK = 57873 +const RANK = 57874 +const RECURSIVE = 57875 +const ROW_NUMBER = 57876 +const SYSTEM = 57877 +const WINDOW = 57878 +const ACTIVE = 57879 +const ADMIN = 57880 +const AUTOEXTEND_SIZE = 57881 +const BUCKETS = 57882 +const CLONE = 57883 +const COLUMN_FORMAT = 57884 +const COMPONENT = 57885 +const DEFINITION = 57886 +const ENFORCED = 57887 +const ENGINE_ATTRIBUTE = 57888 +const EXCLUDE = 57889 +const FOLLOWING = 57890 +const GET_MASTER_PUBLIC_KEY = 57891 +const HISTOGRAM = 57892 +const HISTORY = 57893 +const INACTIVE = 57894 +const INVISIBLE = 57895 +const LOCKED = 57896 +const MASTER_COMPRESSION_ALGORITHMS = 57897 +const MASTER_PUBLIC_KEY_PATH = 57898 +const MASTER_TLS_CIPHERSUITES = 57899 +const MASTER_ZSTD_COMPRESSION_LEVEL = 57900 +const NESTED = 57901 +const NETWORK_NAMESPACE = 57902 +const NOWAIT = 57903 +const NULLS = 57904 +const OJ = 57905 +const OLD = 57906 +const OPTIONAL = 57907 +const ORDINALITY = 57908 +const ORGANIZATION = 57909 +const OTHERS = 57910 +const PARTIAL = 57911 +const PATH = 57912 +const PERSIST = 57913 +const PERSIST_ONLY = 57914 +const PRECEDING = 57915 +const PRIVILEGE_CHECKS_USER = 57916 +const PROCESS = 57917 +const RANDOM = 57918 +const REFERENCE = 57919 +const REQUIRE_ROW_FORMAT = 57920 +const RESOURCE = 57921 +const RESPECT = 57922 +const RESTART = 57923 +const RETAIN = 57924 +const REUSE = 57925 +const ROLE = 57926 +const SECONDARY = 57927 +const SECONDARY_ENGINE = 57928 +const SECONDARY_ENGINE_ATTRIBUTE = 57929 +const SECONDARY_LOAD = 57930 +const SECONDARY_UNLOAD = 57931 +const SIMPLE = 57932 +const SKIP = 57933 +const SRID = 57934 +const THREAD_PRIORITY = 57935 +const TIES = 57936 +const UNBOUNDED = 57937 +const VCPU = 57938 +const VISIBLE = 57939 +const RETURNING = 57940 +const FORMAT_BYTES = 57941 +const FORMAT_PICO_TIME = 57942 +const PS_CURRENT_THREAD_ID = 57943 +const PS_THREAD_ID = 57944 +const GTID_SUBSET = 57945 +const GTID_SUBTRACT = 57946 +const WAIT_FOR_EXECUTED_GTID_SET = 57947 +const WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 57948 +const FORMAT = 57949 +const TREE = 57950 +const VITESS = 57951 +const TRADITIONAL = 57952 +const VTEXPLAIN = 57953 +const VEXPLAIN = 57954 +const PLAN = 57955 +const LOCAL = 57956 +const LOW_PRIORITY = 57957 +const KILL = 57958 +const USERS = 57959 +const NO_WRITE_TO_BINLOG = 57960 +const LOGS = 57961 +const ERROR = 57962 +const GENERAL = 57963 +const HOSTS = 57964 +const OPTIMIZER_COSTS = 57965 +const USER_RESOURCES = 57966 +const SLOW = 57967 +const CHANNEL = 57968 +const RELAY = 57969 +const EXPORT = 57970 +const CURRENT = 57971 +const ROW = 57972 +const ROWS = 57973 +const AVG_ROW_LENGTH = 57974 +const CONNECTION = 57975 +const CHECKSUM = 57976 +const DELAY_KEY_WRITE = 57977 +const ENCRYPTION = 57978 +const ENGINE = 57979 +const INSERT_METHOD = 57980 +const MAX_ROWS = 57981 +const MIN_ROWS = 57982 +const PACK_KEYS = 57983 +const PASSWORD = 57984 +const FIXED = 57985 +const DYNAMIC = 57986 +const COMPRESSED = 57987 +const REDUNDANT = 57988 +const COMPACT = 57989 +const ROW_FORMAT = 57990 +const STATS_AUTO_RECALC = 57991 +const STATS_PERSISTENT = 57992 +const STATS_SAMPLE_PAGES = 57993 +const STORAGE = 57994 +const MEMORY = 57995 +const DISK = 57996 +const PARTITIONS = 57997 +const LINEAR = 57998 +const RANGE = 57999 +const LIST = 58000 +const SUBPARTITION = 58001 +const SUBPARTITIONS = 58002 +const HASH = 58003 var yyToknames = [...]string{ "$end", @@ -1122,6 +1118,7 @@ var yyToknames = [...]string{ "WORKLOAD", "LASTSEENGTID", "FAILPOINTS", + "DML_JOBS", "NAMES", "GLOBAL", "SESSION", @@ -1406,7 +1403,7 @@ var yyExca = [...]int{ -2, 41, -1, 53, 1, 162, - 678, 162, + 679, 162, -2, 170, -1, 54, 135, 170, @@ -1414,21 +1411,21 @@ var yyExca = [...]int{ 349, 170, -2, 524, -1, 64, - 36, 805, - 240, 805, - 251, 805, - 286, 819, - 287, 819, - -2, 807, + 36, 806, + 240, 806, + 251, 806, + 286, 820, + 287, 820, + -2, 808, -1, 69, - 242, 843, - -2, 841, + 242, 844, + -2, 842, -1, 127, - 239, 1506, + 239, 1507, -2, 136, -1, 129, 1, 163, - 678, 163, + 679, 163, -2, 170, -1, 140, 136, 410, @@ -1439,77 +1436,77 @@ var yyExca = [...]int{ 176, 170, 349, 170, -2, 533, - -1, 836, - 87, 1523, - -2, 1368, - -1, 837, + -1, 838, 87, 1524, - 221, 1528, -2, 1369, - -1, 838, - 221, 1527, + -1, 839, + 87, 1525, + 221, 1529, + -2, 1370, + -1, 840, + 221, 1528, -2, 43, - -1, 917, - 60, 919, - -2, 934, - -1, 1005, + -1, 919, + 60, 920, + -2, 935, + -1, 1007, 250, 44, 255, 44, -2, 421, - -1, 1091, + -1, 1093, 1, 581, - 678, 581, + 679, 581, -2, 170, - -1, 1403, - 221, 1528, - -2, 1369, - -1, 1551, - 60, 920, - -2, 939, - -1, 1552, + -1, 1406, + 221, 1529, + -2, 1370, + -1, 1554, 60, 921, -2, 940, - -1, 1603, + -1, 1555, + 60, 922, + -2, 941, + -1, 1606, 135, 170, 176, 170, 349, 170, -2, 460, - -1, 1686, + -1, 1689, 136, 410, 245, 410, -2, 513, - -1, 1695, + -1, 1698, 250, 45, 255, 45, -2, 422, - -1, 2075, - 221, 1532, - -2, 1526, - -1, 2076, - 221, 1528, - -2, 1524, - -1, 2175, + -1, 2079, + 221, 1533, + -2, 1527, + -1, 2080, + 221, 1529, + -2, 1525, + -1, 2179, 135, 170, 176, 170, 349, 170, -2, 461, - -1, 2182, + -1, 2186, 26, 191, -2, 193, - -1, 2572, + -1, 2576, 78, 99, 88, 99, - -2, 998, - -1, 2641, - 653, 718, + -2, 999, + -1, 2645, + 654, 718, -2, 692, - -1, 2811, - 50, 1474, - -2, 1468, - -1, 3467, - 653, 718, + -1, 2815, + 50, 1475, + -2, 1469, + -1, 3471, + 654, 718, -2, 706, - -1, 3555, + -1, 3559, 90, 650, 95, 650, 105, 650, @@ -1555,899 +1552,843 @@ var yyExca = [...]int{ 217, 650, 218, 650, 219, 650, - -2, 1891, + -2, 1892, } const yyPrivate = 57344 -const yyLast = 48000 +const yyLast = 48762 var yyAct = [...]int{ - 1559, 3626, 837, 3637, 3448, 3595, 3216, 2172, 3596, 847, - 840, 3214, 710, 3185, 3553, 3532, 2123, 3042, 1606, 3498, - 3521, 2961, 2863, 2870, 2104, 3432, 3380, 2912, 3430, 2921, - 2926, 2923, 2922, 2920, 2824, 2925, 2924, 3172, 2106, 911, - 1161, 807, 2472, 2827, 3244, 2770, 2941, 806, 3420, 2506, - 43, 3215, 689, 2878, 933, 2940, 692, 2828, 1888, 200, - 2825, 5, 200, 802, 2246, 3081, 3075, 1566, 669, 3249, - 2705, 2545, 720, 675, 3101, 800, 2943, 2143, 2822, 2532, - 2146, 2812, 2066, 3067, 200, 2127, 2209, 801, 2606, 2967, - 2234, 688, 2689, 2214, 2638, 2607, 2277, 839, 2608, 200, - 1107, 1664, 1163, 1942, 690, 966, 2160, 168, 934, 2557, - 44, 2148, 42, 2538, 2147, 1553, 2524, 1938, 2037, 1957, - 2071, 1013, 2678, 913, 2233, 154, 675, 200, 1711, 675, - 2508, 2063, 1896, 2135, 1136, 915, 2255, 918, 2294, 2216, - 2599, 995, 1000, 1595, 1575, 2574, 1533, 702, 2150, 102, - 1415, 1961, 106, 1824, 1915, 1820, 936, 1693, 1327, 1529, - 1342, 1829, 1700, 1003, 974, 2231, 1792, 107, 970, 1006, - 1001, 975, 2205, 1002, 1594, 2128, 1580, 2206, 697, 951, - 953, 1399, 2033, 924, 2072, 101, 1375, 921, 1887, 1970, - 87, 1152, 1037, 109, 1838, 1657, 1159, 132, 172, 130, - 920, 131, 919, 1685, 137, 1086, 138, 86, 922, 946, - 95, 108, 696, 679, 1419, 100, 3457, 2631, 3627, 2248, - 2249, 2250, 3483, 3173, 2909, 2931, 2248, 2, 2661, 2660, - 2292, 2629, 3165, 941, 945, 1777, 2931, 684, 1343, 615, - 620, 3128, 97, 658, 2036, 3579, 1423, 2697, 3484, 2928, - 97, 927, 133, 97, 2698, 664, 3219, 3478, 139, 3479, - 1903, 121, 1902, 1017, 664, 1901, 967, 1042, 1900, 1918, - 1899, 1898, 1871, 113, 114, 115, 1870, 118, 97, 619, - 127, 2929, 3574, 196, 993, 1050, 609, 682, 928, 680, - 1338, 683, 2929, 2504, 961, 914, 2808, 960, 912, 658, - 677, 678, 2101, 2102, 3219, 1016, 2651, 2935, 2534, 992, - 907, 908, 909, 910, 984, 979, 917, 2360, 2935, 935, - 3599, 2281, 3647, 1343, 1043, 1046, 1047, 991, 133, 990, - 2774, 989, 3594, 963, 856, 857, 858, 1360, 3617, 3047, - 3046, 655, 2654, 3218, 948, 949, 3583, 1354, 1059, 1039, - 959, 804, 805, 973, 2279, 3433, 2473, 856, 857, 858, - 3479, 1560, 1056, 1057, 1058, 2280, 1061, 1062, 1063, 1064, - 3581, 3582, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, - 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 638, - 1908, 3218, 2989, 3376, 658, 3580, 133, 3375, 959, 804, - 805, 2866, 3178, 636, 88, 3179, 3533, 1041, 1040, 3608, - 3386, 2369, 3577, 658, 3197, 88, 3186, 88, 3522, 88, - 2932, 3529, 90, 2274, 3385, 3196, 1947, 1329, 2548, 3462, - 3558, 2932, 1354, 3009, 1674, 2860, 2861, 2505, 2225, 2167, - 2168, 2859, 658, 633, 2668, 2669, 2867, 1596, 2583, 1597, - 3563, 2582, 649, 2549, 2584, 2131, 1349, 659, 3539, 1341, - 2696, 2219, 1880, 1881, 3262, 2366, 2166, 644, 3561, 2681, - 2869, 2677, 1357, 1126, 1358, 1359, 2367, 3567, 3568, 643, - 647, 3539, 97, 1131, 1132, 2880, 2881, 905, 2864, 1114, - 904, 1127, 3562, 97, 1115, 97, 1376, 97, 3449, 1156, - 2632, 1120, 1113, 1339, 1112, 2880, 2881, 2595, 2185, 2184, - 1830, 1085, 2865, 659, 2103, 2963, 3600, 618, 2986, 1377, - 1378, 1379, 1380, 1381, 1382, 1383, 1385, 1384, 1386, 1387, - 1328, 1114, 2011, 2541, 2542, 658, 1115, 3601, 1830, 2997, - 3078, 1349, 2739, 672, 658, 2871, 623, 2358, 625, 639, - 2995, 661, 1879, 660, 629, 1883, 627, 631, 640, 632, - 1592, 626, 676, 637, 670, 2968, 628, 641, 642, 646, - 650, 651, 652, 648, 645, 653, 621, 622, 952, 635, - 662, 2361, 2362, 2364, 2363, 1060, 1128, 1537, 1133, 3408, - 2679, 3409, 2639, 2256, 2879, 2664, 1121, 2295, 1134, 1538, - 2300, 983, 3629, 1828, 985, 1793, 2882, 1147, 659, 2218, - 2964, 200, 2956, 200, 2879, 1155, 200, 200, 1090, 658, - 2957, 1129, 1130, 3575, 1767, 1154, 2882, 659, 2003, 1992, - 1993, 1994, 1995, 2005, 1996, 1997, 1998, 2010, 2006, 1999, - 2000, 2007, 2008, 2009, 2001, 2002, 2004, 2684, 1135, 2349, - 3167, 2129, 2130, 2299, 3166, 2301, 659, 675, 1092, 675, - 675, 2131, 2338, 2335, 1066, 2336, 616, 2337, 1768, 1143, - 1769, 1145, 1065, 962, 956, 954, 3360, 2965, 2297, 675, - 200, 1026, 988, 2773, 1096, 1097, 1024, 3163, 996, 1678, - 2259, 3223, 997, 2144, 1350, 2298, 1348, 1345, 1346, 1347, - 1353, 1355, 1352, 988, 1351, 980, 997, 1035, 1403, 1142, - 1144, 2740, 982, 981, 1344, 1034, 1099, 1033, 195, 1541, - 1032, 962, 956, 954, 1110, 1031, 1116, 1117, 1118, 1119, - 1030, 1029, 1028, 1023, 1036, 2882, 1390, 1390, 3648, 2367, - 986, 971, 134, 971, 1045, 2868, 1009, 969, 3606, 659, - 1008, 1157, 1158, 971, 1044, 177, 3456, 2630, 659, 1008, - 994, 986, 1821, 2232, 1411, 947, 2685, 1699, 2285, 1401, - 2688, 2284, 2278, 1817, 988, 1084, 1124, 1148, 1149, 1350, - 1330, 1348, 1345, 1346, 1347, 1353, 1355, 1352, 1593, 1351, - 1053, 2666, 617, 2902, 663, 1015, 2633, 1806, 2588, 1344, - 2539, 853, 3162, 1393, 1394, 1395, 1396, 2597, 1320, 853, - 2663, 174, 853, 1407, 175, 1672, 1140, 656, 1671, 1670, - 1141, 2649, 1818, 2701, 2381, 1668, 614, 613, 608, 1027, - 1146, 3445, 657, 659, 1025, 2933, 2934, 194, 2276, 1088, - 3079, 3641, 3115, 2653, 2509, 2511, 2933, 2934, 2937, 3535, - 1403, 1089, 1397, 1321, 1322, 1391, 1392, 2129, 2130, 2937, - 3217, 1139, 1779, 1778, 1780, 1781, 1782, 3097, 3126, 3127, - 91, 3195, 3535, 2579, 1834, 987, 1698, 1798, 2987, 129, - 2544, 2676, 2222, 3534, 2675, 2481, 1950, 2652, 1584, 955, - 1492, 1101, 2173, 1390, 1387, 1337, 987, 2858, 1014, 1052, - 1527, 930, 1834, 1153, 2691, 1971, 3534, 200, 3217, 2690, - 2368, 675, 675, 1831, 1832, 1835, 1833, 96, 3566, 1972, - 1561, 1563, 2223, 1797, 1098, 1095, 200, 2872, 96, 2221, - 96, 2876, 96, 1111, 1421, 2691, 1422, 955, 2875, 3470, - 2690, 1831, 1832, 1835, 1833, 1087, 675, 3031, 1137, 200, - 178, 1137, 1839, 1038, 1545, 3158, 1962, 3091, 2296, 184, - 1544, 675, 3565, 2224, 1548, 1528, 1542, 987, 200, 915, - 1425, 1109, 2877, 2220, 1892, 1814, 1598, 2873, 2725, 1962, - 1123, 2398, 2874, 2323, 2319, 2321, 2322, 2320, 2326, 2327, - 2622, 1125, 2324, 2325, 2307, 2303, 2305, 2306, 2304, 2310, - 2311, 125, 3609, 2308, 2309, 1359, 675, 2706, 1358, 1359, - 1015, 1809, 2510, 1807, 1808, 3258, 1812, 1813, 122, 1403, - 1810, 1811, 3133, 1150, 1546, 675, 675, 106, 675, 1528, - 675, 675, 2275, 675, 675, 675, 675, 675, 675, 1547, - 3132, 2263, 107, 1708, 1707, 1360, 1403, 1697, 1969, 1403, - 675, 1403, 200, 1534, 2273, 1498, 1499, 1500, 1501, 1502, - 1521, 3639, 2271, 3602, 3640, 1026, 3638, 1920, 109, 1024, - 3116, 1794, 200, 1795, 926, 3500, 1796, 1091, 3643, 123, - 1705, 1921, 1388, 1389, 1919, 675, 169, 200, 2268, 1360, - 3438, 1801, 2708, 1799, 1800, 1138, 1804, 1805, 1138, 1840, - 1802, 1803, 675, 3368, 200, 1562, 3367, 1740, 1762, 1691, - 1743, 2268, 1745, 1014, 1108, 1051, 3192, 1531, 3193, 1048, - 3501, 1560, 2068, 1543, 200, 1684, 912, 2272, 1967, 914, - 3358, 200, 1565, 1701, 1701, 3439, 1787, 1968, 1360, 3208, - 200, 200, 200, 200, 200, 200, 200, 200, 200, 675, - 2270, 124, 1713, 1744, 1714, 1785, 1716, 1718, 1589, 1590, - 1722, 1724, 1726, 1728, 1730, 2718, 2717, 2716, 1015, 3649, - 2710, 1703, 2714, 3389, 2709, 1702, 2707, 3207, 3140, 1015, - 1357, 2712, 1358, 1359, 1667, 1675, 1676, 1677, 3139, 2727, - 2711, 1015, 1380, 1381, 1382, 1383, 1385, 1384, 1386, 1387, - 1786, 1694, 1681, 1682, 1826, 1680, 3129, 2068, 2713, 2715, - 2910, 2065, 1673, 2898, 2604, 1015, 2373, 2374, 2375, 1784, - 2067, 1843, 3613, 1560, 1357, 2603, 1358, 1359, 1847, 1748, - 1849, 1850, 1851, 1852, 851, 1360, 2602, 1856, 1382, 1383, - 1385, 1384, 1386, 1387, 2228, 1360, 1774, 1841, 1842, 1868, - 1869, 1788, 1752, 1753, 1822, 1772, 3650, 1771, 1758, 1759, - 1770, 1846, 1760, 1754, 3004, 170, 1751, 1750, 1853, 1854, - 1855, 1014, 182, 1357, 1360, 1358, 1359, 1008, 1011, 1012, - 1360, 971, 1014, 1749, 1720, 1005, 1009, 1018, 1008, 991, - 133, 990, 1020, 989, 1014, 1106, 1021, 1019, 1105, 1018, - 1008, 2960, 2425, 1324, 1020, 3603, 1004, 664, 1021, 1019, - 1773, 1592, 1360, 190, 3123, 664, 1360, 1845, 1014, 3611, - 1560, 1560, 675, 675, 1008, 1011, 1012, 2395, 971, 1022, - 1560, 3458, 1005, 1009, 3465, 675, 856, 857, 858, 1867, - 2586, 664, 3464, 1866, 200, 1377, 1378, 1379, 1380, 1381, - 1382, 1383, 1385, 1384, 1386, 1387, 2244, 2243, 171, 176, - 173, 179, 180, 181, 183, 185, 186, 187, 188, 3442, - 1357, 3441, 1358, 1359, 189, 191, 192, 193, 2242, 2241, - 1357, 43, 1358, 1359, 43, 1364, 1365, 1366, 1367, 1368, - 1369, 1370, 1362, 675, 3440, 112, 3545, 1560, 3394, 1360, - 2394, 1945, 1945, 1403, 2240, 2239, 111, 3363, 110, 1357, - 1569, 1358, 1359, 1916, 675, 1357, 3347, 1358, 1359, 3346, - 1403, 1965, 3257, 1360, 3255, 1966, 1923, 3204, 1925, 1926, - 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, - 1937, 1526, 1376, 1525, 2700, 675, 675, 1357, 1360, 1358, - 1359, 1357, 1524, 1358, 1359, 1914, 1570, 3137, 1527, 2029, - 3122, 1910, 1912, 1913, 1401, 1377, 1378, 1379, 1380, 1381, - 1382, 1383, 1385, 1384, 1386, 1387, 1560, 2530, 3628, 1924, - 2971, 1963, 2435, 3543, 1560, 1911, 2969, 2061, 2966, 1943, - 1943, 1360, 1356, 1560, 3393, 2076, 1946, 1378, 1379, 1380, - 1381, 1382, 1383, 1385, 1384, 1386, 1387, 2025, 1560, 3351, - 1360, 2901, 2090, 3590, 1560, 3350, 1876, 1877, 1360, 1917, - 2900, 87, 1376, 1528, 87, 1893, 1360, 2613, 1573, 1561, - 2097, 2600, 3110, 2073, 1357, 1523, 1358, 1359, 200, 1360, - 1356, 1560, 2136, 2137, 675, 1377, 1378, 1379, 1380, 1381, - 1382, 1383, 1385, 1384, 1386, 1387, 2290, 1360, 1357, 1922, - 1358, 1359, 2526, 2120, 2289, 2388, 2126, 200, 2530, 3528, - 675, 2530, 3508, 2530, 3504, 2387, 2064, 105, 103, 105, - 200, 2110, 1949, 1357, 675, 1358, 1359, 2076, 200, 104, - 200, 1360, 200, 200, 1572, 2075, 3184, 1956, 1958, 2109, - 2115, 1872, 2116, 3491, 1560, 3176, 3455, 675, 3371, 1560, - 3541, 1560, 2023, 2386, 2182, 2078, 2079, 1973, 1974, 1975, - 1976, 112, 2034, 3417, 1560, 2073, 1357, 1836, 1358, 1359, - 1783, 1987, 111, 1775, 110, 2391, 106, 2154, 1560, 1360, - 1765, 3415, 1560, 105, 1560, 1357, 2074, 1358, 1359, 1761, - 2433, 107, 1757, 1357, 1756, 1358, 1359, 106, 2530, 3359, - 2640, 1357, 1755, 1358, 1359, 1571, 675, 2229, 1360, 2119, - 3176, 1560, 107, 1151, 1357, 1360, 1358, 1359, 2077, 1360, - 2823, 2080, 2081, 2530, 3174, 2268, 1560, 2075, 3095, 1560, - 2098, 3090, 1357, 675, 1358, 1359, 2034, 2446, 1560, 675, - 2891, 2890, 1560, 2191, 2192, 2193, 2194, 1360, 2888, 2889, - 2177, 2176, 927, 2186, 2096, 2187, 2188, 2189, 2190, 2108, - 2886, 2887, 2618, 2158, 1560, 2546, 1357, 2181, 1358, 1359, - 1360, 2197, 2198, 2199, 2200, 2118, 2886, 2885, 2141, 2257, - 2554, 1560, 3090, 2211, 2367, 2662, 675, 2180, 2121, 1663, - 2643, 675, 3061, 2217, 2553, 675, 675, 1376, 2139, 3412, - 1560, 2636, 2637, 3398, 1560, 2530, 2529, 961, 2164, 1356, - 960, 2163, 2162, 2575, 1357, 2179, 1358, 1359, 2178, 2437, - 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1385, 1384, 1386, - 1387, 3066, 1560, 200, 1360, 3092, 2254, 2554, 2227, 1360, - 200, 2391, 1560, 1357, 3496, 1358, 1359, 1948, 1560, 2554, - 1357, 1017, 1358, 1359, 1357, 3604, 1358, 1359, 111, 200, - 200, 1701, 3469, 200, 2530, 200, 2212, 2208, 2201, 2203, - 2204, 200, 1663, 1662, 2230, 2226, 2576, 1604, 1603, 2238, - 2853, 200, 1357, 2546, 1358, 1359, 2578, 2554, 200, 2282, - 2367, 2575, 3051, 1016, 2888, 2262, 2796, 2165, 2265, 1360, - 2266, 2261, 2264, 2212, 2260, 1357, 2286, 1358, 1359, 1376, - 2287, 2288, 1372, 1360, 1373, 2269, 200, 2391, 3059, 1560, - 1376, 2283, 2380, 3056, 1560, 675, 2446, 1356, 1374, 1388, - 1389, 1371, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1385, - 1384, 1386, 1387, 1377, 1378, 1379, 1380, 1381, 1382, 1383, - 1385, 1384, 1386, 1387, 2576, 3090, 2422, 2421, 2268, 1360, - 2251, 2134, 1564, 2293, 2367, 2099, 1948, 1894, 1878, 1357, - 1816, 1358, 1359, 2268, 1357, 1591, 1358, 1359, 1360, 999, - 998, 125, 2351, 2352, 3453, 97, 3571, 2354, 1360, 3511, - 2384, 1403, 3382, 2076, 2389, 1567, 2355, 2392, 3355, 2393, - 3348, 1916, 3269, 1360, 2400, 3157, 3154, 3135, 2402, 2403, - 2404, 3014, 3013, 2377, 2341, 2379, 1665, 2210, 2410, 2411, - 2412, 2413, 2414, 2415, 2416, 2417, 2418, 2419, 2958, 2347, - 2915, 2385, 2911, 2644, 1357, 2207, 1358, 1359, 2202, 2196, - 2195, 1790, 103, 3054, 1560, 1696, 1360, 1692, 1357, 105, - 1358, 1359, 2383, 104, 2426, 2427, 2428, 2429, 2430, 97, - 2432, 1360, 3019, 1560, 2434, 1659, 2378, 126, 2439, 2440, - 1360, 2441, 3002, 1560, 2444, 2913, 2445, 2357, 1360, 2610, - 2448, 2962, 1360, 1090, 2452, 2609, 3383, 3057, 2457, 2458, - 2459, 2460, 1360, 2075, 1357, 2365, 1358, 1359, 3102, 3103, - 1360, 2471, 2225, 2474, 2475, 3141, 2113, 1917, 1560, 3623, - 1360, 2477, 2479, 1357, 2376, 1358, 1359, 1874, 2482, 2483, - 2484, 2485, 2486, 1357, 3621, 1358, 1359, 1360, 3108, 2493, - 2494, 3159, 2495, 2610, 1360, 2498, 2500, 2120, 1357, 2502, - 1358, 1359, 200, 3145, 2074, 2501, 1560, 3597, 3477, 2514, - 200, 1736, 2397, 3403, 2499, 1560, 3142, 3143, 3144, 3105, - 675, 1945, 2478, 1560, 2907, 2117, 2461, 1560, 2906, 1360, - 2405, 675, 2905, 3473, 1732, 2823, 2453, 1560, 2623, 1875, - 2342, 1357, 3107, 1358, 1359, 2605, 2513, 2420, 2845, 2842, - 3146, 3147, 3148, 2846, 3029, 200, 1357, 3384, 1358, 1359, - 200, 1360, 1737, 1738, 1739, 1357, 2841, 1358, 1359, 2431, - 3239, 3025, 3238, 1357, 2125, 1358, 1359, 1357, 3011, 1358, - 1359, 1733, 1734, 1735, 1568, 3096, 2801, 1357, 1360, 1358, - 1359, 43, 1360, 2800, 2516, 1357, 2518, 1358, 1359, 3437, - 2568, 1360, 2550, 2570, 685, 1357, 2843, 1358, 1359, 1943, - 3248, 2844, 2531, 3010, 2847, 2515, 2563, 2564, 2813, 2815, - 3237, 3250, 1357, 3086, 1358, 1359, 2810, 2816, 675, 1357, - 1360, 1358, 1359, 2569, 200, 2527, 1815, 1360, 903, 2614, - 2884, 200, 3083, 2593, 2540, 3007, 2503, 1360, 1534, 1055, - 3082, 1360, 931, 1054, 2980, 675, 2609, 1360, 2694, 2650, - 932, 1971, 675, 1360, 1357, 1528, 1358, 1359, 2523, 2635, - 2528, 675, 2497, 2596, 2598, 1972, 2496, 103, 1323, 2543, - 103, 134, 3088, 2589, 105, 2492, 105, 1403, 104, 1360, - 2573, 104, 2136, 2137, 2659, 1360, 1357, 3635, 1358, 1359, - 200, 200, 200, 200, 200, 2577, 2217, 2903, 2345, 2580, - 3550, 112, 3454, 1360, 2491, 937, 2587, 2334, 943, 943, - 2590, 2490, 111, 1357, 110, 1358, 1359, 1357, 1360, 1358, - 1359, 2489, 3378, 105, 2883, 2488, 1357, 2601, 1358, 1359, - 2567, 2487, 2122, 2799, 200, 200, 2333, 2476, 2657, 939, - 940, 2798, 1360, 2332, 2331, 2611, 2330, 1360, 2329, 2328, - 2624, 2625, 2626, 2619, 2318, 1357, 2317, 1358, 1359, 2620, - 200, 2316, 1357, 2470, 1358, 1359, 2315, 1684, 2656, 2469, - 2314, 2313, 1357, 2312, 1358, 1359, 1357, 3068, 1358, 1359, - 2371, 675, 1357, 1360, 1358, 1359, 110, 2468, 1357, 1360, - 1358, 1359, 112, 1558, 1554, 3425, 2729, 2730, 2731, 2732, - 2733, 2612, 2467, 111, 3245, 110, 2615, 2616, 1555, 2655, - 3424, 2645, 2646, 3406, 1357, 2738, 1358, 1359, 3256, 3254, - 1357, 3253, 1358, 1359, 3246, 2704, 2466, 3155, 675, 3087, - 2680, 2465, 3085, 1660, 1661, 1557, 2916, 1556, 1357, 2682, - 1358, 1359, 2252, 1679, 111, 1360, 2683, 112, 2719, 938, - 2734, 3076, 2546, 1357, 3624, 1358, 1359, 3227, 111, 3625, - 3624, 125, 2702, 2526, 2686, 2741, 675, 2464, 1360, 2423, - 2111, 1585, 1577, 2463, 675, 2692, 2703, 1357, 2693, 1358, - 1359, 3625, 1357, 3443, 1358, 1359, 116, 117, 3121, 1360, - 929, 2559, 2562, 2563, 2564, 2560, 2720, 2561, 2565, 1891, - 1889, 2722, 10, 9, 1890, 675, 3, 8, 2775, 99, - 1, 1103, 2780, 2777, 1827, 1326, 1325, 3125, 1357, 200, - 1358, 1359, 3560, 675, 1357, 634, 1358, 1359, 2100, 2462, - 1532, 3598, 3556, 3557, 1776, 1766, 3187, 675, 2035, 3379, - 2721, 1403, 2832, 2743, 675, 675, 1403, 200, 200, 200, - 200, 200, 2456, 2919, 2064, 2749, 2064, 2258, 3153, 200, - 2850, 2215, 1007, 159, 2154, 200, 2174, 200, 2175, 1360, - 200, 200, 200, 2455, 3524, 2780, 120, 964, 2835, 119, - 1357, 2829, 1358, 1359, 1360, 1010, 2803, 2852, 1122, 918, - 2820, 2779, 2154, 2154, 2154, 2154, 2154, 2804, 2776, 2751, - 2778, 2753, 2826, 1357, 2253, 1358, 1359, 2826, 3177, 2594, - 2183, 1610, 2154, 1608, 1609, 2154, 200, 2764, 2765, 2766, - 2767, 2792, 2793, 2794, 1357, 1607, 1358, 1359, 2791, 675, - 2802, 2795, 1403, 2805, 1612, 1611, 2988, 675, 2424, 2817, - 2818, 3030, 200, 1882, 671, 2854, 2566, 665, 2855, 197, - 1599, 2939, 920, 2454, 919, 1578, 200, 2837, 2838, 2836, - 2840, 3043, 2839, 1049, 624, 2848, 2892, 106, 2451, 2291, - 630, 2834, 1826, 1408, 1873, 2856, 2797, 2581, 200, 958, - 1360, 200, 107, 950, 2112, 2517, 2862, 957, 3356, 2831, - 2982, 3080, 2893, 2918, 2895, 2809, 2894, 2759, 2760, 2761, - 2762, 2763, 2811, 2533, 1357, 1360, 1358, 1359, 2814, 2807, - 2999, 3000, 3001, 1360, 3003, 3005, 3436, 2947, 1360, 1357, - 3247, 1358, 1359, 1360, 2217, 3509, 2591, 2938, 3012, 2946, - 1574, 3050, 2917, 3016, 3017, 3018, 3020, 3021, 3022, 3023, - 2953, 2396, 3024, 1960, 3026, 3027, 3028, 1360, 1398, 3032, - 3033, 3034, 3035, 3036, 3037, 3038, 3039, 3040, 3041, 2151, - 2970, 675, 2972, 2973, 2450, 3222, 2976, 3048, 1360, 2975, - 3052, 1909, 3053, 3055, 694, 3058, 3060, 693, 3062, 3063, - 3064, 3065, 2983, 2978, 2979, 691, 3071, 2993, 2519, 2449, - 200, 2547, 2896, 2897, 1558, 1554, 2984, 2447, 2990, 2991, - 1363, 2992, 2443, 3045, 2994, 1360, 2996, 2442, 2998, 1555, - 3049, 841, 2507, 1586, 2558, 1357, 2556, 1358, 1359, 2555, - 2343, 3093, 3094, 2159, 3104, 3098, 3100, 1360, 3552, 2153, - 2149, 2438, 2525, 792, 1551, 1552, 1557, 791, 1556, 703, - 1357, 695, 1358, 1359, 687, 790, 200, 789, 1357, 3118, - 1358, 1359, 2436, 1357, 2945, 1358, 1359, 3536, 1357, 2665, - 1358, 1359, 2959, 2667, 3074, 2592, 2955, 3069, 3070, 3072, - 1340, 1550, 681, 978, 2985, 200, 3460, 3077, 2370, 3008, - 1549, 1361, 1357, 3084, 1358, 1359, 1990, 1991, 3467, 2401, - 2927, 2154, 3171, 3089, 2908, 200, 2641, 3099, 200, 200, - 200, 2245, 72, 1357, 3106, 1358, 1359, 3109, 675, 675, - 1416, 2390, 47, 3431, 3497, 788, 3113, 3114, 785, 3224, - 3111, 3225, 3160, 3161, 3112, 3226, 2771, 2772, 3480, 3119, - 3481, 3175, 2947, 3120, 784, 3482, 2018, 1336, 1333, 3573, - 1357, 1884, 1358, 1359, 2946, 98, 38, 37, 36, 3181, - 3182, 35, 34, 28, 27, 675, 675, 675, 675, 26, - 25, 3136, 1357, 3138, 1358, 1359, 24, 2559, 2562, 2563, - 2564, 2560, 21, 2561, 2565, 20, 3194, 3102, 3103, 3198, - 31, 23, 22, 19, 18, 2930, 3593, 3634, 128, 56, - 53, 51, 136, 135, 54, 50, 1093, 48, 33, 32, - 17, 16, 15, 14, 13, 12, 3209, 11, 7, 6, - 41, 40, 3183, 30, 39, 29, 4, 2628, 2247, 0, - 0, 3213, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3221, 0, 0, 0, 0, 0, 0, - 0, 3228, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3203, 0, 0, 0, 0, 0, 3130, - 3131, 0, 0, 0, 200, 0, 0, 3199, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1403, 0, 0, 3242, 0, 675, 0, - 675, 0, 3220, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1945, 0, 3164, 0, 0, 0, 3168, 3169, 3170, 0, - 0, 0, 0, 0, 2829, 0, 0, 0, 2829, 3267, - 3265, 3243, 43, 1576, 0, 0, 3252, 0, 0, 3251, - 3261, 3259, 0, 3263, 2826, 0, 0, 0, 0, 0, - 675, 0, 0, 0, 0, 0, 0, 852, 0, 0, - 89, 0, 3370, 200, 3357, 0, 675, 0, 3275, 0, - 0, 3377, 1666, 3272, 3273, 3211, 0, 0, 0, 675, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3387, 3388, 0, 3390, 3361, 3391, 3392, 1943, 3369, - 3353, 3395, 3396, 3397, 3271, 3399, 3402, 3352, 0, 0, - 3354, 3401, 0, 3374, 0, 0, 0, 3381, 3373, 1945, - 0, 3411, 3413, 3414, 3416, 3418, 3419, 3421, 0, 675, - 0, 0, 0, 675, 675, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 916, 0, 89, 0, 0, - 0, 0, 3405, 0, 0, 0, 3400, 0, 0, 0, - 3407, 0, 675, 0, 3410, 3451, 916, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3447, 0, 3429, 3426, - 3427, 0, 3428, 0, 977, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2829, 0, 3444, 0, 0, 0, - 0, 0, 3450, 0, 1837, 0, 0, 1943, 0, 0, - 0, 0, 3446, 3404, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 675, 0, 0, 0, 0, 0, 0, 3364, 3365, - 3366, 0, 0, 0, 0, 3452, 0, 200, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 675, 200, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3471, - 0, 3476, 3459, 3463, 0, 0, 3435, 0, 0, 3466, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3492, 0, 0, 0, 0, 43, 3493, 3494, 0, - 0, 0, 0, 0, 0, 0, 675, 3468, 0, 0, - 0, 0, 0, 0, 0, 0, 1403, 0, 675, 3505, - 3486, 0, 0, 3487, 0, 0, 0, 0, 3495, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 675, 675, 0, 3530, 3531, 0, 3502, 0, - 0, 0, 0, 0, 0, 3512, 0, 0, 0, 3540, - 3542, 3544, 0, 3537, 675, 3538, 3523, 3515, 3520, 3517, - 3516, 3514, 43, 3519, 3518, 3507, 0, 2826, 200, 675, - 3381, 3525, 0, 3510, 3572, 0, 0, 0, 0, 0, - 0, 0, 3548, 0, 0, 0, 0, 0, 0, 0, - 3551, 3569, 3559, 3564, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3537, 0, 3538, 0, 0, 3578, - 3576, 0, 675, 3589, 0, 0, 0, 0, 3475, 0, - 0, 1904, 1905, 1906, 1907, 0, 3485, 0, 0, 3587, - 0, 0, 0, 3592, 675, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3610, 3612, 3614, 3605, 0, - 3607, 675, 1411, 675, 0, 0, 0, 0, 0, 0, - 3618, 0, 3622, 1945, 3620, 3616, 3615, 0, 0, 0, - 1951, 1952, 0, 0, 0, 1954, 3633, 943, 943, 1959, - 3537, 0, 3538, 1964, 3636, 3630, 0, 0, 0, 3642, - 3644, 0, 3645, 3646, 0, 0, 1977, 1978, 1979, 1980, - 1981, 1982, 1983, 1984, 1985, 1986, 0, 0, 0, 0, - 2012, 2013, 2014, 2015, 2016, 2017, 2019, 1945, 2024, 3401, - 2026, 2027, 2028, 3652, 2030, 2031, 2032, 0, 2038, 2039, - 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, - 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, - 2060, 1943, 2062, 0, 2069, 2070, 943, 3619, 943, 943, - 943, 943, 943, 3653, 3654, 0, 0, 0, 2082, 2083, - 2084, 2085, 2086, 2087, 2088, 2089, 0, 2091, 2092, 2093, - 2094, 2095, 0, 0, 0, 0, 0, 0, 0, 3591, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1627, - 0, 0, 0, 0, 0, 1943, 0, 0, 0, 0, - 0, 3651, 0, 0, 0, 943, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2132, 2133, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2171, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1160, 0, 1160, 1160, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2213, 0, 0, 0, 0, 0, - 0, 0, 916, 1400, 1405, 1406, 0, 1409, 0, 1410, - 1412, 1413, 1414, 1615, 1417, 1418, 1420, 1420, 0, 1420, - 1424, 1424, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, - 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, - 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, - 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, - 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, - 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, - 1484, 1485, 1486, 1487, 1488, 1489, 1490, 0, 0, 0, - 0, 1491, 0, 1493, 1494, 1495, 1496, 1497, 1628, 0, - 0, 0, 0, 0, 0, 0, 1424, 1424, 1424, 1424, - 1424, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, - 1513, 1514, 1515, 1516, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1530, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1641, 1644, 1645, 1646, 1647, 1648, 1649, - 0, 1650, 1651, 1653, 1654, 1652, 1655, 1656, 1629, 1630, - 1631, 1632, 1613, 1614, 1642, 0, 1616, 0, 1617, 1618, - 1619, 1620, 1621, 1622, 1623, 1624, 1625, 195, 0, 1626, - 1633, 1634, 1635, 1636, 1536, 1637, 1638, 1639, 1640, 0, - 916, 1627, 0, 0, 916, 0, 0, 0, 0, 916, - 0, 134, 0, 156, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, - 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 836, 0, 0, 0, 0, 0, 0, - 174, 0, 0, 175, 0, 0, 0, 2399, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2406, 2407, - 2408, 2409, 143, 144, 166, 165, 194, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, - 0, 0, 0, 1416, 674, 1615, 1643, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 195, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2634, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, - 0, 156, 0, 0, 0, 0, 0, 674, 195, 0, - 674, 0, 177, 0, 0, 160, 141, 163, 148, 140, - 0, 161, 162, 0, 0, 0, 0, 0, 0, 178, - 0, 0, 134, 0, 0, 0, 0, 0, 184, 149, - 1628, 0, 0, 167, 1160, 177, 0, 0, 0, 155, - 0, 0, 0, 152, 150, 145, 146, 147, 151, 0, - 0, 0, 0, 0, 0, 142, 0, 0, 174, 1576, - 0, 175, 0, 0, 153, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1687, 1688, 166, 165, 194, 0, 0, 0, 0, 0, - 0, 174, 0, 0, 175, 1641, 1644, 1645, 1646, 1647, - 1648, 1649, 0, 1650, 1651, 1653, 1654, 1652, 1655, 1656, - 1629, 1630, 1631, 1632, 1613, 1614, 1642, 194, 1616, 0, - 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 0, - 0, 1626, 1633, 1634, 1635, 1636, 0, 1637, 1638, 1639, - 1640, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 793, 0, 0, 0, - 0, 0, 0, 160, 1689, 163, 0, 1686, 0, 161, - 162, 0, 0, 0, 0, 0, 0, 178, 0, 0, - 0, 0, 0, 0, 0, 0, 184, 1160, 1160, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 89, 0, 0, 89, 0, 0, 0, 0, 0, - 178, 0, 0, 0, 0, 0, 0, 0, 0, 184, - 164, 0, 0, 0, 0, 0, 0, 673, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1643, 0, - 0, 0, 0, 0, 0, 0, 0, 2699, 0, 0, - 968, 157, 0, 976, 158, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 943, 0, 0, 2723, - 2724, 0, 0, 2726, 0, 0, 2728, 0, 0, 0, - 0, 0, 0, 169, 170, 0, 0, 0, 0, 0, - 0, 182, 0, 0, 0, 0, 2735, 2736, 2737, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2742, 0, - 0, 2744, 2745, 2746, 0, 0, 169, 2747, 2748, 0, - 0, 2038, 2750, 0, 0, 2752, 0, 0, 2754, 2755, - 2756, 2757, 190, 0, 0, 0, 2758, 2038, 2038, 2038, - 2038, 2038, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 943, 0, 0, 0, 0, - 0, 0, 2781, 2782, 2783, 2784, 2785, 2786, 164, 0, - 0, 2787, 2788, 0, 2789, 0, 2790, 171, 176, 173, - 179, 180, 181, 183, 185, 186, 187, 188, 0, 0, - 0, 0, 0, 189, 191, 192, 193, 0, 0, 0, - 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1683, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2821, 0, 0, 134, 0, 156, 2152, 0, 157, - 0, 0, 158, 0, 0, 0, 0, 177, 0, 0, - 0, 0, 0, 0, 0, 0, 2851, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 170, 0, 0, 0, 0, 0, 167, 182, - 0, 0, 0, 0, 155, 0, 0, 0, 674, 1319, - 674, 674, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 174, 0, 170, 175, 0, 0, 0, - 674, 977, 182, 0, 0, 0, 0, 2914, 0, 0, - 190, 0, 0, 0, 0, 1687, 1688, 166, 165, 194, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1402, - 0, 0, 0, 0, 977, 0, 0, 0, 0, 0, - 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 171, 176, 173, 179, 180, + 1562, 3630, 839, 849, 3452, 3641, 3220, 3599, 3536, 3218, + 3600, 3557, 842, 712, 3046, 3189, 2127, 1609, 2176, 3502, + 2965, 3525, 2108, 2867, 2874, 3436, 1892, 3384, 2916, 5, + 2925, 2930, 3434, 2927, 2926, 2924, 2929, 2928, 2828, 3176, + 2831, 1164, 3424, 2476, 3248, 808, 2510, 2882, 43, 2110, + 913, 2549, 2774, 3219, 691, 2944, 694, 2829, 2250, 200, + 2832, 2945, 200, 804, 3085, 2709, 3253, 935, 671, 2131, + 722, 803, 3079, 677, 2147, 802, 2947, 3105, 809, 1569, + 2150, 2816, 2536, 2070, 200, 692, 2826, 3071, 2610, 2971, + 2238, 1667, 2213, 2218, 690, 2642, 2611, 2693, 2612, 200, + 2164, 2281, 936, 1039, 915, 968, 1166, 168, 2561, 2542, + 1556, 2152, 44, 841, 1946, 2075, 2528, 2151, 2041, 2512, + 1961, 1900, 2682, 1696, 42, 154, 677, 200, 2237, 677, + 2259, 2067, 2139, 917, 2220, 920, 1138, 2298, 1942, 1015, + 2603, 997, 1002, 1598, 1536, 1578, 106, 1109, 107, 1714, + 2578, 102, 2154, 704, 938, 1418, 1965, 1827, 1345, 1330, + 976, 1703, 1005, 1919, 1832, 1008, 2040, 1795, 2235, 972, + 977, 1003, 1004, 2209, 1597, 953, 1583, 1823, 955, 926, + 2037, 2132, 699, 2076, 1402, 2210, 1378, 923, 1841, 1974, + 87, 1891, 1155, 1660, 1162, 109, 172, 132, 130, 131, + 1088, 1688, 922, 101, 137, 138, 948, 95, 924, 1422, + 698, 3461, 2635, 100, 921, 108, 3631, 86, 2252, 2253, + 2254, 3487, 3177, 2913, 2252, 2665, 2664, 2296, 2633, 1346, + 660, 3169, 3583, 97, 943, 947, 616, 2701, 97, 1780, + 2702, 858, 859, 860, 97, 3132, 621, 3488, 3482, 3483, + 133, 1426, 1922, 929, 2935, 681, 139, 1346, 121, 1907, + 1041, 2, 666, 1906, 1905, 1904, 969, 1044, 1903, 1902, + 3223, 995, 1875, 1058, 1059, 1060, 3223, 1063, 1064, 1065, + 1066, 1019, 1873, 1069, 1070, 1071, 1072, 1073, 1074, 1075, + 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, + 963, 962, 914, 1052, 1018, 916, 930, 113, 114, 115, + 2933, 118, 620, 2364, 127, 994, 937, 196, 684, 1341, + 610, 3578, 685, 1045, 1048, 1049, 133, 993, 992, 991, + 965, 682, 666, 1563, 679, 680, 2939, 2508, 1357, 858, + 859, 860, 1532, 195, 909, 910, 911, 912, 2105, 2106, + 919, 3483, 2538, 2812, 1061, 1363, 2655, 3222, 3603, 2778, + 981, 2285, 986, 3222, 3587, 3543, 1357, 134, 3585, 156, + 3651, 2935, 3567, 3598, 3051, 3621, 660, 3050, 950, 951, + 177, 2658, 3437, 2283, 2932, 2477, 1912, 975, 3537, 3586, + 3565, 2993, 3380, 3584, 133, 3379, 1043, 1042, 2229, 3571, + 3572, 3612, 961, 806, 807, 2284, 3182, 2884, 2885, 3183, + 3390, 167, 2373, 97, 3566, 3581, 88, 155, 657, 3201, + 686, 2223, 1332, 3190, 3526, 3466, 3533, 2933, 2278, 88, + 3389, 1951, 88, 3200, 3562, 88, 174, 3013, 90, 175, + 961, 806, 807, 1677, 661, 2509, 660, 1352, 2863, 2936, + 1344, 2672, 2673, 2939, 2864, 2865, 2552, 2700, 143, 144, + 166, 165, 194, 3543, 2587, 3266, 639, 2586, 2370, 660, + 2588, 2171, 2172, 1379, 1599, 1352, 1600, 2371, 1884, 1885, + 637, 2553, 2170, 990, 660, 1098, 1099, 2685, 2681, 1128, + 1360, 907, 1361, 1362, 97, 2990, 1380, 1381, 1382, 1383, + 1384, 1385, 1386, 1388, 1387, 1389, 1390, 97, 1159, 1092, + 97, 2135, 1833, 97, 1116, 906, 2883, 1101, 3453, 1117, + 634, 1116, 1133, 1134, 2636, 1331, 1117, 2599, 2886, 651, + 2189, 2188, 1342, 3082, 1115, 2743, 1114, 1129, 2545, 2546, + 660, 988, 3001, 2999, 646, 660, 1122, 2967, 1145, 2362, + 1147, 619, 1883, 660, 674, 3604, 644, 649, 672, 1087, + 2107, 160, 141, 163, 148, 140, 2936, 161, 162, 2222, + 1887, 678, 2260, 2972, 2683, 178, 3605, 1831, 2365, 2366, + 2368, 2367, 195, 1595, 184, 149, 1540, 2135, 1144, 1146, + 661, 3412, 1833, 3413, 1062, 2643, 2668, 2299, 1541, 152, + 150, 145, 146, 147, 151, 1809, 134, 2960, 1149, 3633, + 2353, 142, 200, 1796, 200, 2961, 1157, 200, 200, 177, + 153, 2304, 1137, 624, 1158, 626, 640, 1135, 663, 1094, + 662, 630, 1130, 628, 632, 641, 633, 1136, 627, 2688, + 638, 1123, 2968, 629, 642, 643, 648, 652, 653, 654, + 650, 647, 655, 622, 623, 645, 1770, 636, 664, 677, + 661, 677, 677, 3579, 617, 990, 1086, 2339, 954, 2340, + 3171, 2341, 1131, 1132, 3170, 174, 2305, 989, 175, 2342, + 1068, 677, 200, 661, 1067, 2969, 1353, 2303, 1351, 1348, + 1349, 1350, 1356, 1358, 1355, 1142, 1354, 2301, 661, 1143, + 1771, 194, 1772, 3364, 2744, 2263, 1347, 2133, 2134, 1148, + 1406, 169, 195, 2777, 1353, 3167, 1351, 1348, 1349, 1350, + 1356, 1358, 1355, 1544, 1354, 3227, 964, 958, 956, 2302, + 1090, 1028, 2148, 998, 1347, 999, 134, 999, 1801, 1037, + 1026, 1141, 1091, 1036, 1035, 1034, 1033, 1032, 996, 177, + 1031, 1030, 3460, 2634, 661, 1025, 1681, 3539, 1038, 661, + 1393, 1393, 2371, 2886, 964, 958, 956, 661, 1414, 3652, + 2692, 1404, 1112, 973, 1118, 1119, 1120, 1121, 1011, 3610, + 1150, 1151, 1153, 2133, 2134, 973, 1396, 1397, 1398, 1399, + 618, 3538, 2592, 855, 1702, 1010, 1410, 164, 855, 2670, + 1160, 1161, 2282, 949, 855, 174, 3645, 1323, 175, 973, + 1824, 1596, 2236, 971, 178, 2689, 2653, 2289, 2288, 1812, + 2637, 1810, 1811, 184, 1815, 1816, 1017, 2906, 1813, 1814, + 3166, 194, 1047, 3083, 1675, 1820, 1089, 1333, 1010, 1055, + 1126, 3570, 1046, 2226, 2667, 1674, 1673, 2705, 2385, 2513, + 2515, 1821, 1406, 1324, 1325, 3539, 2991, 1054, 157, 989, + 1400, 158, 1671, 615, 2601, 2937, 2938, 1782, 1781, 1783, + 1784, 1785, 665, 3130, 3131, 3221, 1837, 614, 2941, 1029, + 3199, 3221, 609, 2227, 3449, 3569, 3119, 91, 1027, 3538, + 2225, 170, 3101, 2680, 2657, 658, 2679, 1800, 182, 2583, + 1530, 2280, 2543, 1701, 1394, 1395, 2548, 2485, 1954, 200, + 659, 1587, 2372, 677, 677, 1495, 1834, 1835, 1838, 1836, + 1103, 129, 1564, 1566, 2228, 1340, 2177, 2695, 200, 1016, + 96, 1424, 2694, 1425, 2224, 2695, 1393, 1390, 2656, 190, + 2694, 932, 957, 96, 178, 2862, 96, 1139, 677, 96, + 169, 200, 1804, 184, 1802, 1803, 1837, 1807, 1808, 1156, + 1547, 1805, 1806, 677, 1551, 1111, 3035, 1548, 1017, 917, + 200, 1097, 3474, 1100, 1040, 1017, 1842, 1428, 1113, 1531, + 957, 1545, 2937, 2938, 171, 176, 173, 179, 180, 181, + 183, 185, 186, 187, 188, 2941, 1834, 1835, 1838, 1836, + 189, 191, 192, 193, 3162, 3095, 2300, 1896, 677, 2327, + 2323, 2325, 2326, 2324, 2330, 2331, 1139, 2514, 2328, 2329, + 1549, 1406, 1550, 106, 125, 107, 3643, 677, 677, 3644, + 677, 3642, 677, 677, 1817, 677, 677, 677, 677, 677, + 677, 122, 1601, 1531, 1125, 1797, 2729, 1798, 1406, 1966, + 1799, 1406, 677, 1406, 200, 1127, 1975, 2626, 3613, 1537, + 1524, 1362, 1501, 1502, 1503, 1504, 1505, 1966, 3262, 2402, + 1976, 1016, 109, 1053, 200, 1361, 1362, 1050, 1016, 3137, + 169, 3136, 1708, 2267, 1010, 1013, 1014, 677, 973, 200, + 1711, 1152, 1007, 1011, 1140, 2279, 1710, 1700, 1678, 1679, + 1680, 1924, 123, 2277, 677, 2275, 200, 1028, 1110, 1743, + 1026, 1694, 1746, 1006, 1748, 1925, 1391, 1392, 1923, 1093, + 3653, 1765, 1546, 1843, 1363, 1565, 200, 1687, 3504, 2272, + 170, 2272, 914, 200, 1568, 3606, 3120, 182, 928, 1706, + 3647, 916, 200, 200, 200, 200, 200, 200, 200, 200, + 200, 677, 3372, 1704, 1704, 1747, 3371, 1592, 1593, 1363, + 3196, 1534, 3197, 1140, 985, 1755, 1756, 987, 2276, 3362, + 2274, 1761, 1762, 3505, 124, 1716, 1705, 1717, 190, 1719, + 1721, 1670, 3212, 1725, 1727, 1729, 1731, 1733, 2311, 2307, + 2309, 2310, 2308, 2314, 2315, 3211, 1563, 2312, 2313, 1973, + 1790, 1697, 1684, 1971, 3442, 1685, 1683, 3654, 3617, 1563, + 1829, 1363, 1972, 3144, 1017, 1383, 1384, 1385, 1386, 1388, + 1387, 1389, 1390, 171, 176, 173, 179, 180, 181, 183, + 185, 186, 187, 188, 2377, 2378, 2379, 1751, 1363, 189, + 191, 192, 193, 3143, 3133, 1914, 1916, 1917, 1676, 3443, + 1788, 1844, 1845, 1385, 1386, 1388, 1387, 1389, 1390, 1360, + 170, 1361, 1362, 2914, 1789, 1849, 990, 182, 982, 1915, + 1846, 1017, 1856, 1857, 1858, 984, 983, 1850, 1825, 1852, + 1853, 1854, 1855, 2902, 2608, 2392, 1859, 858, 859, 860, + 133, 993, 992, 991, 1360, 2391, 1361, 1362, 1871, 1872, + 1777, 1874, 1017, 2731, 2607, 2606, 2232, 2072, 190, 1791, + 1775, 2069, 2710, 1848, 1787, 1774, 1773, 1016, 1763, 1363, + 2071, 1757, 1020, 1010, 988, 677, 677, 1022, 1754, 1753, + 2072, 1023, 1021, 1752, 853, 1723, 1108, 1107, 677, 3127, + 666, 666, 1870, 1869, 2964, 1363, 1360, 200, 1361, 1362, + 2590, 666, 1024, 171, 176, 173, 179, 180, 181, 183, + 185, 186, 187, 188, 1776, 2248, 2247, 2246, 2245, 189, + 191, 192, 193, 1360, 1016, 1361, 1362, 2244, 2243, 1020, + 1010, 1327, 43, 1595, 1022, 43, 1572, 3607, 1023, 1021, + 2439, 2534, 3632, 3594, 1563, 1563, 677, 2712, 1949, 1949, + 1359, 1563, 3462, 3615, 1563, 1016, 1406, 1363, 1359, 1563, + 3398, 1010, 1013, 1014, 3469, 973, 3468, 677, 3446, 1007, + 1011, 2534, 3532, 1406, 1969, 2534, 3512, 3397, 1970, 3549, + 1563, 1927, 1573, 1929, 1930, 1931, 1932, 1933, 1934, 1935, + 1936, 1937, 1938, 1939, 1940, 1941, 2534, 3508, 677, 677, + 3495, 1563, 3355, 1920, 1360, 112, 1361, 1362, 3445, 1530, + 989, 1918, 2033, 1928, 3444, 112, 111, 1404, 110, 1363, + 2722, 2721, 2720, 3367, 1363, 2714, 111, 2718, 110, 2713, + 1360, 2711, 1361, 1362, 1967, 3351, 2716, 105, 3180, 3459, + 2065, 3547, 1563, 2140, 2141, 2715, 2429, 3350, 2080, 1367, + 1368, 1369, 1370, 1371, 1372, 1373, 1365, 3261, 1947, 1947, + 1950, 3259, 2029, 2717, 2719, 2094, 3208, 1880, 1881, 3375, + 1563, 2534, 3363, 103, 87, 1529, 1379, 87, 1921, 1528, + 105, 1897, 1564, 2101, 104, 1527, 1563, 2077, 1531, 3141, + 1363, 200, 1360, 3126, 1361, 1362, 1563, 677, 2441, 1380, + 1381, 1382, 1383, 1384, 1385, 1386, 1388, 1387, 1389, 1390, + 1363, 103, 1926, 2068, 3180, 1563, 2124, 2534, 3178, 3354, + 200, 2975, 104, 677, 2272, 1563, 3188, 3099, 1563, 2450, + 1563, 2644, 2390, 200, 2973, 2970, 2905, 677, 1953, 1563, + 2080, 200, 2904, 200, 2617, 200, 200, 2895, 2894, 1960, + 1962, 1363, 2079, 2604, 1360, 1363, 1361, 1362, 1526, 1360, + 677, 1361, 1362, 2082, 2083, 2294, 2119, 1379, 2120, 2704, + 1977, 1978, 1979, 1980, 3545, 1563, 2622, 1563, 2186, 2077, + 2293, 1363, 2130, 106, 1991, 107, 2114, 1363, 2158, 2113, + 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1388, 1387, 1389, + 1390, 2892, 2893, 2078, 106, 2579, 107, 1381, 1382, 1383, + 1384, 1385, 1386, 1388, 1387, 1389, 1390, 2123, 1876, 677, + 2233, 2890, 2891, 2890, 2889, 1360, 1839, 1361, 1362, 1363, + 2081, 2558, 1563, 2084, 2085, 3421, 1563, 2371, 2666, 3393, + 2195, 2196, 2197, 2198, 2079, 1360, 677, 1361, 1362, 1666, + 2647, 105, 677, 2640, 2641, 2185, 2190, 1786, 2191, 2192, + 2193, 2194, 1363, 2181, 2180, 2162, 1563, 929, 2580, 1778, + 2112, 3419, 1563, 3094, 2201, 2202, 2203, 2204, 2582, 2534, + 2533, 3008, 2395, 1563, 1363, 2100, 1360, 2122, 1361, 1362, + 1360, 1768, 1361, 1362, 1764, 2145, 1760, 2125, 2579, 677, + 2184, 1759, 2215, 1758, 677, 1574, 2221, 2261, 677, 677, + 1563, 2143, 1379, 3416, 1563, 1375, 1360, 1376, 1361, 1362, + 2167, 2168, 1360, 2166, 1361, 1362, 963, 962, 1154, 2183, + 2182, 1377, 1391, 1392, 1374, 1380, 1381, 1382, 1383, 1384, + 1385, 1386, 1388, 1387, 1389, 1390, 200, 1563, 2027, 2258, + 2231, 1952, 1563, 200, 1666, 1665, 1607, 1606, 2038, 2827, + 2530, 2580, 2870, 2550, 1360, 2550, 1361, 1362, 3402, 1563, + 3094, 2371, 200, 200, 2266, 105, 200, 2269, 200, 2270, + 2216, 2212, 1019, 2015, 200, 2273, 2857, 2230, 2234, 2205, + 2207, 2208, 1704, 111, 200, 2242, 2371, 1360, 1359, 1361, + 1362, 200, 2286, 3096, 3500, 1018, 2557, 2871, 3473, 2534, + 2265, 2558, 3055, 2264, 2268, 2892, 1363, 2216, 97, 1360, + 2800, 1361, 1362, 2169, 2395, 1363, 2102, 1379, 2287, 2384, + 200, 2873, 2038, 2395, 2450, 2558, 2426, 3094, 2425, 677, + 2290, 2272, 1363, 2272, 2291, 2292, 2255, 2138, 1567, 2868, + 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1388, 1387, 1389, + 1390, 2558, 1359, 3145, 2103, 2297, 2884, 2885, 1952, 1898, + 1882, 1363, 1819, 2869, 1594, 1363, 1001, 1000, 3575, 125, + 2007, 1996, 1997, 1998, 1999, 2009, 2000, 2001, 2002, 2014, + 2010, 2003, 2004, 2011, 2012, 2013, 2005, 2006, 2008, 2917, + 3070, 1563, 3515, 3386, 2388, 1406, 2875, 2080, 2393, 3063, + 1563, 2396, 1570, 2397, 3146, 3147, 3148, 1363, 2404, 3352, + 3273, 3161, 2406, 2407, 2408, 2966, 3060, 1563, 2399, 2381, + 3158, 2383, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421, + 2422, 2423, 2355, 2356, 1363, 2351, 2389, 2358, 3139, 2345, + 3018, 1360, 1920, 1361, 1362, 3114, 2359, 97, 2614, 3065, + 1360, 2382, 1361, 1362, 3017, 1668, 2387, 2214, 2430, 2431, + 2432, 2433, 2434, 2962, 2436, 2883, 2919, 1360, 2438, 1361, + 1362, 2915, 2443, 2444, 2648, 2445, 2211, 2886, 2448, 1739, + 2449, 2206, 2361, 2200, 2452, 2199, 1793, 1699, 2456, 1695, + 1092, 2398, 2461, 2462, 2463, 2464, 1360, 2369, 1361, 1362, + 1360, 2079, 1361, 1362, 1662, 2475, 126, 2478, 2479, 3149, + 3106, 3107, 3387, 1363, 2229, 2481, 2483, 1921, 3058, 1563, + 2613, 1363, 2486, 2487, 2488, 2489, 2490, 2380, 1363, 2117, + 1740, 1741, 1742, 2497, 2498, 3627, 2499, 3625, 1878, 2502, + 2504, 2124, 1360, 2506, 1361, 1362, 200, 3601, 3481, 3407, + 3109, 2911, 2078, 2518, 200, 1379, 3150, 3151, 3152, 1949, + 1363, 2401, 1735, 3477, 677, 2910, 2909, 2827, 2614, 1360, + 1363, 1361, 1362, 2627, 2346, 677, 3388, 3112, 1380, 1381, + 1382, 1383, 1384, 1385, 1386, 1388, 1387, 1389, 1390, 2849, + 2129, 1363, 3111, 2846, 2850, 1363, 2872, 3023, 1563, 200, + 1879, 2517, 1363, 2847, 200, 3006, 1563, 2845, 2848, 1736, + 1737, 1738, 2505, 1563, 2554, 1571, 3100, 2121, 2435, 1380, + 1381, 1382, 1383, 1384, 1385, 1386, 1388, 1387, 1389, 1390, + 2805, 2804, 1363, 43, 2851, 3441, 2567, 2568, 3087, 2520, + 2535, 2522, 2572, 2437, 3061, 2574, 3086, 687, 1360, 1363, + 1361, 1362, 2817, 2819, 2503, 1563, 1360, 3252, 1361, 1362, + 3254, 2820, 3090, 1360, 2814, 1361, 1362, 1363, 1818, 1947, + 2519, 905, 677, 2888, 2531, 2482, 1563, 2573, 200, 2465, + 1563, 1363, 2597, 2618, 2544, 200, 2457, 1563, 2507, 1975, + 1363, 3243, 933, 3242, 1057, 1360, 1537, 1361, 1362, 677, + 934, 2600, 2602, 1976, 1056, 1360, 677, 1361, 1362, 2984, + 1363, 103, 2613, 2639, 2527, 677, 2698, 1563, 105, 2654, + 2532, 1531, 104, 2577, 2547, 103, 1360, 2593, 1361, 1362, + 1360, 1406, 1361, 1362, 3608, 134, 104, 1360, 1363, 1361, + 1362, 3241, 1363, 1326, 200, 200, 200, 200, 200, 2663, + 2221, 1363, 3457, 2584, 2581, 3092, 1576, 2409, 939, 105, + 2591, 945, 945, 3639, 2594, 3033, 2616, 1360, 2907, 1361, + 1362, 2619, 2620, 2349, 2424, 3359, 2140, 2141, 3554, 2876, + 3458, 2605, 3382, 2880, 1360, 2887, 1361, 1362, 200, 200, + 2879, 2571, 2661, 2126, 2615, 3163, 941, 942, 1561, 1557, + 2338, 1363, 1360, 2337, 1361, 1362, 2623, 1363, 2628, 2629, + 2630, 1363, 2624, 1558, 200, 1363, 1360, 3072, 1361, 1362, + 1363, 1687, 1575, 2660, 2881, 1360, 3029, 1361, 1362, 2877, + 2336, 2649, 2650, 2335, 2878, 677, 2609, 2334, 1663, 1664, + 1560, 1363, 1559, 2333, 2332, 1360, 1363, 1361, 1362, 2322, + 2733, 2734, 2735, 2736, 2737, 2321, 2320, 2659, 2319, 2318, + 2563, 2566, 2567, 2568, 2564, 2317, 2565, 2569, 2316, 2742, + 3106, 3107, 2375, 1360, 110, 1361, 1362, 1360, 3429, 1361, + 1362, 2708, 677, 3428, 2684, 3015, 1360, 3410, 1361, 1362, + 112, 3014, 3260, 2686, 2803, 3011, 1363, 2723, 3258, 2501, + 2687, 111, 2802, 110, 2500, 112, 3257, 2690, 3250, 3159, + 3091, 2707, 105, 3089, 2920, 2738, 111, 111, 110, 2706, + 677, 2256, 1682, 940, 112, 2496, 3249, 3080, 677, 2550, + 2495, 2696, 3629, 3628, 2697, 111, 1360, 3231, 1361, 1362, + 2530, 2745, 1360, 1363, 1361, 1362, 1360, 2427, 1361, 1362, + 1360, 2115, 1361, 1362, 3628, 1360, 2726, 1361, 1362, 677, + 1588, 1580, 3629, 2779, 116, 117, 1363, 2784, 3447, 3125, + 931, 2724, 125, 200, 2781, 3, 1360, 677, 1361, 1362, + 2494, 1360, 1895, 1361, 1362, 10, 1893, 1894, 99, 9, + 8, 677, 2068, 1, 2068, 1406, 2836, 1105, 677, 677, + 1406, 200, 200, 200, 200, 200, 1830, 1329, 1328, 2753, + 3129, 3564, 635, 200, 2854, 2104, 2158, 1535, 2747, 200, + 2807, 200, 3602, 3560, 200, 200, 200, 2493, 3561, 1779, + 2784, 1360, 1769, 1361, 1362, 3191, 2839, 1363, 2039, 2856, + 2783, 920, 3383, 2923, 2158, 2158, 2158, 2158, 2158, 2262, + 2492, 2808, 2780, 3157, 2782, 2219, 2830, 2824, 1009, 159, + 2178, 2830, 2179, 3528, 2158, 120, 966, 2158, 119, 1012, + 200, 2795, 2833, 2763, 2764, 2765, 2766, 2767, 1360, 1124, + 1361, 1362, 2809, 677, 2806, 2257, 1406, 3181, 2598, 2821, + 2822, 677, 2187, 2796, 2797, 2798, 200, 1613, 1611, 2858, + 1612, 1360, 2859, 1361, 1362, 2943, 2799, 1610, 922, 1615, + 200, 2841, 2842, 1614, 2844, 106, 2840, 107, 2852, 2843, + 921, 2491, 2992, 2860, 2428, 3034, 1886, 673, 2570, 1363, + 1829, 667, 200, 197, 1363, 200, 1602, 1581, 3047, 1051, + 2866, 625, 2896, 2295, 2986, 631, 2838, 2922, 1411, 2899, + 2898, 2897, 1877, 1363, 2801, 2585, 960, 2900, 2901, 952, + 2116, 2521, 959, 3360, 3003, 3004, 3005, 2950, 3007, 3009, + 2835, 2951, 1360, 3084, 1361, 1362, 1363, 2725, 2221, 2813, + 2815, 2942, 3016, 2537, 1363, 2818, 2921, 3020, 3021, 3022, + 3024, 3025, 3026, 3027, 2811, 2957, 3028, 3440, 3030, 3031, + 3032, 3251, 3513, 3036, 3037, 3038, 3039, 3040, 3041, 3042, + 3043, 3044, 3045, 2480, 2974, 677, 2976, 2977, 2474, 2595, + 2980, 3052, 1363, 1577, 3056, 3054, 3057, 3059, 2979, 3062, + 3064, 2988, 3066, 3067, 3068, 3069, 2755, 2473, 2757, 2987, + 3075, 2400, 2994, 2995, 200, 2996, 1964, 2997, 2998, 1401, + 3000, 2155, 3002, 3226, 2768, 2769, 2770, 2771, 3049, 1913, + 2472, 696, 695, 693, 1360, 3053, 1361, 1362, 2471, 1360, + 2523, 1361, 1362, 2551, 1366, 3097, 3098, 843, 2511, 3102, + 1363, 1589, 2562, 2560, 2982, 2983, 2559, 2347, 1360, 2163, + 1361, 1362, 3108, 3104, 3556, 2157, 2153, 2529, 3078, 1363, + 200, 794, 793, 705, 1363, 697, 2470, 689, 1363, 792, + 791, 1360, 1363, 1361, 1362, 3122, 1363, 2949, 3540, 1360, + 1363, 1361, 1362, 2669, 3076, 3073, 3074, 2963, 2671, 200, + 1363, 3103, 2596, 2959, 3081, 1363, 1364, 3088, 2563, 2566, + 2567, 2568, 2564, 2158, 2565, 2569, 1343, 1553, 683, 200, + 3117, 3118, 200, 200, 200, 3093, 1363, 1360, 980, 1361, + 1362, 3110, 677, 677, 2469, 1419, 2989, 3464, 2374, 3012, + 1552, 3115, 1363, 3113, 1994, 1995, 3164, 3165, 3116, 1363, + 3471, 3123, 2950, 2468, 2931, 3179, 2951, 3124, 2467, 3175, + 1363, 2912, 2466, 2645, 2249, 1363, 2460, 72, 47, 3140, + 2459, 3142, 3435, 3501, 2458, 3185, 3186, 790, 1363, 677, + 677, 677, 677, 1363, 2455, 1360, 787, 1361, 1362, 2454, + 3228, 3229, 1363, 3230, 3134, 3135, 2775, 2776, 3484, 3485, + 3198, 786, 3486, 3202, 1360, 2022, 1361, 1362, 1339, 1360, + 2453, 1361, 1362, 1360, 1336, 1361, 1362, 1360, 3577, 1361, + 1362, 1360, 1888, 1361, 1362, 1360, 2451, 1361, 1362, 98, + 3213, 38, 37, 2447, 36, 1360, 35, 1361, 1362, 34, + 1360, 28, 1361, 1362, 2446, 3217, 27, 3168, 3187, 2442, + 26, 3172, 3173, 3174, 25, 24, 21, 3225, 20, 31, + 23, 1360, 2440, 1361, 1362, 3232, 22, 2405, 19, 18, + 2934, 3597, 3638, 128, 56, 3203, 2394, 1360, 53, 1361, + 1362, 51, 136, 135, 1360, 54, 1361, 1362, 200, 50, + 3207, 1095, 48, 33, 32, 1360, 17, 1361, 1362, 16, + 1360, 15, 1361, 1362, 1561, 1557, 14, 1406, 3246, 13, + 12, 3224, 677, 1360, 677, 1361, 1362, 11, 1360, 1558, + 1361, 1362, 7, 6, 41, 40, 30, 1360, 1949, 1361, + 1362, 39, 29, 4, 2632, 3267, 2251, 0, 0, 0, + 0, 0, 0, 0, 1554, 1555, 1560, 0, 1559, 0, + 0, 3269, 0, 0, 43, 0, 0, 0, 1579, 3256, + 3255, 3247, 3263, 0, 3271, 0, 0, 3265, 2830, 0, + 0, 0, 0, 0, 677, 0, 0, 3276, 3277, 0, + 0, 0, 0, 0, 0, 2833, 3374, 200, 3361, 2833, + 677, 0, 3279, 0, 0, 3381, 0, 1669, 0, 0, + 0, 0, 0, 677, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3391, 3392, 0, 3394, 854, + 3395, 3396, 89, 0, 3357, 3399, 3400, 3401, 3358, 3403, + 3406, 0, 0, 0, 3373, 3405, 3377, 1949, 1947, 3275, + 0, 1538, 3385, 3356, 0, 3415, 3417, 3418, 3420, 3422, + 3423, 3425, 3378, 677, 0, 0, 3365, 677, 677, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3404, 3368, 3369, 3370, 677, 3409, 0, 3455, + 0, 3411, 0, 0, 0, 3414, 0, 3430, 3431, 0, + 3451, 612, 3433, 3432, 0, 0, 0, 918, 0, 89, + 0, 0, 0, 0, 0, 0, 0, 3448, 0, 0, + 0, 0, 0, 908, 0, 0, 0, 0, 918, 1840, + 0, 0, 0, 0, 0, 0, 0, 3454, 0, 0, + 0, 0, 0, 0, 0, 0, 979, 1947, 3408, 3450, + 0, 0, 0, 0, 0, 2833, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 677, 974, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3456, + 0, 200, 3215, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 677, + 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3475, 0, 3480, 0, 0, 0, 3472, + 0, 0, 0, 0, 0, 3470, 0, 0, 3467, 0, + 0, 0, 0, 0, 0, 3496, 0, 0, 43, 0, + 0, 3497, 3498, 0, 0, 0, 0, 0, 0, 0, + 677, 0, 0, 3463, 0, 0, 0, 0, 0, 0, + 1406, 0, 677, 3509, 0, 3490, 0, 0, 3491, 0, + 0, 0, 0, 0, 0, 0, 3499, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 677, 677, 0, 3534, + 3535, 0, 0, 0, 0, 3514, 3506, 0, 0, 0, + 3516, 0, 0, 3544, 3546, 3548, 0, 0, 677, 3541, + 3542, 3527, 3519, 3524, 43, 3521, 3520, 3518, 3523, 3522, + 0, 2830, 200, 677, 0, 3385, 3529, 0, 3576, 0, + 0, 0, 3511, 0, 0, 0, 3552, 0, 0, 0, + 0, 0, 3555, 0, 0, 0, 3573, 3563, 3568, 0, + 0, 0, 0, 0, 0, 0, 3582, 0, 0, 0, + 3541, 3542, 0, 3580, 0, 0, 677, 3593, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1908, 1909, 1910, + 1911, 0, 0, 3591, 0, 0, 3596, 0, 677, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3614, + 3616, 3618, 3609, 3439, 0, 677, 3611, 677, 1414, 0, + 0, 1949, 0, 0, 0, 0, 3620, 3619, 3626, 0, + 3624, 0, 0, 0, 0, 3622, 1955, 1956, 0, 0, + 3637, 1958, 3634, 945, 945, 1963, 3541, 3542, 3640, 1968, + 0, 0, 0, 0, 3648, 3646, 3649, 3650, 0, 0, + 0, 0, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, + 1989, 1990, 0, 0, 0, 1949, 2016, 2017, 2018, 2019, + 2020, 2021, 2023, 3405, 2028, 3656, 2030, 2031, 2032, 0, + 2034, 2035, 2036, 0, 2042, 2043, 2044, 2045, 2046, 2047, + 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, + 2058, 2059, 2060, 2061, 2062, 2063, 2064, 0, 2066, 0, + 2073, 2074, 945, 0, 945, 945, 945, 945, 945, 3657, + 3658, 1947, 3623, 0, 2086, 2087, 2088, 2089, 2090, 2091, + 2092, 2093, 0, 2095, 2096, 2097, 2098, 2099, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3479, 0, 0, 0, 0, + 0, 0, 0, 3489, 0, 0, 0, 0, 0, 0, + 0, 945, 0, 0, 0, 1947, 3655, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2136, 2137, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2175, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1096, 0, 1102, 0, 0, 1104, 1106, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1163, 0, 1163, 1163, + 2217, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3595, 0, 0, 0, 0, 0, 0, 0, + 0, 1335, 1630, 0, 0, 0, 918, 1403, 1408, 1409, + 0, 1412, 0, 1413, 1415, 1416, 1417, 0, 1420, 1421, + 1423, 1423, 0, 1423, 1427, 1427, 1429, 1430, 1431, 1432, + 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, + 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, + 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, + 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, + 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, + 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, + 1493, 0, 0, 0, 0, 1494, 0, 1496, 1497, 1498, + 1499, 1500, 0, 0, 0, 0, 0, 0, 0, 0, + 1427, 1427, 1427, 1427, 1427, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1506, 1507, 1508, 1509, 1510, 1511, + 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 0, 0, + 0, 0, 0, 0, 0, 0, 1618, 0, 0, 0, + 0, 0, 0, 0, 0, 1533, 0, 0, 0, 0, + 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2638, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, + 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 177, 0, 1630, 0, 0, 0, 0, 1539, 0, + 0, 0, 0, 0, 918, 0, 0, 0, 918, 0, + 0, 0, 0, 918, 0, 0, 0, 0, 0, 0, + 0, 1631, 167, 0, 0, 0, 0, 0, 155, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, + 175, 0, 0, 0, 2403, 0, 0, 0, 0, 0, + 1591, 0, 0, 0, 0, 2410, 2411, 2412, 2413, 1690, + 1691, 166, 165, 194, 0, 0, 0, 0, 0, 1608, + 0, 0, 0, 0, 0, 0, 1644, 1647, 1648, 1649, + 1650, 1651, 1652, 0, 1653, 1654, 1656, 1657, 1655, 1658, + 1659, 1632, 1633, 1634, 1635, 1616, 1617, 1645, 0, 1619, + 1419, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, + 0, 0, 1629, 1636, 1637, 1638, 1639, 0, 1640, 1641, + 1642, 1643, 0, 0, 0, 0, 0, 1618, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, + 0, 0, 0, 1749, 0, 0, 0, 1686, 0, 0, + 0, 0, 160, 1692, 163, 0, 1689, 0, 161, 162, + 134, 0, 156, 0, 0, 0, 178, 0, 0, 0, + 0, 0, 0, 177, 0, 184, 0, 0, 1794, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1631, 0, 167, 0, 1579, 0, 0, 0, + 155, 0, 0, 0, 0, 1847, 0, 0, 1163, 0, + 0, 0, 1851, 0, 0, 0, 0, 0, 0, 174, + 0, 0, 175, 1862, 1863, 1864, 1865, 1866, 1867, 1868, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1690, 1691, 166, 165, 194, 0, 0, 0, 0, + 1646, 0, 0, 0, 0, 0, 0, 1644, 1647, 1648, + 1649, 1650, 1651, 1652, 0, 1653, 1654, 1656, 1657, 1655, + 1658, 1659, 1632, 1633, 1634, 1635, 1616, 1617, 1645, 0, + 1619, 0, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, + 1628, 0, 169, 1629, 1636, 1637, 1638, 1639, 0, 1640, + 1641, 1642, 1643, 0, 0, 0, 838, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 160, 1692, 163, 0, 1689, 0, + 161, 162, 0, 0, 0, 0, 0, 0, 178, 0, + 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, + 0, 656, 0, 0, 0, 0, 0, 676, 164, 0, + 0, 0, 1163, 1163, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 89, 0, 0, 89, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1901, 0, 0, 0, + 676, 0, 0, 676, 2703, 0, 0, 0, 0, 157, + 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, + 0, 1646, 0, 945, 0, 0, 2727, 2728, 0, 0, + 2730, 0, 0, 2732, 0, 0, 0, 0, 0, 0, + 0, 0, 170, 0, 0, 0, 0, 0, 0, 182, + 0, 0, 0, 2739, 2740, 2741, 0, 0, 0, 0, + 0, 0, 0, 0, 169, 2746, 0, 0, 2748, 2749, + 2750, 0, 0, 0, 2751, 2752, 0, 0, 2042, 2754, + 0, 0, 2756, 0, 0, 2758, 2759, 2760, 2761, 0, + 190, 0, 0, 2762, 2042, 2042, 2042, 2042, 2042, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 945, 0, 0, 0, 0, 0, 0, 2785, + 2786, 2787, 2788, 2789, 2790, 0, 0, 0, 2791, 2792, + 0, 2793, 0, 2794, 0, 171, 176, 173, 179, 180, 181, 183, 185, 186, 187, 188, 0, 0, 0, 0, - 0, 189, 191, 192, 193, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 171, 176, - 173, 179, 180, 181, 183, 185, 186, 187, 188, 0, - 0, 0, 3006, 0, 189, 191, 192, 193, 0, 0, - 0, 0, 0, 0, 0, 0, 3015, 0, 160, 1689, - 163, 0, 1686, 0, 161, 162, 0, 0, 0, 0, - 0, 0, 178, 0, 0, 0, 0, 1535, 0, 0, - 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1402, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 611, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 906, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 674, 674, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2372, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 972, 0, 0, 0, 0, 674, 169, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1162, 674, 1162, 1162, 2382, 3156, 0, 0, 0, - 0, 0, 0, 1658, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1331, 1669, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3180, - 0, 0, 0, 0, 0, 0, 0, 674, 0, 1695, - 0, 0, 0, 0, 0, 0, 0, 1704, 0, 0, - 1402, 1706, 0, 0, 1709, 1710, 674, 674, 0, 674, - 0, 674, 674, 164, 674, 674, 674, 674, 674, 674, - 0, 0, 0, 0, 0, 0, 0, 1402, 1741, 1742, - 1402, 674, 1402, 0, 1747, 0, 0, 3200, 0, 3201, - 0, 0, 3202, 0, 0, 3205, 3206, 0, 0, 0, - 0, 0, 0, 0, 3210, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3212, 0, 674, 0, 0, 0, - 0, 2480, 0, 0, 157, 0, 0, 158, 0, 0, - 1819, 0, 0, 674, 0, 0, 3229, 0, 0, 3230, - 0, 3231, 3232, 0, 3233, 0, 3234, 0, 0, 0, - 0, 3235, 0, 2512, 0, 0, 0, 170, 0, 0, - 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, - 916, 0, 0, 0, 0, 0, 3260, 0, 0, 0, - 674, 0, 0, 0, 0, 0, 0, 3268, 0, 0, - 3270, 2551, 2552, 0, 0, 0, 0, 0, 0, 0, - 2152, 0, 3274, 916, 2571, 190, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3349, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1539, 1540, 0, 0, 0, - 171, 176, 173, 179, 180, 181, 183, 185, 186, 187, - 188, 0, 0, 0, 0, 0, 189, 191, 192, 193, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1582, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1600, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2648, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3434, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 968, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 674, 674, 0, 0, 0, 0, 1712, - 1712, 0, 1712, 0, 1712, 1712, 674, 1721, 1712, 1712, - 1712, 1712, 1712, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 968, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1789, - 0, 0, 0, 0, 674, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1402, 0, 1823, 0, 0, 854, - 0, 2068, 0, 1953, 855, 674, 0, 0, 0, 0, - 0, 1402, 0, 0, 1944, 0, 1094, 0, 1100, 0, - 0, 1102, 1104, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3474, 0, 674, 674, 0, 0, - 0, 0, 0, 1162, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3488, 0, 0, - 3489, 0, 3490, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2768, 0, 0, 0, 1332, 674, 861, 862, 863, - 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, - 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, - 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, - 894, 895, 896, 897, 898, 899, 900, 901, 902, 0, - 0, 0, 0, 0, 2152, 674, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3570, 2830, 0, 89, - 0, 674, 2152, 2152, 2152, 2152, 2152, 0, 0, 0, - 0, 0, 0, 0, 0, 674, 0, 0, 674, 0, - 0, 0, 2152, 0, 0, 2152, 3584, 0, 3585, 0, - 3586, 0, 0, 0, 0, 0, 0, 0, 674, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1162, 1162, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1885, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2936, - 0, 0, 0, 0, 0, 0, 3631, 674, 3632, 2944, - 0, 0, 0, 0, 2235, 2236, 2237, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 674, 0, 0, 1939, 0, 0, - 674, 1704, 0, 0, 1704, 0, 1704, 0, 0, 0, - 0, 0, 2267, 0, 0, 0, 0, 0, 1955, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 674, 0, 1988, - 1989, 0, 674, 0, 0, 0, 674, 674, 0, 0, - 0, 0, 0, 0, 1588, 0, 0, 0, 794, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1605, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1162, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 198, 0, 0, 612, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2114, 0, - 612, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 925, 0, 1746, 0, 0, - 0, 2152, 0, 0, 2124, 0, 0, 0, 0, 0, - 0, 0, 944, 944, 3117, 0, 674, 0, 1582, 0, - 0, 1162, 0, 612, 0, 0, 0, 0, 0, 0, - 0, 0, 1791, 0, 0, 0, 0, 0, 0, 0, - 0, 968, 0, 0, 0, 0, 97, 0, 0, 854, - 0, 0, 0, 842, 855, 856, 857, 858, 843, 0, - 0, 844, 845, 0, 846, 0, 0, 0, 0, 1844, - 0, 0, 0, 0, 0, 0, 1848, 0, 851, 859, - 860, 0, 1402, 0, 674, 0, 0, 1859, 1860, 1861, - 1862, 1863, 1864, 1865, 0, 0, 0, 0, 0, 0, - 976, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2948, 2949, 968, 0, 0, - 0, 0, 0, 976, 0, 0, 0, 861, 862, 863, + 164, 189, 191, 192, 193, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2825, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2855, 0, 0, 0, 0, 0, 0, + 0, 157, 0, 0, 158, 0, 0, 0, 0, 0, + 0, 0, 2156, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2142, 0, 0, 0, 0, 0, 0, 0, + 2146, 0, 2149, 0, 170, 1901, 0, 0, 0, 0, + 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2918, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 97, 190, 0, 856, 0, 979, 0, 844, 857, + 858, 859, 860, 845, 0, 0, 846, 847, 0, 848, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 853, 861, 862, 0, 0, 0, 979, + 0, 0, 0, 0, 0, 0, 0, 171, 176, 173, + 179, 180, 181, 183, 185, 186, 187, 188, 0, 0, + 0, 0, 0, 189, 191, 192, 193, 0, 0, 3010, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2952, 2953, 0, 3019, 0, 0, 0, 0, 0, 0, + 0, 0, 863, 864, 865, 866, 867, 868, 869, 870, + 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, + 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, + 901, 902, 903, 904, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1901, 0, 0, 0, 0, + 0, 0, 2306, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2954, 0, 0, 0, + 0, 2343, 2344, 0, 0, 2348, 0, 0, 0, 0, + 0, 0, 0, 2352, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2354, 0, 0, 0, 0, 97, 0, + 2357, 856, 0, 0, 0, 844, 857, 858, 859, 860, + 845, 0, 0, 846, 847, 0, 848, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2360, + 853, 861, 862, 676, 1322, 676, 676, 0, 0, 0, + 0, 0, 2376, 3160, 0, 0, 2955, 2956, 0, 0, + 0, 0, 0, 0, 0, 676, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3184, 2952, 2953, 0, + 0, 2386, 0, 0, 1405, 0, 0, 0, 0, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, - 894, 895, 896, 897, 898, 899, 900, 901, 902, 0, - 968, 0, 0, 0, 0, 1939, 0, 0, 0, 1939, - 1939, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, + 904, 0, 0, 0, 3204, 810, 3205, 0, 814, 3206, + 811, 812, 3209, 3210, 0, 813, 0, 0, 0, 0, + 0, 3214, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3216, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2954, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3233, 0, 0, 3234, 0, 3235, 3236, + 0, 3237, 0, 3238, 0, 0, 0, 0, 3239, 0, + 0, 0, 0, 0, 0, 0, 0, 2484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3236, 0, 3240, 3241, 0, - 0, 2950, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3264, 0, 0, 1405, 0, 0, 0, + 0, 0, 0, 0, 3272, 0, 795, 3274, 0, 2516, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3278, + 0, 0, 0, 2955, 2956, 0, 918, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3353, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2555, 2556, 0, + 0, 0, 0, 0, 0, 0, 2156, 676, 676, 918, + 2575, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, + 0, 0, 0, 2576, 0, 88, 45, 46, 90, 0, + 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 94, 0, 676, 0, 49, + 79, 80, 0, 77, 81, 0, 0, 0, 1661, 0, + 0, 0, 78, 0, 0, 0, 0, 0, 0, 1672, + 970, 0, 0, 978, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3438, 0, 0, + 0, 65, 676, 0, 1698, 0, 0, 2625, 0, 0, + 0, 0, 1707, 97, 0, 1405, 1709, 0, 0, 1712, + 1713, 676, 676, 2652, 676, 0, 676, 676, 0, 676, + 676, 676, 676, 676, 676, 0, 0, 0, 0, 0, + 0, 0, 1405, 1744, 1745, 1405, 676, 1405, 0, 1750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2830, 0, 89, 0, 2830, 0, 0, 0, 0, 0, - 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1897, + 0, 0, 0, 2674, 2675, 2676, 2677, 2678, 0, 0, + 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1822, 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2951, 2952, 0, 0, 0, 0, 2585, 0, 0, - 0, 3362, 0, 0, 0, 0, 0, 0, 0, 2359, + 0, 0, 0, 0, 0, 0, 0, 1901, 2691, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3478, 0, 2699, 0, 676, 0, 0, 0, 0, + 0, 52, 55, 58, 57, 60, 0, 76, 0, 0, + 85, 63, 82, 0, 3492, 0, 0, 3493, 0, 3494, + 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, + 0, 0, 0, 0, 0, 64, 93, 92, 0, 0, + 74, 75, 59, 0, 0, 0, 0, 0, 83, 84, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2772, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 66, 67, 0, 68, 69, 70, 71, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3574, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2156, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3588, 0, 3589, 0, 3590, 0, 0, + 0, 0, 0, 2834, 0, 89, 0, 0, 2156, 2156, + 2156, 2156, 2156, 0, 0, 0, 0, 0, 0, 676, + 676, 0, 0, 0, 0, 0, 0, 0, 2156, 0, + 0, 2156, 676, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3635, 0, 3636, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, + 676, 0, 0, 0, 0, 2940, 0, 0, 0, 2908, + 1405, 0, 0, 0, 0, 2948, 0, 0, 0, 1957, + 0, 676, 0, 0, 0, 0, 0, 1405, 0, 0, + 0, 0, 0, 0, 0, 2946, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2958, + 0, 0, 676, 676, 0, 0, 0, 0, 0, 96, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2978, 0, 0, 2981, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1165, 0, 1165, 1165, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1334, 0, 0, 0, 0, + 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 73, 0, 0, 0, 62, + 0, 0, 0, 0, 0, 0, 0, 676, 0, 0, + 0, 0, 0, 3077, 0, 0, 0, 0, 0, 0, + 0, 676, 0, 0, 676, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 676, 0, 0, 2156, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3121, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3138, 0, + 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, + 2239, 2240, 2241, 0, 0, 0, 0, 0, 3153, 0, + 0, 3154, 3155, 3156, 0, 0, 0, 0, 0, 0, + 676, 0, 0, 0, 0, 0, 676, 1707, 0, 0, + 1707, 0, 1707, 0, 0, 0, 0, 0, 2271, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 676, 0, 0, 0, 0, 676, 0, + 0, 0, 676, 676, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1542, 1543, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1585, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1603, 0, 0, + 0, 3240, 0, 3244, 3245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 674, + 0, 0, 0, 0, 0, 0, 2834, 0, 89, 0, + 2834, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 970, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 856, 0, 2072, 0, 0, 857, 0, + 0, 1715, 1715, 676, 1715, 0, 1715, 1715, 1948, 1724, + 1715, 1715, 1715, 1715, 1715, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 970, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 674, 1162, 0, 808, - 0, 0, 812, 674, 809, 810, 0, 1704, 1704, 811, - 0, 0, 674, 0, 0, 0, 0, 0, 0, 0, - 2830, 0, 0, 0, 0, 0, 0, 0, 1402, 2658, - 0, 0, 0, 0, 1426, 1427, 1428, 1429, 1430, 1431, - 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, - 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, - 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, - 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, - 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, - 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, - 1513, 1514, 1515, 1516, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 612, 3461, 612, - 0, 0, 612, 612, 0, 0, 0, 0, 0, 0, - 0, 0, 674, 0, 0, 2138, 89, 0, 0, 0, - 0, 0, 0, 2142, 0, 2145, 0, 0, 1897, 0, + 0, 1792, 0, 0, 0, 0, 0, 0, 0, 1405, + 0, 676, 0, 0, 0, 0, 0, 0, 1826, 0, + 0, 863, 864, 865, 866, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, + 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, + 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, + 902, 903, 904, 0, 0, 1165, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2834, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2520, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2535, 0, 0, 0, 674, - 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, + 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, + 1439, 1440, 1441, 1442, 1443, 1444, 1448, 1449, 1450, 1451, + 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, + 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, + 1472, 1473, 1474, 1475, 1476, 1477, 1479, 1480, 1481, 1482, + 1483, 1484, 1485, 1486, 1487, 1488, 1506, 1507, 1508, 1509, + 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3506, 0, 0, - 0, 0, 89, 0, 1404, 0, 0, 674, 0, 0, - 0, 0, 0, 0, 0, 674, 0, 0, 0, 0, + 0, 0, 0, 0, 3465, 0, 0, 0, 676, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, + 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 796, 3476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 674, 0, 0, 0, + 0, 0, 0, 0, 2589, 0, 0, 0, 0, 1165, + 1165, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1889, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3510, 0, 0, 0, 0, 89, 0, + 0, 0, 0, 0, 0, 198, 0, 856, 613, 0, + 0, 0, 857, 0, 0, 0, 676, 0, 0, 0, + 0, 0, 1948, 0, 0, 0, 0, 0, 0, 0, + 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1943, 0, 0, 676, 0, 927, 0, 0, 0, 0, + 676, 0, 0, 0, 1707, 1707, 0, 0, 0, 676, + 0, 1959, 946, 946, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 613, 0, 1405, 2662, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2617, 0, 674, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 674, 0, - 0, 0, 1402, 0, 0, 674, 674, 1402, 0, 2124, - 0, 0, 0, 0, 0, 0, 2642, 0, 3588, 0, - 0, 0, 0, 0, 0, 2647, 0, 0, 0, 0, + 0, 0, 1992, 1993, 3592, 863, 864, 865, 866, 867, + 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, + 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, + 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 0, 0, 0, + 0, 0, 1165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1897, 0, - 0, 0, 0, 0, 0, 2302, 1404, 0, 2899, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2339, 2340, 0, 0, 2344, 0, - 674, 0, 0, 1402, 0, 0, 2348, 0, 674, 0, - 0, 0, 0, 0, 0, 0, 2350, 0, 0, 0, - 0, 0, 0, 2353, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, + 0, 2118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2356, 925, 0, 0, 1939, 0, 0, 0, 0, - 0, 0, 2981, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2128, 0, 0, + 0, 0, 0, 0, 0, 0, 676, 0, 0, 0, + 0, 1585, 0, 0, 1165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, - 0, 0, 1939, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 970, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 676, 0, 0, 0, 0, 0, + 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 674, 0, 88, 45, 46, 90, 0, 0, - 2769, 0, 0, 0, 0, 1404, 0, 0, 1162, 0, - 0, 0, 0, 0, 94, 0, 0, 0, 49, 79, - 80, 0, 77, 81, 0, 0, 0, 0, 0, 0, - 0, 78, 1404, 0, 0, 1404, 0, 1404, 612, 1712, + 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 978, 0, 0, 0, 0, 0, 0, + 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 676, 0, 0, 0, 1405, + 970, 0, 676, 676, 1405, 0, 978, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2806, 1763, 0, - 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1162, 97, 612, 0, 0, 0, 0, 2833, 1712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1825, 0, 0, 0, 0, 3124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 612, 0, 0, 0, 0, 0, 0, 612, 0, 0, - 0, 0, 0, 0, 0, 0, 1857, 1858, 612, 612, - 612, 612, 612, 612, 612, 0, 0, 0, 0, 674, - 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 968, 0, 0, 0, 0, 0, 0, - 0, 2124, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 674, 674, 674, 674, - 0, 0, 0, 0, 0, 2572, 0, 0, 0, 0, + 0, 0, 0, 970, 0, 0, 0, 0, 1943, 0, + 0, 0, 1943, 1943, 0, 2903, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 52, 55, 58, 57, 60, 0, 76, 0, 0, 85, - 63, 82, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, - 0, 0, 0, 0, 64, 93, 92, 0, 0, 74, - 75, 59, 0, 0, 0, 0, 0, 83, 84, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2621, + 0, 0, 0, 0, 0, 0, 0, 676, 0, 0, + 1405, 0, 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3044, 0, 0, 0, 0, - 0, 0, 66, 67, 0, 68, 69, 70, 71, 0, - 0, 0, 0, 0, 1402, 0, 0, 0, 0, 674, - 0, 674, 0, 0, 0, 0, 0, 0, 0, 0, - 612, 0, 0, 0, 0, 2670, 2671, 2672, 2673, 2674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2985, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1897, - 2687, 674, 0, 0, 0, 0, 0, 0, 0, 1404, - 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, - 0, 944, 944, 0, 0, 2695, 1404, 0, 0, 0, - 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2124, 2124, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 674, 0, 0, 0, 674, 674, 0, 0, 0, 0, + 0, 0, 0, 2363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 944, 1825, 944, 944, 944, 944, 944, 0, 0, 3188, - 3189, 3190, 3191, 674, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 613, 676, + 613, 0, 0, 613, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1763, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 944, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 925, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, - 0, 0, 674, 1825, 612, 0, 612, 0, 612, 2161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 674, 0, 0, 0, - 0, 0, 0, 73, 0, 0, 0, 62, 0, 0, - 0, 0, 3264, 0, 3266, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 674, 0, 0, - 0, 2904, 0, 0, 0, 0, 0, 1402, 0, 674, + 0, 0, 0, 0, 0, 0, 1407, 0, 0, 0, + 0, 0, 3128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2124, 0, 0, 2942, 0, 0, - 0, 0, 0, 674, 674, 0, 0, 0, 0, 0, - 3372, 2954, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1162, 0, 674, 0, 0, 0, 0, - 0, 0, 0, 2974, 0, 0, 2977, 0, 0, 0, - 674, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3422, 0, 0, 0, 3422, 3422, 0, - 0, 0, 0, 674, 0, 0, 0, 0, 0, 612, - 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, - 0, 0, 0, 0, 0, 674, 2124, 0, 0, 0, - 0, 0, 0, 0, 0, 612, 612, 0, 0, 612, - 0, 2346, 674, 0, 674, 0, 0, 612, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, - 0, 0, 0, 0, 612, 3073, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 676, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 612, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2124, + 0, 0, 0, 676, 676, 676, 676, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2524, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3134, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1404, 0, 1825, - 3149, 0, 0, 3150, 3151, 3152, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3499, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1162, 1162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, - 854, 0, 0, 0, 842, 855, 856, 857, 858, 843, - 0, 0, 844, 845, 0, 846, 3499, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 612, 851, - 859, 860, 0, 0, 0, 0, 1763, 0, 2124, 0, + 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3044, 0, 3554, 0, 0, + 0, 0, 0, 0, 927, 0, 2621, 0, 0, 0, + 0, 1405, 0, 0, 0, 0, 676, 0, 676, 0, + 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, + 0, 0, 0, 2128, 0, 0, 0, 0, 0, 0, + 2646, 0, 0, 0, 0, 0, 613, 0, 0, 2651, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2948, 2949, 0, 0, - 0, 612, 0, 0, 0, 0, 612, 0, 861, 862, - 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, - 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, - 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, - 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 676, 0, 0, 1407, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 612, 0, 0, 0, 0, 0, 0, 2627, 0, 0, - 0, 0, 2950, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1407, 0, 0, 1407, 0, 1407, + 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1766, 0, 0, 0, 0, 0, 0, 676, 0, 0, + 0, 676, 676, 0, 0, 613, 0, 0, 0, 1943, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1828, 0, 0, 0, 0, 0, 0, 0, + 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 613, 0, 0, 0, 0, 0, 0, 613, + 0, 0, 0, 0, 0, 0, 1943, 0, 1860, 1861, + 613, 613, 613, 613, 613, 613, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1404, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 612, 612, 612, 612, - 612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2951, 2952, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2773, 0, 0, 0, 0, 0, + 0, 0, 1165, 0, 0, 0, 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 612, 612, 0, 0, 0, 0, 3293, 3295, 3294, 3312, - 3313, 3314, 3315, 3316, 3317, 3318, 742, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1715, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, + 0, 2810, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1165, 0, 0, 0, 0, + 0, 0, 2837, 1715, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 944, 0, 854, 0, 0, 0, 0, 855, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1944, 0, 0, + 0, 0, 0, 0, 676, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1405, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3472, 0, 0, 0, 0, 0, 0, 0, 0, + 676, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 676, 0, 0, 0, 0, 970, 0, 0, + 0, 0, 0, 613, 0, 2128, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 944, - 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, - 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, - 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, - 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, - 901, 902, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1404, 0, 0, - 0, 0, 1404, 612, 612, 612, 612, 612, 0, 0, - 0, 0, 0, 0, 0, 2849, 0, 0, 0, 0, - 0, 1763, 0, 612, 0, 0, 612, 2857, 1825, 0, - 0, 0, 0, 0, 3299, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3307, - 3308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 612, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1404, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, + 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1407, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 676, 0, 946, 946, 0, 0, 0, 1407, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, + 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 612, 0, 0, 0, 0, 0, 808, 0, - 721, 812, 723, 809, 810, 0, 719, 722, 811, 0, - 0, 0, 0, 0, 612, 0, 0, 612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 740, 741, 3292, 3296, 3297, 3298, - 3309, 3310, 3311, 3319, 3321, 773, 3320, 3322, 3323, 3324, - 3327, 3328, 3329, 3330, 3325, 3326, 3331, 3276, 3280, 3277, - 3278, 3279, 3291, 3281, 3282, 3283, 3284, 3285, 3286, 3287, - 3288, 3289, 3290, 3332, 3333, 3334, 3335, 3336, 3337, 3302, - 3306, 3305, 3303, 3304, 3300, 3301, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 813, 0, - 814, 0, 0, 818, 0, 0, 0, 820, 819, 0, - 821, 787, 786, 0, 0, 815, 816, 0, 817, 0, - 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3048, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 946, 1828, 946, 946, 946, 946, 946, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 612, 3338, 3339, 3340, 3341, 3342, 3343, 3344, - 3345, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 612, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 946, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 927, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, + 0, 0, 0, 0, 0, 0, 1828, 613, 0, 613, + 0, 613, 2165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 612, 0, 0, 612, 612, 612, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2128, 2128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3297, + 3299, 3298, 3316, 3317, 3318, 3319, 3320, 3321, 3322, 744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3192, 3193, 3194, 3195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2460,2504 +2401,1229 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 613, 0, 0, 0, 3268, 0, 3270, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 613, 613, + 0, 0, 613, 0, 2350, 0, 0, 0, 0, 0, + 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 613, 0, 0, 0, 0, 0, 0, 613, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2128, 0, + 0, 0, 0, 0, 0, 0, 0, 3303, 0, 0, + 0, 0, 0, 0, 3376, 0, 613, 0, 0, 0, + 0, 0, 3311, 3312, 0, 0, 0, 1165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1763, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3426, 0, 0, + 0, 3426, 3426, 0, 0, 0, 0, 0, 0, 0, + 0, 1407, 810, 1828, 723, 814, 725, 811, 812, 0, + 721, 724, 813, 0, 0, 0, 0, 0, 0, 0, + 2128, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 742, 743, + 3296, 3300, 3301, 3302, 3313, 3314, 3315, 3323, 3325, 775, + 3324, 3326, 3327, 3328, 3331, 3332, 3333, 3334, 3329, 3330, + 3335, 3280, 3284, 3281, 3282, 3283, 3295, 3285, 3286, 3287, + 3288, 3289, 3290, 3291, 3292, 3293, 3294, 3336, 3337, 3338, + 3339, 3340, 3341, 3306, 3310, 3309, 3307, 3308, 3304, 3305, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2128, + 0, 0, 815, 0, 816, 0, 0, 820, 0, 0, + 0, 822, 821, 0, 823, 789, 788, 0, 0, 817, + 818, 0, 819, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, + 1766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3503, 0, 0, 3342, 3343, 3344, + 3345, 3346, 3347, 3348, 3349, 0, 3507, 0, 0, 0, + 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, + 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1165, 1165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3550, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, + 0, 2631, 0, 0, 0, 0, 0, 0, 0, 0, + 3503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2128, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1407, 0, 3048, + 0, 3558, 0, 0, 0, 0, 0, 0, 0, 0, + 613, 613, 613, 613, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 613, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 946, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, - 0, 0, 0, 1296, 1281, 513, 0, 1224, 1299, 1193, - 1212, 1309, 1215, 1218, 1260, 1172, 1238, 411, 1209, 1165, - 1197, 1167, 1204, 1168, 1195, 1226, 269, 1192, 1283, 1242, - 1298, 362, 266, 1174, 1198, 425, 1214, 207, 1262, 482, - 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, - 423, 503, 417, 1305, 366, 1248, 0, 492, 396, 0, - 0, 0, 1228, 1287, 1236, 1274, 1223, 1261, 1182, 1247, - 1300, 1210, 1257, 1301, 321, 249, 323, 206, 408, 493, - 285, 0, 0, 1763, 0, 3526, 664, 0, 0, 0, - 0, 3527, 0, 0, 0, 0, 239, 0, 0, 246, - 0, 0, 612, 347, 356, 355, 336, 337, 339, 341, - 346, 353, 359, 1206, 1254, 1295, 1207, 1256, 264, 319, - 271, 263, 518, 1306, 1286, 1171, 1235, 1294, 0, 0, - 230, 1297, 1230, 0, 1259, 0, 1312, 1166, 1250, 0, - 1169, 1173, 1308, 1290, 1201, 274, 0, 0, 0, 0, - 0, 0, 0, 1227, 1237, 1271, 1275, 1221, 0, 0, - 0, 0, 1404, 0, 0, 1199, 0, 1246, 0, 0, - 0, 1178, 1170, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1225, 0, 0, 0, 0, - 1181, 0, 1200, 1272, 1763, 1164, 296, 1175, 397, 256, - 1318, 0, 449, 1279, 1289, 1222, 561, 1293, 1220, 1219, - 1266, 1179, 1285, 1213, 361, 1177, 328, 202, 226, 0, - 1211, 407, 457, 469, 1284, 1196, 1205, 254, 1203, 467, - 421, 538, 234, 283, 454, 427, 465, 437, 286, 1245, - 1264, 466, 368, 523, 447, 535, 562, 563, 262, 401, - 547, 507, 556, 584, 227, 259, 415, 500, 541, 489, - 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, - 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, - 570, 579, 214, 502, 533, 240, 479, 0, 0, 586, - 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, - 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, - 587, 229, 555, 221, 1176, 554, 403, 522, 531, 390, - 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, - 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, - 0, 210, 0, 494, 543, 588, 235, 236, 238, 1191, - 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, - 439, 448, 1280, 517, 536, 548, 560, 566, 567, 569, - 571, 572, 573, 574, 580, 578, 575, 576, 577, 402, - 309, 490, 331, 369, 1269, 1311, 420, 468, 241, 540, - 491, 1314, 1315, 1316, 1317, 1186, 1190, 1184, 1251, 1185, - 1240, 1241, 1187, 1302, 1303, 1304, 589, 590, 591, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 0, 1273, 1180, 0, 1188, 1189, - 1282, 1291, 1292, 607, 380, 481, 537, 333, 345, 348, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 946, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1407, 0, 0, 0, 0, 1407, 613, 613, 613, + 613, 613, 0, 0, 0, 0, 0, 0, 0, 2853, + 0, 0, 0, 0, 0, 1766, 0, 613, 0, 0, + 613, 2861, 1828, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1407, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 613, 0, + 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 613, 0, 0, 613, 613, + 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1766, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1407, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1766, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 392, 0, 0, 0, 1299, 1284, 513, + 0, 1227, 1302, 1196, 1215, 1312, 1218, 1221, 1263, 1175, + 1241, 411, 1212, 1168, 1200, 1170, 1207, 1171, 1198, 1229, + 269, 1195, 1286, 1245, 1301, 362, 266, 1177, 1201, 425, + 1217, 207, 1265, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 1308, 366, 1251, + 0, 492, 396, 0, 0, 0, 1231, 1290, 1239, 1277, + 1226, 1264, 1185, 1250, 1303, 1213, 1260, 1304, 321, 249, + 323, 206, 408, 493, 285, 0, 0, 1766, 0, 3530, + 666, 0, 0, 0, 0, 3531, 0, 0, 0, 0, + 239, 0, 0, 246, 0, 0, 613, 347, 356, 355, + 336, 337, 339, 341, 346, 353, 359, 1209, 1257, 1298, + 1210, 1259, 264, 319, 271, 263, 518, 1309, 1289, 1174, + 1238, 1297, 0, 0, 230, 1300, 1233, 0, 1262, 0, + 1315, 1169, 1253, 0, 1172, 1176, 1311, 1293, 1204, 274, + 0, 0, 0, 0, 0, 0, 0, 1230, 1240, 1274, + 1278, 1224, 0, 0, 0, 0, 1407, 0, 0, 1202, + 0, 1249, 0, 0, 0, 1181, 1173, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1228, + 0, 0, 0, 0, 1184, 0, 1203, 1275, 1766, 1167, + 296, 1178, 397, 256, 1321, 0, 449, 1282, 1292, 1225, + 561, 1296, 1223, 1222, 1269, 1182, 1288, 1216, 361, 1180, + 328, 202, 226, 0, 1214, 407, 457, 469, 1287, 1199, + 1208, 254, 1206, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 1248, 1267, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, + 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, + 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, + 288, 452, 431, 432, 570, 580, 214, 502, 533, 240, + 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, + 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, + 410, 527, 528, 255, 588, 229, 555, 221, 1179, 554, + 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, + 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 589, + 235, 236, 238, 1194, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 1283, 517, 536, 548, + 560, 566, 567, 569, 572, 573, 574, 575, 581, 579, + 576, 577, 578, 571, 402, 309, 490, 331, 369, 1272, + 1314, 420, 468, 241, 540, 491, 1317, 1318, 1319, 1320, + 1189, 1193, 1187, 1254, 1188, 1243, 1244, 1190, 1305, 1306, + 1307, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 0, + 1276, 1183, 0, 1191, 1192, 1285, 1294, 1295, 608, 380, + 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, + 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, + 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, + 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, + 546, 307, 464, 463, 329, 330, 375, 446, 1247, 201, + 222, 364, 1310, 450, 287, 586, 551, 545, 208, 224, + 1186, 261, 1197, 1205, 0, 1211, 1219, 1220, 1232, 1234, + 1235, 1236, 1237, 1255, 1256, 1258, 1266, 1268, 1271, 1273, + 1280, 1291, 1313, 203, 204, 211, 223, 233, 237, 244, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, + 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, + 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, + 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, + 313, 583, 584, 298, 534, 565, 532, 582, 559, 435, + 374, 1246, 1316, 549, 1252, 377, 280, 303, 318, 1261, + 550, 497, 228, 462, 289, 252, 1279, 1281, 213, 247, + 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, + 265, 428, 1242, 1270, 372, 514, 515, 314, 392, 0, + 0, 0, 1299, 1284, 513, 0, 1227, 1302, 1196, 1215, + 1312, 1218, 1221, 1263, 1175, 1241, 411, 1212, 1168, 1200, + 1170, 1207, 1171, 1198, 1229, 269, 1195, 1286, 1245, 1301, + 362, 266, 1177, 1201, 425, 1217, 207, 1265, 482, 253, + 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, + 503, 417, 1308, 366, 1251, 0, 492, 396, 0, 0, + 0, 1231, 1290, 1239, 1277, 1226, 1264, 1185, 1250, 1303, + 1213, 1260, 1304, 321, 249, 323, 206, 408, 493, 285, + 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, + 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, + 353, 359, 1209, 1257, 1298, 1210, 1259, 264, 319, 271, + 263, 518, 1309, 1289, 1174, 1238, 1297, 0, 0, 230, + 1300, 1233, 0, 1262, 0, 1315, 1169, 1253, 0, 1172, + 1176, 1311, 1293, 1204, 274, 0, 0, 0, 0, 0, + 0, 0, 1230, 1240, 1274, 1278, 1224, 0, 0, 0, + 0, 0, 2862, 0, 1202, 0, 1249, 0, 0, 0, + 1181, 1173, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1228, 0, 0, 0, 0, 1184, + 0, 1203, 1275, 0, 1167, 296, 1178, 397, 256, 1321, + 0, 449, 1282, 1292, 1225, 561, 1296, 1223, 1222, 1269, + 1182, 1288, 1216, 361, 1180, 328, 202, 226, 0, 1214, + 407, 457, 469, 1287, 1199, 1208, 254, 1206, 467, 421, + 538, 234, 283, 454, 427, 465, 437, 286, 1248, 1267, + 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, + 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, + 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, + 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, + 580, 214, 502, 533, 240, 479, 0, 0, 587, 248, + 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 588, + 229, 555, 221, 1179, 554, 403, 522, 531, 390, 379, + 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, + 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, + 210, 0, 494, 543, 589, 235, 236, 238, 1194, 278, + 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, + 448, 1283, 517, 536, 548, 560, 566, 567, 569, 572, + 573, 574, 575, 581, 579, 576, 577, 578, 571, 402, + 309, 490, 331, 369, 1272, 1314, 420, 468, 241, 540, + 491, 1317, 1318, 1319, 1320, 1189, 1193, 1187, 1254, 1188, + 1243, 1244, 1190, 1305, 1306, 1307, 590, 591, 592, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 0, 1276, 1183, 0, 1191, 1192, + 1285, 1294, 1295, 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, - 330, 375, 446, 1244, 201, 222, 364, 1307, 450, 287, - 585, 551, 545, 208, 224, 1183, 261, 1194, 1202, 0, - 1208, 1216, 1217, 1229, 1231, 1232, 1233, 1234, 1252, 1253, - 1255, 1263, 1265, 1268, 1270, 1277, 1288, 1310, 203, 204, + 330, 375, 446, 1247, 201, 222, 364, 1310, 450, 287, + 586, 551, 545, 208, 224, 1186, 261, 1197, 1205, 0, + 1211, 1219, 1220, 1232, 1234, 1235, 1236, 1237, 1255, 1256, + 1258, 1266, 1268, 1271, 1273, 1280, 1291, 1313, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 299, 300, 441, 442, 312, 313, 582, 583, 298, 534, - 565, 532, 581, 559, 435, 374, 1243, 1313, 549, 1249, - 377, 280, 303, 318, 1258, 550, 497, 228, 462, 289, - 252, 1276, 1278, 213, 247, 231, 258, 273, 276, 322, + 299, 300, 441, 442, 312, 313, 583, 584, 298, 534, + 565, 532, 582, 559, 435, 374, 1246, 1316, 549, 1252, + 377, 280, 303, 318, 1261, 550, 497, 228, 462, 289, + 252, 1279, 1281, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, - 504, 505, 506, 508, 391, 265, 428, 1239, 1267, 372, - 514, 515, 314, 392, 0, 0, 0, 1296, 1281, 513, - 0, 1224, 1299, 1193, 1212, 1309, 1215, 1218, 1260, 1172, - 1238, 411, 1209, 1165, 1197, 1167, 1204, 1168, 1195, 1226, - 269, 1192, 1283, 1242, 1298, 362, 266, 1174, 1198, 425, - 1214, 207, 1262, 482, 253, 373, 370, 521, 281, 272, - 268, 251, 315, 381, 423, 503, 417, 1305, 366, 1248, - 0, 492, 396, 0, 0, 0, 1228, 1287, 1236, 1274, - 1223, 1261, 1182, 1247, 1300, 1210, 1257, 1301, 321, 249, + 504, 505, 506, 508, 391, 265, 428, 1242, 1270, 372, + 514, 515, 314, 392, 0, 0, 0, 1299, 1284, 513, + 0, 1227, 1302, 1196, 1215, 1312, 1218, 1221, 1263, 1175, + 1241, 411, 1212, 1168, 1200, 1170, 1207, 1171, 1198, 1229, + 269, 1195, 1286, 1245, 1301, 362, 266, 1177, 1201, 425, + 1217, 207, 1265, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 1308, 366, 1251, + 0, 492, 396, 0, 0, 0, 1231, 1290, 1239, 1277, + 1226, 1264, 1185, 1250, 1303, 1213, 1260, 1304, 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, - 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, - 336, 337, 339, 341, 346, 353, 359, 1206, 1254, 1295, - 1207, 1256, 264, 319, 271, 263, 518, 1306, 1286, 1171, - 1235, 1294, 0, 0, 230, 1297, 1230, 0, 1259, 0, - 1312, 1166, 1250, 0, 1169, 1173, 1308, 1290, 1201, 274, - 0, 0, 0, 0, 0, 0, 0, 1227, 1237, 1271, - 1275, 1221, 0, 0, 0, 0, 0, 2858, 0, 1199, - 0, 1246, 0, 0, 0, 1178, 1170, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1225, - 0, 0, 0, 0, 1181, 0, 1200, 1272, 0, 1164, - 296, 1175, 397, 256, 1318, 0, 449, 1279, 1289, 1222, - 561, 1293, 1220, 1219, 1266, 1179, 1285, 1213, 361, 1177, - 328, 202, 226, 0, 1211, 407, 457, 469, 1284, 1196, - 1205, 254, 1203, 467, 421, 538, 234, 283, 454, 427, - 465, 437, 286, 1245, 1264, 466, 368, 523, 447, 535, - 562, 563, 262, 401, 547, 507, 556, 584, 227, 259, + 336, 337, 339, 341, 346, 353, 359, 1209, 1257, 1298, + 1210, 1259, 264, 319, 271, 263, 518, 1309, 1289, 1174, + 1238, 1297, 0, 0, 230, 1300, 1233, 0, 1262, 0, + 1315, 1169, 1253, 0, 1172, 1176, 1311, 1293, 1204, 274, + 0, 0, 0, 0, 0, 0, 0, 1230, 1240, 1274, + 1278, 1224, 0, 0, 0, 0, 0, 2823, 0, 1202, + 0, 1249, 0, 0, 0, 1181, 1173, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1228, + 0, 0, 0, 0, 1184, 0, 1203, 1275, 0, 1167, + 296, 1178, 397, 256, 1321, 0, 449, 1282, 1292, 1225, + 561, 1296, 1223, 1222, 1269, 1182, 1288, 1216, 361, 1180, + 328, 202, 226, 0, 1214, 407, 457, 469, 1287, 1199, + 1208, 254, 1206, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 1248, 1267, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, - 288, 452, 431, 432, 570, 579, 214, 502, 533, 240, - 479, 0, 0, 586, 248, 499, 216, 530, 498, 389, + 288, 452, 431, 432, 570, 580, 214, 502, 533, 240, + 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 527, 528, 255, 587, 229, 555, 221, 1176, 554, + 410, 527, 528, 255, 588, 229, 555, 221, 1179, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 588, - 235, 236, 238, 1191, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 1280, 517, 536, 548, - 560, 566, 567, 569, 571, 572, 573, 574, 580, 578, - 575, 576, 577, 402, 309, 490, 331, 369, 1269, 1311, - 420, 468, 241, 540, 491, 1314, 1315, 1316, 1317, 1186, - 1190, 1184, 1251, 1185, 1240, 1241, 1187, 1302, 1303, 1304, - 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 0, 1273, - 1180, 0, 1188, 1189, 1282, 1291, 1292, 607, 380, 481, - 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, - 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, - 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, - 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, - 307, 464, 463, 329, 330, 375, 446, 1244, 201, 222, - 364, 1307, 450, 287, 585, 551, 545, 208, 224, 1183, - 261, 1194, 1202, 0, 1208, 1216, 1217, 1229, 1231, 1232, - 1233, 1234, 1252, 1253, 1255, 1263, 1265, 1268, 1270, 1277, - 1288, 1310, 203, 204, 211, 223, 233, 237, 244, 260, - 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, - 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, - 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, - 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, - 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, - 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, - 582, 583, 298, 534, 565, 532, 581, 559, 435, 374, - 1243, 1313, 549, 1249, 377, 280, 303, 318, 1258, 550, - 497, 228, 462, 289, 252, 1276, 1278, 213, 247, 231, - 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, - 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, - 428, 1239, 1267, 372, 514, 515, 314, 392, 0, 0, - 0, 1296, 1281, 513, 0, 1224, 1299, 1193, 1212, 1309, - 1215, 1218, 1260, 1172, 1238, 411, 1209, 1165, 1197, 1167, - 1204, 1168, 1195, 1226, 269, 1192, 1283, 1242, 1298, 362, - 266, 1174, 1198, 425, 1214, 207, 1262, 482, 253, 373, - 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, - 417, 1305, 366, 1248, 0, 492, 396, 0, 0, 0, - 1228, 1287, 1236, 1274, 1223, 1261, 1182, 1247, 1300, 1210, - 1257, 1301, 321, 249, 323, 206, 408, 493, 285, 0, - 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, - 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, - 359, 1206, 1254, 1295, 1207, 1256, 264, 319, 271, 263, - 518, 1306, 1286, 1171, 1235, 1294, 0, 0, 230, 1297, - 1230, 0, 1259, 0, 1312, 1166, 1250, 0, 1169, 1173, - 1308, 1290, 1201, 274, 0, 0, 0, 0, 0, 0, - 0, 1227, 1237, 1271, 1275, 1221, 0, 0, 0, 0, - 0, 2819, 0, 1199, 0, 1246, 0, 0, 0, 1178, - 1170, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1225, 0, 0, 0, 0, 1181, 0, - 1200, 1272, 0, 1164, 296, 1175, 397, 256, 1318, 0, - 449, 1279, 1289, 1222, 561, 1293, 1220, 1219, 1266, 1179, - 1285, 1213, 361, 1177, 328, 202, 226, 0, 1211, 407, - 457, 469, 1284, 1196, 1205, 254, 1203, 467, 421, 538, - 234, 283, 454, 427, 465, 437, 286, 1245, 1264, 466, - 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, - 556, 584, 227, 259, 415, 500, 541, 489, 393, 519, - 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, - 243, 232, 525, 544, 288, 452, 431, 432, 570, 579, - 214, 502, 533, 240, 479, 0, 0, 586, 248, 499, - 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, - 292, 0, 0, 257, 410, 527, 528, 255, 587, 229, - 555, 221, 1176, 554, 403, 522, 531, 390, 379, 220, - 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, - 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, - 0, 494, 543, 588, 235, 236, 238, 1191, 278, 282, - 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, - 1280, 517, 536, 548, 560, 566, 567, 569, 571, 572, - 573, 574, 580, 578, 575, 576, 577, 402, 309, 490, - 331, 369, 1269, 1311, 420, 468, 241, 540, 491, 1314, - 1315, 1316, 1317, 1186, 1190, 1184, 1251, 1185, 1240, 1241, - 1187, 1302, 1303, 1304, 589, 590, 591, 592, 593, 594, - 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 0, 1273, 1180, 0, 1188, 1189, 1282, 1291, - 1292, 607, 380, 481, 537, 333, 345, 348, 338, 357, - 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, - 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, - 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, - 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, - 446, 1244, 201, 222, 364, 1307, 450, 287, 585, 551, - 545, 208, 224, 1183, 261, 1194, 1202, 0, 1208, 1216, - 1217, 1229, 1231, 1232, 1233, 1234, 1252, 1253, 1255, 1263, - 1265, 1268, 1270, 1277, 1288, 1310, 203, 204, 211, 223, - 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, - 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, - 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, - 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, - 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, - 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, - 441, 442, 312, 313, 582, 583, 298, 534, 565, 532, - 581, 559, 435, 374, 1243, 1313, 549, 1249, 377, 280, - 303, 318, 1258, 550, 497, 228, 462, 289, 252, 1276, - 1278, 213, 247, 231, 258, 273, 276, 322, 387, 395, - 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, - 506, 508, 391, 265, 428, 1239, 1267, 372, 514, 515, - 314, 392, 0, 0, 0, 1296, 1281, 513, 0, 1224, - 1299, 1193, 1212, 1309, 1215, 1218, 1260, 1172, 1238, 411, - 1209, 1165, 1197, 1167, 1204, 1168, 1195, 1226, 269, 1192, - 1283, 1242, 1298, 362, 266, 1174, 1198, 425, 1214, 207, - 1262, 482, 253, 373, 370, 521, 281, 272, 268, 251, - 315, 381, 423, 503, 417, 1305, 366, 1248, 0, 492, - 396, 0, 0, 0, 1228, 1287, 1236, 1274, 1223, 1261, - 1182, 1247, 1300, 1210, 1257, 1301, 321, 249, 323, 206, - 408, 493, 285, 0, 0, 0, 0, 0, 838, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, - 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, - 339, 341, 346, 353, 359, 1206, 1254, 1295, 1207, 1256, - 264, 319, 271, 263, 518, 1306, 1286, 1171, 1235, 1294, - 0, 0, 230, 1297, 1230, 0, 1259, 0, 1312, 1166, - 1250, 0, 1169, 1173, 1308, 1290, 1201, 274, 0, 0, - 0, 0, 0, 0, 0, 1227, 1237, 1271, 1275, 1221, - 0, 0, 0, 0, 0, 2140, 0, 1199, 0, 1246, - 0, 0, 0, 1178, 1170, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1225, 0, 0, - 0, 0, 1181, 0, 1200, 1272, 0, 1164, 296, 1175, - 397, 256, 1318, 0, 449, 1279, 1289, 1222, 561, 1293, - 1220, 1219, 1266, 1179, 1285, 1213, 361, 1177, 328, 202, - 226, 0, 1211, 407, 457, 469, 1284, 1196, 1205, 254, - 1203, 467, 421, 538, 234, 283, 454, 427, 465, 437, - 286, 1245, 1264, 466, 368, 523, 447, 535, 562, 563, - 262, 401, 547, 507, 556, 584, 227, 259, 415, 500, - 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, - 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, - 431, 432, 570, 579, 214, 502, 533, 240, 479, 0, - 0, 586, 248, 499, 216, 530, 498, 389, 324, 325, - 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, - 528, 255, 587, 229, 555, 221, 1176, 554, 403, 522, - 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, - 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, - 209, 542, 0, 210, 0, 494, 543, 588, 235, 236, - 238, 1191, 278, 282, 290, 293, 301, 302, 311, 363, - 414, 443, 439, 448, 1280, 517, 536, 548, 560, 566, - 567, 569, 571, 572, 573, 574, 580, 578, 575, 576, - 577, 402, 309, 490, 331, 369, 1269, 1311, 420, 468, - 241, 540, 491, 1314, 1315, 1316, 1317, 1186, 1190, 1184, - 1251, 1185, 1240, 1241, 1187, 1302, 1303, 1304, 589, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 0, 1273, 1180, 0, - 1188, 1189, 1282, 1291, 1292, 607, 380, 481, 537, 333, - 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, - 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, - 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, - 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, - 463, 329, 330, 375, 446, 1244, 201, 222, 364, 1307, - 450, 287, 585, 551, 545, 208, 224, 1183, 261, 1194, - 1202, 0, 1208, 1216, 1217, 1229, 1231, 1232, 1233, 1234, - 1252, 1253, 1255, 1263, 1265, 1268, 1270, 1277, 1288, 1310, - 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, - 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, - 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, - 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, - 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, - 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, - 564, 476, 299, 300, 441, 442, 312, 313, 582, 583, - 298, 534, 565, 532, 581, 559, 435, 374, 1243, 1313, - 549, 1249, 377, 280, 303, 318, 1258, 550, 497, 228, - 462, 289, 252, 1276, 1278, 213, 247, 231, 258, 273, - 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, - 242, 480, 504, 505, 506, 508, 391, 265, 428, 1239, - 1267, 372, 514, 515, 314, 392, 0, 0, 0, 1296, - 1281, 513, 0, 1224, 1299, 1193, 1212, 1309, 1215, 1218, - 1260, 1172, 1238, 411, 1209, 1165, 1197, 1167, 1204, 1168, - 1195, 1226, 269, 1192, 1283, 1242, 1298, 362, 266, 1174, - 1198, 425, 1214, 207, 1262, 482, 253, 373, 370, 521, - 281, 272, 268, 251, 315, 381, 423, 503, 417, 1305, - 366, 1248, 0, 492, 396, 0, 0, 0, 1228, 1287, - 1236, 1274, 1223, 1261, 1182, 1247, 1300, 1210, 1257, 1301, - 321, 249, 323, 206, 408, 493, 285, 0, 97, 0, - 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, - 356, 355, 336, 337, 339, 341, 346, 353, 359, 1206, - 1254, 1295, 1207, 1256, 264, 319, 271, 263, 518, 1306, - 1286, 1171, 1235, 1294, 0, 0, 230, 1297, 1230, 0, - 1259, 0, 1312, 1166, 1250, 0, 1169, 1173, 1308, 1290, - 1201, 274, 0, 0, 0, 0, 0, 0, 0, 1227, - 1237, 1271, 1275, 1221, 0, 0, 0, 0, 0, 0, - 0, 1199, 0, 1246, 0, 0, 0, 1178, 1170, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1225, 0, 0, 0, 0, 1181, 0, 1200, 1272, - 0, 1164, 296, 1175, 397, 256, 1318, 0, 449, 1279, - 1289, 1222, 561, 1293, 1220, 1219, 1266, 1179, 1285, 1213, - 361, 1177, 328, 202, 226, 0, 1211, 407, 457, 469, - 1284, 1196, 1205, 254, 1203, 467, 421, 538, 234, 283, - 454, 427, 465, 437, 286, 1245, 1264, 466, 368, 523, - 447, 535, 562, 563, 262, 401, 547, 507, 556, 584, - 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, - 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, - 525, 544, 288, 452, 431, 432, 570, 579, 214, 502, - 533, 240, 479, 0, 0, 586, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 587, 229, 555, 221, - 1176, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 588, 235, 236, 238, 1191, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 1280, 517, - 536, 548, 560, 566, 567, 569, 571, 572, 573, 574, - 580, 578, 575, 576, 577, 402, 309, 490, 331, 369, - 1269, 1311, 420, 468, 241, 540, 491, 1314, 1315, 1316, - 1317, 1186, 1190, 1184, 1251, 1185, 1240, 1241, 1187, 1302, - 1303, 1304, 589, 590, 591, 592, 593, 594, 595, 596, - 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 0, 1273, 1180, 0, 1188, 1189, 1282, 1291, 1292, 607, - 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, - 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, - 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, - 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, - 291, 546, 307, 464, 463, 329, 330, 375, 446, 1244, - 201, 222, 364, 1307, 450, 287, 585, 551, 545, 208, - 224, 1183, 261, 1194, 1202, 0, 1208, 1216, 1217, 1229, - 1231, 1232, 1233, 1234, 1252, 1253, 1255, 1263, 1265, 1268, - 1270, 1277, 1288, 1310, 203, 204, 211, 223, 233, 237, - 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, - 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, - 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, - 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, - 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, - 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, - 312, 313, 582, 583, 298, 534, 565, 532, 581, 559, - 435, 374, 1243, 1313, 549, 1249, 377, 280, 303, 318, - 1258, 550, 497, 228, 462, 289, 252, 1276, 1278, 213, - 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, - 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, - 391, 265, 428, 1239, 1267, 372, 514, 515, 314, 392, - 0, 0, 0, 1296, 1281, 513, 0, 1224, 1299, 1193, - 1212, 1309, 1215, 1218, 1260, 1172, 1238, 411, 1209, 1165, - 1197, 1167, 1204, 1168, 1195, 1226, 269, 1192, 1283, 1242, - 1298, 362, 266, 1174, 1198, 425, 1214, 207, 1262, 482, - 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, - 423, 503, 417, 1305, 366, 1248, 0, 492, 396, 0, - 0, 0, 1228, 1287, 1236, 1274, 1223, 1261, 1182, 1247, - 1300, 1210, 1257, 1301, 321, 249, 323, 206, 408, 493, - 285, 0, 0, 0, 0, 0, 664, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, - 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, - 346, 353, 359, 1206, 1254, 1295, 1207, 1256, 264, 319, - 271, 263, 518, 1306, 1286, 1171, 1235, 1294, 0, 0, - 230, 1297, 1230, 0, 1259, 0, 1312, 1166, 1250, 0, - 1169, 1173, 1308, 1290, 1201, 274, 0, 0, 0, 0, - 0, 0, 0, 1227, 1237, 1271, 1275, 1221, 0, 0, - 0, 0, 0, 0, 0, 1199, 0, 1246, 0, 0, - 0, 1178, 1170, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1225, 0, 0, 0, 0, - 1181, 0, 1200, 1272, 0, 1164, 296, 1175, 397, 256, - 1318, 0, 449, 1279, 1289, 1222, 561, 1293, 1220, 1219, - 1266, 1179, 1285, 1213, 361, 1177, 328, 202, 226, 0, - 1211, 407, 457, 469, 1284, 1196, 1205, 254, 1203, 467, - 421, 538, 234, 283, 454, 427, 465, 437, 286, 1245, - 1264, 466, 368, 523, 447, 535, 562, 563, 262, 401, - 547, 507, 556, 584, 227, 259, 415, 500, 541, 489, - 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, - 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, - 570, 579, 214, 502, 533, 240, 479, 0, 0, 586, - 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, - 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, - 587, 229, 555, 221, 1176, 554, 403, 522, 531, 390, - 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, - 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, - 0, 210, 0, 494, 543, 588, 235, 236, 238, 1191, - 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, - 439, 448, 1280, 517, 536, 548, 560, 566, 567, 569, - 571, 572, 573, 574, 580, 578, 575, 576, 577, 402, - 309, 490, 331, 369, 1269, 1311, 420, 468, 241, 540, - 491, 1314, 1315, 1316, 1317, 1186, 1190, 1184, 1251, 1185, - 1240, 1241, 1187, 1302, 1303, 1304, 589, 590, 591, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 0, 1273, 1180, 0, 1188, 1189, - 1282, 1291, 1292, 607, 380, 481, 537, 333, 345, 348, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 589, + 235, 236, 238, 1194, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 1283, 517, 536, 548, + 560, 566, 567, 569, 572, 573, 574, 575, 581, 579, + 576, 577, 578, 571, 402, 309, 490, 331, 369, 1272, + 1314, 420, 468, 241, 540, 491, 1317, 1318, 1319, 1320, + 1189, 1193, 1187, 1254, 1188, 1243, 1244, 1190, 1305, 1306, + 1307, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 0, + 1276, 1183, 0, 1191, 1192, 1285, 1294, 1295, 608, 380, + 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, + 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, + 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, + 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, + 546, 307, 464, 463, 329, 330, 375, 446, 1247, 201, + 222, 364, 1310, 450, 287, 586, 551, 545, 208, 224, + 1186, 261, 1197, 1205, 0, 1211, 1219, 1220, 1232, 1234, + 1235, 1236, 1237, 1255, 1256, 1258, 1266, 1268, 1271, 1273, + 1280, 1291, 1313, 203, 204, 211, 223, 233, 237, 244, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, + 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, + 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, + 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, + 313, 583, 584, 298, 534, 565, 532, 582, 559, 435, + 374, 1246, 1316, 549, 1252, 377, 280, 303, 318, 1261, + 550, 497, 228, 462, 289, 252, 1279, 1281, 213, 247, + 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, + 265, 428, 1242, 1270, 372, 514, 515, 314, 392, 0, + 0, 0, 1299, 1284, 513, 0, 1227, 1302, 1196, 1215, + 1312, 1218, 1221, 1263, 1175, 1241, 411, 1212, 1168, 1200, + 1170, 1207, 1171, 1198, 1229, 269, 1195, 1286, 1245, 1301, + 362, 266, 1177, 1201, 425, 1217, 207, 1265, 482, 253, + 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, + 503, 417, 1308, 366, 1251, 0, 492, 396, 0, 0, + 0, 1231, 1290, 1239, 1277, 1226, 1264, 1185, 1250, 1303, + 1213, 1260, 1304, 321, 249, 323, 206, 408, 493, 285, + 0, 0, 0, 0, 0, 840, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, + 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, + 353, 359, 1209, 1257, 1298, 1210, 1259, 264, 319, 271, + 263, 518, 1309, 1289, 1174, 1238, 1297, 0, 0, 230, + 1300, 1233, 0, 1262, 0, 1315, 1169, 1253, 0, 1172, + 1176, 1311, 1293, 1204, 274, 0, 0, 0, 0, 0, + 0, 0, 1230, 1240, 1274, 1278, 1224, 0, 0, 0, + 0, 0, 2144, 0, 1202, 0, 1249, 0, 0, 0, + 1181, 1173, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1228, 0, 0, 0, 0, 1184, + 0, 1203, 1275, 0, 1167, 296, 1178, 397, 256, 1321, + 0, 449, 1282, 1292, 1225, 561, 1296, 1223, 1222, 1269, + 1182, 1288, 1216, 361, 1180, 328, 202, 226, 0, 1214, + 407, 457, 469, 1287, 1199, 1208, 254, 1206, 467, 421, + 538, 234, 283, 454, 427, 465, 437, 286, 1248, 1267, + 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, + 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, + 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, + 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, + 580, 214, 502, 533, 240, 479, 0, 0, 587, 248, + 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 588, + 229, 555, 221, 1179, 554, 403, 522, 531, 390, 379, + 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, + 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, + 210, 0, 494, 543, 589, 235, 236, 238, 1194, 278, + 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, + 448, 1283, 517, 536, 548, 560, 566, 567, 569, 572, + 573, 574, 575, 581, 579, 576, 577, 578, 571, 402, + 309, 490, 331, 369, 1272, 1314, 420, 468, 241, 540, + 491, 1317, 1318, 1319, 1320, 1189, 1193, 1187, 1254, 1188, + 1243, 1244, 1190, 1305, 1306, 1307, 590, 591, 592, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 0, 1276, 1183, 0, 1191, 1192, + 1285, 1294, 1295, 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, - 330, 375, 446, 1244, 201, 222, 364, 1307, 450, 287, - 585, 551, 545, 208, 224, 1183, 261, 1194, 1202, 0, - 1208, 1216, 1217, 1229, 1231, 1232, 1233, 1234, 1252, 1253, - 1255, 1263, 1265, 1268, 1270, 1277, 1288, 1310, 203, 204, + 330, 375, 446, 1247, 201, 222, 364, 1310, 450, 287, + 586, 551, 545, 208, 224, 1186, 261, 1197, 1205, 0, + 1211, 1219, 1220, 1232, 1234, 1235, 1236, 1237, 1255, 1256, + 1258, 1266, 1268, 1271, 1273, 1280, 1291, 1313, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 299, 300, 441, 442, 312, 313, 582, 583, 298, 534, - 565, 532, 581, 559, 435, 374, 1243, 1313, 549, 1249, - 377, 280, 303, 318, 1258, 550, 497, 228, 462, 289, - 252, 1276, 1278, 213, 247, 231, 258, 273, 276, 322, + 299, 300, 441, 442, 312, 313, 583, 584, 298, 534, + 565, 532, 582, 559, 435, 374, 1246, 1316, 549, 1252, + 377, 280, 303, 318, 1261, 550, 497, 228, 462, 289, + 252, 1279, 1281, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, - 504, 505, 506, 508, 391, 265, 428, 1239, 1267, 372, - 514, 515, 314, 392, 0, 0, 0, 1296, 1281, 513, - 0, 1224, 1299, 1193, 1212, 1309, 1215, 1218, 1260, 1172, - 1238, 411, 1209, 1165, 1197, 1167, 1204, 1168, 1195, 1226, - 269, 1192, 1283, 1242, 1298, 362, 266, 1174, 1198, 425, - 1214, 207, 1262, 482, 253, 373, 370, 521, 281, 272, - 268, 251, 315, 381, 423, 503, 417, 1305, 366, 1248, - 0, 492, 396, 0, 0, 0, 1228, 1287, 1236, 1274, - 1223, 1261, 1182, 1247, 1300, 1210, 1257, 1301, 321, 249, - 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, - 838, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 504, 505, 506, 508, 391, 265, 428, 1242, 1270, 372, + 514, 515, 314, 392, 0, 0, 0, 1299, 1284, 513, + 0, 1227, 1302, 1196, 1215, 1312, 1218, 1221, 1263, 1175, + 1241, 411, 1212, 1168, 1200, 1170, 1207, 1171, 1198, 1229, + 269, 1195, 1286, 1245, 1301, 362, 266, 1177, 1201, 425, + 1217, 207, 1265, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 1308, 366, 1251, + 0, 492, 396, 0, 0, 0, 1231, 1290, 1239, 1277, + 1226, 1264, 1185, 1250, 1303, 1213, 1260, 1304, 321, 249, + 323, 206, 408, 493, 285, 0, 97, 0, 0, 0, + 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, - 336, 337, 339, 341, 346, 353, 359, 1206, 1254, 1295, - 1207, 1256, 264, 319, 271, 263, 518, 1306, 1286, 1171, - 1235, 1294, 0, 0, 230, 1297, 1230, 0, 1259, 0, - 1312, 1166, 1250, 0, 1169, 1173, 1308, 1290, 1201, 274, - 0, 0, 0, 0, 0, 0, 0, 1227, 1237, 1271, - 1275, 1221, 0, 0, 0, 0, 0, 0, 0, 1199, - 0, 1246, 0, 0, 0, 1178, 1170, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1225, - 0, 0, 0, 0, 1181, 0, 1200, 1272, 0, 1164, - 296, 1175, 397, 256, 1318, 0, 449, 1279, 1289, 1222, - 561, 1293, 1220, 1219, 1266, 1179, 1285, 1213, 361, 1177, - 328, 202, 226, 0, 1211, 407, 457, 469, 1284, 1196, - 1205, 254, 1203, 467, 421, 538, 234, 283, 454, 427, - 465, 437, 286, 1245, 1264, 466, 368, 523, 447, 535, - 562, 563, 262, 401, 547, 507, 556, 584, 227, 259, + 336, 337, 339, 341, 346, 353, 359, 1209, 1257, 1298, + 1210, 1259, 264, 319, 271, 263, 518, 1309, 1289, 1174, + 1238, 1297, 0, 0, 230, 1300, 1233, 0, 1262, 0, + 1315, 1169, 1253, 0, 1172, 1176, 1311, 1293, 1204, 274, + 0, 0, 0, 0, 0, 0, 0, 1230, 1240, 1274, + 1278, 1224, 0, 0, 0, 0, 0, 0, 0, 1202, + 0, 1249, 0, 0, 0, 1181, 1173, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1228, + 0, 0, 0, 0, 1184, 0, 1203, 1275, 0, 1167, + 296, 1178, 397, 256, 1321, 0, 449, 1282, 1292, 1225, + 561, 1296, 1223, 1222, 1269, 1182, 1288, 1216, 361, 1180, + 328, 202, 226, 0, 1214, 407, 457, 469, 1287, 1199, + 1208, 254, 1206, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 1248, 1267, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, - 288, 452, 431, 432, 570, 579, 214, 502, 533, 240, - 479, 0, 0, 586, 248, 499, 216, 530, 498, 389, + 288, 452, 431, 432, 570, 580, 214, 502, 533, 240, + 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 527, 528, 255, 587, 229, 555, 221, 1176, 554, + 410, 527, 528, 255, 588, 229, 555, 221, 1179, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 588, - 235, 236, 238, 1191, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 1280, 517, 536, 548, - 560, 566, 567, 569, 571, 572, 573, 574, 580, 578, - 575, 576, 577, 402, 309, 490, 331, 369, 1269, 1311, - 420, 468, 241, 540, 491, 1314, 1315, 1316, 1317, 1186, - 1190, 1184, 1251, 1185, 1240, 1241, 1187, 1302, 1303, 1304, - 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 0, 1273, - 1180, 0, 1188, 1189, 1282, 1291, 1292, 607, 380, 481, - 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, - 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, - 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, - 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, - 307, 464, 463, 329, 330, 375, 446, 1244, 201, 222, - 364, 1307, 450, 287, 585, 551, 545, 208, 224, 1183, - 261, 1194, 1202, 0, 1208, 1216, 1217, 1229, 1231, 1232, - 1233, 1234, 1252, 1253, 1255, 1263, 1265, 1268, 1270, 1277, - 1288, 1310, 203, 204, 211, 223, 233, 237, 244, 260, - 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, - 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, - 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, - 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, - 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, - 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, - 582, 583, 298, 534, 565, 532, 581, 559, 435, 374, - 1243, 1313, 549, 1249, 377, 280, 303, 318, 1258, 550, - 497, 228, 462, 289, 252, 1276, 1278, 213, 247, 231, - 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, - 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, - 428, 1239, 1267, 372, 514, 515, 314, 392, 0, 0, - 0, 1296, 1281, 513, 0, 1224, 1299, 1193, 1212, 1309, - 1215, 1218, 1260, 1172, 1238, 411, 1209, 1165, 1197, 1167, - 1204, 1168, 1195, 1226, 269, 1192, 1283, 1242, 1298, 362, - 266, 1174, 1198, 425, 1214, 207, 1262, 482, 253, 373, - 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, - 417, 1305, 366, 1248, 0, 492, 396, 0, 0, 0, - 1228, 1287, 1236, 1274, 1223, 1261, 1182, 1247, 1300, 1210, - 1257, 1301, 321, 249, 323, 206, 408, 493, 285, 0, - 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, - 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, - 359, 1206, 1254, 1295, 1207, 1256, 264, 319, 271, 263, - 518, 1306, 1286, 1171, 1235, 1294, 0, 0, 230, 1297, - 1230, 0, 1259, 0, 1312, 1166, 1250, 0, 1169, 1173, - 1308, 1290, 1201, 274, 0, 0, 0, 0, 0, 0, - 0, 1227, 1237, 1271, 1275, 1221, 0, 0, 0, 0, - 0, 0, 0, 1199, 0, 1246, 0, 0, 0, 1178, - 1170, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1225, 0, 0, 0, 0, 1181, 0, - 1200, 1272, 0, 1164, 296, 1175, 397, 256, 1318, 0, - 449, 1279, 1289, 1222, 561, 1293, 1220, 1219, 1266, 1179, - 1285, 1213, 361, 1177, 328, 202, 226, 0, 1211, 407, - 457, 469, 1284, 1196, 1205, 254, 1203, 467, 421, 538, - 234, 283, 454, 427, 465, 437, 286, 1245, 1264, 466, - 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, - 556, 584, 227, 259, 415, 500, 541, 489, 393, 519, - 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, - 243, 232, 525, 544, 288, 452, 431, 432, 570, 579, - 214, 502, 533, 240, 479, 0, 0, 586, 248, 499, - 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, - 292, 0, 0, 257, 410, 527, 528, 255, 587, 229, - 555, 221, 1176, 554, 403, 522, 531, 390, 379, 220, - 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, - 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, - 0, 494, 543, 588, 235, 236, 238, 1191, 278, 282, - 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, - 1280, 517, 536, 548, 560, 566, 567, 569, 571, 572, - 573, 574, 580, 578, 575, 576, 577, 402, 309, 490, - 331, 369, 1269, 1311, 420, 468, 241, 540, 491, 1314, - 1315, 1316, 1317, 1186, 1190, 1184, 1251, 1185, 1240, 1241, - 1187, 1302, 1303, 1304, 589, 590, 591, 592, 593, 594, - 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 0, 1273, 1180, 0, 1188, 1189, 1282, 1291, - 1292, 607, 380, 481, 537, 333, 345, 348, 338, 357, - 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, - 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, - 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, - 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, - 446, 1244, 201, 222, 364, 1307, 450, 287, 585, 551, - 545, 208, 224, 1183, 261, 1194, 1202, 0, 1208, 1216, - 1217, 1229, 1231, 1232, 1233, 1234, 1252, 1253, 1255, 1263, - 1265, 1268, 1270, 1277, 1288, 1310, 203, 204, 211, 223, - 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, - 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, - 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, - 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, - 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, - 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, - 441, 442, 312, 313, 582, 583, 298, 534, 565, 532, - 581, 559, 435, 374, 1243, 1313, 549, 1249, 377, 280, - 303, 318, 1258, 550, 497, 228, 462, 289, 252, 1276, - 1278, 213, 247, 231, 258, 273, 276, 322, 387, 395, - 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, - 506, 508, 391, 265, 428, 1239, 1267, 372, 514, 515, - 314, 392, 0, 0, 0, 0, 0, 513, 0, 717, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, - 0, 0, 0, 0, 704, 0, 0, 0, 269, 709, - 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, - 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, - 315, 381, 423, 503, 417, 716, 366, 0, 0, 492, - 396, 0, 0, 0, 0, 0, 712, 713, 0, 0, - 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, - 408, 493, 285, 0, 97, 0, 0, 854, 838, 804, - 805, 842, 855, 856, 857, 858, 843, 0, 239, 844, - 845, 246, 846, 0, 803, 744, 746, 745, 763, 764, - 765, 766, 767, 768, 769, 742, 851, 859, 860, 0, - 264, 319, 271, 263, 518, 0, 0, 2020, 2021, 2022, - 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, - 686, 701, 0, 715, 0, 0, 0, 274, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 698, 699, 0, 0, 0, 0, 798, - 0, 700, 0, 0, 708, 861, 862, 863, 864, 865, - 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, - 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, - 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, - 896, 897, 898, 899, 900, 901, 902, 711, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, - 397, 256, 0, 0, 449, 797, 0, 0, 561, 0, - 0, 795, 0, 0, 0, 0, 361, 0, 328, 202, - 226, 0, 0, 407, 457, 469, 0, 0, 0, 848, - 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, - 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, - 262, 401, 547, 507, 556, 584, 227, 259, 415, 500, - 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, - 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, - 431, 432, 570, 579, 214, 502, 533, 240, 479, 0, - 0, 586, 248, 499, 216, 530, 498, 389, 324, 325, - 215, 0, 453, 267, 292, 0, 0, 257, 410, 849, - 850, 255, 587, 750, 555, 221, 0, 554, 403, 522, - 531, 390, 379, 220, 529, 388, 378, 332, 758, 759, - 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, - 209, 542, 0, 210, 0, 494, 543, 588, 235, 236, - 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, - 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, - 567, 569, 571, 572, 573, 574, 580, 578, 575, 576, - 577, 402, 309, 490, 331, 369, 0, 0, 420, 468, - 241, 540, 491, 0, 0, 0, 0, 808, 796, 721, - 812, 723, 809, 810, 718, 719, 722, 811, 589, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 0, 799, 707, 706, - 0, 714, 0, 740, 741, 743, 747, 748, 749, 760, - 761, 762, 770, 772, 773, 771, 774, 775, 776, 779, - 780, 781, 782, 777, 778, 783, 724, 728, 725, 726, - 727, 739, 729, 730, 731, 732, 733, 734, 735, 736, - 737, 738, 822, 823, 824, 825, 826, 827, 753, 757, - 756, 754, 755, 751, 752, 705, 201, 222, 364, 0, - 450, 287, 585, 551, 545, 208, 224, 813, 261, 814, - 0, 0, 818, 0, 0, 0, 820, 819, 0, 821, - 787, 786, 0, 0, 815, 816, 0, 817, 0, 0, - 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, - 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, - 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, - 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, - 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, - 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, - 564, 476, 828, 829, 830, 831, 832, 833, 834, 835, - 298, 534, 565, 532, 581, 559, 435, 374, 0, 0, - 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, - 462, 289, 252, 853, 0, 213, 247, 231, 258, 273, - 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, - 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, - 0, 372, 514, 515, 314, 513, 0, 717, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, - 0, 0, 704, 0, 0, 0, 269, 709, 0, 0, - 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, - 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, - 423, 503, 417, 716, 366, 0, 0, 492, 396, 0, - 0, 0, 0, 0, 712, 713, 0, 0, 0, 0, - 0, 0, 2169, 0, 321, 249, 323, 206, 408, 493, - 285, 0, 97, 0, 0, 854, 838, 804, 805, 842, - 855, 856, 857, 858, 843, 0, 239, 844, 845, 246, - 846, 0, 803, 744, 746, 745, 763, 764, 765, 766, - 767, 768, 769, 742, 851, 859, 860, 2170, 264, 319, - 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, - 230, 0, 0, 0, 0, 0, 0, 0, 686, 701, - 0, 715, 0, 0, 0, 274, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 698, 699, 0, 0, 0, 0, 798, 0, 700, - 0, 0, 708, 861, 862, 863, 864, 865, 866, 867, - 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, - 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, - 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, - 898, 899, 900, 901, 902, 711, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, - 0, 0, 449, 797, 0, 0, 561, 0, 0, 795, - 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, - 0, 407, 457, 469, 0, 0, 0, 848, 0, 467, - 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, - 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, - 547, 507, 556, 584, 227, 259, 415, 500, 541, 489, - 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, - 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, - 570, 579, 214, 502, 533, 240, 479, 0, 0, 586, - 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, - 453, 267, 292, 0, 0, 257, 410, 849, 850, 255, - 587, 750, 555, 221, 0, 554, 403, 522, 531, 390, - 379, 220, 529, 388, 378, 332, 758, 759, 279, 305, - 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, - 0, 210, 0, 494, 543, 588, 235, 236, 238, 0, - 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, - 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, - 571, 572, 573, 574, 580, 578, 575, 576, 577, 402, - 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, - 491, 0, 0, 0, 0, 808, 796, 721, 812, 723, - 809, 810, 718, 719, 722, 811, 589, 590, 591, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 0, 799, 707, 706, 0, 714, - 0, 740, 741, 743, 747, 748, 749, 760, 761, 762, - 770, 772, 773, 771, 774, 775, 776, 779, 780, 781, - 782, 777, 778, 783, 724, 728, 725, 726, 727, 739, - 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, - 822, 823, 824, 825, 826, 827, 753, 757, 756, 754, - 755, 751, 752, 705, 201, 222, 364, 0, 450, 287, - 585, 551, 545, 208, 224, 813, 261, 814, 0, 0, - 818, 0, 0, 0, 820, 819, 0, 821, 787, 786, - 0, 0, 815, 816, 0, 817, 0, 0, 203, 204, - 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, - 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, - 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, - 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, - 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, - 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 828, 829, 830, 831, 832, 833, 834, 835, 298, 534, - 565, 532, 581, 559, 435, 374, 0, 0, 549, 0, - 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, - 252, 853, 0, 213, 247, 231, 258, 273, 276, 322, - 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, - 504, 505, 506, 508, 391, 265, 428, 0, 392, 372, - 514, 515, 314, 88, 513, 0, 717, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, - 0, 704, 0, 0, 0, 269, 709, 0, 0, 0, - 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, - 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 716, 366, 0, 0, 492, 396, 0, 0, - 0, 0, 0, 712, 713, 0, 0, 0, 0, 0, - 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, - 0, 97, 0, 0, 854, 838, 804, 805, 842, 855, - 856, 857, 858, 843, 0, 239, 844, 845, 246, 846, - 0, 803, 744, 746, 745, 763, 764, 765, 766, 767, - 768, 769, 742, 851, 859, 860, 0, 264, 319, 271, - 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 686, 701, 0, - 715, 0, 0, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 698, 699, 0, 0, 0, 0, 798, 0, 700, 0, - 0, 708, 861, 862, 863, 864, 865, 866, 867, 868, - 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, - 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, - 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, - 899, 900, 901, 902, 711, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, - 0, 449, 797, 0, 0, 561, 0, 0, 795, 0, - 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, - 407, 457, 469, 0, 0, 0, 848, 0, 467, 421, - 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, - 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 584, 227, 259, 415, 500, 541, 489, 393, - 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, - 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 579, 214, 502, 533, 240, 479, 0, 0, 586, 248, - 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 849, 850, 255, 587, - 750, 555, 221, 0, 554, 403, 522, 531, 390, 379, - 220, 529, 388, 378, 332, 758, 759, 279, 305, 444, - 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 588, 235, 236, 238, 0, 278, - 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 0, 517, 536, 548, 560, 566, 567, 569, 571, - 572, 573, 574, 580, 578, 575, 576, 577, 402, 309, - 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, - 0, 0, 0, 0, 808, 796, 721, 812, 723, 809, - 810, 718, 719, 722, 811, 589, 590, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 0, 799, 707, 706, 0, 714, 0, - 740, 741, 743, 747, 748, 749, 760, 761, 762, 770, - 772, 773, 771, 774, 775, 776, 779, 780, 781, 782, - 777, 778, 783, 724, 728, 725, 726, 727, 739, 729, - 730, 731, 732, 733, 734, 735, 736, 737, 738, 822, - 823, 824, 825, 826, 827, 753, 757, 756, 754, 755, - 751, 752, 705, 201, 222, 364, 96, 450, 287, 585, - 551, 545, 208, 224, 813, 261, 814, 0, 0, 818, - 0, 0, 0, 820, 819, 0, 821, 787, 786, 0, - 0, 815, 816, 0, 817, 0, 0, 203, 204, 211, - 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, - 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, - 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, - 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, - 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, - 495, 496, 501, 524, 526, 539, 558, 564, 476, 828, - 829, 830, 831, 832, 833, 834, 835, 298, 534, 565, - 532, 581, 559, 435, 374, 0, 0, 549, 0, 377, - 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, - 853, 0, 213, 247, 231, 258, 273, 276, 322, 387, - 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, - 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, - 515, 314, 513, 0, 717, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 411, 0, 0, 0, 0, 704, - 0, 0, 0, 269, 709, 0, 0, 0, 362, 266, - 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, - 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, - 716, 366, 0, 0, 492, 396, 0, 0, 0, 0, - 0, 712, 713, 0, 0, 0, 0, 0, 0, 0, - 0, 321, 249, 323, 206, 408, 493, 285, 0, 97, - 0, 0, 854, 838, 804, 805, 842, 855, 856, 857, - 858, 843, 0, 239, 844, 845, 246, 846, 0, 803, - 744, 746, 745, 763, 764, 765, 766, 767, 768, 769, - 742, 851, 859, 860, 0, 264, 319, 271, 263, 518, - 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, - 0, 0, 0, 0, 0, 686, 701, 0, 715, 0, - 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 698, 699, - 0, 0, 0, 0, 798, 0, 700, 0, 0, 708, - 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, - 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, - 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, - 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, - 901, 902, 711, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, - 797, 0, 0, 561, 0, 0, 795, 0, 0, 0, - 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, - 469, 0, 0, 0, 848, 0, 467, 421, 538, 234, - 283, 454, 427, 465, 437, 286, 3513, 0, 466, 368, - 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, - 584, 227, 259, 415, 500, 541, 489, 393, 519, 520, - 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, - 232, 525, 544, 288, 452, 431, 432, 570, 579, 214, - 502, 533, 240, 479, 0, 0, 586, 248, 499, 216, - 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, - 0, 0, 257, 410, 849, 850, 255, 587, 750, 555, - 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, - 388, 378, 332, 758, 759, 279, 305, 444, 371, 445, - 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, - 494, 543, 588, 235, 236, 238, 0, 278, 282, 290, - 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, - 517, 536, 548, 560, 566, 567, 569, 571, 572, 573, - 574, 580, 578, 575, 576, 577, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 808, 796, 721, 812, 723, 809, 810, 718, - 719, 722, 811, 589, 590, 591, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 0, 799, 707, 706, 0, 714, 0, 740, 741, - 743, 747, 748, 749, 760, 761, 762, 770, 772, 773, - 771, 774, 775, 776, 779, 780, 781, 782, 777, 778, - 783, 724, 728, 725, 726, 727, 739, 729, 730, 731, - 732, 733, 734, 735, 736, 737, 738, 822, 823, 824, - 825, 826, 827, 753, 757, 756, 754, 755, 751, 752, - 705, 201, 222, 364, 0, 450, 287, 585, 551, 545, - 208, 224, 813, 261, 814, 0, 0, 818, 0, 0, - 0, 820, 819, 0, 821, 787, 786, 0, 0, 815, - 816, 0, 817, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 828, 829, 830, - 831, 832, 833, 834, 835, 298, 534, 565, 532, 581, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 853, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 717, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 704, 0, 0, - 0, 269, 709, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 716, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 712, - 713, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 97, 0, 1560, - 854, 838, 804, 805, 842, 855, 856, 857, 858, 843, - 0, 239, 844, 845, 246, 846, 0, 803, 744, 746, - 745, 763, 764, 765, 766, 767, 768, 769, 742, 851, - 859, 860, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 686, 701, 0, 715, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 698, 699, 0, 0, - 0, 0, 798, 0, 700, 0, 0, 708, 861, 862, - 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, - 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, - 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, - 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, - 711, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 797, 0, - 0, 561, 0, 0, 795, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 848, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 584, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 579, 214, 502, 533, - 240, 479, 0, 0, 586, 248, 499, 216, 530, 498, - 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 849, 850, 255, 587, 750, 555, 221, 0, - 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, - 332, 758, 759, 279, 305, 444, 371, 445, 304, 306, - 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 588, 235, 236, 238, 0, 278, 282, 290, 293, 301, - 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, - 548, 560, 566, 567, 569, 571, 572, 573, 574, 580, - 578, 575, 576, 577, 402, 309, 490, 331, 369, 0, - 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, - 808, 796, 721, 812, 723, 809, 810, 718, 719, 722, - 811, 589, 590, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 0, - 799, 707, 706, 0, 714, 0, 740, 741, 743, 747, - 748, 749, 760, 761, 762, 770, 772, 773, 771, 774, - 775, 776, 779, 780, 781, 782, 777, 778, 783, 724, - 728, 725, 726, 727, 739, 729, 730, 731, 732, 733, - 734, 735, 736, 737, 738, 822, 823, 824, 825, 826, - 827, 753, 757, 756, 754, 755, 751, 752, 705, 201, - 222, 364, 0, 450, 287, 585, 551, 545, 208, 224, - 813, 261, 814, 0, 0, 818, 0, 0, 0, 820, - 819, 0, 821, 787, 786, 0, 0, 815, 816, 0, - 817, 0, 0, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 828, 829, 830, 831, 832, - 833, 834, 835, 298, 534, 565, 532, 581, 559, 435, - 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 853, 0, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, - 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 704, 0, 0, 0, 269, - 709, 0, 0, 0, 362, 266, 0, 0, 425, 0, - 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 716, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 712, 713, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 97, 0, 0, 854, 838, - 804, 805, 842, 855, 856, 857, 858, 843, 0, 239, - 844, 845, 246, 846, 0, 803, 744, 746, 745, 763, - 764, 765, 766, 767, 768, 769, 742, 851, 859, 860, - 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, - 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 686, 701, 0, 715, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 698, 699, 942, 0, 0, 0, - 798, 0, 700, 0, 0, 708, 861, 862, 863, 864, - 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, - 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, - 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, - 895, 896, 897, 898, 899, 900, 901, 902, 711, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 797, 0, 0, 561, - 0, 0, 795, 0, 0, 0, 0, 361, 0, 328, - 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, - 848, 0, 467, 421, 538, 234, 283, 454, 427, 465, - 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 584, 227, 259, 415, - 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, - 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 579, 214, 502, 533, 240, 479, - 0, 0, 586, 248, 499, 216, 530, 498, 389, 324, - 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 849, 850, 255, 587, 750, 555, 221, 0, 554, 403, - 522, 531, 390, 379, 220, 529, 388, 378, 332, 758, - 759, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 588, 235, - 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, - 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, - 566, 567, 569, 571, 572, 573, 574, 580, 578, 575, - 576, 577, 402, 309, 490, 331, 369, 0, 0, 420, - 468, 241, 540, 491, 0, 0, 0, 0, 808, 796, - 721, 812, 723, 809, 810, 718, 719, 722, 811, 589, - 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 0, 799, 707, - 706, 0, 714, 0, 740, 741, 743, 747, 748, 749, - 760, 761, 762, 770, 772, 773, 771, 774, 775, 776, - 779, 780, 781, 782, 777, 778, 783, 724, 728, 725, - 726, 727, 739, 729, 730, 731, 732, 733, 734, 735, - 736, 737, 738, 822, 823, 824, 825, 826, 827, 753, - 757, 756, 754, 755, 751, 752, 705, 201, 222, 364, - 0, 450, 287, 585, 551, 545, 208, 224, 813, 261, - 814, 0, 0, 818, 0, 0, 0, 820, 819, 0, - 821, 787, 786, 0, 0, 815, 816, 0, 817, 0, - 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, - 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, - 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, - 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, - 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, - 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, - 558, 564, 476, 828, 829, 830, 831, 832, 833, 834, - 835, 298, 534, 565, 532, 581, 559, 435, 374, 0, - 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, - 228, 462, 289, 252, 853, 0, 213, 247, 231, 258, - 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, - 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, - 392, 0, 372, 514, 515, 314, 513, 0, 717, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, - 0, 0, 0, 704, 0, 0, 0, 269, 709, 0, - 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, - 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, - 381, 423, 503, 417, 716, 366, 0, 0, 492, 396, - 0, 0, 0, 0, 0, 712, 713, 0, 0, 0, - 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, - 493, 285, 0, 97, 0, 0, 854, 838, 804, 805, - 842, 855, 856, 857, 858, 843, 0, 239, 844, 845, - 246, 846, 0, 803, 744, 746, 745, 763, 764, 765, - 766, 767, 768, 769, 742, 851, 859, 860, 0, 264, - 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 686, - 701, 0, 715, 0, 0, 0, 274, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 698, 699, 0, 0, 0, 0, 798, 0, - 700, 0, 0, 708, 861, 862, 863, 864, 865, 866, - 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, - 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, - 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, - 897, 898, 899, 900, 901, 902, 711, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, - 256, 0, 0, 449, 797, 0, 0, 561, 0, 0, - 795, 0, 0, 0, 0, 361, 0, 328, 202, 226, - 0, 0, 407, 457, 469, 0, 0, 0, 848, 0, - 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, - 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, - 401, 547, 507, 556, 584, 227, 259, 415, 500, 541, - 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, - 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, - 432, 570, 579, 214, 502, 533, 240, 479, 0, 0, - 586, 248, 499, 216, 530, 498, 389, 324, 325, 215, - 0, 453, 267, 292, 0, 0, 257, 410, 849, 850, - 255, 587, 750, 555, 221, 0, 554, 403, 522, 531, - 390, 379, 220, 529, 388, 378, 332, 758, 759, 279, - 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 588, 235, 236, 238, - 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, - 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, - 569, 571, 572, 573, 574, 580, 578, 575, 576, 577, - 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, - 540, 491, 0, 0, 0, 0, 808, 796, 721, 812, - 723, 809, 810, 718, 719, 722, 811, 589, 590, 591, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 0, 799, 707, 706, 0, - 714, 0, 740, 741, 743, 747, 748, 749, 760, 761, - 762, 770, 772, 773, 771, 774, 775, 776, 779, 780, - 781, 782, 777, 778, 783, 724, 728, 725, 726, 727, - 739, 729, 730, 731, 732, 733, 734, 735, 736, 737, - 738, 822, 823, 824, 825, 826, 827, 753, 757, 756, - 754, 755, 751, 752, 705, 201, 222, 364, 0, 450, - 287, 585, 551, 545, 208, 224, 813, 261, 814, 0, - 0, 818, 0, 0, 0, 820, 819, 0, 821, 787, - 786, 0, 0, 815, 816, 0, 817, 0, 0, 203, - 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, - 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, - 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, - 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, - 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, - 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, - 476, 828, 829, 830, 831, 832, 833, 834, 835, 298, - 534, 565, 532, 581, 559, 435, 374, 0, 0, 549, - 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, - 289, 252, 853, 0, 213, 247, 231, 258, 273, 276, - 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, - 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, - 372, 514, 515, 314, 513, 0, 717, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, - 0, 704, 0, 0, 0, 269, 709, 0, 0, 0, - 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, - 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 716, 366, 0, 0, 492, 396, 0, 0, - 0, 0, 0, 712, 713, 0, 0, 0, 0, 0, - 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, - 0, 97, 0, 0, 854, 838, 804, 805, 842, 855, - 856, 857, 858, 843, 0, 239, 844, 845, 246, 846, - 0, 803, 744, 746, 745, 763, 764, 765, 766, 767, - 768, 769, 742, 851, 859, 860, 0, 264, 319, 271, - 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 701, 0, - 715, 0, 0, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 698, 699, 0, 0, 0, 0, 798, 0, 700, 0, - 0, 708, 861, 862, 863, 864, 865, 866, 867, 868, - 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, - 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, - 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, - 899, 900, 901, 902, 711, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, - 0, 449, 797, 0, 0, 561, 0, 0, 795, 0, - 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, - 407, 457, 469, 0, 0, 0, 848, 0, 467, 421, - 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, - 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 584, 227, 259, 415, 500, 541, 489, 393, - 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, - 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 579, 214, 502, 533, 240, 479, 0, 0, 586, 248, - 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 849, 850, 255, 587, - 750, 555, 221, 0, 554, 403, 522, 531, 390, 379, - 220, 529, 388, 378, 332, 758, 759, 279, 305, 444, - 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 588, 235, 236, 238, 0, 278, - 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 0, 517, 536, 548, 560, 566, 567, 569, 571, - 572, 573, 574, 580, 578, 575, 576, 577, 402, 309, - 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, - 0, 0, 0, 0, 808, 796, 721, 812, 723, 809, - 810, 718, 719, 722, 811, 589, 590, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 0, 799, 707, 706, 0, 714, 0, - 740, 741, 743, 747, 748, 749, 760, 761, 762, 770, - 772, 773, 771, 774, 775, 776, 779, 780, 781, 782, - 777, 778, 783, 724, 728, 725, 726, 727, 739, 729, - 730, 731, 732, 733, 734, 735, 736, 737, 738, 822, - 823, 824, 825, 826, 827, 753, 757, 756, 754, 755, - 751, 752, 705, 201, 222, 364, 0, 450, 287, 585, - 551, 545, 208, 224, 813, 261, 814, 0, 0, 818, - 0, 0, 0, 820, 819, 0, 821, 787, 786, 0, - 0, 815, 816, 0, 817, 0, 0, 203, 204, 211, - 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, - 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, - 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, - 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, - 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, - 495, 496, 501, 524, 526, 539, 558, 564, 476, 828, - 829, 830, 831, 832, 833, 834, 835, 298, 534, 565, - 532, 581, 559, 435, 374, 0, 0, 549, 0, 377, - 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, - 853, 0, 213, 247, 231, 258, 273, 276, 322, 387, - 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, - 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, - 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, - 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, - 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, - 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, - 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, - 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, - 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, - 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, - 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, - 0, 0, 1376, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1377, 1378, 1379, 1380, 1381, - 1382, 1383, 1385, 1384, 1386, 1387, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, - 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, - 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, - 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, - 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, - 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, - 584, 227, 259, 415, 500, 541, 489, 393, 519, 520, - 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, - 232, 525, 544, 288, 452, 431, 432, 570, 579, 214, - 502, 533, 240, 479, 0, 0, 586, 248, 499, 216, - 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, - 0, 0, 257, 410, 527, 528, 255, 587, 229, 555, - 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, - 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, - 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, - 494, 543, 588, 235, 236, 238, 0, 278, 282, 290, - 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, - 517, 536, 548, 560, 566, 567, 569, 571, 572, 573, - 574, 580, 578, 575, 576, 577, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 589, 590, 591, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 607, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 585, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 582, 583, 298, 534, 565, 532, 581, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 1015, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 1014, 561, 0, 0, 0, 0, 0, 1011, 1012, 361, - 971, 328, 202, 226, 1005, 1009, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 584, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 579, 214, 502, 533, - 240, 479, 0, 0, 586, 248, 499, 216, 530, 498, - 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 527, 528, 255, 587, 229, 555, 221, 0, - 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, - 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, - 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 588, 235, 236, 238, 0, 278, 282, 290, 293, 301, - 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, - 548, 560, 566, 567, 569, 571, 572, 573, 574, 580, - 578, 575, 576, 577, 402, 309, 490, 331, 369, 0, - 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 589, 590, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 607, 380, - 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, - 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, - 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, - 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, - 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, - 222, 364, 0, 450, 287, 585, 551, 545, 208, 224, - 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 582, 583, 298, 534, 565, 532, 581, 559, 435, - 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, - 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, - 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 0, 0, 0, 1523, 838, - 0, 0, 1520, 0, 0, 0, 0, 1518, 0, 239, - 1519, 1517, 246, 1522, 0, 803, 347, 356, 355, 336, - 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, - 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, - 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, - 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, - 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, - 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, - 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 584, 227, 259, 415, - 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, - 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 579, 214, 502, 533, 240, 479, - 0, 0, 586, 248, 499, 216, 530, 498, 389, 324, - 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 527, 528, 255, 587, 229, 555, 221, 0, 554, 403, - 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, - 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 588, 235, - 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, - 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, - 566, 567, 569, 571, 572, 573, 574, 580, 578, 575, - 576, 577, 402, 309, 490, 331, 369, 0, 0, 420, - 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, - 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 607, 380, 481, 537, - 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, - 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, - 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, - 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, - 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, - 0, 450, 287, 585, 551, 545, 208, 224, 0, 261, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, - 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, - 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, - 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, - 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, - 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, - 558, 564, 476, 299, 300, 441, 442, 312, 313, 582, - 583, 298, 534, 565, 532, 581, 559, 435, 374, 0, - 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, - 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, - 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, - 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, - 0, 392, 372, 514, 515, 314, 88, 513, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, - 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, - 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, - 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, - 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, - 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, - 408, 493, 285, 0, 97, 0, 0, 0, 199, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, - 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, - 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, - 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, - 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, - 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, - 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, - 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, - 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, - 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, - 262, 401, 547, 507, 556, 584, 227, 259, 415, 500, - 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, - 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, - 431, 432, 570, 579, 214, 502, 533, 240, 479, 0, - 0, 586, 248, 499, 216, 530, 498, 389, 324, 325, - 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, - 528, 255, 587, 229, 555, 221, 0, 554, 403, 522, - 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, - 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, - 209, 542, 0, 210, 0, 494, 543, 588, 235, 236, - 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, - 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, - 567, 569, 571, 572, 573, 574, 580, 578, 575, 576, - 577, 402, 309, 490, 331, 369, 0, 0, 420, 468, - 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 589, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 607, 380, 481, 537, 333, - 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, - 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, - 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, - 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, - 463, 329, 330, 375, 446, 0, 201, 222, 364, 96, - 450, 287, 585, 551, 545, 208, 224, 0, 261, 0, - 0, 0, 0, 0, 0, 2156, 0, 0, 2155, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, - 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, - 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, - 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, - 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, - 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, - 564, 476, 299, 300, 441, 442, 312, 313, 582, 583, - 298, 534, 565, 532, 581, 559, 435, 374, 0, 0, - 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, - 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, - 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, - 242, 480, 504, 505, 506, 508, 391, 265, 428, 1579, - 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, - 0, 1581, 0, 0, 0, 0, 269, 0, 0, 0, - 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, - 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, - 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, - 285, 0, 0, 0, 0, 1583, 664, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, - 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, - 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, - 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, - 230, 0, 0, 0, 1357, 0, 1358, 1359, 0, 0, - 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, - 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, - 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, - 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, - 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, - 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, - 547, 507, 556, 584, 227, 259, 415, 500, 541, 489, - 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, - 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, - 570, 579, 214, 502, 533, 240, 479, 0, 0, 586, - 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, - 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, - 587, 229, 555, 221, 0, 554, 403, 522, 531, 390, - 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, - 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, - 0, 210, 0, 494, 543, 588, 235, 236, 238, 0, - 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, - 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, - 571, 572, 573, 574, 580, 578, 575, 576, 577, 402, - 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, - 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 589, 590, 591, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 607, 380, 481, 537, 333, 345, 348, - 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, - 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, - 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, - 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, - 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, - 585, 551, 545, 208, 224, 0, 261, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, - 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, - 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, - 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, - 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, - 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, - 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 299, 300, 441, 442, 312, 313, 582, 583, 298, 534, - 565, 532, 581, 559, 435, 374, 0, 0, 549, 0, - 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, - 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, - 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, - 504, 505, 506, 508, 391, 265, 428, 0, 392, 372, - 514, 515, 314, 88, 513, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, - 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, - 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, - 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, - 0, 97, 0, 1560, 0, 664, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, - 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, - 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, - 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, - 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, - 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, - 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, - 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, - 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 584, 227, 259, 415, 500, 541, 489, 393, - 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, - 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 579, 214, 502, 533, 240, 479, 0, 0, 586, 248, - 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 587, - 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, - 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, - 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 588, 235, 236, 238, 0, 278, - 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 0, 517, 536, 548, 560, 566, 567, 569, 571, - 572, 573, 574, 580, 578, 575, 576, 577, 402, 309, - 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 589, 590, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 607, 380, 481, 537, 333, 345, 348, 338, - 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, - 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, - 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, - 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, - 375, 446, 0, 201, 222, 364, 96, 450, 287, 585, - 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, - 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, - 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, - 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, - 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, - 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, - 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, - 300, 441, 442, 312, 313, 582, 583, 298, 534, 565, - 532, 581, 559, 435, 374, 0, 0, 549, 0, 377, - 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, - 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, - 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, - 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, - 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, - 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, - 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, - 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, - 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 321, 249, 323, 206, 408, 493, 285, 0, 97, - 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, - 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, - 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, - 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, - 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, - 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, - 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, - 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, - 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, - 584, 227, 259, 415, 500, 541, 489, 393, 519, 520, - 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, - 232, 525, 544, 288, 452, 431, 432, 570, 579, 214, - 502, 533, 240, 479, 0, 0, 586, 248, 499, 216, - 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, - 0, 0, 257, 410, 527, 528, 255, 587, 229, 555, - 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, - 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, - 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, - 494, 543, 588, 235, 236, 238, 0, 278, 282, 290, - 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, - 517, 536, 548, 560, 566, 567, 569, 571, 572, 573, - 574, 580, 578, 575, 576, 577, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 589, 590, 591, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 607, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 585, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 2156, 0, 0, 2155, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 582, 583, 298, 534, 565, 532, 581, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 2107, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 1764, 199, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 2105, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 584, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 579, 214, 502, 533, - 240, 479, 0, 0, 586, 248, 499, 216, 530, 498, - 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 527, 528, 255, 587, 229, 555, 221, 0, - 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, - 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, - 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 588, 235, 236, 238, 0, 278, 282, 290, 293, 301, - 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, - 548, 560, 566, 567, 569, 571, 572, 573, 574, 580, - 578, 575, 576, 577, 402, 309, 490, 331, 369, 0, - 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 589, 590, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 607, 380, - 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, - 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, - 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, - 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, - 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, - 222, 364, 0, 450, 287, 585, 551, 545, 208, 224, - 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 582, 583, 298, 534, 565, 532, 581, 559, 435, - 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, - 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, - 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 0, 0, 0, 0, 664, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, - 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, - 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, - 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, - 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 965, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, - 0, 0, 0, 0, 0, 0, 0, 361, 971, 328, - 202, 226, 969, 0, 407, 457, 469, 0, 0, 0, - 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, - 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 584, 227, 259, 415, - 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, - 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 579, 214, 502, 533, 240, 479, - 0, 0, 586, 248, 499, 216, 530, 498, 389, 324, - 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 527, 528, 255, 587, 229, 555, 221, 0, 554, 403, - 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, - 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 588, 235, - 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, - 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, - 566, 567, 569, 571, 572, 573, 574, 580, 578, 575, - 576, 577, 402, 309, 490, 331, 369, 0, 0, 420, - 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, - 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 607, 380, 481, 537, - 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, - 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, - 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, - 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, - 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, - 0, 450, 287, 585, 551, 545, 208, 224, 0, 261, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, - 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, - 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, - 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, - 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, - 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, - 558, 564, 476, 299, 300, 441, 442, 312, 313, 582, - 583, 298, 534, 565, 532, 581, 559, 435, 374, 0, - 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, - 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, - 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, - 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, - 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, - 0, 0, 2107, 0, 0, 0, 0, 269, 0, 0, - 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, - 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, - 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, - 493, 285, 0, 0, 0, 0, 1764, 199, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, - 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, - 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, - 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, - 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, - 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, - 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, - 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, - 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, - 401, 547, 507, 556, 584, 227, 259, 415, 500, 541, - 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, - 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, - 432, 570, 579, 214, 502, 533, 240, 479, 0, 0, - 586, 248, 499, 216, 530, 498, 389, 324, 325, 215, - 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, - 255, 587, 229, 555, 221, 0, 554, 403, 522, 531, - 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, - 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 588, 235, 236, 238, - 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, - 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, - 569, 571, 572, 573, 574, 580, 578, 575, 576, 577, - 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, - 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 589, 590, 591, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 607, 380, 481, 537, 333, 345, - 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, - 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, - 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, - 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, - 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, - 287, 585, 551, 545, 208, 224, 0, 261, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, - 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, - 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, - 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, - 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, - 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, - 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, - 476, 299, 300, 441, 442, 312, 313, 582, 583, 298, - 534, 565, 532, 581, 559, 435, 374, 0, 0, 549, - 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, - 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, - 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, - 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, - 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, - 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, - 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, - 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, - 0, 0, 0, 1560, 0, 664, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, - 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, - 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, - 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, - 0, 449, 0, 0, 0, 561, 0, 0, 0, 3423, - 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, - 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, - 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, - 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 584, 227, 259, 415, 500, 541, 489, 393, - 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, - 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 579, 214, 502, 533, 240, 479, 0, 0, 586, 248, - 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 587, - 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, - 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, - 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 588, 235, 236, 238, 0, 278, - 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 0, 517, 536, 548, 560, 566, 567, 569, 571, - 572, 573, 574, 580, 578, 575, 576, 577, 402, 309, - 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 589, 590, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 607, 380, 481, 537, 333, 345, 348, 338, - 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, - 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, - 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, - 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, - 375, 446, 0, 201, 222, 364, 0, 450, 287, 585, - 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, - 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, - 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, - 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, - 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, - 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, - 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, - 300, 441, 442, 312, 313, 582, 583, 298, 534, 565, - 532, 581, 559, 435, 374, 0, 0, 549, 0, 377, - 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, - 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, - 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, - 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, - 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, - 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, - 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, - 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, - 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, - 0, 0, 1940, 664, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, - 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, - 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, - 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1941, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, - 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, - 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, - 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, - 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, - 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, - 584, 227, 259, 415, 500, 541, 489, 393, 519, 520, - 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, - 232, 525, 544, 288, 452, 431, 432, 570, 579, 214, - 502, 533, 240, 479, 0, 0, 586, 248, 499, 216, - 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, - 0, 0, 257, 410, 527, 528, 255, 587, 229, 555, - 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, - 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, - 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, - 494, 543, 588, 235, 236, 238, 0, 278, 282, 290, - 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, - 517, 536, 548, 560, 566, 567, 569, 571, 572, 573, - 574, 580, 578, 575, 576, 577, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 589, 590, 591, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 607, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 585, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 582, 583, 298, 534, 565, 532, 581, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 2536, 664, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2537, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 584, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 579, 214, 502, 533, - 240, 479, 0, 0, 586, 248, 499, 216, 530, 498, - 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 527, 528, 255, 587, 229, 555, 221, 0, - 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, - 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, - 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 588, 235, 236, 238, 0, 278, 282, 290, 293, 301, - 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, - 548, 560, 566, 567, 569, 571, 572, 573, 574, 580, - 578, 575, 576, 577, 402, 309, 490, 331, 369, 0, - 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 589, 590, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 607, 380, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 589, + 235, 236, 238, 1194, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 1283, 517, 536, 548, + 560, 566, 567, 569, 572, 573, 574, 575, 581, 579, + 576, 577, 578, 571, 402, 309, 490, 331, 369, 1272, + 1314, 420, 468, 241, 540, 491, 1317, 1318, 1319, 1320, + 1189, 1193, 1187, 1254, 1188, 1243, 1244, 1190, 1305, 1306, + 1307, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 0, + 1276, 1183, 0, 1191, 1192, 1285, 1294, 1295, 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, - 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, - 222, 364, 0, 450, 287, 585, 551, 545, 208, 224, - 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, + 546, 307, 464, 463, 329, 330, 375, 446, 1247, 201, + 222, 364, 1310, 450, 287, 586, 551, 545, 208, 224, + 1186, 261, 1197, 1205, 0, 1211, 1219, 1220, 1232, 1234, + 1235, 1236, 1237, 1255, 1256, 1258, 1266, 1268, 1271, 1273, + 1280, 1291, 1313, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 582, 583, 298, 534, 565, 532, 581, 559, 435, - 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, + 313, 583, 584, 298, 534, 565, 532, 582, 559, 435, + 374, 1246, 1316, 549, 1252, 377, 280, 303, 318, 1261, + 550, 497, 228, 462, 289, 252, 1279, 1281, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, - 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, - 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 0, 0, 0, 0, 664, - 0, 0, 0, 0, 2521, 0, 0, 0, 0, 239, - 0, 0, 246, 2522, 0, 0, 347, 356, 355, 336, - 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, - 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, - 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, - 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, - 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, - 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, - 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 584, 227, 259, 415, - 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, - 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 579, 214, 502, 533, 240, 479, - 0, 0, 586, 248, 499, 216, 530, 498, 389, 324, - 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 527, 528, 255, 587, 229, 555, 221, 0, 554, 403, - 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, - 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 588, 235, - 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, - 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, - 566, 567, 569, 571, 572, 573, 574, 580, 578, 575, - 576, 577, 402, 309, 490, 331, 369, 0, 0, 420, - 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, - 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 607, 380, 481, 537, - 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, - 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, - 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, - 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, - 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, - 0, 450, 287, 585, 551, 545, 208, 224, 0, 261, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, - 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, - 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, - 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, - 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, - 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, - 558, 564, 476, 299, 300, 441, 442, 312, 313, 582, - 583, 298, 534, 565, 532, 581, 559, 435, 374, 0, - 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, - 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, - 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, - 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, - 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, - 0, 0, 0, 0, 0, 0, 0, 269, 1602, 0, - 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, - 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, - 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, - 493, 285, 0, 0, 0, 0, 1601, 664, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, - 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, - 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, - 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, - 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, - 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, - 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, - 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, - 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, - 401, 547, 507, 556, 584, 227, 259, 415, 500, 541, - 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, - 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, - 432, 570, 579, 214, 502, 533, 240, 479, 0, 0, - 586, 248, 499, 216, 530, 498, 389, 324, 325, 215, - 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, - 255, 587, 229, 555, 221, 0, 554, 403, 522, 531, - 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, - 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 588, 235, 236, 238, - 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, - 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, - 569, 571, 572, 573, 574, 580, 578, 575, 576, 577, - 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, - 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 589, 590, 591, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 607, 380, 481, 537, 333, 345, - 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, - 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, - 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, - 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, - 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, - 287, 585, 551, 545, 208, 224, 0, 261, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, - 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, - 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, - 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, - 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, - 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, - 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, - 476, 299, 300, 441, 442, 312, 313, 582, 583, 298, - 534, 565, 532, 581, 559, 435, 374, 0, 0, 549, - 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, - 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, - 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, - 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, - 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, - 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, - 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, + 265, 428, 1242, 1270, 372, 514, 515, 314, 392, 0, + 0, 0, 1299, 1284, 513, 0, 1227, 1302, 1196, 1215, + 1312, 1218, 1221, 1263, 1175, 1241, 411, 1212, 1168, 1200, + 1170, 1207, 1171, 1198, 1229, 269, 1195, 1286, 1245, 1301, + 362, 266, 1177, 1201, 425, 1217, 207, 1265, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, - 0, 0, 0, 0, 0, 666, 667, 668, 0, 0, + 503, 417, 1308, 366, 1251, 0, 492, 396, 0, 0, + 0, 1231, 1290, 1239, 1277, 1226, 1264, 1185, 1250, 1303, + 1213, 1260, 1304, 321, 249, 323, 206, 408, 493, 285, + 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, - 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, - 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, - 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, - 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, - 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, - 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, + 353, 359, 1209, 1257, 1298, 1210, 1259, 264, 319, 271, + 263, 518, 1309, 1289, 1174, 1238, 1297, 0, 0, 230, + 1300, 1233, 0, 1262, 0, 1315, 1169, 1253, 0, 1172, + 1176, 1311, 1293, 1204, 274, 0, 0, 0, 0, 0, + 0, 0, 1230, 1240, 1274, 1278, 1224, 0, 0, 0, + 0, 0, 0, 0, 1202, 0, 1249, 0, 0, 0, + 1181, 1173, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1228, 0, 0, 0, 0, 1184, + 0, 1203, 1275, 0, 1167, 296, 1178, 397, 256, 1321, + 0, 449, 1282, 1292, 1225, 561, 1296, 1223, 1222, 1269, + 1182, 1288, 1216, 361, 1180, 328, 202, 226, 0, 1214, + 407, 457, 469, 1287, 1199, 1208, 254, 1206, 467, 421, + 538, 234, 283, 454, 427, 465, 437, 286, 1248, 1267, 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 584, 227, 259, 415, 500, 541, 489, 393, + 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 579, 214, 502, 533, 240, 479, 0, 0, 586, 248, + 580, 214, 502, 533, 240, 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 587, - 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 588, + 229, 555, 221, 1179, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 588, 235, 236, 238, 0, 278, + 210, 0, 494, 543, 589, 235, 236, 238, 1194, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 0, 517, 536, 548, 560, 566, 567, 569, 571, - 572, 573, 574, 580, 578, 575, 576, 577, 402, 309, - 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 589, 590, 591, 592, 593, + 448, 1283, 517, 536, 548, 560, 566, 567, 569, 572, + 573, 574, 575, 581, 579, 576, 577, 578, 571, 402, + 309, 490, 331, 369, 1272, 1314, 420, 468, 241, 540, + 491, 1317, 1318, 1319, 1320, 1189, 1193, 1187, 1254, 1188, + 1243, 1244, 1190, 1305, 1306, 1307, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 607, 380, 481, 537, 333, 345, 348, 338, - 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, - 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, - 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, - 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, - 375, 446, 0, 201, 222, 364, 0, 450, 287, 585, - 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, - 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, - 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, - 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, - 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, - 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, - 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, - 300, 441, 442, 312, 313, 582, 583, 298, 534, 565, - 532, 581, 559, 435, 374, 0, 0, 549, 0, 377, - 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, - 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, - 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, - 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, - 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, - 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, - 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, - 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, - 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, - 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, - 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, - 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, - 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, - 0, 0, 0, 561, 0, 0, 0, 3547, 0, 0, - 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, - 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, - 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, - 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, - 584, 227, 259, 415, 500, 541, 489, 393, 519, 520, - 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, - 232, 525, 544, 288, 452, 431, 432, 570, 579, 214, - 502, 533, 240, 479, 0, 0, 586, 248, 499, 216, - 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, - 0, 0, 257, 410, 527, 528, 255, 587, 229, 555, - 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, - 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, - 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, - 494, 543, 588, 235, 236, 238, 0, 278, 282, 290, - 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, - 517, 536, 548, 560, 566, 567, 569, 571, 572, 573, - 574, 580, 578, 575, 576, 577, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 589, 590, 591, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 607, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 585, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 582, 583, 298, 534, 565, 532, 581, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 1764, 199, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 584, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 579, 214, 502, 533, - 240, 479, 0, 0, 586, 248, 499, 216, 530, 498, - 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 527, 528, 255, 587, 229, 555, 221, 0, - 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, - 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, - 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 588, 235, 236, 238, 0, 278, 282, 290, 293, 301, - 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, - 548, 560, 566, 567, 569, 571, 572, 573, 574, 580, - 578, 575, 576, 577, 402, 309, 490, 331, 369, 0, - 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 589, 590, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 607, 380, + 604, 605, 606, 607, 0, 1276, 1183, 0, 1191, 1192, + 1285, 1294, 1295, 608, 380, 481, 537, 333, 345, 348, + 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, + 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, + 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, + 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, + 330, 375, 446, 1247, 201, 222, 364, 1310, 450, 287, + 586, 551, 545, 208, 224, 1186, 261, 1197, 1205, 0, + 1211, 1219, 1220, 1232, 1234, 1235, 1236, 1237, 1255, 1256, + 1258, 1266, 1268, 1271, 1273, 1280, 1291, 1313, 203, 204, + 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, + 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, + 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, + 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, + 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, + 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, + 299, 300, 441, 442, 312, 313, 583, 584, 298, 534, + 565, 532, 582, 559, 435, 374, 1246, 1316, 549, 1252, + 377, 280, 303, 318, 1261, 550, 497, 228, 462, 289, + 252, 1279, 1281, 213, 247, 231, 258, 273, 276, 322, + 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, + 504, 505, 506, 508, 391, 265, 428, 1242, 1270, 372, + 514, 515, 314, 392, 0, 0, 0, 1299, 1284, 513, + 0, 1227, 1302, 1196, 1215, 1312, 1218, 1221, 1263, 1175, + 1241, 411, 1212, 1168, 1200, 1170, 1207, 1171, 1198, 1229, + 269, 1195, 1286, 1245, 1301, 362, 266, 1177, 1201, 425, + 1217, 207, 1265, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 1308, 366, 1251, + 0, 492, 396, 0, 0, 0, 1231, 1290, 1239, 1277, + 1226, 1264, 1185, 1250, 1303, 1213, 1260, 1304, 321, 249, + 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, + 840, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, + 336, 337, 339, 341, 346, 353, 359, 1209, 1257, 1298, + 1210, 1259, 264, 319, 271, 263, 518, 1309, 1289, 1174, + 1238, 1297, 0, 0, 230, 1300, 1233, 0, 1262, 0, + 1315, 1169, 1253, 0, 1172, 1176, 1311, 1293, 1204, 274, + 0, 0, 0, 0, 0, 0, 0, 1230, 1240, 1274, + 1278, 1224, 0, 0, 0, 0, 0, 0, 0, 1202, + 0, 1249, 0, 0, 0, 1181, 1173, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1228, + 0, 0, 0, 0, 1184, 0, 1203, 1275, 0, 1167, + 296, 1178, 397, 256, 1321, 0, 449, 1282, 1292, 1225, + 561, 1296, 1223, 1222, 1269, 1182, 1288, 1216, 361, 1180, + 328, 202, 226, 0, 1214, 407, 457, 469, 1287, 1199, + 1208, 254, 1206, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 1248, 1267, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, + 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, + 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, + 288, 452, 431, 432, 570, 580, 214, 502, 533, 240, + 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, + 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, + 410, 527, 528, 255, 588, 229, 555, 221, 1179, 554, + 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, + 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 589, + 235, 236, 238, 1194, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 1283, 517, 536, 548, + 560, 566, 567, 569, 572, 573, 574, 575, 581, 579, + 576, 577, 578, 571, 402, 309, 490, 331, 369, 1272, + 1314, 420, 468, 241, 540, 491, 1317, 1318, 1319, 1320, + 1189, 1193, 1187, 1254, 1188, 1243, 1244, 1190, 1305, 1306, + 1307, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 0, + 1276, 1183, 0, 1191, 1192, 1285, 1294, 1295, 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, - 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, - 222, 364, 0, 450, 287, 585, 551, 545, 208, 224, - 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, + 546, 307, 464, 463, 329, 330, 375, 446, 1247, 201, + 222, 364, 1310, 450, 287, 586, 551, 545, 208, 224, + 1186, 261, 1197, 1205, 0, 1211, 1219, 1220, 1232, 1234, + 1235, 1236, 1237, 1255, 1256, 1258, 1266, 1268, 1271, 1273, + 1280, 1291, 1313, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 582, 583, 298, 534, 565, 532, 581, 559, 435, + 313, 583, 584, 298, 534, 565, 532, 582, 559, 435, + 374, 1246, 1316, 549, 1252, 377, 280, 303, 318, 1261, + 550, 497, 228, 462, 289, 252, 1279, 1281, 213, 247, + 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, + 265, 428, 1242, 1270, 372, 514, 515, 314, 392, 0, + 0, 0, 1299, 1284, 513, 0, 1227, 1302, 1196, 1215, + 1312, 1218, 1221, 1263, 1175, 1241, 411, 1212, 1168, 1200, + 1170, 1207, 1171, 1198, 1229, 269, 1195, 1286, 1245, 1301, + 362, 266, 1177, 1201, 425, 1217, 207, 1265, 482, 253, + 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, + 503, 417, 1308, 366, 1251, 0, 492, 396, 0, 0, + 0, 1231, 1290, 1239, 1277, 1226, 1264, 1185, 1250, 1303, + 1213, 1260, 1304, 321, 249, 323, 206, 408, 493, 285, + 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, + 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, + 353, 359, 1209, 1257, 1298, 1210, 1259, 264, 319, 271, + 263, 518, 1309, 1289, 1174, 1238, 1297, 0, 0, 230, + 1300, 1233, 0, 1262, 0, 1315, 1169, 1253, 0, 1172, + 1176, 1311, 1293, 1204, 274, 0, 0, 0, 0, 0, + 0, 0, 1230, 1240, 1274, 1278, 1224, 0, 0, 0, + 0, 0, 0, 0, 1202, 0, 1249, 0, 0, 0, + 1181, 1173, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1228, 0, 0, 0, 0, 1184, + 0, 1203, 1275, 0, 1167, 296, 1178, 397, 256, 1321, + 0, 449, 1282, 1292, 1225, 561, 1296, 1223, 1222, 1269, + 1182, 1288, 1216, 361, 1180, 328, 202, 226, 0, 1214, + 407, 457, 469, 1287, 1199, 1208, 254, 1206, 467, 421, + 538, 234, 283, 454, 427, 465, 437, 286, 1248, 1267, + 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, + 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, + 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, + 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, + 580, 214, 502, 533, 240, 479, 0, 0, 587, 248, + 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 588, + 229, 555, 221, 1179, 554, 403, 522, 531, 390, 379, + 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, + 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, + 210, 0, 494, 543, 589, 235, 236, 238, 1194, 278, + 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, + 448, 1283, 517, 536, 548, 560, 566, 567, 569, 572, + 573, 574, 575, 581, 579, 576, 577, 578, 571, 402, + 309, 490, 331, 369, 1272, 1314, 420, 468, 241, 540, + 491, 1317, 1318, 1319, 1320, 1189, 1193, 1187, 1254, 1188, + 1243, 1244, 1190, 1305, 1306, 1307, 590, 591, 592, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 0, 1276, 1183, 0, 1191, 1192, + 1285, 1294, 1295, 608, 380, 481, 537, 333, 345, 348, + 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, + 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, + 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, + 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, + 330, 375, 446, 1247, 201, 222, 364, 1310, 450, 287, + 586, 551, 545, 208, 224, 1186, 261, 1197, 1205, 0, + 1211, 1219, 1220, 1232, 1234, 1235, 1236, 1237, 1255, 1256, + 1258, 1266, 1268, 1271, 1273, 1280, 1291, 1313, 203, 204, + 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, + 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, + 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, + 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, + 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, + 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, + 299, 300, 441, 442, 312, 313, 583, 584, 298, 534, + 565, 532, 582, 559, 435, 374, 1246, 1316, 549, 1252, + 377, 280, 303, 318, 1261, 550, 497, 228, 462, 289, + 252, 1279, 1281, 213, 247, 231, 258, 273, 276, 322, + 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, + 504, 505, 506, 508, 391, 265, 428, 1242, 1270, 372, + 514, 515, 314, 392, 0, 0, 0, 0, 0, 513, + 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 0, 0, 0, 706, 0, 0, 0, + 269, 711, 0, 0, 0, 362, 266, 0, 0, 425, + 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 718, 366, 0, + 0, 492, 396, 0, 0, 0, 0, 0, 714, 715, + 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, + 323, 206, 408, 493, 285, 0, 97, 0, 0, 856, + 840, 806, 807, 844, 857, 858, 859, 860, 845, 0, + 239, 846, 847, 246, 848, 0, 805, 746, 748, 747, + 765, 766, 767, 768, 769, 770, 771, 744, 853, 861, + 862, 0, 264, 319, 271, 263, 518, 0, 0, 2024, + 2025, 2026, 0, 0, 230, 0, 0, 0, 0, 0, + 0, 0, 688, 703, 0, 717, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 700, 701, 0, 0, 0, + 0, 800, 0, 702, 0, 0, 710, 863, 864, 865, + 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, + 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 713, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 296, 0, 397, 256, 0, 0, 449, 799, 0, 0, + 561, 0, 0, 797, 0, 0, 0, 0, 361, 0, + 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, + 0, 850, 0, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, + 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, + 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, + 288, 452, 431, 432, 570, 580, 214, 502, 533, 240, + 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, + 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, + 410, 851, 852, 255, 588, 752, 555, 221, 0, 554, + 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, + 760, 761, 279, 305, 444, 371, 445, 304, 306, 399, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 589, + 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, + 560, 566, 567, 569, 572, 573, 574, 575, 581, 579, + 576, 577, 578, 571, 402, 309, 490, 331, 369, 0, + 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, + 810, 798, 723, 814, 725, 811, 812, 720, 721, 724, + 813, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 0, + 801, 709, 708, 0, 716, 0, 742, 743, 745, 749, + 750, 751, 762, 763, 764, 772, 774, 775, 773, 776, + 777, 778, 781, 782, 783, 784, 779, 780, 785, 726, + 730, 727, 728, 729, 741, 731, 732, 733, 734, 735, + 736, 737, 738, 739, 740, 824, 825, 826, 827, 828, + 829, 755, 759, 758, 756, 757, 753, 754, 707, 201, + 222, 364, 0, 450, 287, 586, 551, 545, 208, 224, + 815, 261, 816, 0, 0, 820, 0, 0, 0, 822, + 821, 0, 823, 789, 788, 0, 0, 817, 818, 0, + 819, 0, 0, 203, 204, 211, 223, 233, 237, 244, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, + 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, + 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, + 526, 539, 558, 564, 476, 830, 831, 832, 833, 834, + 835, 836, 837, 298, 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, + 550, 497, 228, 462, 289, 252, 855, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, + 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 706, 0, 0, 0, 269, + 711, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, + 251, 315, 381, 423, 503, 417, 718, 366, 0, 0, + 492, 396, 0, 0, 0, 0, 0, 714, 715, 0, + 0, 0, 0, 0, 0, 2173, 0, 321, 249, 323, + 206, 408, 493, 285, 0, 97, 0, 0, 856, 840, + 806, 807, 844, 857, 858, 859, 860, 845, 0, 239, + 846, 847, 246, 848, 0, 805, 746, 748, 747, 765, + 766, 767, 768, 769, 770, 771, 744, 853, 861, 862, + 2174, 264, 319, 271, 263, 518, 0, 0, 0, 0, + 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, + 0, 688, 703, 0, 717, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, - 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 0, 0, 0, 0, 700, 701, 0, 0, 0, 0, + 800, 0, 702, 0, 0, 710, 863, 864, 865, 866, + 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, + 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, + 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898, 899, 900, 901, 902, 903, 904, 713, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, + 0, 397, 256, 0, 0, 449, 799, 0, 0, 561, + 0, 0, 797, 0, 0, 0, 0, 361, 0, 328, + 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, + 850, 0, 467, 421, 538, 234, 283, 454, 427, 465, + 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, + 563, 262, 401, 547, 507, 556, 585, 227, 259, 415, + 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, + 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, + 452, 431, 432, 570, 580, 214, 502, 533, 240, 479, + 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, + 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, + 851, 852, 255, 588, 752, 555, 221, 0, 554, 403, + 522, 531, 390, 379, 220, 529, 388, 378, 332, 760, + 761, 279, 305, 444, 371, 445, 304, 306, 399, 398, + 400, 209, 542, 0, 210, 0, 494, 543, 589, 235, + 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, + 566, 567, 569, 572, 573, 574, 575, 581, 579, 576, + 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, + 420, 468, 241, 540, 491, 0, 0, 0, 0, 810, + 798, 723, 814, 725, 811, 812, 720, 721, 724, 813, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 0, 801, + 709, 708, 0, 716, 0, 742, 743, 745, 749, 750, + 751, 762, 763, 764, 772, 774, 775, 773, 776, 777, + 778, 781, 782, 783, 784, 779, 780, 785, 726, 730, + 727, 728, 729, 741, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 824, 825, 826, 827, 828, 829, + 755, 759, 758, 756, 757, 753, 754, 707, 201, 222, + 364, 0, 450, 287, 586, 551, 545, 208, 224, 815, + 261, 816, 0, 0, 820, 0, 0, 0, 822, 821, + 0, 823, 789, 788, 0, 0, 817, 818, 0, 819, + 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, + 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, + 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, + 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, + 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, + 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, + 539, 558, 564, 476, 830, 831, 832, 833, 834, 835, + 836, 837, 298, 534, 565, 532, 582, 559, 435, 374, + 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, + 497, 228, 462, 289, 252, 855, 0, 213, 247, 231, + 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, + 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, + 428, 0, 392, 372, 514, 515, 314, 88, 513, 0, + 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 706, 0, 0, 0, 269, + 711, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, + 251, 315, 381, 423, 503, 417, 718, 366, 0, 0, + 492, 396, 0, 0, 0, 0, 0, 714, 715, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 0, 0, 0, 0, 664, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, - 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, - 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, + 206, 408, 493, 285, 0, 97, 0, 0, 856, 840, + 806, 807, 844, 857, 858, 859, 860, 845, 0, 239, + 846, 847, 246, 848, 0, 805, 746, 748, 747, 765, + 766, 767, 768, 769, 770, 771, 744, 853, 861, 862, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 688, 703, 0, 717, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 700, 701, 0, 0, 0, 0, + 800, 0, 702, 0, 0, 710, 863, 864, 865, 866, + 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, + 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, + 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898, 899, 900, 901, 902, 903, 904, 713, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, - 0, 0, 0, 3423, 0, 0, 0, 361, 0, 328, + 0, 397, 256, 0, 0, 449, 799, 0, 0, 561, + 0, 0, 797, 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, - 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, + 850, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 584, 227, 259, 415, + 563, 262, 401, 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 579, 214, 502, 533, 240, 479, - 0, 0, 586, 248, 499, 216, 530, 498, 389, 324, + 452, 431, 432, 570, 580, 214, 502, 533, 240, 479, + 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 527, 528, 255, 587, 229, 555, 221, 0, 554, 403, - 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, - 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 588, 235, + 851, 852, 255, 588, 752, 555, 221, 0, 554, 403, + 522, 531, 390, 379, 220, 529, 388, 378, 332, 760, + 761, 279, 305, 444, 371, 445, 304, 306, 399, 398, + 400, 209, 542, 0, 210, 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, - 566, 567, 569, 571, 572, 573, 574, 580, 578, 575, - 576, 577, 402, 309, 490, 331, 369, 0, 0, 420, - 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, + 566, 567, 569, 572, 573, 574, 575, 581, 579, 576, + 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, + 420, 468, 241, 540, 491, 0, 0, 0, 0, 810, + 798, 723, 814, 725, 811, 812, 720, 721, 724, 813, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 607, 380, 481, 537, - 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, - 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, - 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, - 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, - 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, - 0, 450, 287, 585, 551, 545, 208, 224, 0, 261, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 600, 601, 602, 603, 604, 605, 606, 607, 0, 801, + 709, 708, 0, 716, 0, 742, 743, 745, 749, 750, + 751, 762, 763, 764, 772, 774, 775, 773, 776, 777, + 778, 781, 782, 783, 784, 779, 780, 785, 726, 730, + 727, 728, 729, 741, 731, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 824, 825, 826, 827, 828, 829, + 755, 759, 758, 756, 757, 753, 754, 707, 201, 222, + 364, 96, 450, 287, 586, 551, 545, 208, 224, 815, + 261, 816, 0, 0, 820, 0, 0, 0, 822, 821, + 0, 823, 789, 788, 0, 0, 817, 818, 0, 819, + 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, + 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, + 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, + 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, + 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, + 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, + 539, 558, 564, 476, 830, 831, 832, 833, 834, 835, + 836, 837, 298, 534, 565, 532, 582, 559, 435, 374, + 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, + 497, 228, 462, 289, 252, 855, 0, 213, 247, 231, + 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, + 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, + 428, 392, 0, 372, 514, 515, 314, 513, 0, 719, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, + 0, 0, 0, 0, 706, 0, 0, 0, 269, 711, + 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, + 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, + 315, 381, 423, 503, 417, 718, 366, 0, 0, 492, + 396, 0, 0, 0, 0, 0, 714, 715, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, + 408, 493, 285, 0, 97, 0, 0, 856, 840, 806, + 807, 844, 857, 858, 859, 860, 845, 0, 239, 846, + 847, 246, 848, 0, 805, 746, 748, 747, 765, 766, + 767, 768, 769, 770, 771, 744, 853, 861, 862, 0, + 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, + 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, + 688, 703, 0, 717, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 700, 701, 0, 0, 0, 0, 800, + 0, 702, 0, 0, 710, 863, 864, 865, 866, 867, + 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, + 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, + 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 713, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, + 397, 256, 0, 0, 449, 799, 0, 0, 561, 0, + 0, 797, 0, 0, 0, 0, 361, 0, 328, 202, + 226, 0, 0, 407, 457, 469, 0, 0, 0, 850, + 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, + 286, 3517, 0, 466, 368, 523, 447, 535, 562, 563, + 262, 401, 547, 507, 556, 585, 227, 259, 415, 500, + 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, + 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, + 431, 432, 570, 580, 214, 502, 533, 240, 479, 0, + 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, + 215, 0, 453, 267, 292, 0, 0, 257, 410, 851, + 852, 255, 588, 752, 555, 221, 0, 554, 403, 522, + 531, 390, 379, 220, 529, 388, 378, 332, 760, 761, + 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, + 209, 542, 0, 210, 0, 494, 543, 589, 235, 236, + 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, + 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, + 567, 569, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, + 468, 241, 540, 491, 0, 0, 0, 0, 810, 798, + 723, 814, 725, 811, 812, 720, 721, 724, 813, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 801, 709, + 708, 0, 716, 0, 742, 743, 745, 749, 750, 751, + 762, 763, 764, 772, 774, 775, 773, 776, 777, 778, + 781, 782, 783, 784, 779, 780, 785, 726, 730, 727, + 728, 729, 741, 731, 732, 733, 734, 735, 736, 737, + 738, 739, 740, 824, 825, 826, 827, 828, 829, 755, + 759, 758, 756, 757, 753, 754, 707, 201, 222, 364, + 0, 450, 287, 586, 551, 545, 208, 224, 815, 261, + 816, 0, 0, 820, 0, 0, 0, 822, 821, 0, + 823, 789, 788, 0, 0, 817, 818, 0, 819, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, - 558, 564, 476, 299, 300, 441, 442, 312, 313, 582, - 583, 298, 534, 565, 532, 581, 559, 435, 374, 0, + 558, 564, 476, 830, 831, 832, 833, 834, 835, 836, + 837, 298, 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, - 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, + 228, 462, 289, 252, 855, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, - 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, + 392, 0, 372, 514, 515, 314, 513, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, - 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, + 0, 0, 0, 706, 0, 0, 0, 269, 711, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, - 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 381, 423, 503, 417, 718, 366, 0, 0, 492, 396, + 0, 0, 0, 0, 0, 714, 715, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, - 493, 285, 0, 97, 0, 0, 0, 664, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, - 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, - 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, + 493, 285, 0, 97, 0, 1563, 856, 840, 806, 807, + 844, 857, 858, 859, 860, 845, 0, 239, 846, 847, + 246, 848, 0, 805, 746, 748, 747, 765, 766, 767, + 768, 769, 770, 771, 744, 853, 861, 862, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 230, 0, 0, 0, 0, 0, 0, 0, 688, + 703, 0, 717, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 700, 701, 0, 0, 0, 0, 800, 0, + 702, 0, 0, 710, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, + 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, + 899, 900, 901, 902, 903, 904, 713, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, - 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, - 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, - 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, + 256, 0, 0, 449, 799, 0, 0, 561, 0, 0, + 797, 0, 0, 0, 0, 361, 0, 328, 202, 226, + 0, 0, 407, 457, 469, 0, 0, 0, 850, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, - 401, 547, 507, 556, 584, 227, 259, 415, 500, 541, + 401, 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, - 432, 570, 579, 214, 502, 533, 240, 479, 0, 0, - 586, 248, 499, 216, 530, 498, 389, 324, 325, 215, - 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, - 255, 587, 229, 555, 221, 0, 554, 403, 522, 531, - 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, + 432, 570, 580, 214, 502, 533, 240, 479, 0, 0, + 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 0, 453, 267, 292, 0, 0, 257, 410, 851, 852, + 255, 588, 752, 555, 221, 0, 554, 403, 522, 531, + 390, 379, 220, 529, 388, 378, 332, 760, 761, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 588, 235, 236, 238, + 542, 0, 210, 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, - 569, 571, 572, 573, 574, 580, 578, 575, 576, 577, - 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, - 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 589, 590, 591, + 569, 572, 573, 574, 575, 581, 579, 576, 577, 578, + 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, + 241, 540, 491, 0, 0, 0, 0, 810, 798, 723, + 814, 725, 811, 812, 720, 721, 724, 813, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 607, 380, 481, 537, 333, 345, - 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, - 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, - 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, - 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, - 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, - 287, 585, 551, 545, 208, 224, 0, 261, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, + 602, 603, 604, 605, 606, 607, 0, 801, 709, 708, + 0, 716, 0, 742, 743, 745, 749, 750, 751, 762, + 763, 764, 772, 774, 775, 773, 776, 777, 778, 781, + 782, 783, 784, 779, 780, 785, 726, 730, 727, 728, + 729, 741, 731, 732, 733, 734, 735, 736, 737, 738, + 739, 740, 824, 825, 826, 827, 828, 829, 755, 759, + 758, 756, 757, 753, 754, 707, 201, 222, 364, 0, + 450, 287, 586, 551, 545, 208, 224, 815, 261, 816, + 0, 0, 820, 0, 0, 0, 822, 821, 0, 823, + 789, 788, 0, 0, 817, 818, 0, 819, 0, 0, + 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, + 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, + 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, + 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, + 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, + 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, + 564, 476, 830, 831, 832, 833, 834, 835, 836, 837, + 298, 534, 565, 532, 582, 559, 435, 374, 0, 0, + 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, + 462, 289, 252, 855, 0, 213, 247, 231, 258, 273, + 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, + 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, + 0, 372, 514, 515, 314, 513, 0, 719, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, + 0, 0, 706, 0, 0, 0, 269, 711, 0, 0, + 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, + 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, + 423, 503, 417, 718, 366, 0, 0, 492, 396, 0, + 0, 0, 0, 0, 714, 715, 0, 0, 0, 0, + 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, + 285, 0, 97, 0, 0, 856, 840, 806, 807, 844, + 857, 858, 859, 860, 845, 0, 239, 846, 847, 246, + 848, 0, 805, 746, 748, 747, 765, 766, 767, 768, + 769, 770, 771, 744, 853, 861, 862, 0, 264, 319, + 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, + 230, 0, 0, 0, 0, 0, 0, 0, 688, 703, + 0, 717, 0, 0, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 700, 701, 944, 0, 0, 0, 800, 0, 702, + 0, 0, 710, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, + 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, + 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, + 900, 901, 902, 903, 904, 713, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, + 0, 0, 449, 799, 0, 0, 561, 0, 0, 797, + 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, + 0, 407, 457, 469, 0, 0, 0, 850, 0, 467, + 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, + 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, + 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, + 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, + 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, + 570, 580, 214, 502, 533, 240, 479, 0, 0, 587, + 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, + 453, 267, 292, 0, 0, 257, 410, 851, 852, 255, + 588, 752, 555, 221, 0, 554, 403, 522, 531, 390, + 379, 220, 529, 388, 378, 332, 760, 761, 279, 305, + 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, + 0, 210, 0, 494, 543, 589, 235, 236, 238, 0, + 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, + 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, + 572, 573, 574, 575, 581, 579, 576, 577, 578, 571, + 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, + 540, 491, 0, 0, 0, 0, 810, 798, 723, 814, + 725, 811, 812, 720, 721, 724, 813, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 0, 801, 709, 708, 0, + 716, 0, 742, 743, 745, 749, 750, 751, 762, 763, + 764, 772, 774, 775, 773, 776, 777, 778, 781, 782, + 783, 784, 779, 780, 785, 726, 730, 727, 728, 729, + 741, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 740, 824, 825, 826, 827, 828, 829, 755, 759, 758, + 756, 757, 753, 754, 707, 201, 222, 364, 0, 450, + 287, 586, 551, 545, 208, 224, 815, 261, 816, 0, + 0, 820, 0, 0, 0, 822, 821, 0, 823, 789, + 788, 0, 0, 817, 818, 0, 819, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, - 476, 299, 300, 441, 442, 312, 313, 582, 583, 298, - 534, 565, 532, 581, 559, 435, 374, 0, 0, 549, + 476, 830, 831, 832, 833, 834, 835, 836, 837, 298, + 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, - 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, + 289, 252, 855, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, - 372, 514, 515, 314, 513, 0, 0, 0, 0, 2157, + 372, 514, 515, 314, 513, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, - 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, + 0, 706, 0, 0, 0, 269, 711, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 503, 417, 718, 366, 0, 0, 492, 396, 0, 0, + 0, 0, 0, 714, 715, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, - 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, - 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, - 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, + 0, 97, 0, 0, 856, 840, 806, 807, 844, 857, + 858, 859, 860, 845, 0, 239, 846, 847, 246, 848, + 0, 805, 746, 748, 747, 765, 766, 767, 768, 769, + 770, 771, 744, 853, 861, 862, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, + 0, 0, 0, 0, 0, 0, 0, 688, 703, 0, + 717, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 700, 701, 0, 0, 0, 0, 800, 0, 702, 0, + 0, 710, 863, 864, 865, 866, 867, 868, 869, 870, + 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, + 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, + 901, 902, 903, 904, 713, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, - 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, + 0, 449, 799, 0, 0, 561, 0, 0, 797, 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, - 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, + 407, 457, 469, 0, 0, 0, 850, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 584, 227, 259, 415, 500, 541, 489, 393, + 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 579, 214, 502, 533, 240, 479, 0, 0, 586, 248, + 580, 214, 502, 533, 240, 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 587, - 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, - 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, + 267, 292, 0, 0, 257, 410, 851, 852, 255, 588, + 752, 555, 221, 0, 554, 403, 522, 531, 390, 379, + 220, 529, 388, 378, 332, 760, 761, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 588, 235, 236, 238, 0, 278, + 210, 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 0, 517, 536, 548, 560, 566, 567, 569, 571, - 572, 573, 574, 580, 578, 575, 576, 577, 402, 309, - 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 589, 590, 591, 592, 593, + 448, 0, 517, 536, 548, 560, 566, 567, 569, 572, + 573, 574, 575, 581, 579, 576, 577, 578, 571, 402, + 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, + 491, 0, 0, 0, 0, 810, 798, 723, 814, 725, + 811, 812, 720, 721, 724, 813, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 607, 380, 481, 537, 333, 345, 348, 338, - 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, - 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, - 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, - 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, - 375, 446, 0, 201, 222, 364, 0, 450, 287, 585, - 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, + 604, 605, 606, 607, 0, 801, 709, 708, 0, 716, + 0, 742, 743, 745, 749, 750, 751, 762, 763, 764, + 772, 774, 775, 773, 776, 777, 778, 781, 782, 783, + 784, 779, 780, 785, 726, 730, 727, 728, 729, 741, + 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, + 824, 825, 826, 827, 828, 829, 755, 759, 758, 756, + 757, 753, 754, 707, 201, 222, 364, 0, 450, 287, + 586, 551, 545, 208, 224, 815, 261, 816, 0, 0, + 820, 0, 0, 0, 822, 821, 0, 823, 789, 788, + 0, 0, 817, 818, 0, 819, 0, 0, 203, 204, + 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, + 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, + 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, + 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, + 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, + 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, + 830, 831, 832, 833, 834, 835, 836, 837, 298, 534, + 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, + 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, + 252, 855, 0, 213, 247, 231, 258, 273, 276, 322, + 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, + 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, + 514, 515, 314, 513, 0, 719, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, + 706, 0, 0, 0, 269, 711, 0, 0, 0, 362, + 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, + 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, + 417, 718, 366, 0, 0, 492, 396, 0, 0, 0, + 0, 0, 714, 715, 0, 0, 0, 0, 0, 0, + 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, + 97, 0, 0, 856, 840, 806, 807, 844, 857, 858, + 859, 860, 845, 0, 239, 846, 847, 246, 848, 0, + 805, 746, 748, 747, 765, 766, 767, 768, 769, 770, + 771, 744, 853, 861, 862, 0, 264, 319, 271, 263, + 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 703, 0, 717, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 700, + 701, 0, 0, 0, 0, 800, 0, 702, 0, 0, + 710, 863, 864, 865, 866, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, + 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, + 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, + 902, 903, 904, 713, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, + 449, 799, 0, 0, 561, 0, 0, 797, 0, 0, + 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, + 457, 469, 0, 0, 0, 850, 0, 467, 421, 538, + 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, + 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, + 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, + 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, + 243, 232, 525, 544, 288, 452, 431, 432, 570, 580, + 214, 502, 533, 240, 479, 0, 0, 587, 248, 499, + 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, + 292, 0, 0, 257, 410, 851, 852, 255, 588, 752, + 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, + 529, 388, 378, 332, 760, 761, 279, 305, 444, 371, + 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, + 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, + 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, + 0, 517, 536, 548, 560, 566, 567, 569, 572, 573, + 574, 575, 581, 579, 576, 577, 578, 571, 402, 309, + 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, + 0, 0, 0, 0, 810, 798, 723, 814, 725, 811, + 812, 720, 721, 724, 813, 590, 591, 592, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 0, 801, 709, 708, 0, 716, 0, + 742, 743, 745, 749, 750, 751, 762, 763, 764, 772, + 774, 775, 773, 776, 777, 778, 781, 782, 783, 784, + 779, 780, 785, 726, 730, 727, 728, 729, 741, 731, + 732, 733, 734, 735, 736, 737, 738, 739, 740, 824, + 825, 826, 827, 828, 829, 755, 759, 758, 756, 757, + 753, 754, 707, 201, 222, 364, 0, 450, 287, 586, + 551, 545, 208, 224, 815, 261, 816, 0, 0, 820, + 0, 0, 0, 822, 821, 0, 823, 789, 788, 0, + 0, 817, 818, 0, 819, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, - 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, - 300, 441, 442, 312, 313, 582, 583, 298, 534, 565, - 532, 581, 559, 435, 374, 0, 0, 549, 0, 377, + 495, 496, 501, 524, 526, 539, 558, 564, 476, 830, + 831, 832, 833, 834, 835, 836, 837, 298, 534, 565, + 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, - 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, + 855, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, @@ -4968,15 +3634,15 @@ var yyAct = [...]int{ 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, - 0, 0, 1583, 664, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1380, 1381, 1382, 1383, 1384, + 1385, 1386, 1388, 1387, 1389, 1390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4988,30 +3654,97 @@ var yyAct = [...]int{ 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, - 584, 227, 259, 415, 500, 541, 489, 393, 519, 520, + 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, - 232, 525, 544, 288, 452, 431, 432, 570, 579, 214, - 502, 533, 240, 479, 0, 0, 586, 248, 499, 216, + 232, 525, 544, 288, 452, 431, 432, 570, 580, 214, + 502, 533, 240, 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, - 0, 0, 257, 410, 527, 528, 255, 587, 229, 555, + 0, 0, 257, 410, 527, 528, 255, 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, - 494, 543, 588, 235, 236, 238, 0, 278, 282, 290, + 494, 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, - 517, 536, 548, 560, 566, 567, 569, 571, 572, 573, - 574, 580, 578, 575, 576, 577, 402, 309, 490, 331, + 517, 536, 548, 560, 566, 567, 569, 572, 573, 574, + 575, 581, 579, 576, 577, 578, 571, 402, 309, 490, + 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 590, 591, 592, 593, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, + 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, + 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, + 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, + 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, + 446, 0, 201, 222, 364, 0, 450, 287, 586, 551, + 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, + 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, + 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, + 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, + 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, + 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, + 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, + 441, 442, 312, 313, 583, 584, 298, 534, 565, 532, + 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, + 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, + 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, + 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, + 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, + 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, + 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, + 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, + 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, + 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, + 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, + 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, + 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, + 0, 0, 0, 0, 0, 0, 230, 0, 1017, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, + 0, 1016, 561, 0, 0, 0, 0, 0, 1013, 1014, + 361, 973, 328, 202, 226, 1007, 1011, 407, 457, 469, + 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, + 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, + 447, 535, 562, 563, 262, 401, 547, 507, 556, 585, + 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, + 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, + 525, 544, 288, 452, 431, 432, 570, 580, 214, 502, + 533, 240, 479, 0, 0, 587, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 588, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 572, 573, 574, 575, + 581, 579, 576, 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 589, 590, 591, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 607, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 0, 0, 0, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 585, 551, 545, + 0, 201, 222, 364, 0, 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, @@ -5021,7 +3754,7 @@ var yyAct = [...]int{ 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 582, 583, 298, 534, 565, 532, 581, + 442, 312, 313, 583, 584, 298, 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, @@ -5035,6 +3768,73 @@ var yyAct = [...]int{ 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 1526, 840, 0, 0, 1523, 0, 0, 0, 0, 1521, + 0, 239, 1522, 1520, 246, 1525, 0, 805, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 585, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 580, 214, 502, 533, + 240, 479, 0, 0, 587, 248, 499, 216, 530, 498, + 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, + 257, 410, 527, 528, 255, 588, 229, 555, 221, 0, + 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, + 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, + 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, + 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, + 548, 560, 566, 567, 569, 572, 573, 574, 575, 581, + 579, 576, 577, 578, 571, 402, 309, 490, 331, 369, + 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 590, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, + 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, + 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, + 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, + 201, 222, 364, 0, 450, 287, 586, 551, 545, 208, + 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, + 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, + 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, + 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, + 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, + 312, 313, 583, 584, 298, 534, 565, 532, 582, 559, + 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, + 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, + 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, + 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, + 391, 265, 428, 0, 392, 372, 514, 515, 314, 88, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 97, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, @@ -5054,31 +3854,165 @@ var yyAct = [...]int{ 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 584, 227, + 535, 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 579, 214, 502, 533, - 240, 479, 0, 0, 586, 248, 499, 216, 530, 498, + 544, 288, 452, 431, 432, 570, 580, 214, 502, 533, + 240, 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 527, 528, 255, 587, 229, 555, 221, 0, + 257, 410, 527, 528, 255, 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 588, 235, 236, 238, 0, 278, 282, 290, 293, 301, + 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, - 548, 560, 566, 567, 569, 571, 572, 573, 574, 580, - 578, 575, 576, 577, 402, 309, 490, 331, 369, 0, + 548, 560, 566, 567, 569, 572, 573, 574, 575, 581, + 579, 576, 577, 578, 571, 402, 309, 490, 331, 369, + 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 590, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, + 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, + 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, + 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, + 201, 222, 364, 96, 450, 287, 586, 551, 545, 208, + 224, 0, 261, 0, 0, 0, 0, 0, 0, 2160, + 0, 0, 2159, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, + 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, + 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, + 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, + 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, + 312, 313, 583, 584, 298, 534, 565, 532, 582, 559, + 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, + 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, + 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, + 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, + 391, 265, 428, 1582, 0, 372, 514, 515, 314, 513, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 0, 0, 1584, 0, 0, 0, 0, + 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, + 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, + 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, + 323, 206, 408, 493, 285, 0, 0, 0, 0, 1586, + 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, + 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, + 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, + 0, 0, 0, 0, 230, 0, 0, 0, 1360, 0, + 1361, 1362, 0, 0, 0, 0, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, + 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, + 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, + 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, + 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, + 288, 452, 431, 432, 570, 580, 214, 502, 533, 240, + 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, + 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, + 410, 527, 528, 255, 588, 229, 555, 221, 0, 554, + 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, + 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 589, + 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, + 560, 566, 567, 569, 572, 573, 574, 575, 581, 579, + 576, 577, 578, 571, 402, 309, 490, 331, 369, 0, + 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 608, 380, + 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, + 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, + 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, + 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, + 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, + 222, 364, 0, 450, 287, 586, 551, 545, 208, 224, + 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, + 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, + 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, + 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, + 313, 583, 584, 298, 534, 565, 532, 582, 559, 435, + 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, + 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, + 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, + 265, 428, 0, 392, 372, 514, 515, 314, 88, 513, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, + 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, + 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, + 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, + 323, 206, 408, 493, 285, 0, 97, 0, 1563, 0, + 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, + 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, + 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, + 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, + 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, + 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, + 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, + 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, + 288, 452, 431, 432, 570, 580, 214, 502, 533, 240, + 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, + 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, + 410, 527, 528, 255, 588, 229, 555, 221, 0, 554, + 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, + 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 589, + 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, + 560, 566, 567, 569, 572, 573, 574, 575, 581, 579, + 576, 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 589, 590, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 607, 380, + 0, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, - 222, 364, 1895, 450, 287, 585, 551, 545, 208, 224, + 222, 364, 96, 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, @@ -5088,7 +4022,7 @@ var yyAct = [...]int{ 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 582, 583, 298, 534, 565, 532, 581, 559, 435, + 313, 583, 584, 298, 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, @@ -5101,7 +4035,7 @@ var yyAct = [...]int{ 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 0, 0, 0, 1886, 664, + 206, 408, 493, 285, 0, 97, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, @@ -5121,31 +4055,98 @@ var yyAct = [...]int{ 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 584, 227, 259, 415, + 563, 262, 401, 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 579, 214, 502, 533, 240, 479, - 0, 0, 586, 248, 499, 216, 530, 498, 389, 324, + 452, 431, 432, 570, 580, 214, 502, 533, 240, 479, + 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 527, 528, 255, 587, 229, 555, 221, 0, 554, 403, + 527, 528, 255, 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 588, 235, + 400, 209, 542, 0, 210, 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, - 566, 567, 569, 571, 572, 573, 574, 580, 578, 575, - 576, 577, 402, 309, 490, 331, 369, 0, 0, 420, - 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, + 566, 567, 569, 572, 573, 574, 575, 581, 579, 576, + 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, + 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 607, 380, 481, 537, + 600, 601, 602, 603, 604, 605, 606, 607, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 608, 380, 481, + 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, + 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, + 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, + 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, + 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, + 364, 0, 450, 287, 586, 551, 545, 208, 224, 0, + 261, 0, 0, 0, 0, 0, 0, 2160, 0, 0, + 2159, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, + 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, + 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, + 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, + 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, + 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, + 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, + 583, 584, 298, 534, 565, 532, 582, 559, 435, 374, + 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, + 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, + 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, + 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, + 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, + 0, 0, 0, 2111, 0, 0, 0, 0, 269, 0, + 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, + 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, + 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, + 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, + 408, 493, 285, 0, 0, 0, 0, 1767, 199, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, + 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, + 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, + 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, + 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, + 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, + 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, + 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, + 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, + 286, 0, 2109, 466, 368, 523, 447, 535, 562, 563, + 262, 401, 547, 507, 556, 585, 227, 259, 415, 500, + 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, + 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, + 431, 432, 570, 580, 214, 502, 533, 240, 479, 0, + 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, + 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, + 528, 255, 588, 229, 555, 221, 0, 554, 403, 522, + 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, + 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, + 209, 542, 0, 210, 0, 494, 543, 589, 235, 236, + 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, + 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, + 567, 569, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, + 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, - 0, 450, 287, 585, 551, 545, 208, 224, 0, 261, + 0, 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, @@ -5154,28 +4155,28 @@ var yyAct = [...]int{ 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, - 558, 564, 476, 299, 300, 441, 442, 312, 313, 582, - 583, 298, 534, 565, 532, 581, 559, 435, 374, 0, + 558, 564, 476, 299, 300, 441, 442, 312, 313, 583, + 584, 298, 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, - 1731, 0, 0, 0, 0, 0, 0, 269, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, - 493, 285, 0, 0, 0, 0, 0, 664, 0, 0, + 493, 285, 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 967, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5184,35 +4185,102 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, - 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, - 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, + 0, 0, 0, 0, 0, 361, 973, 328, 202, 226, + 971, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, - 401, 547, 507, 556, 584, 227, 259, 415, 500, 541, + 401, 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, - 432, 570, 579, 214, 502, 533, 240, 479, 0, 0, - 586, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 432, 570, 580, 214, 502, 533, 240, 479, 0, 0, + 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, - 255, 587, 229, 555, 221, 0, 554, 403, 522, 531, + 255, 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 588, 235, 236, 238, + 542, 0, 210, 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, - 569, 571, 572, 573, 574, 580, 578, 575, 576, 577, + 569, 572, 573, 574, 575, 581, 579, 576, 577, 578, + 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, + 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 590, 591, + 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 608, 380, 481, 537, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, + 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, + 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, + 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, + 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, + 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, + 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, + 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, + 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, + 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, + 564, 476, 299, 300, 441, 442, 312, 313, 583, 584, + 298, 534, 565, 532, 582, 559, 435, 374, 0, 0, + 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, + 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, + 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, + 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, + 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, + 0, 2111, 0, 0, 0, 0, 269, 0, 0, 0, + 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, + 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, + 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, + 285, 0, 0, 0, 0, 1767, 199, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, + 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, + 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, + 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, + 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, + 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, + 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, + 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, + 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, + 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, + 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, + 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, + 570, 580, 214, 502, 533, 240, 479, 0, 0, 587, + 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, + 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, + 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, + 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, + 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, + 0, 210, 0, 494, 543, 589, 235, 236, 238, 0, + 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, + 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, + 572, 573, 574, 575, 581, 579, 576, 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 589, 590, 591, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 607, 380, 481, 537, 333, 345, + 0, 0, 0, 0, 0, 0, 0, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, - 287, 585, 551, 545, 208, 224, 0, 261, 0, 0, + 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, @@ -5221,21 +4289,21 @@ var yyAct = [...]int{ 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, - 476, 299, 300, 441, 442, 312, 313, 582, 583, 298, - 534, 565, 532, 581, 559, 435, 374, 0, 0, 549, + 476, 299, 300, 441, 442, 312, 313, 583, 584, 298, + 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 411, 0, 1729, 0, + 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, - 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, + 0, 0, 0, 1563, 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, @@ -5250,35 +4318,102 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, - 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, + 0, 449, 0, 0, 0, 561, 0, 0, 0, 3427, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 584, 227, 259, 415, 500, 541, 489, 393, + 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 579, 214, 502, 533, 240, 479, 0, 0, 586, 248, + 580, 214, 502, 533, 240, 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 587, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 588, 235, 236, 238, 0, 278, + 210, 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 0, 517, 536, 548, 560, 566, 567, 569, 571, - 572, 573, 574, 580, 578, 575, 576, 577, 402, 309, + 448, 0, 517, 536, 548, 560, 566, 567, 569, 572, + 573, 574, 575, 581, 579, 576, 577, 578, 571, 402, + 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, + 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 590, 591, 592, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 608, 380, 481, 537, 333, 345, 348, + 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, + 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, + 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, + 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, + 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, + 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, + 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, + 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, + 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, + 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, + 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, + 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, + 299, 300, 441, 442, 312, 313, 583, 584, 298, 534, + 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, + 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, + 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, + 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, + 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, + 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, + 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, + 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, + 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, + 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, + 0, 0, 0, 1944, 666, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, + 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, + 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, + 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1945, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, + 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, + 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, + 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, + 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, + 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, + 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, + 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, + 243, 232, 525, 544, 288, 452, 431, 432, 570, 580, + 214, 502, 533, 240, 479, 0, 0, 587, 248, 499, + 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, + 292, 0, 0, 257, 410, 527, 528, 255, 588, 229, + 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, + 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, + 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, + 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, + 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, + 0, 517, 536, 548, 560, 566, 567, 569, 572, 573, + 574, 575, 581, 579, 576, 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 589, 590, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 607, 380, 481, 537, 333, 345, 348, 338, + 0, 0, 0, 0, 0, 590, 591, 592, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, - 375, 446, 0, 201, 222, 364, 0, 450, 287, 585, + 375, 446, 0, 201, 222, 364, 0, 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, @@ -5288,21 +4423,21 @@ var yyAct = [...]int{ 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, - 300, 441, 442, 312, 313, 582, 583, 298, 534, 565, - 532, 581, 559, 435, 374, 0, 0, 549, 0, 377, + 300, 441, 442, 312, 313, 583, 584, 298, 534, 565, + 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 411, 0, 1727, 0, 0, 0, + 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, - 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, + 0, 0, 2540, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, @@ -5310,7 +4445,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5322,30 +4457,97 @@ var yyAct = [...]int{ 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, - 584, 227, 259, 415, 500, 541, 489, 393, 519, 520, + 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, - 232, 525, 544, 288, 452, 431, 432, 570, 579, 214, - 502, 533, 240, 479, 0, 0, 586, 248, 499, 216, + 232, 525, 544, 288, 452, 431, 432, 570, 580, 214, + 502, 533, 240, 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, - 0, 0, 257, 410, 527, 528, 255, 587, 229, 555, + 0, 0, 257, 410, 527, 528, 255, 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, - 494, 543, 588, 235, 236, 238, 0, 278, 282, 290, + 494, 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, - 517, 536, 548, 560, 566, 567, 569, 571, 572, 573, - 574, 580, 578, 575, 576, 577, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 517, 536, 548, 560, 566, 567, 569, 572, 573, 574, + 575, 581, 579, 576, 577, 578, 571, 402, 309, 490, + 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 589, 590, 591, 592, 593, 594, 595, + 0, 0, 0, 0, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 607, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 606, 607, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, + 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, + 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, + 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, + 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, + 446, 0, 201, 222, 364, 0, 450, 287, 586, 551, + 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, + 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, + 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, + 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, + 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, + 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, + 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, + 441, 442, 312, 313, 583, 584, 298, 534, 565, 532, + 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, + 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, + 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, + 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, + 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, + 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, + 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, + 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, + 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, + 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, + 0, 0, 666, 0, 0, 0, 0, 2525, 0, 0, + 0, 0, 239, 0, 0, 246, 2526, 0, 0, 347, + 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, + 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, + 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, + 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, + 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, + 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, + 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, + 447, 535, 562, 563, 262, 401, 547, 507, 556, 585, + 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, + 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, + 525, 544, 288, 452, 431, 432, 570, 580, 214, 502, + 533, 240, 479, 0, 0, 587, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 588, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 572, 573, 574, 575, + 581, 579, 576, 577, 578, 571, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 585, 551, 545, + 0, 201, 222, 364, 0, 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, @@ -5355,21 +4557,21 @@ var yyAct = [...]int{ 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 582, 583, 298, 534, 565, 532, 581, + 442, 312, 313, 583, 584, 298, 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 1725, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 1605, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, + 1604, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, @@ -5388,31 +4590,98 @@ var yyAct = [...]int{ 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 584, 227, + 535, 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 579, 214, 502, 533, - 240, 479, 0, 0, 586, 248, 499, 216, 530, 498, + 544, 288, 452, 431, 432, 570, 580, 214, 502, 533, + 240, 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 527, 528, 255, 587, 229, 555, 221, 0, + 257, 410, 527, 528, 255, 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 588, 235, 236, 238, 0, 278, 282, 290, 293, 301, + 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, - 548, 560, 566, 567, 569, 571, 572, 573, 574, 580, - 578, 575, 576, 577, 402, 309, 490, 331, 369, 0, + 548, 560, 566, 567, 569, 572, 573, 574, 575, 581, + 579, 576, 577, 578, 571, 402, 309, 490, 331, 369, + 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 590, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, + 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, + 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, + 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, + 201, 222, 364, 0, 450, 287, 586, 551, 545, 208, + 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, + 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, + 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, + 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, + 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, + 312, 313, 583, 584, 298, 534, 565, 532, 582, 559, + 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, + 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, + 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, + 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, + 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, + 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, + 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, + 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, + 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, + 668, 669, 670, 0, 0, 0, 0, 0, 0, 0, + 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, + 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, + 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, + 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, + 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, + 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, + 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, + 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, + 288, 452, 431, 432, 570, 580, 214, 502, 533, 240, + 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, + 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, + 410, 527, 528, 255, 588, 229, 555, 221, 0, 554, + 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, + 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 589, + 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, + 560, 566, 567, 569, 572, 573, 574, 575, 581, 579, + 576, 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 589, 590, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 607, 380, + 0, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, - 222, 364, 0, 450, 287, 585, 551, 545, 208, 224, + 222, 364, 0, 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, @@ -5422,20 +4691,20 @@ var yyAct = [...]int{ 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 582, 583, 298, 534, 565, 532, 581, 559, 435, + 313, 583, 584, 298, 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 1723, 0, 0, 0, 0, 0, 0, 269, + 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 0, 0, 0, 0, 664, + 206, 408, 493, 285, 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, @@ -5451,35 +4720,102 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, - 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, + 0, 0, 0, 3551, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 584, 227, 259, 415, + 563, 262, 401, 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 579, 214, 502, 533, 240, 479, - 0, 0, 586, 248, 499, 216, 530, 498, 389, 324, + 452, 431, 432, 570, 580, 214, 502, 533, 240, 479, + 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 527, 528, 255, 587, 229, 555, 221, 0, 554, 403, + 527, 528, 255, 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 588, 235, + 400, 209, 542, 0, 210, 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, - 566, 567, 569, 571, 572, 573, 574, 580, 578, 575, - 576, 577, 402, 309, 490, 331, 369, 0, 0, 420, - 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, + 566, 567, 569, 572, 573, 574, 575, 581, 579, 576, + 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, + 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 607, 380, 481, 537, + 600, 601, 602, 603, 604, 605, 606, 607, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 608, 380, 481, + 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, + 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, + 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, + 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, + 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, + 364, 0, 450, 287, 586, 551, 545, 208, 224, 0, + 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, + 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, + 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, + 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, + 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, + 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, + 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, + 583, 584, 298, 534, 565, 532, 582, 559, 435, 374, + 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, + 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, + 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, + 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, + 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, + 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, + 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, + 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, + 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, + 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, + 408, 493, 285, 0, 0, 0, 0, 1767, 199, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, + 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, + 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, + 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, + 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, + 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, + 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, + 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, + 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, + 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, + 262, 401, 547, 507, 556, 585, 227, 259, 415, 500, + 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, + 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, + 431, 432, 570, 580, 214, 502, 533, 240, 479, 0, + 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, + 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, + 528, 255, 588, 229, 555, 221, 0, 554, 403, 522, + 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, + 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, + 209, 542, 0, 210, 0, 494, 543, 589, 235, 236, + 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, + 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, + 567, 569, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, + 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, - 0, 450, 287, 585, 551, 545, 208, 224, 0, 261, + 0, 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, @@ -5488,21 +4824,21 @@ var yyAct = [...]int{ 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, - 558, 564, 476, 299, 300, 441, 442, 312, 313, 582, - 583, 298, 534, 565, 532, 581, 559, 435, 374, 0, + 558, 564, 476, 299, 300, 441, 442, 312, 313, 583, + 584, 298, 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, - 1719, 0, 0, 0, 0, 0, 0, 269, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, - 493, 285, 0, 0, 0, 0, 0, 664, 0, 0, + 493, 285, 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, @@ -5518,35 +4854,102 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, - 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, + 0, 3427, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, - 401, 547, 507, 556, 584, 227, 259, 415, 500, 541, + 401, 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, - 432, 570, 579, 214, 502, 533, 240, 479, 0, 0, - 586, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 432, 570, 580, 214, 502, 533, 240, 479, 0, 0, + 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, - 255, 587, 229, 555, 221, 0, 554, 403, 522, 531, + 255, 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 588, 235, 236, 238, + 542, 0, 210, 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, - 569, 571, 572, 573, 574, 580, 578, 575, 576, 577, + 569, 572, 573, 574, 575, 581, 579, 576, 577, 578, + 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, + 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 590, 591, + 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 608, 380, 481, 537, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, + 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, + 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, + 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, + 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, + 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, + 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, + 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, + 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, + 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, + 564, 476, 299, 300, 441, 442, 312, 313, 583, 584, + 298, 534, 565, 532, 582, 559, 435, 374, 0, 0, + 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, + 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, + 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, + 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, + 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, + 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, + 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, + 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, + 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, + 285, 0, 97, 0, 0, 0, 666, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, + 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, + 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, + 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, + 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, + 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, + 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, + 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, + 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, + 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, + 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, + 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, + 570, 580, 214, 502, 533, 240, 479, 0, 0, 587, + 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, + 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, + 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, + 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, + 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, + 0, 210, 0, 494, 543, 589, 235, 236, 238, 0, + 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, + 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, + 572, 573, 574, 575, 581, 579, 576, 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 589, 590, 591, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 607, 380, 481, 537, 333, 345, + 0, 0, 0, 0, 0, 0, 0, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, - 287, 585, 551, 545, 208, 224, 0, 261, 0, 0, + 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, @@ -5555,21 +4958,21 @@ var yyAct = [...]int{ 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, - 476, 299, 300, 441, 442, 312, 313, 582, 583, 298, - 534, 565, 532, 581, 559, 435, 374, 0, 0, 549, + 476, 299, 300, 441, 442, 312, 313, 583, 584, 298, + 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, - 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 411, 0, 1717, 0, + 372, 514, 515, 314, 513, 0, 0, 0, 0, 2161, + 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, - 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, @@ -5589,30 +4992,97 @@ var yyAct = [...]int{ 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 584, 227, 259, 415, 500, 541, 489, 393, + 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 579, 214, 502, 533, 240, 479, 0, 0, 586, 248, + 580, 214, 502, 533, 240, 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 587, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 588, 235, 236, 238, 0, 278, + 210, 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 0, 517, 536, 548, 560, 566, 567, 569, 571, - 572, 573, 574, 580, 578, 575, 576, 577, 402, 309, + 448, 0, 517, 536, 548, 560, 566, 567, 569, 572, + 573, 574, 575, 581, 579, 576, 577, 578, 571, 402, + 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, + 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 590, 591, 592, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 608, 380, 481, 537, 333, 345, 348, + 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, + 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, + 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, + 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, + 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, + 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, + 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, + 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, + 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, + 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, + 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, + 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, + 299, 300, 441, 442, 312, 313, 583, 584, 298, 534, + 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, + 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, + 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, + 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, + 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, + 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, + 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, + 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, + 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, + 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, + 0, 0, 0, 1586, 666, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, + 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, + 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, + 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, + 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, + 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, + 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, + 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, + 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, + 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, + 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, + 243, 232, 525, 544, 288, 452, 431, 432, 570, 580, + 214, 502, 533, 240, 479, 0, 0, 587, 248, 499, + 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, + 292, 0, 0, 257, 410, 527, 528, 255, 588, 229, + 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, + 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, + 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, + 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, + 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, + 0, 517, 536, 548, 560, 566, 567, 569, 572, 573, + 574, 575, 581, 579, 576, 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 589, 590, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 607, 380, 481, 537, 333, 345, 348, 338, + 0, 0, 0, 0, 0, 590, 591, 592, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, - 375, 446, 0, 201, 222, 364, 0, 450, 287, 585, + 375, 446, 0, 201, 222, 364, 0, 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, @@ -5622,27 +5092,94 @@ var yyAct = [...]int{ 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, - 300, 441, 442, 312, 313, 582, 583, 298, 534, 565, - 532, 581, 559, 435, 374, 0, 0, 549, 0, 377, + 300, 441, 442, 312, 313, 583, 584, 298, 534, 565, + 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 411, 0, 1715, 0, 0, 0, + 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, - 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, + 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, + 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, + 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, + 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, + 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, + 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, + 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, + 232, 525, 544, 288, 452, 431, 432, 570, 580, 214, + 502, 533, 240, 479, 0, 0, 587, 248, 499, 216, + 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, + 0, 0, 257, 410, 527, 528, 255, 588, 229, 555, + 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, + 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, + 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, + 494, 543, 589, 235, 236, 238, 0, 278, 282, 290, + 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, + 517, 536, 548, 560, 566, 567, 569, 572, 573, 574, + 575, 581, 579, 576, 577, 578, 571, 402, 309, 490, + 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 590, 591, 592, 593, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, + 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, + 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, + 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, + 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, + 446, 0, 201, 222, 364, 1899, 450, 287, 586, 551, + 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, + 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, + 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, + 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, + 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, + 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, + 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, + 441, 442, 312, 313, 583, 584, 298, 534, 565, 532, + 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, + 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, + 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, + 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, + 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, + 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, + 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, + 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, + 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, + 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, + 0, 1890, 666, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, + 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, + 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, + 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5650,36 +5187,36 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, - 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, - 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, - 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, - 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, - 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, - 584, 227, 259, 415, 500, 541, 489, 393, 519, 520, - 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, - 232, 525, 544, 288, 452, 431, 432, 570, 579, 214, - 502, 533, 240, 479, 0, 0, 586, 248, 499, 216, - 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, - 0, 0, 257, 410, 527, 528, 255, 587, 229, 555, - 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, - 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, - 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, - 494, 543, 588, 235, 236, 238, 0, 278, 282, 290, - 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, - 517, 536, 548, 560, 566, 567, 569, 571, 572, 573, - 574, 580, 578, 575, 576, 577, 402, 309, 490, 331, + 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, + 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, + 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, + 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, + 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, + 447, 535, 562, 563, 262, 401, 547, 507, 556, 585, + 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, + 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, + 525, 544, 288, 452, 431, 432, 570, 580, 214, 502, + 533, 240, 479, 0, 0, 587, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 588, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 572, 573, 574, 575, + 581, 579, 576, 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 589, 590, 591, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 607, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 0, 0, 0, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 585, 551, 545, + 0, 201, 222, 364, 0, 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, @@ -5689,21 +5226,21 @@ var yyAct = [...]int{ 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 582, 583, 298, 534, 565, 532, 581, + 442, 312, 313, 583, 584, 298, 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 1734, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 1690, 0, 0, - 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, @@ -5722,31 +5259,98 @@ var yyAct = [...]int{ 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 584, 227, + 535, 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 579, 214, 502, 533, - 240, 479, 0, 0, 586, 248, 499, 216, 530, 498, + 544, 288, 452, 431, 432, 570, 580, 214, 502, 533, + 240, 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 527, 528, 255, 587, 229, 555, 221, 0, + 257, 410, 527, 528, 255, 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 588, 235, 236, 238, 0, 278, 282, 290, 293, 301, + 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, - 548, 560, 566, 567, 569, 571, 572, 573, 574, 580, - 578, 575, 576, 577, 402, 309, 490, 331, 369, 0, + 548, 560, 566, 567, 569, 572, 573, 574, 575, 581, + 579, 576, 577, 578, 571, 402, 309, 490, 331, 369, + 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 590, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, + 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, + 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, + 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, + 201, 222, 364, 0, 450, 287, 586, 551, 545, 208, + 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, + 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, + 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, + 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, + 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, + 312, 313, 583, 584, 298, 534, 565, 532, 582, 559, + 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, + 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, + 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, + 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, + 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 1732, 0, 0, 0, 0, 0, 0, + 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, + 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, + 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, + 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, + 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, + 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, + 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, + 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, + 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, + 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, + 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, + 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, + 288, 452, 431, 432, 570, 580, 214, 502, 533, 240, + 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, + 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, + 410, 527, 528, 255, 588, 229, 555, 221, 0, 554, + 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, + 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 589, + 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, + 560, 566, 567, 569, 572, 573, 574, 575, 581, 579, + 576, 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 589, 590, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 607, 380, + 0, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, - 222, 364, 0, 450, 287, 585, 551, 545, 208, 224, + 222, 364, 0, 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, @@ -5756,20 +5360,20 @@ var yyAct = [...]int{ 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 582, 583, 298, 534, 565, 532, 581, 559, 435, + 313, 583, 584, 298, 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 0, 0, 0, 1587, 269, + 411, 0, 1730, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 0, 0, 0, 0, 199, + 206, 408, 493, 285, 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, @@ -5789,31 +5393,98 @@ var yyAct = [...]int{ 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 584, 227, 259, 415, + 563, 262, 401, 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 579, 214, 502, 533, 240, 479, - 0, 0, 586, 248, 499, 216, 530, 498, 389, 324, + 452, 431, 432, 570, 580, 214, 502, 533, 240, 479, + 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 527, 528, 255, 587, 229, 555, 221, 0, 554, 403, + 527, 528, 255, 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 588, 235, + 400, 209, 542, 0, 210, 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, - 566, 567, 569, 571, 572, 573, 574, 580, 578, 575, - 576, 577, 402, 309, 490, 331, 369, 0, 0, 420, - 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, + 566, 567, 569, 572, 573, 574, 575, 581, 579, 576, + 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, + 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 607, 380, 481, 537, + 600, 601, 602, 603, 604, 605, 606, 607, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 608, 380, 481, + 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, + 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, + 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, + 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, + 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, + 364, 0, 450, 287, 586, 551, 545, 208, 224, 0, + 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, + 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, + 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, + 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, + 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, + 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, + 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, + 583, 584, 298, 534, 565, 532, 582, 559, 435, 374, + 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, + 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, + 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, + 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, + 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, + 0, 1728, 0, 0, 0, 0, 0, 0, 269, 0, + 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, + 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, + 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, + 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, + 408, 493, 285, 0, 0, 0, 0, 0, 666, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, + 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, + 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, + 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, + 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, + 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, + 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, + 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, + 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, + 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, + 262, 401, 547, 507, 556, 585, 227, 259, 415, 500, + 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, + 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, + 431, 432, 570, 580, 214, 502, 533, 240, 479, 0, + 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, + 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, + 528, 255, 588, 229, 555, 221, 0, 554, 403, 522, + 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, + 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, + 209, 542, 0, 210, 0, 494, 543, 589, 235, 236, + 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, + 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, + 567, 569, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, + 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, - 0, 450, 287, 585, 551, 545, 208, 224, 0, 261, + 0, 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, @@ -5822,21 +5493,21 @@ var yyAct = [...]int{ 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, - 558, 564, 476, 299, 300, 441, 442, 312, 313, 582, - 583, 298, 534, 565, 532, 581, 559, 435, 374, 0, + 558, 564, 476, 299, 300, 441, 442, 312, 313, 583, + 584, 298, 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, - 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, + 1726, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, - 493, 285, 0, 97, 0, 0, 0, 838, 0, 0, + 493, 285, 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, @@ -5856,31 +5527,98 @@ var yyAct = [...]int{ 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, - 401, 547, 507, 556, 584, 227, 259, 415, 500, 541, + 401, 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, - 432, 570, 579, 214, 502, 533, 240, 479, 0, 0, - 586, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 432, 570, 580, 214, 502, 533, 240, 479, 0, 0, + 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, - 255, 587, 229, 555, 221, 0, 554, 403, 522, 531, + 255, 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 588, 235, 236, 238, + 542, 0, 210, 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, - 569, 571, 572, 573, 574, 580, 578, 575, 576, 577, + 569, 572, 573, 574, 575, 581, 579, 576, 577, 578, + 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, + 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 590, 591, + 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 608, 380, 481, 537, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, + 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, + 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, + 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, + 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, + 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, + 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, + 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, + 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, + 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, + 564, 476, 299, 300, 441, 442, 312, 313, 583, 584, + 298, 534, 565, 532, 582, 559, 435, 374, 0, 0, + 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, + 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, + 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, + 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, + 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 411, 0, 1722, + 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, + 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, + 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, + 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, + 285, 0, 0, 0, 0, 0, 666, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, + 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, + 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, + 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, + 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, + 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, + 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, + 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, + 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, + 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, + 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, + 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, + 570, 580, 214, 502, 533, 240, 479, 0, 0, 587, + 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, + 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, + 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, + 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, + 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, + 0, 210, 0, 494, 543, 589, 235, 236, 238, 0, + 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, + 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, + 572, 573, 574, 575, 581, 579, 576, 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 589, 590, 591, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 607, 380, 481, 537, 333, 345, + 0, 0, 0, 0, 0, 0, 0, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, - 287, 585, 551, 545, 208, 224, 0, 261, 0, 0, + 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, @@ -5889,21 +5627,21 @@ var yyAct = [...]int{ 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, - 476, 299, 300, 441, 442, 312, 313, 582, 583, 298, - 534, 565, 532, 581, 559, 435, 374, 0, 0, 549, + 476, 299, 300, 441, 442, 312, 313, 583, 584, 298, + 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 411, 0, 1720, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, - 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, @@ -5917,36 +5655,103 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1335, 0, 296, 0, 397, 256, 0, + 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 584, 227, 259, 415, 500, 541, 489, 393, + 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 579, 214, 502, 533, 240, 479, 0, 0, 586, 248, + 580, 214, 502, 533, 240, 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 587, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 588, 235, 236, 238, 0, 278, + 210, 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 0, 517, 536, 548, 560, 566, 567, 569, 571, - 572, 573, 574, 580, 578, 575, 576, 577, 402, 309, + 448, 0, 517, 536, 548, 560, 566, 567, 569, 572, + 573, 574, 575, 581, 579, 576, 577, 578, 571, 402, + 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, + 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 590, 591, 592, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 608, 380, 481, 537, 333, 345, 348, + 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, + 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, + 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, + 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, + 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, + 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, + 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, + 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, + 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, + 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, + 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, + 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, + 299, 300, 441, 442, 312, 313, 583, 584, 298, 534, + 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, + 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, + 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, + 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, + 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, + 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 1718, 0, 0, + 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, + 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, + 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, + 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, + 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, + 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, + 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, + 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, + 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, + 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, + 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, + 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, + 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, + 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, + 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, + 243, 232, 525, 544, 288, 452, 431, 432, 570, 580, + 214, 502, 533, 240, 479, 0, 0, 587, 248, 499, + 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, + 292, 0, 0, 257, 410, 527, 528, 255, 588, 229, + 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, + 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, + 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, + 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, + 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, + 0, 517, 536, 548, 560, 566, 567, 569, 572, 573, + 574, 575, 581, 579, 576, 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 589, 590, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 607, 380, 481, 537, 333, 345, 348, 338, + 0, 0, 0, 0, 0, 590, 591, 592, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, - 375, 446, 0, 201, 222, 364, 0, 450, 287, 585, + 375, 446, 0, 201, 222, 364, 0, 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, @@ -5956,8 +5761,8 @@ var yyAct = [...]int{ 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, - 300, 441, 442, 312, 313, 582, 583, 1334, 534, 565, - 532, 581, 559, 435, 374, 0, 0, 549, 0, 377, + 300, 441, 442, 312, 313, 583, 584, 298, 534, 565, + 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, @@ -5969,8 +5774,8 @@ var yyAct = [...]int{ 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, - 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, + 0, 321, 249, 323, 206, 408, 493, 285, 0, 1693, + 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, @@ -5990,40 +5795,107 @@ var yyAct = [...]int{ 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, - 584, 227, 259, 415, 500, 541, 489, 393, 519, 520, + 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, - 232, 525, 544, 288, 452, 431, 432, 570, 579, 214, - 502, 533, 240, 479, 0, 0, 586, 248, 499, 216, + 232, 525, 544, 288, 452, 431, 432, 570, 580, 214, + 502, 533, 240, 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, - 0, 0, 257, 410, 527, 528, 255, 587, 229, 555, + 0, 0, 257, 410, 527, 528, 255, 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, - 494, 543, 588, 235, 236, 238, 0, 278, 282, 290, + 494, 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, - 517, 536, 548, 560, 566, 567, 569, 571, 572, 573, - 574, 580, 578, 575, 576, 577, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 517, 536, 548, 560, 566, 567, 569, 572, 573, 574, + 575, 581, 579, 576, 577, 578, 571, 402, 309, 490, + 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 589, 590, 591, 592, 593, 594, 595, + 0, 0, 0, 0, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 607, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 606, 607, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, + 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, + 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, + 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, + 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, + 446, 0, 201, 222, 364, 0, 450, 287, 586, 551, + 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, + 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, + 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, + 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, + 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, + 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, + 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, + 441, 442, 312, 313, 583, 584, 298, 534, 565, 532, + 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, + 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, + 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, + 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, + 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, + 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, + 0, 1590, 269, 0, 0, 0, 0, 362, 266, 0, + 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, + 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, + 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, + 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, + 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, + 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, + 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, + 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, + 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, + 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, + 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, + 447, 535, 562, 563, 262, 401, 547, 507, 556, 585, + 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, + 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, + 525, 544, 288, 452, 431, 432, 570, 580, 214, 502, + 533, 240, 479, 0, 0, 587, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 588, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 572, 573, 574, 575, + 581, 579, 576, 577, 578, 571, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 590, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 585, 551, 545, + 0, 201, 222, 364, 0, 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 923, 0, 0, 0, 203, 204, 211, 223, 233, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 582, 583, 298, 534, 565, 532, 581, + 442, 312, 313, 583, 584, 298, 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, @@ -6036,8 +5908,8 @@ var yyAct = [...]int{ 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, + 249, 323, 206, 408, 493, 285, 0, 97, 0, 0, + 0, 840, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, @@ -6051,36 +5923,103 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 610, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 584, 227, + 535, 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 579, 214, 502, 533, - 240, 479, 0, 0, 586, 248, 499, 216, 530, 498, + 544, 288, 452, 431, 432, 570, 580, 214, 502, 533, + 240, 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 527, 528, 255, 587, 229, 555, 221, 0, + 257, 410, 527, 528, 255, 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 588, 235, 236, 238, 0, 278, 282, 290, 293, 301, + 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, - 548, 560, 566, 567, 569, 571, 572, 573, 574, 580, - 578, 575, 576, 577, 402, 309, 490, 331, 369, 0, + 548, 560, 566, 567, 569, 572, 573, 574, 575, 581, + 579, 576, 577, 578, 571, 402, 309, 490, 331, 369, + 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 590, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, + 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, + 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, + 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, + 201, 222, 364, 0, 450, 287, 586, 551, 545, 208, + 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, + 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, + 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, + 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, + 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, + 312, 313, 583, 584, 298, 534, 565, 532, 582, 559, + 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, + 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, + 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, + 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, + 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, + 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, + 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, + 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, + 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, + 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, + 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, + 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, + 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1338, 0, + 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, + 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, + 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, + 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, + 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, + 288, 452, 431, 432, 570, 580, 214, 502, 533, 240, + 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, + 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, + 410, 527, 528, 255, 588, 229, 555, 221, 0, 554, + 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, + 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 589, + 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, + 560, 566, 567, 569, 572, 573, 574, 575, 581, 579, + 576, 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 589, 590, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 607, 380, + 0, 590, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, - 222, 364, 0, 450, 287, 585, 551, 545, 208, 224, + 222, 364, 0, 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, @@ -6090,7 +6029,7 @@ var yyAct = [...]int{ 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 582, 583, 298, 534, 565, 532, 581, 559, 435, + 313, 583, 584, 1337, 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, @@ -6103,7 +6042,7 @@ var yyAct = [...]int{ 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 0, 0, 0, 0, 664, + 206, 408, 493, 285, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, @@ -6123,41 +6062,108 @@ var yyAct = [...]int{ 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 584, 227, 259, 415, + 563, 262, 401, 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 579, 214, 502, 533, 240, 479, - 0, 0, 586, 248, 499, 216, 530, 498, 389, 324, + 452, 431, 432, 570, 580, 214, 502, 533, 240, 479, + 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 527, 528, 255, 587, 229, 555, 221, 0, 554, 403, + 527, 528, 255, 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 588, 235, + 400, 209, 542, 0, 210, 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, - 566, 567, 569, 571, 572, 573, 574, 580, 578, 575, - 576, 577, 402, 309, 490, 331, 369, 0, 0, 420, - 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, + 566, 567, 569, 572, 573, 574, 575, 581, 579, 576, + 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, + 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 607, 380, 481, 537, + 600, 601, 602, 603, 604, 605, 606, 607, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 608, 380, 481, + 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, + 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, + 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, + 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, + 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, + 364, 0, 450, 287, 586, 551, 545, 208, 224, 0, + 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 925, 0, + 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, + 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, + 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, + 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, + 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, + 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, + 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, + 583, 584, 298, 534, 565, 532, 582, 559, 435, 374, + 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, + 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, + 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, + 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, + 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, + 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, + 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, + 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, + 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, + 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, + 408, 493, 285, 0, 0, 0, 0, 0, 199, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, + 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, + 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, + 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, + 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, + 397, 256, 0, 0, 449, 0, 611, 0, 561, 0, + 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, + 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, + 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, + 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, + 262, 401, 547, 507, 556, 585, 227, 259, 415, 500, + 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, + 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, + 431, 432, 570, 580, 214, 502, 533, 240, 479, 0, + 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, + 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, + 528, 255, 588, 229, 555, 221, 0, 554, 403, 522, + 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, + 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, + 209, 542, 0, 210, 0, 494, 543, 589, 235, 236, + 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, + 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, + 567, 569, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, + 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, - 0, 450, 287, 585, 551, 545, 208, 224, 0, 261, + 0, 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, - 383, 384, 385, 3555, 405, 406, 409, 412, 413, 416, + 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, - 558, 564, 476, 299, 300, 441, 442, 312, 313, 582, - 583, 298, 534, 565, 532, 581, 559, 435, 374, 0, + 558, 564, 476, 299, 300, 441, 442, 312, 313, 583, + 584, 298, 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, @@ -6170,7 +6176,7 @@ var yyAct = [...]int{ 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, - 493, 285, 0, 0, 0, 0, 0, 664, 0, 0, + 493, 285, 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, @@ -6190,31 +6196,98 @@ var yyAct = [...]int{ 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, - 401, 547, 507, 556, 584, 227, 259, 415, 500, 541, + 401, 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, - 432, 570, 579, 214, 502, 533, 240, 479, 0, 0, - 586, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 432, 570, 580, 214, 502, 533, 240, 479, 0, 0, + 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, - 255, 587, 229, 555, 221, 0, 554, 403, 522, 531, + 255, 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 588, 235, 236, 238, + 542, 0, 210, 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, - 569, 571, 572, 573, 574, 580, 578, 575, 576, 577, + 569, 572, 573, 574, 575, 581, 579, 576, 577, 578, + 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, + 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 590, 591, + 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 608, 380, 481, 537, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, + 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, + 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, + 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, + 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, + 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, + 384, 385, 3559, 405, 406, 409, 412, 413, 416, 418, + 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, + 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, + 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, + 564, 476, 299, 300, 441, 442, 312, 313, 583, 584, + 298, 534, 565, 532, 582, 559, 435, 374, 0, 0, + 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, + 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, + 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, + 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, + 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, + 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, + 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, + 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, + 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, + 285, 0, 0, 0, 0, 0, 666, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, + 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, + 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, + 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, + 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, + 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, + 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, + 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, + 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, + 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, + 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, + 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, + 570, 580, 214, 502, 533, 240, 479, 0, 0, 587, + 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, + 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, + 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, + 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, + 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, + 0, 210, 0, 494, 543, 589, 235, 236, 238, 0, + 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, + 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, + 572, 573, 574, 575, 581, 579, 576, 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 589, 590, 591, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 607, 380, 481, 537, 333, 345, + 0, 0, 0, 0, 0, 0, 0, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, - 287, 585, 551, 545, 208, 224, 0, 261, 0, 0, + 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, @@ -6223,8 +6296,8 @@ var yyAct = [...]int{ 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, - 476, 299, 300, 441, 442, 312, 313, 582, 583, 298, - 534, 565, 532, 581, 559, 435, 374, 0, 0, 549, + 476, 299, 300, 441, 442, 312, 313, 583, 584, 298, + 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, @@ -6237,7 +6310,7 @@ var yyAct = [...]int{ 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, - 0, 0, 0, 0, 0, 838, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 840, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, @@ -6257,30 +6330,97 @@ var yyAct = [...]int{ 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 584, 227, 259, 415, 500, 541, 489, 393, + 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 579, 214, 502, 533, 240, 479, 0, 0, 586, 248, + 580, 214, 502, 533, 240, 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 587, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 588, 235, 236, 238, 0, 278, + 210, 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 0, 517, 536, 548, 560, 566, 567, 569, 571, - 572, 573, 574, 580, 578, 575, 576, 577, 402, 309, + 448, 0, 517, 536, 548, 560, 566, 567, 569, 572, + 573, 574, 575, 581, 579, 576, 577, 578, 571, 402, + 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, + 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 590, 591, 592, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 608, 380, 481, 537, 333, 345, 348, + 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, + 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, + 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, + 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, + 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, + 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, + 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, + 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, + 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, + 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, + 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, + 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, + 299, 300, 441, 442, 312, 313, 583, 584, 298, 534, + 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, + 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, + 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, + 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, + 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, + 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, + 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, + 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, + 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, + 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, + 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, + 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, + 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, + 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, + 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, + 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, + 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, + 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, + 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, + 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, + 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, + 243, 232, 525, 544, 288, 452, 431, 432, 570, 580, + 214, 502, 533, 240, 479, 0, 0, 587, 248, 499, + 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, + 292, 0, 0, 257, 410, 527, 528, 255, 588, 229, + 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, + 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, + 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, + 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, + 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, + 0, 517, 536, 548, 560, 566, 567, 569, 572, 573, + 574, 575, 581, 579, 576, 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 589, 590, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 607, 380, 481, 537, 333, 345, 348, 338, + 0, 0, 0, 0, 0, 590, 591, 592, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, - 375, 446, 0, 201, 222, 364, 0, 450, 287, 585, + 375, 446, 0, 201, 222, 364, 0, 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, @@ -6290,102 +6430,36 @@ var yyAct = [...]int{ 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, - 300, 441, 442, 312, 313, 582, 583, 298, 534, 565, - 532, 581, 559, 435, 374, 0, 0, 549, 0, 377, + 300, 441, 442, 312, 313, 583, 584, 298, 534, 565, + 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, - 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, - 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, - 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, - 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, - 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, - 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, - 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, - 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, - 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, - 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, - 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, - 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, - 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, - 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, - 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, - 584, 227, 259, 415, 500, 541, 489, 393, 519, 520, - 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, - 232, 525, 544, 288, 452, 431, 432, 570, 579, 214, - 502, 533, 240, 479, 0, 0, 586, 248, 499, 216, - 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, - 0, 0, 257, 410, 527, 528, 255, 587, 229, 555, - 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, - 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, - 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, - 494, 543, 588, 235, 236, 238, 0, 278, 282, 290, - 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, - 517, 536, 548, 560, 566, 567, 569, 571, 572, 573, - 574, 580, 578, 575, 576, 577, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 589, 590, 591, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 607, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 585, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 582, 583, 298, 534, 565, 532, 581, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 0, 0, 372, 514, 515, 314, + 505, 506, 508, 391, 265, 428, 0, 0, 372, 514, + 515, 314, } var yyPact = [...]int{ - -1000, -1000, 6915, -1000, -463, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 5386, -1000, -466, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 2254, 2303, -1000, -1000, -1000, -1000, 2483, -1000, - 992, 1940, -1000, 2249, 4059, -1000, 47322, 589, -1000, 44650, - 588, 587, 143, -116, 164, 29954, -1000, 245, -1000, 219, - 45986, 240, -1000, -1000, -1000, -1000, -343, 18596, 2193, 92, - 89, 47322, -1000, -1000, -1000, -1000, 2449, 1932, -1000, 408, - -1000, -1000, -1000, -1000, -1000, -1000, 43982, -1000, 974, -1000, - -1000, 2256, 2257, 2487, 739, 2209, -1000, 2375, 1932, -1000, - 18596, 2439, 2325, 17928, 17928, 522, -1000, -1000, 259, -1000, - -1000, -1000, 2462, 25278, 47322, -1000, 32626, 465, -1000, 2249, - -1000, -1000, -1000, 108, -1000, 417, 1852, -1000, 1851, -1000, - 1031, 1054, 458, 559, 554, 457, 456, 455, 450, 445, - 442, 440, 432, 464, -1000, 802, 802, -118, -119, 4270, - 504, 513, 513, 873, 548, 2217, 2213, -1000, -1000, 802, - 802, 802, 409, 802, 802, 802, 802, 389, 381, 802, - 802, 802, 802, 802, 802, 802, 802, 802, 802, 802, - 802, 802, 802, 802, 802, 802, 536, 2249, 373, -1000, + -1000, -1000, 2248, 2442, -1000, -1000, -1000, -1000, 2511, -1000, + 1015, 1979, -1000, 2263, 335, -1000, 48083, 643, -1000, 45407, + 638, 624, 140, -83, 241, 30689, -1000, 239, -1000, 230, + 46745, 249, -1000, -1000, -1000, -1000, -313, 19314, 2186, 117, + 93, 48083, -1000, -1000, -1000, -1000, 2476, 1920, -1000, 420, + -1000, -1000, -1000, -1000, -1000, -1000, 44738, -1000, 1038, -1000, + -1000, 2289, 2262, 2517, 779, 2209, -1000, 2413, 1920, -1000, + 19314, 2463, 2332, 18645, 18645, 560, -1000, -1000, 349, -1000, + -1000, -1000, 2523, 26006, 48083, -1000, 33365, 1028, -1000, 2263, + -1000, -1000, -1000, 95, -1000, 462, 1839, -1000, 1838, -1000, + 838, 1077, 480, 613, 604, 476, 475, 472, 471, 470, + 469, 468, 464, 488, -1000, 823, 823, -130, -131, 574, + 592, 549, 549, 831, 597, 2228, 2218, -1000, -1000, 823, + 823, 823, 418, 823, 823, 823, 823, 401, 397, 823, + 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, + 823, 823, 823, 823, 823, 823, 427, 2263, 344, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -6426,62 +6500,62 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 47322, 444, - 47322, -1000, 670, 47322, 47322, -1000, 1202, 1199, -1000, -1000, - 955, -1000, -1000, 955, 106, 955, 955, 955, 955, 215, - 740, 75, -1000, 205, 335, 197, 362, 936, 430, -1000, - -1000, 320, 936, 933, 1583, -1000, 744, 339, 217, -1000, - 955, 955, -1000, -1000, 11891, 173, 11891, 11891, -1000, 2245, - -1000, -1000, -1000, -1000, -1000, 1211, -1000, -1000, -1000, -1000, - 8, 538, -1000, -1000, -1000, -1000, 45986, 43314, 266, -1000, - -1000, 61, -1000, -1000, 1681, 1270, 18596, 1234, -1000, 1729, - 717, -1000, -1000, -1000, -1000, -1000, 632, -1000, 19264, 19264, - 19264, 19264, -1000, -1000, 1858, 42646, 1858, 1858, 19264, 1858, - -1000, 19264, 1858, 1858, 1858, 18596, 1858, 1858, 1858, 1858, - -1000, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, - 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, - 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, - 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, - 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, - 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, - 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, -1000, - -1000, -1000, -1000, 1858, 669, 1858, 1858, 1858, 1858, 1858, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1858, 1858, - 1858, 1858, 1858, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, - 1858, 1858, 1858, 1858, 1858, 1858, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 21268, 1362, 1353, - 1351, -1000, 15924, 1858, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 48083, + 245, 48083, -1000, 699, 48083, 48083, -1000, 1241, 1240, -1000, + -1000, 949, -1000, -1000, 949, 138, 949, 949, 949, 949, + 260, 804, 91, -1000, 251, 386, 236, 336, 932, 309, + -1000, -1000, 321, 932, 1001, 932, 1688, -1000, 800, 330, + 226, -1000, 949, 949, -1000, -1000, 12599, 171, 12599, 12599, + -1000, 2270, -1000, -1000, -1000, -1000, -1000, 1289, -1000, -1000, + -1000, -1000, 2, 595, -1000, -1000, -1000, -1000, 46745, 44069, + 295, -1000, -1000, 52, -1000, -1000, 1760, 1234, 19314, 1348, + -1000, 1622, 760, -1000, -1000, -1000, -1000, -1000, 681, -1000, + 19983, 19983, 19983, 19983, -1000, -1000, 1781, 43400, 1781, 1781, + 19983, 1781, -1000, 19983, 1781, 1781, 1781, 19314, 1781, 1781, + 1781, 1781, -1000, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, -1000, -1000, -1000, -1000, 1781, 694, 1781, 1781, 1781, + 1781, 1781, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 1781, 1781, 1781, 1781, 1781, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 21990, + 1445, 1439, 1435, -1000, 16638, 1781, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 47322, -1000, 1858, 284, 45986, 45986, - 447, 2375, 1932, -1000, 2449, 2394, 408, 2780, 1613, 1979, - 1232, 1932, 1834, 47322, -1000, 1868, -1000, -1000, -1000, -1000, - 2122, 1366, 1575, -1000, -1000, -1000, -1000, 1506, 18596, -1000, - -1000, 2467, -1000, 22605, 667, 2466, 41978, -1000, 522, 522, - 1847, 469, 30, -1000, -1000, -1000, -1000, 825, 29286, -1000, - -1000, -1000, -1000, -1000, 1749, 47322, -1000, -1000, 4048, 1216, - -1000, 1938, -1000, 2379, 1744, -1000, 1889, 18596, 1961, 586, - 1216, 579, 578, 575, -1000, -26, -1000, -1000, -1000, -1000, - -1000, -1000, 802, 802, 802, -1000, 419, 2433, 4059, 4722, - -1000, -1000, -1000, 41310, 1920, 1216, -1000, 1918, -1000, 910, - 631, 658, 658, 1216, -1000, -1000, 46654, 1216, 907, 906, - 1216, 1216, 45986, 45986, -1000, 40642, -1000, 39974, 39306, 1188, - 45986, 38638, 37970, 37302, 36634, 35966, -1000, 2102, -1000, 2079, - -1000, -1000, -1000, 46654, 1216, 1216, 46654, 45986, 46654, 47322, - 1216, -1000, -1000, 400, -1000, -1000, 1187, 1171, 1170, 802, - 802, 1167, 1572, 1564, 1562, 802, 802, 1166, 1559, 31290, - 1550, 368, 1164, 1161, 1159, 1214, 1543, 203, 1540, 1123, - 1104, 1155, 45986, 1914, 47322, -1000, 315, 846, 787, 707, - 824, 2249, 2191, 1842, 531, 583, 1216, 518, 518, 45986, - -1000, 13913, -1000, 515, -1000, -1000, -1000, -1000, 1537, 18596, - -1000, 937, 936, 936, -1000, -1000, -1000, -1000, -1000, -1000, - 955, 47322, 937, -1000, -1000, -1000, 936, 955, 47322, 955, - 955, 955, 955, 936, 936, 936, 955, 47322, 47322, 47322, - 47322, 47322, 47322, 47322, 47322, 47322, 11891, 744, 955, 955, - -359, -363, -1000, 1511, -1000, -1000, 2062, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 48083, -1000, 1781, 283, + 46745, 46745, 451, 2413, 1920, -1000, 2476, 2457, 420, 3070, + 1457, 1500, 1306, 1920, 1810, 48083, -1000, 1875, -1000, -1000, + -1000, -1000, 2113, 1342, 1665, -1000, -1000, -1000, -1000, 2294, + 19314, -1000, -1000, 2506, -1000, 23329, 690, 2505, 42731, -1000, + 560, 560, 1836, 492, 56, -1000, -1000, -1000, -1000, 891, + 30020, -1000, -1000, -1000, -1000, -1000, 1718, 48083, -1000, -1000, + 4080, 1250, -1000, 1977, -1000, 2334, 1716, -1000, 1928, 19314, + 1968, 623, 1250, 606, 605, 594, -1000, -18, -1000, -1000, + -1000, -1000, -1000, -1000, 823, 823, 823, -1000, 486, 2462, + 335, 4268, -1000, -1000, -1000, 42062, 1962, 1250, -1000, 1960, + -1000, 960, 658, 689, 689, 1250, -1000, -1000, 47414, 1250, + 959, 953, 1250, 1250, 46745, 46745, -1000, 41393, -1000, 40724, + 40055, 1239, 46745, 39386, 38717, 38048, 37379, 36710, -1000, 2090, + -1000, 2007, -1000, -1000, -1000, 47414, 1250, 1250, 47414, 46745, + 47414, 48083, 1250, -1000, -1000, 405, -1000, -1000, 1237, 1233, + 1232, 823, 823, 1225, 1663, 1661, 1656, 823, 823, 1222, + 1654, 32027, 1651, 400, 1220, 1219, 1214, 1268, 1629, 207, + 1617, 1218, 1168, 1213, 46745, 1959, 48083, -1000, 323, 820, + 648, 515, 883, 2263, 2183, 1834, 593, 612, 1250, 566, + 566, 46745, -1000, 14624, -1000, 489, -1000, -1000, -1000, -1000, + 1586, 19314, -1000, 961, 932, 932, -1000, -1000, -1000, -1000, + -1000, -1000, 949, 48083, 961, -1000, -1000, -1000, 932, 949, + 48083, 949, 949, 949, 949, 932, 932, 932, 949, 48083, + 48083, 48083, 48083, 48083, 48083, 48083, 48083, 48083, 12599, 800, + 949, 949, -354, 949, -364, -1000, 1578, -1000, -1000, 2083, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -6497,290 +6571,290 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 11891, - 11891, -1000, -1000, -1000, -1000, -1000, 1840, -1000, 227, 42, - 233, -1000, 35298, 410, 823, -1000, 410, -1000, -1000, -1000, - 1839, 34630, -1000, -364, -365, -367, -370, -1000, -1000, -1000, - -1000, -373, -375, -1000, -1000, -1000, 18596, 18596, 18596, 18596, - -155, -1000, 1342, 19264, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 163, 922, 19264, 19264, 19264, 19264, 19264, 19264, 19264, - 19264, 19264, 19264, 19264, 19264, 19264, 19264, 19264, -1000, -1000, - 27282, 8222, 8222, 717, 717, 717, 717, -1000, -93, 1838, - 46654, -1000, -1000, -1000, 665, 18596, 18596, 717, -1000, 1216, - 15924, 19932, 17928, 17928, 18596, 809, 1270, 46654, 18596, -1000, - 1232, -1000, -1000, -1000, 1032, -1000, 880, 2236, 2236, 2236, - 2236, 18596, 18596, 18596, 18596, 18596, 18596, 18596, 18596, 18596, - 18596, 2236, 45986, 45986, 187, 18596, 18596, 18596, 18596, 18596, - 18596, 14587, 18596, 18596, 19264, 18596, 18596, 18596, 1232, 18596, - 18596, 18596, 18596, 18596, 18596, 18596, 18596, 18596, 18596, 18596, - 18596, 18596, 18596, 18596, 18596, 18596, 18596, 18596, 18596, 18596, - 18596, 18596, 18596, 18596, 18596, 18596, 1232, 18596, 1115, 18596, - 18596, 17928, 13239, 17928, 17928, 17928, 17928, 17928, -1000, -1000, - -1000, -1000, -1000, 18596, 18596, 18596, 18596, 18596, 18596, 18596, - 18596, 1232, 18596, 18596, 18596, 18596, 18596, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1387, 1555, 1452, - 18596, -1000, 1837, -1000, -117, 24610, 18596, 1509, 1491, 2465, - 1988, 45986, -1000, -1000, -1000, 2375, -1000, 2375, 1387, 2065, - 17928, -1000, -1000, 2379, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 1549, -1000, 47322, 1834, 2316, 45986, 2111, 1476, - 484, -1000, 18596, 18596, 1833, -1000, 1514, 47322, -1000, -155, - -1000, 33962, -1000, -1000, 11217, 47322, 418, 47322, -1000, 23942, - 33294, 307, -1000, 30, 1769, -1000, 48, 19, 15255, 716, - -1000, -1000, -1000, 4270, 20600, 1638, 716, 130, -1000, -1000, - -1000, 1889, -1000, 1889, 1889, 1889, 1889, 484, 484, 484, - 484, -1000, -1000, -1000, -1000, -1000, 1913, 1912, -1000, 1889, - 1889, 1889, 1889, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 1911, 1911, 1911, 1908, 1908, 1890, 1890, 503, -1000, 18596, - -1000, -1000, 360, 32626, 2264, 1148, 1419, 315, 519, 1984, - 1216, 1216, 1216, 519, -1000, 1314, 1288, 1266, -1000, -453, - 1832, -1000, -1000, 2432, -1000, -1000, 1078, 942, 938, 1042, - 45986, 293, 415, -1000, 491, -1000, 32626, 1216, 904, 658, - 1216, -1000, 1216, -1000, -1000, -1000, -1000, -1000, 1216, -1000, - -1000, 1830, -1000, 1845, 1023, 935, 1000, 927, 1830, -1000, - -1000, -99, 1830, -1000, 1830, -1000, 1830, -1000, 1830, -1000, - 1830, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 805, 211, -248, 45986, 293, 529, -1000, 526, 27282, -1000, - -1000, -1000, 27282, 27282, -1000, -1000, -1000, -1000, 1474, 1466, + -1000, -1000, 12599, 12599, -1000, -1000, -1000, -1000, -1000, 1832, + -1000, 227, 57, 248, -1000, 36041, 426, 856, -1000, 426, + -1000, -1000, -1000, 1831, 35372, -1000, -367, -368, -371, -372, + -1000, -1000, -1000, -1000, -373, -377, -1000, -1000, -1000, 19314, + 19314, 19314, 19314, -160, -1000, 1126, 19983, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 146, 956, 19983, 19983, 19983, 19983, + 19983, 19983, 19983, 19983, 19983, 19983, 19983, 19983, 19983, 19983, + 19983, -1000, -1000, 28013, 6587, 6587, 760, 760, 760, 760, + -1000, -89, 1830, 47414, -1000, -1000, -1000, 687, 19314, 19314, + 760, -1000, 1250, 16638, 20652, 18645, 18645, 19314, 902, 1234, + 47414, 19314, -1000, 1306, -1000, -1000, -1000, 1107, -1000, 1031, + 2224, 2224, 2224, 2224, 19314, 19314, 19314, 19314, 19314, 19314, + 19314, 19314, 19314, 19314, 2224, 46745, 46745, 1488, 19314, 19314, + 19314, 19314, 19314, 19314, 15299, 19314, 19314, 19983, 19314, 19314, + 19314, 1306, 19314, 19314, 19314, 19314, 19314, 19314, 19314, 19314, + 19314, 19314, 19314, 19314, 19314, 19314, 19314, 19314, 19314, 19314, + 19314, 19314, 19314, 19314, 19314, 19314, 19314, 19314, 19314, 1306, + 19314, 1215, 19314, 19314, 18645, 13949, 18645, 18645, 18645, 18645, + 18645, -1000, -1000, -1000, -1000, -1000, 19314, 19314, 19314, 19314, + 19314, 19314, 19314, 19314, 1306, 19314, 19314, 19314, 19314, 19314, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 1447, 1538, 1320, 19314, -1000, 1826, -1000, -72, 25337, 19314, + 1549, 1546, 2496, 2011, 46745, -1000, -1000, -1000, 2413, -1000, + 2413, 1447, 2117, 18645, -1000, -1000, 2334, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 1671, -1000, 48083, 1810, 2327, + 46745, 2087, 1542, 410, -1000, 19314, 19314, 1809, -1000, 1465, + 48083, -1000, -160, -1000, 34703, -1000, -1000, 11924, 48083, 457, + 48083, -1000, 24668, 34034, 311, -1000, 56, 1785, -1000, 63, + 50, 15968, 750, -1000, -1000, -1000, 574, 21321, 1616, 750, + 152, -1000, -1000, -1000, 1928, -1000, 1928, 1928, 1928, 1928, + 410, 410, 410, 410, -1000, -1000, -1000, -1000, -1000, 1958, + 1956, -1000, 1928, 1928, 1928, 1928, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -438, - 47322, -1000, 305, 807, 397, 414, 361, 47322, 690, 2359, - 2357, 2356, 2352, 2347, 2342, 2340, 679, 2335, 2334, 2332, - 2330, 2329, 2322, 2293, 370, 379, 47322, 47322, 518, 2063, - 47322, 2281, 47322, -1000, -1000, -1000, -1000, 487, 47322, -1000, - 364, -1000, -1000, -1000, -1000, -1000, -1000, 1270, 47322, -1000, - -1000, 955, 955, -1000, -1000, 47322, 955, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 955, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 1954, 1954, 1954, 1949, 1949, 1930, 1930, + 535, -1000, 19314, -1000, -1000, 320, 33365, 2308, 1210, 1627, + 323, 568, 1996, 1250, 1250, 1250, 568, -1000, 1287, 1277, + 1275, -1000, -455, 1808, -1000, -1000, 2461, -1000, -1000, 1165, + 983, 980, 1134, 46745, 272, 430, -1000, 523, -1000, 33365, + 1250, 946, 689, 1250, -1000, 1250, -1000, -1000, -1000, -1000, + -1000, 1250, -1000, -1000, 1803, -1000, 1805, 1043, 978, 1041, + 976, 1803, -1000, -1000, -95, 1803, -1000, 1803, -1000, 1803, + -1000, 1803, -1000, 1803, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 868, 240, -209, 46745, 272, 576, -1000, + 575, 28013, -1000, -1000, -1000, 28013, 28013, -1000, -1000, -1000, + -1000, 1540, 1525, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 47322, -1000, -1000, -1000, -1000, 8, 221, - -1000, -1000, 45986, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -43, -1000, 146, 46, 388, -1000, -1000, -1000, - -1000, -1000, 2367, -1000, 1270, 867, 863, -1000, 1858, -1000, - -1000, 1097, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 163, - 19264, 19264, 19264, 1740, 561, 1382, 1182, 1333, 1026, 1026, - 1070, 1070, 721, 721, 721, 721, 721, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 1445, -1000, 1858, 46654, 1719, - 13239, 1587, 1487, 1232, 2833, -1000, 1713, -1000, 1713, 1312, - 832, -1000, 18596, 1232, 2811, -1000, -1000, 1232, 1232, 1232, - 18596, -1000, -1000, 18596, 18596, 18596, 18596, 1419, 1419, 1419, - 1419, 1419, 1419, 1419, 1419, 1419, 1419, 18596, 1829, 1828, - 2464, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 1276, 1419, 1419, 1419, 1419, 1419, 18596, 1635, - -1000, -1000, -1000, 1404, 2774, 1617, 2753, 1419, 1419, -1000, - 1419, 2729, 2724, 1232, 1681, 1232, 1798, -1000, 2719, 1419, - 2711, 2686, 2590, 2048, 2575, 2495, 2474, 1419, 1419, 1419, - 2038, 2451, 2395, 2389, 2353, 2348, 2324, 2309, 2291, 2285, - 1419, -190, 1419, 1232, -1000, -1000, -1000, -1000, -1000, 2259, - 2034, 1232, 1789, 1858, 664, -1000, -1000, 1713, 1232, 1232, - 1713, 1713, 2253, 2247, 2243, 2233, 2226, 2197, 1419, 1419, - -1000, 1419, 2188, 2184, 2026, 2017, 1232, -1000, 1452, 47322, - -1000, -337, -1000, 17, 769, 1858, -1000, 31290, 1232, -1000, - -1000, 5469, -1000, 1030, -1000, -1000, -1000, 28618, 1547, 2379, - -1000, -1000, 1858, 1677, -1000, -1000, 484, 148, 27950, 623, - 623, 160, 1270, 1270, 18596, -1000, -1000, -1000, -1000, -1000, - -1000, 659, 2446, 395, 1858, -1000, 1721, 2434, -1000, -1000, - -1000, 2314, 21937, -1000, -1000, 1858, 1858, 47322, 1836, 1758, - -1000, 652, -1000, 1220, 1769, 30, 29, -1000, -1000, -1000, - -1000, 1270, -1000, 1250, 431, 710, -1000, 493, -1000, -1000, - -1000, -1000, 2202, 127, -1000, -1000, -1000, 278, 484, -1000, - -1000, -1000, -1000, -1000, -1000, 1441, 1441, -1000, -1000, -1000, - -1000, -1000, 1140, -1000, -1000, -1000, -1000, 1129, -1000, -1000, - 1118, -1000, -1000, 2056, 2011, 360, -1000, -1000, 802, 1437, - -1000, -1000, 2199, 802, 802, 45986, -1000, -1000, 1633, 2264, - 305, 47322, 847, 2061, -1000, 1984, 1984, 1984, 47322, -1000, - -1000, -1000, -1000, -1000, -1000, -440, 80, 413, -1000, -1000, - -1000, 4237, 45986, 1673, -1000, 291, -1000, 1571, -1000, 45986, - -1000, 1661, 1906, 1216, 1216, -1000, -1000, -1000, 45986, 1858, - -1000, -1000, -1000, -1000, 582, 2227, 274, -1000, -1000, -219, - -1000, -1000, 293, 291, 46654, 1216, 716, -1000, -1000, -1000, - -1000, -1000, -441, 1656, 569, 296, 354, 47322, 47322, 47322, - 47322, 47322, 654, -1000, -1000, 65, -1000, -1000, -1000, -1000, - 279, -1000, -1000, -1000, -1000, -1000, -1000, 279, -1000, -1000, - -1000, 63, -1000, -1000, -1000, -1000, 279, -1000, -1000, -1000, - -1000, -1000, -1000, 279, -1000, -1000, -1000, -1000, 363, 524, - -1000, 47322, 47322, 682, -1000, -1000, -1000, -1000, -1000, -1000, - 936, -1000, -1000, 936, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 2224, 47322, 41, -397, - -1000, -388, 18596, -1000, -1000, -1000, -1000, 1302, 560, 1382, - 19264, 19264, 19264, -1000, -1000, -1000, 830, 830, 27282, -1000, - 18596, 17928, -1000, -1000, 18596, 18596, 828, -1000, 18596, 1041, - -1000, 18596, -1000, -1000, -1000, 1452, 1419, 1419, 1419, 1419, + -1000, -1000, -442, 48083, -1000, 305, 855, 416, 448, 382, + 48083, 884, 2404, 2401, 2395, 2394, 2392, 2391, 2385, 705, + 2380, 2379, 2373, 2369, 2366, 2339, 2336, 374, 396, 48083, + 48083, 566, 2057, 48083, 2306, 48083, -1000, -1000, -1000, -1000, + 569, 48083, -1000, 325, -1000, -1000, -1000, -1000, -1000, -1000, + 1234, 48083, -1000, -1000, 949, 949, -1000, -1000, 48083, 949, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 949, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 1799, 18596, 18596, 18596, 1232, 365, -1000, -1000, -1000, -1000, - -1000, 2460, -1000, 18596, -1000, 27282, 18596, 18596, 18596, -1000, - -1000, -1000, 18596, 18596, -1000, -1000, 18596, 18596, -1000, 18596, - 18596, 18596, -1000, 18596, 18596, 18596, 18596, -1000, -1000, -1000, - -1000, 18596, 18596, 18596, 18596, 18596, 18596, 18596, 18596, 18596, - 18596, -1000, -1000, 32626, 87, -190, 1115, 87, 1115, -1000, - 17928, 12565, -1000, -1000, -1000, -1000, -1000, 18596, 18596, 18596, - 18596, 18596, 18596, -1000, -1000, -1000, 18596, 18596, -1000, 18596, - -1000, 18596, -1000, -1000, -1000, -1000, -1000, 769, -1000, 658, - 658, 658, 45986, -1000, -1000, -1000, -1000, 1768, -1000, 2328, - -1000, 2135, 2128, 2458, 2446, -1000, 23942, 2379, -1000, -1000, - 45986, -327, -1000, 2179, 2170, 623, 623, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 10543, 2375, 18596, 2058, 46654, 166, - -1000, 23274, 45986, 46654, 23942, 23942, 23942, 23942, 23942, -1000, - 2099, 2082, -1000, 2139, 2081, 2147, 47322, -1000, 1387, 1652, - -1000, 18596, 25946, 1762, 23942, -1000, -1000, 23942, 47322, 9869, - -1000, -1000, 22, 12, -1000, -1000, -1000, -1000, 4270, -1000, - -1000, 369, 2308, 2198, -1000, -1000, -1000, -1000, -1000, 1648, - -1000, 1632, 1766, 1620, 1612, 211, -1000, 1957, 2222, 802, - 802, -1000, 1117, -1000, 1216, 1430, 1421, -1000, -1000, -1000, - 552, -1000, 2280, 47322, 2055, 2051, 2047, -1000, -451, 1114, - 1905, 1953, 18596, 1903, 2426, 1736, 45986, -1000, -1000, 46654, - -1000, 191, -1000, 360, 45986, -1000, -1000, -1000, 415, 47322, - -1000, 7900, -1000, -1000, -1000, 291, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 47322, 322, -1000, 1901, 1209, -1000, -1000, - 1963, -1000, -1000, -1000, -1000, 234, 396, 1398, 253, 1396, - 253, 1390, 253, 253, -1000, 47322, 651, 2011, 47322, -1000, - -1000, -1000, 955, 955, -1000, -1000, 2220, -1000, 1216, 1419, - 19264, 19264, -1000, 717, 356, -136, 1889, 1889, -1000, 1889, - 1890, -1000, 1889, 218, 1889, 207, 1889, -1000, -1000, 1232, - 1232, 1452, -1000, 1944, 1241, -1000, 1270, 18596, 2157, -1000, - -1000, -1000, -1000, -1000, -32, 2125, 2090, 1419, -1000, 1885, - 1884, 18596, 1419, 1232, 1934, 1419, 1419, 1419, 1419, -1000, - 1270, 1452, 2083, 1452, 1419, 1419, 2066, 333, 1419, 1609, - 1609, 1609, 1609, 1609, 1452, 1452, 1452, 1452, 45986, -1000, - -190, -1000, -1000, -238, -239, -1000, 1232, -190, 1764, 1232, - -1000, 1915, 1795, 1959, 1790, 1419, 1664, 1419, 1419, 1419, - 1703, -1000, 2364, 2364, 2364, 1597, 1030, 47322, -1000, -1000, - -1000, -1000, 2446, 2444, 1759, -1000, -1000, 148, 488, -1000, - 2194, 2170, -1000, 2422, 2173, 2419, -1000, -1000, -1000, -1000, - -1000, 1270, -1000, 2251, 1603, -1000, 806, 1707, -1000, -1000, - 17260, 1600, 2127, 646, 1597, 1827, 2434, 1981, 2042, 2910, - -1000, -1000, -1000, -1000, 2075, -1000, 2021, -1000, -1000, 1868, - -1000, 1444, 418, 23942, 1709, 1709, -1000, 621, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 951, 5979, 2485, -1000, 1370, - -1000, 1224, 209, 1110, -1000, -1000, 802, 802, -1000, 903, - 885, -1000, 47322, 1880, -1000, 484, 1367, 484, 1092, -1000, - -1000, 1082, -1000, -1000, -1000, -1000, 2033, 2071, -1000, -1000, - -1000, -1000, 47322, -1000, -1000, 47322, 47322, 47322, 1879, 2417, - -1000, 18596, 1878, 804, 2002, 45986, 45986, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 525, 802, - -421, 371, 367, 802, 802, 802, -452, -1000, -1000, 1595, - 1582, -1000, -120, -1000, 18596, -1000, -1000, -1000, 1240, 1240, - 1362, 1353, 1351, -1000, 1868, -1000, -1000, -1000, 1507, -1000, - -1000, -106, 45986, 45986, 45986, 45986, -1000, -1000, 1020, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 48083, -1000, -1000, + -1000, -1000, 2, 223, -1000, -1000, 46745, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -47, -1000, 80, 48, + 389, -1000, -1000, -1000, -1000, -1000, 2409, -1000, 1234, 934, + 919, -1000, 1781, -1000, -1000, 1115, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 146, 19983, 19983, 19983, 1737, 585, 1975, + 2016, 1493, 1049, 1049, 1085, 1085, 764, 764, 764, 764, + 764, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1518, + -1000, 1781, 47414, 1713, 13949, 1556, 1207, 1306, 2978, -1000, + 1644, -1000, 1644, 1963, 920, -1000, 19314, 1306, 2969, -1000, + -1000, 1306, 1306, 1306, 19314, -1000, -1000, 19314, 19314, 19314, + 19314, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, + 1627, 19314, 1800, 1798, 2492, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 717, 1232, 351, -109, 1232, -1000, - -1000, 484, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 18596, -1000, 18596, -1000, 1270, 18596, 2375, 1337, - 18596, 18596, -1000, 1081, 1043, 1419, -1000, -1000, -1000, 18596, - -1000, -1000, -1000, -1000, -1000, 18596, -1000, -1000, -1000, 18596, - 272, 830, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 1232, 416, -1000, -1000, -1000, -1000, 2452, -1000, - 1232, 18596, -1000, -1000, 18596, -1000, 18596, 18596, -1000, 18596, - -1000, 18596, -1000, -1000, -1000, -1000, 18596, 1858, 2153, 1858, - 1858, 25946, -1000, -1000, 2444, 2396, 2414, 2156, 2168, 2168, - 2194, -1000, 2411, 2409, -1000, 1334, 2408, 1332, 878, -1000, - 46654, 18596, 166, -1000, 406, 45986, 166, 45986, -1000, 2435, - -1000, -1000, 18596, 1875, -1000, 18596, -1000, -1000, -1000, -1000, - 8222, 2446, 1709, -1000, -1000, 729, -1000, 18596, -1000, -1000, - -1000, 8158, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 1329, 1326, -1000, -1000, 1873, 18596, -1000, -1000, -1000, 1426, - 1420, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1868, - -1000, -1000, -1000, -1000, 415, -446, 1869, 45986, 1034, -1000, - 1570, 1736, 398, 166, 1317, 802, 802, 802, 1010, 1007, - 31290, 1520, -1000, 45986, 478, -1000, 415, -1000, -129, -133, - 1419, -1000, -1000, 2306, -1000, -1000, 12565, -1000, -1000, 1865, - 1968, -1000, -1000, -1000, -1000, 2094, -97, -114, -1000, -1000, - 1419, 1419, 1085, 1232, -1000, 1419, 1419, 1405, 1309, -1000, - 1419, 1452, 1675, -1000, 272, 1232, 2036, -1000, -1000, 8222, - -1000, -1000, 2435, 2403, 87, -1000, -1000, 289, 87, 1270, - 1671, 1419, 1553, 1535, 1419, 1419, 26614, -1000, 2400, 2385, - 31958, 31958, 769, 2396, -197, 18596, 18596, 2144, 1013, -1000, - -1000, -1000, -1000, 1304, 1281, -1000, 1279, -1000, 2480, -1000, - 1270, -1000, 166, -1000, 610, 1707, -1000, 2375, 1270, 45986, - 1270, 115, 2435, -1000, 1419, -1000, 1858, 1858, 1858, 1858, - 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, - 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, - 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, - 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, - 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, - 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, - 1858, 1858, 1858, 1858, 1858, 1858, -1000, -1000, 45986, 1855, - -1000, -1000, 2286, 1517, 79, -1000, 1242, 1736, -1000, -1000, - 155, -1000, 18596, -1000, 31290, 1252, 1244, -1000, -1000, -1000, - -1000, -452, -1000, -1000, -1000, -1000, -1000, -1000, 408, 1734, - -1000, 788, 45986, 47322, -1000, 2070, -1000, -1000, -1000, 18596, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 18596, -1000, - 1232, 2031, -1000, -276, -1000, -425, 18596, -190, -1000, -1000, - -190, -1000, 18596, -1000, -1000, 18596, -1000, 18596, -1000, -1000, - 1515, -1000, -1000, -1000, -1000, -1000, 1515, 1515, -1000, -197, - -1000, 1716, -1000, 45986, 1270, 1681, -1000, 998, -1000, -1000, - -1000, -1000, -1000, 46654, 1707, 45986, -1000, 1485, 1232, 1858, - 2375, -1000, 1483, -1000, 408, -1000, 1862, 1953, -1000, -1000, - -1000, 16592, -1000, -1000, -1000, -1000, -1000, 180, -104, 12565, - 9195, 1480, -1000, -101, 1419, 1452, -1000, -377, -1000, -1000, - -1000, -1000, 261, -1000, -1000, 1681, -1000, -1000, 1522, 1395, - 1308, 30622, -1000, -1000, -1000, -1000, -197, -1000, -1000, 2284, - -1000, -1000, 1654, -1000, -1000, 25946, 45318, -1000, -88, 349, - -104, 18596, 1859, 1232, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -7, -1000, -1000, -1000, -1000, -1000, 1963, -111, - -1000, -1000, -1000, 238, -401, -194, -218, -1000, -1000, 19264, - -1000, 18596, -1000, 18596, -1000, 18596, -1000, -1000, -1000, 45986, - 1858, -1000, 1425, -1000, 3706, -254, 2030, -1000, -69, -1000, - -1000, -1000, 944, 1215, -1000, -1000, -1000, -1000, -1000, -1000, - 1726, 45986, -1000, 498, -1000, -1000, -106, -115, 860, -1000, - -1000, -1000, -1000, -1000, 1231, 1134, 1419, -1000, 45986, -1000, - 45318, -244, 716, 8222, -1000, 2007, 1992, 2456, -1000, -1000, - -1000, -1000, -1000, -1000, -458, 1389, 311, -1000, -1000, 238, - -1000, 18596, -1000, 18596, -1000, 1232, -1000, -1000, 2270, 115, - -1000, 2478, -1000, 2450, 808, 808, -1000, 982, -458, -1000, - -1000, 1419, 1419, -1000, -264, -1000, -1000, -1000, -1000, -1000, - 486, 1137, -1000, -1000, -1000, -1000, -1000, 8222, -1000, -1000, - -1000, 224, 224, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 1470, 1627, 1627, 1627, + 1627, 1627, 19314, 2188, -1000, -1000, -1000, 1312, 2964, 1386, + 2951, 1627, 1627, -1000, 1627, 2946, 2935, 1306, 1760, 1306, + 1796, -1000, 2928, 1627, 2912, 2891, 2886, 2158, 2876, 2872, + 2868, 1627, 1627, 1627, 2151, 2864, 2860, 2855, 2836, 2778, + 2740, 2732, 2709, 2690, 1627, -162, 1627, 1306, -1000, -1000, + -1000, -1000, -1000, 2685, 2147, 1306, 1786, 1781, 686, -1000, + -1000, 1644, 1306, 1306, 1644, 1644, 2593, 2522, 2499, 2452, + 2402, 2397, 1627, 1627, -1000, 1627, 2376, 2371, 2126, 2084, + 1306, -1000, 1320, 48083, -1000, -294, -1000, 24, 774, 1781, + -1000, 32027, 1306, -1000, -1000, 6243, -1000, 1238, -1000, -1000, + -1000, 29351, 1795, 2334, -1000, -1000, 1781, 1641, -1000, -1000, + 410, 131, 28682, 725, 725, 165, 1234, 1234, 19314, -1000, + -1000, -1000, -1000, -1000, -1000, 685, 2473, 423, 1781, -1000, + 1823, 2831, -1000, -1000, -1000, 2325, 22660, -1000, -1000, 1781, + 1781, 48083, 1733, 1640, -1000, 678, -1000, 1292, 1785, 56, + 44, -1000, -1000, -1000, -1000, 1234, -1000, 1260, 460, 704, + -1000, 559, -1000, -1000, -1000, -1000, 2201, 147, -1000, -1000, + -1000, 334, 410, -1000, -1000, -1000, -1000, -1000, -1000, 1513, + 1513, -1000, -1000, -1000, -1000, -1000, 1209, -1000, -1000, -1000, + -1000, 1208, -1000, -1000, 1188, -1000, -1000, 2307, 2046, 320, + -1000, -1000, 823, 1504, -1000, -1000, 2203, 823, 823, 46745, + -1000, -1000, 1537, 2308, 305, 48083, 914, 2056, -1000, 1996, + 1996, 1996, 48083, -1000, -1000, -1000, -1000, -1000, -1000, -444, + 75, 437, -1000, -1000, -1000, 4066, 46745, 1615, -1000, 294, + -1000, 1492, -1000, 46745, -1000, 1611, 1947, 1250, 1250, -1000, + -1000, -1000, 46745, 1781, -1000, -1000, -1000, -1000, 577, 2247, + 324, -1000, -1000, -181, -1000, -1000, 272, 294, 47414, 1250, + 750, -1000, -1000, -1000, -1000, -1000, -445, 1599, 603, 297, + 361, 48083, 48083, 48083, 48083, 48083, 666, -1000, -1000, 82, + -1000, -1000, -1000, -1000, 263, -1000, -1000, -1000, -1000, -1000, + -1000, 263, -1000, -1000, -1000, 81, -1000, -1000, -1000, -1000, + 263, -1000, -1000, -1000, -1000, -1000, -1000, 263, -1000, -1000, + -1000, -1000, 355, 573, -1000, 48083, 48083, 682, -1000, -1000, + -1000, -1000, -1000, -1000, 932, -1000, -1000, 932, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 2242, 48083, 37, -408, -1000, -403, 19314, -1000, -1000, -1000, + -1000, 1477, 584, 1975, 19983, 19983, 19983, -1000, -1000, -1000, + 1135, 1135, 28013, -1000, 19314, 18645, -1000, -1000, 19314, 19314, + 896, -1000, 19314, 1155, -1000, 19314, -1000, -1000, -1000, 1320, + 1627, 1627, 1627, 1627, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 1824, 19314, 19314, 19314, 1306, 358, + -1000, -1000, -1000, -1000, -1000, 2486, -1000, 19314, -1000, 28013, + 19314, 19314, 19314, -1000, -1000, -1000, 19314, 19314, -1000, -1000, + 19314, 19314, -1000, 19314, 19314, 19314, -1000, 19314, 19314, 19314, + 19314, -1000, -1000, -1000, -1000, 19314, 19314, 19314, 19314, 19314, + 19314, 19314, 19314, 19314, 19314, -1000, -1000, 33365, 116, -162, + 1215, 116, 1215, -1000, 18645, 13274, -1000, -1000, -1000, -1000, + -1000, 19314, 19314, 19314, 19314, 19314, 19314, -1000, -1000, -1000, + 19314, 19314, -1000, 19314, -1000, 19314, -1000, -1000, -1000, -1000, + -1000, 774, -1000, 689, 689, 689, 46745, -1000, -1000, -1000, + -1000, 1782, -1000, 2439, -1000, 2133, 2132, 2485, 2473, -1000, + 24668, 2334, -1000, -1000, 46745, -271, -1000, 2177, 2164, 725, + 725, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 11249, 2413, + 19314, 2050, 47414, 157, -1000, 23999, 46745, 47414, 24668, 24668, + 24668, 24668, 24668, -1000, 2100, 2086, -1000, 2096, 2082, 2127, + 48083, -1000, 1447, 1593, -1000, 19314, 26675, 1758, 24668, -1000, + -1000, 24668, 48083, 10574, -1000, -1000, 28, 30, -1000, -1000, + -1000, -1000, 574, -1000, -1000, 1780, 2319, 2191, -1000, -1000, + -1000, -1000, -1000, 1585, -1000, 1583, 1777, 1563, 1509, 240, + -1000, 1926, 2238, 823, 823, -1000, 1187, -1000, 1250, 1502, + 1496, -1000, -1000, -1000, 586, -1000, 2301, 48083, 2049, 2048, + 2034, -1000, -453, 1167, 1944, 1867, 19314, 1939, 2454, 1771, + 46745, -1000, -1000, 47414, -1000, 326, -1000, 320, 46745, -1000, + -1000, -1000, 430, 48083, -1000, 4991, -1000, -1000, -1000, 294, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 48083, 317, -1000, + 1936, 1252, -1000, -1000, 1897, -1000, -1000, -1000, -1000, 266, + 404, 1495, 261, 1494, 261, 1481, 261, 261, -1000, 48083, + 674, 2046, 48083, -1000, -1000, -1000, 949, 949, -1000, -1000, + 2235, -1000, 1250, 1627, 19983, 19983, -1000, 760, 333, -138, + 1928, 1928, -1000, 1928, 1930, -1000, 1928, 211, 1928, 210, + 1928, -1000, -1000, 1306, 1306, 1320, -1000, 2077, 1708, -1000, + 1234, 19314, 2367, -1000, -1000, -1000, -1000, -1000, -29, 2363, + 2357, 1627, -1000, 1927, 1913, 19314, 1627, 1306, 2069, 1627, + 1627, 1627, 1627, -1000, 1234, 1320, 2298, 1320, 1627, 1627, + 2237, 351, 1627, 1491, 1491, 1491, 1491, 1491, 1320, 1320, + 1320, 1320, 46745, -1000, -162, -1000, -1000, -202, -205, -1000, + 1306, -162, 1774, 1306, -1000, 1990, 1888, 2116, 1871, 1627, + 1921, 1627, 1627, 1627, 1862, -1000, 2354, 2354, 2354, 1486, + 1238, 48083, -1000, -1000, -1000, -1000, 2473, 2470, 1773, -1000, + -1000, 131, 481, -1000, 2150, 2164, -1000, 2453, 2172, 2450, + -1000, -1000, -1000, -1000, -1000, 1234, -1000, 2284, 1732, -1000, + 854, 1765, -1000, -1000, 17976, 1489, 2118, 671, 1486, 1799, + 2831, 1993, 2033, 2353, -1000, -1000, -1000, -1000, 2085, -1000, + 2070, -1000, -1000, 1875, -1000, 1917, 457, 24668, 1797, 1797, + -1000, 665, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1017, + 4784, 2516, -1000, 1453, -1000, 1249, 213, 1148, -1000, -1000, + 823, 823, -1000, 944, 942, -1000, 48083, 1911, -1000, 410, + 1449, 410, 1147, -1000, -1000, 1117, -1000, -1000, -1000, -1000, + 1881, 2037, -1000, -1000, -1000, -1000, 48083, -1000, -1000, 48083, + 48083, 48083, 1893, 2449, -1000, 19314, 1884, 853, 2266, 46745, + 46745, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 553, 823, -423, 391, 387, 823, 823, 823, + -454, -1000, -1000, 1479, 1476, -1000, -117, -1000, 19314, -1000, + -1000, -1000, 1191, 1191, 1445, 1439, 1435, -1000, 1875, -1000, + -1000, -1000, 1487, -1000, -1000, -100, 46745, 46745, 46745, 46745, + -1000, -1000, 1064, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 760, 1306, + 359, -105, 1306, -1000, -1000, 410, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 19314, -1000, 19314, -1000, + 1234, 19314, 2413, 1426, 19314, 19314, -1000, 1099, 1086, 1627, + -1000, -1000, -1000, 19314, -1000, -1000, -1000, -1000, -1000, 19314, + -1000, -1000, -1000, 19314, 244, 1135, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 1306, 450, -1000, -1000, + -1000, -1000, 2482, -1000, 1306, 19314, -1000, -1000, 19314, -1000, + 19314, 19314, -1000, 19314, -1000, 19314, -1000, -1000, -1000, -1000, + 19314, 1781, 2234, 1781, 1781, 26675, -1000, -1000, 2470, 2468, + 2448, 2163, 2167, 2167, 2150, -1000, 2446, 2438, -1000, 1421, + 2432, 1417, 931, -1000, 47414, 19314, 157, -1000, 407, 46745, + 157, 46745, -1000, 2458, -1000, -1000, 19314, 1883, -1000, 19314, + -1000, -1000, -1000, -1000, 6587, 2473, 1797, -1000, -1000, 777, + -1000, 19314, -1000, -1000, -1000, 8141, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 1407, 1395, -1000, -1000, 1882, 19314, + -1000, -1000, -1000, 1480, 1363, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 1875, -1000, -1000, -1000, -1000, 430, -449, + 2246, 46745, 1073, -1000, 1433, 1771, 425, 157, 1383, 823, + 823, 823, 1060, 1056, 32027, 1431, -1000, 46745, 506, -1000, + 430, -1000, -132, -135, 1627, -1000, -1000, 2316, -1000, -1000, + 13274, -1000, -1000, 1866, 1994, -1000, -1000, -1000, -1000, 2073, + -92, -115, -1000, -1000, 1627, 1627, 1601, 1306, -1000, 1627, + 1627, 1338, 1321, -1000, 1627, 1320, 1730, -1000, 244, 1306, + 2032, -1000, -1000, 6587, -1000, -1000, 2458, 2427, 116, -1000, + -1000, 291, 116, 1234, 1675, 1627, 1633, 1597, 1627, 1627, + 27344, -1000, 2423, 2418, 32696, 32696, 774, 2468, -171, 19314, + 19314, 2140, 1127, -1000, -1000, -1000, -1000, 1374, 1368, -1000, + 1328, -1000, 2515, -1000, 1234, -1000, 157, -1000, 663, 1765, + -1000, 2413, 1234, 46745, 1234, 135, 2458, -1000, 1627, -1000, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + -1000, -1000, 46745, 2223, -1000, -1000, 2314, 1400, 74, -1000, + 1313, 1771, -1000, -1000, 151, -1000, 19314, -1000, 32027, 1326, + 1324, -1000, -1000, -1000, -1000, -454, -1000, -1000, -1000, -1000, + -1000, -1000, 420, 1770, -1000, 821, 46745, 48083, -1000, 2060, + -1000, -1000, -1000, 19314, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 19314, -1000, 1306, 2031, -1000, -286, -1000, -427, + 19314, -162, -1000, -1000, -162, -1000, 19314, -1000, -1000, 19314, + -1000, 19314, -1000, -1000, 1362, -1000, -1000, -1000, -1000, -1000, + 1362, 1362, -1000, -171, -1000, 1766, -1000, 46745, 1234, 1760, + -1000, 1051, -1000, -1000, -1000, -1000, -1000, 47414, 1765, 46745, + -1000, 1358, 1306, 1781, 2413, -1000, 1337, -1000, 420, -1000, + 1865, 1867, -1000, -1000, -1000, 17307, -1000, -1000, -1000, -1000, + -1000, 209, -99, 13274, 9899, 1333, -1000, -97, 1627, 1320, + -1000, -388, -1000, -1000, -1000, -1000, 243, -1000, -1000, 1760, + -1000, -1000, 1536, 1403, 1341, 31358, -1000, -1000, -1000, -1000, + -171, -1000, -1000, 2312, -1000, -1000, 1635, -1000, -1000, 26675, + 46076, -1000, -85, 271, -99, 19314, 1841, 1306, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 32, -1000, -1000, -1000, + -1000, -1000, 1897, -109, -1000, -1000, -1000, 145, -415, -197, + -201, -1000, -1000, 19983, -1000, 19314, -1000, 19314, -1000, 19314, + -1000, -1000, -1000, 46745, 1781, -1000, 1305, -1000, 3879, -214, + 2030, -1000, -31, -1000, -1000, -1000, 1016, 1297, -1000, -1000, + -1000, -1000, -1000, -1000, 2205, 46745, -1000, 529, -1000, -1000, + -100, -124, 916, -1000, -1000, -1000, -1000, -1000, 1315, 1120, + 1627, -1000, 46745, -1000, 46076, -208, 750, 6587, -1000, 2020, + 2018, 2479, -1000, -1000, -1000, -1000, -1000, -1000, -461, 1303, + 318, -1000, -1000, 145, -1000, 19314, -1000, 19314, -1000, 1306, + -1000, -1000, 2296, 135, -1000, 2509, -1000, 2500, 773, 773, + -1000, 1044, -461, -1000, -1000, 1627, 1627, -1000, -217, -1000, + -1000, -1000, -1000, -1000, 517, 1088, -1000, -1000, -1000, -1000, + -1000, 6587, -1000, -1000, -1000, 238, 238, -1000, -1000, } var yyPgo = [...]int{ - 0, 3028, 3027, 27, 1, 36, 35, 3026, 47, 112, - 207, 58, 210, 110, 3025, 188, 3024, 3023, 3021, 3020, - 3019, 3018, 2514, 2510, 2509, 3017, 3015, 3014, 3013, 3012, - 3011, 3010, 3009, 3008, 3007, 187, 183, 208, 3006, 3005, - 3004, 125, 203, 95, 98, 206, 3003, 3002, 88, 3001, - 3000, 2999, 201, 199, 197, 879, 2998, 198, 136, 64, - 2997, 2996, 2995, 2994, 2993, 2992, 2991, 2990, 2985, 2982, - 2976, 2970, 2969, 2964, 2963, 2962, 2961, 2958, 2957, 2956, - 227, 2955, 2951, 20, 2949, 92, 2948, 2947, 2946, 2945, - 2944, 15, 2940, 2938, 17, 42, 2937, 2936, 45, 2935, - 2931, 2929, 2928, 2925, 19, 2924, 25, 2923, 28, 2922, - 2912, 141, 2911, 2906, 2904, 37, 2902, 2900, 2898, 2897, - 2896, 2890, 2889, 160, 2888, 2886, 2884, 189, 211, 2883, - 2882, 184, 120, 119, 2881, 2880, 115, 205, 2876, 138, - 2875, 2873, 2872, 166, 2869, 2204, 2867, 2864, 76, 87, - 2859, 52, 2857, 2855, 12, 104, 75, 10, 97, 103, - 2854, 2851, 72, 91, 2849, 131, 2847, 2843, 116, 80, - 2842, 114, 111, 2840, 2839, 14, 4, 2838, 51, 11, - 6, 74, 2836, 2834, 132, 2833, 2830, 2829, 109, 2826, - 2824, 4967, 2823, 106, 148, 130, 83, 2822, 49, 71, - 2821, 2810, 2801, 2798, 2795, 56, 2787, 2784, 2781, 154, - 159, 182, 2775, 43, 41, 57, 147, 2769, 63, 94, - 212, 181, 2758, 2753, 151, 150, 2751, 2741, 66, 44, - 39, 2740, 123, 144, 133, 54, 108, 149, 2736, 2735, - 69, 79, 2730, 2726, 2719, 2718, 186, 2713, 2712, 81, - 2705, 65, 2701, 185, 2699, 16, 67, 2698, 48, 178, - 2697, 82, 2695, 2694, 77, 128, 78, 34, 2693, 174, - 180, 143, 175, 2689, 2687, 60, 2686, 2684, 2683, 209, - 308, 2680, 2679, 100, 191, 155, 165, 96, 2676, 315, - 2674, 2673, 102, 2, 4456, 2671, 40, 176, 2665, 2660, - 5918, 153, 38, 24, 2659, 134, 2657, 2656, 2654, 2653, - 213, 196, 117, 179, 70, 2651, 2648, 2646, 18, 2645, - 2644, 2635, 2624, 2623, 2621, 101, 33, 32, 31, 246, - 85, 7, 113, 177, 172, 86, 2620, 2619, 2618, 140, - 105, 2614, 173, 170, 142, 121, 2598, 194, 162, 157, - 2595, 192, 30, 2589, 2587, 2586, 2584, 107, 2578, 2576, - 2573, 2572, 171, 164, 139, 90, 2571, 93, 124, 169, - 168, 55, 2568, 46, 2567, 2563, 29, 204, 26, 2549, - 13, 118, 244, 2548, 4153, 195, 2546, 21, 314, 163, - 2545, 2544, 3, 5, 8, 2543, 2542, 2541, 2540, 146, - 2538, 2535, 2532, 2527, 23, 53, 22, 9, 122, 89, - 2526, 2525, 158, 161, 2524, 2521, 2520, 2519, 3167, 0, - 145, 2516, 214, + 0, 3126, 3124, 28, 1, 37, 36, 3123, 45, 124, + 217, 26, 207, 112, 3122, 191, 3121, 3116, 3115, 3114, + 3113, 3112, 2547, 2546, 2542, 3107, 3100, 3099, 3096, 3091, + 3089, 3086, 3084, 3083, 3082, 187, 179, 208, 3081, 3079, + 3075, 125, 201, 96, 98, 205, 3073, 3072, 88, 3071, + 3068, 3064, 199, 198, 197, 921, 3063, 196, 130, 58, + 3062, 3061, 3060, 3059, 3058, 3056, 3050, 3049, 3048, 3046, + 3045, 3044, 3040, 3036, 3031, 3029, 3026, 3024, 3022, 3021, + 261, 3019, 3012, 21, 3008, 97, 3004, 2998, 2995, 2992, + 2991, 8, 2989, 2988, 14, 43, 2987, 2986, 52, 2983, + 2981, 2980, 2976, 2967, 19, 2963, 25, 2962, 32, 2958, + 2957, 141, 2954, 2953, 2951, 39, 2949, 2944, 2940, 2935, + 2934, 2930, 2929, 158, 2928, 2927, 2926, 189, 215, 2918, + 2908, 183, 115, 120, 2907, 2906, 110, 200, 2893, 137, + 2892, 2888, 2887, 167, 2883, 2207, 2878, 2877, 76, 71, + 2875, 54, 2870, 2869, 13, 85, 75, 12, 113, 114, + 2867, 2865, 70, 94, 2863, 131, 2862, 2861, 116, 80, + 2857, 117, 111, 2856, 2855, 11, 4, 2854, 53, 9, + 6, 77, 2853, 2852, 121, 2849, 2847, 2846, 108, 2843, + 2842, 3231, 2841, 100, 152, 119, 87, 2838, 46, 51, + 2837, 2834, 2833, 2830, 2823, 56, 2822, 2821, 2819, 163, + 342, 180, 2813, 40, 78, 60, 153, 2811, 63, 95, + 210, 184, 2809, 2806, 156, 155, 2801, 2785, 72, 44, + 50, 2783, 104, 145, 132, 67, 102, 151, 2779, 2762, + 66, 82, 2761, 2757, 2754, 2745, 186, 2743, 2740, 81, + 2739, 64, 2733, 203, 2730, 16, 79, 2723, 42, 182, + 2722, 83, 2721, 2720, 74, 149, 86, 38, 2719, 174, + 178, 143, 181, 2716, 2715, 57, 2714, 2712, 2708, 206, + 352, 2705, 2703, 147, 192, 177, 168, 101, 2702, 360, + 2701, 2699, 106, 2, 5316, 2698, 41, 176, 2697, 2696, + 6618, 157, 49, 22, 2693, 136, 2691, 2688, 2687, 2686, + 255, 194, 138, 175, 65, 2685, 2684, 2682, 17, 2673, + 2669, 2667, 2660, 2658, 2657, 91, 35, 34, 33, 251, + 69, 18, 109, 185, 173, 92, 2652, 2648, 2647, 140, + 105, 2645, 172, 171, 142, 139, 2639, 188, 161, 123, + 2629, 103, 31, 2628, 2626, 2625, 2623, 107, 2622, 2620, + 2619, 2618, 170, 160, 134, 90, 2615, 93, 128, 165, + 169, 55, 2613, 61, 2609, 2603, 30, 204, 27, 2602, + 15, 118, 166, 2598, 4456, 193, 2595, 20, 362, 162, + 2592, 2589, 5, 7, 10, 2588, 2583, 2582, 2577, 144, + 2575, 2572, 2571, 2570, 24, 47, 23, 3, 122, 89, + 2568, 2567, 159, 164, 2566, 2557, 2553, 2548, 3209, 0, + 150, 2535, 209, } -//line sql.y:8285 +//line sql.y:8291 type yySymType struct { union any empty struct{} @@ -7550,44 +7624,44 @@ var yyR1 = [...]int{ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 281, 281, 290, 290, 280, - 280, 305, 305, 305, 283, 283, 283, 284, 284, 401, - 401, 401, 277, 277, 66, 66, 66, 306, 306, 306, - 306, 70, 70, 410, 410, 411, 411, 412, 412, 412, - 71, 72, 72, 308, 308, 309, 309, 73, 74, 86, - 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, - 110, 110, 110, 15, 15, 15, 15, 82, 82, 82, - 14, 14, 17, 67, 67, 76, 398, 398, 399, 400, - 400, 400, 400, 77, 79, 79, 32, 32, 32, 32, - 32, 32, 135, 135, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 130, 130, 130, - 124, 124, 421, 80, 81, 81, 128, 128, 128, 121, - 121, 121, 127, 127, 127, 16, 16, 18, 263, 263, - 19, 19, 132, 132, 134, 134, 134, 134, 134, 136, - 136, 136, 136, 136, 136, 136, 131, 131, 133, 133, - 133, 133, 298, 298, 298, 297, 297, 168, 168, 170, - 169, 169, 171, 171, 172, 172, 172, 172, 217, 217, - 194, 194, 256, 256, 257, 257, 255, 255, 262, 262, - 258, 258, 258, 258, 265, 265, 173, 173, 173, 173, - 181, 181, 182, 182, 183, 183, 307, 307, 303, 303, - 303, 302, 302, 187, 187, 187, 189, 188, 188, 188, - 188, 190, 190, 192, 192, 191, 191, 193, 198, 198, - 197, 197, 195, 195, 195, 195, 196, 196, 196, 196, - 199, 199, 145, 145, 145, 145, 145, 145, 145, 160, - 160, 160, 160, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 246, 246, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, 151, 155, + 65, 65, 65, 65, 65, 65, 281, 281, 290, 290, + 280, 280, 305, 305, 305, 283, 283, 283, 284, 284, + 401, 401, 401, 277, 277, 66, 66, 66, 306, 306, + 306, 306, 70, 70, 410, 410, 411, 411, 412, 412, + 412, 71, 72, 72, 308, 308, 309, 309, 73, 74, + 86, 86, 86, 86, 86, 86, 86, 87, 87, 87, + 87, 110, 110, 110, 15, 15, 15, 15, 82, 82, + 82, 14, 14, 17, 67, 67, 76, 398, 398, 399, + 400, 400, 400, 400, 77, 79, 79, 32, 32, 32, + 32, 32, 32, 135, 135, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 130, 130, + 130, 124, 124, 421, 80, 81, 81, 128, 128, 128, + 121, 121, 121, 127, 127, 127, 16, 16, 18, 263, + 263, 19, 19, 132, 132, 134, 134, 134, 134, 134, + 136, 136, 136, 136, 136, 136, 136, 131, 131, 133, + 133, 133, 133, 298, 298, 298, 297, 297, 168, 168, + 170, 169, 169, 171, 171, 172, 172, 172, 172, 217, + 217, 194, 194, 256, 256, 257, 257, 255, 255, 262, + 262, 258, 258, 258, 258, 265, 265, 173, 173, 173, + 173, 181, 181, 182, 182, 183, 183, 307, 307, 303, + 303, 303, 302, 302, 187, 187, 187, 189, 188, 188, + 188, 188, 190, 190, 192, 192, 191, 191, 193, 198, + 198, 197, 197, 195, 195, 195, 195, 196, 196, 196, + 196, 199, 199, 145, 145, 145, 145, 145, 145, 145, + 160, 160, 160, 160, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 246, 246, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 154, 222, 222, 221, 221, 88, - 88, 88, 89, 89, 90, 90, 90, 90, 90, 91, - 91, 91, 91, 91, 146, 146, 93, 93, 92, 92, - 212, 212, 295, 295, 94, 95, 95, 98, 98, 97, - 96, 96, 102, 102, 99, 99, 101, 101, 100, 103, - 103, 104, 105, 105, 278, 278, 200, 200, 208, 208, - 208, 208, 201, 201, 201, 201, 201, 201, 201, 209, - 209, 209, 216, 210, 210, 206, 206, 204, 204, 204, - 204, 204, 204, 204, 204, 204, 204, 205, 205, 205, + 155, 155, 155, 155, 155, 154, 222, 222, 221, 221, + 88, 88, 88, 89, 89, 90, 90, 90, 90, 90, + 91, 91, 91, 91, 91, 146, 146, 93, 93, 92, + 92, 212, 212, 295, 295, 94, 95, 95, 98, 98, + 97, 96, 96, 102, 102, 99, 99, 101, 101, 100, + 103, 103, 104, 105, 105, 278, 278, 200, 200, 208, + 208, 208, 208, 201, 201, 201, 201, 201, 201, 201, + 209, 209, 209, 216, 210, 210, 206, 206, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, @@ -7596,34 +7670,34 @@ var yyR1 = [...]int{ 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 165, 165, 165, 165, 227, 227, 152, + 205, 205, 205, 205, 165, 165, 165, 165, 227, 227, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, - 152, 152, 152, 152, 153, 153, 166, 166, 166, 166, - 167, 167, 167, 167, 167, 167, 167, 315, 315, 120, + 152, 152, 152, 152, 152, 153, 153, 166, 166, 166, + 166, 167, 167, 167, 167, 167, 167, 167, 315, 315, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, - 120, 119, 119, 119, 119, 119, 119, 119, 119, 119, - 422, 422, 329, 329, 329, 329, 207, 207, 207, 207, - 207, 126, 126, 126, 126, 126, 312, 312, 312, 316, - 316, 316, 314, 314, 314, 314, 314, 314, 314, 314, - 314, 314, 314, 314, 314, 314, 314, 317, 317, 225, - 225, 122, 122, 223, 223, 224, 226, 226, 218, 218, - 218, 218, 220, 220, 203, 203, 203, 228, 228, 229, - 229, 106, 107, 107, 108, 108, 230, 230, 232, 231, - 231, 233, 234, 234, 234, 235, 235, 236, 236, 236, - 48, 48, 48, 48, 48, 43, 43, 43, 43, 44, - 44, 44, 44, 137, 137, 137, 137, 139, 139, 138, - 138, 83, 83, 84, 84, 84, 414, 414, 414, 413, - 413, 413, 413, 413, 413, 143, 143, 144, 144, 144, - 141, 141, 142, 142, 253, 253, 237, 237, 237, 244, - 244, 244, 240, 240, 242, 242, 242, 243, 243, 243, - 241, 250, 250, 252, 252, 251, 251, 247, 247, 248, - 248, 249, 249, 249, 245, 245, 202, 202, 202, 202, - 202, 254, 254, 254, 254, 266, 266, 213, 213, 215, - 215, 214, 214, 164, 267, 267, 275, 272, 272, 273, - 273, 299, 299, 299, 276, 276, 289, 289, 285, 285, - 286, 286, 279, 279, 291, 291, 291, 78, 211, 211, - 368, 368, 365, 294, 294, 296, 296, 300, 300, 304, - 304, 301, 301, 292, 292, 292, 292, 292, 292, 292, + 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 422, 422, 329, 329, 329, 329, 207, 207, 207, + 207, 207, 126, 126, 126, 126, 126, 312, 312, 312, + 316, 316, 316, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 317, 317, + 225, 225, 122, 122, 223, 223, 224, 226, 226, 218, + 218, 218, 218, 220, 220, 203, 203, 203, 228, 228, + 229, 229, 106, 107, 107, 108, 108, 230, 230, 232, + 231, 231, 233, 234, 234, 234, 235, 235, 236, 236, + 236, 48, 48, 48, 48, 48, 43, 43, 43, 43, + 44, 44, 44, 44, 137, 137, 137, 137, 139, 139, + 138, 138, 83, 83, 84, 84, 84, 414, 414, 414, + 413, 413, 413, 413, 413, 413, 143, 143, 144, 144, + 144, 141, 141, 142, 142, 253, 253, 237, 237, 237, + 244, 244, 244, 240, 240, 242, 242, 242, 243, 243, + 243, 241, 250, 250, 252, 252, 251, 251, 247, 247, + 248, 248, 249, 249, 249, 245, 245, 202, 202, 202, + 202, 202, 254, 254, 254, 254, 266, 266, 213, 213, + 215, 215, 214, 214, 164, 267, 267, 275, 272, 272, + 273, 273, 299, 299, 299, 276, 276, 289, 289, 285, + 285, 286, 286, 279, 279, 291, 291, 291, 78, 211, + 211, 368, 368, 365, 294, 294, 296, 296, 300, 300, + 304, 304, 301, 301, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, @@ -7638,7 +7712,7 @@ var yyR1 = [...]int{ 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 293, 293, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, @@ -7679,8 +7753,8 @@ var yyR1 = [...]int{ 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 418, 419, 310, 311, 311, - 311, + 293, 293, 293, 293, 293, 293, 293, 418, 419, 310, + 311, 311, 311, } var yyR2 = [...]int{ @@ -7762,82 +7836,82 @@ var yyR2 = [...]int{ 2, 3, 7, 3, 3, 3, 3, 4, 7, 5, 2, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, - 4, 4, 4, 4, 4, 2, 3, 3, 3, 3, - 5, 2, 3, 3, 2, 2, 3, 4, 4, 4, - 3, 4, 4, 5, 3, 0, 1, 0, 1, 1, - 1, 0, 2, 2, 0, 2, 2, 0, 2, 0, - 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, - 1, 1, 3, 0, 1, 1, 3, 3, 2, 2, - 1, 1, 5, 0, 1, 0, 1, 2, 3, 0, - 3, 3, 3, 3, 3, 1, 0, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, - 4, 4, 4, 2, 2, 3, 1, 3, 2, 1, - 2, 1, 2, 2, 4, 4, 3, 3, 6, 4, - 7, 6, 1, 3, 2, 2, 2, 2, 1, 1, - 1, 1, 3, 2, 1, 1, 1, 0, 1, 1, - 0, 3, 0, 2, 0, 2, 1, 2, 2, 0, - 1, 1, 0, 1, 1, 5, 5, 4, 0, 2, - 4, 4, 0, 1, 0, 1, 2, 3, 4, 1, - 1, 1, 1, 1, 1, 1, 1, 3, 1, 2, - 3, 5, 0, 1, 2, 1, 1, 0, 1, 2, - 1, 3, 1, 1, 1, 4, 3, 1, 1, 2, - 3, 7, 0, 3, 0, 1, 1, 3, 1, 3, - 1, 1, 3, 3, 1, 3, 4, 4, 4, 3, - 2, 4, 0, 1, 0, 2, 0, 1, 0, 1, - 2, 1, 1, 1, 2, 2, 1, 2, 3, 2, - 3, 2, 2, 2, 1, 1, 3, 3, 0, 1, - 1, 2, 6, 5, 6, 6, 0, 2, 3, 3, - 0, 2, 3, 3, 3, 2, 3, 1, 6, 3, - 4, 3, 1, 3, 4, 5, 6, 3, 4, 5, - 6, 3, 4, 1, 1, 1, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, - 1, 1, 1, 3, 1, 1, 1, 2, 2, 2, - 2, 1, 1, 2, 7, 7, 6, 6, 2, 2, - 1, 6, 3, 3, 3, 1, 3, 1, 3, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 1, 1, 0, 1, 2, 5, - 0, 3, 0, 1, 4, 4, 2, 0, 1, 1, - 2, 2, 1, 1, 2, 2, 0, 1, 1, 1, - 1, 5, 1, 3, 0, 3, 1, 1, 1, 2, - 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 3, 4, 6, 4, 4, 8, - 6, 8, 6, 5, 4, 10, 2, 2, 1, 2, - 2, 2, 4, 5, 5, 5, 5, 5, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, - 8, 6, 5, 4, 4, 4, 4, 4, 7, 4, - 4, 6, 6, 6, 8, 6, 6, 4, 4, 3, - 4, 6, 6, 4, 4, 4, 6, 8, 6, 4, - 6, 6, 8, 10, 7, 8, 8, 9, 4, 4, - 4, 4, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 4, 4, 6, 5, 9, 6, 9, 1, - 1, 1, 1, 1, 1, 1, 1, 0, 2, 6, - 8, 10, 12, 14, 6, 8, 8, 10, 12, 14, - 6, 8, 10, 12, 6, 8, 4, 4, 3, 4, - 6, 6, 4, 6, 4, 6, 8, 0, 2, 1, + 4, 4, 4, 4, 4, 4, 2, 3, 3, 3, + 3, 5, 2, 3, 3, 2, 2, 3, 4, 4, + 4, 3, 4, 4, 5, 3, 0, 1, 0, 1, + 1, 1, 0, 2, 2, 0, 2, 2, 0, 2, + 0, 1, 1, 1, 1, 2, 1, 3, 1, 1, + 1, 1, 1, 3, 0, 1, 1, 3, 3, 2, + 2, 1, 1, 5, 0, 1, 0, 1, 2, 3, + 0, 3, 3, 3, 3, 3, 1, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, + 1, 4, 4, 4, 2, 2, 3, 1, 3, 2, + 1, 2, 1, 2, 2, 4, 4, 3, 3, 6, + 4, 7, 6, 1, 3, 2, 2, 2, 2, 1, + 1, 1, 1, 3, 2, 1, 1, 1, 0, 1, + 1, 0, 3, 0, 2, 0, 2, 1, 2, 2, + 0, 1, 1, 0, 1, 1, 5, 5, 4, 0, + 2, 4, 4, 0, 1, 0, 1, 2, 3, 4, + 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, + 2, 3, 5, 0, 1, 2, 1, 1, 0, 1, + 2, 1, 3, 1, 1, 1, 4, 3, 1, 1, + 2, 3, 7, 0, 3, 0, 1, 1, 3, 1, + 3, 1, 1, 3, 3, 1, 3, 4, 4, 4, + 3, 2, 4, 0, 1, 0, 2, 0, 1, 0, + 1, 2, 1, 1, 1, 2, 2, 1, 2, 3, + 2, 3, 2, 2, 2, 1, 1, 3, 3, 0, + 1, 1, 2, 6, 5, 6, 6, 0, 2, 3, + 3, 0, 2, 3, 3, 3, 2, 3, 1, 6, + 3, 4, 3, 1, 3, 4, 5, 6, 3, 4, + 5, 6, 3, 4, 1, 1, 1, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, + 1, 1, 1, 1, 3, 1, 1, 1, 2, 2, + 2, 2, 1, 1, 2, 7, 7, 6, 6, 2, + 2, 1, 6, 3, 3, 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 1, 1, 0, 1, 2, + 5, 0, 3, 0, 1, 4, 4, 2, 0, 1, + 1, 2, 2, 1, 1, 2, 2, 0, 1, 1, + 1, 1, 5, 1, 3, 0, 3, 1, 1, 1, + 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 3, 4, 6, 4, 4, + 8, 6, 8, 6, 5, 4, 10, 2, 2, 1, + 2, 2, 2, 4, 5, 5, 5, 5, 5, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, + 8, 8, 6, 5, 4, 4, 4, 4, 4, 7, + 4, 4, 6, 6, 6, 8, 6, 6, 4, 4, + 3, 4, 6, 6, 4, 4, 4, 6, 8, 6, + 4, 6, 6, 8, 10, 7, 8, 8, 9, 4, + 4, 4, 4, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 4, 4, 6, 5, 9, 6, 9, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, + 6, 8, 10, 12, 14, 6, 8, 8, 10, 12, + 14, 6, 8, 10, 12, 6, 8, 4, 4, 3, + 4, 6, 6, 4, 6, 4, 6, 8, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 2, 0, 2, 3, 3, 4, 4, 4, 4, - 4, 0, 3, 4, 7, 3, 1, 1, 1, 0, - 5, 5, 2, 3, 1, 2, 2, 1, 2, 1, - 2, 2, 1, 2, 2, 1, 1, 0, 1, 0, - 1, 0, 2, 1, 2, 4, 0, 2, 1, 1, - 3, 5, 1, 1, 1, 2, 2, 0, 3, 0, - 2, 2, 1, 3, 0, 1, 0, 1, 3, 1, - 3, 2, 0, 1, 1, 0, 1, 2, 4, 4, - 0, 2, 2, 1, 1, 3, 3, 3, 3, 3, - 3, 3, 3, 0, 3, 3, 3, 0, 3, 1, - 1, 0, 4, 0, 1, 1, 0, 1, 2, 2, - 1, 1, 1, 1, 1, 0, 3, 1, 3, 2, - 1, 1, 0, 1, 2, 4, 9, 3, 5, 0, - 3, 3, 0, 1, 0, 2, 2, 0, 2, 2, - 2, 0, 2, 1, 2, 3, 3, 0, 2, 1, - 2, 3, 4, 3, 0, 1, 2, 1, 5, 4, - 4, 1, 3, 3, 5, 0, 5, 1, 3, 1, - 2, 3, 4, 1, 1, 3, 3, 1, 2, 1, - 1, 1, 1, 1, 1, 1, 0, 1, 0, 2, - 0, 3, 0, 1, 0, 1, 1, 5, 0, 1, - 0, 1, 2, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 0, 2, 0, 2, 3, 3, 4, 4, 4, + 4, 4, 0, 3, 4, 7, 3, 1, 1, 1, + 0, 5, 5, 2, 3, 1, 2, 2, 1, 2, + 1, 2, 2, 1, 2, 2, 1, 1, 0, 1, + 0, 1, 0, 2, 1, 2, 4, 0, 2, 1, + 1, 3, 5, 1, 1, 1, 2, 2, 0, 3, + 0, 2, 2, 1, 3, 0, 1, 0, 1, 3, + 1, 3, 2, 0, 1, 1, 0, 1, 2, 4, + 4, 0, 2, 2, 1, 1, 3, 3, 3, 3, + 3, 3, 3, 3, 0, 3, 3, 3, 0, 3, + 1, 1, 0, 4, 0, 1, 1, 0, 1, 2, + 2, 1, 1, 1, 1, 1, 0, 3, 1, 3, + 2, 1, 1, 0, 1, 2, 4, 9, 3, 5, + 0, 3, 3, 0, 1, 0, 2, 2, 0, 2, + 2, 2, 0, 2, 1, 2, 3, 3, 0, 2, + 1, 2, 3, 4, 3, 0, 1, 2, 1, 5, + 4, 4, 1, 3, 3, 5, 0, 5, 1, 3, + 1, 2, 3, 4, 1, 1, 3, 3, 1, 2, + 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, + 2, 0, 3, 0, 1, 0, 1, 1, 5, 0, + 1, 0, 1, 2, 1, 1, 1, 1, 1, 1, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -7893,8 +7967,8 @@ var yyR2 = [...]int{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, - 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 1, 1, } var yyChk = [...]int{ @@ -7904,735 +7978,735 @@ var yyChk = [...]int{ -17, -67, -32, -33, -75, -76, -77, -78, -79, -16, -18, -19, -9, -8, -13, 10, 11, -109, -34, 33, -39, -49, 225, -50, -40, 226, -51, 228, 227, 266, - 229, 250, 632, 235, 259, 75, 317, 318, 320, 321, - 322, 323, -110, 628, 264, 265, 231, 37, 46, 34, + 229, 250, 633, 235, 259, 75, 317, 318, 320, 321, + 322, 323, -110, 629, 264, 265, 231, 37, 46, 34, 35, 38, 236, 272, 273, 234, -10, -35, 9, -418, - 12, 460, 261, 260, 29, -12, 522, 87, -81, -417, - 678, -253, -237, 23, 34, 30, -236, -232, -128, -237, + 12, 461, 261, 260, 29, -12, 523, 87, -81, -417, + 679, -253, -237, 23, 34, 30, -236, -232, -128, -237, 21, 19, 8, -80, -80, -80, 13, 14, -80, -353, -355, -12, 26, 87, 159, 9, 87, -80, -56, -55, -53, -52, -54, -57, 32, -46, -47, -377, -45, -42, 230, 227, 276, 123, 124, 266, 267, 268, 229, 250, - 265, 269, 264, 285, -41, 82, 34, 522, 525, -360, - 226, 232, 233, 228, 461, 126, 125, 76, -357, 376, - 555, 648, -57, 650, 101, 104, 649, 45, 240, 651, - 652, 653, 562, 654, 249, 655, 656, 657, 658, 664, - 603, 665, 666, 667, 127, 8, -80, -304, -300, 91, - -293, 519, 252, 553, 554, 301, 82, 42, 528, 373, - 376, 555, 490, 648, 317, 333, 327, 495, 496, 497, - 356, 348, 520, 556, 529, 304, 253, 289, 642, 346, - 135, 650, 308, 557, 267, 381, 382, 558, 383, 101, - 320, 423, 663, 307, 559, 661, 104, 649, 325, 80, - 489, 52, 645, 45, 262, 344, 234, 340, 651, 290, - 560, 531, 283, 126, 123, 670, 37, 336, 51, 31, - 660, 125, 50, 652, 150, 561, 653, 562, 385, 363, - 636, 49, 386, 268, 563, 85, 273, 524, 311, 644, - 387, 509, 337, 388, 300, 659, 231, 564, 623, 615, - 616, 389, 390, 637, 368, 364, 369, 511, 565, 415, - 494, 391, 619, 620, 677, 53, 566, 567, 638, 124, - 568, 79, 654, 81, 331, 332, 569, 298, 251, 514, - 515, 417, 360, 472, 479, 480, 111, 112, 475, 113, - 481, 114, 482, 483, 484, 473, 115, 108, 474, 485, - 486, 361, 362, 116, 487, 110, 109, 476, 478, 117, - 488, 249, 36, 392, 521, 302, 59, 306, 277, 418, - 47, 366, 674, 46, 630, 516, 570, 635, 359, 355, - 469, 54, 571, 572, 573, 574, 491, 655, 358, 330, - 354, 669, 4, 295, 492, 656, 63, 233, 371, 370, - 372, 284, 414, 351, 575, 576, 577, 256, 83, 578, - 341, 22, 579, 580, 393, 291, 581, 57, 582, 583, - 421, 265, 584, 55, 657, 40, 585, 270, 671, 658, - 586, 313, 314, 587, 588, 629, 589, 272, 590, 395, - 591, 617, 618, 394, 365, 367, 517, 279, 396, 237, - 523, 592, 312, 335, 269, 662, 593, 257, 505, 506, - 507, 508, 643, 513, 512, 271, 276, 264, 422, 258, - 594, 595, 596, 597, 598, 305, 614, 599, 600, 321, - 664, 470, 44, 601, 602, 603, 604, 605, 299, 294, - 416, 425, 62, 84, 378, 606, 607, 641, 329, 326, - 292, 608, 318, 56, 665, 666, 667, 286, 668, 498, - 499, 500, 501, 10, 675, 676, 493, 398, 127, 296, - 297, 48, 352, 278, 609, 309, 610, 342, 343, 357, - 328, 353, 626, 319, 624, 280, 399, 471, 266, 611, - 424, 293, 374, 379, 310, 527, 510, 285, 400, 633, - 640, 526, 502, 503, 350, 347, 287, 504, 612, 628, - 401, 241, 281, 282, 613, 625, 402, 403, 303, 404, - 315, 405, 406, 407, 408, 411, 412, 413, 410, 316, - 409, 627, 621, 622, 288, 525, 324, 345, 380, 441, + 265, 269, 264, 285, -41, 82, 34, 523, 526, -360, + 226, 232, 233, 228, 462, 126, 125, 76, -357, 376, + 556, 649, -57, 651, 101, 104, 650, 45, 240, 652, + 653, 654, 563, 655, 249, 656, 657, 658, 659, 665, + 604, 666, 667, 668, 127, 8, -80, -304, -300, 91, + -293, 520, 252, 554, 555, 301, 82, 42, 529, 373, + 376, 556, 491, 649, 317, 333, 327, 496, 497, 498, + 356, 348, 521, 557, 530, 304, 253, 289, 643, 346, + 135, 651, 308, 558, 267, 381, 382, 559, 383, 101, + 320, 424, 664, 307, 560, 662, 104, 650, 325, 80, + 490, 52, 646, 45, 262, 344, 234, 340, 652, 290, + 561, 532, 283, 126, 123, 671, 37, 336, 51, 31, + 661, 125, 50, 653, 150, 562, 654, 563, 385, 363, + 637, 49, 386, 268, 564, 85, 273, 525, 311, 645, + 387, 510, 337, 388, 300, 660, 231, 565, 624, 616, + 617, 389, 390, 638, 368, 364, 369, 512, 566, 416, + 495, 391, 620, 621, 678, 53, 567, 568, 639, 124, + 569, 79, 655, 81, 331, 332, 570, 298, 251, 515, + 516, 418, 360, 473, 480, 481, 111, 112, 476, 113, + 482, 114, 483, 484, 485, 474, 115, 108, 475, 486, + 487, 361, 362, 116, 488, 110, 109, 477, 479, 117, + 489, 249, 36, 392, 522, 302, 59, 306, 277, 419, + 47, 366, 675, 46, 631, 517, 571, 636, 359, 355, + 470, 54, 572, 573, 574, 575, 492, 656, 358, 330, + 354, 670, 4, 295, 493, 657, 63, 233, 371, 370, + 372, 284, 415, 351, 576, 577, 578, 256, 83, 579, + 341, 22, 580, 581, 393, 291, 582, 57, 583, 584, + 422, 265, 585, 55, 658, 40, 586, 270, 672, 659, + 587, 313, 314, 588, 589, 630, 590, 272, 591, 395, + 592, 618, 619, 394, 365, 367, 518, 279, 396, 237, + 524, 593, 312, 335, 269, 663, 594, 257, 506, 507, + 508, 509, 644, 514, 513, 271, 276, 264, 423, 258, + 595, 596, 597, 598, 599, 305, 615, 600, 601, 321, + 665, 471, 44, 602, 603, 604, 605, 606, 299, 294, + 417, 426, 62, 84, 378, 607, 608, 642, 329, 326, + 292, 609, 318, 56, 666, 667, 668, 286, 669, 499, + 500, 501, 502, 10, 676, 677, 494, 398, 127, 296, + 297, 48, 352, 278, 610, 309, 611, 342, 343, 357, + 328, 353, 627, 319, 625, 280, 399, 472, 266, 612, + 425, 293, 374, 379, 310, 528, 511, 285, 400, 634, + 641, 527, 503, 504, 350, 347, 287, 505, 613, 629, + 401, 241, 281, 282, 614, 626, 402, 403, 303, 404, + 315, 414, 405, 406, 407, 408, 411, 412, 413, 410, + 316, 409, 628, 622, 623, 288, 526, 324, 345, 380, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 455, 456, 457, 458, 468, 239, -80, - 239, -191, -300, 239, 239, 96, 523, 649, 633, 395, - -272, 412, 413, 382, -290, 384, 397, 392, 402, 390, - -281, 393, 395, 279, -401, 415, 239, 399, 225, 385, - 394, 403, 404, 315, 303, 410, 405, 316, 409, 288, - 406, 407, 408, 411, -384, 177, 653, 668, 135, 349, - 389, 387, 416, 630, 91, -306, 91, 92, 93, -293, - 319, -308, 324, -294, -384, -293, 322, -80, -80, -310, - -310, -130, 630, 634, -210, -145, 143, -160, -163, -151, - -155, -204, -205, -206, -207, -161, -220, -259, 166, 167, - 174, 144, -216, -164, 27, 518, 462, 461, 177, 32, - -154, 220, 69, 70, 464, 146, 58, 12, 437, 438, - -162, 432, 439, 434, 489, 491, 492, 493, 490, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 494, - 466, 467, 118, 468, 108, 110, 109, 469, 470, 471, - 346, 516, 517, 511, 514, 515, 513, 512, 361, 362, - 472, 473, 474, 111, 112, 113, 114, 115, 116, 117, - 475, 478, 476, 477, 479, 480, 481, 486, 487, 482, - 483, 484, 485, 488, -90, -102, 544, 543, -103, -152, - -153, -166, -167, -294, -300, 244, 431, 238, 172, 460, - -156, -149, -218, 107, 92, 93, -8, -214, 430, 435, - 436, 440, 433, 530, 532, 547, 548, 550, 535, 540, - 539, 542, 505, 506, 507, 508, 509, 510, 615, 616, - 617, 618, 619, 620, 621, 622, -384, -293, 91, -158, - -157, -200, 94, 99, 102, 103, 105, -407, 262, 342, - 343, 119, -418, 646, 90, 95, 96, 97, 98, 120, - 121, 178, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, - 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, - 217, 218, 219, 45, 398, 398, -191, -80, -80, -80, - -80, -230, -128, -232, -10, -8, -418, -80, -8, -9, - -13, -35, -37, 549, -36, -300, 100, -237, -253, 13, - 162, 43, 51, -235, -236, -12, -8, -145, 20, 24, - 25, -133, 168, -145, -300, -133, -279, 243, -80, -80, - -268, -313, 319, -270, 416, 630, 415, -260, -273, 91, - -259, -272, 414, -12, -354, 159, -340, -344, -294, 254, - -370, 250, -191, -80, -363, -362, -294, -418, -129, -289, - 240, 248, 247, 136, -388, 139, 296, 431, 238, -52, - -53, -54, -272, 176, 652, -111, 271, 275, 88, 88, - -344, -343, -342, -389, 275, 254, -369, -361, 246, 255, - -350, 247, 248, -345, 240, 137, -389, -345, 245, 255, - 250, 254, 275, 275, 127, 275, 127, 275, 275, 275, - 275, 275, 275, 275, 275, 275, 270, -351, 151, -351, - 526, 526, -357, -389, 250, 240, -389, -389, 246, -291, - -345, 242, 26, 242, 36, 36, -351, -351, -351, -272, - 176, -351, -351, -351, -351, 283, 283, -351, -351, -351, + 452, 453, 454, 455, 456, 457, 458, 459, 469, 239, + -80, 239, -191, -300, 239, 239, 96, 524, 650, 634, + 395, -272, 412, 413, 382, -290, 384, 397, 392, 402, + 390, -281, 393, 395, 279, -401, 416, 239, 399, 225, + 385, 394, 403, 404, 315, 414, 303, 410, 405, 316, + 409, 288, 406, 407, 408, 411, -384, 177, 654, 669, + 135, 349, 389, 387, 417, 631, 91, -306, 91, 92, + 93, -293, 319, -308, 324, -294, -384, -293, 322, -80, + -80, -310, -310, -130, 631, 635, -210, -145, 143, -160, + -163, -151, -155, -204, -205, -206, -207, -161, -220, -259, + 166, 167, 174, 144, -216, -164, 27, 519, 463, 462, + 177, 32, -154, 220, 69, 70, 465, 146, 58, 12, + 438, 439, -162, 433, 440, 435, 490, 492, 493, 494, + 491, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 495, 467, 468, 118, 469, 108, 110, 109, 470, + 471, 472, 346, 517, 518, 512, 515, 516, 514, 513, + 361, 362, 473, 474, 475, 111, 112, 113, 114, 115, + 116, 117, 476, 479, 477, 478, 480, 481, 482, 487, + 488, 483, 484, 485, 486, 489, -90, -102, 545, 544, + -103, -152, -153, -166, -167, -294, -300, 244, 432, 238, + 172, 461, -156, -149, -218, 107, 92, 93, -8, -214, + 431, 436, 437, 441, 434, 531, 533, 548, 549, 551, + 536, 541, 540, 543, 506, 507, 508, 509, 510, 511, + 616, 617, 618, 619, 620, 621, 622, 623, -384, -293, + 91, -158, -157, -200, 94, 99, 102, 103, 105, -407, + 262, 342, 343, 119, -418, 647, 90, 95, 96, 97, + 98, 120, 121, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 45, 398, 398, -191, -80, + -80, -80, -80, -230, -128, -232, -10, -8, -418, -80, + -8, -9, -13, -35, -37, 550, -36, -300, 100, -237, + -253, 13, 162, 43, 51, -235, -236, -12, -8, -145, + 20, 24, 25, -133, 168, -145, -300, -133, -279, 243, + -80, -80, -268, -313, 319, -270, 417, 631, 416, -260, + -273, 91, -259, -272, 415, -12, -354, 159, -340, -344, + -294, 254, -370, 250, -191, -80, -363, -362, -294, -418, + -129, -289, 240, 248, 247, 136, -388, 139, 296, 432, + 238, -52, -53, -54, -272, 176, 653, -111, 271, 275, + 88, 88, -344, -343, -342, -389, 275, 254, -369, -361, + 246, 255, -350, 247, 248, -345, 240, 137, -389, -345, + 245, 255, 250, 254, 275, 275, 127, 275, 127, 275, + 275, 275, 275, 275, 275, 275, 275, 275, 270, -351, + 151, -351, 527, 527, -357, -389, 250, 240, -389, -389, + 246, -291, -345, 242, 26, 242, 36, 36, -351, -351, + -351, -272, 176, -351, -351, -351, -351, 283, 283, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, - -351, -351, -351, -351, 239, -388, -137, 409, 303, 315, - 82, -55, 285, -38, -191, -289, 240, 241, -388, 272, - -191, 221, -191, -415, -191, 96, 96, -283, 159, 16, - -283, -280, 398, 396, 383, 388, -283, -283, -283, -283, - 286, 381, -346, 240, 36, 251, 398, 286, 381, 286, - 287, 286, 287, 391, 401, 286, -305, 15, 162, 431, - 386, 390, 279, 239, 280, 241, 400, 287, -305, -305, - 90, 90, -284, 159, 286, 398, 282, -283, -283, -311, - -418, -296, -294, -292, 230, 24, 142, 26, 28, 145, - 177, 130, 20, 146, 38, 232, 349, 250, 176, 246, - 461, 225, 73, 530, 432, 434, 430, 437, 463, 464, - 431, 384, 32, 14, 532, 29, 260, 25, 39, 170, - 227, 149, 533, 263, 27, 261, 118, 121, 535, 23, - 76, 255, 15, 248, 41, 17, 536, 537, 18, 244, - 243, 162, 240, 71, 12, 220, 30, 158, 67, 538, - 137, 539, 540, 541, 542, 131, 69, 159, 21, 672, - 435, 436, 34, 631, 518, 274, 172, 74, 60, 634, - 143, 433, 543, 544, 119, 545, 122, 77, 639, 139, - 19, 72, 43, 546, 275, 547, 245, 673, 548, 419, - 549, 160, 228, 460, 70, 161, 646, 550, 647, 238, - 397, 9, 465, 33, 259, 247, 129, 68, 551, 239, - 148, 466, 467, 242, 132, 120, 8, 136, 35, 13, - 75, 78, 438, 439, 440, 58, 128, 522, 147, 16, - 552, 420, 141, 632, 426, 427, 428, 429, 235, -384, - 635, -311, -311, 33, 92, -410, -411, -412, 522, 419, - 242, -294, -191, -86, 623, 229, -87, 629, 24, 237, - -135, 398, -123, 177, 653, 636, 637, 638, 635, 395, - 633, 643, 641, 639, 286, 640, 88, 139, 141, 142, - 4, -145, 158, -201, 151, 152, 153, 154, 155, 156, - 157, 162, 143, 145, 159, -246, 140, 163, 164, 165, - 166, 167, 168, 169, 171, 170, 172, 173, 160, 161, - 176, 223, 224, -155, -155, -155, -155, -216, -222, -221, - -418, -218, -384, -293, -300, -418, -418, -155, -278, -418, - -418, -151, -418, -418, -418, -225, -145, -418, -418, -422, - -418, -422, -422, -329, -418, -329, -418, -418, -418, -418, + -351, -351, -351, -351, -351, -351, 239, -388, -137, 409, + 303, 315, 82, -55, 285, -38, -191, -289, 240, 241, + -388, 272, -191, 221, -191, -415, -191, 96, 96, -283, + 159, 16, -283, -280, 398, 396, 383, 388, -283, -283, + -283, -283, 286, 381, -346, 240, 36, 251, 398, 286, + 381, 286, 287, 286, 287, 391, 401, 286, -305, 15, + 162, 432, 386, 390, 279, 239, 280, 241, 400, 287, + -305, -305, 90, -305, 90, -284, 159, 286, 398, 282, + -283, -283, -311, -418, -296, -294, -292, 230, 24, 142, + 26, 28, 145, 177, 130, 20, 146, 38, 232, 349, + 250, 176, 246, 462, 225, 73, 531, 433, 435, 431, + 438, 464, 465, 432, 384, 32, 14, 533, 29, 260, + 25, 39, 170, 227, 149, 534, 263, 27, 261, 118, + 121, 536, 23, 76, 255, 15, 248, 41, 17, 537, + 538, 18, 244, 243, 162, 240, 71, 12, 220, 30, + 158, 67, 539, 137, 540, 541, 542, 543, 131, 69, + 159, 21, 673, 436, 437, 34, 632, 519, 274, 172, + 74, 60, 635, 143, 434, 544, 545, 119, 546, 122, + 77, 640, 139, 19, 72, 43, 547, 275, 548, 245, + 674, 549, 420, 550, 160, 228, 461, 70, 161, 647, + 551, 648, 238, 397, 9, 466, 33, 259, 247, 129, + 68, 552, 239, 148, 467, 468, 242, 132, 120, 8, + 136, 35, 13, 75, 78, 439, 440, 441, 58, 128, + 523, 147, 16, 553, 421, 141, 633, 427, 428, 429, + 430, 235, -384, 636, -311, -311, 33, 92, -410, -411, + -412, 523, 420, 242, -294, -191, -86, 624, 229, -87, + 630, 24, 237, -135, 398, -123, 177, 654, 637, 638, + 639, 636, 395, 634, 644, 642, 640, 286, 641, 88, + 139, 141, 142, 4, -145, 158, -201, 151, 152, 153, + 154, 155, 156, 157, 162, 143, 145, 159, -246, 140, + 163, 164, 165, 166, 167, 168, 169, 171, 170, 172, + 173, 160, 161, 176, 223, 224, -155, -155, -155, -155, + -216, -222, -221, -418, -218, -384, -293, -300, -418, -418, + -155, -278, -418, -418, -151, -418, -418, -418, -225, -145, + -418, -418, -422, -418, -422, -422, -329, -418, -329, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, - -418, -418, 221, -418, -418, -418, -418, -418, -329, -329, - -329, -329, -329, -418, -418, -418, -418, -418, -418, -418, - -418, -418, -418, -418, -418, -418, -418, 103, 99, 102, - 94, -220, 105, 90, 90, 90, 90, -8, -9, -210, - -418, -310, -398, -399, -194, -191, -418, 303, 315, -294, - -294, 272, -235, -12, -8, -230, -236, -232, -8, -121, - -134, 64, 65, -136, 25, 39, 68, 66, 24, -419, - 89, -419, -253, -419, 88, -37, -256, 87, 62, 44, - 90, 90, 88, 22, -231, -233, -145, 15, -298, 4, - -297, 26, -294, 90, 221, 15, -192, 30, -191, -279, - -279, 88, 91, 319, -269, -271, 417, 419, 151, -299, - -294, 90, 32, 89, 88, -191, -318, -321, -323, -322, - -324, -319, -320, 346, 347, 177, 350, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 363, 33, 262, 342, - 343, 344, 345, 364, 365, 366, 367, 369, 370, 371, - 372, 327, 348, 520, 328, 329, 330, 331, 332, 333, - 335, 336, 339, 337, 338, 340, 341, -385, -384, 87, - 64, 65, 89, 88, -325, 87, -145, -137, 239, -384, - 240, 240, 240, -80, 460, -351, -351, -351, 270, 20, - -45, -42, -377, 19, -41, -42, 230, 123, 124, 227, - 87, -340, 87, -349, -385, -384, 87, 137, 245, 136, - -348, -345, -348, -349, -384, -218, -384, 137, 137, -384, - -384, -265, -294, -265, -265, 24, -265, 24, -265, 24, - 96, -294, -265, 24, -265, 24, -265, 24, -265, 24, - -265, 24, 32, 79, 80, 81, 32, 83, 84, 85, - -218, -384, -384, -218, -340, -218, -191, -384, -272, 96, - 96, 96, -351, -351, 96, 90, 90, 90, -351, -351, - 96, 90, -302, -300, 90, 90, -390, 256, 300, 302, - 96, 96, 96, 96, 32, 90, -391, 32, 660, 659, - 661, 662, 663, 90, 96, 32, 96, 32, 96, -294, - 87, -191, -143, 290, 225, 227, 230, 77, 90, 306, - 307, 304, 313, 314, 309, 310, 90, 306, 307, 304, - 313, 314, 309, 310, 151, 45, 88, 242, 239, -384, - -285, 244, -285, -294, -301, -300, -292, -414, 88, -413, - 23, 426, 427, 429, 387, 428, 90, -145, -347, 15, - 162, -305, -305, -283, -191, -347, -305, -283, -191, -283, - -283, -283, -283, -305, -305, -305, -283, -300, -300, -191, - -191, -191, -191, -191, -191, -191, -311, -284, -283, -283, - 635, 635, 90, -277, 15, 77, -311, -311, 88, 325, - 420, 421, -309, 322, -82, -294, 90, -15, -11, -23, - -22, -24, 151, -15, 88, 522, -184, -191, 635, 635, - 635, 635, 635, 635, -145, -145, -145, -145, 545, -208, - 119, 143, 120, 121, -163, -209, -214, -216, 106, 162, - 145, 159, -246, -151, -155, -151, -151, -151, -151, -151, - -151, -151, -151, -151, -151, -151, -151, -151, -312, -294, - 90, 177, -159, -158, 105, -407, -159, 519, 88, -221, - 221, -145, -145, -384, -145, -294, -131, -133, -131, -145, - -223, -224, 147, -218, -145, -419, -419, 96, 105, 168, - -127, 25, 39, -127, -127, -127, -127, -145, -145, -145, - -145, -145, -145, -145, -145, -145, -145, -127, -294, -294, - -120, -119, 442, 443, 444, 445, 447, 448, 449, 452, - 453, 457, 458, 441, 459, 446, 451, 454, 455, 456, - 450, 345, -145, -145, -145, -145, -145, -145, -88, -145, - 130, 131, 132, -210, -145, -151, -145, -145, -145, -419, - -145, -145, -145, -211, -210, -383, -382, -381, -145, -145, - -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -418, -418, -418, -418, -418, 221, -418, -418, -418, -418, + -418, -329, -329, -329, -329, -329, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + 103, 99, 102, 94, -220, 105, 90, 90, 90, 90, + -8, -9, -210, -418, -310, -398, -399, -194, -191, -418, + 303, 315, -294, -294, 272, -235, -12, -8, -230, -236, + -232, -8, -121, -134, 64, 65, -136, 25, 39, 68, + 66, 24, -419, 89, -419, -253, -419, 88, -37, -256, + 87, 62, 44, 90, 90, 88, 22, -231, -233, -145, + 15, -298, 4, -297, 26, -294, 90, 221, 15, -192, + 30, -191, -279, -279, 88, 91, 319, -269, -271, 418, + 420, 151, -299, -294, 90, 32, 89, 88, -191, -318, + -321, -323, -322, -324, -319, -320, 346, 347, 177, 350, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 363, + 33, 262, 342, 343, 344, 345, 364, 365, 366, 367, + 369, 370, 371, 372, 327, 348, 521, 328, 329, 330, + 331, 332, 333, 335, 336, 339, 337, 338, 340, 341, + -385, -384, 87, 64, 65, 89, 88, -325, 87, -145, + -137, 239, -384, 240, 240, 240, -80, 461, -351, -351, + -351, 270, 20, -45, -42, -377, 19, -41, -42, 230, + 123, 124, 227, 87, -340, 87, -349, -385, -384, 87, + 137, 245, 136, -348, -345, -348, -349, -384, -218, -384, + 137, 137, -384, -384, -265, -294, -265, -265, 24, -265, + 24, -265, 24, 96, -294, -265, 24, -265, 24, -265, + 24, -265, 24, -265, 24, 32, 79, 80, 81, 32, + 83, 84, 85, -218, -384, -384, -218, -340, -218, -191, + -384, -272, 96, 96, 96, -351, -351, 96, 90, 90, + 90, -351, -351, 96, 90, -302, -300, 90, 90, -390, + 256, 300, 302, 96, 96, 96, 96, 32, 90, -391, + 32, 661, 660, 662, 663, 664, 90, 96, 32, 96, + 32, 96, -294, 87, -191, -143, 290, 225, 227, 230, + 77, 90, 306, 307, 304, 313, 314, 309, 310, 90, + 306, 307, 304, 313, 314, 309, 310, 151, 45, 88, + 242, 239, -384, -285, 244, -285, -294, -301, -300, -292, + -414, 88, -413, 23, 427, 428, 430, 387, 429, 90, + -145, -347, 15, 162, -305, -305, -283, -191, -347, -305, + -283, -191, -283, -283, -283, -283, -305, -305, -305, -283, + -300, -300, -191, -191, -191, -191, -191, -191, -191, -311, + -284, -283, -283, 636, -283, 636, 90, -277, 15, 77, + -311, -311, 88, 325, 421, 422, -309, 322, -82, -294, + 90, -15, -11, -23, -22, -24, 151, -15, 88, 523, + -184, -191, 636, 636, 636, 636, 636, 636, -145, -145, + -145, -145, 546, -208, 119, 143, 120, 121, -163, -209, + -214, -216, 106, 162, 145, 159, -246, -151, -155, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -312, -294, 90, 177, -159, -158, 105, -407, + -159, 520, 88, -221, 221, -145, -145, -384, -145, -294, + -131, -133, -131, -145, -223, -224, 147, -218, -145, -419, + -419, 96, 105, 168, -127, 25, 39, -127, -127, -127, + -127, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -127, -294, -294, -120, -119, 443, 444, 445, 446, + 448, 449, 450, 453, 454, 458, 459, 442, 460, 447, + 452, 455, 456, 457, 451, 345, -145, -145, -145, -145, + -145, -145, -88, -145, 130, 131, 132, -210, -145, -151, + -145, -145, -145, -419, -145, -145, -145, -211, -210, -383, + -382, -381, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, - -145, -419, -145, -165, -149, 96, -261, 105, 92, -145, - -145, -132, -131, -296, -301, -292, -293, -131, -132, -132, - -131, -131, -145, -145, -145, -145, -145, -145, -145, -145, - -419, -145, -145, -145, -145, -145, -253, -419, -210, 88, - -400, 419, 420, 631, -303, 275, -302, 26, -211, 90, - 90, 15, -263, 78, -294, -235, -235, 60, -131, -136, - -419, -36, 26, -255, -294, 63, 90, -330, -272, 373, - 374, 177, -145, -145, 88, -234, 28, 29, -191, -297, - 168, -301, -191, -264, 275, -191, -169, -171, -172, -173, - -194, -217, -418, -174, -8, 541, 538, 15, -184, -185, - -193, -300, -270, -313, -269, 88, 418, 420, 421, 77, - 122, -145, -331, 176, -359, -358, -357, -340, -342, -343, - -344, 89, -331, -336, 379, 378, -325, -325, -325, -325, - -325, -330, -330, -330, -330, 87, 87, -325, -325, -325, - -325, -333, 87, -333, -333, -334, -333, 87, -334, -335, - 87, -335, -370, -145, -367, -366, -364, -365, 249, 101, - 613, 569, 522, 562, 603, 78, -362, -234, 96, -419, - -143, -286, 244, -368, -365, -384, -384, -384, -286, 91, - 90, 91, 90, 91, 90, -112, -59, -1, 672, 673, - 674, 88, 20, -341, -340, -58, 300, -373, -374, 275, - -369, -363, -349, 137, -348, -349, -349, -384, 88, 30, - 127, 127, 127, 127, 522, 227, 33, -287, 561, 143, - 613, 569, -340, -58, 242, 242, -312, -312, -312, 90, - 90, -282, 668, -184, -139, 292, 151, 281, 281, 239, - 239, 294, -191, 305, 308, 306, 307, 304, 313, 314, - 309, 310, 24, 24, 24, 24, 24, 24, 24, 305, - 308, 306, 307, 304, 313, 314, 309, 310, 24, 24, - 24, 24, 24, 24, 24, 293, 295, 297, 283, -191, - -191, -285, 77, -186, -191, 27, -300, -413, -191, 285, - -191, -283, -283, -191, -283, -283, -191, -412, 326, -294, - 360, 624, 625, 627, 626, -123, 419, 88, 522, 23, - -124, 23, -418, 119, 120, 121, -209, -151, -155, -151, - 142, 263, -418, -218, -419, -296, 26, 88, 78, -419, - 88, 88, -419, -419, 88, 15, -226, -224, 149, -145, - -419, 88, -419, -419, -419, -210, -145, -145, -145, -145, - -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, - -210, 88, 88, 15, -316, 26, -419, -419, -419, -419, - -419, -225, -419, 15, -419, 78, 88, 162, 88, -419, - -419, -419, 88, 88, -419, -419, 88, 88, -419, 88, - 88, 88, -419, 88, 88, 88, 88, -419, -419, -419, - -419, 88, 88, 88, 88, 88, 88, 88, 88, 88, - 88, -419, -95, 546, -419, -419, 88, -419, 88, -419, - -418, 221, -419, -419, -419, -419, -419, 88, 88, 88, - 88, 88, 88, -419, -419, -419, 88, 88, -419, 88, - -419, 88, -419, -399, 630, 420, -198, -197, -195, 75, - 243, 76, -418, -302, -419, -159, -261, -262, -261, -203, - -294, 96, 105, -237, -168, -170, 15, -136, -216, 89, - 88, -330, -241, -247, -280, -294, 90, 177, -332, 177, - -332, 373, 374, -233, 221, -199, 16, -202, 33, 58, - -11, -418, -418, 33, 88, -187, -189, -188, -190, 67, - 71, 73, 68, 69, 70, 74, -307, 26, -8, -169, - -8, -418, -191, -184, -420, 15, 78, -420, 88, 221, - -271, -274, 422, 419, 425, -384, 90, -111, 88, -357, - -344, -238, -140, 41, -337, 380, -330, 529, -330, -339, - 90, -339, 96, 96, 96, 89, -48, -43, -44, 34, - 82, -364, -351, 90, 40, -351, -351, -294, 89, -234, - -139, -191, 143, 77, -368, -368, -368, -300, -2, 671, - 677, 137, 87, 383, 19, -255, 88, 89, -219, 301, - 89, -113, -294, 89, 87, -349, -349, -294, -418, 239, - 32, 32, 613, 569, 561, -58, -219, -218, -384, -331, - 670, 669, 89, 241, 299, -144, 437, -141, 90, 91, - -191, -191, -191, -191, -191, 230, 227, 406, -408, 311, - -408, 406, -408, -408, 284, 242, -184, -191, 88, -85, - 258, 253, -305, -305, 34, -191, 419, 644, 642, -145, - 142, 263, -163, -155, -151, -314, 177, 346, 262, 344, - 340, 360, 351, 378, 342, 379, 337, 336, 335, -314, - -312, -210, -133, -145, -145, 150, -145, 148, -145, -419, - -419, -419, -419, -419, -230, -145, -145, -145, -419, 177, - 346, 15, -145, -312, -145, -145, -145, -145, -145, -381, - -145, -210, -145, -210, -145, -145, -145, -145, -145, -382, - -382, -382, -382, -382, -210, -210, -210, -210, -418, -294, - -98, -97, -96, 596, 243, -95, -165, -98, -165, -132, - -296, -145, -145, -145, -145, -145, -145, -145, -145, -145, - -145, -195, -345, -345, -345, -265, 88, -276, 23, 15, - 58, 58, -168, -199, -169, -136, -294, -244, 623, -250, - 47, -248, -249, 48, -245, 49, 57, -332, -332, 168, - -235, -145, -266, 77, -267, -275, -218, -213, -215, -214, - -418, -254, -419, -294, -265, -267, -171, -172, -172, -171, - -172, 67, 67, 67, 72, 67, 72, 67, -188, -300, - -419, -145, -303, 78, -169, -169, -193, -300, 168, 419, - 423, 424, -357, -406, 119, 143, 32, 77, 376, 101, - -404, 176, 558, 608, 613, 569, 562, 603, -405, 245, - 136, 137, 257, 26, 42, 89, 88, 89, 88, 89, - 89, 88, -288, -287, -44, -43, -351, -351, 96, -384, - 90, 90, 241, 27, -191, 77, 77, 77, -114, 675, - 96, 87, -3, 82, -145, 87, 20, -340, -218, -375, - -326, -376, -327, -328, -5, -6, -352, -117, 58, 101, - -62, 45, 240, 655, 656, 127, -418, 668, -367, -255, - -371, -373, -191, -148, -418, -147, -149, -156, 166, 167, - 262, 342, 343, -219, -191, -138, 290, 298, 87, -142, - 92, -387, 78, 281, 376, 281, 90, -409, 312, 90, - -409, 90, -409, -409, -191, -85, -48, -191, -283, -283, - 34, -384, -419, -163, -155, -126, 162, 522, -317, 528, - -325, -325, -325, -335, -325, 332, -325, 332, -325, -419, - -419, -419, 88, -419, 23, -419, -145, 88, -122, 465, - 88, 88, -419, 87, 87, -145, -419, -419, -419, 88, - -419, -419, -419, -419, -419, 88, -419, -419, -419, 88, - -315, 614, -419, -419, -419, -419, -419, -419, -419, -419, - -419, -419, -94, -295, -294, -95, 578, 578, -419, -95, - -227, 88, -419, -419, 88, -419, 88, 88, -419, 88, - -419, 88, -419, -419, -419, -419, 88, -196, 23, -196, - -196, -419, -261, -191, -199, -228, 17, -241, 52, 352, - -252, -251, 56, 48, -249, 20, 50, 20, 31, -266, - 88, 151, 88, -419, -419, 88, 58, 221, -419, -199, - -182, -181, 77, 78, -183, 77, -181, 67, 67, -256, - 88, -264, -169, -199, -199, 221, 119, -418, -150, -162, - -148, 13, 90, 90, -384, -403, 659, 660, 32, 96, - -351, -351, 137, 137, -191, 87, -330, 90, -330, 96, - 96, 32, 83, 84, 85, 32, 79, 80, 81, -191, - -191, -191, -191, -372, 87, 20, -145, 87, 151, 89, - -255, -255, 277, 162, -351, 653, 283, 283, -351, -351, - -351, -116, -115, 675, 89, -419, 88, -338, 522, 525, - -145, -157, -157, -256, 89, -380, 522, -386, -294, -294, - -294, -294, 96, 98, -419, 520, 74, 523, -419, -330, - -145, -145, -145, -235, 90, -145, -145, 96, 96, -419, - -145, -210, -145, -419, -179, -178, -180, 636, 119, 32, - -314, -419, -212, 275, -101, -100, -99, 15, -419, -145, - -145, -145, -145, -145, -145, -145, -418, 67, 19, 17, - -418, -418, -303, -228, -229, 18, 20, -242, 54, -240, - 53, -240, -251, 20, 20, 90, 20, 90, 137, -275, - -145, -215, 58, -11, -294, -213, -294, -230, -145, 87, - -145, -159, -199, -199, -145, -205, 489, 491, 492, 493, - 490, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 494, 468, 108, 110, 109, 469, 470, 471, 346, - 516, 517, 511, 514, 515, 513, 512, 361, 362, 472, - 473, 474, 111, 112, 113, 114, 115, 116, 117, 475, - 478, 476, 479, 480, 481, 486, 487, 482, 483, 484, - 485, 488, 505, 506, 507, 508, 509, 510, 615, 616, - 617, 618, 619, 620, 621, 622, 90, 90, 87, -145, - 89, 89, -256, -371, -59, 89, -257, -255, 96, 89, - 278, -214, -418, 90, -351, -351, -351, 96, 96, -302, - -419, 88, -294, -405, -373, 526, 526, -419, 26, -379, - -378, -296, 87, 78, 63, 521, 524, -419, -419, 88, - -419, -419, -419, 89, 89, -419, -419, -419, 88, -419, - -178, -180, -419, 77, -159, -230, 20, -98, 300, 302, - -98, -419, 88, -419, -419, 88, -419, 88, -419, -419, - -258, -419, -294, 245, 20, 20, -258, -258, -198, -229, - -108, -107, -106, 552, -145, -210, -243, 55, 77, 122, - 90, 90, 90, 13, -213, 221, -235, -255, -176, 383, - -230, -419, -255, 89, 26, 89, 677, 137, 89, -214, - -125, -418, 274, -302, 90, 90, -115, -118, -11, 88, - 151, -255, -191, 63, -145, -210, -419, 77, 533, 636, - -93, -92, -89, 647, 673, -210, -95, -95, -145, -145, - -145, 88, -419, -419, -419, -108, 88, -105, -104, -294, - 77, 122, -267, -294, 89, -419, -418, -235, 89, -239, - -11, 87, -3, 274, -326, -376, -327, -328, -5, -6, - -352, -83, 522, -378, -356, -296, 90, 96, 89, 522, - -419, -419, -91, 145, 645, 611, -146, -157, -154, 220, - -419, 88, -419, 88, -419, 88, -294, 245, -106, 88, - 26, -303, -177, -175, -294, 575, -396, -395, 518, -406, - -402, 119, 143, 101, -404, 613, 569, 128, 129, -83, - -145, 87, -419, -84, 289, 630, -387, 523, -91, 646, - 589, 564, 589, 564, -145, -145, -145, -104, -418, -419, - 88, 23, -318, -61, 586, -393, -394, 77, -397, 389, - 585, 606, 119, 90, 89, -255, 250, -380, 524, 142, - -419, 88, -419, 88, -419, -94, -175, 582, -331, -159, - -394, 77, -393, 77, 14, 13, -4, 676, 89, 291, - -91, -145, -145, -419, -60, 27, -176, -392, 258, 253, - 256, 33, -392, 96, -4, -419, -419, 586, 252, 32, - 119, -159, -179, -178, -178, + -145, -145, -145, -145, -145, -419, -145, -165, -149, 96, + -261, 105, 92, -145, -145, -132, -131, -296, -301, -292, + -293, -131, -132, -132, -131, -131, -145, -145, -145, -145, + -145, -145, -145, -145, -419, -145, -145, -145, -145, -145, + -253, -419, -210, 88, -400, 420, 421, 632, -303, 275, + -302, 26, -211, 90, 90, 15, -263, 78, -294, -235, + -235, 60, -131, -136, -419, -36, 26, -255, -294, 63, + 90, -330, -272, 373, 374, 177, -145, -145, 88, -234, + 28, 29, -191, -297, 168, -301, -191, -264, 275, -191, + -169, -171, -172, -173, -194, -217, -418, -174, -8, 542, + 539, 15, -184, -185, -193, -300, -270, -313, -269, 88, + 419, 421, 422, 77, 122, -145, -331, 176, -359, -358, + -357, -340, -342, -343, -344, 89, -331, -336, 379, 378, + -325, -325, -325, -325, -325, -330, -330, -330, -330, 87, + 87, -325, -325, -325, -325, -333, 87, -333, -333, -334, + -333, 87, -334, -335, 87, -335, -370, -145, -367, -366, + -364, -365, 249, 101, 614, 570, 523, 563, 604, 78, + -362, -234, 96, -419, -143, -286, 244, -368, -365, -384, + -384, -384, -286, 91, 90, 91, 90, 91, 90, -112, + -59, -1, 673, 674, 675, 88, 20, -341, -340, -58, + 300, -373, -374, 275, -369, -363, -349, 137, -348, -349, + -349, -384, 88, 30, 127, 127, 127, 127, 523, 227, + 33, -287, 562, 143, 614, 570, -340, -58, 242, 242, + -312, -312, -312, 90, 90, -282, 669, -184, -139, 292, + 151, 281, 281, 239, 239, 294, -191, 305, 308, 306, + 307, 304, 313, 314, 309, 310, 24, 24, 24, 24, + 24, 24, 24, 305, 308, 306, 307, 304, 313, 314, + 309, 310, 24, 24, 24, 24, 24, 24, 24, 293, + 295, 297, 283, -191, -191, -285, 77, -186, -191, 27, + -300, -413, -191, 285, -191, -283, -283, -191, -283, -283, + -191, -412, 326, -294, 360, 625, 626, 628, 627, -123, + 420, 88, 523, 23, -124, 23, -418, 119, 120, 121, + -209, -151, -155, -151, 142, 263, -418, -218, -419, -296, + 26, 88, 78, -419, 88, 88, -419, -419, 88, 15, + -226, -224, 149, -145, -419, 88, -419, -419, -419, -210, + -145, -145, -145, -145, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -210, 88, 88, 15, -316, 26, + -419, -419, -419, -419, -419, -225, -419, 15, -419, 78, + 88, 162, 88, -419, -419, -419, 88, 88, -419, -419, + 88, 88, -419, 88, 88, 88, -419, 88, 88, 88, + 88, -419, -419, -419, -419, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, -419, -95, 547, -419, -419, + 88, -419, 88, -419, -418, 221, -419, -419, -419, -419, + -419, 88, 88, 88, 88, 88, 88, -419, -419, -419, + 88, 88, -419, 88, -419, 88, -419, -399, 631, 421, + -198, -197, -195, 75, 243, 76, -418, -302, -419, -159, + -261, -262, -261, -203, -294, 96, 105, -237, -168, -170, + 15, -136, -216, 89, 88, -330, -241, -247, -280, -294, + 90, 177, -332, 177, -332, 373, 374, -233, 221, -199, + 16, -202, 33, 58, -11, -418, -418, 33, 88, -187, + -189, -188, -190, 67, 71, 73, 68, 69, 70, 74, + -307, 26, -8, -169, -8, -418, -191, -184, -420, 15, + 78, -420, 88, 221, -271, -274, 423, 420, 426, -384, + 90, -111, 88, -357, -344, -238, -140, 41, -337, 380, + -330, 530, -330, -339, 90, -339, 96, 96, 96, 89, + -48, -43, -44, 34, 82, -364, -351, 90, 40, -351, + -351, -294, 89, -234, -139, -191, 143, 77, -368, -368, + -368, -300, -2, 672, 678, 137, 87, 383, 19, -255, + 88, 89, -219, 301, 89, -113, -294, 89, 87, -349, + -349, -294, -418, 239, 32, 32, 614, 570, 562, -58, + -219, -218, -384, -331, 671, 670, 89, 241, 299, -144, + 438, -141, 90, 91, -191, -191, -191, -191, -191, 230, + 227, 406, -408, 311, -408, 406, -408, -408, 284, 242, + -184, -191, 88, -85, 258, 253, -305, -305, 34, -191, + 420, 645, 643, -145, 142, 263, -163, -155, -151, -314, + 177, 346, 262, 344, 340, 360, 351, 378, 342, 379, + 337, 336, 335, -314, -312, -210, -133, -145, -145, 150, + -145, 148, -145, -419, -419, -419, -419, -419, -230, -145, + -145, -145, -419, 177, 346, 15, -145, -312, -145, -145, + -145, -145, -145, -381, -145, -210, -145, -210, -145, -145, + -145, -145, -145, -382, -382, -382, -382, -382, -210, -210, + -210, -210, -418, -294, -98, -97, -96, 597, 243, -95, + -165, -98, -165, -132, -296, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -195, -345, -345, -345, -265, + 88, -276, 23, 15, 58, 58, -168, -199, -169, -136, + -294, -244, 624, -250, 47, -248, -249, 48, -245, 49, + 57, -332, -332, 168, -235, -145, -266, 77, -267, -275, + -218, -213, -215, -214, -418, -254, -419, -294, -265, -267, + -171, -172, -172, -171, -172, 67, 67, 67, 72, 67, + 72, 67, -188, -300, -419, -145, -303, 78, -169, -169, + -193, -300, 168, 420, 424, 425, -357, -406, 119, 143, + 32, 77, 376, 101, -404, 176, 559, 609, 614, 570, + 563, 604, -405, 245, 136, 137, 257, 26, 42, 89, + 88, 89, 88, 89, 89, 88, -288, -287, -44, -43, + -351, -351, 96, -384, 90, 90, 241, 27, -191, 77, + 77, 77, -114, 676, 96, 87, -3, 82, -145, 87, + 20, -340, -218, -375, -326, -376, -327, -328, -5, -6, + -352, -117, 58, 101, -62, 45, 240, 656, 657, 127, + -418, 669, -367, -255, -371, -373, -191, -148, -418, -147, + -149, -156, 166, 167, 262, 342, 343, -219, -191, -138, + 290, 298, 87, -142, 92, -387, 78, 281, 376, 281, + 90, -409, 312, 90, -409, 90, -409, -409, -191, -85, + -48, -191, -283, -283, 34, -384, -419, -163, -155, -126, + 162, 523, -317, 529, -325, -325, -325, -335, -325, 332, + -325, 332, -325, -419, -419, -419, 88, -419, 23, -419, + -145, 88, -122, 466, 88, 88, -419, 87, 87, -145, + -419, -419, -419, 88, -419, -419, -419, -419, -419, 88, + -419, -419, -419, 88, -315, 615, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -94, -295, -294, -95, + 579, 579, -419, -95, -227, 88, -419, -419, 88, -419, + 88, 88, -419, 88, -419, 88, -419, -419, -419, -419, + 88, -196, 23, -196, -196, -419, -261, -191, -199, -228, + 17, -241, 52, 352, -252, -251, 56, 48, -249, 20, + 50, 20, 31, -266, 88, 151, 88, -419, -419, 88, + 58, 221, -419, -199, -182, -181, 77, 78, -183, 77, + -181, 67, 67, -256, 88, -264, -169, -199, -199, 221, + 119, -418, -150, -162, -148, 13, 90, 90, -384, -403, + 660, 661, 32, 96, -351, -351, 137, 137, -191, 87, + -330, 90, -330, 96, 96, 32, 83, 84, 85, 32, + 79, 80, 81, -191, -191, -191, -191, -372, 87, 20, + -145, 87, 151, 89, -255, -255, 277, 162, -351, 654, + 283, 283, -351, -351, -351, -116, -115, 676, 89, -419, + 88, -338, 523, 526, -145, -157, -157, -256, 89, -380, + 523, -386, -294, -294, -294, -294, 96, 98, -419, 521, + 74, 524, -419, -330, -145, -145, -145, -235, 90, -145, + -145, 96, 96, -419, -145, -210, -145, -419, -179, -178, + -180, 637, 119, 32, -314, -419, -212, 275, -101, -100, + -99, 15, -419, -145, -145, -145, -145, -145, -145, -145, + -418, 67, 19, 17, -418, -418, -303, -228, -229, 18, + 20, -242, 54, -240, 53, -240, -251, 20, 20, 90, + 20, 90, 137, -275, -145, -215, 58, -11, -294, -213, + -294, -230, -145, 87, -145, -159, -199, -199, -145, -205, + 490, 492, 493, 494, 491, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 495, 469, 108, 110, 109, + 470, 471, 472, 346, 517, 518, 512, 515, 516, 514, + 513, 361, 362, 473, 474, 475, 111, 112, 113, 114, + 115, 116, 117, 476, 479, 477, 480, 481, 482, 487, + 488, 483, 484, 485, 486, 489, 506, 507, 508, 509, + 510, 511, 616, 617, 618, 619, 620, 621, 622, 623, + 90, 90, 87, -145, 89, 89, -256, -371, -59, 89, + -257, -255, 96, 89, 278, -214, -418, 90, -351, -351, + -351, 96, 96, -302, -419, 88, -294, -405, -373, 527, + 527, -419, 26, -379, -378, -296, 87, 78, 63, 522, + 525, -419, -419, 88, -419, -419, -419, 89, 89, -419, + -419, -419, 88, -419, -178, -180, -419, 77, -159, -230, + 20, -98, 300, 302, -98, -419, 88, -419, -419, 88, + -419, 88, -419, -419, -258, -419, -294, 245, 20, 20, + -258, -258, -198, -229, -108, -107, -106, 553, -145, -210, + -243, 55, 77, 122, 90, 90, 90, 13, -213, 221, + -235, -255, -176, 383, -230, -419, -255, 89, 26, 89, + 678, 137, 89, -214, -125, -418, 274, -302, 90, 90, + -115, -118, -11, 88, 151, -255, -191, 63, -145, -210, + -419, 77, 534, 637, -93, -92, -89, 648, 674, -210, + -95, -95, -145, -145, -145, 88, -419, -419, -419, -108, + 88, -105, -104, -294, 77, 122, -267, -294, 89, -419, + -418, -235, 89, -239, -11, 87, -3, 274, -326, -376, + -327, -328, -5, -6, -352, -83, 523, -378, -356, -296, + 90, 96, 89, 523, -419, -419, -91, 145, 646, 612, + -146, -157, -154, 220, -419, 88, -419, 88, -419, 88, + -294, 245, -106, 88, 26, -303, -177, -175, -294, 576, + -396, -395, 519, -406, -402, 119, 143, 101, -404, 614, + 570, 128, 129, -83, -145, 87, -419, -84, 289, 631, + -387, 524, -91, 647, 590, 565, 590, 565, -145, -145, + -145, -104, -418, -419, 88, 23, -318, -61, 587, -393, + -394, 77, -397, 389, 586, 607, 119, 90, 89, -255, + 250, -380, 525, 142, -419, 88, -419, 88, -419, -94, + -175, 583, -331, -159, -394, 77, -393, 77, 14, 13, + -4, 677, 89, 291, -91, -145, -145, -419, -60, 27, + -176, -392, 258, 253, 256, 33, -392, 96, -4, -419, + -419, 587, 252, 32, 119, -159, -179, -178, -178, } var yyDef = [...]int{ - 912, -2, -2, 914, 2, 4, 5, 6, 7, 8, + 913, -2, -2, 915, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 73, 75, 76, 912, 912, 912, 0, 912, - 0, 0, 912, -2, -2, 912, 1529, 0, 912, 0, - 0, 0, 0, 0, -2, 825, 831, 0, 840, -2, - 0, 0, 912, 912, 2097, 2097, 907, 0, 0, 0, - 0, 0, 912, 912, 912, 912, 1386, 53, 912, 0, - 88, 89, 860, 861, 862, 68, 0, 2095, 913, 1, - 3, 74, 78, 0, 0, 0, 61, 1395, 0, 81, - 0, 0, 916, 0, 0, 1512, 912, 912, 0, 129, - 130, 131, 0, 0, 0, 912, 0, -2, 135, -2, + 39, 40, 73, 75, 76, 913, 913, 913, 0, 913, + 0, 0, 913, -2, -2, 913, 1530, 0, 913, 0, + 0, 0, 0, 0, -2, 826, 832, 0, 841, -2, + 0, 0, 913, 913, 2099, 2099, 908, 0, 0, 0, + 0, 0, 913, 913, 913, 913, 1387, 53, 913, 0, + 88, 89, 861, 862, 863, 68, 0, 2097, 914, 1, + 3, 74, 78, 0, 0, 0, 61, 1396, 0, 81, + 0, 0, 917, 0, 0, 1513, 913, 913, 0, 129, + 130, 131, 0, 0, 0, 913, 0, -2, 135, -2, 164, 165, 166, 0, 171, 625, 527, 579, 525, 564, -2, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 403, 403, 0, 0, -2, - 513, 513, 513, 1514, 0, 0, 0, 561, 465, 403, + 513, 513, 513, 1515, 0, 0, 0, 561, 465, 403, 403, 403, 0, 403, 403, 403, 403, 0, 0, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, - 403, 403, 403, 403, 403, 403, 1413, 170, 1530, 1527, - 1528, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, - 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, - 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, - 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, - 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, - 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, - 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, - 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, - 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, - 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, - 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, - 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, - 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, - 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, - 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, - 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, - 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, - 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, - 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, - 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, - 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, - 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, - 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, - 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, - 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, - 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, - 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, - 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, - 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, - 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, - 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, - 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, - 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, - 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, - 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, - 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, - 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, - 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, - 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, - 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, - 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 0, 1506, - 0, 738, 1015, 0, 0, 743, 0, 0, 746, 747, - 814, 749, 750, 814, 0, 814, 814, 814, 814, 0, - 0, 0, 760, 0, 0, 0, 0, 811, 0, 776, - 777, 0, 811, 811, 0, 785, 817, 0, 0, 791, - 814, 814, 794, 795, 2098, 0, 2098, 2098, 1497, 0, - 808, 806, 820, 821, 43, 824, 827, 828, 829, 830, - 833, 0, 844, 847, 1523, 1524, 0, 849, 856, 873, - 874, 0, 908, 909, 48, 1163, 0, 1037, 1042, 1053, - 1068, 1069, 1070, 1071, 1072, 1074, 1075, 1076, 0, 0, - 0, 0, 1081, 1082, 0, 0, 0, 0, 0, 1144, - 1090, 0, 0, 0, 0, 1359, 0, 0, 1320, 1320, - 1178, 1320, 1322, 1322, 1737, 1873, 1881, 2003, 1699, 1704, - 1705, 1706, 1996, 1997, 1998, 1999, 2039, 2040, 2044, 1797, - 0, 0, 0, 2094, 1834, 1842, 1843, 1867, 1968, 2024, - 1716, 1862, 1933, 1794, 1816, 1817, 1950, 1951, 1838, 1839, - 1820, 1832, 1835, 1823, 1824, 1826, 1828, 1833, 1840, 1846, - 1825, 1845, 1844, 0, 1821, 1822, 1827, 1837, 1841, 1829, - 1830, 1831, 1836, 1847, 0, 0, 0, 0, 0, 1259, - 1260, 1261, 1262, 0, 0, 0, 0, 0, 0, 0, - 295, 296, 1372, 1373, 46, 47, 1162, 1493, 1322, 1322, - 1322, 1322, 1322, 1104, 1105, 1106, 1107, 1108, 1132, 1133, - 1139, 1140, 1945, 1946, 1947, 1948, 1778, 2033, 1786, 1787, - 1928, 1929, 1799, 1800, 2069, 2070, -2, -2, -2, 236, - 237, 238, 239, 240, 241, 242, 243, 0, 1741, 2014, - 2015, 232, 0, 0, 300, 301, 297, 298, 299, 1146, - 1147, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 2097, 0, 883, 0, 0, 0, 0, - 0, 1395, 0, 1387, 1386, 66, 0, -2, 0, 0, - 0, 0, 50, 0, 55, 972, 915, 80, 79, 1444, - 0, 0, 0, 62, 1396, 70, 72, 1397, 0, 917, - 918, 0, 948, 952, 0, 0, 0, 1513, 1512, 1512, - 105, 0, 0, 106, 126, 127, 128, 0, 0, 112, - 113, 1499, 1500, 132, 0, 0, 182, 183, 0, 44, - 430, 0, 178, 934, 0, 423, 362, 0, 1413, 0, - 0, 0, 0, 0, 912, 0, 1507, 159, 160, 167, - 168, 169, 403, 403, 403, 576, 0, 0, 170, 170, - 534, 535, 536, 0, 0, -2, 428, 0, 514, 0, - 0, 417, 417, 421, 419, 420, 0, 0, 0, 0, - 0, 0, 0, 0, 553, 0, 554, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 686, 0, 404, 0, - 574, 575, 466, 0, 0, 0, 0, 0, 0, 0, - 0, 1515, 1516, 0, 551, 552, 0, 0, 0, 403, - 403, 0, 0, 0, 0, 403, 403, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 158, 1435, 0, 0, 0, - 0, -2, 0, 730, 0, 0, 0, 1508, 1508, 0, - 737, 0, 739, 1426, 741, 744, 745, 748, 0, 0, - 751, 0, 811, 811, 809, 810, 753, 754, 755, 756, - 814, 0, 0, 412, 413, 414, 811, 814, 0, 814, - 814, 814, 814, 811, 811, 811, 814, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2098, 817, 814, 814, - 0, 0, 786, 0, 787, 788, 789, 792, 793, 796, - 2099, 2100, 1525, 1526, 1533, 1534, 1535, 1536, 1537, 1538, - 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, - 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, - 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, - 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, - 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, - 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, - 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, - 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, - 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, - 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, - 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, - 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, - 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, - 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, - 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 2098, - 2098, 800, 804, 1498, 826, 832, 834, 835, 0, 0, - 845, 848, 867, 52, 1785, 855, 52, 857, 858, 859, - 886, 887, 892, 0, 0, 0, 0, 898, 899, 900, - 901, 0, 0, 904, 905, 906, 0, 0, 0, 0, - 0, 1035, 0, 0, 1152, 1153, 1154, 1155, 1156, 1157, - 1158, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1054, 1055, - 0, 0, 0, 1077, 1078, 1079, 1080, 1083, 0, 1095, - 0, 1097, 1368, -2, 0, 0, 0, 1088, 1089, 0, - 0, 0, 0, 0, 0, 0, 1360, 0, 0, 1176, - 0, 1177, 1179, 1180, 0, 1181, 922, 922, 922, 922, - 922, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 922, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1518, 146, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 932, 0, 0, 932, 932, 0, 0, 225, 226, - 227, 228, 229, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 244, 245, 246, - 247, 248, 249, 302, 250, 251, 252, 1162, 0, 0, - 0, 49, 875, 876, 0, 998, 1518, 0, 0, 0, - 928, 0, 60, 69, 71, 1395, 64, 1395, 0, 0, - 0, -2, -2, 935, 941, 942, 943, 944, 945, 57, - 2096, 58, 0, 77, 0, 51, 0, 0, 0, 0, - 376, 1447, 0, 0, 1388, 1389, 1392, 0, 949, 1879, - 953, 0, 955, 956, 0, 0, 103, 0, 1014, 0, - 0, 0, 114, 0, 116, 117, 0, 0, 0, 387, - 1501, 1502, 1503, -2, 410, 0, 387, 371, 310, 311, - 312, 362, 314, 362, 362, 362, 362, 376, 376, 376, - 376, 345, 346, 347, 348, 349, 0, 0, 331, 362, - 362, 362, 362, 352, 353, 354, 355, 356, 357, 358, - 359, 315, 316, 317, 318, 319, 320, 321, 322, 323, - 364, 364, 364, 364, 364, 368, 368, 0, 45, 0, - 939, 940, 391, 0, 1392, 0, 0, 1435, 1510, 1520, - 0, 0, 0, 1510, 137, 0, 0, 0, 577, 636, - 528, 565, 578, 0, 531, 532, -2, 0, 0, 513, - 0, 515, 0, 411, 0, -2, 0, 421, 0, 417, - 421, 418, 421, 409, 422, 555, 556, 557, 0, 559, - 560, 666, 984, 0, 0, 0, 0, 0, 672, 673, - 674, 0, 676, 677, 678, 679, 680, 681, 682, 683, - 684, 685, 566, 567, 568, 569, 570, 571, 572, 573, - 0, 0, 0, 0, 515, 0, 562, 0, 0, 467, - 468, 469, 0, 0, 472, 473, 474, 475, 0, 0, - 478, 479, 480, 1001, 1002, 481, 482, 507, 508, 509, - 483, 484, 485, 486, 487, 488, 489, 501, 502, 503, - 504, 505, 506, 490, 491, 492, 493, 494, 495, 498, - 0, 152, 1417, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1508, 0, - 0, 0, 0, 931, 1016, 1531, 1532, 740, 0, 1427, - 0, 1430, 1431, 1432, 1433, 1434, 815, 816, 0, 415, - 416, 814, 814, 757, 801, 0, 814, 761, 802, 762, - 764, 763, 765, 778, 779, 814, 768, 812, 813, 769, - 770, 771, 772, 773, 774, 775, 797, 780, 781, 782, - 784, 783, 818, 0, 822, 823, 798, 799, 0, 0, - 838, 839, 0, 846, 870, 868, 869, 871, 863, 864, - 865, 866, 0, 872, 0, 0, 889, 99, 894, 895, - 896, 897, 910, 903, 1164, 1032, 1033, 1034, 0, 1036, - 1039, 0, 1148, 1150, 1041, 1043, 1159, 1160, 1161, 0, - 0, 0, 0, 0, 1047, 1051, 1056, 1057, 1058, 1059, - 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1073, 1336, - 1337, 1338, 1092, 303, 304, 0, 1093, 0, 0, 0, - 0, 0, 0, 0, 1163, 1094, 0, 946, 0, 0, - 1366, 1363, 0, 0, 0, 1321, 1323, 0, 0, 0, - 0, 923, 924, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, - 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, - 1318, 1319, 1339, 0, 0, 0, 0, 0, 1359, 0, - 1099, 1100, 1101, 0, 0, 0, 0, 0, 0, 1219, - 0, 0, 0, 0, 1519, 0, 147, 148, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1263, 1264, 1265, 1266, 42, 0, - 0, 0, 933, 1370, 0, -2, -2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1288, 0, 0, 0, 0, 0, 0, 1491, 0, 0, - 878, 879, 881, 0, 1018, 0, 999, 0, 0, 884, - 885, 0, 927, 0, 930, 63, 65, 0, 957, 936, - 59, 54, 0, 0, 976, 1445, 376, 1467, 0, 385, - 385, 382, 1398, 1399, 0, 1391, 1393, 1394, 82, 954, - 950, 0, 1030, 0, 0, 1013, 0, 960, 962, 963, - 964, 996, 0, 967, 968, 0, 0, 0, 0, 0, - 101, 1015, 107, 0, 115, 0, 0, 120, 121, 108, - 109, 110, 111, 0, 625, -2, 462, 184, 186, 187, - 188, 179, -2, 374, 372, 373, 313, 376, 376, 339, - 340, 341, 342, 343, 344, 0, 0, 332, 333, 334, - 335, 324, 0, 325, 326, 327, 366, 0, 328, 329, - 0, 330, 429, 0, 1400, 392, 393, 395, 403, 0, - 398, 399, 0, 403, 403, 0, 424, 425, 0, 1392, - 1417, 0, 0, 0, 1521, 1520, 1520, 1520, 0, 172, - 173, 174, 175, 176, 177, 661, 0, 0, 637, 659, - 660, 170, 0, 0, 180, 517, 516, 0, 693, 0, - 427, 0, 0, 421, 421, 406, 407, 558, 0, 0, - 668, 669, 670, 671, 0, 0, 0, 544, 456, 0, - 545, 546, 515, 517, 0, 0, 387, 470, 471, 476, - 477, 496, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 596, 598, 599, 600, - 519, 606, 595, 597, 601, 602, 603, 519, 607, 608, - 609, 610, 613, 615, 616, 617, 519, 623, 612, 614, - 618, 619, 620, 519, 624, 1414, 1415, 1416, 0, 0, - 731, 0, 0, 453, 97, 1509, 736, 1428, 742, 1429, - 811, 767, 803, 811, 759, 766, 790, 836, 837, 842, - 850, 851, 852, 853, 854, 893, 0, 0, 0, 0, - 902, 0, 0, 1040, 1149, 1151, 1044, 0, 1048, 1052, - 0, 0, 0, 1098, 1096, 1370, 0, 0, 0, 1145, - 0, 0, 1167, 1168, 0, 0, 0, 1364, 0, 0, - 1174, 0, 1324, 1325, 1182, 0, 0, 0, 0, 0, - 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, - 1386, 0, 0, 0, 0, 0, 1203, 1204, 1205, 1206, - 1207, 0, 1209, 0, 1210, 0, 0, 0, 0, 1217, - 1218, 1220, 0, 0, 1223, 1224, 0, 0, 1225, 0, - 0, 0, 1229, 0, 0, 0, 0, 1238, 1239, 1240, - 1241, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1252, 1253, 0, 1127, 0, 0, 1127, 0, 1165, - 932, 0, 1326, 1327, 1328, 1329, 1330, 0, 0, 0, - 0, 0, 0, 1286, 1287, 1289, 0, 0, 1292, 0, - 1294, 0, 1492, 877, 880, 882, 970, 1019, 1020, 0, - 0, 0, 0, 1000, 1517, 925, 926, 929, 978, 0, - 1374, 0, 0, 957, 1030, 958, 0, 937, 56, 973, - 0, 1449, 1448, 1461, 1474, 385, 385, 379, 380, 386, - 381, 383, 384, 1390, 0, 1395, 0, 1485, 0, 0, - 1477, 0, 0, 0, 0, 0, 0, 0, 0, 1003, - 0, 0, 1006, 0, 0, 0, 0, 997, 968, 0, - 969, 0, -2, 0, 0, 95, 96, 0, 0, 0, - 118, 119, 0, 0, 125, 388, 389, 161, 170, 464, - 185, 437, 0, 0, 309, 375, 336, 337, 338, 0, - 360, 0, 0, 0, 0, 458, 133, 1404, 1403, 403, - 403, 394, 0, 397, 0, 0, 0, 1522, 363, 426, - 0, 151, 0, 0, 0, 0, 0, 157, 631, 0, - 0, 638, 0, 0, 0, 526, 0, 537, 538, 0, - 665, -2, 727, 391, 0, 405, 408, 985, 0, 0, - 539, 0, 542, 543, 457, 517, 548, 549, 563, 550, - 499, 500, 497, 0, 0, 1436, 1437, 1442, 1440, 1441, - 138, 584, 586, 585, 589, 0, 0, 0, 521, 0, - 521, 0, 521, 521, 582, 0, 453, 1400, 0, 735, - 454, 455, 814, 814, 888, 100, 0, 891, 0, 0, - 0, 0, 1045, 1049, 1331, 1357, 362, 362, 1344, 362, - 368, 1347, 362, 1349, 362, 1352, 362, 1355, 1356, 0, - 0, 0, 947, 0, 0, 1173, 1367, 0, 0, 1183, - 1184, 1185, 1186, 1187, 1361, 0, 0, 0, 1202, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, - 150, 0, 0, 0, 0, 0, 0, 1297, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1122, 1126, - 0, 1128, 1129, 0, 0, 1255, 0, 0, 1267, 0, - 1371, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1021, 1026, 1026, 1026, 0, 0, 0, 1504, 1505, - 1375, 1376, 1030, 1377, 959, 938, 977, 1467, 0, 1460, - 0, -2, 1469, 0, 0, 0, 1475, 377, 378, 951, - 83, 1031, 86, 0, 1485, 1494, 0, 1476, 1487, 1489, - 0, 0, 0, 1481, 0, 1030, 961, 992, 994, 0, - 989, 1004, 1005, 1007, 0, 1009, 0, 1011, 1012, 972, - 966, 0, 103, 0, 1030, 1030, 102, 0, 1017, 122, - 123, 124, 463, 189, 194, 0, 0, 0, 199, 0, - 201, 0, 0, 0, 206, 207, 403, 403, 438, 0, - 306, 308, 0, 0, 192, 376, 0, 376, 0, 367, - 369, 0, 439, 459, 1401, 1402, 0, 0, 396, 400, - 401, 402, 0, 1511, 153, 0, 0, 0, 634, 0, - 662, 0, 0, 0, 0, 0, 0, 181, 518, 694, - 695, 696, 697, 698, 699, 700, 701, 702, 0, 403, - 0, 0, 0, 403, 403, 403, 0, 719, 390, 0, - 0, 690, 687, 540, 0, 230, 231, 233, 0, 0, - 0, 0, 0, 547, 972, 1418, 1419, 1420, 0, 1439, - 1443, 141, 0, 0, 0, 0, 594, 604, 0, 520, - 605, 611, 621, 622, 732, 733, 734, 98, 752, 758, - 890, 911, 1038, 1046, 1050, 0, 0, 0, 0, 1358, - 1342, 376, 1345, 1346, 1348, 1350, 1351, 1353, 1354, 1086, - 1087, 1091, 0, 1170, 0, 1172, 1365, 0, 1395, 0, - 0, 0, 1201, 0, 0, 0, 1212, 1211, 1213, 0, - 1215, 1216, 1221, 1222, 1226, 0, 1228, 1230, 1231, 0, - 0, 0, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, - 1250, 1251, 0, 1120, 1123, 1254, 1130, 1131, 1136, 1257, - 0, 0, 1166, 1269, 0, 1274, 0, 0, 1280, 0, - 1284, 0, 1290, 1291, 1293, 1295, 0, 0, 0, 0, - 0, 998, 979, 67, 1377, 1379, 0, 1454, 1452, 1452, - 1462, 1463, 0, 0, 1470, 0, 0, 0, 0, 87, - 0, 0, 0, 1490, 0, 0, 0, 0, 104, 1386, - 986, 993, 0, 0, 987, 0, 988, 1008, 1010, 965, - 0, 1030, 1030, 93, 94, 0, 195, 0, 197, 223, - 224, 0, 200, 202, 203, 204, 210, 211, 212, 205, - 0, 0, 305, 307, 0, 0, 350, 361, 351, 0, - 0, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 972, - 154, 155, 156, 626, 0, 636, 0, 974, 0, 629, - 0, 529, 0, 0, 0, 403, 403, 403, 0, 0, - 0, 0, 704, 0, 0, 667, 0, 675, 0, 0, - 0, 234, 235, 0, 1438, 583, 0, 139, 140, 0, - 0, 588, 522, 523, 1084, 0, 0, 0, 1085, 1343, - 0, 0, 0, 0, 1362, 0, 0, 0, 0, 1208, - 0, 0, 0, 1234, 0, 0, 0, 656, 657, 0, - 1298, 1125, 1386, 0, 1127, 1137, 1138, 0, 1127, 1268, - 0, 0, 0, 0, 0, 0, 0, 1027, 0, 0, - 0, 0, 1018, 1379, 1384, 0, 0, 1457, 0, 1450, - 1453, 1451, 1464, 0, 0, 1471, 0, 1473, 0, 1495, - 1496, 1488, 0, 1480, 1483, 1479, 1482, 1395, 990, 0, - 995, 0, 1386, 92, 0, 198, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 208, 209, 0, 0, - 365, 370, 0, 0, 0, 627, 0, 975, 639, 630, - 0, 717, 0, 721, 0, 0, 0, 724, 725, 726, - 703, 0, 707, 431, 691, 688, 689, 541, 0, 142, - 143, 0, 0, 0, 1332, 0, 1335, 1169, 1171, 0, - 1198, 1199, 1200, 1340, 1341, 1214, 1227, 1232, 0, 1235, - 0, 0, 1236, 0, 658, 1116, 0, 0, 1134, 1135, - 0, 1270, 0, 1275, 1276, 0, 1281, 0, 1285, 1296, - 0, 1023, 980, 981, 1028, 1029, 0, 0, 971, 1384, - 85, 1385, 1382, 0, 1380, 1378, 1446, 0, 1455, 1456, - 1465, 1466, 1472, 0, 1478, 0, 90, 0, 0, 0, - 1395, 196, 0, 215, 0, 635, 0, 638, 628, 715, - 716, 0, 728, 720, 722, 723, 705, -2, 1421, 0, - 0, 0, 590, 1333, 0, 0, 1237, 0, 654, 655, - 1124, 1117, 0, 1102, 1103, 1121, 1256, 1258, 0, 0, - 0, 0, 1022, 1024, 1025, 84, 0, 1381, 1142, 0, - 1458, 1459, 1486, 1484, 991, 998, 0, 91, 444, 437, - 1421, 0, 0, 0, 708, 709, 710, 711, 712, 713, - 714, 580, 1423, 144, 145, 510, 511, 512, 138, 0, - 1175, 1233, 1118, 0, 0, 0, 0, 1114, 1115, 0, - 1271, 0, 1277, 0, 1282, 0, 982, 983, 1383, 0, - 0, 640, 0, 642, 0, -2, 432, 445, 0, 190, - 216, 217, 0, 0, 220, 221, 222, 213, 214, 134, - 0, 0, 729, 0, 1424, 1425, 141, 0, 0, 1109, - 1110, 1111, 1112, 1113, 0, 0, 0, 1143, 1122, 641, - 0, 0, 387, 0, 651, 433, 434, 0, 440, 441, - 442, 443, 218, 219, 663, 0, 0, 587, 1334, 0, - 1272, 0, 1278, 0, 1283, 0, 643, 644, 652, 0, - 435, 0, 436, 0, 0, 0, 632, 0, 663, 1422, - 1119, 0, 0, 1141, 0, 653, 649, 446, 448, 449, - 0, 0, 447, 664, 633, 1273, 1279, 0, 450, 451, - 452, 645, 646, 647, 648, + 403, 403, 403, 403, 403, 403, 1414, 170, 1531, 1528, + 1529, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, + 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, + 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, + 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, + 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, + 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, + 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, + 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, + 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, + 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, + 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, + 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, + 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, + 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, + 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, + 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, + 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, + 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, + 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, + 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, + 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, + 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, + 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, + 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, + 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, + 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, + 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, + 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, + 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, + 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, + 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, + 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, + 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, + 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, + 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, + 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, + 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, + 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, + 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, + 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, + 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 0, + 1507, 0, 738, 1016, 0, 0, 743, 0, 0, 746, + 747, 815, 749, 750, 815, 0, 815, 815, 815, 815, + 0, 0, 0, 760, 0, 0, 0, 0, 812, 0, + 776, 777, 0, 812, 812, 812, 0, 786, 818, 0, + 0, 792, 815, 815, 795, 796, 2100, 0, 2100, 2100, + 1498, 0, 809, 807, 821, 822, 43, 825, 828, 829, + 830, 831, 834, 0, 845, 848, 1524, 1525, 0, 850, + 857, 874, 875, 0, 909, 910, 48, 1164, 0, 1038, + 1043, 1054, 1069, 1070, 1071, 1072, 1073, 1075, 1076, 1077, + 0, 0, 0, 0, 1082, 1083, 0, 0, 0, 0, + 0, 1145, 1091, 0, 0, 0, 0, 1360, 0, 0, + 1321, 1321, 1179, 1321, 1323, 1323, 1738, 1874, 1882, 2004, + 1700, 1705, 1706, 1707, 1997, 1998, 1999, 2000, 2040, 2041, + 2045, 1798, 0, 0, 0, 2096, 1835, 1843, 1844, 1868, + 1969, 2025, 1717, 1863, 1934, 1795, 1817, 1818, 1951, 1952, + 1839, 1840, 1821, 1833, 1836, 1824, 1825, 1827, 1829, 1834, + 1841, 1847, 1826, 1846, 1845, 0, 1822, 1823, 1828, 1838, + 1842, 1830, 1831, 1832, 1837, 1848, 0, 0, 0, 0, + 0, 1260, 1261, 1262, 1263, 0, 0, 0, 0, 0, + 0, 0, 295, 296, 1373, 1374, 46, 47, 1163, 1494, + 1323, 1323, 1323, 1323, 1323, 1105, 1106, 1107, 1108, 1109, + 1133, 1134, 1140, 1141, 1946, 1947, 1948, 1949, 1779, 2034, + 1787, 1788, 1929, 1930, 1800, 1801, 2071, 2072, -2, -2, + -2, 236, 237, 238, 239, 240, 241, 242, 243, 0, + 1742, 2015, 2016, 232, 0, 0, 300, 301, 297, 298, + 299, 1147, 1148, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 2099, 0, 884, 0, 0, + 0, 0, 0, 1396, 0, 1388, 1387, 66, 0, -2, + 0, 0, 0, 0, 50, 0, 55, 973, 916, 80, + 79, 1445, 0, 0, 0, 62, 1397, 70, 72, 1398, + 0, 918, 919, 0, 949, 953, 0, 0, 0, 1514, + 1513, 1513, 105, 0, 0, 106, 126, 127, 128, 0, + 0, 112, 113, 1500, 1501, 132, 0, 0, 182, 183, + 0, 44, 430, 0, 178, 935, 0, 423, 362, 0, + 1414, 0, 0, 0, 0, 0, 913, 0, 1508, 159, + 160, 167, 168, 169, 403, 403, 403, 576, 0, 0, + 170, 170, 534, 535, 536, 0, 0, -2, 428, 0, + 514, 0, 0, 417, 417, 421, 419, 420, 0, 0, + 0, 0, 0, 0, 0, 0, 553, 0, 554, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 686, 0, + 404, 0, 574, 575, 466, 0, 0, 0, 0, 0, + 0, 0, 0, 1516, 1517, 0, 551, 552, 0, 0, + 0, 403, 403, 0, 0, 0, 0, 403, 403, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 158, 1436, 0, + 0, 0, 0, -2, 0, 730, 0, 0, 0, 1509, + 1509, 0, 737, 0, 739, 1427, 741, 744, 745, 748, + 0, 0, 751, 0, 812, 812, 810, 811, 753, 754, + 755, 756, 815, 0, 0, 412, 413, 414, 812, 815, + 0, 815, 815, 815, 815, 812, 812, 812, 815, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2100, 818, + 815, 815, 0, 815, 0, 787, 0, 788, 789, 790, + 793, 794, 797, 2101, 2102, 1526, 1527, 1534, 1535, 1536, + 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, + 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, + 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, + 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, + 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, + 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, + 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, + 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, + 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, + 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, + 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, + 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, + 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, + 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, + 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, + 1687, 1688, 2100, 2100, 801, 805, 1499, 827, 833, 835, + 836, 0, 0, 846, 849, 868, 52, 1786, 856, 52, + 858, 859, 860, 887, 888, 893, 0, 0, 0, 0, + 899, 900, 901, 902, 0, 0, 905, 906, 907, 0, + 0, 0, 0, 0, 1036, 0, 0, 1153, 1154, 1155, + 1156, 1157, 1158, 1159, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1055, 1056, 0, 0, 0, 1078, 1079, 1080, 1081, + 1084, 0, 1096, 0, 1098, 1369, -2, 0, 0, 0, + 1089, 1090, 0, 0, 0, 0, 0, 0, 0, 1361, + 0, 0, 1177, 0, 1178, 1180, 1181, 0, 1182, 923, + 923, 923, 923, 923, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 923, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1519, 146, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 933, 0, 0, 933, 933, 0, + 0, 225, 226, 227, 228, 229, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 244, 245, 246, 247, 248, 249, 302, 250, 251, 252, + 1163, 0, 0, 0, 49, 876, 877, 0, 999, 1519, + 0, 0, 0, 929, 0, 60, 69, 71, 1396, 64, + 1396, 0, 0, 0, -2, -2, 936, 942, 943, 944, + 945, 946, 57, 2098, 58, 0, 77, 0, 51, 0, + 0, 0, 0, 376, 1448, 0, 0, 1389, 1390, 1393, + 0, 950, 1880, 954, 0, 956, 957, 0, 0, 103, + 0, 1015, 0, 0, 0, 114, 0, 116, 117, 0, + 0, 0, 387, 1502, 1503, 1504, -2, 410, 0, 387, + 371, 310, 311, 312, 362, 314, 362, 362, 362, 362, + 376, 376, 376, 376, 345, 346, 347, 348, 349, 0, + 0, 331, 362, 362, 362, 362, 352, 353, 354, 355, + 356, 357, 358, 359, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 364, 364, 364, 364, 364, 368, 368, + 0, 45, 0, 940, 941, 391, 0, 1393, 0, 0, + 1436, 1511, 1521, 0, 0, 0, 1511, 137, 0, 0, + 0, 577, 636, 528, 565, 578, 0, 531, 532, -2, + 0, 0, 513, 0, 515, 0, 411, 0, -2, 0, + 421, 0, 417, 421, 418, 421, 409, 422, 555, 556, + 557, 0, 559, 560, 666, 985, 0, 0, 0, 0, + 0, 672, 673, 674, 0, 676, 677, 678, 679, 680, + 681, 682, 683, 684, 685, 566, 567, 568, 569, 570, + 571, 572, 573, 0, 0, 0, 0, 515, 0, 562, + 0, 0, 467, 468, 469, 0, 0, 472, 473, 474, + 475, 0, 0, 478, 479, 480, 1002, 1003, 481, 482, + 507, 508, 509, 483, 484, 485, 486, 487, 488, 489, + 501, 502, 503, 504, 505, 506, 490, 491, 492, 493, + 494, 495, 498, 0, 152, 1418, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1509, 0, 0, 0, 0, 932, 1017, 1532, 1533, + 740, 0, 1428, 0, 1431, 1432, 1433, 1434, 1435, 816, + 817, 0, 415, 416, 815, 815, 757, 802, 0, 815, + 761, 803, 762, 764, 763, 765, 778, 779, 815, 768, + 813, 814, 769, 770, 771, 772, 773, 774, 775, 798, + 780, 781, 782, 785, 783, 784, 819, 0, 823, 824, + 799, 800, 0, 0, 839, 840, 0, 847, 871, 869, + 870, 872, 864, 865, 866, 867, 0, 873, 0, 0, + 890, 99, 895, 896, 897, 898, 911, 904, 1165, 1033, + 1034, 1035, 0, 1037, 1040, 0, 1149, 1151, 1042, 1044, + 1160, 1161, 1162, 0, 0, 0, 0, 0, 1048, 1052, + 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, + 1067, 1068, 1074, 1337, 1338, 1339, 1093, 303, 304, 0, + 1094, 0, 0, 0, 0, 0, 0, 0, 1164, 1095, + 0, 947, 0, 0, 1367, 1364, 0, 0, 0, 1322, + 1324, 0, 0, 0, 0, 924, 925, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1300, 1301, 1302, 1303, 1304, + 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, + 1315, 1316, 1317, 1318, 1319, 1320, 1340, 0, 0, 0, + 0, 0, 1360, 0, 1100, 1101, 1102, 0, 0, 0, + 0, 0, 0, 1220, 0, 0, 0, 0, 1520, 0, + 147, 148, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1264, 1265, + 1266, 1267, 42, 0, 0, 0, 934, 1371, 0, -2, + -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1289, 0, 0, 0, 0, 0, + 0, 1492, 0, 0, 879, 880, 882, 0, 1019, 0, + 1000, 0, 0, 885, 886, 0, 928, 0, 931, 63, + 65, 0, 958, 937, 59, 54, 0, 0, 977, 1446, + 376, 1468, 0, 385, 385, 382, 1399, 1400, 0, 1392, + 1394, 1395, 82, 955, 951, 0, 1031, 0, 0, 1014, + 0, 961, 963, 964, 965, 997, 0, 968, 969, 0, + 0, 0, 0, 0, 101, 1016, 107, 0, 115, 0, + 0, 120, 121, 108, 109, 110, 111, 0, 625, -2, + 462, 184, 186, 187, 188, 179, -2, 374, 372, 373, + 313, 376, 376, 339, 340, 341, 342, 343, 344, 0, + 0, 332, 333, 334, 335, 324, 0, 325, 326, 327, + 366, 0, 328, 329, 0, 330, 429, 0, 1401, 392, + 393, 395, 403, 0, 398, 399, 0, 403, 403, 0, + 424, 425, 0, 1393, 1418, 0, 0, 0, 1522, 1521, + 1521, 1521, 0, 172, 173, 174, 175, 176, 177, 661, + 0, 0, 637, 659, 660, 170, 0, 0, 180, 517, + 516, 0, 693, 0, 427, 0, 0, 421, 421, 406, + 407, 558, 0, 0, 668, 669, 670, 671, 0, 0, + 0, 544, 456, 0, 545, 546, 515, 517, 0, 0, + 387, 470, 471, 476, 477, 496, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 591, 592, 593, + 596, 598, 599, 600, 519, 606, 595, 597, 601, 602, + 603, 519, 607, 608, 609, 610, 613, 615, 616, 617, + 519, 623, 612, 614, 618, 619, 620, 519, 624, 1415, + 1416, 1417, 0, 0, 731, 0, 0, 453, 97, 1510, + 736, 1429, 742, 1430, 812, 767, 804, 812, 759, 766, + 791, 837, 838, 843, 851, 852, 853, 854, 855, 894, + 0, 0, 0, 0, 903, 0, 0, 1041, 1150, 1152, + 1045, 0, 1049, 1053, 0, 0, 0, 1099, 1097, 1371, + 0, 0, 0, 1146, 0, 0, 1168, 1169, 0, 0, + 0, 1365, 0, 0, 1175, 0, 1325, 1326, 1183, 0, + 0, 0, 0, 0, 1189, 1190, 1191, 1192, 1193, 1194, + 1195, 1196, 1197, 1198, 1387, 0, 0, 0, 0, 0, + 1204, 1205, 1206, 1207, 1208, 0, 1210, 0, 1211, 0, + 0, 0, 0, 1218, 1219, 1221, 0, 0, 1224, 1225, + 0, 0, 1226, 0, 0, 0, 1230, 0, 0, 0, + 0, 1239, 1240, 1241, 1242, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1253, 1254, 0, 1128, 0, + 0, 1128, 0, 1166, 933, 0, 1327, 1328, 1329, 1330, + 1331, 0, 0, 0, 0, 0, 0, 1287, 1288, 1290, + 0, 0, 1293, 0, 1295, 0, 1493, 878, 881, 883, + 971, 1020, 1021, 0, 0, 0, 0, 1001, 1518, 926, + 927, 930, 979, 0, 1375, 0, 0, 958, 1031, 959, + 0, 938, 56, 974, 0, 1450, 1449, 1462, 1475, 385, + 385, 379, 380, 386, 381, 383, 384, 1391, 0, 1396, + 0, 1486, 0, 0, 1478, 0, 0, 0, 0, 0, + 0, 0, 0, 1004, 0, 0, 1007, 0, 0, 0, + 0, 998, 969, 0, 970, 0, -2, 0, 0, 95, + 96, 0, 0, 0, 118, 119, 0, 0, 125, 388, + 389, 161, 170, 464, 185, 437, 0, 0, 309, 375, + 336, 337, 338, 0, 360, 0, 0, 0, 0, 458, + 133, 1405, 1404, 403, 403, 394, 0, 397, 0, 0, + 0, 1523, 363, 426, 0, 151, 0, 0, 0, 0, + 0, 157, 631, 0, 0, 638, 0, 0, 0, 526, + 0, 537, 538, 0, 665, -2, 727, 391, 0, 405, + 408, 986, 0, 0, 539, 0, 542, 543, 457, 517, + 548, 549, 563, 550, 499, 500, 497, 0, 0, 1437, + 1438, 1443, 1441, 1442, 138, 584, 586, 585, 589, 0, + 0, 0, 521, 0, 521, 0, 521, 521, 582, 0, + 453, 1401, 0, 735, 454, 455, 815, 815, 889, 100, + 0, 892, 0, 0, 0, 0, 1046, 1050, 1332, 1358, + 362, 362, 1345, 362, 368, 1348, 362, 1350, 362, 1353, + 362, 1356, 1357, 0, 0, 0, 948, 0, 0, 1174, + 1368, 0, 0, 1184, 1185, 1186, 1187, 1188, 1362, 0, + 0, 0, 1203, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 149, 150, 0, 0, 0, 0, 0, + 0, 1298, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1123, 1127, 0, 1129, 1130, 0, 0, 1256, + 0, 0, 1268, 0, 1372, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1022, 1027, 1027, 1027, 0, + 0, 0, 1505, 1506, 1376, 1377, 1031, 1378, 960, 939, + 978, 1468, 0, 1461, 0, -2, 1470, 0, 0, 0, + 1476, 377, 378, 952, 83, 1032, 86, 0, 1486, 1495, + 0, 1477, 1488, 1490, 0, 0, 0, 1482, 0, 1031, + 962, 993, 995, 0, 990, 1005, 1006, 1008, 0, 1010, + 0, 1012, 1013, 973, 967, 0, 103, 0, 1031, 1031, + 102, 0, 1018, 122, 123, 124, 463, 189, 194, 0, + 0, 0, 199, 0, 201, 0, 0, 0, 206, 207, + 403, 403, 438, 0, 306, 308, 0, 0, 192, 376, + 0, 376, 0, 367, 369, 0, 439, 459, 1402, 1403, + 0, 0, 396, 400, 401, 402, 0, 1512, 153, 0, + 0, 0, 634, 0, 662, 0, 0, 0, 0, 0, + 0, 181, 518, 694, 695, 696, 697, 698, 699, 700, + 701, 702, 0, 403, 0, 0, 0, 403, 403, 403, + 0, 719, 390, 0, 0, 690, 687, 540, 0, 230, + 231, 233, 0, 0, 0, 0, 0, 547, 973, 1419, + 1420, 1421, 0, 1440, 1444, 141, 0, 0, 0, 0, + 594, 604, 0, 520, 605, 611, 621, 622, 732, 733, + 734, 98, 752, 758, 891, 912, 1039, 1047, 1051, 0, + 0, 0, 0, 1359, 1343, 376, 1346, 1347, 1349, 1351, + 1352, 1354, 1355, 1087, 1088, 1092, 0, 1171, 0, 1173, + 1366, 0, 1396, 0, 0, 0, 1202, 0, 0, 0, + 1213, 1212, 1214, 0, 1216, 1217, 1222, 1223, 1227, 0, + 1229, 1231, 1232, 0, 0, 0, 1243, 1244, 1245, 1246, + 1247, 1248, 1249, 1250, 1251, 1252, 0, 1121, 1124, 1255, + 1131, 1132, 1137, 1258, 0, 0, 1167, 1270, 0, 1275, + 0, 0, 1281, 0, 1285, 0, 1291, 1292, 1294, 1296, + 0, 0, 0, 0, 0, 999, 980, 67, 1378, 1380, + 0, 1455, 1453, 1453, 1463, 1464, 0, 0, 1471, 0, + 0, 0, 0, 87, 0, 0, 0, 1491, 0, 0, + 0, 0, 104, 1387, 987, 994, 0, 0, 988, 0, + 989, 1009, 1011, 966, 0, 1031, 1031, 93, 94, 0, + 195, 0, 197, 223, 224, 0, 200, 202, 203, 204, + 210, 211, 212, 205, 0, 0, 305, 307, 0, 0, + 350, 361, 351, 0, 0, 1406, 1407, 1408, 1409, 1410, + 1411, 1412, 1413, 973, 154, 155, 156, 626, 0, 636, + 0, 975, 0, 629, 0, 529, 0, 0, 0, 403, + 403, 403, 0, 0, 0, 0, 704, 0, 0, 667, + 0, 675, 0, 0, 0, 234, 235, 0, 1439, 583, + 0, 139, 140, 0, 0, 588, 522, 523, 1085, 0, + 0, 0, 1086, 1344, 0, 0, 0, 0, 1363, 0, + 0, 0, 0, 1209, 0, 0, 0, 1235, 0, 0, + 0, 656, 657, 0, 1299, 1126, 1387, 0, 1128, 1138, + 1139, 0, 1128, 1269, 0, 0, 0, 0, 0, 0, + 0, 1028, 0, 0, 0, 0, 1019, 1380, 1385, 0, + 0, 1458, 0, 1451, 1454, 1452, 1465, 0, 0, 1472, + 0, 1474, 0, 1496, 1497, 1489, 0, 1481, 1484, 1480, + 1483, 1396, 991, 0, 996, 0, 1387, 92, 0, 198, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 208, 209, 0, 0, 365, 370, 0, 0, 0, 627, + 0, 976, 639, 630, 0, 717, 0, 721, 0, 0, + 0, 724, 725, 726, 703, 0, 707, 431, 691, 688, + 689, 541, 0, 142, 143, 0, 0, 0, 1333, 0, + 1336, 1170, 1172, 0, 1199, 1200, 1201, 1341, 1342, 1215, + 1228, 1233, 0, 1236, 0, 0, 1237, 0, 658, 1117, + 0, 0, 1135, 1136, 0, 1271, 0, 1276, 1277, 0, + 1282, 0, 1286, 1297, 0, 1024, 981, 982, 1029, 1030, + 0, 0, 972, 1385, 85, 1386, 1383, 0, 1381, 1379, + 1447, 0, 1456, 1457, 1466, 1467, 1473, 0, 1479, 0, + 90, 0, 0, 0, 1396, 196, 0, 215, 0, 635, + 0, 638, 628, 715, 716, 0, 728, 720, 722, 723, + 705, -2, 1422, 0, 0, 0, 590, 1334, 0, 0, + 1238, 0, 654, 655, 1125, 1118, 0, 1103, 1104, 1122, + 1257, 1259, 0, 0, 0, 0, 1023, 1025, 1026, 84, + 0, 1382, 1143, 0, 1459, 1460, 1487, 1485, 992, 999, + 0, 91, 444, 437, 1422, 0, 0, 0, 708, 709, + 710, 711, 712, 713, 714, 580, 1424, 144, 145, 510, + 511, 512, 138, 0, 1176, 1234, 1119, 0, 0, 0, + 0, 1115, 1116, 0, 1272, 0, 1278, 0, 1283, 0, + 983, 984, 1384, 0, 0, 640, 0, 642, 0, -2, + 432, 445, 0, 190, 216, 217, 0, 0, 220, 221, + 222, 213, 214, 134, 0, 0, 729, 0, 1425, 1426, + 141, 0, 0, 1110, 1111, 1112, 1113, 1114, 0, 0, + 0, 1144, 1123, 641, 0, 0, 387, 0, 651, 433, + 434, 0, 440, 441, 442, 443, 218, 219, 663, 0, + 0, 587, 1335, 0, 1273, 0, 1279, 0, 1284, 0, + 643, 644, 652, 0, 435, 0, 436, 0, 0, 0, + 632, 0, 663, 1423, 1120, 0, 0, 1142, 0, 653, + 649, 446, 448, 449, 0, 0, 447, 664, 633, 1274, + 1280, 0, 450, 451, 452, 645, 646, 647, 648, } var yyTok1 = [...]int{ @@ -8641,7 +8715,7 @@ var yyTok1 = [...]int{ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 144, 3, 3, 3, 171, 163, 3, 87, 89, 168, 166, 88, 167, 221, 169, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 678, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 679, 152, 151, 153, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -8761,7 +8835,7 @@ var yyTok3 = [...]int{ 57985, 660, 57986, 661, 57987, 662, 57988, 663, 57989, 664, 57990, 665, 57991, 666, 57992, 667, 57993, 668, 57994, 669, 57995, 670, 57996, 671, 57997, 672, 57998, 673, 57999, 674, - 58000, 675, 58001, 676, 58002, 677, 0, + 58000, 675, 58001, 676, 58002, 677, 58003, 678, 0, } var yyErrorMessages = [...]struct { @@ -9111,7 +9185,7 @@ yydefault: case 1: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:624 +//line sql.y:625 { stmt := yyDollar[2].statementUnion() // If the statement is empty and we have comments @@ -9125,58 +9199,58 @@ yydefault: } case 2: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:637 +//line sql.y:638 { } case 3: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:638 +//line sql.y:639 { } case 4: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:642 +//line sql.y:643 { yyLOCAL = yyDollar[1].selStmtUnion() } yyVAL.union = yyLOCAL case 41: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:682 +//line sql.y:683 { setParseTree(yylex, nil) } case 42: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:688 +//line sql.y:689 { yyLOCAL = NewVariableExpression(yyDollar[1].str, SingleAt) } yyVAL.union = yyLOCAL case 43: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:694 +//line sql.y:695 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } case 44: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:699 +//line sql.y:700 { yyVAL.identifierCI = NewIdentifierCI("") } case 45: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:703 +//line sql.y:704 { yyVAL.identifierCI = yyDollar[1].identifierCI } case 46: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:709 +//line sql.y:710 { yyLOCAL = NewVariableExpression(string(yyDollar[1].str), SingleAt) } @@ -9184,7 +9258,7 @@ yydefault: case 47: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:713 +//line sql.y:714 { yyLOCAL = NewVariableExpression(string(yyDollar[1].str), DoubleAt) } @@ -9192,7 +9266,7 @@ yydefault: case 48: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:719 +//line sql.y:720 { yyLOCAL = &OtherAdmin{} } @@ -9200,7 +9274,7 @@ yydefault: case 49: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:725 +//line sql.y:726 { yyLOCAL = &Load{} } @@ -9208,7 +9282,7 @@ yydefault: case 50: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *With -//line sql.y:731 +//line sql.y:732 { yyLOCAL = &With{ctes: yyDollar[2].ctesUnion(), Recursive: false} } @@ -9216,7 +9290,7 @@ yydefault: case 51: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *With -//line sql.y:735 +//line sql.y:736 { yyLOCAL = &With{ctes: yyDollar[3].ctesUnion(), Recursive: true} } @@ -9224,7 +9298,7 @@ yydefault: case 52: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *With -//line sql.y:740 +//line sql.y:741 { yyLOCAL = nil } @@ -9232,14 +9306,14 @@ yydefault: case 53: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *With -//line sql.y:744 +//line sql.y:745 { yyLOCAL = yyDollar[1].withUnion() } yyVAL.union = yyLOCAL case 54: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:750 +//line sql.y:751 { yySLICE := (*[]*CommonTableExpr)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].cteUnion()) @@ -9247,7 +9321,7 @@ yydefault: case 55: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*CommonTableExpr -//line sql.y:754 +//line sql.y:755 { yyLOCAL = []*CommonTableExpr{yyDollar[1].cteUnion()} } @@ -9255,7 +9329,7 @@ yydefault: case 56: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *CommonTableExpr -//line sql.y:760 +//line sql.y:761 { yyLOCAL = &CommonTableExpr{ID: yyDollar[1].identifierCS, Columns: yyDollar[2].columnsUnion(), Subquery: yyDollar[4].subqueryUnion()} } @@ -9263,7 +9337,7 @@ yydefault: case 57: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:766 +//line sql.y:767 { yyLOCAL = yyDollar[2].selStmtUnion() } @@ -9271,7 +9345,7 @@ yydefault: case 58: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:770 +//line sql.y:771 { yyLOCAL = yyDollar[2].selStmtUnion() } @@ -9279,7 +9353,7 @@ yydefault: case 59: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:774 +//line sql.y:775 { setLockInSelect(yyDollar[2].selStmtUnion(), yyDollar[3].lockUnion()) yyLOCAL = yyDollar[2].selStmtUnion() @@ -9288,7 +9362,7 @@ yydefault: case 60: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:797 +//line sql.y:798 { yyDollar[1].selStmtUnion().SetOrderBy(yyDollar[2].orderByUnion()) yyDollar[1].selStmtUnion().SetLimit(yyDollar[3].limitUnion()) @@ -9298,7 +9372,7 @@ yydefault: case 61: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:803 +//line sql.y:804 { yyDollar[1].selStmtUnion().SetLimit(yyDollar[2].limitUnion()) yyLOCAL = yyDollar[1].selStmtUnion() @@ -9307,7 +9381,7 @@ yydefault: case 62: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:808 +//line sql.y:809 { yyDollar[1].selStmtUnion().SetOrderBy(yyDollar[2].orderByUnion()) yyDollar[1].selStmtUnion().SetLimit(yyDollar[3].limitUnion()) @@ -9317,7 +9391,7 @@ yydefault: case 63: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:814 +//line sql.y:815 { yyDollar[2].selStmtUnion().SetWith(yyDollar[1].withUnion()) yyDollar[2].selStmtUnion().SetOrderBy(yyDollar[3].orderByUnion()) @@ -9328,7 +9402,7 @@ yydefault: case 64: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:821 +//line sql.y:822 { yyDollar[2].selStmtUnion().SetWith(yyDollar[1].withUnion()) yyDollar[2].selStmtUnion().SetLimit(yyDollar[3].limitUnion()) @@ -9338,7 +9412,7 @@ yydefault: case 65: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:827 +//line sql.y:828 { yyDollar[2].selStmtUnion().SetWith(yyDollar[1].withUnion()) yyDollar[2].selStmtUnion().SetOrderBy(yyDollar[3].orderByUnion()) @@ -9348,14 +9422,14 @@ yydefault: yyVAL.union = yyLOCAL case 66: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:834 +//line sql.y:835 { yyDollar[2].selStmtUnion().SetWith(yyDollar[1].withUnion()) } case 67: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:838 +//line sql.y:839 { yyLOCAL = NewSelect(Comments(yyDollar[2].strs), SelectExprs{&Nextval{Expr: yyDollar[5].exprUnion()}}, []string{yyDollar[3].str} /*options*/, nil, TableExprs{&AliasedTableExpr{Expr: yyDollar[7].tableName}}, nil /*where*/, nil /*groupBy*/, nil /*having*/, nil) } @@ -9363,7 +9437,7 @@ yydefault: case 68: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:844 +//line sql.y:845 { yyLOCAL = yyDollar[1].selStmtUnion() } @@ -9371,7 +9445,7 @@ yydefault: case 69: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:848 +//line sql.y:849 { yyLOCAL = &Union{Left: yyDollar[1].selStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].selStmtUnion()} } @@ -9379,7 +9453,7 @@ yydefault: case 70: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:852 +//line sql.y:853 { yyLOCAL = &Union{Left: yyDollar[1].selStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].selStmtUnion()} } @@ -9387,7 +9461,7 @@ yydefault: case 71: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:856 +//line sql.y:857 { yyLOCAL = &Union{Left: yyDollar[1].selStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].selStmtUnion()} } @@ -9395,7 +9469,7 @@ yydefault: case 72: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:860 +//line sql.y:861 { yyLOCAL = &Union{Left: yyDollar[1].selStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].selStmtUnion()} } @@ -9403,7 +9477,7 @@ yydefault: case 73: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:866 +//line sql.y:867 { yyLOCAL = yyDollar[1].selStmtUnion() } @@ -9411,7 +9485,7 @@ yydefault: case 74: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:870 +//line sql.y:871 { setLockInSelect(yyDollar[1].selStmtUnion(), yyDollar[2].lockUnion()) yyLOCAL = yyDollar[1].selStmtUnion() @@ -9420,7 +9494,7 @@ yydefault: case 75: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:875 +//line sql.y:876 { yyLOCAL = yyDollar[1].selStmtUnion() } @@ -9428,7 +9502,7 @@ yydefault: case 76: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:879 +//line sql.y:880 { yyLOCAL = yyDollar[1].selStmtUnion() } @@ -9436,7 +9510,7 @@ yydefault: case 77: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:885 +//line sql.y:886 { yyLOCAL = yyDollar[2].selStmtUnion() } @@ -9444,7 +9518,7 @@ yydefault: case 78: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:889 +//line sql.y:890 { yyDollar[1].selStmtUnion().SetInto(yyDollar[2].selectIntoUnion()) yyLOCAL = yyDollar[1].selStmtUnion() @@ -9453,7 +9527,7 @@ yydefault: case 79: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:894 +//line sql.y:895 { yyDollar[1].selStmtUnion().SetInto(yyDollar[2].selectIntoUnion()) yyDollar[1].selStmtUnion().SetLock(yyDollar[3].lockUnion()) @@ -9463,7 +9537,7 @@ yydefault: case 80: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:900 +//line sql.y:901 { yyDollar[1].selStmtUnion().SetInto(yyDollar[3].selectIntoUnion()) yyDollar[1].selStmtUnion().SetLock(yyDollar[2].lockUnion()) @@ -9473,7 +9547,7 @@ yydefault: case 81: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:906 +//line sql.y:907 { yyDollar[1].selStmtUnion().SetInto(yyDollar[2].selectIntoUnion()) yyLOCAL = yyDollar[1].selStmtUnion() @@ -9482,7 +9556,7 @@ yydefault: case 82: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:913 +//line sql.y:914 { yyLOCAL = &Stream{Comments: Comments(yyDollar[2].strs).Parsed(), SelectExpr: yyDollar[3].selectExprUnion(), Table: yyDollar[5].tableName} } @@ -9490,7 +9564,7 @@ yydefault: case 83: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:919 +//line sql.y:920 { yyLOCAL = &VStream{Comments: Comments(yyDollar[2].strs).Parsed(), SelectExpr: yyDollar[3].selectExprUnion(), Table: yyDollar[5].tableName, Where: NewWhere(WhereClause, yyDollar[6].exprUnion()), Limit: yyDollar[7].limitUnion()} } @@ -9498,7 +9572,7 @@ yydefault: case 84: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:927 +//line sql.y:928 { yyLOCAL = NewSelect(Comments(yyDollar[2].strs), yyDollar[4].selectExprsUnion() /*SelectExprs*/, yyDollar[3].strs /*options*/, yyDollar[5].selectIntoUnion() /*into*/, yyDollar[6].tableExprsUnion() /*from*/, NewWhere(WhereClause, yyDollar[7].exprUnion()), GroupBy(yyDollar[8].exprsUnion()), NewWhere(HavingClause, yyDollar[9].exprUnion()), yyDollar[10].namedWindowsUnion()) } @@ -9506,7 +9580,7 @@ yydefault: case 85: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:931 +//line sql.y:932 { yyLOCAL = NewSelect(Comments(yyDollar[2].strs), yyDollar[4].selectExprsUnion() /*SelectExprs*/, yyDollar[3].strs /*options*/, nil, yyDollar[5].tableExprsUnion() /*from*/, NewWhere(WhereClause, yyDollar[6].exprUnion()), GroupBy(yyDollar[7].exprsUnion()), NewWhere(HavingClause, yyDollar[8].exprUnion()), yyDollar[9].namedWindowsUnion()) } @@ -9514,7 +9588,7 @@ yydefault: case 86: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:937 +//line sql.y:938 { // insert_data returns a *Insert pre-filled with Columns & Values ins := yyDollar[6].insUnion() @@ -9530,7 +9604,7 @@ yydefault: case 87: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:949 +//line sql.y:950 { cols := make(Columns, 0, len(yyDollar[7].updateExprsUnion())) vals := make(ValTuple, 0, len(yyDollar[8].updateExprsUnion())) @@ -9544,7 +9618,7 @@ yydefault: case 88: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL InsertAction -//line sql.y:961 +//line sql.y:962 { yyLOCAL = InsertAct } @@ -9552,7 +9626,7 @@ yydefault: case 89: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL InsertAction -//line sql.y:965 +//line sql.y:966 { yyLOCAL = ReplaceAct } @@ -9560,7 +9634,7 @@ yydefault: case 90: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Statement -//line sql.y:971 +//line sql.y:972 { yyLOCAL = &Update{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), TableExprs: yyDollar[5].tableExprsUnion(), Exprs: yyDollar[7].updateExprsUnion(), Where: NewWhere(WhereClause, yyDollar[8].exprUnion()), OrderBy: yyDollar[9].orderByUnion(), Limit: yyDollar[10].limitUnion()} } @@ -9568,7 +9642,7 @@ yydefault: case 91: yyDollar = yyS[yypt-11 : yypt+1] var yyLOCAL Statement -//line sql.y:977 +//line sql.y:978 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), TableExprs: TableExprs{&AliasedTableExpr{Expr: yyDollar[6].tableName, As: yyDollar[7].identifierCS}}, Partitions: yyDollar[8].partitionsUnion(), Where: NewWhere(WhereClause, yyDollar[9].exprUnion()), OrderBy: yyDollar[10].orderByUnion(), Limit: yyDollar[11].limitUnion()} } @@ -9576,7 +9650,7 @@ yydefault: case 92: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Statement -//line sql.y:981 +//line sql.y:982 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), Targets: yyDollar[6].tableNamesUnion(), TableExprs: yyDollar[8].tableExprsUnion(), Where: NewWhere(WhereClause, yyDollar[9].exprUnion())} } @@ -9584,7 +9658,7 @@ yydefault: case 93: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:985 +//line sql.y:986 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), Targets: yyDollar[5].tableNamesUnion(), TableExprs: yyDollar[7].tableExprsUnion(), Where: NewWhere(WhereClause, yyDollar[8].exprUnion())} } @@ -9592,32 +9666,32 @@ yydefault: case 94: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:989 +//line sql.y:990 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), Targets: yyDollar[5].tableNamesUnion(), TableExprs: yyDollar[7].tableExprsUnion(), Where: NewWhere(WhereClause, yyDollar[8].exprUnion())} } yyVAL.union = yyLOCAL case 95: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:994 +//line sql.y:995 { } case 96: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:995 +//line sql.y:996 { } case 97: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableNames -//line sql.y:999 +//line sql.y:1000 { yyLOCAL = TableNames{yyDollar[1].tableName.ToViewName()} } yyVAL.union = yyLOCAL case 98: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1003 +//line sql.y:1004 { yySLICE := (*TableNames)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableName.ToViewName()) @@ -9625,14 +9699,14 @@ yydefault: case 99: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableNames -//line sql.y:1009 +//line sql.y:1010 { yyLOCAL = TableNames{yyDollar[1].tableName} } yyVAL.union = yyLOCAL case 100: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1013 +//line sql.y:1014 { yySLICE := (*TableNames)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableName) @@ -9640,14 +9714,14 @@ yydefault: case 101: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableNames -//line sql.y:1019 +//line sql.y:1020 { yyLOCAL = TableNames{yyDollar[1].tableName} } yyVAL.union = yyLOCAL case 102: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1023 +//line sql.y:1024 { yySLICE := (*TableNames)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableName) @@ -9655,7 +9729,7 @@ yydefault: case 103: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Partitions -//line sql.y:1028 +//line sql.y:1029 { yyLOCAL = nil } @@ -9663,7 +9737,7 @@ yydefault: case 104: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Partitions -//line sql.y:1032 +//line sql.y:1033 { yyLOCAL = yyDollar[3].partitionsUnion() } @@ -9671,7 +9745,7 @@ yydefault: case 105: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:1038 +//line sql.y:1039 { yyLOCAL = NewSetStatement(Comments(yyDollar[2].strs).Parsed(), yyDollar[3].setExprsUnion()) } @@ -9679,14 +9753,14 @@ yydefault: case 106: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SetExprs -//line sql.y:1044 +//line sql.y:1045 { yyLOCAL = SetExprs{yyDollar[1].setExprUnion()} } yyVAL.union = yyLOCAL case 107: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1048 +//line sql.y:1049 { yySLICE := (*SetExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].setExprUnion()) @@ -9694,7 +9768,7 @@ yydefault: case 108: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1054 +//line sql.y:1055 { yyLOCAL = &SetExpr{Var: yyDollar[1].variableUnion(), Expr: NewStrLiteral("on")} } @@ -9702,7 +9776,7 @@ yydefault: case 109: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1058 +//line sql.y:1059 { yyLOCAL = &SetExpr{Var: yyDollar[1].variableUnion(), Expr: NewStrLiteral("off")} } @@ -9710,7 +9784,7 @@ yydefault: case 110: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1062 +//line sql.y:1063 { yyLOCAL = &SetExpr{Var: yyDollar[1].variableUnion(), Expr: yyDollar[3].exprUnion()} } @@ -9718,7 +9792,7 @@ yydefault: case 111: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1066 +//line sql.y:1067 { yyLOCAL = &SetExpr{Var: NewSetVariable(string(yyDollar[1].str), SessionScope), Expr: yyDollar[2].exprUnion()} } @@ -9726,7 +9800,7 @@ yydefault: case 112: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:1072 +//line sql.y:1073 { yyLOCAL = NewSetVariable(string(yyDollar[1].str), SessionScope) } @@ -9734,7 +9808,7 @@ yydefault: case 113: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:1076 +//line sql.y:1077 { yyLOCAL = yyDollar[1].variableUnion() } @@ -9742,7 +9816,7 @@ yydefault: case 114: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Variable -//line sql.y:1080 +//line sql.y:1081 { yyLOCAL = NewSetVariable(string(yyDollar[2].str), yyDollar[1].scopeUnion()) } @@ -9750,7 +9824,7 @@ yydefault: case 115: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:1086 +//line sql.y:1087 { yyLOCAL = NewSetStatement(Comments(yyDollar[2].strs).Parsed(), UpdateSetExprsScope(yyDollar[5].setExprsUnion(), yyDollar[3].scopeUnion())) } @@ -9758,7 +9832,7 @@ yydefault: case 116: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:1090 +//line sql.y:1091 { yyLOCAL = NewSetStatement(Comments(yyDollar[2].strs).Parsed(), yyDollar[4].setExprsUnion()) } @@ -9766,14 +9840,14 @@ yydefault: case 117: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SetExprs -//line sql.y:1096 +//line sql.y:1097 { yyLOCAL = SetExprs{yyDollar[1].setExprUnion()} } yyVAL.union = yyLOCAL case 118: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1100 +//line sql.y:1101 { yySLICE := (*SetExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].setExprUnion()) @@ -9781,7 +9855,7 @@ yydefault: case 119: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1106 +//line sql.y:1107 { yyLOCAL = &SetExpr{Var: NewSetVariable(TransactionIsolationStr, NextTxScope), Expr: NewStrLiteral(yyDollar[3].str)} } @@ -9789,7 +9863,7 @@ yydefault: case 120: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1110 +//line sql.y:1111 { yyLOCAL = &SetExpr{Var: NewSetVariable(TransactionReadOnlyStr, NextTxScope), Expr: NewStrLiteral("off")} } @@ -9797,39 +9871,39 @@ yydefault: case 121: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1114 +//line sql.y:1115 { yyLOCAL = &SetExpr{Var: NewSetVariable(TransactionReadOnlyStr, NextTxScope), Expr: NewStrLiteral("on")} } yyVAL.union = yyLOCAL case 122: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1120 +//line sql.y:1121 { yyVAL.str = RepeatableReadStr } case 123: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1124 +//line sql.y:1125 { yyVAL.str = ReadCommittedStr } case 124: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1128 +//line sql.y:1129 { yyVAL.str = ReadUncommittedStr } case 125: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1132 +//line sql.y:1133 { yyVAL.str = SerializableStr } case 126: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Scope -//line sql.y:1138 +//line sql.y:1139 { yyLOCAL = SessionScope } @@ -9837,7 +9911,7 @@ yydefault: case 127: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Scope -//line sql.y:1142 +//line sql.y:1143 { yyLOCAL = SessionScope } @@ -9845,7 +9919,7 @@ yydefault: case 128: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Scope -//line sql.y:1146 +//line sql.y:1147 { yyLOCAL = GlobalScope } @@ -9853,7 +9927,7 @@ yydefault: case 129: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:1152 +//line sql.y:1153 { yyDollar[1].createTableUnion().TableSpec = yyDollar[2].tableSpecUnion() yyDollar[1].createTableUnion().FullyParsed = true @@ -9863,7 +9937,7 @@ yydefault: case 130: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:1158 +//line sql.y:1159 { // Create table [name] like [name] yyDollar[1].createTableUnion().OptLike = yyDollar[2].optLikeUnion() @@ -9874,7 +9948,7 @@ yydefault: case 131: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:1165 +//line sql.y:1166 { yyDollar[1].createTableUnion().Select = yyDollar[2].selStmtUnion() yyLOCAL = yyDollar[1].createTableUnion() @@ -9883,7 +9957,7 @@ yydefault: case 132: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:1170 +//line sql.y:1171 { yyDollar[1].createTableUnion().Select = yyDollar[3].selStmtUnion() yyLOCAL = yyDollar[1].createTableUnion() @@ -9892,7 +9966,7 @@ yydefault: case 133: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:1175 +//line sql.y:1176 { indexDef := yyDollar[1].alterTableUnion().AlterOptions[0].(*AddIndexDefinition).IndexDefinition indexDef.Columns = yyDollar[3].indexColumnsUnion() @@ -9905,7 +9979,7 @@ yydefault: case 134: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Statement -//line sql.y:1184 +//line sql.y:1185 { yyLOCAL = &CreateView{ViewName: yyDollar[8].tableName.ToViewName(), Comments: Comments(yyDollar[2].strs).Parsed(), IsReplace: yyDollar[3].booleanUnion(), Algorithm: yyDollar[4].str, Definer: yyDollar[5].definerUnion(), Security: yyDollar[6].str, Columns: yyDollar[9].columnsUnion(), Select: yyDollar[11].selStmtUnion(), CheckOption: yyDollar[12].str} } @@ -9913,7 +9987,7 @@ yydefault: case 135: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:1188 +//line sql.y:1189 { yyDollar[1].createDatabaseUnion().FullyParsed = true yyDollar[1].createDatabaseUnion().CreateOptions = yyDollar[2].databaseOptionsUnion() @@ -9923,7 +9997,7 @@ yydefault: case 136: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:1195 +//line sql.y:1196 { yyLOCAL = false } @@ -9931,33 +10005,33 @@ yydefault: case 137: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:1199 +//line sql.y:1200 { yyLOCAL = true } yyVAL.union = yyLOCAL case 138: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1204 +//line sql.y:1205 { yyVAL.identifierCI = NewIdentifierCI("") } case 139: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1208 +//line sql.y:1209 { yyVAL.identifierCI = yyDollar[2].identifierCI } case 140: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1214 +//line sql.y:1215 { yyVAL.identifierCI = yyDollar[1].identifierCI } case 141: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []VindexParam -//line sql.y:1219 +//line sql.y:1220 { var v []VindexParam yyLOCAL = v @@ -9966,7 +10040,7 @@ yydefault: case 142: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []VindexParam -//line sql.y:1224 +//line sql.y:1225 { yyLOCAL = yyDollar[2].vindexParamsUnion() } @@ -9974,7 +10048,7 @@ yydefault: case 143: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []VindexParam -//line sql.y:1230 +//line sql.y:1231 { yyLOCAL = make([]VindexParam, 0, 4) yyLOCAL = append(yyLOCAL, yyDollar[1].vindexParam) @@ -9982,21 +10056,21 @@ yydefault: yyVAL.union = yyLOCAL case 144: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1235 +//line sql.y:1236 { yySLICE := (*[]VindexParam)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].vindexParam) } case 145: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1241 +//line sql.y:1242 { yyVAL.vindexParam = VindexParam{Key: yyDollar[1].identifierCI, Val: yyDollar[3].str} } case 146: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*JSONObjectParam -//line sql.y:1246 +//line sql.y:1247 { yyLOCAL = nil } @@ -10004,7 +10078,7 @@ yydefault: case 147: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*JSONObjectParam -//line sql.y:1250 +//line sql.y:1251 { yyLOCAL = yyDollar[1].jsonObjectParamsUnion() } @@ -10012,28 +10086,28 @@ yydefault: case 148: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*JSONObjectParam -//line sql.y:1256 +//line sql.y:1257 { yyLOCAL = []*JSONObjectParam{yyDollar[1].jsonObjectParam} } yyVAL.union = yyLOCAL case 149: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1260 +//line sql.y:1261 { yySLICE := (*[]*JSONObjectParam)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].jsonObjectParam) } case 150: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1266 +//line sql.y:1267 { yyVAL.jsonObjectParam = &JSONObjectParam{Key: yyDollar[1].exprUnion(), Value: yyDollar[3].exprUnion()} } case 151: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *CreateTable -//line sql.y:1272 +//line sql.y:1273 { yyLOCAL = &CreateTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[6].tableName, IfNotExists: yyDollar[5].booleanUnion(), Temp: yyDollar[3].booleanUnion()} setDDL(yylex, yyLOCAL) @@ -10042,7 +10116,7 @@ yydefault: case 152: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1279 +//line sql.y:1280 { yyLOCAL = &AlterTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[4].tableName} setDDL(yylex, yyLOCAL) @@ -10051,7 +10125,7 @@ yydefault: case 153: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1286 +//line sql.y:1287 { yyLOCAL = &AlterTable{Table: yyDollar[7].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[4].identifierCI, Type: string(yyDollar[3].str)}, Options: yyDollar[5].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) @@ -10060,7 +10134,7 @@ yydefault: case 154: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1291 +//line sql.y:1292 { yyLOCAL = &AlterTable{Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].identifierCI, Type: string(yyDollar[3].str) + " " + string(yyDollar[4].str), Fulltext: true}, Options: yyDollar[6].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) @@ -10069,7 +10143,7 @@ yydefault: case 155: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1296 +//line sql.y:1297 { yyLOCAL = &AlterTable{Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].identifierCI, Type: string(yyDollar[3].str) + " " + string(yyDollar[4].str), Spatial: true}, Options: yyDollar[6].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) @@ -10078,7 +10152,7 @@ yydefault: case 156: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1301 +//line sql.y:1302 { yyLOCAL = &AlterTable{Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].identifierCI, Type: string(yyDollar[3].str) + " " + string(yyDollar[4].str), Unique: true}, Options: yyDollar[6].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) @@ -10087,7 +10161,7 @@ yydefault: case 157: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *CreateDatabase -//line sql.y:1308 +//line sql.y:1309 { yyLOCAL = &CreateDatabase{Comments: Comments(yyDollar[4].strs).Parsed(), DBName: yyDollar[6].identifierCS, IfNotExists: yyDollar[5].booleanUnion()} setDDL(yylex, yyLOCAL) @@ -10096,7 +10170,7 @@ yydefault: case 158: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *AlterDatabase -//line sql.y:1315 +//line sql.y:1316 { yyLOCAL = &AlterDatabase{} setDDL(yylex, yyLOCAL) @@ -10105,7 +10179,7 @@ yydefault: case 161: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *TableSpec -//line sql.y:1326 +//line sql.y:1327 { yyLOCAL = yyDollar[2].tableSpecUnion() yyLOCAL.Options = yyDollar[4].tableOptionsUnion() @@ -10115,7 +10189,7 @@ yydefault: case 162: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1333 +//line sql.y:1334 { yyLOCAL = nil } @@ -10123,7 +10197,7 @@ yydefault: case 163: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1337 +//line sql.y:1338 { yyLOCAL = yyDollar[1].databaseOptionsUnion() } @@ -10131,7 +10205,7 @@ yydefault: case 164: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1343 +//line sql.y:1344 { yyLOCAL = []DatabaseOption{yyDollar[1].databaseOption} } @@ -10139,7 +10213,7 @@ yydefault: case 165: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1347 +//line sql.y:1348 { yyLOCAL = []DatabaseOption{yyDollar[1].databaseOption} } @@ -10147,28 +10221,28 @@ yydefault: case 166: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1351 +//line sql.y:1352 { yyLOCAL = []DatabaseOption{yyDollar[1].databaseOption} } yyVAL.union = yyLOCAL case 167: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1355 +//line sql.y:1356 { yySLICE := (*[]DatabaseOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].databaseOption) } case 168: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1359 +//line sql.y:1360 { yySLICE := (*[]DatabaseOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].databaseOption) } case 169: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1363 +//line sql.y:1364 { yySLICE := (*[]DatabaseOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].databaseOption) @@ -10176,7 +10250,7 @@ yydefault: case 170: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:1369 +//line sql.y:1370 { yyLOCAL = false } @@ -10184,51 +10258,51 @@ yydefault: case 171: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:1373 +//line sql.y:1374 { yyLOCAL = true } yyVAL.union = yyLOCAL case 172: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1379 +//line sql.y:1380 { yyVAL.databaseOption = DatabaseOption{Type: CharacterSetType, Value: string(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } case 173: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1383 +//line sql.y:1384 { yyVAL.databaseOption = DatabaseOption{Type: CharacterSetType, Value: encodeSQLString(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } case 174: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1389 +//line sql.y:1390 { yyVAL.databaseOption = DatabaseOption{Type: CollateType, Value: string(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } case 175: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1393 +//line sql.y:1394 { yyVAL.databaseOption = DatabaseOption{Type: CollateType, Value: encodeSQLString(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } case 176: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1399 +//line sql.y:1400 { yyVAL.databaseOption = DatabaseOption{Type: EncryptionType, Value: string(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } case 177: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1403 +//line sql.y:1404 { yyVAL.databaseOption = DatabaseOption{Type: EncryptionType, Value: encodeSQLString(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } case 178: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *OptLike -//line sql.y:1409 +//line sql.y:1410 { yyLOCAL = &OptLike{LikeTable: yyDollar[2].tableName} } @@ -10236,7 +10310,7 @@ yydefault: case 179: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *OptLike -//line sql.y:1413 +//line sql.y:1414 { yyLOCAL = &OptLike{LikeTable: yyDollar[3].tableName} } @@ -10244,14 +10318,14 @@ yydefault: case 180: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColumnDefinition -//line sql.y:1419 +//line sql.y:1420 { yyLOCAL = []*ColumnDefinition{yyDollar[1].columnDefinitionUnion()} } yyVAL.union = yyLOCAL case 181: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1423 +//line sql.y:1424 { yySLICE := (*[]*ColumnDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].columnDefinitionUnion()) @@ -10259,7 +10333,7 @@ yydefault: case 182: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *TableSpec -//line sql.y:1429 +//line sql.y:1430 { yyLOCAL = &TableSpec{} yyLOCAL.AddColumn(yyDollar[1].columnDefinitionUnion()) @@ -10268,7 +10342,7 @@ yydefault: case 183: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *TableSpec -//line sql.y:1434 +//line sql.y:1435 { yyLOCAL = &TableSpec{} yyLOCAL.AddConstraint(yyDollar[1].constraintDefinitionUnion()) @@ -10276,39 +10350,39 @@ yydefault: yyVAL.union = yyLOCAL case 184: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1439 +//line sql.y:1440 { yyVAL.tableSpecUnion().AddColumn(yyDollar[3].columnDefinitionUnion()) } case 185: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1443 +//line sql.y:1444 { yyVAL.tableSpecUnion().AddColumn(yyDollar[3].columnDefinitionUnion()) yyVAL.tableSpecUnion().AddConstraint(yyDollar[4].constraintDefinitionUnion()) } case 186: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1448 +//line sql.y:1449 { yyVAL.tableSpecUnion().AddIndex(yyDollar[3].indexDefinitionUnion()) } case 187: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1452 +//line sql.y:1453 { yyVAL.tableSpecUnion().AddConstraint(yyDollar[3].constraintDefinitionUnion()) } case 188: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1456 +//line sql.y:1457 { yyVAL.tableSpecUnion().AddConstraint(yyDollar[3].constraintDefinitionUnion()) } case 189: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ColumnDefinition -//line sql.y:1466 +//line sql.y:1467 { yyDollar[2].columnType.Options = yyDollar[4].columnTypeOptionsUnion() if yyDollar[2].columnType.Options.Collate == "" { @@ -10321,7 +10395,7 @@ yydefault: case 190: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL *ColumnDefinition -//line sql.y:1475 +//line sql.y:1476 { yyDollar[2].columnType.Options = yyDollar[9].columnTypeOptionsUnion() yyDollar[2].columnType.Options.As = yyDollar[7].exprUnion() @@ -10332,20 +10406,20 @@ yydefault: yyVAL.union = yyLOCAL case 191: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1484 +//line sql.y:1485 { yyVAL.str = "" } case 192: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1488 +//line sql.y:1489 { yyVAL.str = "" } case 193: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1497 +//line sql.y:1498 { yyLOCAL = &ColumnTypeOptions{Null: nil, Default: nil, OnUpdate: nil, Autoincrement: false, KeyOpt: ColKeyNone, Comment: nil, As: nil, Invisible: nil, Format: UnspecifiedFormat, EngineAttribute: nil, SecondaryEngineAttribute: nil} } @@ -10353,7 +10427,7 @@ yydefault: case 194: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1501 +//line sql.y:1502 { val := true yyDollar[1].columnTypeOptionsUnion().Null = &val @@ -10363,7 +10437,7 @@ yydefault: case 195: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1507 +//line sql.y:1508 { val := false yyDollar[1].columnTypeOptionsUnion().Null = &val @@ -10373,7 +10447,7 @@ yydefault: case 196: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1513 +//line sql.y:1514 { yyDollar[1].columnTypeOptionsUnion().Default = yyDollar[4].exprUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -10382,7 +10456,7 @@ yydefault: case 197: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1518 +//line sql.y:1519 { yyDollar[1].columnTypeOptionsUnion().Default = yyDollar[3].exprUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -10391,7 +10465,7 @@ yydefault: case 198: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1523 +//line sql.y:1524 { yyDollar[1].columnTypeOptionsUnion().OnUpdate = yyDollar[4].exprUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -10400,7 +10474,7 @@ yydefault: case 199: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1528 +//line sql.y:1529 { yyDollar[1].columnTypeOptionsUnion().Autoincrement = true yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -10409,7 +10483,7 @@ yydefault: case 200: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1533 +//line sql.y:1534 { yyDollar[1].columnTypeOptionsUnion().Comment = NewStrLiteral(yyDollar[3].str) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -10418,7 +10492,7 @@ yydefault: case 201: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1538 +//line sql.y:1539 { yyDollar[1].columnTypeOptionsUnion().KeyOpt = yyDollar[2].colKeyOptUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -10426,14 +10500,14 @@ yydefault: yyVAL.union = yyLOCAL case 202: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1543 +//line sql.y:1544 { yyDollar[1].columnTypeOptionsUnion().Collate = encodeSQLString(yyDollar[3].str) } case 203: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1547 +//line sql.y:1548 { yyDollar[1].columnTypeOptionsUnion().Collate = string(yyDollar[3].identifierCI.String()) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -10441,14 +10515,14 @@ yydefault: yyVAL.union = yyLOCAL case 204: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1552 +//line sql.y:1553 { yyDollar[1].columnTypeOptionsUnion().Format = yyDollar[3].columnFormatUnion() } case 205: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1556 +//line sql.y:1557 { yyDollar[1].columnTypeOptionsUnion().SRID = NewIntLiteral(yyDollar[3].str) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -10457,7 +10531,7 @@ yydefault: case 206: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1561 +//line sql.y:1562 { val := false yyDollar[1].columnTypeOptionsUnion().Invisible = &val @@ -10467,7 +10541,7 @@ yydefault: case 207: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1567 +//line sql.y:1568 { val := true yyDollar[1].columnTypeOptionsUnion().Invisible = &val @@ -10476,20 +10550,20 @@ yydefault: yyVAL.union = yyLOCAL case 208: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1573 +//line sql.y:1574 { yyDollar[1].columnTypeOptionsUnion().EngineAttribute = NewStrLiteral(yyDollar[4].str) } case 209: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1577 +//line sql.y:1578 { yyDollar[1].columnTypeOptionsUnion().SecondaryEngineAttribute = NewStrLiteral(yyDollar[4].str) } case 210: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnFormat -//line sql.y:1583 +//line sql.y:1584 { yyLOCAL = FixedFormat } @@ -10497,7 +10571,7 @@ yydefault: case 211: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnFormat -//line sql.y:1587 +//line sql.y:1588 { yyLOCAL = DynamicFormat } @@ -10505,7 +10579,7 @@ yydefault: case 212: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnFormat -//line sql.y:1591 +//line sql.y:1592 { yyLOCAL = DefaultFormat } @@ -10513,7 +10587,7 @@ yydefault: case 213: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnStorage -//line sql.y:1597 +//line sql.y:1598 { yyLOCAL = VirtualStorage } @@ -10521,7 +10595,7 @@ yydefault: case 214: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnStorage -//line sql.y:1601 +//line sql.y:1602 { yyLOCAL = StoredStorage } @@ -10529,7 +10603,7 @@ yydefault: case 215: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1606 +//line sql.y:1607 { yyLOCAL = &ColumnTypeOptions{} } @@ -10537,7 +10611,7 @@ yydefault: case 216: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1610 +//line sql.y:1611 { yyDollar[1].columnTypeOptionsUnion().Storage = yyDollar[2].columnStorageUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -10546,7 +10620,7 @@ yydefault: case 217: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1615 +//line sql.y:1616 { val := true yyDollar[1].columnTypeOptionsUnion().Null = &val @@ -10556,7 +10630,7 @@ yydefault: case 218: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1621 +//line sql.y:1622 { val := false yyDollar[1].columnTypeOptionsUnion().Null = &val @@ -10566,7 +10640,7 @@ yydefault: case 219: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1627 +//line sql.y:1628 { yyDollar[1].columnTypeOptionsUnion().Comment = NewStrLiteral(yyDollar[3].str) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -10575,7 +10649,7 @@ yydefault: case 220: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1632 +//line sql.y:1633 { yyDollar[1].columnTypeOptionsUnion().KeyOpt = yyDollar[2].colKeyOptUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -10584,7 +10658,7 @@ yydefault: case 221: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1637 +//line sql.y:1638 { val := false yyDollar[1].columnTypeOptionsUnion().Invisible = &val @@ -10594,7 +10668,7 @@ yydefault: case 222: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1643 +//line sql.y:1644 { val := true yyDollar[1].columnTypeOptionsUnion().Invisible = &val @@ -10604,7 +10678,7 @@ yydefault: case 223: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1651 +//line sql.y:1652 { yyLOCAL = yyDollar[1].exprUnion() } @@ -10612,7 +10686,7 @@ yydefault: case 225: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1658 +//line sql.y:1659 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("current_timestamp"), Fsp: yyDollar[2].exprUnion()} } @@ -10620,7 +10694,7 @@ yydefault: case 226: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1662 +//line sql.y:1663 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("localtime"), Fsp: yyDollar[2].exprUnion()} } @@ -10628,7 +10702,7 @@ yydefault: case 227: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1666 +//line sql.y:1667 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("localtimestamp"), Fsp: yyDollar[2].exprUnion()} } @@ -10636,7 +10710,7 @@ yydefault: case 228: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1670 +//line sql.y:1671 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("utc_timestamp"), Fsp: yyDollar[2].exprUnion()} } @@ -10644,7 +10718,7 @@ yydefault: case 229: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1674 +//line sql.y:1675 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("now"), Fsp: yyDollar[2].exprUnion()} } @@ -10652,7 +10726,7 @@ yydefault: case 232: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1684 +//line sql.y:1685 { yyLOCAL = &NullVal{} } @@ -10660,7 +10734,7 @@ yydefault: case 234: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1691 +//line sql.y:1692 { yyLOCAL = yyDollar[2].exprUnion() } @@ -10668,7 +10742,7 @@ yydefault: case 235: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1695 +//line sql.y:1696 { yyLOCAL = &UnaryExpr{Operator: UMinusOp, Expr: yyDollar[2].exprUnion()} } @@ -10676,7 +10750,7 @@ yydefault: case 236: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1701 +//line sql.y:1702 { yyLOCAL = yyDollar[1].exprUnion() } @@ -10684,7 +10758,7 @@ yydefault: case 237: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1705 +//line sql.y:1706 { yyLOCAL = yyDollar[1].exprUnion() } @@ -10692,7 +10766,7 @@ yydefault: case 238: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1709 +//line sql.y:1710 { yyLOCAL = yyDollar[1].boolValUnion() } @@ -10700,7 +10774,7 @@ yydefault: case 239: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1713 +//line sql.y:1714 { yyLOCAL = NewHexLiteral(yyDollar[1].str) } @@ -10708,7 +10782,7 @@ yydefault: case 240: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1717 +//line sql.y:1718 { yyLOCAL = NewHexNumLiteral(yyDollar[1].str) } @@ -10716,7 +10790,7 @@ yydefault: case 241: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1721 +//line sql.y:1722 { yyLOCAL = NewBitLiteral(yyDollar[1].str[2:]) } @@ -10724,7 +10798,7 @@ yydefault: case 242: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1725 +//line sql.y:1726 { yyLOCAL = NewBitLiteral(yyDollar[1].str) } @@ -10732,7 +10806,7 @@ yydefault: case 243: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1729 +//line sql.y:1730 { yyLOCAL = NewArgument(yyDollar[1].str[1:]) bindVariable(yylex, yyDollar[1].str[1:]) @@ -10741,7 +10815,7 @@ yydefault: case 244: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1734 +//line sql.y:1735 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewBitLiteral(yyDollar[2].str)} } @@ -10749,7 +10823,7 @@ yydefault: case 245: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1738 +//line sql.y:1739 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewHexNumLiteral(yyDollar[2].str)} } @@ -10757,7 +10831,7 @@ yydefault: case 246: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1742 +//line sql.y:1743 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewBitLiteral(yyDollar[2].str[2:])} } @@ -10765,7 +10839,7 @@ yydefault: case 247: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1746 +//line sql.y:1747 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewHexLiteral(yyDollar[2].str)} } @@ -10773,7 +10847,7 @@ yydefault: case 248: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1750 +//line sql.y:1751 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: yyDollar[2].exprUnion()} } @@ -10781,7 +10855,7 @@ yydefault: case 249: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1754 +//line sql.y:1755 { bindVariable(yylex, yyDollar[2].str[1:]) yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewArgument(yyDollar[2].str[1:])} @@ -10790,7 +10864,7 @@ yydefault: case 250: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1759 +//line sql.y:1760 { yyLOCAL = NewDateLiteral(yyDollar[2].str) } @@ -10798,7 +10872,7 @@ yydefault: case 251: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1763 +//line sql.y:1764 { yyLOCAL = NewTimeLiteral(yyDollar[2].str) } @@ -10806,267 +10880,267 @@ yydefault: case 252: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1767 +//line sql.y:1768 { yyLOCAL = NewTimestampLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL case 253: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1773 +//line sql.y:1774 { yyVAL.str = Armscii8Str } case 254: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1777 +//line sql.y:1778 { yyVAL.str = ASCIIStr } case 255: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1781 +//line sql.y:1782 { yyVAL.str = Big5Str } case 256: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1785 +//line sql.y:1786 { yyVAL.str = UBinaryStr } case 257: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1789 +//line sql.y:1790 { yyVAL.str = Cp1250Str } case 258: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1793 +//line sql.y:1794 { yyVAL.str = Cp1251Str } case 259: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1797 +//line sql.y:1798 { yyVAL.str = Cp1256Str } case 260: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1801 +//line sql.y:1802 { yyVAL.str = Cp1257Str } case 261: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1805 +//line sql.y:1806 { yyVAL.str = Cp850Str } case 262: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1809 +//line sql.y:1810 { yyVAL.str = Cp852Str } case 263: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1813 +//line sql.y:1814 { yyVAL.str = Cp866Str } case 264: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1817 +//line sql.y:1818 { yyVAL.str = Cp932Str } case 265: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1821 +//line sql.y:1822 { yyVAL.str = Dec8Str } case 266: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1825 +//line sql.y:1826 { yyVAL.str = EucjpmsStr } case 267: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1829 +//line sql.y:1830 { yyVAL.str = EuckrStr } case 268: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1833 +//line sql.y:1834 { yyVAL.str = Gb18030Str } case 269: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1837 +//line sql.y:1838 { yyVAL.str = Gb2312Str } case 270: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1841 +//line sql.y:1842 { yyVAL.str = GbkStr } case 271: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1845 +//line sql.y:1846 { yyVAL.str = Geostd8Str } case 272: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1849 +//line sql.y:1850 { yyVAL.str = GreekStr } case 273: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1853 +//line sql.y:1854 { yyVAL.str = HebrewStr } case 274: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1857 +//line sql.y:1858 { yyVAL.str = Hp8Str } case 275: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1861 +//line sql.y:1862 { yyVAL.str = Keybcs2Str } case 276: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1865 +//line sql.y:1866 { yyVAL.str = Koi8rStr } case 277: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1869 +//line sql.y:1870 { yyVAL.str = Koi8uStr } case 278: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1873 +//line sql.y:1874 { yyVAL.str = Latin1Str } case 279: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1877 +//line sql.y:1878 { yyVAL.str = Latin2Str } case 280: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1881 +//line sql.y:1882 { yyVAL.str = Latin5Str } case 281: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1885 +//line sql.y:1886 { yyVAL.str = Latin7Str } case 282: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1889 +//line sql.y:1890 { yyVAL.str = MacceStr } case 283: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1893 +//line sql.y:1894 { yyVAL.str = MacromanStr } case 284: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1897 +//line sql.y:1898 { yyVAL.str = SjisStr } case 285: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1901 +//line sql.y:1902 { yyVAL.str = Swe7Str } case 286: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1905 +//line sql.y:1906 { yyVAL.str = Tis620Str } case 287: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1909 +//line sql.y:1910 { yyVAL.str = Ucs2Str } case 288: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1913 +//line sql.y:1914 { yyVAL.str = UjisStr } case 289: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1917 +//line sql.y:1918 { yyVAL.str = Utf16Str } case 290: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1921 +//line sql.y:1922 { yyVAL.str = Utf16leStr } case 291: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1925 +//line sql.y:1926 { yyVAL.str = Utf32Str } case 292: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1929 +//line sql.y:1930 { yyVAL.str = Utf8Str } case 293: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1933 +//line sql.y:1934 { yyVAL.str = Utf8mb4Str } case 294: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1937 +//line sql.y:1938 { yyVAL.str = Utf8Str } case 297: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1947 +//line sql.y:1948 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } @@ -11074,7 +11148,7 @@ yydefault: case 298: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1951 +//line sql.y:1952 { yyLOCAL = NewFloatLiteral(yyDollar[1].str) } @@ -11082,7 +11156,7 @@ yydefault: case 299: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1955 +//line sql.y:1956 { yyLOCAL = NewDecimalLiteral(yyDollar[1].str) } @@ -11090,7 +11164,7 @@ yydefault: case 300: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1961 +//line sql.y:1962 { yyLOCAL = NewStrLiteral(yyDollar[1].str) } @@ -11098,7 +11172,7 @@ yydefault: case 301: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1965 +//line sql.y:1966 { yyLOCAL = &UnaryExpr{Operator: NStringOp, Expr: NewStrLiteral(yyDollar[1].str)} } @@ -11106,7 +11180,7 @@ yydefault: case 302: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1969 +//line sql.y:1970 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewStrLiteral(yyDollar[2].str)} } @@ -11114,7 +11188,7 @@ yydefault: case 303: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1975 +//line sql.y:1976 { yyLOCAL = yyDollar[1].exprUnion() } @@ -11122,7 +11196,7 @@ yydefault: case 304: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1979 +//line sql.y:1980 { yyLOCAL = NewArgument(yyDollar[1].str[1:]) bindVariable(yylex, yyDollar[1].str[1:]) @@ -11131,7 +11205,7 @@ yydefault: case 305: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:1986 +//line sql.y:1987 { yyLOCAL = ColKeyPrimary } @@ -11139,7 +11213,7 @@ yydefault: case 306: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:1990 +//line sql.y:1991 { yyLOCAL = ColKeyUnique } @@ -11147,7 +11221,7 @@ yydefault: case 307: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:1994 +//line sql.y:1995 { yyLOCAL = ColKeyUniqueKey } @@ -11155,14 +11229,14 @@ yydefault: case 308: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:1998 +//line sql.y:1999 { yyLOCAL = ColKey } yyVAL.union = yyLOCAL case 309: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2004 +//line sql.y:2005 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Unsigned = yyDollar[2].booleanUnion() @@ -11170,74 +11244,74 @@ yydefault: } case 313: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2015 +//line sql.y:2016 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Length = yyDollar[2].literalUnion() } case 314: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2020 +//line sql.y:2021 { yyVAL.columnType = yyDollar[1].columnType } case 315: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2026 +//line sql.y:2027 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 316: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2030 +//line sql.y:2031 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 317: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2034 +//line sql.y:2035 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 318: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2038 +//line sql.y:2039 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 319: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2042 +//line sql.y:2043 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 320: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2046 +//line sql.y:2047 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 321: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2050 +//line sql.y:2051 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 322: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2054 +//line sql.y:2055 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 323: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2058 +//line sql.y:2059 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 324: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2064 +//line sql.y:2065 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -11245,7 +11319,7 @@ yydefault: } case 325: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2070 +//line sql.y:2071 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -11253,7 +11327,7 @@ yydefault: } case 326: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2076 +//line sql.y:2077 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -11261,7 +11335,7 @@ yydefault: } case 327: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2082 +//line sql.y:2083 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -11269,7 +11343,7 @@ yydefault: } case 328: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2088 +//line sql.y:2089 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -11277,7 +11351,7 @@ yydefault: } case 329: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2094 +//line sql.y:2095 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -11285,7 +11359,7 @@ yydefault: } case 330: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2100 +//line sql.y:2101 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -11293,43 +11367,43 @@ yydefault: } case 331: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2108 +//line sql.y:2109 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 332: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2112 +//line sql.y:2113 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } case 333: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2116 +//line sql.y:2117 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } case 334: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2120 +//line sql.y:2121 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } case 335: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2124 +//line sql.y:2125 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } case 336: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2130 +//line sql.y:2131 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion(), Charset: yyDollar[3].columnCharset} } case 337: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2134 +//line sql.y:2135 { // CHAR BYTE is an alias for binary. See also: // https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html @@ -11337,153 +11411,153 @@ yydefault: } case 338: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2140 +//line sql.y:2141 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion(), Charset: yyDollar[3].columnCharset} } case 339: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2144 +//line sql.y:2145 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } case 340: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2148 +//line sql.y:2149 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } case 341: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2152 +//line sql.y:2153 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset} } case 342: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2156 +//line sql.y:2157 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset} } case 343: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2160 +//line sql.y:2161 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset} } case 344: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2164 +//line sql.y:2165 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset} } case 345: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2168 +//line sql.y:2169 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 346: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2172 +//line sql.y:2173 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 347: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2176 +//line sql.y:2177 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 348: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2180 +//line sql.y:2181 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 349: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2184 +//line sql.y:2185 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 350: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2188 +//line sql.y:2189 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].columnCharset} } case 351: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2193 +//line sql.y:2194 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].columnCharset} } case 352: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2199 +//line sql.y:2200 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 353: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2203 +//line sql.y:2204 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 354: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2207 +//line sql.y:2208 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 355: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2211 +//line sql.y:2212 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 356: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2215 +//line sql.y:2216 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 357: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2219 +//line sql.y:2220 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 358: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2223 +//line sql.y:2224 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 359: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2227 +//line sql.y:2228 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 360: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2233 +//line sql.y:2234 { yyVAL.strs = make([]string, 0, 4) yyVAL.strs = append(yyVAL.strs, encodeSQLString(yyDollar[1].str)) } case 361: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2238 +//line sql.y:2239 { yyVAL.strs = append(yyDollar[1].strs, encodeSQLString(yyDollar[3].str)) } case 362: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Literal -//line sql.y:2243 +//line sql.y:2244 { yyLOCAL = nil } @@ -11491,20 +11565,20 @@ yydefault: case 363: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Literal -//line sql.y:2247 +//line sql.y:2248 { yyLOCAL = NewIntLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL case 364: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2252 +//line sql.y:2253 { yyVAL.LengthScaleOption = LengthScaleOption{} } case 365: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2256 +//line sql.y:2257 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntLiteral(yyDollar[2].str), @@ -11513,13 +11587,13 @@ yydefault: } case 366: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2265 +//line sql.y:2266 { yyVAL.LengthScaleOption = yyDollar[1].LengthScaleOption } case 367: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2269 +//line sql.y:2270 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntLiteral(yyDollar[2].str), @@ -11527,13 +11601,13 @@ yydefault: } case 368: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2276 +//line sql.y:2277 { yyVAL.LengthScaleOption = LengthScaleOption{} } case 369: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2280 +//line sql.y:2281 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntLiteral(yyDollar[2].str), @@ -11541,7 +11615,7 @@ yydefault: } case 370: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2286 +//line sql.y:2287 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntLiteral(yyDollar[2].str), @@ -11551,7 +11625,7 @@ yydefault: case 371: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2294 +//line sql.y:2295 { yyLOCAL = false } @@ -11559,7 +11633,7 @@ yydefault: case 372: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2298 +//line sql.y:2299 { yyLOCAL = true } @@ -11567,7 +11641,7 @@ yydefault: case 373: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2302 +//line sql.y:2303 { yyLOCAL = false } @@ -11575,7 +11649,7 @@ yydefault: case 374: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2307 +//line sql.y:2308 { yyLOCAL = false } @@ -11583,66 +11657,66 @@ yydefault: case 375: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2311 +//line sql.y:2312 { yyLOCAL = true } yyVAL.union = yyLOCAL case 376: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2316 +//line sql.y:2317 { yyVAL.columnCharset = ColumnCharset{} } case 377: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2320 +//line sql.y:2321 { yyVAL.columnCharset = ColumnCharset{Name: string(yyDollar[2].identifierCI.String()), Binary: yyDollar[3].booleanUnion()} } case 378: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2324 +//line sql.y:2325 { yyVAL.columnCharset = ColumnCharset{Name: encodeSQLString(yyDollar[2].str), Binary: yyDollar[3].booleanUnion()} } case 379: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2328 +//line sql.y:2329 { yyVAL.columnCharset = ColumnCharset{Name: string(yyDollar[2].str)} } case 380: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2332 +//line sql.y:2333 { // ASCII: Shorthand for CHARACTER SET latin1. yyVAL.columnCharset = ColumnCharset{Name: "latin1", Binary: yyDollar[2].booleanUnion()} } case 381: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2337 +//line sql.y:2338 { // UNICODE: Shorthand for CHARACTER SET ucs2. yyVAL.columnCharset = ColumnCharset{Name: "ucs2", Binary: yyDollar[2].booleanUnion()} } case 382: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2342 +//line sql.y:2343 { // BINARY: Shorthand for default CHARACTER SET but with binary collation yyVAL.columnCharset = ColumnCharset{Name: "", Binary: true} } case 383: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2347 +//line sql.y:2348 { // BINARY ASCII: Shorthand for CHARACTER SET latin1 with binary collation yyVAL.columnCharset = ColumnCharset{Name: "latin1", Binary: true} } case 384: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2352 +//line sql.y:2353 { // BINARY UNICODE: Shorthand for CHARACTER SET ucs2 with binary collation yyVAL.columnCharset = ColumnCharset{Name: "ucs2", Binary: true} @@ -11650,7 +11724,7 @@ yydefault: case 385: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2358 +//line sql.y:2359 { yyLOCAL = false } @@ -11658,33 +11732,33 @@ yydefault: case 386: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2362 +//line sql.y:2363 { yyLOCAL = true } yyVAL.union = yyLOCAL case 387: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2367 +//line sql.y:2368 { yyVAL.str = "" } case 388: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2371 +//line sql.y:2372 { yyVAL.str = string(yyDollar[2].identifierCI.String()) } case 389: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2375 +//line sql.y:2376 { yyVAL.str = encodeSQLString(yyDollar[2].str) } case 390: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *IndexDefinition -//line sql.y:2381 +//line sql.y:2382 { yyLOCAL = &IndexDefinition{Info: yyDollar[1].indexInfoUnion(), Columns: yyDollar[3].indexColumnsUnion(), Options: yyDollar[5].indexOptionsUnion()} } @@ -11692,7 +11766,7 @@ yydefault: case 391: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:2386 +//line sql.y:2387 { yyLOCAL = nil } @@ -11700,7 +11774,7 @@ yydefault: case 392: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:2390 +//line sql.y:2391 { yyLOCAL = yyDollar[1].indexOptionsUnion() } @@ -11708,14 +11782,14 @@ yydefault: case 393: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:2396 +//line sql.y:2397 { yyLOCAL = []*IndexOption{yyDollar[1].indexOptionUnion()} } yyVAL.union = yyLOCAL case 394: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2400 +//line sql.y:2401 { yySLICE := (*[]*IndexOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].indexOptionUnion()) @@ -11723,7 +11797,7 @@ yydefault: case 395: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2406 +//line sql.y:2407 { yyLOCAL = yyDollar[1].indexOptionUnion() } @@ -11731,7 +11805,7 @@ yydefault: case 396: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2410 +//line sql.y:2411 { // should not be string yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} @@ -11740,7 +11814,7 @@ yydefault: case 397: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2415 +//line sql.y:2416 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[2].str)} } @@ -11748,7 +11822,7 @@ yydefault: case 398: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2419 +//line sql.y:2420 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str)} } @@ -11756,7 +11830,7 @@ yydefault: case 399: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2423 +//line sql.y:2424 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str)} } @@ -11764,7 +11838,7 @@ yydefault: case 400: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2427 +//line sql.y:2428 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str) + " " + string(yyDollar[2].str), String: yyDollar[3].identifierCI.String()} } @@ -11772,7 +11846,7 @@ yydefault: case 401: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2431 +//line sql.y:2432 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -11780,27 +11854,27 @@ yydefault: case 402: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2435 +//line sql.y:2436 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL case 403: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2441 +//line sql.y:2442 { yyVAL.str = "" } case 404: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2445 +//line sql.y:2446 { yyVAL.str = string(yyDollar[1].str) } case 405: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2451 +//line sql.y:2452 { yyLOCAL = &IndexInfo{Type: string(yyDollar[2].str) + " " + string(yyDollar[3].str), ConstraintName: NewIdentifierCI(yyDollar[1].str), Name: NewIdentifierCI("PRIMARY"), Primary: true, Unique: true} } @@ -11808,7 +11882,7 @@ yydefault: case 406: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2455 +//line sql.y:2456 { yyLOCAL = &IndexInfo{Type: string(yyDollar[1].str) + " " + string(yyDollar[2].str), Name: NewIdentifierCI(yyDollar[3].str), Spatial: true, Unique: false} } @@ -11816,7 +11890,7 @@ yydefault: case 407: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2459 +//line sql.y:2460 { yyLOCAL = &IndexInfo{Type: string(yyDollar[1].str) + " " + string(yyDollar[2].str), Name: NewIdentifierCI(yyDollar[3].str), Fulltext: true, Unique: false} } @@ -11824,7 +11898,7 @@ yydefault: case 408: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2463 +//line sql.y:2464 { yyLOCAL = &IndexInfo{Type: string(yyDollar[2].str) + " " + string(yyDollar[3].str), ConstraintName: NewIdentifierCI(yyDollar[1].str), Name: NewIdentifierCI(yyDollar[4].str), Unique: true} } @@ -11832,100 +11906,100 @@ yydefault: case 409: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2467 +//line sql.y:2468 { yyLOCAL = &IndexInfo{Type: string(yyDollar[1].str), Name: NewIdentifierCI(yyDollar[2].str), Unique: false} } yyVAL.union = yyLOCAL case 410: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2472 +//line sql.y:2473 { yyVAL.str = "" } case 411: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2476 +//line sql.y:2477 { yyVAL.str = yyDollar[2].str } case 412: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2482 +//line sql.y:2483 { yyVAL.str = string(yyDollar[1].str) } case 413: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2486 +//line sql.y:2487 { yyVAL.str = string(yyDollar[1].str) } case 414: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2490 +//line sql.y:2491 { yyVAL.str = string(yyDollar[1].str) } case 415: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2496 +//line sql.y:2497 { yyVAL.str = string(yyDollar[1].str) } case 416: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2500 +//line sql.y:2501 { yyVAL.str = string(yyDollar[1].str) } case 417: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2505 +//line sql.y:2506 { yyVAL.str = "key" } case 418: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2509 +//line sql.y:2510 { yyVAL.str = yyDollar[1].str } case 419: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2515 +//line sql.y:2516 { yyVAL.str = string(yyDollar[1].str) } case 420: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2519 +//line sql.y:2520 { yyVAL.str = string(yyDollar[1].str) } case 421: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2524 +//line sql.y:2525 { yyVAL.str = "" } case 422: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2528 +//line sql.y:2529 { yyVAL.str = string(yyDollar[1].identifierCI.String()) } case 423: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexColumn -//line sql.y:2534 +//line sql.y:2535 { yyLOCAL = []*IndexColumn{yyDollar[1].indexColumnUnion()} } yyVAL.union = yyLOCAL case 424: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2538 +//line sql.y:2539 { yySLICE := (*[]*IndexColumn)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].indexColumnUnion()) @@ -11933,7 +12007,7 @@ yydefault: case 425: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexColumn -//line sql.y:2544 +//line sql.y:2545 { yyLOCAL = &IndexColumn{Column: yyDollar[1].identifierCI, Length: yyDollar[2].literalUnion(), Direction: yyDollar[3].orderDirectionUnion()} } @@ -11941,7 +12015,7 @@ yydefault: case 426: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *IndexColumn -//line sql.y:2548 +//line sql.y:2549 { yyLOCAL = &IndexColumn{Expression: yyDollar[2].exprUnion(), Direction: yyDollar[4].orderDirectionUnion()} } @@ -11949,7 +12023,7 @@ yydefault: case 427: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2554 +//line sql.y:2555 { yyLOCAL = &ConstraintDefinition{Name: yyDollar[2].identifierCI, Details: yyDollar[3].constraintInfoUnion()} } @@ -11957,7 +12031,7 @@ yydefault: case 428: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2558 +//line sql.y:2559 { yyLOCAL = &ConstraintDefinition{Details: yyDollar[1].constraintInfoUnion()} } @@ -11965,7 +12039,7 @@ yydefault: case 429: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2564 +//line sql.y:2565 { yyLOCAL = &ConstraintDefinition{Name: yyDollar[2].identifierCI, Details: yyDollar[3].constraintInfoUnion()} } @@ -11973,7 +12047,7 @@ yydefault: case 430: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2568 +//line sql.y:2569 { yyLOCAL = &ConstraintDefinition{Details: yyDollar[1].constraintInfoUnion()} } @@ -11981,7 +12055,7 @@ yydefault: case 431: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL ConstraintInfo -//line sql.y:2574 +//line sql.y:2575 { yyLOCAL = &ForeignKeyDefinition{IndexName: NewIdentifierCI(yyDollar[3].str), Source: yyDollar[5].columnsUnion(), ReferenceDefinition: yyDollar[7].referenceDefinitionUnion()} } @@ -11989,7 +12063,7 @@ yydefault: case 432: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2580 +//line sql.y:2581 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion()} } @@ -11997,7 +12071,7 @@ yydefault: case 433: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2584 +//line sql.y:2585 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnDelete: yyDollar[7].referenceActionUnion()} } @@ -12005,7 +12079,7 @@ yydefault: case 434: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2588 +//line sql.y:2589 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnUpdate: yyDollar[7].referenceActionUnion()} } @@ -12013,7 +12087,7 @@ yydefault: case 435: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2592 +//line sql.y:2593 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnDelete: yyDollar[7].referenceActionUnion(), OnUpdate: yyDollar[8].referenceActionUnion()} } @@ -12021,7 +12095,7 @@ yydefault: case 436: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2596 +//line sql.y:2597 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnUpdate: yyDollar[7].referenceActionUnion(), OnDelete: yyDollar[8].referenceActionUnion()} } @@ -12029,7 +12103,7 @@ yydefault: case 437: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2601 +//line sql.y:2602 { yyLOCAL = nil } @@ -12037,7 +12111,7 @@ yydefault: case 438: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2605 +//line sql.y:2606 { yyLOCAL = yyDollar[1].referenceDefinitionUnion() } @@ -12045,7 +12119,7 @@ yydefault: case 439: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL ConstraintInfo -//line sql.y:2611 +//line sql.y:2612 { yyLOCAL = &CheckConstraintDefinition{Expr: yyDollar[3].exprUnion(), Enforced: yyDollar[5].booleanUnion()} } @@ -12053,7 +12127,7 @@ yydefault: case 440: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2617 +//line sql.y:2618 { yyLOCAL = yyDollar[2].matchActionUnion() } @@ -12061,7 +12135,7 @@ yydefault: case 441: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2623 +//line sql.y:2624 { yyLOCAL = Full } @@ -12069,7 +12143,7 @@ yydefault: case 442: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2627 +//line sql.y:2628 { yyLOCAL = Partial } @@ -12077,7 +12151,7 @@ yydefault: case 443: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2631 +//line sql.y:2632 { yyLOCAL = Simple } @@ -12085,7 +12159,7 @@ yydefault: case 444: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2636 +//line sql.y:2637 { yyLOCAL = DefaultMatch } @@ -12093,7 +12167,7 @@ yydefault: case 445: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2640 +//line sql.y:2641 { yyLOCAL = yyDollar[1].matchActionUnion() } @@ -12101,7 +12175,7 @@ yydefault: case 446: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2646 +//line sql.y:2647 { yyLOCAL = yyDollar[3].referenceActionUnion() } @@ -12109,7 +12183,7 @@ yydefault: case 447: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2652 +//line sql.y:2653 { yyLOCAL = yyDollar[3].referenceActionUnion() } @@ -12117,7 +12191,7 @@ yydefault: case 448: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2658 +//line sql.y:2659 { yyLOCAL = Restrict } @@ -12125,7 +12199,7 @@ yydefault: case 449: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2662 +//line sql.y:2663 { yyLOCAL = Cascade } @@ -12133,7 +12207,7 @@ yydefault: case 450: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2666 +//line sql.y:2667 { yyLOCAL = NoAction } @@ -12141,7 +12215,7 @@ yydefault: case 451: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2670 +//line sql.y:2671 { yyLOCAL = SetDefault } @@ -12149,33 +12223,33 @@ yydefault: case 452: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2674 +//line sql.y:2675 { yyLOCAL = SetNull } yyVAL.union = yyLOCAL case 453: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2679 +//line sql.y:2680 { yyVAL.str = "" } case 454: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2683 +//line sql.y:2684 { yyVAL.str = string(yyDollar[1].str) } case 455: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2687 +//line sql.y:2688 { yyVAL.str = string(yyDollar[1].str) } case 456: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2693 +//line sql.y:2694 { yyLOCAL = true } @@ -12183,7 +12257,7 @@ yydefault: case 457: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:2697 +//line sql.y:2698 { yyLOCAL = false } @@ -12191,7 +12265,7 @@ yydefault: case 458: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2702 +//line sql.y:2703 { yyLOCAL = true } @@ -12199,7 +12273,7 @@ yydefault: case 459: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2706 +//line sql.y:2707 { yyLOCAL = yyDollar[1].booleanUnion() } @@ -12207,7 +12281,7 @@ yydefault: case 460: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL TableOptions -//line sql.y:2711 +//line sql.y:2712 { yyLOCAL = nil } @@ -12215,7 +12289,7 @@ yydefault: case 461: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableOptions -//line sql.y:2715 +//line sql.y:2716 { yyLOCAL = yyDollar[1].tableOptionsUnion() } @@ -12223,21 +12297,21 @@ yydefault: case 462: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableOptions -//line sql.y:2721 +//line sql.y:2722 { yyLOCAL = TableOptions{yyDollar[1].tableOptionUnion()} } yyVAL.union = yyLOCAL case 463: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2725 +//line sql.y:2726 { yySLICE := (*TableOptions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableOptionUnion()) } case 464: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2729 +//line sql.y:2730 { yySLICE := (*TableOptions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].tableOptionUnion()) @@ -12245,14 +12319,14 @@ yydefault: case 465: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableOptions -//line sql.y:2735 +//line sql.y:2736 { yyLOCAL = TableOptions{yyDollar[1].tableOptionUnion()} } yyVAL.union = yyLOCAL case 466: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2739 +//line sql.y:2740 { yySLICE := (*TableOptions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].tableOptionUnion()) @@ -12260,7 +12334,7 @@ yydefault: case 467: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2745 +//line sql.y:2746 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12268,7 +12342,7 @@ yydefault: case 468: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2749 +//line sql.y:2750 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12276,7 +12350,7 @@ yydefault: case 469: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2753 +//line sql.y:2754 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12284,7 +12358,7 @@ yydefault: case 470: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2757 +//line sql.y:2758 { yyLOCAL = &TableOption{Name: (string(yyDollar[2].str)), String: yyDollar[4].str, CaseSensitive: true} } @@ -12292,7 +12366,7 @@ yydefault: case 471: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2761 +//line sql.y:2762 { yyLOCAL = &TableOption{Name: string(yyDollar[2].str), String: yyDollar[4].str, CaseSensitive: true} } @@ -12300,7 +12374,7 @@ yydefault: case 472: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2765 +//line sql.y:2766 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12308,7 +12382,7 @@ yydefault: case 473: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2769 +//line sql.y:2770 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -12316,7 +12390,7 @@ yydefault: case 474: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2773 +//line sql.y:2774 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -12324,7 +12398,7 @@ yydefault: case 475: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2777 +//line sql.y:2778 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -12332,7 +12406,7 @@ yydefault: case 476: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2781 +//line sql.y:2782 { yyLOCAL = &TableOption{Name: (string(yyDollar[1].str) + " " + string(yyDollar[2].str)), Value: NewStrLiteral(yyDollar[4].str)} } @@ -12340,7 +12414,7 @@ yydefault: case 477: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2785 +//line sql.y:2786 { yyLOCAL = &TableOption{Name: (string(yyDollar[1].str) + " " + string(yyDollar[2].str)), Value: NewStrLiteral(yyDollar[4].str)} } @@ -12348,7 +12422,7 @@ yydefault: case 478: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2789 +//line sql.y:2790 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12356,7 +12430,7 @@ yydefault: case 479: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2793 +//line sql.y:2794 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -12364,7 +12438,7 @@ yydefault: case 480: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2797 +//line sql.y:2798 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: yyDollar[3].identifierCS.String(), CaseSensitive: true} } @@ -12372,7 +12446,7 @@ yydefault: case 481: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2801 +//line sql.y:2802 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -12380,7 +12454,7 @@ yydefault: case 482: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2805 +//line sql.y:2806 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } @@ -12388,7 +12462,7 @@ yydefault: case 483: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2809 +//line sql.y:2810 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12396,7 +12470,7 @@ yydefault: case 484: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2813 +//line sql.y:2814 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12404,7 +12478,7 @@ yydefault: case 485: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2817 +//line sql.y:2818 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12412,7 +12486,7 @@ yydefault: case 486: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2821 +//line sql.y:2822 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12420,7 +12494,7 @@ yydefault: case 487: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2825 +//line sql.y:2826 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } @@ -12428,7 +12502,7 @@ yydefault: case 488: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2829 +//line sql.y:2830 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -12436,7 +12510,7 @@ yydefault: case 489: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2833 +//line sql.y:2834 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } @@ -12444,7 +12518,7 @@ yydefault: case 490: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2837 +//line sql.y:2838 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -12452,7 +12526,7 @@ yydefault: case 491: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2841 +//line sql.y:2842 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12460,7 +12534,7 @@ yydefault: case 492: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2845 +//line sql.y:2846 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } @@ -12468,7 +12542,7 @@ yydefault: case 493: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2849 +//line sql.y:2850 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12476,7 +12550,7 @@ yydefault: case 494: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2853 +//line sql.y:2854 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } @@ -12484,7 +12558,7 @@ yydefault: case 495: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2857 +//line sql.y:2858 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12492,7 +12566,7 @@ yydefault: case 496: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2861 +//line sql.y:2862 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: (yyDollar[3].identifierCI.String() + yyDollar[4].str)} } @@ -12500,57 +12574,57 @@ yydefault: case 497: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2865 +//line sql.y:2866 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Tables: yyDollar[4].tableNamesUnion()} } yyVAL.union = yyLOCAL case 498: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2870 +//line sql.y:2871 { yyVAL.str = "" } case 499: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2874 +//line sql.y:2875 { yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 500: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2878 +//line sql.y:2879 { yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 510: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2897 +//line sql.y:2898 { yyVAL.str = yyDollar[1].identifierCI.String() } case 511: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2901 +//line sql.y:2902 { yyVAL.str = encodeSQLString(yyDollar[1].str) } case 512: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2905 +//line sql.y:2906 { yyVAL.str = string(yyDollar[1].str) } case 513: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2910 +//line sql.y:2911 { yyVAL.str = "" } case 515: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2916 +//line sql.y:2917 { yyLOCAL = false } @@ -12558,7 +12632,7 @@ yydefault: case 516: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2920 +//line sql.y:2921 { yyLOCAL = true } @@ -12566,7 +12640,7 @@ yydefault: case 517: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ColName -//line sql.y:2925 +//line sql.y:2926 { yyLOCAL = nil } @@ -12574,27 +12648,27 @@ yydefault: case 518: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColName -//line sql.y:2929 +//line sql.y:2930 { yyLOCAL = yyDollar[2].colNameUnion() } yyVAL.union = yyLOCAL case 519: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2934 +//line sql.y:2935 { yyVAL.str = "" } case 520: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2938 +//line sql.y:2939 { yyVAL.str = string(yyDollar[2].str) } case 521: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Literal -//line sql.y:2943 +//line sql.y:2944 { yyLOCAL = nil } @@ -12602,7 +12676,7 @@ yydefault: case 522: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Literal -//line sql.y:2947 +//line sql.y:2948 { yyLOCAL = NewIntLiteral(yyDollar[2].str) } @@ -12610,7 +12684,7 @@ yydefault: case 523: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Literal -//line sql.y:2951 +//line sql.y:2952 { yyLOCAL = NewDecimalLiteral(yyDollar[2].str) } @@ -12618,7 +12692,7 @@ yydefault: case 524: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2956 +//line sql.y:2957 { yyLOCAL = nil } @@ -12626,14 +12700,14 @@ yydefault: case 525: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2960 +//line sql.y:2961 { yyLOCAL = yyDollar[1].alterOptionsUnion() } yyVAL.union = yyLOCAL case 526: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2964 +//line sql.y:2965 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, &OrderByOption{Cols: yyDollar[5].columnsUnion()}) @@ -12641,14 +12715,14 @@ yydefault: case 527: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2968 +//line sql.y:2969 { yyLOCAL = yyDollar[1].alterOptionsUnion() } yyVAL.union = yyLOCAL case 528: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2972 +//line sql.y:2973 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionsUnion()...) @@ -12656,7 +12730,7 @@ yydefault: case 529: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2976 +//line sql.y:2977 { yyLOCAL = append(append(yyDollar[1].alterOptionsUnion(), yyDollar[3].alterOptionsUnion()...), &OrderByOption{Cols: yyDollar[7].columnsUnion()}) } @@ -12664,21 +12738,21 @@ yydefault: case 530: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2982 +//line sql.y:2983 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL case 531: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2986 +//line sql.y:2987 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion()) } case 532: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2990 +//line sql.y:2991 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion()) @@ -12686,7 +12760,7 @@ yydefault: case 533: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL AlterOption -//line sql.y:2996 +//line sql.y:2997 { yyLOCAL = yyDollar[1].tableOptionsUnion() } @@ -12694,7 +12768,7 @@ yydefault: case 534: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3000 +//line sql.y:3001 { yyLOCAL = &AddConstraintDefinition{ConstraintDefinition: yyDollar[2].constraintDefinitionUnion()} } @@ -12702,7 +12776,7 @@ yydefault: case 535: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3004 +//line sql.y:3005 { yyLOCAL = &AddConstraintDefinition{ConstraintDefinition: yyDollar[2].constraintDefinitionUnion()} } @@ -12710,7 +12784,7 @@ yydefault: case 536: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3008 +//line sql.y:3009 { yyLOCAL = &AddIndexDefinition{IndexDefinition: yyDollar[2].indexDefinitionUnion()} } @@ -12718,7 +12792,7 @@ yydefault: case 537: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3012 +//line sql.y:3013 { yyLOCAL = &AddColumns{Columns: yyDollar[4].columnDefinitionsUnion()} } @@ -12726,7 +12800,7 @@ yydefault: case 538: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3016 +//line sql.y:3017 { yyLOCAL = &AddColumns{Columns: []*ColumnDefinition{yyDollar[3].columnDefinitionUnion()}, First: yyDollar[4].booleanUnion(), After: yyDollar[5].colNameUnion()} } @@ -12734,7 +12808,7 @@ yydefault: case 539: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3020 +//line sql.y:3021 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: true} } @@ -12742,7 +12816,7 @@ yydefault: case 540: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3024 +//line sql.y:3025 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: false, DefaultVal: yyDollar[6].exprUnion()} } @@ -12750,7 +12824,7 @@ yydefault: case 541: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3028 +//line sql.y:3029 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: false, DefaultVal: yyDollar[7].exprUnion()} } @@ -12758,7 +12832,7 @@ yydefault: case 542: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3032 +//line sql.y:3033 { val := false yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), Invisible: &val} @@ -12767,7 +12841,7 @@ yydefault: case 543: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3037 +//line sql.y:3038 { val := true yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), Invisible: &val} @@ -12776,7 +12850,7 @@ yydefault: case 544: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3042 +//line sql.y:3043 { yyLOCAL = &AlterCheck{Name: yyDollar[3].identifierCI, Enforced: yyDollar[4].booleanUnion()} } @@ -12784,7 +12858,7 @@ yydefault: case 545: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3046 +//line sql.y:3047 { yyLOCAL = &AlterIndex{Name: yyDollar[3].identifierCI, Invisible: false} } @@ -12792,7 +12866,7 @@ yydefault: case 546: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3050 +//line sql.y:3051 { yyLOCAL = &AlterIndex{Name: yyDollar[3].identifierCI, Invisible: true} } @@ -12800,7 +12874,7 @@ yydefault: case 547: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3054 +//line sql.y:3055 { yyLOCAL = &ChangeColumn{OldColumn: yyDollar[3].colNameUnion(), NewColDefinition: yyDollar[4].columnDefinitionUnion(), First: yyDollar[5].booleanUnion(), After: yyDollar[6].colNameUnion()} } @@ -12808,7 +12882,7 @@ yydefault: case 548: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3058 +//line sql.y:3059 { yyLOCAL = &ModifyColumn{NewColDefinition: yyDollar[3].columnDefinitionUnion(), First: yyDollar[4].booleanUnion(), After: yyDollar[5].colNameUnion()} } @@ -12816,7 +12890,7 @@ yydefault: case 549: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3062 +//line sql.y:3063 { yyLOCAL = &RenameColumn{OldName: yyDollar[3].colNameUnion(), NewName: yyDollar[5].colNameUnion()} } @@ -12824,7 +12898,7 @@ yydefault: case 550: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3066 +//line sql.y:3067 { yyLOCAL = &AlterCharset{CharacterSet: yyDollar[4].str, Collate: yyDollar[5].str} } @@ -12832,7 +12906,7 @@ yydefault: case 551: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3070 +//line sql.y:3071 { yyLOCAL = &KeyState{Enable: false} } @@ -12840,7 +12914,7 @@ yydefault: case 552: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3074 +//line sql.y:3075 { yyLOCAL = &KeyState{Enable: true} } @@ -12848,7 +12922,7 @@ yydefault: case 553: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3078 +//line sql.y:3079 { yyLOCAL = &TablespaceOperation{Import: false} } @@ -12856,7 +12930,7 @@ yydefault: case 554: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3082 +//line sql.y:3083 { yyLOCAL = &TablespaceOperation{Import: true} } @@ -12864,7 +12938,7 @@ yydefault: case 555: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3086 +//line sql.y:3087 { yyLOCAL = &DropColumn{Name: yyDollar[3].colNameUnion()} } @@ -12872,7 +12946,7 @@ yydefault: case 556: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3090 +//line sql.y:3091 { yyLOCAL = &DropKey{Type: NormalKeyType, Name: yyDollar[3].identifierCI} } @@ -12880,7 +12954,7 @@ yydefault: case 557: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3094 +//line sql.y:3095 { yyLOCAL = &DropKey{Type: PrimaryKeyType} } @@ -12888,7 +12962,7 @@ yydefault: case 558: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3098 +//line sql.y:3099 { yyLOCAL = &DropKey{Type: ForeignKeyType, Name: yyDollar[4].identifierCI} } @@ -12896,7 +12970,7 @@ yydefault: case 559: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3102 +//line sql.y:3103 { yyLOCAL = &DropKey{Type: CheckKeyType, Name: yyDollar[3].identifierCI} } @@ -12904,7 +12978,7 @@ yydefault: case 560: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3106 +//line sql.y:3107 { yyLOCAL = &DropKey{Type: CheckKeyType, Name: yyDollar[3].identifierCI} } @@ -12912,7 +12986,7 @@ yydefault: case 561: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3110 +//line sql.y:3111 { yyLOCAL = &Force{} } @@ -12920,7 +12994,7 @@ yydefault: case 562: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3114 +//line sql.y:3115 { yyLOCAL = &RenameTableName{Table: yyDollar[3].tableName} } @@ -12928,7 +13002,7 @@ yydefault: case 563: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3118 +//line sql.y:3119 { yyLOCAL = &RenameIndex{OldName: yyDollar[3].identifierCI, NewName: yyDollar[5].identifierCI} } @@ -12936,14 +13010,14 @@ yydefault: case 564: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:3124 +//line sql.y:3125 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL case 565: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3128 +//line sql.y:3129 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion()) @@ -12951,7 +13025,7 @@ yydefault: case 566: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3134 +//line sql.y:3135 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } @@ -12959,7 +13033,7 @@ yydefault: case 567: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3138 +//line sql.y:3139 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } @@ -12967,7 +13041,7 @@ yydefault: case 568: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3142 +//line sql.y:3143 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } @@ -12975,7 +13049,7 @@ yydefault: case 569: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3146 +//line sql.y:3147 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } @@ -12983,7 +13057,7 @@ yydefault: case 570: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3150 +//line sql.y:3151 { yyLOCAL = &LockOption{Type: DefaultType} } @@ -12991,7 +13065,7 @@ yydefault: case 571: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3154 +//line sql.y:3155 { yyLOCAL = &LockOption{Type: NoneType} } @@ -12999,7 +13073,7 @@ yydefault: case 572: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3158 +//line sql.y:3159 { yyLOCAL = &LockOption{Type: SharedType} } @@ -13007,7 +13081,7 @@ yydefault: case 573: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3162 +//line sql.y:3163 { yyLOCAL = &LockOption{Type: ExclusiveType} } @@ -13015,7 +13089,7 @@ yydefault: case 574: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3166 +//line sql.y:3167 { yyLOCAL = &Validation{With: true} } @@ -13023,7 +13097,7 @@ yydefault: case 575: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3170 +//line sql.y:3171 { yyLOCAL = &Validation{With: false} } @@ -13031,7 +13105,7 @@ yydefault: case 576: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:3176 +//line sql.y:3177 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion() @@ -13042,7 +13116,7 @@ yydefault: case 577: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:3183 +//line sql.y:3184 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion() @@ -13053,7 +13127,7 @@ yydefault: case 578: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:3190 +//line sql.y:3191 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion() @@ -13064,7 +13138,7 @@ yydefault: case 579: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:3197 +//line sql.y:3198 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().PartitionSpec = yyDollar[2].partSpecUnion() @@ -13074,7 +13148,7 @@ yydefault: case 580: yyDollar = yyS[yypt-11 : yypt+1] var yyLOCAL Statement -//line sql.y:3203 +//line sql.y:3204 { yyLOCAL = &AlterView{ViewName: yyDollar[7].tableName.ToViewName(), Comments: Comments(yyDollar[2].strs).Parsed(), Algorithm: yyDollar[3].str, Definer: yyDollar[4].definerUnion(), Security: yyDollar[5].str, Columns: yyDollar[8].columnsUnion(), Select: yyDollar[10].selStmtUnion(), CheckOption: yyDollar[11].str} } @@ -13082,7 +13156,7 @@ yydefault: case 581: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:3213 +//line sql.y:3214 { yyDollar[1].alterDatabaseUnion().FullyParsed = true yyDollar[1].alterDatabaseUnion().DBName = yyDollar[2].identifierCS @@ -13093,7 +13167,7 @@ yydefault: case 582: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3220 +//line sql.y:3221 { yyDollar[1].alterDatabaseUnion().FullyParsed = true yyDollar[1].alterDatabaseUnion().DBName = yyDollar[2].identifierCS @@ -13104,7 +13178,7 @@ yydefault: case 583: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:3227 +//line sql.y:3228 { yyLOCAL = &AlterVschema{ Action: CreateVindexDDLAction, @@ -13120,7 +13194,7 @@ yydefault: case 584: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3239 +//line sql.y:3240 { yyLOCAL = &AlterVschema{ Action: DropVindexDDLAction, @@ -13134,7 +13208,7 @@ yydefault: case 585: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3249 +//line sql.y:3250 { yyLOCAL = &AlterVschema{Action: AddVschemaTableDDLAction, Table: yyDollar[6].tableName} } @@ -13142,7 +13216,7 @@ yydefault: case 586: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3253 +//line sql.y:3254 { yyLOCAL = &AlterVschema{Action: DropVschemaTableDDLAction, Table: yyDollar[6].tableName} } @@ -13150,7 +13224,7 @@ yydefault: case 587: yyDollar = yyS[yypt-13 : yypt+1] var yyLOCAL Statement -//line sql.y:3257 +//line sql.y:3258 { yyLOCAL = &AlterVschema{ Action: AddColVindexDDLAction, @@ -13167,7 +13241,7 @@ yydefault: case 588: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:3270 +//line sql.y:3271 { yyLOCAL = &AlterVschema{ Action: DropColVindexDDLAction, @@ -13181,7 +13255,7 @@ yydefault: case 589: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3280 +//line sql.y:3281 { yyLOCAL = &AlterVschema{Action: AddSequenceDDLAction, Table: yyDollar[6].tableName} } @@ -13189,7 +13263,7 @@ yydefault: case 590: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Statement -//line sql.y:3284 +//line sql.y:3285 { yyLOCAL = &AlterVschema{ Action: AddAutoIncDDLAction, @@ -13204,7 +13278,7 @@ yydefault: case 591: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3295 +//line sql.y:3296 { yyLOCAL = &AlterMigration{ Type: RetryMigrationType, @@ -13215,7 +13289,7 @@ yydefault: case 592: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3302 +//line sql.y:3303 { yyLOCAL = &AlterMigration{ Type: CleanupMigrationType, @@ -13226,7 +13300,7 @@ yydefault: case 593: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3309 +//line sql.y:3310 { yyLOCAL = &AlterMigration{ Type: LaunchMigrationType, @@ -13237,7 +13311,7 @@ yydefault: case 594: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3316 +//line sql.y:3317 { yyLOCAL = &AlterMigration{ Type: LaunchMigrationType, @@ -13249,7 +13323,7 @@ yydefault: case 595: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3324 +//line sql.y:3325 { yyLOCAL = &AlterMigration{ Type: LaunchAllMigrationType, @@ -13259,7 +13333,7 @@ yydefault: case 596: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3330 +//line sql.y:3331 { yyLOCAL = &AlterMigration{ Type: CompleteMigrationType, @@ -13270,7 +13344,7 @@ yydefault: case 597: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3337 +//line sql.y:3338 { yyLOCAL = &AlterMigration{ Type: CompleteAllMigrationType, @@ -13280,7 +13354,7 @@ yydefault: case 598: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3343 +//line sql.y:3344 { yyLOCAL = &AlterMigration{ Type: CancelMigrationType, @@ -13291,7 +13365,7 @@ yydefault: case 599: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3350 +//line sql.y:3351 { yyLOCAL = &AlterMigration{ Type: PauseMigrationType, @@ -13302,7 +13376,7 @@ yydefault: case 600: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3357 +//line sql.y:3358 { yyLOCAL = &AlterMigration{ Type: ResumeMigrationType, @@ -13313,7 +13387,7 @@ yydefault: case 601: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3364 +//line sql.y:3365 { yyLOCAL = &AlterMigration{ Type: CancelAllMigrationType, @@ -13323,7 +13397,7 @@ yydefault: case 602: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3370 +//line sql.y:3371 { yyLOCAL = &AlterMigration{ Type: PauseAllMigrationType, @@ -13333,7 +13407,7 @@ yydefault: case 603: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3376 +//line sql.y:3377 { yyLOCAL = &AlterMigration{ Type: ResumeAllMigrationType, @@ -13343,7 +13417,7 @@ yydefault: case 604: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3382 +//line sql.y:3383 { yyLOCAL = &AlterMigration{ Type: ThrottleMigrationType, @@ -13356,7 +13430,7 @@ yydefault: case 605: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3391 +//line sql.y:3392 { yyLOCAL = &AlterMigration{ Type: ThrottleAllMigrationType, @@ -13368,7 +13442,7 @@ yydefault: case 606: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3399 +//line sql.y:3400 { yyLOCAL = &AlterMigration{ Type: UnthrottleMigrationType, @@ -13379,7 +13453,7 @@ yydefault: case 607: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3406 +//line sql.y:3407 { yyLOCAL = &AlterMigration{ Type: UnthrottleAllMigrationType, @@ -13389,7 +13463,7 @@ yydefault: case 608: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3412 +//line sql.y:3413 { yyLOCAL = &AlterMigration{ Type: RetryMigrationType, @@ -13400,7 +13474,7 @@ yydefault: case 609: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3419 +//line sql.y:3420 { yyLOCAL = &AlterMigration{ Type: CleanupMigrationType, @@ -13411,7 +13485,7 @@ yydefault: case 610: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3426 +//line sql.y:3427 { yyLOCAL = &AlterMigration{ Type: LaunchMigrationType, @@ -13422,7 +13496,7 @@ yydefault: case 611: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3433 +//line sql.y:3434 { yyLOCAL = &AlterMigration{ Type: LaunchMigrationType, @@ -13434,7 +13508,7 @@ yydefault: case 612: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3441 +//line sql.y:3442 { yyLOCAL = &AlterMigration{ Type: LaunchAllMigrationType, @@ -13444,7 +13518,7 @@ yydefault: case 613: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3447 +//line sql.y:3448 { yyLOCAL = &AlterMigration{ Type: CompleteMigrationType, @@ -13455,7 +13529,7 @@ yydefault: case 614: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3454 +//line sql.y:3455 { yyLOCAL = &AlterMigration{ Type: CompleteAllMigrationType, @@ -13465,7 +13539,7 @@ yydefault: case 615: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3460 +//line sql.y:3461 { yyLOCAL = &AlterMigration{ Type: CancelMigrationType, @@ -13476,7 +13550,7 @@ yydefault: case 616: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3467 +//line sql.y:3468 { yyLOCAL = &AlterMigration{ Type: PauseMigrationType, @@ -13487,7 +13561,7 @@ yydefault: case 617: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3474 +//line sql.y:3475 { yyLOCAL = &AlterMigration{ Type: ResumeMigrationType, @@ -13498,7 +13572,7 @@ yydefault: case 618: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3481 +//line sql.y:3482 { yyLOCAL = &AlterMigration{ Type: CancelAllMigrationType, @@ -13508,7 +13582,7 @@ yydefault: case 619: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3487 +//line sql.y:3488 { yyLOCAL = &AlterMigration{ Type: PauseAllMigrationType, @@ -13518,7 +13592,7 @@ yydefault: case 620: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3493 +//line sql.y:3494 { yyLOCAL = &AlterMigration{ Type: ResumeAllMigrationType, @@ -13528,7 +13602,7 @@ yydefault: case 621: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3499 +//line sql.y:3500 { yyLOCAL = &AlterMigration{ Type: ThrottleMigrationType, @@ -13541,7 +13615,7 @@ yydefault: case 622: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3508 +//line sql.y:3509 { yyLOCAL = &AlterMigration{ Type: ThrottleAllMigrationType, @@ -13553,7 +13627,7 @@ yydefault: case 623: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3516 +//line sql.y:3517 { yyLOCAL = &AlterMigration{ Type: UnthrottleMigrationType, @@ -13564,7 +13638,7 @@ yydefault: case 624: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3523 +//line sql.y:3524 { yyLOCAL = &AlterMigration{ Type: UnthrottleAllMigrationType, @@ -13574,7 +13648,7 @@ yydefault: case 625: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3531 +//line sql.y:3532 { yyLOCAL = nil } @@ -13582,7 +13656,7 @@ yydefault: case 626: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3535 +//line sql.y:3536 { yyDollar[3].partitionOptionUnion().Partitions = yyDollar[4].integerUnion() yyDollar[3].partitionOptionUnion().SubPartition = yyDollar[5].subPartitionUnion() @@ -13593,7 +13667,7 @@ yydefault: case 627: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3544 +//line sql.y:3545 { yyLOCAL = &PartitionOption{ IsLinear: yyDollar[1].booleanUnion(), @@ -13605,7 +13679,7 @@ yydefault: case 628: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3552 +//line sql.y:3553 { yyLOCAL = &PartitionOption{ IsLinear: yyDollar[1].booleanUnion(), @@ -13618,7 +13692,7 @@ yydefault: case 629: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3561 +//line sql.y:3562 { yyLOCAL = &PartitionOption{ Type: yyDollar[1].partitionByTypeUnion(), @@ -13629,7 +13703,7 @@ yydefault: case 630: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3568 +//line sql.y:3569 { yyLOCAL = &PartitionOption{ Type: yyDollar[1].partitionByTypeUnion(), @@ -13640,7 +13714,7 @@ yydefault: case 631: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *SubPartition -//line sql.y:3576 +//line sql.y:3577 { yyLOCAL = nil } @@ -13648,7 +13722,7 @@ yydefault: case 632: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *SubPartition -//line sql.y:3580 +//line sql.y:3581 { yyLOCAL = &SubPartition{ IsLinear: yyDollar[3].booleanUnion(), @@ -13661,7 +13735,7 @@ yydefault: case 633: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL *SubPartition -//line sql.y:3589 +//line sql.y:3590 { yyLOCAL = &SubPartition{ IsLinear: yyDollar[3].booleanUnion(), @@ -13675,7 +13749,7 @@ yydefault: case 634: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*PartitionDefinition -//line sql.y:3600 +//line sql.y:3601 { yyLOCAL = nil } @@ -13683,7 +13757,7 @@ yydefault: case 635: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*PartitionDefinition -//line sql.y:3604 +//line sql.y:3605 { yyLOCAL = yyDollar[2].partDefsUnion() } @@ -13691,7 +13765,7 @@ yydefault: case 636: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3609 +//line sql.y:3610 { yyLOCAL = false } @@ -13699,7 +13773,7 @@ yydefault: case 637: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3613 +//line sql.y:3614 { yyLOCAL = true } @@ -13707,7 +13781,7 @@ yydefault: case 638: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:3618 +//line sql.y:3619 { yyLOCAL = 0 } @@ -13715,7 +13789,7 @@ yydefault: case 639: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:3622 +//line sql.y:3623 { yyLOCAL = convertStringToInt(yyDollar[3].str) } @@ -13723,7 +13797,7 @@ yydefault: case 640: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL TableExpr -//line sql.y:3628 +//line sql.y:3629 { yyLOCAL = &JSONTableExpr{Expr: yyDollar[3].exprUnion(), Filter: yyDollar[5].exprUnion(), Columns: yyDollar[6].jtColumnListUnion(), Alias: yyDollar[8].identifierCS} } @@ -13731,7 +13805,7 @@ yydefault: case 641: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL []*JtColumnDefinition -//line sql.y:3634 +//line sql.y:3635 { yyLOCAL = yyDollar[3].jtColumnListUnion() } @@ -13739,14 +13813,14 @@ yydefault: case 642: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*JtColumnDefinition -//line sql.y:3640 +//line sql.y:3641 { yyLOCAL = []*JtColumnDefinition{yyDollar[1].jtColumnDefinitionUnion()} } yyVAL.union = yyLOCAL case 643: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3644 +//line sql.y:3645 { yySLICE := (*[]*JtColumnDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].jtColumnDefinitionUnion()) @@ -13754,7 +13828,7 @@ yydefault: case 644: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3650 +//line sql.y:3651 { yyLOCAL = &JtColumnDefinition{JtOrdinal: &JtOrdinalColDef{Name: yyDollar[1].identifierCI}} } @@ -13762,7 +13836,7 @@ yydefault: case 645: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3654 +//line sql.y:3655 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion()} @@ -13772,7 +13846,7 @@ yydefault: case 646: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3660 +//line sql.y:3661 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()} @@ -13782,7 +13856,7 @@ yydefault: case 647: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3666 +//line sql.y:3667 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()} @@ -13792,7 +13866,7 @@ yydefault: case 648: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3672 +//line sql.y:3673 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()} @@ -13802,7 +13876,7 @@ yydefault: case 649: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3678 +//line sql.y:3679 { jtNestedPath := &JtNestedPathColDef{Path: yyDollar[3].exprUnion(), Columns: yyDollar[4].jtColumnListUnion()} yyLOCAL = &JtColumnDefinition{JtNestedPath: jtNestedPath} @@ -13811,7 +13885,7 @@ yydefault: case 650: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3684 +//line sql.y:3685 { yyLOCAL = false } @@ -13819,7 +13893,7 @@ yydefault: case 651: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3688 +//line sql.y:3689 { yyLOCAL = true } @@ -13827,7 +13901,7 @@ yydefault: case 652: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3692 +//line sql.y:3693 { yyLOCAL = false } @@ -13835,7 +13909,7 @@ yydefault: case 653: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3696 +//line sql.y:3697 { yyLOCAL = true } @@ -13843,7 +13917,7 @@ yydefault: case 654: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3702 +//line sql.y:3703 { yyLOCAL = yyDollar[1].jtOnResponseUnion() } @@ -13851,7 +13925,7 @@ yydefault: case 655: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3708 +//line sql.y:3709 { yyLOCAL = yyDollar[1].jtOnResponseUnion() } @@ -13859,7 +13933,7 @@ yydefault: case 656: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3714 +//line sql.y:3715 { yyLOCAL = &JtOnResponse{ResponseType: ErrorJSONType} } @@ -13867,7 +13941,7 @@ yydefault: case 657: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3718 +//line sql.y:3719 { yyLOCAL = &JtOnResponse{ResponseType: NullJSONType} } @@ -13875,7 +13949,7 @@ yydefault: case 658: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3722 +//line sql.y:3723 { yyLOCAL = &JtOnResponse{ResponseType: DefaultJSONType, Expr: yyDollar[2].exprUnion()} } @@ -13883,7 +13957,7 @@ yydefault: case 659: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL PartitionByType -//line sql.y:3728 +//line sql.y:3729 { yyLOCAL = RangeType } @@ -13891,7 +13965,7 @@ yydefault: case 660: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL PartitionByType -//line sql.y:3732 +//line sql.y:3733 { yyLOCAL = ListType } @@ -13899,7 +13973,7 @@ yydefault: case 661: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:3737 +//line sql.y:3738 { yyLOCAL = -1 } @@ -13907,7 +13981,7 @@ yydefault: case 662: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL int -//line sql.y:3741 +//line sql.y:3742 { yyLOCAL = convertStringToInt(yyDollar[2].str) } @@ -13915,7 +13989,7 @@ yydefault: case 663: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:3746 +//line sql.y:3747 { yyLOCAL = -1 } @@ -13923,7 +13997,7 @@ yydefault: case 664: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL int -//line sql.y:3750 +//line sql.y:3751 { yyLOCAL = convertStringToInt(yyDollar[2].str) } @@ -13931,7 +14005,7 @@ yydefault: case 665: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3756 +//line sql.y:3757 { yyLOCAL = &PartitionSpec{Action: AddAction, Definitions: []*PartitionDefinition{yyDollar[4].partDefUnion()}} } @@ -13939,7 +14013,7 @@ yydefault: case 666: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3760 +//line sql.y:3761 { yyLOCAL = &PartitionSpec{Action: DropAction, Names: yyDollar[3].partitionsUnion()} } @@ -13947,7 +14021,7 @@ yydefault: case 667: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3764 +//line sql.y:3765 { yyLOCAL = &PartitionSpec{Action: ReorganizeAction, Names: yyDollar[3].partitionsUnion(), Definitions: yyDollar[6].partDefsUnion()} } @@ -13955,7 +14029,7 @@ yydefault: case 668: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3768 +//line sql.y:3769 { yyLOCAL = &PartitionSpec{Action: DiscardAction, Names: yyDollar[3].partitionsUnion()} } @@ -13963,7 +14037,7 @@ yydefault: case 669: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3772 +//line sql.y:3773 { yyLOCAL = &PartitionSpec{Action: DiscardAction, IsAll: true} } @@ -13971,7 +14045,7 @@ yydefault: case 670: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3776 +//line sql.y:3777 { yyLOCAL = &PartitionSpec{Action: ImportAction, Names: yyDollar[3].partitionsUnion()} } @@ -13979,7 +14053,7 @@ yydefault: case 671: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3780 +//line sql.y:3781 { yyLOCAL = &PartitionSpec{Action: ImportAction, IsAll: true} } @@ -13987,7 +14061,7 @@ yydefault: case 672: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3784 +//line sql.y:3785 { yyLOCAL = &PartitionSpec{Action: TruncateAction, Names: yyDollar[3].partitionsUnion()} } @@ -13995,7 +14069,7 @@ yydefault: case 673: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3788 +//line sql.y:3789 { yyLOCAL = &PartitionSpec{Action: TruncateAction, IsAll: true} } @@ -14003,7 +14077,7 @@ yydefault: case 674: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3792 +//line sql.y:3793 { yyLOCAL = &PartitionSpec{Action: CoalesceAction, Number: NewIntLiteral(yyDollar[3].str)} } @@ -14011,7 +14085,7 @@ yydefault: case 675: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3796 +//line sql.y:3797 { yyLOCAL = &PartitionSpec{Action: ExchangeAction, Names: Partitions{yyDollar[3].identifierCI}, TableName: yyDollar[6].tableName, WithoutValidation: yyDollar[7].booleanUnion()} } @@ -14019,7 +14093,7 @@ yydefault: case 676: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3800 +//line sql.y:3801 { yyLOCAL = &PartitionSpec{Action: AnalyzeAction, Names: yyDollar[3].partitionsUnion()} } @@ -14027,7 +14101,7 @@ yydefault: case 677: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3804 +//line sql.y:3805 { yyLOCAL = &PartitionSpec{Action: AnalyzeAction, IsAll: true} } @@ -14035,7 +14109,7 @@ yydefault: case 678: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3808 +//line sql.y:3809 { yyLOCAL = &PartitionSpec{Action: CheckAction, Names: yyDollar[3].partitionsUnion()} } @@ -14043,7 +14117,7 @@ yydefault: case 679: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3812 +//line sql.y:3813 { yyLOCAL = &PartitionSpec{Action: CheckAction, IsAll: true} } @@ -14051,7 +14125,7 @@ yydefault: case 680: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3816 +//line sql.y:3817 { yyLOCAL = &PartitionSpec{Action: OptimizeAction, Names: yyDollar[3].partitionsUnion()} } @@ -14059,7 +14133,7 @@ yydefault: case 681: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3820 +//line sql.y:3821 { yyLOCAL = &PartitionSpec{Action: OptimizeAction, IsAll: true} } @@ -14067,7 +14141,7 @@ yydefault: case 682: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3824 +//line sql.y:3825 { yyLOCAL = &PartitionSpec{Action: RebuildAction, Names: yyDollar[3].partitionsUnion()} } @@ -14075,7 +14149,7 @@ yydefault: case 683: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3828 +//line sql.y:3829 { yyLOCAL = &PartitionSpec{Action: RebuildAction, IsAll: true} } @@ -14083,7 +14157,7 @@ yydefault: case 684: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3832 +//line sql.y:3833 { yyLOCAL = &PartitionSpec{Action: RepairAction, Names: yyDollar[3].partitionsUnion()} } @@ -14091,7 +14165,7 @@ yydefault: case 685: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3836 +//line sql.y:3837 { yyLOCAL = &PartitionSpec{Action: RepairAction, IsAll: true} } @@ -14099,7 +14173,7 @@ yydefault: case 686: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3840 +//line sql.y:3841 { yyLOCAL = &PartitionSpec{Action: UpgradeAction} } @@ -14107,7 +14181,7 @@ yydefault: case 687: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3845 +//line sql.y:3846 { yyLOCAL = false } @@ -14115,7 +14189,7 @@ yydefault: case 688: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:3849 +//line sql.y:3850 { yyLOCAL = false } @@ -14123,7 +14197,7 @@ yydefault: case 689: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:3853 +//line sql.y:3854 { yyLOCAL = true } @@ -14131,28 +14205,28 @@ yydefault: case 690: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*PartitionDefinition -//line sql.y:3859 +//line sql.y:3860 { yyLOCAL = []*PartitionDefinition{yyDollar[1].partDefUnion()} } yyVAL.union = yyLOCAL case 691: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3863 +//line sql.y:3864 { yySLICE := (*[]*PartitionDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].partDefUnion()) } case 692: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3869 +//line sql.y:3870 { yyVAL.partDefUnion().Options = yyDollar[2].partitionDefinitionOptionsUnion() } case 693: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3874 +//line sql.y:3875 { yyLOCAL = &PartitionDefinitionOptions{} } @@ -14160,7 +14234,7 @@ yydefault: case 694: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3878 +//line sql.y:3879 { yyDollar[1].partitionDefinitionOptionsUnion().ValueRange = yyDollar[2].partitionValueRangeUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() @@ -14169,7 +14243,7 @@ yydefault: case 695: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3883 +//line sql.y:3884 { yyDollar[1].partitionDefinitionOptionsUnion().Comment = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() @@ -14178,7 +14252,7 @@ yydefault: case 696: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3888 +//line sql.y:3889 { yyDollar[1].partitionDefinitionOptionsUnion().Engine = yyDollar[2].partitionEngineUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() @@ -14187,7 +14261,7 @@ yydefault: case 697: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3893 +//line sql.y:3894 { yyDollar[1].partitionDefinitionOptionsUnion().DataDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() @@ -14196,7 +14270,7 @@ yydefault: case 698: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3898 +//line sql.y:3899 { yyDollar[1].partitionDefinitionOptionsUnion().IndexDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() @@ -14205,7 +14279,7 @@ yydefault: case 699: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3903 +//line sql.y:3904 { val := yyDollar[2].integerUnion() yyDollar[1].partitionDefinitionOptionsUnion().MaxRows = &val @@ -14215,7 +14289,7 @@ yydefault: case 700: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3909 +//line sql.y:3910 { val := yyDollar[2].integerUnion() yyDollar[1].partitionDefinitionOptionsUnion().MinRows = &val @@ -14225,7 +14299,7 @@ yydefault: case 701: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3915 +//line sql.y:3916 { yyDollar[1].partitionDefinitionOptionsUnion().TableSpace = yyDollar[2].str yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() @@ -14234,7 +14308,7 @@ yydefault: case 702: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3920 +//line sql.y:3921 { yyDollar[1].partitionDefinitionOptionsUnion().SubPartitionDefinitions = yyDollar[2].subPartitionDefinitionsUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() @@ -14243,7 +14317,7 @@ yydefault: case 703: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SubPartitionDefinitions -//line sql.y:3926 +//line sql.y:3927 { yyLOCAL = yyDollar[2].subPartitionDefinitionsUnion() } @@ -14251,14 +14325,14 @@ yydefault: case 704: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SubPartitionDefinitions -//line sql.y:3932 +//line sql.y:3933 { yyLOCAL = SubPartitionDefinitions{yyDollar[1].subPartitionDefinitionUnion()} } yyVAL.union = yyLOCAL case 705: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3936 +//line sql.y:3937 { yySLICE := (*SubPartitionDefinitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].subPartitionDefinitionUnion()) @@ -14266,7 +14340,7 @@ yydefault: case 706: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SubPartitionDefinition -//line sql.y:3942 +//line sql.y:3943 { yyLOCAL = &SubPartitionDefinition{Name: yyDollar[2].identifierCI, Options: yyDollar[3].subPartitionDefinitionOptionsUnion()} } @@ -14274,7 +14348,7 @@ yydefault: case 707: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3947 +//line sql.y:3948 { yyLOCAL = &SubPartitionDefinitionOptions{} } @@ -14282,7 +14356,7 @@ yydefault: case 708: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3951 +//line sql.y:3952 { yyDollar[1].subPartitionDefinitionOptionsUnion().Comment = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() @@ -14291,7 +14365,7 @@ yydefault: case 709: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3956 +//line sql.y:3957 { yyDollar[1].subPartitionDefinitionOptionsUnion().Engine = yyDollar[2].partitionEngineUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() @@ -14300,7 +14374,7 @@ yydefault: case 710: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3961 +//line sql.y:3962 { yyDollar[1].subPartitionDefinitionOptionsUnion().DataDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() @@ -14309,7 +14383,7 @@ yydefault: case 711: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3966 +//line sql.y:3967 { yyDollar[1].subPartitionDefinitionOptionsUnion().IndexDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() @@ -14318,7 +14392,7 @@ yydefault: case 712: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3971 +//line sql.y:3972 { val := yyDollar[2].integerUnion() yyDollar[1].subPartitionDefinitionOptionsUnion().MaxRows = &val @@ -14328,7 +14402,7 @@ yydefault: case 713: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3977 +//line sql.y:3978 { val := yyDollar[2].integerUnion() yyDollar[1].subPartitionDefinitionOptionsUnion().MinRows = &val @@ -14338,7 +14412,7 @@ yydefault: case 714: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3983 +//line sql.y:3984 { yyDollar[1].subPartitionDefinitionOptionsUnion().TableSpace = yyDollar[2].str yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() @@ -14347,7 +14421,7 @@ yydefault: case 715: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionValueRange -//line sql.y:3990 +//line sql.y:3991 { yyLOCAL = &PartitionValueRange{ Type: LessThanType, @@ -14358,7 +14432,7 @@ yydefault: case 716: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionValueRange -//line sql.y:3997 +//line sql.y:3998 { yyLOCAL = &PartitionValueRange{ Type: LessThanType, @@ -14369,7 +14443,7 @@ yydefault: case 717: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionValueRange -//line sql.y:4004 +//line sql.y:4005 { yyLOCAL = &PartitionValueRange{ Type: InType, @@ -14380,7 +14454,7 @@ yydefault: case 718: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4012 +//line sql.y:4013 { yyLOCAL = false } @@ -14388,7 +14462,7 @@ yydefault: case 719: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4016 +//line sql.y:4017 { yyLOCAL = true } @@ -14396,7 +14470,7 @@ yydefault: case 720: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionEngine -//line sql.y:4022 +//line sql.y:4023 { yyLOCAL = &PartitionEngine{Storage: yyDollar[1].booleanUnion(), Name: yyDollar[4].identifierCS.String()} } @@ -14404,7 +14478,7 @@ yydefault: case 721: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Literal -//line sql.y:4028 +//line sql.y:4029 { yyLOCAL = NewStrLiteral(yyDollar[3].str) } @@ -14412,7 +14486,7 @@ yydefault: case 722: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Literal -//line sql.y:4034 +//line sql.y:4035 { yyLOCAL = NewStrLiteral(yyDollar[4].str) } @@ -14420,7 +14494,7 @@ yydefault: case 723: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Literal -//line sql.y:4040 +//line sql.y:4041 { yyLOCAL = NewStrLiteral(yyDollar[4].str) } @@ -14428,7 +14502,7 @@ yydefault: case 724: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:4046 +//line sql.y:4047 { yyLOCAL = convertStringToInt(yyDollar[3].str) } @@ -14436,41 +14510,41 @@ yydefault: case 725: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:4052 +//line sql.y:4053 { yyLOCAL = convertStringToInt(yyDollar[3].str) } yyVAL.union = yyLOCAL case 726: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4058 +//line sql.y:4059 { yyVAL.str = yyDollar[3].identifierCS.String() } case 727: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinition -//line sql.y:4064 +//line sql.y:4065 { yyLOCAL = &PartitionDefinition{Name: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL case 728: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4070 +//line sql.y:4071 { yyVAL.str = "" } case 729: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4074 +//line sql.y:4075 { yyVAL.str = "" } case 730: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4080 +//line sql.y:4081 { yyLOCAL = &RenameTable{TablePairs: yyDollar[3].renameTablePairsUnion()} } @@ -14478,14 +14552,14 @@ yydefault: case 731: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*RenameTablePair -//line sql.y:4086 +//line sql.y:4087 { yyLOCAL = []*RenameTablePair{{FromTable: yyDollar[1].tableName, ToTable: yyDollar[3].tableName}} } yyVAL.union = yyLOCAL case 732: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:4090 +//line sql.y:4091 { yySLICE := (*[]*RenameTablePair)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, &RenameTablePair{FromTable: yyDollar[3].tableName, ToTable: yyDollar[5].tableName}) @@ -14493,7 +14567,7 @@ yydefault: case 733: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4096 +//line sql.y:4097 { yyLOCAL = &DropTable{FromTables: yyDollar[6].tableNamesUnion(), IfExists: yyDollar[5].booleanUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), Temp: yyDollar[3].booleanUnion()} } @@ -14501,7 +14575,7 @@ yydefault: case 734: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4100 +//line sql.y:4101 { // Change this to an alter statement if yyDollar[4].identifierCI.Lowered() == "primary" { @@ -14514,7 +14588,7 @@ yydefault: case 735: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:4109 +//line sql.y:4110 { yyLOCAL = &DropView{FromTables: yyDollar[5].tableNamesUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), IfExists: yyDollar[4].booleanUnion()} } @@ -14522,7 +14596,7 @@ yydefault: case 736: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4113 +//line sql.y:4114 { yyLOCAL = &DropDatabase{Comments: Comments(yyDollar[2].strs).Parsed(), DBName: yyDollar[5].identifierCS, IfExists: yyDollar[4].booleanUnion()} } @@ -14530,7 +14604,7 @@ yydefault: case 737: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4119 +//line sql.y:4120 { yyLOCAL = &TruncateTable{Table: yyDollar[3].tableName} } @@ -14538,7 +14612,7 @@ yydefault: case 738: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4123 +//line sql.y:4124 { yyLOCAL = &TruncateTable{Table: yyDollar[2].tableName} } @@ -14546,7 +14620,7 @@ yydefault: case 739: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4129 +//line sql.y:4130 { yyLOCAL = &OtherRead{} } @@ -14554,7 +14628,7 @@ yydefault: case 740: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4135 +//line sql.y:4136 { yyLOCAL = &CheckTable{Tables: yyDollar[3].tableNamesUnion(), Options: yyDollar[4].checkOptionsUnion()} } @@ -14562,14 +14636,14 @@ yydefault: case 741: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableNames -//line sql.y:4141 +//line sql.y:4142 { yyLOCAL = TableNames{yyDollar[1].tableName} } yyVAL.union = yyLOCAL case 742: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4145 +//line sql.y:4146 { yySLICE := (*TableNames)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableName) @@ -14577,7 +14651,7 @@ yydefault: case 743: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4151 +//line sql.y:4152 { yyLOCAL = &Kill{Type: KillConnection, ConnID: NewIntLiteral(yyDollar[2].str)} } @@ -14585,7 +14659,7 @@ yydefault: case 744: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4155 +//line sql.y:4156 { yyLOCAL = &Kill{Type: KillQuery, ConnID: NewIntLiteral(yyDollar[3].str)} } @@ -14593,7 +14667,7 @@ yydefault: case 745: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4159 +//line sql.y:4160 { yyLOCAL = &Kill{Type: KillConnection, ConnID: NewIntLiteral(yyDollar[3].str)} } @@ -14601,7 +14675,7 @@ yydefault: case 746: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4165 +//line sql.y:4166 { yyLOCAL = &Reload{Type: ReloadUsers} } @@ -14609,7 +14683,7 @@ yydefault: case 747: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4169 +//line sql.y:4170 { yyLOCAL = &Reload{Type: ReloadPrivileges} } @@ -14617,7 +14691,7 @@ yydefault: case 748: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4175 +//line sql.y:4176 { yyLOCAL = &Show{&ShowBasic{Command: Charset, Filter: yyDollar[3].showFilterUnion()}} } @@ -14625,7 +14699,7 @@ yydefault: case 749: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4179 +//line sql.y:4180 { yyLOCAL = &Show{&ShowBasic{Command: LastSeenGTID}} } @@ -14633,7 +14707,7 @@ yydefault: case 750: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4183 +//line sql.y:4184 { yyLOCAL = &Show{&ShowBasic{Command: FailPoints}} } @@ -14641,7 +14715,7 @@ yydefault: case 751: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4187 +//line sql.y:4188 { yyLOCAL = &Show{&ShowBasic{Command: Collation, Filter: yyDollar[3].showFilterUnion()}} } @@ -14649,7 +14723,7 @@ yydefault: case 752: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4191 +//line sql.y:4192 { yyLOCAL = &Show{&ShowBasic{Full: yyDollar[2].booleanUnion(), Command: Column, Tbl: yyDollar[5].tableName, DbName: yyDollar[6].identifierCS, Filter: yyDollar[7].showFilterUnion()}} } @@ -14657,7 +14731,7 @@ yydefault: case 753: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4195 +//line sql.y:4196 { yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}} } @@ -14665,7 +14739,7 @@ yydefault: case 754: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4199 +//line sql.y:4200 { yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}} } @@ -14673,7 +14747,7 @@ yydefault: case 755: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4203 +//line sql.y:4204 { yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}} } @@ -14681,7 +14755,7 @@ yydefault: case 756: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4207 +//line sql.y:4208 { yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}} } @@ -14689,7 +14763,7 @@ yydefault: case 757: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4211 +//line sql.y:4212 { yyLOCAL = &Show{&ShowBasic{Command: Function, Filter: yyDollar[4].showFilterUnion()}} } @@ -14697,7 +14771,7 @@ yydefault: case 758: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4215 +//line sql.y:4216 { yyLOCAL = &Show{&ShowBasic{Command: Index, Tbl: yyDollar[5].tableName, DbName: yyDollar[6].identifierCS, Filter: yyDollar[7].showFilterUnion()}} } @@ -14705,7 +14779,7 @@ yydefault: case 759: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4219 +//line sql.y:4220 { yyLOCAL = &Show{&ShowBasic{Command: OpenTable, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } @@ -14713,7 +14787,7 @@ yydefault: case 760: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4223 +//line sql.y:4224 { yyLOCAL = &Show{&ShowBasic{Command: Privilege}} } @@ -14721,7 +14795,7 @@ yydefault: case 761: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4227 +//line sql.y:4228 { yyLOCAL = &Show{&ShowBasic{Command: Procedure, Filter: yyDollar[4].showFilterUnion()}} } @@ -14729,7 +14803,7 @@ yydefault: case 762: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4231 +//line sql.y:4232 { yyLOCAL = &Show{&ShowBasic{Command: StatusSession, Filter: yyDollar[4].showFilterUnion()}} } @@ -14737,7 +14811,7 @@ yydefault: case 763: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4235 +//line sql.y:4236 { yyLOCAL = &Show{&ShowBasic{Command: StatusGlobal, Filter: yyDollar[4].showFilterUnion()}} } @@ -14745,7 +14819,7 @@ yydefault: case 764: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4239 +//line sql.y:4240 { yyLOCAL = &Show{&ShowBasic{Command: VariableSession, Filter: yyDollar[4].showFilterUnion()}} } @@ -14753,7 +14827,7 @@ yydefault: case 765: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4243 +//line sql.y:4244 { yyLOCAL = &Show{&ShowBasic{Command: VariableGlobal, Filter: yyDollar[4].showFilterUnion()}} } @@ -14761,7 +14835,7 @@ yydefault: case 766: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4247 +//line sql.y:4248 { yyLOCAL = &Show{&ShowBasic{Command: TableStatus, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } @@ -14769,7 +14843,7 @@ yydefault: case 767: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4251 +//line sql.y:4252 { yyLOCAL = &Show{&ShowBasic{Command: Table, Full: yyDollar[2].booleanUnion(), DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } @@ -14777,7 +14851,7 @@ yydefault: case 768: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4255 +//line sql.y:4256 { yyLOCAL = &Show{&ShowBasic{Command: Trigger, DbName: yyDollar[3].identifierCS, Filter: yyDollar[4].showFilterUnion()}} } @@ -14785,7 +14859,7 @@ yydefault: case 769: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4259 +//line sql.y:4260 { yyLOCAL = &Show{&ShowCreate{Command: CreateDb, Op: yyDollar[4].tableName}} } @@ -14793,7 +14867,7 @@ yydefault: case 770: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4263 +//line sql.y:4264 { yyLOCAL = &Show{&ShowCreate{Command: CreateE, Op: yyDollar[4].tableName}} } @@ -14801,7 +14875,7 @@ yydefault: case 771: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4267 +//line sql.y:4268 { yyLOCAL = &Show{&ShowCreate{Command: CreateF, Op: yyDollar[4].tableName}} } @@ -14809,7 +14883,7 @@ yydefault: case 772: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4271 +//line sql.y:4272 { yyLOCAL = &Show{&ShowCreate{Command: CreateProc, Op: yyDollar[4].tableName}} } @@ -14817,7 +14891,7 @@ yydefault: case 773: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4275 +//line sql.y:4276 { yyLOCAL = &Show{&ShowCreate{Command: CreateTbl, Op: yyDollar[4].tableName}} } @@ -14825,7 +14899,7 @@ yydefault: case 774: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4279 +//line sql.y:4280 { yyLOCAL = &Show{&ShowCreate{Command: CreateTr, Op: yyDollar[4].tableName}} } @@ -14833,7 +14907,7 @@ yydefault: case 775: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4283 +//line sql.y:4284 { yyLOCAL = &Show{&ShowCreate{Command: CreateV, Op: yyDollar[4].tableName}} } @@ -14841,7 +14915,7 @@ yydefault: case 776: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4287 +//line sql.y:4288 { yyLOCAL = &Show{&ShowBasic{Command: Engines}} } @@ -14849,7 +14923,7 @@ yydefault: case 777: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4291 +//line sql.y:4292 { yyLOCAL = &Show{&ShowBasic{Command: Plugins}} } @@ -14857,7 +14931,7 @@ yydefault: case 778: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4295 +//line sql.y:4296 { yyLOCAL = &Show{&ShowBasic{Command: GtidExecGlobal, DbName: yyDollar[4].identifierCS}} } @@ -14865,7 +14939,7 @@ yydefault: case 779: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4299 +//line sql.y:4300 { yyLOCAL = &Show{&ShowBasic{Command: VGtidExecGlobal, DbName: yyDollar[4].identifierCS}} } @@ -14873,7 +14947,7 @@ yydefault: case 780: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4303 +//line sql.y:4304 { yyLOCAL = &Show{&ShowBasic{Command: VitessVariables, Filter: yyDollar[4].showFilterUnion()}} } @@ -14881,7 +14955,7 @@ yydefault: case 781: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4307 +//line sql.y:4308 { yyLOCAL = &Show{&ShowBasic{Command: VitessMigrations, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}} } @@ -14889,7 +14963,7 @@ yydefault: case 782: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4311 +//line sql.y:4312 { yyLOCAL = &Show{&ShowBasic{Command: VitessMigrations, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}} } @@ -14897,1050 +14971,1058 @@ yydefault: case 783: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4315 +//line sql.y:4316 { - yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)} + yyLOCAL = &Show{&ShowBasic{Command: DMLJobs, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL case 784: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4319 +//line sql.y:4320 { yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL case 785: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Statement +//line sql.y:4324 + { + yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)} + } + yyVAL.union = yyLOCAL + case 786: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4323 +//line sql.y:4328 { yyLOCAL = &ShowThrottledApps{} } yyVAL.union = yyLOCAL - case 786: + case 787: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4327 +//line sql.y:4332 { yyLOCAL = &Show{&ShowBasic{Command: VitessReplicationStatus, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 787: + case 788: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4331 +//line sql.y:4336 { yyLOCAL = &ShowThrottlerStatus{} } yyVAL.union = yyLOCAL - case 788: + case 789: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4335 +//line sql.y:4340 { yyLOCAL = &Show{&ShowBasic{Command: VschemaTables}} } yyVAL.union = yyLOCAL - case 789: + case 790: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4339 +//line sql.y:4344 { yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes}} } yyVAL.union = yyLOCAL - case 790: + case 791: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4343 +//line sql.y:4348 { yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes, Tbl: yyDollar[5].tableName}} } yyVAL.union = yyLOCAL - case 791: + case 792: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4347 +//line sql.y:4352 { yyLOCAL = &Show{&ShowBasic{Command: Warnings}} } yyVAL.union = yyLOCAL - case 792: + case 793: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4351 +//line sql.y:4356 { yyLOCAL = &Show{&ShowBasic{Command: VitessShards, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 793: + case 794: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4355 +//line sql.y:4360 { yyLOCAL = &Show{&ShowBasic{Command: VitessTablets, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 794: + case 795: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4359 +//line sql.y:4364 { yyLOCAL = &Show{&ShowBasic{Command: VitessTarget}} } yyVAL.union = yyLOCAL - case 795: + case 796: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4363 +//line sql.y:4368 { yyLOCAL = &Show{&ShowBasic{Command: Workload}} } yyVAL.union = yyLOCAL - case 796: + case 797: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4370 +//line sql.y:4375 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].identifierCI.String())}} } yyVAL.union = yyLOCAL - case 797: + case 798: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4374 +//line sql.y:4379 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL - case 798: + case 799: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4378 +//line sql.y:4383 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String()}} } yyVAL.union = yyLOCAL - case 799: + case 800: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4382 +//line sql.y:4387 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL - case 800: + case 801: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4386 +//line sql.y:4391 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}} } yyVAL.union = yyLOCAL - case 801: + case 802: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4390 +//line sql.y:4395 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}} } yyVAL.union = yyLOCAL - case 802: + case 803: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4394 +//line sql.y:4399 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}} } yyVAL.union = yyLOCAL - case 803: + case 804: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4398 +//line sql.y:4403 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL - case 804: + case 805: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4402 +//line sql.y:4407 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}} } yyVAL.union = yyLOCAL - case 805: + case 806: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4408 +//line sql.y:4413 { yyVAL.str = "" } - case 806: + case 807: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4412 +//line sql.y:4417 { yyVAL.str = "extended " } - case 807: + case 808: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4418 +//line sql.y:4423 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 808: + case 809: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4422 +//line sql.y:4427 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 809: + case 810: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4428 +//line sql.y:4433 { yyVAL.str = string(yyDollar[1].str) } - case 810: + case 811: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4432 +//line sql.y:4437 { yyVAL.str = string(yyDollar[1].str) } - case 811: + case 812: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4438 +//line sql.y:4443 { yyVAL.identifierCS = NewIdentifierCS("") } - case 812: + case 813: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4442 +//line sql.y:4447 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 813: + case 814: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4446 +//line sql.y:4451 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 814: + case 815: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4452 +//line sql.y:4457 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 815: + case 816: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4456 +//line sql.y:4461 { yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 816: + case 817: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4460 +//line sql.y:4465 { yyLOCAL = &ShowFilter{Filter: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 817: + case 818: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4466 +//line sql.y:4471 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 818: + case 819: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4470 +//line sql.y:4475 { yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 819: + case 820: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4476 +//line sql.y:4481 { yyVAL.empty = struct{}{} } - case 820: + case 821: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4480 +//line sql.y:4485 { yyVAL.empty = struct{}{} } - case 821: + case 822: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4484 +//line sql.y:4489 { yyVAL.empty = struct{}{} } - case 822: + case 823: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4490 +//line sql.y:4495 { yyVAL.str = string(yyDollar[1].str) } - case 823: + case 824: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4494 +//line sql.y:4499 { yyVAL.str = string(yyDollar[1].str) } - case 824: + case 825: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4500 +//line sql.y:4505 { yyLOCAL = &Use{DBName: yyDollar[2].identifierCS} } yyVAL.union = yyLOCAL - case 825: + case 826: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4504 +//line sql.y:4509 { yyLOCAL = &Use{DBName: IdentifierCS{v: ""}} } yyVAL.union = yyLOCAL - case 826: + case 827: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4508 +//line sql.y:4513 { yyLOCAL = &Use{DBName: NewIdentifierCS(yyDollar[2].identifierCS.String() + "@" + string(yyDollar[3].str))} } yyVAL.union = yyLOCAL - case 827: + case 828: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4515 +//line sql.y:4520 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 828: + case 829: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4519 +//line sql.y:4524 { yyVAL.identifierCS = NewIdentifierCS("@" + string(yyDollar[1].str)) } - case 829: + case 830: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4523 +//line sql.y:4528 { yyVAL.identifierCS = NewIdentifierCS("@@" + string(yyDollar[1].str)) } - case 830: + case 831: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4527 +//line sql.y:4532 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 831: + case 832: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4534 +//line sql.y:4539 { yyLOCAL = &Begin{} } yyVAL.union = yyLOCAL - case 832: + case 833: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4538 +//line sql.y:4543 { yyLOCAL = &Begin{TxAccessModes: yyDollar[3].txAccessModesUnion()} } yyVAL.union = yyLOCAL - case 833: + case 834: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4543 +//line sql.y:4548 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 834: + case 835: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4547 +//line sql.y:4552 { yyLOCAL = yyDollar[1].txAccessModesUnion() } yyVAL.union = yyLOCAL - case 835: + case 836: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4553 +//line sql.y:4558 { yyLOCAL = []TxAccessMode{yyDollar[1].txAccessModeUnion()} } yyVAL.union = yyLOCAL - case 836: + case 837: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4557 +//line sql.y:4562 { yySLICE := (*[]TxAccessMode)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].txAccessModeUnion()) } - case 837: + case 838: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4563 +//line sql.y:4568 { yyLOCAL = WithConsistentSnapshot } yyVAL.union = yyLOCAL - case 838: + case 839: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4567 +//line sql.y:4572 { yyLOCAL = ReadWrite } yyVAL.union = yyLOCAL - case 839: + case 840: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4571 +//line sql.y:4576 { yyLOCAL = ReadOnly } yyVAL.union = yyLOCAL - case 840: + case 841: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4578 +//line sql.y:4583 { yyLOCAL = &Commit{} } yyVAL.union = yyLOCAL - case 841: + case 842: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4584 +//line sql.y:4589 { yyLOCAL = &Rollback{} } yyVAL.union = yyLOCAL - case 842: + case 843: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4588 +//line sql.y:4593 { yyLOCAL = &SRollback{Name: yyDollar[5].identifierCI} } yyVAL.union = yyLOCAL - case 843: + case 844: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4593 +//line sql.y:4598 { yyVAL.empty = struct{}{} } - case 844: + case 845: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4595 +//line sql.y:4600 { yyVAL.empty = struct{}{} } - case 845: + case 846: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4598 +//line sql.y:4603 { yyVAL.empty = struct{}{} } - case 846: + case 847: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4600 +//line sql.y:4605 { yyVAL.empty = struct{}{} } - case 847: + case 848: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4604 +//line sql.y:4609 { yyLOCAL = &Savepoint{Name: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 848: + case 849: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4610 +//line sql.y:4615 { yyLOCAL = &Release{Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 849: + case 850: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4615 +//line sql.y:4620 { yyLOCAL = EmptyType } yyVAL.union = yyLOCAL - case 850: + case 851: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4619 +//line sql.y:4624 { yyLOCAL = JSONType } yyVAL.union = yyLOCAL - case 851: + case 852: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4623 +//line sql.y:4628 { yyLOCAL = TreeType } yyVAL.union = yyLOCAL - case 852: + case 853: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4627 +//line sql.y:4632 { yyLOCAL = VitessType } yyVAL.union = yyLOCAL - case 853: + case 854: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4631 +//line sql.y:4636 { yyLOCAL = VTExplainType } yyVAL.union = yyLOCAL - case 854: + case 855: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4635 +//line sql.y:4640 { yyLOCAL = TraditionalType } yyVAL.union = yyLOCAL - case 855: + case 856: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4639 +//line sql.y:4644 { yyLOCAL = AnalyzeType } yyVAL.union = yyLOCAL - case 856: + case 857: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4644 +//line sql.y:4649 { yyLOCAL = PlanVExplainType } yyVAL.union = yyLOCAL - case 857: + case 858: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4648 +//line sql.y:4653 { yyLOCAL = PlanVExplainType } yyVAL.union = yyLOCAL - case 858: + case 859: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4652 +//line sql.y:4657 { yyLOCAL = AllVExplainType } yyVAL.union = yyLOCAL - case 859: + case 860: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4656 +//line sql.y:4661 { yyLOCAL = QueriesVExplainType } yyVAL.union = yyLOCAL - case 860: + case 861: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4662 +//line sql.y:4667 { yyVAL.str = yyDollar[1].str } - case 861: + case 862: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4666 +//line sql.y:4671 { yyVAL.str = yyDollar[1].str } - case 862: + case 863: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4670 +//line sql.y:4675 { yyVAL.str = yyDollar[1].str } - case 863: + case 864: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4676 +//line sql.y:4681 { yyLOCAL = yyDollar[1].selStmtUnion() } yyVAL.union = yyLOCAL - case 864: + case 865: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4680 +//line sql.y:4685 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 865: + case 866: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4684 +//line sql.y:4689 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 866: + case 867: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4688 +//line sql.y:4693 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 867: + case 868: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4693 +//line sql.y:4698 { yyVAL.str = "" } - case 868: + case 869: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4697 +//line sql.y:4702 { yyVAL.str = yyDollar[1].identifierCI.val } - case 869: + case 870: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4701 +//line sql.y:4706 { yyVAL.str = encodeSQLString(yyDollar[1].str) } - case 870: + case 871: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4707 +//line sql.y:4712 { yyLOCAL = &ExplainTab{Table: yyDollar[3].tableName, Wild: yyDollar[4].str} } yyVAL.union = yyLOCAL - case 871: + case 872: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4711 +//line sql.y:4716 { yyLOCAL = &ExplainStmt{Type: yyDollar[3].explainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()} } yyVAL.union = yyLOCAL - case 872: + case 873: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4717 +//line sql.y:4722 { yyLOCAL = &VExplainStmt{Type: yyDollar[3].vexplainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()} } yyVAL.union = yyLOCAL - case 873: + case 874: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4723 +//line sql.y:4728 { yyLOCAL = &OtherAdmin{} } yyVAL.union = yyLOCAL - case 874: + case 875: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4727 +//line sql.y:4732 { yyLOCAL = &OtherAdmin{} } yyVAL.union = yyLOCAL - case 875: + case 876: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4733 +//line sql.y:4738 { yyLOCAL = &LockTables{Tables: yyDollar[3].tableAndLockTypesUnion()} } yyVAL.union = yyLOCAL - case 876: + case 877: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableAndLockTypes -//line sql.y:4739 +//line sql.y:4744 { yyLOCAL = TableAndLockTypes{yyDollar[1].tableAndLockTypeUnion()} } yyVAL.union = yyLOCAL - case 877: + case 878: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4743 +//line sql.y:4748 { yySLICE := (*TableAndLockTypes)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableAndLockTypeUnion()) } - case 878: + case 879: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *TableAndLockType -//line sql.y:4749 +//line sql.y:4754 { yyLOCAL = &TableAndLockType{Table: yyDollar[1].aliasedTableNameUnion(), Lock: yyDollar[2].lockTypeUnion()} } yyVAL.union = yyLOCAL - case 879: + case 880: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LockType -//line sql.y:4755 +//line sql.y:4760 { yyLOCAL = Read } yyVAL.union = yyLOCAL - case 880: + case 881: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL LockType -//line sql.y:4759 +//line sql.y:4764 { yyLOCAL = ReadLocal } yyVAL.union = yyLOCAL - case 881: + case 882: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LockType -//line sql.y:4763 +//line sql.y:4768 { yyLOCAL = Write } yyVAL.union = yyLOCAL - case 882: + case 883: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL LockType -//line sql.y:4767 +//line sql.y:4772 { yyLOCAL = LowPriorityWrite } yyVAL.union = yyLOCAL - case 883: + case 884: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4773 +//line sql.y:4778 { yyLOCAL = &UnlockTables{} } yyVAL.union = yyLOCAL - case 884: + case 885: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4779 +//line sql.y:4784 { yyLOCAL = &RevertMigration{Comments: Comments(yyDollar[2].strs).Parsed(), UUID: string(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 885: + case 886: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4783 +//line sql.y:4788 { yyLOCAL = &RevertMigration{Comments: Comments(yyDollar[2].strs).Parsed(), UUID: string(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 886: + case 887: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4789 +//line sql.y:4794 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), FlushOptions: yyDollar[3].strs} } yyVAL.union = yyLOCAL - case 887: + case 888: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4793 +//line sql.y:4798 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion()} } yyVAL.union = yyLOCAL - case 888: + case 889: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:4797 +//line sql.y:4802 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), WithLock: true} } yyVAL.union = yyLOCAL - case 889: + case 890: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4801 +//line sql.y:4806 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion()} } yyVAL.union = yyLOCAL - case 890: + case 891: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4805 +//line sql.y:4810 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), WithLock: true} } yyVAL.union = yyLOCAL - case 891: + case 892: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:4809 +//line sql.y:4814 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), ForExport: true} } yyVAL.union = yyLOCAL - case 892: + case 893: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4815 +//line sql.y:4820 { yyVAL.strs = []string{yyDollar[1].str} } - case 893: + case 894: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4819 +//line sql.y:4824 { yyVAL.strs = append(yyDollar[1].strs, yyDollar[3].str) } - case 894: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4825 - { - yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) - } case 895: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4829 +//line sql.y:4830 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 896: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4833 +//line sql.y:4834 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 897: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4837 +//line sql.y:4838 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 898: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4841 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:4842 { - yyVAL.str = string(yyDollar[1].str) + yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 899: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4845 +//line sql.y:4846 { yyVAL.str = string(yyDollar[1].str) } case 900: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4849 +//line sql.y:4850 { yyVAL.str = string(yyDollar[1].str) } case 901: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4853 +//line sql.y:4854 { yyVAL.str = string(yyDollar[1].str) } case 902: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:4858 + { + yyVAL.str = string(yyDollar[1].str) + } + case 903: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4857 +//line sql.y:4862 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) + yyDollar[3].str } - case 903: + case 904: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4861 +//line sql.y:4866 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 904: + case 905: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4865 +//line sql.y:4870 { yyVAL.str = string(yyDollar[1].str) } - case 905: + case 906: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4869 +//line sql.y:4874 { yyVAL.str = string(yyDollar[1].str) } - case 906: + case 907: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4873 +//line sql.y:4878 { yyVAL.str = string(yyDollar[1].str) } - case 907: + case 908: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4878 +//line sql.y:4883 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 908: + case 909: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4882 +//line sql.y:4887 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 909: + case 910: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4886 +//line sql.y:4891 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 910: + case 911: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4891 +//line sql.y:4896 { yyVAL.str = "" } - case 911: + case 912: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4895 +//line sql.y:4900 { yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String() } - case 912: + case 913: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4900 +//line sql.y:4905 { setAllowComments(yylex, true) } - case 913: + case 914: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4904 +//line sql.y:4909 { yyVAL.strs = yyDollar[2].strs setAllowComments(yylex, false) } - case 914: + case 915: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4910 +//line sql.y:4915 { yyVAL.strs = nil } - case 915: + case 916: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4914 +//line sql.y:4919 { yyVAL.strs = append(yyDollar[1].strs, yyDollar[2].str) } - case 916: + case 917: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4920 +//line sql.y:4925 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 917: + case 918: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:4924 +//line sql.y:4929 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 918: + case 919: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:4928 +//line sql.y:4933 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 919: + case 920: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4933 +//line sql.y:4938 { yyVAL.str = "" } - case 920: + case 921: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4937 +//line sql.y:4942 { yyVAL.str = SQLNoCacheStr } - case 921: + case 922: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4941 +//line sql.y:4946 { yyVAL.str = SQLCacheStr } - case 922: + case 923: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4946 +//line sql.y:4951 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 923: + case 924: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4950 +//line sql.y:4955 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 924: + case 925: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4954 +//line sql.y:4959 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 925: + case 926: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4960 +//line sql.y:4965 { yyLOCAL = &PrepareStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Statement: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 926: + case 927: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4964 +//line sql.y:4969 { yyLOCAL = &PrepareStmt{ Name: yyDollar[3].identifierCI, @@ -15949,595 +16031,595 @@ yydefault: } } yyVAL.union = yyLOCAL - case 927: + case 928: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4974 +//line sql.y:4979 { yyLOCAL = &ExecuteStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Arguments: yyDollar[4].variablesUnion()} } yyVAL.union = yyLOCAL - case 928: + case 929: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*Variable -//line sql.y:4979 +//line sql.y:4984 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 929: + case 930: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []*Variable -//line sql.y:4983 +//line sql.y:4988 { yyLOCAL = yyDollar[2].variablesUnion() } yyVAL.union = yyLOCAL - case 930: + case 931: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4989 +//line sql.y:4994 { yyLOCAL = &DeallocateStmt{Type: DeallocateType, Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI} } yyVAL.union = yyLOCAL - case 931: + case 932: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4993 +//line sql.y:4998 { yyLOCAL = &DeallocateStmt{Type: DropType, Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI} } yyVAL.union = yyLOCAL - case 932: + case 933: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL SelectExprs -//line sql.y:4998 +//line sql.y:5003 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 933: + case 934: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExprs -//line sql.y:5002 +//line sql.y:5007 { yyLOCAL = yyDollar[1].selectExprsUnion() } yyVAL.union = yyLOCAL - case 934: + case 935: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5007 +//line sql.y:5012 { yyVAL.strs = nil } - case 935: + case 936: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5011 +//line sql.y:5016 { yyVAL.strs = []string{yyDollar[1].str} } - case 936: + case 937: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5015 +//line sql.y:5020 { // TODO: This is a hack since I couldn't get it to work in a nicer way. I got 'conflicts: 8 shift/reduce' yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str} } - case 937: + case 938: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5019 +//line sql.y:5024 { yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str} } - case 938: + case 939: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:5023 +//line sql.y:5028 { yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str, yyDollar[4].str} } - case 939: + case 940: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5029 +//line sql.y:5034 { yyVAL.str = SQLNoCacheStr } - case 940: + case 941: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5033 +//line sql.y:5038 { yyVAL.str = SQLCacheStr } - case 941: + case 942: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5037 +//line sql.y:5042 { yyVAL.str = DistinctStr } - case 942: + case 943: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5041 +//line sql.y:5046 { yyVAL.str = DistinctStr } - case 943: + case 944: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5045 +//line sql.y:5050 { yyVAL.str = StraightJoinHint } - case 944: + case 945: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5049 +//line sql.y:5054 { yyVAL.str = SQLCalcFoundRowsStr } - case 945: + case 946: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5053 +//line sql.y:5058 { yyVAL.str = AllStr // These are not picked up by NewSelect, and so ALL will be dropped. But this is OK, since it's redundant anyway } - case 946: + case 947: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExprs -//line sql.y:5059 +//line sql.y:5064 { yyLOCAL = SelectExprs{yyDollar[1].selectExprUnion()} } yyVAL.union = yyLOCAL - case 947: + case 948: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5063 +//line sql.y:5068 { yySLICE := (*SelectExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].selectExprUnion()) } - case 948: + case 949: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5069 +//line sql.y:5074 { yyLOCAL = &StarExpr{} } yyVAL.union = yyLOCAL - case 949: + case 950: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5073 +//line sql.y:5078 { yyLOCAL = &AliasedExpr{Expr: yyDollar[1].exprUnion(), As: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 950: + case 951: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5077 +//line sql.y:5082 { yyLOCAL = &StarExpr{TableName: TableName{Name: yyDollar[1].identifierCS}} } yyVAL.union = yyLOCAL - case 951: + case 952: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5081 +//line sql.y:5086 { yyLOCAL = &StarExpr{TableName: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL - case 952: + case 953: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5086 +//line sql.y:5091 { yyVAL.identifierCI = IdentifierCI{} } - case 953: + case 954: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5090 +//line sql.y:5095 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 954: + case 955: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5094 +//line sql.y:5099 { yyVAL.identifierCI = yyDollar[2].identifierCI } - case 956: + case 957: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5101 +//line sql.y:5106 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 957: + case 958: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5106 +//line sql.y:5111 { yyLOCAL = TableExprs{&AliasedTableExpr{Expr: TableName{Name: NewIdentifierCS("dual")}}} } yyVAL.union = yyLOCAL - case 958: + case 959: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5110 +//line sql.y:5115 { yyLOCAL = yyDollar[1].tableExprsUnion() } yyVAL.union = yyLOCAL - case 959: + case 960: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5116 +//line sql.y:5121 { yyLOCAL = yyDollar[2].tableExprsUnion() } yyVAL.union = yyLOCAL - case 960: + case 961: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5122 +//line sql.y:5127 { yyLOCAL = TableExprs{yyDollar[1].tableExprUnion()} } yyVAL.union = yyLOCAL - case 961: + case 962: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5126 +//line sql.y:5131 { yySLICE := (*TableExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableExprUnion()) } - case 964: + case 965: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5136 +//line sql.y:5141 { yyLOCAL = yyDollar[1].aliasedTableNameUnion() } yyVAL.union = yyLOCAL - case 965: + case 966: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5140 +//line sql.y:5145 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].derivedTableUnion(), As: yyDollar[3].identifierCS, Columns: yyDollar[4].columnsUnion()} } yyVAL.union = yyLOCAL - case 966: + case 967: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5144 +//line sql.y:5149 { yyLOCAL = &ParenTableExpr{Exprs: yyDollar[2].tableExprsUnion()} } yyVAL.union = yyLOCAL - case 967: + case 968: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5148 +//line sql.y:5153 { yyLOCAL = yyDollar[1].tableExprUnion() } yyVAL.union = yyLOCAL - case 968: + case 969: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *DerivedTable -//line sql.y:5154 +//line sql.y:5159 { yyLOCAL = &DerivedTable{Lateral: false, Select: yyDollar[1].selStmtUnion()} } yyVAL.union = yyLOCAL - case 969: + case 970: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *DerivedTable -//line sql.y:5158 +//line sql.y:5163 { yyLOCAL = &DerivedTable{Lateral: true, Select: yyDollar[2].selStmtUnion()} } yyVAL.union = yyLOCAL - case 970: + case 971: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *AliasedTableExpr -//line sql.y:5164 +//line sql.y:5169 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, As: yyDollar[2].identifierCS, Hints: yyDollar[3].indexHintsUnion()} } yyVAL.union = yyLOCAL - case 971: + case 972: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *AliasedTableExpr -//line sql.y:5168 +//line sql.y:5173 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, Partitions: yyDollar[4].partitionsUnion(), As: yyDollar[6].identifierCS, Hints: yyDollar[7].indexHintsUnion()} } yyVAL.union = yyLOCAL - case 972: + case 973: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Columns -//line sql.y:5173 +//line sql.y:5178 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 973: + case 974: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Columns -//line sql.y:5177 +//line sql.y:5182 { yyLOCAL = yyDollar[2].columnsUnion() } yyVAL.union = yyLOCAL - case 974: + case 975: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Columns -//line sql.y:5182 +//line sql.y:5187 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 975: + case 976: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5186 +//line sql.y:5191 { yyLOCAL = yyDollar[1].columnsUnion() } yyVAL.union = yyLOCAL - case 976: + case 977: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5192 +//line sql.y:5197 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 977: + case 978: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5196 +//line sql.y:5201 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 978: + case 979: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*Variable -//line sql.y:5202 +//line sql.y:5207 { yyLOCAL = []*Variable{yyDollar[1].variableUnion()} } yyVAL.union = yyLOCAL - case 979: + case 980: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5206 +//line sql.y:5211 { yySLICE := (*[]*Variable)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].variableUnion()) } - case 980: + case 981: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5212 +//line sql.y:5217 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 981: + case 982: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5216 +//line sql.y:5221 { yyLOCAL = Columns{NewIdentifierCI(string(yyDollar[1].str))} } yyVAL.union = yyLOCAL - case 982: + case 983: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5220 +//line sql.y:5225 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 983: + case 984: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5224 +//line sql.y:5229 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, NewIdentifierCI(string(yyDollar[3].str))) } - case 984: + case 985: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Partitions -//line sql.y:5230 +//line sql.y:5235 { yyLOCAL = Partitions{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 985: + case 986: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5234 +//line sql.y:5239 { yySLICE := (*Partitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 986: + case 987: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5247 +//line sql.y:5252 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 987: + case 988: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5251 +//line sql.y:5256 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 988: + case 989: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5255 +//line sql.y:5260 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 989: + case 990: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5259 +//line sql.y:5264 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion()} } yyVAL.union = yyLOCAL - case 990: + case 991: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5265 +//line sql.y:5270 { yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()} } - case 991: + case 992: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:5267 +//line sql.y:5272 { yyVAL.joinCondition = &JoinCondition{Using: yyDollar[3].columnsUnion()} } - case 992: + case 993: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5271 +//line sql.y:5276 { yyVAL.joinCondition = &JoinCondition{} } - case 993: + case 994: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5273 +//line sql.y:5278 { yyVAL.joinCondition = yyDollar[1].joinCondition } - case 994: + case 995: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5277 +//line sql.y:5282 { yyVAL.joinCondition = &JoinCondition{} } - case 995: + case 996: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5279 +//line sql.y:5284 { yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()} } - case 996: + case 997: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5282 +//line sql.y:5287 { yyVAL.empty = struct{}{} } - case 997: + case 998: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5284 +//line sql.y:5289 { yyVAL.empty = struct{}{} } - case 998: + case 999: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5287 +//line sql.y:5292 { yyVAL.identifierCS = NewIdentifierCS("") } - case 999: + case 1000: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5291 +//line sql.y:5296 { yyVAL.identifierCS = yyDollar[1].identifierCS } - case 1000: + case 1001: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5295 +//line sql.y:5300 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 1002: + case 1003: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5302 +//line sql.y:5307 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1003: + case 1004: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL JoinType -//line sql.y:5308 +//line sql.y:5313 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 1004: + case 1005: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5312 +//line sql.y:5317 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 1005: + case 1006: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5316 +//line sql.y:5321 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 1006: + case 1007: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL JoinType -//line sql.y:5322 +//line sql.y:5327 { yyLOCAL = StraightJoinType } yyVAL.union = yyLOCAL - case 1007: + case 1008: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5328 +//line sql.y:5333 { yyLOCAL = LeftJoinType } yyVAL.union = yyLOCAL - case 1008: + case 1009: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL JoinType -//line sql.y:5332 +//line sql.y:5337 { yyLOCAL = LeftJoinType } yyVAL.union = yyLOCAL - case 1009: + case 1010: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5336 +//line sql.y:5341 { yyLOCAL = RightJoinType } yyVAL.union = yyLOCAL - case 1010: + case 1011: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL JoinType -//line sql.y:5340 +//line sql.y:5345 { yyLOCAL = RightJoinType } yyVAL.union = yyLOCAL - case 1011: + case 1012: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5346 +//line sql.y:5351 { yyLOCAL = NaturalJoinType } yyVAL.union = yyLOCAL - case 1012: + case 1013: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5350 +//line sql.y:5355 { if yyDollar[2].joinTypeUnion() == LeftJoinType { yyLOCAL = NaturalLeftJoinType @@ -16546,593 +16628,593 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1013: + case 1014: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5360 +//line sql.y:5365 { yyVAL.tableName = yyDollar[2].tableName } - case 1014: + case 1015: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5364 +//line sql.y:5369 { yyVAL.tableName = yyDollar[1].tableName } - case 1015: + case 1016: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5370 +//line sql.y:5375 { yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS} } - case 1016: + case 1017: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5374 +//line sql.y:5379 { yyVAL.tableName = TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS} } - case 1017: + case 1018: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5380 +//line sql.y:5385 { yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS} } - case 1018: + case 1019: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5385 +//line sql.y:5390 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1019: + case 1020: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5389 +//line sql.y:5394 { yyLOCAL = yyDollar[1].indexHintsUnion() } yyVAL.union = yyLOCAL - case 1020: + case 1021: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5395 +//line sql.y:5400 { yyLOCAL = IndexHints{yyDollar[1].indexHintUnion()} } yyVAL.union = yyLOCAL - case 1021: + case 1022: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5399 +//line sql.y:5404 { yySLICE := (*IndexHints)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].indexHintUnion()) } - case 1022: + case 1023: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5405 +//line sql.y:5410 { yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 1023: + case 1024: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5409 +//line sql.y:5414 { yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion()} } yyVAL.union = yyLOCAL - case 1024: + case 1025: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5413 +//line sql.y:5418 { yyLOCAL = &IndexHint{Type: IgnoreOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 1025: + case 1026: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5417 +//line sql.y:5422 { yyLOCAL = &IndexHint{Type: ForceOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 1026: + case 1027: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5422 +//line sql.y:5427 { yyLOCAL = NoForType } yyVAL.union = yyLOCAL - case 1027: + case 1028: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5426 +//line sql.y:5431 { yyLOCAL = JoinForType } yyVAL.union = yyLOCAL - case 1028: + case 1029: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5430 +//line sql.y:5435 { yyLOCAL = OrderByForType } yyVAL.union = yyLOCAL - case 1029: + case 1030: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5434 +//line sql.y:5439 { yyLOCAL = GroupByForType } yyVAL.union = yyLOCAL - case 1030: + case 1031: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:5440 +//line sql.y:5445 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1031: + case 1032: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5444 +//line sql.y:5449 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1032: + case 1033: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5451 +//line sql.y:5456 { yyLOCAL = &OrExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1033: + case 1034: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5455 +//line sql.y:5460 { yyLOCAL = &XorExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1034: + case 1035: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5459 +//line sql.y:5464 { yyLOCAL = &AndExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1035: + case 1036: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5463 +//line sql.y:5468 { yyLOCAL = &NotExpr{Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1036: + case 1037: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5467 +//line sql.y:5472 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].isExprOperatorUnion()} } yyVAL.union = yyLOCAL - case 1037: + case 1038: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5471 +//line sql.y:5476 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1038: + case 1039: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5475 +//line sql.y:5480 { yyLOCAL = &MemberOfExpr{Value: yyDollar[1].exprUnion(), JSONArr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1039: + case 1040: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5481 +//line sql.y:5486 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNullOp} } yyVAL.union = yyLOCAL - case 1040: + case 1041: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5485 +//line sql.y:5490 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNotNullOp} } yyVAL.union = yyLOCAL - case 1041: + case 1042: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5489 +//line sql.y:5494 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1042: + case 1043: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5493 +//line sql.y:5498 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1043: + case 1044: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5499 +//line sql.y:5504 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: InOp, Right: yyDollar[3].colTupleUnion()} } yyVAL.union = yyLOCAL - case 1044: + case 1045: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5503 +//line sql.y:5508 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotInOp, Right: yyDollar[4].colTupleUnion()} } yyVAL.union = yyLOCAL - case 1045: + case 1046: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5507 +//line sql.y:5512 { yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: true, From: yyDollar[3].exprUnion(), To: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1046: + case 1047: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5511 +//line sql.y:5516 { yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: false, From: yyDollar[4].exprUnion(), To: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 1047: + case 1048: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5515 +//line sql.y:5520 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1048: + case 1049: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5519 +//line sql.y:5524 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1049: + case 1050: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5523 +//line sql.y:5528 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion(), Escape: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1050: + case 1051: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5527 +//line sql.y:5532 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion(), Escape: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 1051: + case 1052: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5531 +//line sql.y:5536 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: RegexpOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1052: + case 1053: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5535 +//line sql.y:5540 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotRegexpOp, Right: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1053: + case 1054: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5539 +//line sql.y:5544 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1054: + case 1055: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5545 +//line sql.y:5550 { } - case 1055: + case 1056: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5548 +//line sql.y:5553 { } - case 1056: + case 1057: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5554 +//line sql.y:5559 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitOrOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1057: + case 1058: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5558 +//line sql.y:5563 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitAndOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1058: + case 1059: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5562 +//line sql.y:5567 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftLeftOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1059: + case 1060: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5566 +//line sql.y:5571 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftRightOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1060: + case 1061: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5570 +//line sql.y:5575 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: PlusOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1061: + case 1062: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5574 +//line sql.y:5579 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MinusOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1062: + case 1063: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5578 +//line sql.y:5583 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MultOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1063: + case 1064: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5582 +//line sql.y:5587 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: DivOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1064: + case 1065: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5586 +//line sql.y:5591 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1065: + case 1066: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5590 +//line sql.y:5595 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: IntDivOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1066: + case 1067: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5594 +//line sql.y:5599 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1067: + case 1068: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5598 +//line sql.y:5603 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitXorOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1068: + case 1069: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5602 +//line sql.y:5607 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1069: + case 1070: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5608 +//line sql.y:5613 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1070: + case 1071: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5612 +//line sql.y:5617 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1071: + case 1072: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5616 +//line sql.y:5621 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1072: + case 1073: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5620 +//line sql.y:5625 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1073: + case 1074: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5624 +//line sql.y:5629 { yyLOCAL = &CollateExpr{Expr: yyDollar[1].exprUnion(), Collation: yyDollar[3].str} } yyVAL.union = yyLOCAL - case 1074: + case 1075: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5628 +//line sql.y:5633 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1075: + case 1076: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5632 +//line sql.y:5637 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1076: + case 1077: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5636 +//line sql.y:5641 { yyLOCAL = yyDollar[1].variableUnion() } yyVAL.union = yyLOCAL - case 1077: + case 1078: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5640 +//line sql.y:5645 { yyLOCAL = yyDollar[2].exprUnion() // TODO: do we really want to ignore unary '+' before any kind of literals? } yyVAL.union = yyLOCAL - case 1078: + case 1079: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5644 +//line sql.y:5649 { yyLOCAL = &UnaryExpr{Operator: UMinusOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1079: + case 1080: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5648 +//line sql.y:5653 { yyLOCAL = &UnaryExpr{Operator: TildaOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1080: + case 1081: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5652 +//line sql.y:5657 { yyLOCAL = &UnaryExpr{Operator: BangOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1081: + case 1082: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5656 +//line sql.y:5661 { yyLOCAL = yyDollar[1].subqueryUnion() } yyVAL.union = yyLOCAL - case 1082: + case 1083: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5660 +//line sql.y:5665 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1083: + case 1084: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5664 +//line sql.y:5669 { yyLOCAL = &ExistsExpr{Subquery: yyDollar[2].subqueryUnion()} } yyVAL.union = yyLOCAL - case 1084: + case 1085: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:5668 +//line sql.y:5673 { yyLOCAL = &MatchExpr{Columns: yyDollar[2].colNamesUnion(), Expr: yyDollar[5].exprUnion(), Option: yyDollar[6].matchExprOptionUnion()} } yyVAL.union = yyLOCAL - case 1085: + case 1086: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:5672 +//line sql.y:5677 { yyLOCAL = &CastExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion(), Array: yyDollar[6].booleanUnion()} } yyVAL.union = yyLOCAL - case 1086: + case 1087: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5676 +//line sql.y:5681 { yyLOCAL = &ConvertExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion()} } yyVAL.union = yyLOCAL - case 1087: + case 1088: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5680 +//line sql.y:5685 { yyLOCAL = &ConvertUsingExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].str} } yyVAL.union = yyLOCAL - case 1088: + case 1089: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5684 +//line sql.y:5689 { // From: https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#operator_binary // To convert a string expression to a binary string, these constructs are equivalent: @@ -17141,18 +17223,18 @@ yydefault: yyLOCAL = &ConvertExpr{Expr: yyDollar[2].exprUnion(), Type: &ConvertType{Type: yyDollar[1].str}} } yyVAL.union = yyLOCAL - case 1089: + case 1090: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5692 +//line sql.y:5697 { yyLOCAL = &Default{ColName: yyDollar[2].str} } yyVAL.union = yyLOCAL - case 1090: + case 1091: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5696 +//line sql.y:5701 { // INTERVAL can trigger a shift / reduce conflict. We want // to shift here for the interval rule. In case we do have @@ -17161,2192 +17243,2192 @@ yydefault: yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1091: + case 1092: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5704 +//line sql.y:5709 { yyLOCAL = &IntervalFuncExpr{Expr: yyDollar[3].exprUnion(), Exprs: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1092: + case 1093: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5708 +//line sql.y:5713 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: JSONExtractOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1093: + case 1094: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5712 +//line sql.y:5717 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: JSONUnquoteExtractOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1094: + case 1095: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5718 +//line sql.y:5723 { yyLOCAL = &IntervalExpr{Expr: yyDollar[2].exprUnion(), Unit: yyDollar[3].identifierCI.String()} } yyVAL.union = yyLOCAL - case 1095: + case 1096: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5724 +//line sql.y:5729 { yyLOCAL = yyDollar[1].colNamesUnion() } yyVAL.union = yyLOCAL - case 1096: + case 1097: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5728 +//line sql.y:5733 { yyLOCAL = yyDollar[2].colNamesUnion() } yyVAL.union = yyLOCAL - case 1097: + case 1098: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5734 +//line sql.y:5739 { yyLOCAL = []*ColName{yyDollar[1].colNameUnion()} } yyVAL.union = yyLOCAL - case 1098: + case 1099: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5738 +//line sql.y:5743 { yySLICE := (*[]*ColName)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].colNameUnion()) } - case 1099: + case 1100: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:5744 +//line sql.y:5749 { yyLOCAL = BothTrimType } yyVAL.union = yyLOCAL - case 1100: + case 1101: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:5748 +//line sql.y:5753 { yyLOCAL = LeadingTrimType } yyVAL.union = yyLOCAL - case 1101: + case 1102: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:5752 +//line sql.y:5757 { yyLOCAL = TrailingTrimType } yyVAL.union = yyLOCAL - case 1102: + case 1103: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FrameUnitType -//line sql.y:5758 +//line sql.y:5763 { yyLOCAL = FrameRowsType } yyVAL.union = yyLOCAL - case 1103: + case 1104: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FrameUnitType -//line sql.y:5762 +//line sql.y:5767 { yyLOCAL = FrameRangeType } yyVAL.union = yyLOCAL - case 1104: + case 1105: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5769 +//line sql.y:5774 { yyLOCAL = CumeDistExprType } yyVAL.union = yyLOCAL - case 1105: + case 1106: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5773 +//line sql.y:5778 { yyLOCAL = DenseRankExprType } yyVAL.union = yyLOCAL - case 1106: + case 1107: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5777 +//line sql.y:5782 { yyLOCAL = PercentRankExprType } yyVAL.union = yyLOCAL - case 1107: + case 1108: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5781 +//line sql.y:5786 { yyLOCAL = RankExprType } yyVAL.union = yyLOCAL - case 1108: + case 1109: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5785 +//line sql.y:5790 { yyLOCAL = RowNumberExprType } yyVAL.union = yyLOCAL - case 1109: + case 1110: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5791 +//line sql.y:5796 { yyLOCAL = &FramePoint{Type: CurrentRowType} } yyVAL.union = yyLOCAL - case 1110: + case 1111: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5795 +//line sql.y:5800 { yyLOCAL = &FramePoint{Type: UnboundedPrecedingType} } yyVAL.union = yyLOCAL - case 1111: + case 1112: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5799 +//line sql.y:5804 { yyLOCAL = &FramePoint{Type: UnboundedFollowingType} } yyVAL.union = yyLOCAL - case 1112: + case 1113: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5803 +//line sql.y:5808 { yyLOCAL = &FramePoint{Type: ExprPrecedingType, Expr: yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1113: + case 1114: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5807 +//line sql.y:5812 { yyLOCAL = &FramePoint{Type: ExprFollowingType, Expr: yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1114: + case 1115: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5813 +//line sql.y:5818 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1115: + case 1116: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5817 +//line sql.y:5822 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1116: + case 1117: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5822 +//line sql.y:5827 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1117: + case 1118: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5826 +//line sql.y:5831 { yyLOCAL = yyDollar[1].frameClauseUnion() } yyVAL.union = yyLOCAL - case 1118: + case 1119: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5832 +//line sql.y:5837 { yyLOCAL = &FrameClause{Unit: yyDollar[1].frameUnitTypeUnion(), Start: yyDollar[2].framePointUnion()} } yyVAL.union = yyLOCAL - case 1119: + case 1120: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5836 +//line sql.y:5841 { yyLOCAL = &FrameClause{Unit: yyDollar[1].frameUnitTypeUnion(), Start: yyDollar[3].framePointUnion(), End: yyDollar[5].framePointUnion()} } yyVAL.union = yyLOCAL - case 1120: + case 1121: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Exprs -//line sql.y:5841 +//line sql.y:5846 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1121: + case 1122: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Exprs -//line sql.y:5845 +//line sql.y:5850 { yyLOCAL = yyDollar[3].exprsUnion() } yyVAL.union = yyLOCAL - case 1122: + case 1123: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5850 +//line sql.y:5855 { } - case 1123: + case 1124: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5853 +//line sql.y:5858 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 1124: + case 1125: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *WindowSpecification -//line sql.y:5859 +//line sql.y:5864 { yyLOCAL = &WindowSpecification{Name: yyDollar[1].identifierCI, PartitionClause: yyDollar[2].exprsUnion(), OrderClause: yyDollar[3].orderByUnion(), FrameClause: yyDollar[4].frameClauseUnion()} } yyVAL.union = yyLOCAL - case 1125: + case 1126: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *OverClause -//line sql.y:5865 +//line sql.y:5870 { yyLOCAL = &OverClause{WindowSpec: yyDollar[3].windowSpecificationUnion()} } yyVAL.union = yyLOCAL - case 1126: + case 1127: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *OverClause -//line sql.y:5869 +//line sql.y:5874 { yyLOCAL = &OverClause{WindowName: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 1127: + case 1128: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *NullTreatmentClause -//line sql.y:5874 +//line sql.y:5879 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1129: + case 1130: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *NullTreatmentClause -//line sql.y:5881 +//line sql.y:5886 { yyLOCAL = &NullTreatmentClause{yyDollar[1].nullTreatmentTypeUnion()} } yyVAL.union = yyLOCAL - case 1130: + case 1131: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL NullTreatmentType -//line sql.y:5887 +//line sql.y:5892 { yyLOCAL = RespectNullsType } yyVAL.union = yyLOCAL - case 1131: + case 1132: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL NullTreatmentType -//line sql.y:5891 +//line sql.y:5896 { yyLOCAL = IgnoreNullsType } yyVAL.union = yyLOCAL - case 1132: + case 1133: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FirstOrLastValueExprType -//line sql.y:5897 +//line sql.y:5902 { yyLOCAL = FirstValueExprType } yyVAL.union = yyLOCAL - case 1133: + case 1134: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FirstOrLastValueExprType -//line sql.y:5901 +//line sql.y:5906 { yyLOCAL = LastValueExprType } yyVAL.union = yyLOCAL - case 1134: + case 1135: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL FromFirstLastType -//line sql.y:5907 +//line sql.y:5912 { yyLOCAL = FromFirstType } yyVAL.union = yyLOCAL - case 1135: + case 1136: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL FromFirstLastType -//line sql.y:5911 +//line sql.y:5916 { yyLOCAL = FromLastType } yyVAL.union = yyLOCAL - case 1136: + case 1137: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *FromFirstLastClause -//line sql.y:5916 +//line sql.y:5921 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1138: + case 1139: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *FromFirstLastClause -//line sql.y:5923 +//line sql.y:5928 { yyLOCAL = &FromFirstLastClause{yyDollar[1].fromFirstLastTypeUnion()} } yyVAL.union = yyLOCAL - case 1139: + case 1140: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LagLeadExprType -//line sql.y:5929 +//line sql.y:5934 { yyLOCAL = LagExprType } yyVAL.union = yyLOCAL - case 1140: + case 1141: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LagLeadExprType -//line sql.y:5933 +//line sql.y:5938 { yyLOCAL = LeadExprType } yyVAL.union = yyLOCAL - case 1141: + case 1142: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *WindowDefinition -//line sql.y:5939 +//line sql.y:5944 { yyLOCAL = &WindowDefinition{Name: yyDollar[1].identifierCI, WindowSpec: yyDollar[4].windowSpecificationUnion()} } yyVAL.union = yyLOCAL - case 1142: + case 1143: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL WindowDefinitions -//line sql.y:5945 +//line sql.y:5950 { yyLOCAL = WindowDefinitions{yyDollar[1].windowDefinitionUnion()} } yyVAL.union = yyLOCAL - case 1143: + case 1144: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5949 +//line sql.y:5954 { yySLICE := (*WindowDefinitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].windowDefinitionUnion()) } - case 1144: + case 1145: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5955 +//line sql.y:5960 { yyVAL.str = "" } - case 1145: + case 1146: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5959 +//line sql.y:5964 { yyVAL.str = string(yyDollar[2].identifierCI.String()) } - case 1146: + case 1147: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL BoolVal -//line sql.y:5965 +//line sql.y:5970 { yyLOCAL = BoolVal(true) } yyVAL.union = yyLOCAL - case 1147: + case 1148: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL BoolVal -//line sql.y:5969 +//line sql.y:5974 { yyLOCAL = BoolVal(false) } yyVAL.union = yyLOCAL - case 1148: + case 1149: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:5976 +//line sql.y:5981 { yyLOCAL = IsTrueOp } yyVAL.union = yyLOCAL - case 1149: + case 1150: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:5980 +//line sql.y:5985 { yyLOCAL = IsNotTrueOp } yyVAL.union = yyLOCAL - case 1150: + case 1151: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:5984 +//line sql.y:5989 { yyLOCAL = IsFalseOp } yyVAL.union = yyLOCAL - case 1151: + case 1152: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:5988 +//line sql.y:5993 { yyLOCAL = IsNotFalseOp } yyVAL.union = yyLOCAL - case 1152: + case 1153: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5994 +//line sql.y:5999 { yyLOCAL = EqualOp } yyVAL.union = yyLOCAL - case 1153: + case 1154: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5998 +//line sql.y:6003 { yyLOCAL = LessThanOp } yyVAL.union = yyLOCAL - case 1154: + case 1155: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6002 +//line sql.y:6007 { yyLOCAL = GreaterThanOp } yyVAL.union = yyLOCAL - case 1155: + case 1156: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6006 +//line sql.y:6011 { yyLOCAL = LessEqualOp } yyVAL.union = yyLOCAL - case 1156: + case 1157: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6010 +//line sql.y:6015 { yyLOCAL = GreaterEqualOp } yyVAL.union = yyLOCAL - case 1157: + case 1158: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6014 +//line sql.y:6019 { yyLOCAL = NotEqualOp } yyVAL.union = yyLOCAL - case 1158: + case 1159: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6018 +//line sql.y:6023 { yyLOCAL = NullSafeEqualOp } yyVAL.union = yyLOCAL - case 1159: + case 1160: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:6024 +//line sql.y:6029 { yyLOCAL = yyDollar[1].valTupleUnion() } yyVAL.union = yyLOCAL - case 1160: + case 1161: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:6028 +//line sql.y:6033 { yyLOCAL = yyDollar[1].subqueryUnion() } yyVAL.union = yyLOCAL - case 1161: + case 1162: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:6032 +//line sql.y:6037 { yyLOCAL = ListArg(yyDollar[1].str[2:]) bindVariable(yylex, yyDollar[1].str[2:]) } yyVAL.union = yyLOCAL - case 1162: + case 1163: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Subquery -//line sql.y:6039 +//line sql.y:6044 { yyLOCAL = &Subquery{yyDollar[1].selStmtUnion()} } yyVAL.union = yyLOCAL - case 1163: + case 1164: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Exprs -//line sql.y:6045 +//line sql.y:6050 { yyLOCAL = Exprs{yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1164: + case 1165: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:6049 +//line sql.y:6054 { yySLICE := (*Exprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].exprUnion()) } - case 1165: + case 1166: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6059 +//line sql.y:6064 { yyLOCAL = &FuncExpr{Name: yyDollar[1].identifierCI, Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1166: + case 1167: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6063 +//line sql.y:6068 { yyLOCAL = &FuncExpr{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCI, Exprs: yyDollar[5].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1167: + case 1168: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6073 +//line sql.y:6078 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("left"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1168: + case 1169: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6077 +//line sql.y:6082 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("right"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1169: + case 1170: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6081 +//line sql.y:6086 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1170: + case 1171: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6085 +//line sql.y:6090 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1171: + case 1172: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6089 +//line sql.y:6094 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1172: + case 1173: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6093 +//line sql.y:6098 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1173: + case 1174: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6097 +//line sql.y:6102 { yyLOCAL = &CaseExpr{Expr: yyDollar[2].exprUnion(), Whens: yyDollar[3].whensUnion(), Else: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1174: + case 1175: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6101 +//line sql.y:6106 { yyLOCAL = &ValuesFuncExpr{Name: yyDollar[3].colNameUnion()} } yyVAL.union = yyLOCAL - case 1175: + case 1176: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6105 +//line sql.y:6110 { yyLOCAL = &InsertExpr{Str: yyDollar[3].exprUnion(), Pos: yyDollar[5].exprUnion(), Len: yyDollar[7].exprUnion(), NewStr: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1176: + case 1177: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6109 +//line sql.y:6114 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1177: + case 1178: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6120 +//line sql.y:6125 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("utc_date")} } yyVAL.union = yyLOCAL - case 1178: + case 1179: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6124 +//line sql.y:6129 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1179: + case 1180: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6130 +//line sql.y:6135 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("current_date")} } yyVAL.union = yyLOCAL - case 1180: + case 1181: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6134 +//line sql.y:6139 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("utc_time"), Fsp: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1181: + case 1182: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6139 +//line sql.y:6144 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("current_time"), Fsp: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1182: + case 1183: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6143 +//line sql.y:6148 { yyLOCAL = &CountStar{} } yyVAL.union = yyLOCAL - case 1183: + case 1184: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6147 +//line sql.y:6152 { yyLOCAL = &Count{Distinct: yyDollar[3].booleanUnion(), Args: yyDollar[4].exprsUnion()} } yyVAL.union = yyLOCAL - case 1184: + case 1185: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6151 +//line sql.y:6156 { yyLOCAL = &Max{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1185: + case 1186: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6155 +//line sql.y:6160 { yyLOCAL = &Min{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1186: + case 1187: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6159 +//line sql.y:6164 { yyLOCAL = &Sum{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1187: + case 1188: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6163 +//line sql.y:6168 { yyLOCAL = &Avg{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1188: + case 1189: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6167 +//line sql.y:6172 { yyLOCAL = &BitAnd{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1189: + case 1190: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6171 +//line sql.y:6176 { yyLOCAL = &BitOr{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1190: + case 1191: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6175 +//line sql.y:6180 { yyLOCAL = &BitXor{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1191: + case 1192: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6179 +//line sql.y:6184 { yyLOCAL = &Std{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1192: + case 1193: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6183 +//line sql.y:6188 { yyLOCAL = &StdDev{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1193: + case 1194: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6187 +//line sql.y:6192 { yyLOCAL = &StdPop{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1194: + case 1195: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6191 +//line sql.y:6196 { yyLOCAL = &StdSamp{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1195: + case 1196: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6195 +//line sql.y:6200 { yyLOCAL = &VarPop{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1196: + case 1197: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6199 +//line sql.y:6204 { yyLOCAL = &VarSamp{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1197: + case 1198: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6203 +//line sql.y:6208 { yyLOCAL = &Variance{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1198: + case 1199: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6207 +//line sql.y:6212 { yyLOCAL = &GroupConcatExpr{Distinct: yyDollar[3].booleanUnion(), Exprs: yyDollar[4].exprsUnion(), OrderBy: yyDollar[5].orderByUnion(), Separator: yyDollar[6].str, Limit: yyDollar[7].limitUnion()} } yyVAL.union = yyLOCAL - case 1199: + case 1200: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6211 +//line sql.y:6216 { yyLOCAL = &TimestampFuncExpr{Name: string("timestampadd"), Unit: yyDollar[3].identifierCI.String(), Expr1: yyDollar[5].exprUnion(), Expr2: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1200: + case 1201: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6215 +//line sql.y:6220 { yyLOCAL = &TimestampFuncExpr{Name: string("timestampdiff"), Unit: yyDollar[3].identifierCI.String(), Expr1: yyDollar[5].exprUnion(), Expr2: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1201: + case 1202: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6219 +//line sql.y:6224 { yyLOCAL = &ExtractFuncExpr{IntervalTypes: yyDollar[3].intervalTypeUnion(), Expr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1202: + case 1203: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6223 +//line sql.y:6228 { yyLOCAL = &WeightStringFuncExpr{Expr: yyDollar[3].exprUnion(), As: yyDollar[4].convertTypeUnion()} } yyVAL.union = yyLOCAL - case 1203: + case 1204: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6227 +//line sql.y:6232 { yyLOCAL = &JSONPrettyExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1204: + case 1205: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6231 +//line sql.y:6236 { yyLOCAL = &JSONStorageFreeExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1205: + case 1206: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6235 +//line sql.y:6240 { yyLOCAL = &JSONStorageSizeExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1206: + case 1207: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6239 +//line sql.y:6244 { yyLOCAL = &TrimFuncExpr{TrimFuncType: LTrimType, StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1207: + case 1208: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6243 +//line sql.y:6248 { yyLOCAL = &TrimFuncExpr{TrimFuncType: RTrimType, StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1208: + case 1209: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:6247 +//line sql.y:6252 { yyLOCAL = &TrimFuncExpr{Type: yyDollar[3].trimTypeUnion(), TrimArg: yyDollar[4].exprUnion(), StringArg: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 1209: + case 1210: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6251 +//line sql.y:6256 { yyLOCAL = &TrimFuncExpr{StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1210: + case 1211: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6255 +//line sql.y:6260 { yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1211: + case 1212: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6259 +//line sql.y:6264 { yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion(), Charset: yyDollar[5].str} } yyVAL.union = yyLOCAL - case 1212: + case 1213: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6263 +//line sql.y:6268 { yyLOCAL = &TrimFuncExpr{TrimArg: yyDollar[3].exprUnion(), StringArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1213: + case 1214: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6267 +//line sql.y:6272 { yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1214: + case 1215: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6271 +//line sql.y:6276 { yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion(), Pos: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1215: + case 1216: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6275 +//line sql.y:6280 { yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1216: + case 1217: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6279 +//line sql.y:6284 { yyLOCAL = &LockingFunc{Type: GetLock, Name: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1217: + case 1218: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6283 +//line sql.y:6288 { yyLOCAL = &LockingFunc{Type: IsFreeLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1218: + case 1219: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6287 +//line sql.y:6292 { yyLOCAL = &LockingFunc{Type: IsUsedLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1219: + case 1220: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6291 +//line sql.y:6296 { yyLOCAL = &LockingFunc{Type: ReleaseAllLocks} } yyVAL.union = yyLOCAL - case 1220: + case 1221: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6295 +//line sql.y:6300 { yyLOCAL = &LockingFunc{Type: ReleaseLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1221: + case 1222: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6299 +//line sql.y:6304 { yyLOCAL = &JSONSchemaValidFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1222: + case 1223: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6303 +//line sql.y:6308 { yyLOCAL = &JSONSchemaValidationReportFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1223: + case 1224: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6307 +//line sql.y:6312 { yyLOCAL = &JSONArrayExpr{Params: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1224: + case 1225: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6311 +//line sql.y:6316 { yyLOCAL = &JSONObjectExpr{Params: yyDollar[3].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1225: + case 1226: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6315 +//line sql.y:6320 { yyLOCAL = &JSONQuoteExpr{StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1226: + case 1227: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6319 +//line sql.y:6324 { yyLOCAL = &JSONContainsExpr{Target: yyDollar[3].exprUnion(), Candidate: yyDollar[5].exprsUnion()[0], PathList: yyDollar[5].exprsUnion()[1:]} } yyVAL.union = yyLOCAL - case 1227: + case 1228: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6323 +//line sql.y:6328 { yyLOCAL = &JSONContainsPathExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), PathList: yyDollar[7].exprsUnion()} } yyVAL.union = yyLOCAL - case 1228: + case 1229: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6327 +//line sql.y:6332 { yyLOCAL = &JSONExtractExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1229: + case 1230: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6331 +//line sql.y:6336 { yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1230: + case 1231: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6335 +//line sql.y:6340 { yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1231: + case 1232: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6339 +//line sql.y:6344 { yyLOCAL = &JSONOverlapsExpr{JSONDoc1: yyDollar[3].exprUnion(), JSONDoc2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1232: + case 1233: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6343 +//line sql.y:6348 { yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1233: + case 1234: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6347 +//line sql.y:6352 { yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion(), EscapeChar: yyDollar[9].exprsUnion()[0], PathList: yyDollar[9].exprsUnion()[1:]} } yyVAL.union = yyLOCAL - case 1234: + case 1235: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:6351 +//line sql.y:6356 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion()} } yyVAL.union = yyLOCAL - case 1235: + case 1236: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6355 +//line sql.y:6360 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()} } yyVAL.union = yyLOCAL - case 1236: + case 1237: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6359 +//line sql.y:6364 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()} } yyVAL.union = yyLOCAL - case 1237: + case 1238: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr -//line sql.y:6363 +//line sql.y:6368 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()} } yyVAL.union = yyLOCAL - case 1238: + case 1239: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6367 +//line sql.y:6372 { yyLOCAL = &JSONAttributesExpr{Type: DepthAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1239: + case 1240: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6371 +//line sql.y:6376 { yyLOCAL = &JSONAttributesExpr{Type: ValidAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1240: + case 1241: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6375 +//line sql.y:6380 { yyLOCAL = &JSONAttributesExpr{Type: TypeAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1241: + case 1242: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6379 +//line sql.y:6384 { yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1242: + case 1243: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6383 +//line sql.y:6388 { yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1243: + case 1244: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6387 +//line sql.y:6392 { yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayAppendType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1244: + case 1245: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6391 +//line sql.y:6396 { yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1245: + case 1246: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6395 +//line sql.y:6400 { yyLOCAL = &JSONValueModifierExpr{Type: JSONInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1246: + case 1247: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6399 +//line sql.y:6404 { yyLOCAL = &JSONValueModifierExpr{Type: JSONReplaceType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1247: + case 1248: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6403 +//line sql.y:6408 { yyLOCAL = &JSONValueModifierExpr{Type: JSONSetType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1248: + case 1249: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6407 +//line sql.y:6412 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergeType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1249: + case 1250: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6411 +//line sql.y:6416 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePatchType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1250: + case 1251: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6415 +//line sql.y:6420 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePreserveType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1251: + case 1252: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6419 +//line sql.y:6424 { yyLOCAL = &JSONRemoveExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1252: + case 1253: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6423 +//line sql.y:6428 { yyLOCAL = &JSONUnquoteExpr{JSONValue: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1253: + case 1254: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6427 +//line sql.y:6432 { yyLOCAL = &ArgumentLessWindowExpr{Type: yyDollar[1].argumentLessWindowExprTypeUnion(), OverClause: yyDollar[4].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1254: + case 1255: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6431 +//line sql.y:6436 { yyLOCAL = &FirstOrLastValueExpr{Type: yyDollar[1].firstOrLastValueExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1255: + case 1256: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6435 +//line sql.y:6440 { yyLOCAL = &NtileExpr{N: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1256: + case 1257: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr -//line sql.y:6439 +//line sql.y:6444 { yyLOCAL = &NTHValueExpr{Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), FromFirstLastClause: yyDollar[7].fromFirstLastClauseUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1257: + case 1258: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6443 +//line sql.y:6448 { yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1258: + case 1259: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr -//line sql.y:6447 +//line sql.y:6452 { yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), Default: yyDollar[6].exprUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1263: + case 1264: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6457 +//line sql.y:6462 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1264: + case 1265: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6461 +//line sql.y:6466 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1265: + case 1266: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6465 +//line sql.y:6470 { yyLOCAL = yyDollar[1].variableUnion() } yyVAL.union = yyLOCAL - case 1266: + case 1267: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6469 +//line sql.y:6474 { yyLOCAL = NewArgument(yyDollar[1].str[1:]) bindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL - case 1267: + case 1268: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:6475 +//line sql.y:6480 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1268: + case 1269: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6479 +//line sql.y:6484 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1269: + case 1270: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6485 +//line sql.y:6490 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1270: + case 1271: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6489 +//line sql.y:6494 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1271: + case 1272: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6493 +//line sql.y:6498 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1272: + case 1273: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6497 +//line sql.y:6502 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1273: + case 1274: yyDollar = yyS[yypt-14 : yypt+1] var yyLOCAL Expr -//line sql.y:6501 +//line sql.y:6506 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()} } yyVAL.union = yyLOCAL - case 1274: + case 1275: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6506 +//line sql.y:6511 { yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1275: + case 1276: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6510 +//line sql.y:6515 { yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), MatchType: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1276: + case 1277: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6514 +//line sql.y:6519 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1277: + case 1278: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6518 +//line sql.y:6523 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1278: + case 1279: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6522 +//line sql.y:6527 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1279: + case 1280: yyDollar = yyS[yypt-14 : yypt+1] var yyLOCAL Expr -//line sql.y:6526 +//line sql.y:6531 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()} } yyVAL.union = yyLOCAL - case 1280: + case 1281: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6531 +//line sql.y:6536 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1281: + case 1282: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6535 +//line sql.y:6540 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1282: + case 1283: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6539 +//line sql.y:6544 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1283: + case 1284: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6543 +//line sql.y:6548 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), MatchType: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1284: + case 1285: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6550 +//line sql.y:6555 { yyLOCAL = &ExtractValueExpr{Fragment: yyDollar[3].exprUnion(), XPathExpr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1285: + case 1286: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6554 +//line sql.y:6559 { yyLOCAL = &UpdateXMLExpr{Target: yyDollar[3].exprUnion(), XPathExpr: yyDollar[5].exprUnion(), NewXML: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1286: + case 1287: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6560 +//line sql.y:6565 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatBytesType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1287: + case 1288: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6564 +//line sql.y:6569 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatPicoTimeType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1288: + case 1289: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6568 +//line sql.y:6573 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsCurrentThreadIDType} } yyVAL.union = yyLOCAL - case 1289: + case 1290: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6572 +//line sql.y:6577 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsThreadIDType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1290: + case 1291: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6578 +//line sql.y:6583 { yyLOCAL = >IDFuncExpr{Type: GTIDSubsetType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1291: + case 1292: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6582 +//line sql.y:6587 { yyLOCAL = >IDFuncExpr{Type: GTIDSubtractType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1292: + case 1293: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6586 +//line sql.y:6591 { yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1293: + case 1294: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6590 +//line sql.y:6595 { yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1294: + case 1295: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6594 +//line sql.y:6599 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1295: + case 1296: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6598 +//line sql.y:6603 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1296: + case 1297: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6602 +//line sql.y:6607 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion(), Channel: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1297: + case 1298: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6607 +//line sql.y:6612 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1298: + case 1299: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6611 +//line sql.y:6616 { yyLOCAL = yyDollar[2].convertTypeUnion() } yyVAL.union = yyLOCAL - case 1299: + case 1300: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6617 +//line sql.y:6622 { } - case 1300: + case 1301: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6619 +//line sql.y:6624 { yyLOCAL = IntervalDayHour } yyVAL.union = yyLOCAL - case 1301: + case 1302: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6623 +//line sql.y:6628 { yyLOCAL = IntervalDayMicrosecond } yyVAL.union = yyLOCAL - case 1302: + case 1303: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6627 +//line sql.y:6632 { yyLOCAL = IntervalDayMinute } yyVAL.union = yyLOCAL - case 1303: + case 1304: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6631 +//line sql.y:6636 { yyLOCAL = IntervalDaySecond } yyVAL.union = yyLOCAL - case 1304: + case 1305: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6635 +//line sql.y:6640 { yyLOCAL = IntervalHourMicrosecond } yyVAL.union = yyLOCAL - case 1305: + case 1306: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6639 +//line sql.y:6644 { yyLOCAL = IntervalHourMinute } yyVAL.union = yyLOCAL - case 1306: + case 1307: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6643 +//line sql.y:6648 { yyLOCAL = IntervalHourSecond } yyVAL.union = yyLOCAL - case 1307: + case 1308: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6647 +//line sql.y:6652 { yyLOCAL = IntervalMinuteMicrosecond } yyVAL.union = yyLOCAL - case 1308: + case 1309: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6651 +//line sql.y:6656 { yyLOCAL = IntervalMinuteSecond } yyVAL.union = yyLOCAL - case 1309: + case 1310: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6655 +//line sql.y:6660 { yyLOCAL = IntervalSecondMicrosecond } yyVAL.union = yyLOCAL - case 1310: + case 1311: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6659 +//line sql.y:6664 { yyLOCAL = IntervalYearMonth } yyVAL.union = yyLOCAL - case 1311: + case 1312: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6665 +//line sql.y:6670 { yyLOCAL = IntervalDay } yyVAL.union = yyLOCAL - case 1312: + case 1313: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6669 +//line sql.y:6674 { yyLOCAL = IntervalWeek } yyVAL.union = yyLOCAL - case 1313: + case 1314: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6673 +//line sql.y:6678 { yyLOCAL = IntervalHour } yyVAL.union = yyLOCAL - case 1314: + case 1315: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6677 +//line sql.y:6682 { yyLOCAL = IntervalMinute } yyVAL.union = yyLOCAL - case 1315: + case 1316: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6681 +//line sql.y:6686 { yyLOCAL = IntervalMonth } yyVAL.union = yyLOCAL - case 1316: + case 1317: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6685 +//line sql.y:6690 { yyLOCAL = IntervalQuarter } yyVAL.union = yyLOCAL - case 1317: + case 1318: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6689 +//line sql.y:6694 { yyLOCAL = IntervalSecond } yyVAL.union = yyLOCAL - case 1318: + case 1319: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6693 +//line sql.y:6698 { yyLOCAL = IntervalMicrosecond } yyVAL.union = yyLOCAL - case 1319: + case 1320: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6697 +//line sql.y:6702 { yyLOCAL = IntervalYear } yyVAL.union = yyLOCAL - case 1322: + case 1323: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:6707 +//line sql.y:6712 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1323: + case 1324: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6711 +//line sql.y:6716 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1324: + case 1325: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6715 +//line sql.y:6720 { yyLOCAL = NewIntLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 1325: + case 1326: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6719 +//line sql.y:6724 { yyLOCAL = NewArgument(yyDollar[2].str[1:]) bindVariable(yylex, yyDollar[2].str[1:]) } yyVAL.union = yyLOCAL - case 1326: + case 1327: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6730 +//line sql.y:6735 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("if"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1327: + case 1328: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6734 +//line sql.y:6739 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("database"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1328: + case 1329: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6738 +//line sql.y:6743 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("schema"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1329: + case 1330: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6742 +//line sql.y:6747 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("mod"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1330: + case 1331: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6746 +//line sql.y:6751 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("replace"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1331: + case 1332: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6752 +//line sql.y:6757 { yyLOCAL = NoOption } yyVAL.union = yyLOCAL - case 1332: + case 1333: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6756 +//line sql.y:6761 { yyLOCAL = BooleanModeOpt } yyVAL.union = yyLOCAL - case 1333: + case 1334: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6760 +//line sql.y:6765 { yyLOCAL = NaturalLanguageModeOpt } yyVAL.union = yyLOCAL - case 1334: + case 1335: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6764 +//line sql.y:6769 { yyLOCAL = NaturalLanguageModeWithQueryExpansionOpt } yyVAL.union = yyLOCAL - case 1335: + case 1336: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6768 +//line sql.y:6773 { yyLOCAL = QueryExpansionOpt } yyVAL.union = yyLOCAL - case 1336: + case 1337: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6774 +//line sql.y:6779 { yyVAL.str = string(yyDollar[1].identifierCI.String()) } - case 1337: + case 1338: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6778 +//line sql.y:6783 { yyVAL.str = string(yyDollar[1].str) } - case 1338: + case 1339: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6782 +//line sql.y:6787 { yyVAL.str = string(yyDollar[1].str) } - case 1339: + case 1340: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6788 +//line sql.y:6793 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1340: + case 1341: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6792 +//line sql.y:6797 { yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: NewIntLiteral(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 1341: + case 1342: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6796 +//line sql.y:6801 { yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: NewIntLiteral(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 1342: + case 1343: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6802 +//line sql.y:6807 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1343: + case 1344: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6806 +//line sql.y:6811 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion(), Charset: yyDollar[3].columnCharset} } yyVAL.union = yyLOCAL - case 1344: + case 1345: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6810 +//line sql.y:6815 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1345: + case 1346: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6814 +//line sql.y:6819 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1346: + case 1347: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6818 +//line sql.y:6823 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} yyLOCAL.Length = yyDollar[2].LengthScaleOption.Length yyLOCAL.Scale = yyDollar[2].LengthScaleOption.Scale } yyVAL.union = yyLOCAL - case 1347: + case 1348: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6824 +//line sql.y:6829 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1348: + case 1349: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6828 +//line sql.y:6833 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1349: + case 1350: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6832 +//line sql.y:6837 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1350: + case 1351: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6836 +//line sql.y:6841 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1351: + case 1352: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6840 +//line sql.y:6845 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1352: + case 1353: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6844 +//line sql.y:6849 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1353: + case 1354: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6848 +//line sql.y:6853 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1354: + case 1355: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6852 +//line sql.y:6857 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1355: + case 1356: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6856 +//line sql.y:6861 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1356: + case 1357: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6860 +//line sql.y:6865 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1357: + case 1358: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:6866 +//line sql.y:6871 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1358: + case 1359: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:6870 +//line sql.y:6875 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1359: + case 1360: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:6875 +//line sql.y:6880 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1360: + case 1361: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6879 +//line sql.y:6884 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1361: + case 1362: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:6884 +//line sql.y:6889 { yyVAL.str = string("") } - case 1362: + case 1363: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:6888 +//line sql.y:6893 { yyVAL.str = " separator " + encodeSQLString(yyDollar[2].str) } - case 1363: + case 1364: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*When -//line sql.y:6894 +//line sql.y:6899 { yyLOCAL = []*When{yyDollar[1].whenUnion()} } yyVAL.union = yyLOCAL - case 1364: + case 1365: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:6898 +//line sql.y:6903 { yySLICE := (*[]*When)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].whenUnion()) } - case 1365: + case 1366: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *When -//line sql.y:6904 +//line sql.y:6909 { yyLOCAL = &When{Cond: yyDollar[2].exprUnion(), Val: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1366: + case 1367: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:6909 +//line sql.y:6914 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1367: + case 1368: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6913 +//line sql.y:6918 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1368: + case 1369: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ColName -//line sql.y:6919 +//line sql.y:6924 { yyLOCAL = &ColName{Name: yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 1369: + case 1370: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ColName -//line sql.y:6923 +//line sql.y:6928 { yyLOCAL = &ColName{Name: NewIdentifierCI(string(yyDollar[1].str))} } yyVAL.union = yyLOCAL - case 1370: + case 1371: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColName -//line sql.y:6927 +//line sql.y:6932 { yyLOCAL = &ColName{Qualifier: TableName{Name: yyDollar[1].identifierCS}, Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 1371: + case 1372: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ColName -//line sql.y:6931 +//line sql.y:6936 { yyLOCAL = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}, Name: yyDollar[5].identifierCI} } yyVAL.union = yyLOCAL - case 1372: + case 1373: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6937 +//line sql.y:6942 { yyLOCAL = yyDollar[1].colNameUnion() } yyVAL.union = yyLOCAL - case 1373: + case 1374: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6941 +//line sql.y:6946 { yyLOCAL = &Offset{V: convertStringToInt(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1374: + case 1375: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6947 +//line sql.y:6952 { // TODO(sougou): Deprecate this construct. if yyDollar[1].identifierCI.Lowered() != "value" { @@ -19356,498 +19438,498 @@ yydefault: yyLOCAL = NewIntLiteral("1") } yyVAL.union = yyLOCAL - case 1375: + case 1376: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6956 +//line sql.y:6961 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1376: + case 1377: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6960 +//line sql.y:6965 { yyLOCAL = NewArgument(yyDollar[1].str[1:]) bindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL - case 1377: + case 1378: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Exprs -//line sql.y:6966 +//line sql.y:6971 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1378: + case 1379: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Exprs -//line sql.y:6970 +//line sql.y:6975 { yyLOCAL = yyDollar[3].exprsUnion() } yyVAL.union = yyLOCAL - case 1379: + case 1380: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:6975 +//line sql.y:6980 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1380: + case 1381: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6979 +//line sql.y:6984 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1381: + case 1382: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *NamedWindow -//line sql.y:6985 +//line sql.y:6990 { yyLOCAL = &NamedWindow{yyDollar[2].windowDefinitionsUnion()} } yyVAL.union = yyLOCAL - case 1382: + case 1383: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:6991 +//line sql.y:6996 { yyLOCAL = NamedWindows{yyDollar[1].namedWindowUnion()} } yyVAL.union = yyLOCAL - case 1383: + case 1384: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:6995 +//line sql.y:7000 { yySLICE := (*NamedWindows)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].namedWindowUnion()) } - case 1384: + case 1385: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7000 +//line sql.y:7005 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1385: + case 1386: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7004 +//line sql.y:7009 { yyLOCAL = yyDollar[1].namedWindowsUnion() } yyVAL.union = yyLOCAL - case 1386: + case 1387: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7009 +//line sql.y:7014 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1387: + case 1388: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7013 +//line sql.y:7018 { yyLOCAL = yyDollar[1].orderByUnion() } yyVAL.union = yyLOCAL - case 1388: + case 1389: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7019 +//line sql.y:7024 { yyLOCAL = yyDollar[3].orderByUnion() } yyVAL.union = yyLOCAL - case 1389: + case 1390: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7025 +//line sql.y:7030 { yyLOCAL = OrderBy{yyDollar[1].orderUnion()} } yyVAL.union = yyLOCAL - case 1390: + case 1391: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7029 +//line sql.y:7034 { yySLICE := (*OrderBy)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].orderUnion()) } - case 1391: + case 1392: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Order -//line sql.y:7035 +//line sql.y:7040 { yyLOCAL = &Order{Expr: yyDollar[1].exprUnion(), Direction: yyDollar[2].orderDirectionUnion()} } yyVAL.union = yyLOCAL - case 1392: + case 1393: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7040 +//line sql.y:7045 { yyLOCAL = AscOrder } yyVAL.union = yyLOCAL - case 1393: + case 1394: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7044 +//line sql.y:7049 { yyLOCAL = AscOrder } yyVAL.union = yyLOCAL - case 1394: + case 1395: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7048 +//line sql.y:7053 { yyLOCAL = DescOrder } yyVAL.union = yyLOCAL - case 1395: + case 1396: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Limit -//line sql.y:7053 +//line sql.y:7058 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1396: + case 1397: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Limit -//line sql.y:7057 +//line sql.y:7062 { yyLOCAL = yyDollar[1].limitUnion() } yyVAL.union = yyLOCAL - case 1397: + case 1398: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Limit -//line sql.y:7063 +//line sql.y:7068 { yyLOCAL = &Limit{Rowcount: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1398: + case 1399: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Limit -//line sql.y:7067 +//line sql.y:7072 { yyLOCAL = &Limit{Offset: yyDollar[2].exprUnion(), Rowcount: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1399: + case 1400: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Limit -//line sql.y:7071 +//line sql.y:7076 { yyLOCAL = &Limit{Offset: yyDollar[4].exprUnion(), Rowcount: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1400: + case 1401: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7076 +//line sql.y:7081 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1401: + case 1402: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7080 +//line sql.y:7085 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1402: + case 1403: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7084 +//line sql.y:7089 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1403: + case 1404: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7088 +//line sql.y:7093 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1404: + case 1405: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7092 +//line sql.y:7097 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1405: + case 1406: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7102 +//line sql.y:7107 { yyLOCAL = &LockOption{Type: DefaultType} } yyVAL.union = yyLOCAL - case 1406: + case 1407: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7106 +//line sql.y:7111 { yyLOCAL = &LockOption{Type: NoneType} } yyVAL.union = yyLOCAL - case 1407: + case 1408: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7110 +//line sql.y:7115 { yyLOCAL = &LockOption{Type: SharedType} } yyVAL.union = yyLOCAL - case 1408: + case 1409: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7114 +//line sql.y:7119 { yyLOCAL = &LockOption{Type: ExclusiveType} } yyVAL.union = yyLOCAL - case 1409: + case 1410: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7120 +//line sql.y:7125 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1410: + case 1411: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7124 +//line sql.y:7129 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1411: + case 1412: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7128 +//line sql.y:7133 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1412: + case 1413: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7132 +//line sql.y:7137 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1413: + case 1414: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7137 +//line sql.y:7142 { yyVAL.str = "" } - case 1414: + case 1415: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7141 +//line sql.y:7146 { yyVAL.str = string(yyDollar[3].str) } - case 1415: + case 1416: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7145 +//line sql.y:7150 { yyVAL.str = string(yyDollar[3].str) } - case 1416: + case 1417: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7149 +//line sql.y:7154 { yyVAL.str = string(yyDollar[3].str) } - case 1417: + case 1418: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7154 +//line sql.y:7159 { yyVAL.str = "" } - case 1418: + case 1419: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7158 +//line sql.y:7163 { yyVAL.str = yyDollar[3].str } - case 1419: + case 1420: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7164 +//line sql.y:7169 { yyVAL.str = string(yyDollar[1].str) } - case 1420: + case 1421: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7168 +//line sql.y:7173 { yyVAL.str = string(yyDollar[1].str) } - case 1421: + case 1422: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7173 +//line sql.y:7178 { yyVAL.str = "" } - case 1422: + case 1423: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:7177 +//line sql.y:7182 { yyVAL.str = yyDollar[2].str } - case 1423: + case 1424: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7182 +//line sql.y:7187 { yyVAL.str = "cascaded" } - case 1424: + case 1425: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7186 +//line sql.y:7191 { yyVAL.str = string(yyDollar[1].str) } - case 1425: + case 1426: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7190 +//line sql.y:7195 { yyVAL.str = string(yyDollar[1].str) } - case 1426: + case 1427: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL CheckOptions -//line sql.y:7195 +//line sql.y:7200 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1427: + case 1428: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckOptions -//line sql.y:7199 +//line sql.y:7204 { yyLOCAL = CheckOptions{yyDollar[1].checkTypeUnion()} } yyVAL.union = yyLOCAL - case 1428: + case 1429: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7203 +//line sql.y:7208 { yySLICE := (*CheckOptions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].checkTypeUnion()) } - case 1429: + case 1430: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL CheckType -//line sql.y:7209 +//line sql.y:7214 { yyLOCAL = Forupgrade } yyVAL.union = yyLOCAL - case 1430: + case 1431: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType -//line sql.y:7213 +//line sql.y:7218 { yyLOCAL = Fast } yyVAL.union = yyLOCAL - case 1431: + case 1432: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType -//line sql.y:7217 +//line sql.y:7222 { yyLOCAL = Quick } yyVAL.union = yyLOCAL - case 1432: + case 1433: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType -//line sql.y:7221 +//line sql.y:7226 { yyLOCAL = Medium } yyVAL.union = yyLOCAL - case 1433: + case 1434: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType -//line sql.y:7225 +//line sql.y:7230 { yyLOCAL = Extended } yyVAL.union = yyLOCAL - case 1434: + case 1435: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType -//line sql.y:7229 +//line sql.y:7234 { yyLOCAL = CHanged } yyVAL.union = yyLOCAL - case 1435: + case 1436: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Definer -//line sql.y:7235 +//line sql.y:7240 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1436: + case 1437: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Definer -//line sql.y:7239 +//line sql.y:7244 { yyLOCAL = yyDollar[3].definerUnion() } yyVAL.union = yyLOCAL - case 1437: + case 1438: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Definer -//line sql.y:7245 +//line sql.y:7250 { yyLOCAL = &Definer{ Name: string(yyDollar[1].str), } } yyVAL.union = yyLOCAL - case 1438: + case 1439: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Definer -//line sql.y:7251 +//line sql.y:7256 { yyLOCAL = &Definer{ Name: string(yyDollar[1].str), } } yyVAL.union = yyLOCAL - case 1439: + case 1440: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Definer -//line sql.y:7257 +//line sql.y:7262 { yyLOCAL = &Definer{ Name: yyDollar[1].str, @@ -19855,369 +19937,369 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1440: + case 1441: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7266 +//line sql.y:7271 { yyVAL.str = encodeSQLString(yyDollar[1].str) } - case 1441: + case 1442: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7270 +//line sql.y:7275 { yyVAL.str = formatIdentifier(yyDollar[1].str) } - case 1442: + case 1443: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7275 +//line sql.y:7280 { yyVAL.str = "" } - case 1443: + case 1444: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7279 +//line sql.y:7284 { yyVAL.str = formatAddress(yyDollar[1].str) } - case 1444: + case 1445: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Lock -//line sql.y:7285 +//line sql.y:7290 { yyLOCAL = ForUpdateLock } yyVAL.union = yyLOCAL - case 1445: + case 1446: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Lock -//line sql.y:7289 +//line sql.y:7294 { yyLOCAL = ShareModeLock } yyVAL.union = yyLOCAL - case 1446: + case 1447: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7295 +//line sql.y:7300 { yyLOCAL = &SelectInto{Type: IntoOutfileS3, FileName: encodeSQLString(yyDollar[4].str), Charset: yyDollar[5].columnCharset, FormatOption: yyDollar[6].str, ExportOption: yyDollar[7].str, Manifest: yyDollar[8].str, Overwrite: yyDollar[9].str} } yyVAL.union = yyLOCAL - case 1447: + case 1448: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7299 +//line sql.y:7304 { yyLOCAL = &SelectInto{Type: IntoDumpfile, FileName: encodeSQLString(yyDollar[3].str), Charset: ColumnCharset{}, FormatOption: "", ExportOption: "", Manifest: "", Overwrite: ""} } yyVAL.union = yyLOCAL - case 1448: + case 1449: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7303 +//line sql.y:7308 { yyLOCAL = &SelectInto{Type: IntoOutfile, FileName: encodeSQLString(yyDollar[3].str), Charset: yyDollar[4].columnCharset, FormatOption: "", ExportOption: yyDollar[5].str, Manifest: "", Overwrite: ""} } yyVAL.union = yyLOCAL - case 1449: + case 1450: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7308 +//line sql.y:7313 { yyVAL.str = "" } - case 1450: + case 1451: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7312 +//line sql.y:7317 { yyVAL.str = " format csv" + yyDollar[3].str } - case 1451: + case 1452: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7316 +//line sql.y:7321 { yyVAL.str = " format text" + yyDollar[3].str } - case 1452: + case 1453: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7321 +//line sql.y:7326 { yyVAL.str = "" } - case 1453: + case 1454: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7325 +//line sql.y:7330 { yyVAL.str = " header" } - case 1454: + case 1455: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7330 +//line sql.y:7335 { yyVAL.str = "" } - case 1455: + case 1456: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7334 +//line sql.y:7339 { yyVAL.str = " manifest on" } - case 1456: + case 1457: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7338 +//line sql.y:7343 { yyVAL.str = " manifest off" } - case 1457: + case 1458: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7343 +//line sql.y:7348 { yyVAL.str = "" } - case 1458: + case 1459: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7347 +//line sql.y:7352 { yyVAL.str = " overwrite on" } - case 1459: + case 1460: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7351 +//line sql.y:7356 { yyVAL.str = " overwrite off" } - case 1460: + case 1461: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7357 +//line sql.y:7362 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1461: + case 1462: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7362 +//line sql.y:7367 { yyVAL.str = "" } - case 1462: + case 1463: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7366 +//line sql.y:7371 { yyVAL.str = " lines" + yyDollar[2].str } - case 1463: + case 1464: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7372 +//line sql.y:7377 { yyVAL.str = yyDollar[1].str } - case 1464: + case 1465: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7376 +//line sql.y:7381 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1465: + case 1466: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7382 +//line sql.y:7387 { yyVAL.str = " starting by " + encodeSQLString(yyDollar[3].str) } - case 1466: + case 1467: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7386 +//line sql.y:7391 { yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str) } - case 1467: + case 1468: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7391 +//line sql.y:7396 { yyVAL.str = "" } - case 1468: + case 1469: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7395 +//line sql.y:7400 { yyVAL.str = " " + yyDollar[1].str + yyDollar[2].str } - case 1469: + case 1470: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7401 +//line sql.y:7406 { yyVAL.str = yyDollar[1].str } - case 1470: + case 1471: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7405 +//line sql.y:7410 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1471: + case 1472: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7411 +//line sql.y:7416 { yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str) } - case 1472: + case 1473: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:7415 +//line sql.y:7420 { yyVAL.str = yyDollar[1].str + " enclosed by " + encodeSQLString(yyDollar[4].str) } - case 1473: + case 1474: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7419 +//line sql.y:7424 { yyVAL.str = " escaped by " + encodeSQLString(yyDollar[3].str) } - case 1474: + case 1475: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7424 +//line sql.y:7429 { yyVAL.str = "" } - case 1475: + case 1476: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7428 +//line sql.y:7433 { yyVAL.str = " optionally" } - case 1476: + case 1477: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Insert -//line sql.y:7441 +//line sql.y:7446 { yyLOCAL = &Insert{Rows: yyDollar[2].valuesUnion()} } yyVAL.union = yyLOCAL - case 1477: + case 1478: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Insert -//line sql.y:7445 +//line sql.y:7450 { yyLOCAL = &Insert{Rows: yyDollar[1].selStmtUnion()} } yyVAL.union = yyLOCAL - case 1478: + case 1479: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *Insert -//line sql.y:7449 +//line sql.y:7454 { yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[5].valuesUnion()} } yyVAL.union = yyLOCAL - case 1479: + case 1480: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Insert -//line sql.y:7453 +//line sql.y:7458 { yyLOCAL = &Insert{Columns: []IdentifierCI{}, Rows: yyDollar[4].valuesUnion()} } yyVAL.union = yyLOCAL - case 1480: + case 1481: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Insert -//line sql.y:7457 +//line sql.y:7462 { yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[4].selStmtUnion()} } yyVAL.union = yyLOCAL - case 1481: + case 1482: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:7463 +//line sql.y:7468 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 1482: + case 1483: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Columns -//line sql.y:7467 +//line sql.y:7472 { yyLOCAL = Columns{yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 1483: + case 1484: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7471 +//line sql.y:7476 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 1484: + case 1485: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:7475 +//line sql.y:7480 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[5].identifierCI) } - case 1485: + case 1486: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7480 +//line sql.y:7485 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1486: + case 1487: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7484 +//line sql.y:7489 { yyLOCAL = yyDollar[5].updateExprsUnion() } yyVAL.union = yyLOCAL - case 1487: + case 1488: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Values -//line sql.y:7490 +//line sql.y:7495 { yyLOCAL = Values{yyDollar[1].valTupleUnion()} } yyVAL.union = yyLOCAL - case 1488: + case 1489: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7494 +//line sql.y:7499 { yySLICE := (*Values)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].valTupleUnion()) } - case 1489: + case 1490: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7500 +//line sql.y:7505 { yyLOCAL = yyDollar[1].valTupleUnion() } yyVAL.union = yyLOCAL - case 1490: + case 1491: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7504 +//line sql.y:7509 { yyLOCAL = ValTuple{} } yyVAL.union = yyLOCAL - case 1491: + case 1492: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7510 +//line sql.y:7515 { yyLOCAL = ValTuple(yyDollar[2].exprsUnion()) } yyVAL.union = yyLOCAL - case 1492: + case 1493: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7514 +//line sql.y:7519 { yyLOCAL = ValTuple(yyDollar[3].exprsUnion()) } yyVAL.union = yyLOCAL - case 1493: + case 1494: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7519 +//line sql.y:7524 { if len(yyDollar[1].valTupleUnion()) == 1 { yyLOCAL = yyDollar[1].valTupleUnion()[0] @@ -20226,273 +20308,273 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1494: + case 1495: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7529 +//line sql.y:7534 { yyLOCAL = UpdateExprs{yyDollar[1].updateExprUnion()} } yyVAL.union = yyLOCAL - case 1495: + case 1496: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7533 +//line sql.y:7538 { yySLICE := (*UpdateExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].updateExprUnion()) } - case 1496: + case 1497: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *UpdateExpr -//line sql.y:7539 +//line sql.y:7544 { yyLOCAL = &UpdateExpr{Name: yyDollar[1].colNameUnion(), Expr: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1498: + case 1499: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7546 +//line sql.y:7551 { yyVAL.str = "charset" } - case 1501: + case 1502: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7556 +//line sql.y:7561 { yyLOCAL = NewStrLiteral(yyDollar[1].identifierCI.String()) } yyVAL.union = yyLOCAL - case 1502: + case 1503: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7560 +//line sql.y:7565 { yyLOCAL = NewStrLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1503: + case 1504: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7564 +//line sql.y:7569 { yyLOCAL = &Default{} } yyVAL.union = yyLOCAL - case 1506: + case 1507: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7573 +//line sql.y:7578 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1507: + case 1508: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:7575 +//line sql.y:7580 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1508: + case 1509: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7578 +//line sql.y:7583 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1509: + case 1510: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:7580 +//line sql.y:7585 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1510: + case 1511: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7583 +//line sql.y:7588 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1511: + case 1512: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL bool -//line sql.y:7585 +//line sql.y:7590 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1512: + case 1513: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Ignore -//line sql.y:7588 +//line sql.y:7593 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1513: + case 1514: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Ignore -//line sql.y:7590 +//line sql.y:7595 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1514: + case 1515: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7593 +//line sql.y:7598 { yyVAL.empty = struct{}{} } - case 1515: + case 1516: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7595 +//line sql.y:7600 { yyVAL.empty = struct{}{} } - case 1516: + case 1517: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7597 +//line sql.y:7602 { yyVAL.empty = struct{}{} } - case 1517: + case 1518: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:7601 +//line sql.y:7606 { yyLOCAL = &CallProc{Name: yyDollar[2].tableName, Params: yyDollar[4].exprsUnion()} } yyVAL.union = yyLOCAL - case 1518: + case 1519: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Exprs -//line sql.y:7606 +//line sql.y:7611 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1519: + case 1520: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Exprs -//line sql.y:7610 +//line sql.y:7615 { yyLOCAL = yyDollar[1].exprsUnion() } yyVAL.union = yyLOCAL - case 1520: + case 1521: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:7615 +//line sql.y:7620 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1521: + case 1522: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:7617 +//line sql.y:7622 { yyLOCAL = []*IndexOption{yyDollar[1].indexOptionUnion()} } yyVAL.union = yyLOCAL - case 1522: + case 1523: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:7621 +//line sql.y:7626 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), String: string(yyDollar[2].identifierCI.String())} } yyVAL.union = yyLOCAL - case 1523: + case 1524: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7627 +//line sql.y:7632 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 1524: + case 1525: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7631 +//line sql.y:7636 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 1526: + case 1527: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7638 +//line sql.y:7643 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 1527: + case 1528: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7644 +//line sql.y:7649 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1528: + case 1529: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7648 +//line sql.y:7653 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1529: + case 1530: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7654 +//line sql.y:7659 { yyVAL.identifierCS = NewIdentifierCS("") } - case 1530: + case 1531: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7658 +//line sql.y:7663 { yyVAL.identifierCS = yyDollar[1].identifierCS } - case 1532: + case 1533: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7665 +//line sql.y:7670 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 2095: + case 2097: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8255 +//line sql.y:8261 { if incNesting(yylex) { yylex.Error("max nesting level reached") return 1 } } - case 2096: + case 2098: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8264 +//line sql.y:8270 { decNesting(yylex) } - case 2097: + case 2099: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8269 +//line sql.y:8275 { skipToEnd(yylex) } - case 2098: + case 2100: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8274 +//line sql.y:8280 { skipToEnd(yylex) } - case 2099: + case 2101: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8278 +//line sql.y:8284 { skipToEnd(yylex) } - case 2100: + case 2102: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8282 +//line sql.y:8288 { skipToEnd(yylex) } diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index 6a159d98c9..629f0b5e98 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -347,6 +347,7 @@ func bindVariable(yylex yyLexer, bvar string) { %token CODE COLLATION COLUMNS DATABASES ENGINES EVENT EXTENDED FIELDS FULL FUNCTION GTID_EXECUTED %token KEYSPACES OPEN PLUGINS PRIVILEGES PROCESSLIST SCHEMAS TABLES TRIGGERS USER %token VGTID_EXECUTED VITESS_KEYSPACES VITESS_METADATA VITESS_MIGRATIONS VITESS_REPLICATION_STATUS VITESS_SHARDS VITESS_TABLETS VITESS_TARGET VSCHEMA VITESS_THROTTLED_APPS WORKLOAD LASTSEENGTID FAILPOINTS +%token DML_JOBS // SET tokens %token NAMES GLOBAL SESSION ISOLATION LEVEL READ WRITE ONLY REPEATABLE COMMITTED UNCOMMITTED SERIALIZABLE @@ -4311,6 +4312,10 @@ show_statement: { $$ = &Show{&ShowBasic{Command: VitessMigrations, Filter: $4, DbName: $3}} } +| SHOW DML_JOBS from_database_opt like_or_where_opt + { + $$ = &Show{&ShowBasic{Command: DMLJobs, Filter: $4, DbName: $3}} + } | SHOW VITESS_MIGRATION STRING LOGS { $$ = &ShowMigrationLogs{UUID: string($3)} @@ -8210,6 +8215,7 @@ non_reserved_keyword: | VITESS_MIGRATION | VITESS_MIGRATIONS | SCHEMA_MIGRATION +| DML_JOBS | VITESS_REPLICATION_STATUS | VITESS_SHARDS | VITESS_TABLETS diff --git a/go/vt/vtgate/executor.go b/go/vt/vtgate/executor.go index 4db234bcca..9a863a100a 100644 --- a/go/vt/vtgate/executor.go +++ b/go/vt/vtgate/executor.go @@ -1556,6 +1556,21 @@ func (e *Executor) SetFailPoint(command string, key string, value string) error return nil } +func (e *Executor) SubmitDMLJob(command, sql, uuid string) (*sqltypes.Result, error) { + ctx := context.Background() + // todo newborn22, scatterConn or txnConn? + // todo ,这个写法丑陋,要直接拿到primary + healthyTablets := e.scatterConn.gateway.hc.GetAllHealthyTabletStats() + var th *discovery.TabletHealth + for _, tablet := range healthyTablets { + if tablet.Tablet.Type == topodatapb.TabletType_PRIMARY { + th = tablet + break + } + } + return th.Conn.HandleDMLJob(ctx, command, sql, uuid) +} + func (e *Executor) checkThatPlanIsValid(stmt sqlparser.Statement, plan *engine.Plan) error { if e.allowScatter || plan.Instructions == nil || sqlparser.AllowScatterDirective(stmt) { return nil diff --git a/go/vt/vtgate/plan_execute.go b/go/vt/vtgate/plan_execute.go index 8b6154c7a4..8585ccfd46 100644 --- a/go/vt/vtgate/plan_execute.go +++ b/go/vt/vtgate/plan_execute.go @@ -95,6 +95,16 @@ func (e *Executor) newExecute( return err } + // todo newborn22, 是不是要换位置。 + // 注意只有提交的时候需要这样加hint,其他的都是通过show和alter命令进行,参考online ddl执行路径 + rst, err := HandleDMLJobSubmit(stmt, vcursor, sql) + if err != nil { + return err + } + if rst != nil { + return recResult(plan.Type, rst) + } + if plan.Type != sqlparser.StmtShow { safeSession.ClearWarnings() } @@ -429,3 +439,26 @@ func ResolveTabletType(safeSession *SafeSession, vcursor *vcursorImpl, stmt sqlp vcursor.tabletType = safeSession.ResolverOptions.SuggestedTabletType return nil } + +func IsSubmitDMLJob(stmt sqlparser.Statement) bool { + cmd := sqlparser.GetDMLJobCmd(stmt) + return cmd == "submit" +} + +// todo newborn22,提交成功后要返回结果集 +func HandleDMLJobSubmit(stmt sqlparser.Statement, vcursor *vcursorImpl, sql string) (*sqltypes.Result, error) { + // todo newborn22,检查是否在事务中,如果是则报错 + if IsSubmitDMLJob(stmt) { + qr, err := vcursor.executor.SubmitDMLJob("submit_job", sql, "") + // todo ,在这个地方把qr写回到前端 + if qr != nil { + if qr.RowsAffected == 1 { + qr.Info = " job submitted successfully" + } else { + qr.Info = " job submitted failed" + } + } + return qr, err + } + return nil, nil +} diff --git a/go/vt/vtgate/planbuilder/show.go b/go/vt/vtgate/planbuilder/show.go index e1f0dfb9c2..4ca60ce67c 100644 --- a/go/vt/vtgate/planbuilder/show.go +++ b/go/vt/vtgate/planbuilder/show.go @@ -154,6 +154,8 @@ func buildShowVitessPlan(show *sqlparser.ShowBasic, vschema plancontext.VSchema) return buildDBPlan(show, vschema) case sqlparser.VitessMigrations, sqlparser.SchemaMigration: return buildShowVMigrationsPlan(show, vschema) + case sqlparser.DMLJobs: + return buildShowDMLJobsPlan(show, vschema) case sqlparser.GtidExecGlobal: return buildShowGtidPlan(show, vschema) case sqlparser.VitessReplicationStatus, sqlparser.VitessShards, sqlparser.VitessTablets, sqlparser.VitessVariables, sqlparser.Workload, sqlparser.LastSeenGTID, sqlparser.FailPoints: @@ -321,6 +323,40 @@ func buildShowVMigrationsPlan(show *sqlparser.ShowBasic, vschema plancontext.VSc }, nil } +func buildShowDMLJobsPlan(show *sqlparser.ShowBasic, vschema plancontext.VSchema) (engine.Primitive, error) { + dest, ks, tabletType, err := vschema.TargetDestination(show.DbName.String()) + if err != nil { + return nil, err + } + if ks == nil { + return nil, vterrors.VT09005() + } + + if tabletType != topodatapb.TabletType_PRIMARY { + return nil, vterrors.VT09006("SHOW") + } + + if dest == nil { + dest = key.DestinationAllShards{} + } + + sql := "SELECT * FROM mysql.big_dml_jobs_table" + + if show.Filter != nil { + if show.Filter.Filter != nil { + sql += fmt.Sprintf(" where %s", sqlparser.String(show.Filter.Filter)) + } else if show.Filter.Like != "" { + lit := sqlparser.String(sqlparser.NewStrLiteral(show.Filter.Like)) + sql += fmt.Sprintf(" where migration_uuid LIKE %s OR migration_context LIKE %s OR migration_status LIKE %s", lit, lit, lit) + } + } + return &engine.Send{ + Keyspace: ks, + TargetDestination: dest, + Query: sql, + }, nil +} + func buildPlanWithDB(show *sqlparser.ShowBasic, vschema plancontext.VSchema) (engine.Primitive, error) { dbName := show.DbName dbDestination := show.DbName.String() diff --git a/go/vt/vtgate/vcursor_impl.go b/go/vt/vtgate/vcursor_impl.go index 50a495c841..ecd03543eb 100644 --- a/go/vt/vtgate/vcursor_impl.go +++ b/go/vt/vtgate/vcursor_impl.go @@ -93,6 +93,7 @@ type iExecute interface { reloadExec(ctx context.Context, reloadType *sqlparser.ReloadType) error VSchema() *vindexes.VSchema SetFailPoint(command string, key string, value string) error + SubmitDMLJob(command, sql, uuid string) (*sqltypes.Result, error) } // VSchemaOperator is an interface to Vschema Operations diff --git a/go/vt/vttablet/grpcqueryservice/server.go b/go/vt/vttablet/grpcqueryservice/server.go index 965e669451..92f23c51e8 100644 --- a/go/vt/vttablet/grpcqueryservice/server.go +++ b/go/vt/vttablet/grpcqueryservice/server.go @@ -528,6 +528,11 @@ func (q *query) SetFailPoint(ctx context.Context, request *querypb.SetFailPointR return nil, q.server.SetFailPoint(ctx, request.Command, request.Key, request.Value) } +func (q *query) HandleDMLJob(ctx context.Context, request *querypb.DMLJobRequest) (*querypb.DMLJobResponse, error) { + rst, err := q.server.HandleDMLJob(ctx, request.Cmd, request.Sql, request.JobUuid) + return &querypb.DMLJobResponse{Result: sqltypes.ResultToProto3(rst)}, err +} + // Register registers the implementation on the provide gRPC Server. func Register(s *grpc.Server, server queryservice.QueryService) { queryservicepb.RegisterQueryServer(s, &query{server: server}) diff --git a/go/vt/vttablet/grpctabletconn/conn.go b/go/vt/vttablet/grpctabletconn/conn.go index 7fae4dd897..3c38dbc34b 100644 --- a/go/vt/vttablet/grpctabletconn/conn.go +++ b/go/vt/vttablet/grpctabletconn/conn.go @@ -1133,6 +1133,26 @@ func (conn *gRPCQueryClient) SetFailPoint(ctx context.Context, command string, k return nil } +func (conn *gRPCQueryClient) HandleDMLJob(ctx context.Context, command, sql, uuid string) (*sqltypes.Result, error) { + // todo newborn22,为什么要加锁? + // todo,什么时候调用? + conn.mu.RLock() + defer conn.mu.RUnlock() + if conn.cc == nil { + return nil, tabletconn.ConnClosed + } + req := querypb.DMLJobRequest{ + Cmd: command, + Sql: sql, + JobUuid: uuid, + } + er, err := conn.c.HandleDMLJob(ctx, &req) + if err != nil { + return nil, tabletconn.ErrorFromGRPC(err) + } + return sqltypes.Proto3ToResult(er.Result), nil +} + // Close closes underlying gRPC channel. func (conn *gRPCQueryClient) Close(ctx context.Context) error { conn.mu.Lock() diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go new file mode 100644 index 0000000000..aabf406301 --- /dev/null +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -0,0 +1,411 @@ +/* +Copyright ApeCloud, Inc. +Licensed under the Apache v2(found in the LICENSE file in the root directory). +*/ + +package jobcontroller + +import ( + "context" + "fmt" + "math" + "regexp" + "strings" + "sync" + "time" + + "vitess.io/vitess/go/pools" + "vitess.io/vitess/go/sqltypes" + topodatapb "vitess.io/vitess/go/vt/proto/topodata" + "vitess.io/vitess/go/vt/schema" + "vitess.io/vitess/go/vt/sqlparser" + "vitess.io/vitess/go/vt/vttablet/tabletserver/connpool" + "vitess.io/vitess/go/vt/vttablet/tabletserver/tabletenv" +) + +// todo newborn22, 数一下连接数是不是3够用 +const ( + databasePoolSize = 3 +) + +const ( + SubmitJob = "submit_job" + ShowJobs = "show_jobs" +) + +// todo ,支持用户输入 +const ( + defaultTimeGap = 1000 // 1000ms + defaultSubtaskRows = 100 +) + +const ( + postponeLaunchStatus = "postpone-launch" + queuedStatus = "queued" + blockedStatus = "blocked" + runningStatus = "running" + interruptedStatus = "interrupted" + canceledStatus = "canceled" + failedStatus = "failed" + completedStatus = "completed" +) + +const ( + sqlDMLJobSubmit = `insert into mysql.big_dml_jobs_table ( + job_uuid, + dml_sql, + related_schema, + related_table, + timegap_in_ms, + subtask_rows, + job_status) values(%a,%a,%a,%a,%a,%a,%a)` + + sqlDMLJobUpdateMessage = `update mysql.big_dml_jobs_table set + message = %a + where + job_uuid = %a` + + sqlDMLJobUpdateAffectedRows = `update mysql.big_dml_jobs_table set + affected_rows = affected_rows + %a + where + job_uuid = %a` + + sqlDMLJobUpdateStatus = `update mysql.big_dml_jobs_table set + job_status = %a + where + job_uuid = %a` +) + +type JobController struct { + tableName string + tableMutex sync.Mutex // todo newborn22,检查是否都上锁了 + tabletTypeFunc func() topodatapb.TabletType + env tabletenv.Env + pool *connpool.Pool + + runningTables map[string]bool // 用于调度时检测当前任务是否和正在运行的表冲突 + runningTablesMutex sync.Mutex + + jobChans map[string]JobChanStruct + jobChansMutex sync.Mutex +} + +type JobChanStruct struct { + pauseAndResume chan string + throttleAndUnthrottle chan string +} + +// todo newborn22, 初始化函数 +// 要加锁? +func (jc *JobController) Open() error { + // todo newborn22 ,改成英文注释 + // 只在primary上运行,记得在rpc那里也做处理 + // todo newborn22, if 可以删掉 + if jc.tabletTypeFunc() == topodatapb.TabletType_PRIMARY { + jc.pool.Open(jc.env.Config().DB.AppConnector(), jc.env.Config().DB.DbaConnector(), jc.env.Config().DB.AppDebugConnector()) + + jc.runningTables = map[string]bool{} + jc.jobChans = map[string]JobChanStruct{} + + go jc.jonScheduler() + } + return nil +} + +func (jc *JobController) Close() { + jc.pool.Close() +} + +func NewJobController(tableName string, tabletTypeFunc func() topodatapb.TabletType, env tabletenv.Env) *JobController { + return &JobController{ + tableName: tableName, + tabletTypeFunc: tabletTypeFunc, + env: env, + pool: connpool.NewPool(env, "DMLJobControllerPool", tabletenv.ConnPoolConfig{ + Size: databasePoolSize, + IdleTimeoutSeconds: env.Config().OltpReadPool.IdleTimeoutSeconds, + })} + + // 检查字段 + + // 将实例某些字段持久化写入表,能够crash后恢复 + // 将实例放入内存中某个地方 +} + +// todo newborn22 , 能否改写得更有通用性? 这样改写是否好? +func (jc *JobController) HandleRequest(command, sql, jobUUID string) (*sqltypes.Result, error) { + // todo newborn22, if 可以删掉 + if jc.tabletTypeFunc() == topodatapb.TabletType_PRIMARY { + switch command { + case SubmitJob: + return jc.SubmitJob(sql) + case ShowJobs: + return jc.ShowJobs() + } + } + // todo newborn22,对返回值判断为空? + return nil, nil +} + +// todo newboen22 函数的可见性,封装性上的改进? +// todo 传timegap和table_name +func (jc *JobController) SubmitJob(sql string) (*sqltypes.Result, error) { + jc.tableMutex.Lock() + defer jc.tableMutex.Unlock() + jc.jobChansMutex.Lock() + defer jc.jobChansMutex.Unlock() + + jobUUID, err := schema.CreateUUIDWithDelimiter("-") + if err != nil { + return nil, err + } + + ctx := context.Background() + sql = rewirteSQL(sql) + relatedSchema := "mydb" // todo,传入 + table := "test_table2" // todo ,前端传入 + timeGap := defaultTimeGap + subtaskRows := defaultSubtaskRows + + submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobSubmit, + sqltypes.StringBindVariable(jobUUID), + sqltypes.StringBindVariable(sql), + sqltypes.StringBindVariable(relatedSchema), + sqltypes.StringBindVariable(table), + sqltypes.Int64BindVariable(int64(timeGap)), + sqltypes.Int64BindVariable(int64(subtaskRows)), + sqltypes.StringBindVariable(queuedStatus)) + if err != nil { + return nil, err + } + + jobChan := JobChanStruct{pauseAndResume: make(chan string), throttleAndUnthrottle: make(chan string)} + jc.jobChans[jobUUID] = jobChan + + return jc.execQuery(ctx, "", submitQuery) +} + +func (jc *JobController) ShowJobs() (*sqltypes.Result, error) { + jc.tableMutex.Lock() + defer jc.tableMutex.Unlock() + ctx := context.Background() + showJobsSQL := fmt.Sprintf("select * from %s", jc.tableName) + return jc.execQuery(ctx, "mysql", showJobsSQL) +} + +func (jc *JobController) ControlJob() error { + return nil +} + +func (jc *JobController) RunJob() error { + return nil +} + +func (jc *JobController) QueryJob() error { + return nil +} + +func (jc *JobController) CompleteJob(ctx context.Context, uuid, table string) error { + jc.runningTablesMutex.Lock() + defer jc.runningTablesMutex.Unlock() + delete(jc.runningTables, table) + + jc.jobChansMutex.Lock() + defer jc.jobChansMutex.Unlock() + close(jc.jobChans[uuid].pauseAndResume) + close(jc.jobChans[uuid].throttleAndUnthrottle) + delete(jc.jobChans, uuid) + + return jc.updateJobStatus(ctx, uuid, completedStatus) +} + +// todo, 记录错误时的错误怎么处理 +func (jc *JobController) FailJob(ctx context.Context, uuid, message string) { + _ = jc.updateJobMessage(ctx, uuid, message) + _ = jc.updateJobStatus(ctx, uuid, failedStatus) +} + +// todo newborn 做成接口 +func jobTask() { +} + +// 注意非primary要关掉 +// todo 做成休眠和唤醒的 +func (jc *JobController) jonScheduler() { + ctx := context.Background() + for { + jc.runningTablesMutex.Lock() + jc.tableMutex.Lock() + + qr, _ := jc.execQuery(ctx, "", "select * from mysql.big_dml_jobs_table;") + if qr == nil { + continue + } + for _, row := range qr.Named().Rows { + status := row["job_status"].ToString() + schema := row["related_schema"].ToString() + table := row["related_table"].ToString() + uuid := row["job_uuid"].ToString() + sql := row["dml_sql"].ToString() + timegap, _ := row["timegap_in_ms"].ToInt64() + subtaskRows, _ := row["subtask_rows"].ToInt64() + if jc.checkDmlJobRunnable(status, table) { + go jc.dmlJobRunner(uuid, table, sql, schema, subtaskRows, timegap) + } + } + + jc.runningTablesMutex.Unlock() + jc.tableMutex.Unlock() + + time.Sleep(3 * time.Second) + } +} + +// 外部需要加锁 +// todo,并发数的限制 +func (jc *JobController) checkDmlJobRunnable(status, table string) bool { + if status != queuedStatus { + return false + } + if _, exit := jc.runningTables[table]; exit { + return false + } + return true +} + +func (jc *JobController) dmlJobRunner(uuid, table, sql, relatedSchema string, subtaskRows, timeGap int64) { + subtaskSQL := genSubtaskDMLSQL(sql, subtaskRows) + jc.jobChansMutex.Lock() + jobChan := jc.jobChans[uuid] + jc.jobChansMutex.Unlock() + + pauseAndResumeChan := jobChan.pauseAndResume + + // timeGap 单位ms,duration输入ns,应该乘上1000000 + timer := time.NewTicker(time.Duration(timeGap * 1e6)) + defer timer.Stop() + + ctx := context.Background() + + jc.runningTablesMutex.Lock() + jc.runningTables[table] = true + jc.runningTablesMutex.Unlock() + _ = jc.updateJobStatus(ctx, uuid, runningStatus) + + // 在一个无限循环中等待定时器触发 + for { + select { + case <-timer.C: + // 定时器触发时执行的函数 + qr, err := jc.execQuery(ctx, relatedSchema, subtaskSQL) + if err != nil { + jc.FailJob(ctx, uuid, err.Error()) + return + } + if qr.RowsAffected == 0 { + err = jc.CompleteJob(ctx, uuid, table) + if err != nil { + jc.FailJob(ctx, uuid, err.Error()) + } + return + } + err = jc.updateJobAffectedRows(ctx, uuid, int64(qr.RowsAffected)) + if err != nil { + jc.FailJob(ctx, uuid, err.Error()) + return + } + + // 控制暂停 + case command := <-pauseAndResumeChan: + switch command { + case "pause": + for { + cmd := <-pauseAndResumeChan + if cmd == "resume" { // actually, cmd will always be "resume", the code logic will guarantee that + break + } + } + } + } + } + +} + +// todo sql类型的判断换成别的方式 +// todo 加行数字段 +func genSubtaskDMLSQL(sql string, subtaskRows int64) string { + var subtaskSQL string + sqlType := strings.ToLower(strings.Fields(sql)[0]) + switch sqlType { + case "delete": + subtaskSQL = sql + fmt.Sprintf(" LIMIT %d", subtaskRows) + } + return subtaskSQL +} + +// execQuery execute sql by using connect poll,so if targetString is not empty, it will add prefix `use database` first then execute sql. +func (jc *JobController) execQuery(ctx context.Context, targetString, query string) (result *sqltypes.Result, err error) { + defer jc.env.LogError() + var setting pools.Setting + if targetString != "" { + setting.SetWithoutDBName(false) + setting.SetQuery(fmt.Sprintf("use %s", targetString)) + } + conn, err := jc.pool.Get(ctx, &setting) + if err != nil { + return result, err + } + defer conn.Recycle() + return conn.Exec(ctx, query, math.MaxInt32, true) +} + +func rewirteSQL(input string) string { + // 定义正则表达式匹配注释 + re := regexp.MustCompile(`/\*.*?\*/`) + // 用空字符串替换匹配到的注释 + result := re.ReplaceAllString(input, "") + return result +} + +// 该函数拿锁 +func (jc *JobController) updateJobMessage(ctx context.Context, uuid, message string) error { + jc.tableMutex.Lock() + defer jc.tableMutex.Unlock() + + submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobUpdateMessage, + sqltypes.StringBindVariable(message), + sqltypes.StringBindVariable(uuid)) + if err != nil { + return err + } + _, err = jc.execQuery(ctx, "", submitQuery) + return err +} + +func (jc *JobController) updateJobAffectedRows(ctx context.Context, uuid string, affectedRows int64) error { + jc.tableMutex.Lock() + defer jc.tableMutex.Unlock() + + submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobUpdateAffectedRows, + sqltypes.Int64BindVariable(affectedRows), + sqltypes.StringBindVariable(uuid)) + if err != nil { + return err + } + _, err = jc.execQuery(ctx, "", submitQuery) + return err +} + +func (jc *JobController) updateJobStatus(ctx context.Context, uuid, status string) error { + jc.tableMutex.Lock() + defer jc.tableMutex.Unlock() + + submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobUpdateStatus, + sqltypes.StringBindVariable(status), + sqltypes.StringBindVariable(uuid)) + if err != nil { + return err + } + _, err = jc.execQuery(ctx, "", submitQuery) + return err +} diff --git a/go/vt/vttablet/queryservice/queryservice.go b/go/vt/vttablet/queryservice/queryservice.go index b61fe4a626..b4ae04e0b0 100644 --- a/go/vt/vttablet/queryservice/queryservice.go +++ b/go/vt/vttablet/queryservice/queryservice.go @@ -115,6 +115,8 @@ type QueryService interface { SetFailPoint(ctx context.Context, command string, key string, value string) error + HandleDMLJob(ctx context.Context, command, sql, uuid string) (*sqltypes.Result, error) + // HandlePanic will be called if any of the functions panic. HandlePanic(err *error) diff --git a/go/vt/vttablet/queryservice/wrapped.go b/go/vt/vttablet/queryservice/wrapped.go index 7030a77c30..b947f961e4 100644 --- a/go/vt/vttablet/queryservice/wrapped.go +++ b/go/vt/vttablet/queryservice/wrapped.go @@ -374,3 +374,13 @@ func (ws *wrappedService) SetFailPoint(ctx context.Context, command string, key return false, service.SetFailPoint(ctx, command, key, value) }) } + +func (ws *wrappedService) HandleDMLJob(ctx context.Context, cmd, sql, uuid string) (qr *sqltypes.Result, err error) { + err = ws.wrapper(ctx, nil, ws.impl, "HandleDMLJob", false, nil, func(ctx context.Context, target *querypb.Target, conn QueryService) (bool, error) { + // todo newborn22,这个地方是否要canRetry? 参考 dropschema + var innerErr error + qr, innerErr = conn.HandleDMLJob(ctx, cmd, sql, uuid) + return canRetry(ctx, innerErr), innerErr + }) + return qr, err +} diff --git a/go/vt/vttablet/sandboxconn/sandboxconn.go b/go/vt/vttablet/sandboxconn/sandboxconn.go index 3b19c9798a..84ec723368 100644 --- a/go/vt/vttablet/sandboxconn/sandboxconn.go +++ b/go/vt/vttablet/sandboxconn/sandboxconn.go @@ -625,6 +625,10 @@ func (sbc *SandboxConn) SetFailPoint(ctx context.Context, command string, key st return err } +func (sbc *SandboxConn) HandleDMLJob(ctx context.Context, command, sql, uuid string) (*sqltypes.Result, error) { + return nil, nil +} + // Close does not change ExecCount func (sbc *SandboxConn) Close(ctx context.Context) error { return nil diff --git a/go/vt/vttablet/tabletconntest/fakequeryservice.go b/go/vt/vttablet/tabletconntest/fakequeryservice.go index 6a531270e4..597d5aca0a 100644 --- a/go/vt/vttablet/tabletconntest/fakequeryservice.go +++ b/go/vt/vttablet/tabletconntest/fakequeryservice.go @@ -71,6 +71,10 @@ func (f *FakeQueryService) SetFailPoint(ctx context.Context, command string, key return nil } +func (f *FakeQueryService) HandleDMLJob(ctx context.Context, command, sql, uuid string) (*sqltypes.Result, error) { + panic("implement me") +} + var _ queryservice.QueryService = (*FakeQueryService)(nil) // Close is a no-op. diff --git a/go/vt/vttablet/tabletserver/state_manager.go b/go/vt/vttablet/tabletserver/state_manager.go index a12fbfe12b..96e02f9972 100644 --- a/go/vt/vttablet/tabletserver/state_manager.go +++ b/go/vt/vttablet/tabletserver/state_manager.go @@ -115,21 +115,22 @@ type stateManager struct { // Open must be done in forward order. // Close must be done in reverse order. // All Close functions must be called before Open. - hs *healthStreamer - se schemaEngine - rt replTracker - vstreamer subComponent - tracker subComponent - watcher subComponent - branchWatch subComponent - qe queryEngine - txThrottler txThrottler - te txEngine - messager subComponent - ddle onlineDDLExecutor - throttler lagThrottler - tableGC tableGarbageCollector - tableACL tableACLController + hs *healthStreamer + se schemaEngine + rt replTracker + vstreamer subComponent + tracker subComponent + watcher subComponent + branchWatch subComponent + qe queryEngine + txThrottler txThrottler + te txEngine + messager subComponent + ddle onlineDDLExecutor + dmlJobController jobController + throttler lagThrottler + tableGC tableGarbageCollector + tableACL tableACLController // hcticks starts on initialiazation and runs forever. hcticks *timer.Timer @@ -208,6 +209,10 @@ type ( Open() error Close() } + jobController interface { + Open() error + Close() + } ) // Init performs the second phase of initialization. @@ -475,6 +480,7 @@ func (sm *stateManager) servePrimary() error { sm.throttler.Open() sm.tableGC.Open() sm.ddle.Open() + sm.dmlJobController.Open() sm.tableACL.Open() sm.branchWatch.Open() sm.setState(topodatapb.TabletType_PRIMARY, StateServing) @@ -502,6 +508,7 @@ func (sm *stateManager) serveNonPrimary(wantTabletType topodatapb.TabletType) er defer cancel() sm.ddle.Close() + sm.dmlJobController.Close() sm.tableGC.Close() sm.messager.Close() sm.tracker.Close() @@ -558,6 +565,8 @@ func (sm *stateManager) unserveCommon() { log.Infof("Started online ddl executor close") sm.ddle.Close() + log.Infof("Started dml job controller close") + sm.dmlJobController.Close() log.Infof("Finished online ddl executor close. Started table garbage collector close") sm.tableGC.Close() log.Infof("Finished table garbage collector close. Started lag throttler close") diff --git a/go/vt/vttablet/tabletserver/tabletserver.go b/go/vt/vttablet/tabletserver/tabletserver.go index 2b6944dce5..7813e491e4 100644 --- a/go/vt/vttablet/tabletserver/tabletserver.go +++ b/go/vt/vttablet/tabletserver/tabletserver.go @@ -34,6 +34,8 @@ import ( "sync" "time" + "vitess.io/vitess/go/vt/vttablet/jobcontroller" + "github.com/pingcap/failpoint" "google.golang.org/protobuf/proto" @@ -128,6 +130,7 @@ type TabletServer struct { // sm manages state transitions. sm *stateManager onlineDDLExecutor *onlineddl.Executor + dmlJonController *jobcontroller.JobController // alias is used for identifying this tabletserver in healthcheck responses. alias *topodatapb.TabletAlias @@ -194,6 +197,7 @@ func NewTabletServer(name string, config *tabletenv.TabletConfig, topoServer *to tsv.branchWatch = NewBranchWatcher(tsv, tsv.config.DB.DbaWithDB()) tsv.onlineDDLExecutor = onlineddl.NewExecutor(tsv, alias, topoServer, tsv.lagThrottler, tabletTypeFunc, tsv.onlineDDLExecutorToggleTableBuffer) + tsv.dmlJonController = jobcontroller.NewJobController("big_dml_jobs_table", tabletTypeFunc, tsv) tsv.tableGC = gc.NewTableGC(tsv, topoServer, tsv.lagThrottler) tsv.sm = &stateManager{ @@ -1491,6 +1495,11 @@ func (tsv *TabletServer) SetFailPoint(ctx context.Context, command string, key s return err } +func (tsv *TabletServer) HandleDMLJob(ctx context.Context, command, sql, jobUUID string) (*sqltypes.Result, error) { + // todo newborn22, 这个地方要进行封装?,变成更通用的 + return tsv.dmlJonController.HandleRequest(command, sql, jobUUID) +} + // execRequest performs verifications, sets up the necessary environments // and calls the supplied function for executing the request. func (tsv *TabletServer) execRequest( diff --git a/proto/query.proto b/proto/query.proto index 453bf60041..996f170ef6 100644 --- a/proto/query.proto +++ b/proto/query.proto @@ -1078,10 +1078,24 @@ message DropSchemaResponse { } + message ReloadExecRequest{ int32 reloadType = 1; } message ReloadExecResponse{ +} +message DMLJobRequest{ + string cmd = 1; + string job_uuid = 2; + string sql = 3; + string related_schema= 4; + int64 timegap = 6; + int64 subtask_rows = 7; + bool auto_retry = 8; + bool postpone_launch = 9; +} +message DMLJobResponse { + QueryResult result = 1; } \ No newline at end of file diff --git a/proto/queryservice.proto b/proto/queryservice.proto index b956afd784..202c60cc40 100644 --- a/proto/queryservice.proto +++ b/proto/queryservice.proto @@ -128,5 +128,5 @@ service Query { // DropSchema drops the schema on the tablet and cleans up the relevant resources such as OnlineDDL and VReplication rpc DropSchema(query.DropSchemaRequest) returns (query.DropSchemaResponse) {}; - + rpc HandleDMLJob(query.DMLJobRequest) returns (query.DMLJobResponse) {}; } \ No newline at end of file From 54ce6a626cde6a840266042c428d702131e80ff8 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Wed, 6 Dec 2023 20:20:45 +0800 Subject: [PATCH 02/54] feat:demo, delete, submit display, pause and resume Signed-off-by: newborn22 <953950914@qq.com> --- .../schema/job/big_dml_jobs_table.sql | 4 +- go/vt/sqlparser/ast.go | 10 + go/vt/sqlparser/ast_clone.go | 14 + go/vt/sqlparser/ast_copy_on_rewrite.go | 26 + go/vt/sqlparser/ast_equals.go | 26 + go/vt/sqlparser/ast_format.go | 42 + go/vt/sqlparser/ast_format_fast.go | 48 + go/vt/sqlparser/ast_rewrite.go | 31 + go/vt/sqlparser/ast_visit.go | 16 + go/vt/sqlparser/cached_size.go | 16 + go/vt/sqlparser/constants.go | 16 + go/vt/sqlparser/keywords.go | 1 + go/vt/sqlparser/sql.go | 16907 ++++++++-------- go/vt/sqlparser/sql.y | 99 + go/vt/vtgate/plan_execute.go | 4 +- go/vt/vtgate/planbuilder/builder.go | 2 + go/vt/vtgate/planbuilder/dmlJob.go | 39 + go/vt/vttablet/jobcontroller/controller.go | 224 +- .../tabletserver/planbuilder/permission.go | 1 + .../vttablet/tabletserver/planbuilder/plan.go | 4 + go/vt/vttablet/tabletserver/query_executor.go | 17 + 21 files changed, 9096 insertions(+), 8451 deletions(-) create mode 100644 go/vt/vtgate/planbuilder/dmlJob.go diff --git a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql index 8ac82d262d..83f6845eda 100644 --- a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql +++ b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql @@ -18,14 +18,14 @@ limitations under the License. CREATE TABLE IF NOT EXISTS mysql.big_dml_jobs_table ( `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `job_uuid` varchar(64) NOT NULL, + `job_uuid` varchar(64) NOT NULL UNIQUE, `job_status` varchar(128) NOT NULL, `message` varchar(2048) NULL DEFAULT NULL, `dml_sql` varchar(256) NOT NULL, `related_schema` varchar(256) NOT NULL, `related_table` varchar(256) NOT NULL, `timegap_in_ms` bigint NOT NULL , - `subtask_rows` bigint NOT NULL , + `subtask_rows` bigint NOT NULL , `subtask_sql` varchar(256) NULL DEFAULT NULL, `affected_rows` bigint NOT NULL DEFAULT 0, PRIMARY KEY (`id`) diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go index c4605457b3..8b5de8a5cf 100644 --- a/go/vt/sqlparser/ast.go +++ b/go/vt/sqlparser/ast.go @@ -482,6 +482,15 @@ type ( Shards string } + AlterDMLJobType int8 + + AlterDMLJob struct { + Type AlterDMLJobType + UUID string + Expire string + Ratio *Literal + } + // AlterTable represents a ALTER TABLE statement. AlterTable struct { Table TableName @@ -761,6 +770,7 @@ func (*UnlockTables) iStatement() {} func (*AlterTable) iStatement() {} func (*AlterVschema) iStatement() {} func (*AlterMigration) iStatement() {} +func (*AlterDMLJob) iStatement() {} func (*RevertMigration) iStatement() {} func (*ShowMigrationLogs) iStatement() {} func (*ShowThrottledApps) iStatement() {} diff --git a/go/vt/sqlparser/ast_clone.go b/go/vt/sqlparser/ast_clone.go index 08fe9e6f3f..670c3364bc 100644 --- a/go/vt/sqlparser/ast_clone.go +++ b/go/vt/sqlparser/ast_clone.go @@ -41,6 +41,8 @@ func CloneSQLNode(in SQLNode) SQLNode { return CloneRefOfAlterCheck(in) case *AlterColumn: return CloneRefOfAlterColumn(in) + case *AlterDMLJob: + return CloneRefOfAlterDMLJob(in) case *AlterDatabase: return CloneRefOfAlterDatabase(in) case *AlterIndex: @@ -610,6 +612,16 @@ func CloneRefOfAlterColumn(n *AlterColumn) *AlterColumn { return &out } +// CloneRefOfAlterDMLJob creates a deep clone of the input. +func CloneRefOfAlterDMLJob(n *AlterDMLJob) *AlterDMLJob { + if n == nil { + return nil + } + out := *n + out.Ratio = CloneRefOfLiteral(n.Ratio) + return &out +} + // CloneRefOfAlterDatabase creates a deep clone of the input. func CloneRefOfAlterDatabase(n *AlterDatabase) *AlterDatabase { if n == nil { @@ -3776,6 +3788,8 @@ func CloneStatement(in Statement) Statement { return nil } switch in := in.(type) { + case *AlterDMLJob: + return CloneRefOfAlterDMLJob(in) case *AlterDatabase: return CloneRefOfAlterDatabase(in) case *AlterMigration: diff --git a/go/vt/sqlparser/ast_copy_on_rewrite.go b/go/vt/sqlparser/ast_copy_on_rewrite.go index 58229bc542..e60f0cb671 100644 --- a/go/vt/sqlparser/ast_copy_on_rewrite.go +++ b/go/vt/sqlparser/ast_copy_on_rewrite.go @@ -40,6 +40,8 @@ func (c *cow) copyOnRewriteSQLNode(n SQLNode, parent SQLNode) (out SQLNode, chan return c.copyOnRewriteRefOfAlterCheck(n, parent) case *AlterColumn: return c.copyOnRewriteRefOfAlterColumn(n, parent) + case *AlterDMLJob: + return c.copyOnRewriteRefOfAlterDMLJob(n, parent) case *AlterDatabase: return c.copyOnRewriteRefOfAlterDatabase(n, parent) case *AlterIndex: @@ -709,6 +711,28 @@ func (c *cow) copyOnRewriteRefOfAlterColumn(n *AlterColumn, parent SQLNode) (out } return } +func (c *cow) copyOnRewriteRefOfAlterDMLJob(n *AlterDMLJob, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + out = n + if c.pre == nil || c.pre(n, parent) { + _Ratio, changedRatio := c.copyOnRewriteRefOfLiteral(n.Ratio, n) + if changedRatio { + res := *n + res.Ratio, _ = _Ratio.(*Literal) + out = &res + if c.cloned != nil { + c.cloned(n, out) + } + changed = true + } + } + if c.post != nil { + out, changed = c.postVisit(out, parent, changed) + } + return +} func (c *cow) copyOnRewriteRefOfAlterDatabase(n *AlterDatabase, parent SQLNode) (out SQLNode, changed bool) { if n == nil || c.cursor.stop { return n, false @@ -6699,6 +6723,8 @@ func (c *cow) copyOnRewriteStatement(n Statement, parent SQLNode) (out SQLNode, return n, false } switch n := n.(type) { + case *AlterDMLJob: + return c.copyOnRewriteRefOfAlterDMLJob(n, parent) case *AlterDatabase: return c.copyOnRewriteRefOfAlterDatabase(n, parent) case *AlterMigration: diff --git a/go/vt/sqlparser/ast_equals.go b/go/vt/sqlparser/ast_equals.go index 344b6747b6..957ec3b666 100644 --- a/go/vt/sqlparser/ast_equals.go +++ b/go/vt/sqlparser/ast_equals.go @@ -80,6 +80,12 @@ func (cmp *Comparator) SQLNode(inA, inB SQLNode) bool { return false } return cmp.RefOfAlterColumn(a, b) + case *AlterDMLJob: + b, ok := inB.(*AlterDMLJob) + if !ok { + return false + } + return cmp.RefOfAlterDMLJob(a, b) case *AlterDatabase: b, ok := inB.(*AlterDatabase) if !ok { @@ -1614,6 +1620,20 @@ func (cmp *Comparator) RefOfAlterColumn(a, b *AlterColumn) bool { cmp.RefOfBool(a.Invisible, b.Invisible) } +// RefOfAlterDMLJob does deep equals between the two objects. +func (cmp *Comparator) RefOfAlterDMLJob(a, b *AlterDMLJob) bool { + if a == b { + return true + } + if a == nil || b == nil { + return false + } + return a.UUID == b.UUID && + a.Expire == b.Expire && + a.Type == b.Type && + cmp.RefOfLiteral(a.Ratio, b.Ratio) +} + // RefOfAlterDatabase does deep equals between the two objects. func (cmp *Comparator) RefOfAlterDatabase(a, b *AlterDatabase) bool { if a == b { @@ -6113,6 +6133,12 @@ func (cmp *Comparator) Statement(inA, inB Statement) bool { return false } switch a := inA.(type) { + case *AlterDMLJob: + b, ok := inB.(*AlterDMLJob) + if !ok { + return false + } + return cmp.RefOfAlterDMLJob(a, b) case *AlterDatabase: b, ok := inB.(*AlterDatabase) if !ok { diff --git a/go/vt/sqlparser/ast_format.go b/go/vt/sqlparser/ast_format.go index bff5a0ec4a..ef3dc049c7 100644 --- a/go/vt/sqlparser/ast_format.go +++ b/go/vt/sqlparser/ast_format.go @@ -311,6 +311,48 @@ func (node *AlterMigration) Format(buf *TrackedBuffer) { } } +// Format formats the node. +func (node *AlterDMLJob) Format(buf *TrackedBuffer) { + buf.astPrintf(node, "alter dml_job") + if node.UUID != "" { + buf.astPrintf(node, " '%s'", node.UUID) + } + var alterType string + switch node.Type { + case LaunchDMLJobType: + alterType = "launch" + case LaunchAllDMLJobType: + alterType = "launch all" + case CancelDMLJobType: + alterType = "cancel" + case CancelAllDMLJobType: + alterType = "cancel all" + case PauseDMLJobType: + alterType = "pause" + case PauseAllDMLJobType: + alterType = "pause all" + case ResumeDMLJobType: + alterType = "resume" + case ResumeAllDMLJobType: + alterType = "resume all" + case ThrottleDMLJobType: + alterType = "throttle" + case ThrottleAllDMLJobType: + alterType = "throttle all" + case UnthrottleDMLJobType: + alterType = "unthrottle" + case UnthrottleAllDMLJobType: + alterType = "unthrottle all" + } + buf.astPrintf(node, " %s", alterType) + if node.Expire != "" { + buf.astPrintf(node, " expire '%s'", node.Expire) + } + if node.Ratio != nil { + buf.astPrintf(node, " ratio %v", node.Ratio) + } +} + // Format formats the node. func (node *RevertMigration) Format(buf *TrackedBuffer) { buf.astPrintf(node, "revert %vvitess_migration '%#s'", node.Comments, node.UUID) diff --git a/go/vt/sqlparser/ast_format_fast.go b/go/vt/sqlparser/ast_format_fast.go index e07e0f1f5a..5ce7a67166 100644 --- a/go/vt/sqlparser/ast_format_fast.go +++ b/go/vt/sqlparser/ast_format_fast.go @@ -439,6 +439,54 @@ func (node *AlterMigration) formatFast(buf *TrackedBuffer) { } } +// formatFast formats the node. +func (node *AlterDMLJob) formatFast(buf *TrackedBuffer) { + buf.WriteString("alter dml_job") + if node.UUID != "" { + buf.WriteString(" '") + buf.WriteString(node.UUID) + buf.WriteByte('\'') + } + var alterType string + switch node.Type { + case LaunchDMLJobType: + alterType = "launch" + case LaunchAllDMLJobType: + alterType = "launch all" + case CancelDMLJobType: + alterType = "cancel" + case CancelAllDMLJobType: + alterType = "cancel all" + case PauseDMLJobType: + alterType = "pause" + case PauseAllDMLJobType: + alterType = "pause all" + case ResumeDMLJobType: + alterType = "resume" + case ResumeAllDMLJobType: + alterType = "resume all" + case ThrottleDMLJobType: + alterType = "throttle" + case ThrottleAllDMLJobType: + alterType = "throttle all" + case UnthrottleDMLJobType: + alterType = "unthrottle" + case UnthrottleAllDMLJobType: + alterType = "unthrottle all" + } + buf.WriteByte(' ') + buf.WriteString(alterType) + if node.Expire != "" { + buf.WriteString(" expire '") + buf.WriteString(node.Expire) + buf.WriteByte('\'') + } + if node.Ratio != nil { + buf.WriteString(" ratio ") + node.Ratio.formatFast(buf) + } +} + // formatFast formats the node. func (node *RevertMigration) formatFast(buf *TrackedBuffer) { buf.WriteString("revert ") diff --git a/go/vt/sqlparser/ast_rewrite.go b/go/vt/sqlparser/ast_rewrite.go index 3af2c794dc..71d6e05e5b 100644 --- a/go/vt/sqlparser/ast_rewrite.go +++ b/go/vt/sqlparser/ast_rewrite.go @@ -40,6 +40,8 @@ func (a *application) rewriteSQLNode(parent SQLNode, node SQLNode, replacer repl return a.rewriteRefOfAlterCheck(parent, node, replacer) case *AlterColumn: return a.rewriteRefOfAlterColumn(parent, node, replacer) + case *AlterDMLJob: + return a.rewriteRefOfAlterDMLJob(parent, node, replacer) case *AlterDatabase: return a.rewriteRefOfAlterDatabase(parent, node, replacer) case *AlterIndex: @@ -773,6 +775,33 @@ func (a *application) rewriteRefOfAlterColumn(parent SQLNode, node *AlterColumn, } return true } +func (a *application) rewriteRefOfAlterDMLJob(parent SQLNode, node *AlterDMLJob, replacer replacerFunc) bool { + if node == nil { + return true + } + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + if !a.pre(&a.cur) { + return true + } + } + if !a.rewriteRefOfLiteral(node, node.Ratio, func(newNode, parent SQLNode) { + parent.(*AlterDMLJob).Ratio = newNode.(*Literal) + }) { + return false + } + if a.post != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + if !a.post(&a.cur) { + return false + } + } + return true +} func (a *application) rewriteRefOfAlterDatabase(parent SQLNode, node *AlterDatabase, replacer replacerFunc) bool { if node == nil { return true @@ -8906,6 +8935,8 @@ func (a *application) rewriteStatement(parent SQLNode, node Statement, replacer return true } switch node := node.(type) { + case *AlterDMLJob: + return a.rewriteRefOfAlterDMLJob(parent, node, replacer) case *AlterDatabase: return a.rewriteRefOfAlterDatabase(parent, node, replacer) case *AlterMigration: diff --git a/go/vt/sqlparser/ast_visit.go b/go/vt/sqlparser/ast_visit.go index 3ed03b75dc..4dc2f1276f 100644 --- a/go/vt/sqlparser/ast_visit.go +++ b/go/vt/sqlparser/ast_visit.go @@ -40,6 +40,8 @@ func VisitSQLNode(in SQLNode, f Visit) error { return VisitRefOfAlterCheck(in, f) case *AlterColumn: return VisitRefOfAlterColumn(in, f) + case *AlterDMLJob: + return VisitRefOfAlterDMLJob(in, f) case *AlterDatabase: return VisitRefOfAlterDatabase(in, f) case *AlterIndex: @@ -637,6 +639,18 @@ func VisitRefOfAlterColumn(in *AlterColumn, f Visit) error { } return nil } +func VisitRefOfAlterDMLJob(in *AlterDMLJob, f Visit) error { + if in == nil { + return nil + } + if cont, err := f(in); err != nil || !cont { + return err + } + if err := VisitRefOfLiteral(in.Ratio, f); err != nil { + return err + } + return nil +} func VisitRefOfAlterDatabase(in *AlterDatabase, f Visit) error { if in == nil { return nil @@ -4642,6 +4656,8 @@ func VisitStatement(in Statement, f Visit) error { return nil } switch in := in.(type) { + case *AlterDMLJob: + return VisitRefOfAlterDMLJob(in, f) case *AlterDatabase: return VisitRefOfAlterDatabase(in, f) case *AlterMigration: diff --git a/go/vt/sqlparser/cached_size.go b/go/vt/sqlparser/cached_size.go index 49837303f0..d76b5f190d 100644 --- a/go/vt/sqlparser/cached_size.go +++ b/go/vt/sqlparser/cached_size.go @@ -169,6 +169,22 @@ func (cached *AlterColumn) CachedSize(alloc bool) int64 { size += hack.RuntimeAllocSize(int64(1)) return size } +func (cached *AlterDMLJob) CachedSize(alloc bool) int64 { + if cached == nil { + return int64(0) + } + size := int64(0) + if alloc { + size += int64(48) + } + // field UUID string + size += hack.RuntimeAllocSize(int64(len(cached.UUID))) + // field Expire string + size += hack.RuntimeAllocSize(int64(len(cached.Expire))) + // field Ratio *vitess.io/vitess/go/vt/sqlparser.Literal + size += cached.Ratio.CachedSize(true) + return size +} func (cached *AlterDatabase) CachedSize(alloc bool) int64 { if cached == nil { return int64(0) diff --git a/go/vt/sqlparser/constants.go b/go/vt/sqlparser/constants.go index 97d84e2f53..2508250541 100644 --- a/go/vt/sqlparser/constants.go +++ b/go/vt/sqlparser/constants.go @@ -894,6 +894,22 @@ const ( ResumeAllMigrationType ) +// AlterDMLJobType constants +const ( + LaunchDMLJobType AlterDMLJobType = iota + LaunchAllDMLJobType + CancelDMLJobType + CancelAllDMLJobType + ThrottleDMLJobType + ThrottleAllDMLJobType + UnthrottleDMLJobType + UnthrottleAllDMLJobType + PauseDMLJobType + ResumeDMLJobType + PauseAllDMLJobType + ResumeAllDMLJobType +) + // ColumnStorage constants const ( VirtualStorage ColumnStorage = iota diff --git a/go/vt/sqlparser/keywords.go b/go/vt/sqlparser/keywords.go index 83d5ac9c66..ebe8a73719 100644 --- a/go/vt/sqlparser/keywords.go +++ b/go/vt/sqlparser/keywords.go @@ -679,6 +679,7 @@ var keywords = []keyword{ {"vitess_metadata", VITESS_METADATA}, {"vitess_migration", VITESS_MIGRATION}, {"vitess_migrations", VITESS_MIGRATIONS}, + {"dml_job", DML_JOB}, {"dml_jobs", DML_JOBS}, {"vitess_replication_status", VITESS_REPLICATION_STATUS}, {"vitess_shards", VITESS_SHARDS}, diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index 1edaff0d97..575a5c8226 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -341,368 +341,369 @@ const PAUSE = 57638 const RESUME = 57639 const SCHEMA_MIGRATION = 57640 const VITESS_THROTTLER = 57641 -const BEGIN = 57642 -const START = 57643 -const TRANSACTION = 57644 -const COMMIT = 57645 -const ROLLBACK = 57646 -const SAVEPOINT = 57647 -const RELEASE = 57648 -const WORK = 57649 -const CONSISTENT = 57650 -const SNAPSHOT = 57651 -const BIT = 57652 -const TINYINT = 57653 -const SMALLINT = 57654 -const MEDIUMINT = 57655 -const INT = 57656 -const INTEGER = 57657 -const BIGINT = 57658 -const INTNUM = 57659 -const REAL = 57660 -const DOUBLE = 57661 -const FLOAT_TYPE = 57662 -const FLOAT4_TYPE = 57663 -const FLOAT8_TYPE = 57664 -const DECIMAL_TYPE = 57665 -const NUMERIC = 57666 -const TIME = 57667 -const TIMESTAMP = 57668 -const DATETIME = 57669 -const YEAR = 57670 -const CHAR = 57671 -const VARCHAR = 57672 -const BOOL = 57673 -const CHARACTER = 57674 -const VARBINARY = 57675 -const NCHAR = 57676 -const TEXT = 57677 -const TINYTEXT = 57678 -const MEDIUMTEXT = 57679 -const LONGTEXT = 57680 -const BLOB = 57681 -const TINYBLOB = 57682 -const MEDIUMBLOB = 57683 -const LONGBLOB = 57684 -const JSON = 57685 -const JSON_SCHEMA_VALID = 57686 -const JSON_SCHEMA_VALIDATION_REPORT = 57687 -const ENUM = 57688 -const GEOMETRY = 57689 -const POINT = 57690 -const LINESTRING = 57691 -const POLYGON = 57692 -const GEOMCOLLECTION = 57693 -const GEOMETRYCOLLECTION = 57694 -const MULTIPOINT = 57695 -const MULTILINESTRING = 57696 -const MULTIPOLYGON = 57697 -const ASCII = 57698 -const UNICODE = 57699 -const NULLX = 57700 -const AUTO_INCREMENT = 57701 -const APPROXNUM = 57702 -const SIGNED = 57703 -const UNSIGNED = 57704 -const ZEROFILL = 57705 -const CODE = 57706 -const COLLATION = 57707 -const COLUMNS = 57708 -const DATABASES = 57709 -const ENGINES = 57710 -const EVENT = 57711 -const EXTENDED = 57712 -const FIELDS = 57713 -const FULL = 57714 -const FUNCTION = 57715 -const GTID_EXECUTED = 57716 -const KEYSPACES = 57717 -const OPEN = 57718 -const PLUGINS = 57719 -const PRIVILEGES = 57720 -const PROCESSLIST = 57721 -const SCHEMAS = 57722 -const TABLES = 57723 -const TRIGGERS = 57724 -const USER = 57725 -const VGTID_EXECUTED = 57726 -const VITESS_KEYSPACES = 57727 -const VITESS_METADATA = 57728 -const VITESS_MIGRATIONS = 57729 -const VITESS_REPLICATION_STATUS = 57730 -const VITESS_SHARDS = 57731 -const VITESS_TABLETS = 57732 -const VITESS_TARGET = 57733 -const VSCHEMA = 57734 -const VITESS_THROTTLED_APPS = 57735 -const WORKLOAD = 57736 -const LASTSEENGTID = 57737 -const FAILPOINTS = 57738 -const DML_JOBS = 57739 -const NAMES = 57740 -const GLOBAL = 57741 -const SESSION = 57742 -const ISOLATION = 57743 -const LEVEL = 57744 -const READ = 57745 -const WRITE = 57746 -const ONLY = 57747 -const REPEATABLE = 57748 -const COMMITTED = 57749 -const UNCOMMITTED = 57750 -const SERIALIZABLE = 57751 -const FAST = 57752 -const QUICK = 57753 -const CHANGED = 57754 -const MEDIUM = 57755 -const CURRENT_TIMESTAMP = 57756 -const DATABASE = 57757 -const CURRENT_DATE = 57758 -const NOW = 57759 -const CURRENT_TIME = 57760 -const LOCALTIME = 57761 -const LOCALTIMESTAMP = 57762 -const CURRENT_USER = 57763 -const UTC_DATE = 57764 -const UTC_TIME = 57765 -const UTC_TIMESTAMP = 57766 -const DAY = 57767 -const DAY_HOUR = 57768 -const DAY_MICROSECOND = 57769 -const DAY_MINUTE = 57770 -const DAY_SECOND = 57771 -const HOUR = 57772 -const HOUR_MICROSECOND = 57773 -const HOUR_MINUTE = 57774 -const HOUR_SECOND = 57775 -const MICROSECOND = 57776 -const MINUTE = 57777 -const MINUTE_MICROSECOND = 57778 -const MINUTE_SECOND = 57779 -const MONTH = 57780 -const QUARTER = 57781 -const SECOND = 57782 -const SECOND_MICROSECOND = 57783 -const YEAR_MONTH = 57784 -const WEEK = 57785 -const REPLACE = 57786 -const CONVERT = 57787 -const CAST = 57788 -const SUBSTR = 57789 -const SUBSTRING = 57790 -const SEPARATOR = 57791 -const TIMESTAMPADD = 57792 -const TIMESTAMPDIFF = 57793 -const WEIGHT_STRING = 57794 -const LTRIM = 57795 -const RTRIM = 57796 -const TRIM = 57797 -const JSON_ARRAY = 57798 -const JSON_OBJECT = 57799 -const JSON_QUOTE = 57800 -const JSON_DEPTH = 57801 -const JSON_TYPE = 57802 -const JSON_LENGTH = 57803 -const JSON_VALID = 57804 -const JSON_ARRAY_APPEND = 57805 -const JSON_ARRAY_INSERT = 57806 -const JSON_INSERT = 57807 -const JSON_MERGE = 57808 -const JSON_MERGE_PATCH = 57809 -const JSON_MERGE_PRESERVE = 57810 -const JSON_REMOVE = 57811 -const JSON_REPLACE = 57812 -const JSON_SET = 57813 -const JSON_UNQUOTE = 57814 -const COUNT = 57815 -const AVG = 57816 -const MAX = 57817 -const MIN = 57818 -const SUM = 57819 -const GROUP_CONCAT = 57820 -const BIT_AND = 57821 -const BIT_OR = 57822 -const BIT_XOR = 57823 -const STD = 57824 -const STDDEV = 57825 -const STDDEV_POP = 57826 -const STDDEV_SAMP = 57827 -const VAR_POP = 57828 -const VAR_SAMP = 57829 -const VARIANCE = 57830 -const REGEXP_INSTR = 57831 -const REGEXP_LIKE = 57832 -const REGEXP_REPLACE = 57833 -const REGEXP_SUBSTR = 57834 -const ExtractValue = 57835 -const UpdateXML = 57836 -const GET_LOCK = 57837 -const RELEASE_LOCK = 57838 -const RELEASE_ALL_LOCKS = 57839 -const IS_FREE_LOCK = 57840 -const IS_USED_LOCK = 57841 -const LOCATE = 57842 -const POSITION = 57843 -const MATCH = 57844 -const AGAINST = 57845 -const BOOLEAN = 57846 -const LANGUAGE = 57847 -const WITH = 57848 -const QUERY = 57849 -const EXPANSION = 57850 -const WITHOUT = 57851 -const VALIDATION = 57852 -const UNUSED = 57853 -const ARRAY = 57854 -const BYTE = 57855 -const CUME_DIST = 57856 -const DESCRIPTION = 57857 -const DENSE_RANK = 57858 -const EMPTY = 57859 -const EXCEPT = 57860 -const FIRST_VALUE = 57861 -const GROUPING = 57862 -const GROUPS = 57863 -const JSON_TABLE = 57864 -const LAG = 57865 -const LAST_VALUE = 57866 -const LATERAL = 57867 -const LEAD = 57868 -const NTH_VALUE = 57869 -const NTILE = 57870 -const OF = 57871 -const OVER = 57872 -const PERCENT_RANK = 57873 -const RANK = 57874 -const RECURSIVE = 57875 -const ROW_NUMBER = 57876 -const SYSTEM = 57877 -const WINDOW = 57878 -const ACTIVE = 57879 -const ADMIN = 57880 -const AUTOEXTEND_SIZE = 57881 -const BUCKETS = 57882 -const CLONE = 57883 -const COLUMN_FORMAT = 57884 -const COMPONENT = 57885 -const DEFINITION = 57886 -const ENFORCED = 57887 -const ENGINE_ATTRIBUTE = 57888 -const EXCLUDE = 57889 -const FOLLOWING = 57890 -const GET_MASTER_PUBLIC_KEY = 57891 -const HISTOGRAM = 57892 -const HISTORY = 57893 -const INACTIVE = 57894 -const INVISIBLE = 57895 -const LOCKED = 57896 -const MASTER_COMPRESSION_ALGORITHMS = 57897 -const MASTER_PUBLIC_KEY_PATH = 57898 -const MASTER_TLS_CIPHERSUITES = 57899 -const MASTER_ZSTD_COMPRESSION_LEVEL = 57900 -const NESTED = 57901 -const NETWORK_NAMESPACE = 57902 -const NOWAIT = 57903 -const NULLS = 57904 -const OJ = 57905 -const OLD = 57906 -const OPTIONAL = 57907 -const ORDINALITY = 57908 -const ORGANIZATION = 57909 -const OTHERS = 57910 -const PARTIAL = 57911 -const PATH = 57912 -const PERSIST = 57913 -const PERSIST_ONLY = 57914 -const PRECEDING = 57915 -const PRIVILEGE_CHECKS_USER = 57916 -const PROCESS = 57917 -const RANDOM = 57918 -const REFERENCE = 57919 -const REQUIRE_ROW_FORMAT = 57920 -const RESOURCE = 57921 -const RESPECT = 57922 -const RESTART = 57923 -const RETAIN = 57924 -const REUSE = 57925 -const ROLE = 57926 -const SECONDARY = 57927 -const SECONDARY_ENGINE = 57928 -const SECONDARY_ENGINE_ATTRIBUTE = 57929 -const SECONDARY_LOAD = 57930 -const SECONDARY_UNLOAD = 57931 -const SIMPLE = 57932 -const SKIP = 57933 -const SRID = 57934 -const THREAD_PRIORITY = 57935 -const TIES = 57936 -const UNBOUNDED = 57937 -const VCPU = 57938 -const VISIBLE = 57939 -const RETURNING = 57940 -const FORMAT_BYTES = 57941 -const FORMAT_PICO_TIME = 57942 -const PS_CURRENT_THREAD_ID = 57943 -const PS_THREAD_ID = 57944 -const GTID_SUBSET = 57945 -const GTID_SUBTRACT = 57946 -const WAIT_FOR_EXECUTED_GTID_SET = 57947 -const WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 57948 -const FORMAT = 57949 -const TREE = 57950 -const VITESS = 57951 -const TRADITIONAL = 57952 -const VTEXPLAIN = 57953 -const VEXPLAIN = 57954 -const PLAN = 57955 -const LOCAL = 57956 -const LOW_PRIORITY = 57957 -const KILL = 57958 -const USERS = 57959 -const NO_WRITE_TO_BINLOG = 57960 -const LOGS = 57961 -const ERROR = 57962 -const GENERAL = 57963 -const HOSTS = 57964 -const OPTIMIZER_COSTS = 57965 -const USER_RESOURCES = 57966 -const SLOW = 57967 -const CHANNEL = 57968 -const RELAY = 57969 -const EXPORT = 57970 -const CURRENT = 57971 -const ROW = 57972 -const ROWS = 57973 -const AVG_ROW_LENGTH = 57974 -const CONNECTION = 57975 -const CHECKSUM = 57976 -const DELAY_KEY_WRITE = 57977 -const ENCRYPTION = 57978 -const ENGINE = 57979 -const INSERT_METHOD = 57980 -const MAX_ROWS = 57981 -const MIN_ROWS = 57982 -const PACK_KEYS = 57983 -const PASSWORD = 57984 -const FIXED = 57985 -const DYNAMIC = 57986 -const COMPRESSED = 57987 -const REDUNDANT = 57988 -const COMPACT = 57989 -const ROW_FORMAT = 57990 -const STATS_AUTO_RECALC = 57991 -const STATS_PERSISTENT = 57992 -const STATS_SAMPLE_PAGES = 57993 -const STORAGE = 57994 -const MEMORY = 57995 -const DISK = 57996 -const PARTITIONS = 57997 -const LINEAR = 57998 -const RANGE = 57999 -const LIST = 58000 -const SUBPARTITION = 58001 -const SUBPARTITIONS = 58002 -const HASH = 58003 +const DML_JOB = 57642 +const BEGIN = 57643 +const START = 57644 +const TRANSACTION = 57645 +const COMMIT = 57646 +const ROLLBACK = 57647 +const SAVEPOINT = 57648 +const RELEASE = 57649 +const WORK = 57650 +const CONSISTENT = 57651 +const SNAPSHOT = 57652 +const BIT = 57653 +const TINYINT = 57654 +const SMALLINT = 57655 +const MEDIUMINT = 57656 +const INT = 57657 +const INTEGER = 57658 +const BIGINT = 57659 +const INTNUM = 57660 +const REAL = 57661 +const DOUBLE = 57662 +const FLOAT_TYPE = 57663 +const FLOAT4_TYPE = 57664 +const FLOAT8_TYPE = 57665 +const DECIMAL_TYPE = 57666 +const NUMERIC = 57667 +const TIME = 57668 +const TIMESTAMP = 57669 +const DATETIME = 57670 +const YEAR = 57671 +const CHAR = 57672 +const VARCHAR = 57673 +const BOOL = 57674 +const CHARACTER = 57675 +const VARBINARY = 57676 +const NCHAR = 57677 +const TEXT = 57678 +const TINYTEXT = 57679 +const MEDIUMTEXT = 57680 +const LONGTEXT = 57681 +const BLOB = 57682 +const TINYBLOB = 57683 +const MEDIUMBLOB = 57684 +const LONGBLOB = 57685 +const JSON = 57686 +const JSON_SCHEMA_VALID = 57687 +const JSON_SCHEMA_VALIDATION_REPORT = 57688 +const ENUM = 57689 +const GEOMETRY = 57690 +const POINT = 57691 +const LINESTRING = 57692 +const POLYGON = 57693 +const GEOMCOLLECTION = 57694 +const GEOMETRYCOLLECTION = 57695 +const MULTIPOINT = 57696 +const MULTILINESTRING = 57697 +const MULTIPOLYGON = 57698 +const ASCII = 57699 +const UNICODE = 57700 +const NULLX = 57701 +const AUTO_INCREMENT = 57702 +const APPROXNUM = 57703 +const SIGNED = 57704 +const UNSIGNED = 57705 +const ZEROFILL = 57706 +const CODE = 57707 +const COLLATION = 57708 +const COLUMNS = 57709 +const DATABASES = 57710 +const ENGINES = 57711 +const EVENT = 57712 +const EXTENDED = 57713 +const FIELDS = 57714 +const FULL = 57715 +const FUNCTION = 57716 +const GTID_EXECUTED = 57717 +const KEYSPACES = 57718 +const OPEN = 57719 +const PLUGINS = 57720 +const PRIVILEGES = 57721 +const PROCESSLIST = 57722 +const SCHEMAS = 57723 +const TABLES = 57724 +const TRIGGERS = 57725 +const USER = 57726 +const VGTID_EXECUTED = 57727 +const VITESS_KEYSPACES = 57728 +const VITESS_METADATA = 57729 +const VITESS_MIGRATIONS = 57730 +const VITESS_REPLICATION_STATUS = 57731 +const VITESS_SHARDS = 57732 +const VITESS_TABLETS = 57733 +const VITESS_TARGET = 57734 +const VSCHEMA = 57735 +const VITESS_THROTTLED_APPS = 57736 +const WORKLOAD = 57737 +const LASTSEENGTID = 57738 +const FAILPOINTS = 57739 +const DML_JOBS = 57740 +const NAMES = 57741 +const GLOBAL = 57742 +const SESSION = 57743 +const ISOLATION = 57744 +const LEVEL = 57745 +const READ = 57746 +const WRITE = 57747 +const ONLY = 57748 +const REPEATABLE = 57749 +const COMMITTED = 57750 +const UNCOMMITTED = 57751 +const SERIALIZABLE = 57752 +const FAST = 57753 +const QUICK = 57754 +const CHANGED = 57755 +const MEDIUM = 57756 +const CURRENT_TIMESTAMP = 57757 +const DATABASE = 57758 +const CURRENT_DATE = 57759 +const NOW = 57760 +const CURRENT_TIME = 57761 +const LOCALTIME = 57762 +const LOCALTIMESTAMP = 57763 +const CURRENT_USER = 57764 +const UTC_DATE = 57765 +const UTC_TIME = 57766 +const UTC_TIMESTAMP = 57767 +const DAY = 57768 +const DAY_HOUR = 57769 +const DAY_MICROSECOND = 57770 +const DAY_MINUTE = 57771 +const DAY_SECOND = 57772 +const HOUR = 57773 +const HOUR_MICROSECOND = 57774 +const HOUR_MINUTE = 57775 +const HOUR_SECOND = 57776 +const MICROSECOND = 57777 +const MINUTE = 57778 +const MINUTE_MICROSECOND = 57779 +const MINUTE_SECOND = 57780 +const MONTH = 57781 +const QUARTER = 57782 +const SECOND = 57783 +const SECOND_MICROSECOND = 57784 +const YEAR_MONTH = 57785 +const WEEK = 57786 +const REPLACE = 57787 +const CONVERT = 57788 +const CAST = 57789 +const SUBSTR = 57790 +const SUBSTRING = 57791 +const SEPARATOR = 57792 +const TIMESTAMPADD = 57793 +const TIMESTAMPDIFF = 57794 +const WEIGHT_STRING = 57795 +const LTRIM = 57796 +const RTRIM = 57797 +const TRIM = 57798 +const JSON_ARRAY = 57799 +const JSON_OBJECT = 57800 +const JSON_QUOTE = 57801 +const JSON_DEPTH = 57802 +const JSON_TYPE = 57803 +const JSON_LENGTH = 57804 +const JSON_VALID = 57805 +const JSON_ARRAY_APPEND = 57806 +const JSON_ARRAY_INSERT = 57807 +const JSON_INSERT = 57808 +const JSON_MERGE = 57809 +const JSON_MERGE_PATCH = 57810 +const JSON_MERGE_PRESERVE = 57811 +const JSON_REMOVE = 57812 +const JSON_REPLACE = 57813 +const JSON_SET = 57814 +const JSON_UNQUOTE = 57815 +const COUNT = 57816 +const AVG = 57817 +const MAX = 57818 +const MIN = 57819 +const SUM = 57820 +const GROUP_CONCAT = 57821 +const BIT_AND = 57822 +const BIT_OR = 57823 +const BIT_XOR = 57824 +const STD = 57825 +const STDDEV = 57826 +const STDDEV_POP = 57827 +const STDDEV_SAMP = 57828 +const VAR_POP = 57829 +const VAR_SAMP = 57830 +const VARIANCE = 57831 +const REGEXP_INSTR = 57832 +const REGEXP_LIKE = 57833 +const REGEXP_REPLACE = 57834 +const REGEXP_SUBSTR = 57835 +const ExtractValue = 57836 +const UpdateXML = 57837 +const GET_LOCK = 57838 +const RELEASE_LOCK = 57839 +const RELEASE_ALL_LOCKS = 57840 +const IS_FREE_LOCK = 57841 +const IS_USED_LOCK = 57842 +const LOCATE = 57843 +const POSITION = 57844 +const MATCH = 57845 +const AGAINST = 57846 +const BOOLEAN = 57847 +const LANGUAGE = 57848 +const WITH = 57849 +const QUERY = 57850 +const EXPANSION = 57851 +const WITHOUT = 57852 +const VALIDATION = 57853 +const UNUSED = 57854 +const ARRAY = 57855 +const BYTE = 57856 +const CUME_DIST = 57857 +const DESCRIPTION = 57858 +const DENSE_RANK = 57859 +const EMPTY = 57860 +const EXCEPT = 57861 +const FIRST_VALUE = 57862 +const GROUPING = 57863 +const GROUPS = 57864 +const JSON_TABLE = 57865 +const LAG = 57866 +const LAST_VALUE = 57867 +const LATERAL = 57868 +const LEAD = 57869 +const NTH_VALUE = 57870 +const NTILE = 57871 +const OF = 57872 +const OVER = 57873 +const PERCENT_RANK = 57874 +const RANK = 57875 +const RECURSIVE = 57876 +const ROW_NUMBER = 57877 +const SYSTEM = 57878 +const WINDOW = 57879 +const ACTIVE = 57880 +const ADMIN = 57881 +const AUTOEXTEND_SIZE = 57882 +const BUCKETS = 57883 +const CLONE = 57884 +const COLUMN_FORMAT = 57885 +const COMPONENT = 57886 +const DEFINITION = 57887 +const ENFORCED = 57888 +const ENGINE_ATTRIBUTE = 57889 +const EXCLUDE = 57890 +const FOLLOWING = 57891 +const GET_MASTER_PUBLIC_KEY = 57892 +const HISTOGRAM = 57893 +const HISTORY = 57894 +const INACTIVE = 57895 +const INVISIBLE = 57896 +const LOCKED = 57897 +const MASTER_COMPRESSION_ALGORITHMS = 57898 +const MASTER_PUBLIC_KEY_PATH = 57899 +const MASTER_TLS_CIPHERSUITES = 57900 +const MASTER_ZSTD_COMPRESSION_LEVEL = 57901 +const NESTED = 57902 +const NETWORK_NAMESPACE = 57903 +const NOWAIT = 57904 +const NULLS = 57905 +const OJ = 57906 +const OLD = 57907 +const OPTIONAL = 57908 +const ORDINALITY = 57909 +const ORGANIZATION = 57910 +const OTHERS = 57911 +const PARTIAL = 57912 +const PATH = 57913 +const PERSIST = 57914 +const PERSIST_ONLY = 57915 +const PRECEDING = 57916 +const PRIVILEGE_CHECKS_USER = 57917 +const PROCESS = 57918 +const RANDOM = 57919 +const REFERENCE = 57920 +const REQUIRE_ROW_FORMAT = 57921 +const RESOURCE = 57922 +const RESPECT = 57923 +const RESTART = 57924 +const RETAIN = 57925 +const REUSE = 57926 +const ROLE = 57927 +const SECONDARY = 57928 +const SECONDARY_ENGINE = 57929 +const SECONDARY_ENGINE_ATTRIBUTE = 57930 +const SECONDARY_LOAD = 57931 +const SECONDARY_UNLOAD = 57932 +const SIMPLE = 57933 +const SKIP = 57934 +const SRID = 57935 +const THREAD_PRIORITY = 57936 +const TIES = 57937 +const UNBOUNDED = 57938 +const VCPU = 57939 +const VISIBLE = 57940 +const RETURNING = 57941 +const FORMAT_BYTES = 57942 +const FORMAT_PICO_TIME = 57943 +const PS_CURRENT_THREAD_ID = 57944 +const PS_THREAD_ID = 57945 +const GTID_SUBSET = 57946 +const GTID_SUBTRACT = 57947 +const WAIT_FOR_EXECUTED_GTID_SET = 57948 +const WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 57949 +const FORMAT = 57950 +const TREE = 57951 +const VITESS = 57952 +const TRADITIONAL = 57953 +const VTEXPLAIN = 57954 +const VEXPLAIN = 57955 +const PLAN = 57956 +const LOCAL = 57957 +const LOW_PRIORITY = 57958 +const KILL = 57959 +const USERS = 57960 +const NO_WRITE_TO_BINLOG = 57961 +const LOGS = 57962 +const ERROR = 57963 +const GENERAL = 57964 +const HOSTS = 57965 +const OPTIMIZER_COSTS = 57966 +const USER_RESOURCES = 57967 +const SLOW = 57968 +const CHANNEL = 57969 +const RELAY = 57970 +const EXPORT = 57971 +const CURRENT = 57972 +const ROW = 57973 +const ROWS = 57974 +const AVG_ROW_LENGTH = 57975 +const CONNECTION = 57976 +const CHECKSUM = 57977 +const DELAY_KEY_WRITE = 57978 +const ENCRYPTION = 57979 +const ENGINE = 57980 +const INSERT_METHOD = 57981 +const MAX_ROWS = 57982 +const MIN_ROWS = 57983 +const PACK_KEYS = 57984 +const PASSWORD = 57985 +const FIXED = 57986 +const DYNAMIC = 57987 +const COMPRESSED = 57988 +const REDUNDANT = 57989 +const COMPACT = 57990 +const ROW_FORMAT = 57991 +const STATS_AUTO_RECALC = 57992 +const STATS_PERSISTENT = 57993 +const STATS_SAMPLE_PAGES = 57994 +const STORAGE = 57995 +const MEMORY = 57996 +const DISK = 57997 +const PARTITIONS = 57998 +const LINEAR = 57999 +const RANGE = 58000 +const LIST = 58001 +const SUBPARTITION = 58002 +const SUBPARTITIONS = 58003 +const HASH = 58004 var yyToknames = [...]string{ "$end", @@ -1021,6 +1022,7 @@ var yyToknames = [...]string{ "RESUME", "SCHEMA_MIGRATION", "VITESS_THROTTLER", + "DML_JOB", "BEGIN", "START", "TRANSACTION", @@ -1403,29 +1405,29 @@ var yyExca = [...]int{ -2, 41, -1, 53, 1, 162, - 679, 162, + 680, 162, -2, 170, -1, 54, 135, 170, 176, 170, - 349, 170, + 350, 170, -2, 524, -1, 64, - 36, 806, - 240, 806, - 251, 806, - 286, 820, - 287, 820, - -2, 808, + 36, 818, + 240, 818, + 251, 818, + 286, 832, + 287, 832, + -2, 820, -1, 69, - 242, 844, - -2, 842, + 242, 856, + -2, 854, -1, 127, - 239, 1507, + 239, 1519, -2, 136, -1, 129, 1, 163, - 679, 163, + 680, 163, -2, 170, -1, 140, 136, 410, @@ -1434,1086 +1436,1028 @@ var yyExca = [...]int{ -1, 159, 135, 170, 176, 170, - 349, 170, + 350, 170, -2, 533, - -1, 838, - 87, 1524, - -2, 1369, -1, 839, - 87, 1525, - 221, 1529, - -2, 1370, + 87, 1536, + -2, 1381, -1, 840, - 221, 1528, + 87, 1537, + 221, 1541, + -2, 1382, + -1, 841, + 221, 1540, -2, 43, - -1, 919, - 60, 920, - -2, 935, - -1, 1007, + -1, 920, + 60, 932, + -2, 947, + -1, 1008, 250, 44, 255, 44, -2, 421, - -1, 1093, + -1, 1095, 1, 581, - 679, 581, + 680, 581, -2, 170, - -1, 1406, - 221, 1529, - -2, 1370, - -1, 1554, - 60, 921, - -2, 940, - -1, 1555, - 60, 922, - -2, 941, - -1, 1606, + -1, 1408, + 221, 1541, + -2, 1382, + -1, 1556, + 60, 933, + -2, 952, + -1, 1557, + 60, 934, + -2, 953, + -1, 1608, 135, 170, 176, 170, - 349, 170, + 350, 170, -2, 460, - -1, 1689, + -1, 1691, 136, 410, 245, 410, -2, 513, - -1, 1698, + -1, 1700, 250, 45, 255, 45, -2, 422, - -1, 2079, - 221, 1533, - -2, 1527, - -1, 2080, - 221, 1529, - -2, 1525, - -1, 2179, + -1, 2088, + 221, 1545, + -2, 1539, + -1, 2089, + 221, 1541, + -2, 1537, + -1, 2188, 135, 170, 176, 170, - 349, 170, + 350, 170, -2, 461, - -1, 2186, + -1, 2195, 26, 191, -2, 193, - -1, 2576, + -1, 2597, 78, 99, 88, 99, - -2, 999, - -1, 2645, - 654, 718, - -2, 692, - -1, 2815, - 50, 1475, - -2, 1469, - -1, 3471, - 654, 718, - -2, 706, - -1, 3559, - 90, 650, - 95, 650, - 105, 650, - 178, 650, - 179, 650, - 180, 650, - 181, 650, - 182, 650, - 183, 650, - 184, 650, - 185, 650, - 186, 650, - 187, 650, - 188, 650, - 189, 650, - 190, 650, - 191, 650, - 192, 650, - 193, 650, - 194, 650, - 195, 650, - 196, 650, - 197, 650, - 198, 650, - 199, 650, - 200, 650, - 201, 650, - 202, 650, - 203, 650, - 204, 650, - 205, 650, - 206, 650, - 207, 650, - 208, 650, - 209, 650, - 210, 650, - 211, 650, - 212, 650, - 213, 650, - 214, 650, - 215, 650, - 216, 650, - 217, 650, - 218, 650, - 219, 650, - -2, 1892, + -2, 1011, + -1, 2666, + 655, 730, + -2, 704, + -1, 2838, + 50, 1487, + -2, 1481, + -1, 3496, + 655, 730, + -2, 718, + -1, 3584, + 90, 662, + 95, 662, + 105, 662, + 178, 662, + 179, 662, + 180, 662, + 181, 662, + 182, 662, + 183, 662, + 184, 662, + 185, 662, + 186, 662, + 187, 662, + 188, 662, + 189, 662, + 190, 662, + 191, 662, + 192, 662, + 193, 662, + 194, 662, + 195, 662, + 196, 662, + 197, 662, + 198, 662, + 199, 662, + 200, 662, + 201, 662, + 202, 662, + 203, 662, + 204, 662, + 205, 662, + 206, 662, + 207, 662, + 208, 662, + 209, 662, + 210, 662, + 211, 662, + 212, 662, + 213, 662, + 214, 662, + 215, 662, + 216, 662, + 217, 662, + 218, 662, + 219, 662, + -2, 1904, } const yyPrivate = 57344 -const yyLast = 48762 +const yyLast = 48200 var yyAct = [...]int{ - 1562, 3630, 839, 849, 3452, 3641, 3220, 3599, 3536, 3218, - 3600, 3557, 842, 712, 3046, 3189, 2127, 1609, 2176, 3502, - 2965, 3525, 2108, 2867, 2874, 3436, 1892, 3384, 2916, 5, - 2925, 2930, 3434, 2927, 2926, 2924, 2929, 2928, 2828, 3176, - 2831, 1164, 3424, 2476, 3248, 808, 2510, 2882, 43, 2110, - 913, 2549, 2774, 3219, 691, 2944, 694, 2829, 2250, 200, - 2832, 2945, 200, 804, 3085, 2709, 3253, 935, 671, 2131, - 722, 803, 3079, 677, 2147, 802, 2947, 3105, 809, 1569, - 2150, 2816, 2536, 2070, 200, 692, 2826, 3071, 2610, 2971, - 2238, 1667, 2213, 2218, 690, 2642, 2611, 2693, 2612, 200, - 2164, 2281, 936, 1039, 915, 968, 1166, 168, 2561, 2542, - 1556, 2152, 44, 841, 1946, 2075, 2528, 2151, 2041, 2512, - 1961, 1900, 2682, 1696, 42, 154, 677, 200, 2237, 677, - 2259, 2067, 2139, 917, 2220, 920, 1138, 2298, 1942, 1015, - 2603, 997, 1002, 1598, 1536, 1578, 106, 1109, 107, 1714, - 2578, 102, 2154, 704, 938, 1418, 1965, 1827, 1345, 1330, - 976, 1703, 1005, 1919, 1832, 1008, 2040, 1795, 2235, 972, - 977, 1003, 1004, 2209, 1597, 953, 1583, 1823, 955, 926, - 2037, 2132, 699, 2076, 1402, 2210, 1378, 923, 1841, 1974, - 87, 1891, 1155, 1660, 1162, 109, 172, 132, 130, 131, - 1088, 1688, 922, 101, 137, 138, 948, 95, 924, 1422, - 698, 3461, 2635, 100, 921, 108, 3631, 86, 2252, 2253, - 2254, 3487, 3177, 2913, 2252, 2665, 2664, 2296, 2633, 1346, - 660, 3169, 3583, 97, 943, 947, 616, 2701, 97, 1780, - 2702, 858, 859, 860, 97, 3132, 621, 3488, 3482, 3483, - 133, 1426, 1922, 929, 2935, 681, 139, 1346, 121, 1907, - 1041, 2, 666, 1906, 1905, 1904, 969, 1044, 1903, 1902, - 3223, 995, 1875, 1058, 1059, 1060, 3223, 1063, 1064, 1065, - 1066, 1019, 1873, 1069, 1070, 1071, 1072, 1073, 1074, 1075, - 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, - 963, 962, 914, 1052, 1018, 916, 930, 113, 114, 115, - 2933, 118, 620, 2364, 127, 994, 937, 196, 684, 1341, - 610, 3578, 685, 1045, 1048, 1049, 133, 993, 992, 991, - 965, 682, 666, 1563, 679, 680, 2939, 2508, 1357, 858, - 859, 860, 1532, 195, 909, 910, 911, 912, 2105, 2106, - 919, 3483, 2538, 2812, 1061, 1363, 2655, 3222, 3603, 2778, - 981, 2285, 986, 3222, 3587, 3543, 1357, 134, 3585, 156, - 3651, 2935, 3567, 3598, 3051, 3621, 660, 3050, 950, 951, - 177, 2658, 3437, 2283, 2932, 2477, 1912, 975, 3537, 3586, - 3565, 2993, 3380, 3584, 133, 3379, 1043, 1042, 2229, 3571, - 3572, 3612, 961, 806, 807, 2284, 3182, 2884, 2885, 3183, - 3390, 167, 2373, 97, 3566, 3581, 88, 155, 657, 3201, - 686, 2223, 1332, 3190, 3526, 3466, 3533, 2933, 2278, 88, - 3389, 1951, 88, 3200, 3562, 88, 174, 3013, 90, 175, - 961, 806, 807, 1677, 661, 2509, 660, 1352, 2863, 2936, - 1344, 2672, 2673, 2939, 2864, 2865, 2552, 2700, 143, 144, - 166, 165, 194, 3543, 2587, 3266, 639, 2586, 2370, 660, - 2588, 2171, 2172, 1379, 1599, 1352, 1600, 2371, 1884, 1885, - 637, 2553, 2170, 990, 660, 1098, 1099, 2685, 2681, 1128, - 1360, 907, 1361, 1362, 97, 2990, 1380, 1381, 1382, 1383, - 1384, 1385, 1386, 1388, 1387, 1389, 1390, 97, 1159, 1092, - 97, 2135, 1833, 97, 1116, 906, 2883, 1101, 3453, 1117, - 634, 1116, 1133, 1134, 2636, 1331, 1117, 2599, 2886, 651, - 2189, 2188, 1342, 3082, 1115, 2743, 1114, 1129, 2545, 2546, - 660, 988, 3001, 2999, 646, 660, 1122, 2967, 1145, 2362, - 1147, 619, 1883, 660, 674, 3604, 644, 649, 672, 1087, - 2107, 160, 141, 163, 148, 140, 2936, 161, 162, 2222, - 1887, 678, 2260, 2972, 2683, 178, 3605, 1831, 2365, 2366, - 2368, 2367, 195, 1595, 184, 149, 1540, 2135, 1144, 1146, - 661, 3412, 1833, 3413, 1062, 2643, 2668, 2299, 1541, 152, - 150, 145, 146, 147, 151, 1809, 134, 2960, 1149, 3633, - 2353, 142, 200, 1796, 200, 2961, 1157, 200, 200, 177, - 153, 2304, 1137, 624, 1158, 626, 640, 1135, 663, 1094, - 662, 630, 1130, 628, 632, 641, 633, 1136, 627, 2688, - 638, 1123, 2968, 629, 642, 643, 648, 652, 653, 654, - 650, 647, 655, 622, 623, 645, 1770, 636, 664, 677, - 661, 677, 677, 3579, 617, 990, 1086, 2339, 954, 2340, - 3171, 2341, 1131, 1132, 3170, 174, 2305, 989, 175, 2342, - 1068, 677, 200, 661, 1067, 2969, 1353, 2303, 1351, 1348, - 1349, 1350, 1356, 1358, 1355, 1142, 1354, 2301, 661, 1143, - 1771, 194, 1772, 3364, 2744, 2263, 1347, 2133, 2134, 1148, - 1406, 169, 195, 2777, 1353, 3167, 1351, 1348, 1349, 1350, - 1356, 1358, 1355, 1544, 1354, 3227, 964, 958, 956, 2302, - 1090, 1028, 2148, 998, 1347, 999, 134, 999, 1801, 1037, - 1026, 1141, 1091, 1036, 1035, 1034, 1033, 1032, 996, 177, - 1031, 1030, 3460, 2634, 661, 1025, 1681, 3539, 1038, 661, - 1393, 1393, 2371, 2886, 964, 958, 956, 661, 1414, 3652, - 2692, 1404, 1112, 973, 1118, 1119, 1120, 1121, 1011, 3610, - 1150, 1151, 1153, 2133, 2134, 973, 1396, 1397, 1398, 1399, - 618, 3538, 2592, 855, 1702, 1010, 1410, 164, 855, 2670, - 1160, 1161, 2282, 949, 855, 174, 3645, 1323, 175, 973, - 1824, 1596, 2236, 971, 178, 2689, 2653, 2289, 2288, 1812, - 2637, 1810, 1811, 184, 1815, 1816, 1017, 2906, 1813, 1814, - 3166, 194, 1047, 3083, 1675, 1820, 1089, 1333, 1010, 1055, - 1126, 3570, 1046, 2226, 2667, 1674, 1673, 2705, 2385, 2513, - 2515, 1821, 1406, 1324, 1325, 3539, 2991, 1054, 157, 989, - 1400, 158, 1671, 615, 2601, 2937, 2938, 1782, 1781, 1783, - 1784, 1785, 665, 3130, 3131, 3221, 1837, 614, 2941, 1029, - 3199, 3221, 609, 2227, 3449, 3569, 3119, 91, 1027, 3538, - 2225, 170, 3101, 2680, 2657, 658, 2679, 1800, 182, 2583, - 1530, 2280, 2543, 1701, 1394, 1395, 2548, 2485, 1954, 200, - 659, 1587, 2372, 677, 677, 1495, 1834, 1835, 1838, 1836, - 1103, 129, 1564, 1566, 2228, 1340, 2177, 2695, 200, 1016, - 96, 1424, 2694, 1425, 2224, 2695, 1393, 1390, 2656, 190, - 2694, 932, 957, 96, 178, 2862, 96, 1139, 677, 96, - 169, 200, 1804, 184, 1802, 1803, 1837, 1807, 1808, 1156, - 1547, 1805, 1806, 677, 1551, 1111, 3035, 1548, 1017, 917, - 200, 1097, 3474, 1100, 1040, 1017, 1842, 1428, 1113, 1531, - 957, 1545, 2937, 2938, 171, 176, 173, 179, 180, 181, - 183, 185, 186, 187, 188, 2941, 1834, 1835, 1838, 1836, - 189, 191, 192, 193, 3162, 3095, 2300, 1896, 677, 2327, - 2323, 2325, 2326, 2324, 2330, 2331, 1139, 2514, 2328, 2329, - 1549, 1406, 1550, 106, 125, 107, 3643, 677, 677, 3644, - 677, 3642, 677, 677, 1817, 677, 677, 677, 677, 677, - 677, 122, 1601, 1531, 1125, 1797, 2729, 1798, 1406, 1966, - 1799, 1406, 677, 1406, 200, 1127, 1975, 2626, 3613, 1537, - 1524, 1362, 1501, 1502, 1503, 1504, 1505, 1966, 3262, 2402, - 1976, 1016, 109, 1053, 200, 1361, 1362, 1050, 1016, 3137, - 169, 3136, 1708, 2267, 1010, 1013, 1014, 677, 973, 200, - 1711, 1152, 1007, 1011, 1140, 2279, 1710, 1700, 1678, 1679, - 1680, 1924, 123, 2277, 677, 2275, 200, 1028, 1110, 1743, - 1026, 1694, 1746, 1006, 1748, 1925, 1391, 1392, 1923, 1093, - 3653, 1765, 1546, 1843, 1363, 1565, 200, 1687, 3504, 2272, - 170, 2272, 914, 200, 1568, 3606, 3120, 182, 928, 1706, - 3647, 916, 200, 200, 200, 200, 200, 200, 200, 200, - 200, 677, 3372, 1704, 1704, 1747, 3371, 1592, 1593, 1363, - 3196, 1534, 3197, 1140, 985, 1755, 1756, 987, 2276, 3362, - 2274, 1761, 1762, 3505, 124, 1716, 1705, 1717, 190, 1719, - 1721, 1670, 3212, 1725, 1727, 1729, 1731, 1733, 2311, 2307, - 2309, 2310, 2308, 2314, 2315, 3211, 1563, 2312, 2313, 1973, - 1790, 1697, 1684, 1971, 3442, 1685, 1683, 3654, 3617, 1563, - 1829, 1363, 1972, 3144, 1017, 1383, 1384, 1385, 1386, 1388, - 1387, 1389, 1390, 171, 176, 173, 179, 180, 181, 183, - 185, 186, 187, 188, 2377, 2378, 2379, 1751, 1363, 189, - 191, 192, 193, 3143, 3133, 1914, 1916, 1917, 1676, 3443, - 1788, 1844, 1845, 1385, 1386, 1388, 1387, 1389, 1390, 1360, - 170, 1361, 1362, 2914, 1789, 1849, 990, 182, 982, 1915, - 1846, 1017, 1856, 1857, 1858, 984, 983, 1850, 1825, 1852, - 1853, 1854, 1855, 2902, 2608, 2392, 1859, 858, 859, 860, - 133, 993, 992, 991, 1360, 2391, 1361, 1362, 1871, 1872, - 1777, 1874, 1017, 2731, 2607, 2606, 2232, 2072, 190, 1791, - 1775, 2069, 2710, 1848, 1787, 1774, 1773, 1016, 1763, 1363, - 2071, 1757, 1020, 1010, 988, 677, 677, 1022, 1754, 1753, - 2072, 1023, 1021, 1752, 853, 1723, 1108, 1107, 677, 3127, - 666, 666, 1870, 1869, 2964, 1363, 1360, 200, 1361, 1362, - 2590, 666, 1024, 171, 176, 173, 179, 180, 181, 183, - 185, 186, 187, 188, 1776, 2248, 2247, 2246, 2245, 189, - 191, 192, 193, 1360, 1016, 1361, 1362, 2244, 2243, 1020, - 1010, 1327, 43, 1595, 1022, 43, 1572, 3607, 1023, 1021, - 2439, 2534, 3632, 3594, 1563, 1563, 677, 2712, 1949, 1949, - 1359, 1563, 3462, 3615, 1563, 1016, 1406, 1363, 1359, 1563, - 3398, 1010, 1013, 1014, 3469, 973, 3468, 677, 3446, 1007, - 1011, 2534, 3532, 1406, 1969, 2534, 3512, 3397, 1970, 3549, - 1563, 1927, 1573, 1929, 1930, 1931, 1932, 1933, 1934, 1935, - 1936, 1937, 1938, 1939, 1940, 1941, 2534, 3508, 677, 677, - 3495, 1563, 3355, 1920, 1360, 112, 1361, 1362, 3445, 1530, - 989, 1918, 2033, 1928, 3444, 112, 111, 1404, 110, 1363, - 2722, 2721, 2720, 3367, 1363, 2714, 111, 2718, 110, 2713, - 1360, 2711, 1361, 1362, 1967, 3351, 2716, 105, 3180, 3459, - 2065, 3547, 1563, 2140, 2141, 2715, 2429, 3350, 2080, 1367, - 1368, 1369, 1370, 1371, 1372, 1373, 1365, 3261, 1947, 1947, - 1950, 3259, 2029, 2717, 2719, 2094, 3208, 1880, 1881, 3375, - 1563, 2534, 3363, 103, 87, 1529, 1379, 87, 1921, 1528, - 105, 1897, 1564, 2101, 104, 1527, 1563, 2077, 1531, 3141, - 1363, 200, 1360, 3126, 1361, 1362, 1563, 677, 2441, 1380, - 1381, 1382, 1383, 1384, 1385, 1386, 1388, 1387, 1389, 1390, - 1363, 103, 1926, 2068, 3180, 1563, 2124, 2534, 3178, 3354, - 200, 2975, 104, 677, 2272, 1563, 3188, 3099, 1563, 2450, - 1563, 2644, 2390, 200, 2973, 2970, 2905, 677, 1953, 1563, - 2080, 200, 2904, 200, 2617, 200, 200, 2895, 2894, 1960, - 1962, 1363, 2079, 2604, 1360, 1363, 1361, 1362, 1526, 1360, - 677, 1361, 1362, 2082, 2083, 2294, 2119, 1379, 2120, 2704, - 1977, 1978, 1979, 1980, 3545, 1563, 2622, 1563, 2186, 2077, - 2293, 1363, 2130, 106, 1991, 107, 2114, 1363, 2158, 2113, - 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1388, 1387, 1389, - 1390, 2892, 2893, 2078, 106, 2579, 107, 1381, 1382, 1383, - 1384, 1385, 1386, 1388, 1387, 1389, 1390, 2123, 1876, 677, - 2233, 2890, 2891, 2890, 2889, 1360, 1839, 1361, 1362, 1363, - 2081, 2558, 1563, 2084, 2085, 3421, 1563, 2371, 2666, 3393, - 2195, 2196, 2197, 2198, 2079, 1360, 677, 1361, 1362, 1666, - 2647, 105, 677, 2640, 2641, 2185, 2190, 1786, 2191, 2192, - 2193, 2194, 1363, 2181, 2180, 2162, 1563, 929, 2580, 1778, - 2112, 3419, 1563, 3094, 2201, 2202, 2203, 2204, 2582, 2534, - 2533, 3008, 2395, 1563, 1363, 2100, 1360, 2122, 1361, 1362, - 1360, 1768, 1361, 1362, 1764, 2145, 1760, 2125, 2579, 677, - 2184, 1759, 2215, 1758, 677, 1574, 2221, 2261, 677, 677, - 1563, 2143, 1379, 3416, 1563, 1375, 1360, 1376, 1361, 1362, - 2167, 2168, 1360, 2166, 1361, 1362, 963, 962, 1154, 2183, - 2182, 1377, 1391, 1392, 1374, 1380, 1381, 1382, 1383, 1384, - 1385, 1386, 1388, 1387, 1389, 1390, 200, 1563, 2027, 2258, - 2231, 1952, 1563, 200, 1666, 1665, 1607, 1606, 2038, 2827, - 2530, 2580, 2870, 2550, 1360, 2550, 1361, 1362, 3402, 1563, - 3094, 2371, 200, 200, 2266, 105, 200, 2269, 200, 2270, - 2216, 2212, 1019, 2015, 200, 2273, 2857, 2230, 2234, 2205, - 2207, 2208, 1704, 111, 200, 2242, 2371, 1360, 1359, 1361, - 1362, 200, 2286, 3096, 3500, 1018, 2557, 2871, 3473, 2534, - 2265, 2558, 3055, 2264, 2268, 2892, 1363, 2216, 97, 1360, - 2800, 1361, 1362, 2169, 2395, 1363, 2102, 1379, 2287, 2384, - 200, 2873, 2038, 2395, 2450, 2558, 2426, 3094, 2425, 677, - 2290, 2272, 1363, 2272, 2291, 2292, 2255, 2138, 1567, 2868, - 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1388, 1387, 1389, - 1390, 2558, 1359, 3145, 2103, 2297, 2884, 2885, 1952, 1898, - 1882, 1363, 1819, 2869, 1594, 1363, 1001, 1000, 3575, 125, - 2007, 1996, 1997, 1998, 1999, 2009, 2000, 2001, 2002, 2014, - 2010, 2003, 2004, 2011, 2012, 2013, 2005, 2006, 2008, 2917, - 3070, 1563, 3515, 3386, 2388, 1406, 2875, 2080, 2393, 3063, - 1563, 2396, 1570, 2397, 3146, 3147, 3148, 1363, 2404, 3352, - 3273, 3161, 2406, 2407, 2408, 2966, 3060, 1563, 2399, 2381, - 3158, 2383, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421, - 2422, 2423, 2355, 2356, 1363, 2351, 2389, 2358, 3139, 2345, - 3018, 1360, 1920, 1361, 1362, 3114, 2359, 97, 2614, 3065, - 1360, 2382, 1361, 1362, 3017, 1668, 2387, 2214, 2430, 2431, - 2432, 2433, 2434, 2962, 2436, 2883, 2919, 1360, 2438, 1361, - 1362, 2915, 2443, 2444, 2648, 2445, 2211, 2886, 2448, 1739, - 2449, 2206, 2361, 2200, 2452, 2199, 1793, 1699, 2456, 1695, - 1092, 2398, 2461, 2462, 2463, 2464, 1360, 2369, 1361, 1362, - 1360, 2079, 1361, 1362, 1662, 2475, 126, 2478, 2479, 3149, - 3106, 3107, 3387, 1363, 2229, 2481, 2483, 1921, 3058, 1563, - 2613, 1363, 2486, 2487, 2488, 2489, 2490, 2380, 1363, 2117, - 1740, 1741, 1742, 2497, 2498, 3627, 2499, 3625, 1878, 2502, - 2504, 2124, 1360, 2506, 1361, 1362, 200, 3601, 3481, 3407, - 3109, 2911, 2078, 2518, 200, 1379, 3150, 3151, 3152, 1949, - 1363, 2401, 1735, 3477, 677, 2910, 2909, 2827, 2614, 1360, - 1363, 1361, 1362, 2627, 2346, 677, 3388, 3112, 1380, 1381, - 1382, 1383, 1384, 1385, 1386, 1388, 1387, 1389, 1390, 2849, - 2129, 1363, 3111, 2846, 2850, 1363, 2872, 3023, 1563, 200, - 1879, 2517, 1363, 2847, 200, 3006, 1563, 2845, 2848, 1736, - 1737, 1738, 2505, 1563, 2554, 1571, 3100, 2121, 2435, 1380, - 1381, 1382, 1383, 1384, 1385, 1386, 1388, 1387, 1389, 1390, - 2805, 2804, 1363, 43, 2851, 3441, 2567, 2568, 3087, 2520, - 2535, 2522, 2572, 2437, 3061, 2574, 3086, 687, 1360, 1363, - 1361, 1362, 2817, 2819, 2503, 1563, 1360, 3252, 1361, 1362, - 3254, 2820, 3090, 1360, 2814, 1361, 1362, 1363, 1818, 1947, - 2519, 905, 677, 2888, 2531, 2482, 1563, 2573, 200, 2465, - 1563, 1363, 2597, 2618, 2544, 200, 2457, 1563, 2507, 1975, - 1363, 3243, 933, 3242, 1057, 1360, 1537, 1361, 1362, 677, - 934, 2600, 2602, 1976, 1056, 1360, 677, 1361, 1362, 2984, - 1363, 103, 2613, 2639, 2527, 677, 2698, 1563, 105, 2654, - 2532, 1531, 104, 2577, 2547, 103, 1360, 2593, 1361, 1362, - 1360, 1406, 1361, 1362, 3608, 134, 104, 1360, 1363, 1361, - 1362, 3241, 1363, 1326, 200, 200, 200, 200, 200, 2663, - 2221, 1363, 3457, 2584, 2581, 3092, 1576, 2409, 939, 105, - 2591, 945, 945, 3639, 2594, 3033, 2616, 1360, 2907, 1361, - 1362, 2619, 2620, 2349, 2424, 3359, 2140, 2141, 3554, 2876, - 3458, 2605, 3382, 2880, 1360, 2887, 1361, 1362, 200, 200, - 2879, 2571, 2661, 2126, 2615, 3163, 941, 942, 1561, 1557, - 2338, 1363, 1360, 2337, 1361, 1362, 2623, 1363, 2628, 2629, - 2630, 1363, 2624, 1558, 200, 1363, 1360, 3072, 1361, 1362, - 1363, 1687, 1575, 2660, 2881, 1360, 3029, 1361, 1362, 2877, - 2336, 2649, 2650, 2335, 2878, 677, 2609, 2334, 1663, 1664, - 1560, 1363, 1559, 2333, 2332, 1360, 1363, 1361, 1362, 2322, - 2733, 2734, 2735, 2736, 2737, 2321, 2320, 2659, 2319, 2318, - 2563, 2566, 2567, 2568, 2564, 2317, 2565, 2569, 2316, 2742, - 3106, 3107, 2375, 1360, 110, 1361, 1362, 1360, 3429, 1361, - 1362, 2708, 677, 3428, 2684, 3015, 1360, 3410, 1361, 1362, - 112, 3014, 3260, 2686, 2803, 3011, 1363, 2723, 3258, 2501, - 2687, 111, 2802, 110, 2500, 112, 3257, 2690, 3250, 3159, - 3091, 2707, 105, 3089, 2920, 2738, 111, 111, 110, 2706, - 677, 2256, 1682, 940, 112, 2496, 3249, 3080, 677, 2550, - 2495, 2696, 3629, 3628, 2697, 111, 1360, 3231, 1361, 1362, - 2530, 2745, 1360, 1363, 1361, 1362, 1360, 2427, 1361, 1362, - 1360, 2115, 1361, 1362, 3628, 1360, 2726, 1361, 1362, 677, - 1588, 1580, 3629, 2779, 116, 117, 1363, 2784, 3447, 3125, - 931, 2724, 125, 200, 2781, 3, 1360, 677, 1361, 1362, - 2494, 1360, 1895, 1361, 1362, 10, 1893, 1894, 99, 9, - 8, 677, 2068, 1, 2068, 1406, 2836, 1105, 677, 677, - 1406, 200, 200, 200, 200, 200, 1830, 1329, 1328, 2753, - 3129, 3564, 635, 200, 2854, 2104, 2158, 1535, 2747, 200, - 2807, 200, 3602, 3560, 200, 200, 200, 2493, 3561, 1779, - 2784, 1360, 1769, 1361, 1362, 3191, 2839, 1363, 2039, 2856, - 2783, 920, 3383, 2923, 2158, 2158, 2158, 2158, 2158, 2262, - 2492, 2808, 2780, 3157, 2782, 2219, 2830, 2824, 1009, 159, - 2178, 2830, 2179, 3528, 2158, 120, 966, 2158, 119, 1012, - 200, 2795, 2833, 2763, 2764, 2765, 2766, 2767, 1360, 1124, - 1361, 1362, 2809, 677, 2806, 2257, 1406, 3181, 2598, 2821, - 2822, 677, 2187, 2796, 2797, 2798, 200, 1613, 1611, 2858, - 1612, 1360, 2859, 1361, 1362, 2943, 2799, 1610, 922, 1615, - 200, 2841, 2842, 1614, 2844, 106, 2840, 107, 2852, 2843, - 921, 2491, 2992, 2860, 2428, 3034, 1886, 673, 2570, 1363, - 1829, 667, 200, 197, 1363, 200, 1602, 1581, 3047, 1051, - 2866, 625, 2896, 2295, 2986, 631, 2838, 2922, 1411, 2899, - 2898, 2897, 1877, 1363, 2801, 2585, 960, 2900, 2901, 952, - 2116, 2521, 959, 3360, 3003, 3004, 3005, 2950, 3007, 3009, - 2835, 2951, 1360, 3084, 1361, 1362, 1363, 2725, 2221, 2813, - 2815, 2942, 3016, 2537, 1363, 2818, 2921, 3020, 3021, 3022, - 3024, 3025, 3026, 3027, 2811, 2957, 3028, 3440, 3030, 3031, - 3032, 3251, 3513, 3036, 3037, 3038, 3039, 3040, 3041, 3042, - 3043, 3044, 3045, 2480, 2974, 677, 2976, 2977, 2474, 2595, - 2980, 3052, 1363, 1577, 3056, 3054, 3057, 3059, 2979, 3062, - 3064, 2988, 3066, 3067, 3068, 3069, 2755, 2473, 2757, 2987, - 3075, 2400, 2994, 2995, 200, 2996, 1964, 2997, 2998, 1401, - 3000, 2155, 3002, 3226, 2768, 2769, 2770, 2771, 3049, 1913, - 2472, 696, 695, 693, 1360, 3053, 1361, 1362, 2471, 1360, - 2523, 1361, 1362, 2551, 1366, 3097, 3098, 843, 2511, 3102, - 1363, 1589, 2562, 2560, 2982, 2983, 2559, 2347, 1360, 2163, - 1361, 1362, 3108, 3104, 3556, 2157, 2153, 2529, 3078, 1363, - 200, 794, 793, 705, 1363, 697, 2470, 689, 1363, 792, - 791, 1360, 1363, 1361, 1362, 3122, 1363, 2949, 3540, 1360, - 1363, 1361, 1362, 2669, 3076, 3073, 3074, 2963, 2671, 200, - 1363, 3103, 2596, 2959, 3081, 1363, 1364, 3088, 2563, 2566, - 2567, 2568, 2564, 2158, 2565, 2569, 1343, 1553, 683, 200, - 3117, 3118, 200, 200, 200, 3093, 1363, 1360, 980, 1361, - 1362, 3110, 677, 677, 2469, 1419, 2989, 3464, 2374, 3012, - 1552, 3115, 1363, 3113, 1994, 1995, 3164, 3165, 3116, 1363, - 3471, 3123, 2950, 2468, 2931, 3179, 2951, 3124, 2467, 3175, - 1363, 2912, 2466, 2645, 2249, 1363, 2460, 72, 47, 3140, - 2459, 3142, 3435, 3501, 2458, 3185, 3186, 790, 1363, 677, - 677, 677, 677, 1363, 2455, 1360, 787, 1361, 1362, 2454, - 3228, 3229, 1363, 3230, 3134, 3135, 2775, 2776, 3484, 3485, - 3198, 786, 3486, 3202, 1360, 2022, 1361, 1362, 1339, 1360, - 2453, 1361, 1362, 1360, 1336, 1361, 1362, 1360, 3577, 1361, - 1362, 1360, 1888, 1361, 1362, 1360, 2451, 1361, 1362, 98, - 3213, 38, 37, 2447, 36, 1360, 35, 1361, 1362, 34, - 1360, 28, 1361, 1362, 2446, 3217, 27, 3168, 3187, 2442, - 26, 3172, 3173, 3174, 25, 24, 21, 3225, 20, 31, - 23, 1360, 2440, 1361, 1362, 3232, 22, 2405, 19, 18, - 2934, 3597, 3638, 128, 56, 3203, 2394, 1360, 53, 1361, - 1362, 51, 136, 135, 1360, 54, 1361, 1362, 200, 50, - 3207, 1095, 48, 33, 32, 1360, 17, 1361, 1362, 16, - 1360, 15, 1361, 1362, 1561, 1557, 14, 1406, 3246, 13, - 12, 3224, 677, 1360, 677, 1361, 1362, 11, 1360, 1558, - 1361, 1362, 7, 6, 41, 40, 30, 1360, 1949, 1361, - 1362, 39, 29, 4, 2632, 3267, 2251, 0, 0, 0, - 0, 0, 0, 0, 1554, 1555, 1560, 0, 1559, 0, - 0, 3269, 0, 0, 43, 0, 0, 0, 1579, 3256, - 3255, 3247, 3263, 0, 3271, 0, 0, 3265, 2830, 0, - 0, 0, 0, 0, 677, 0, 0, 3276, 3277, 0, - 0, 0, 0, 0, 0, 2833, 3374, 200, 3361, 2833, - 677, 0, 3279, 0, 0, 3381, 0, 1669, 0, 0, - 0, 0, 0, 677, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3391, 3392, 0, 3394, 854, - 3395, 3396, 89, 0, 3357, 3399, 3400, 3401, 3358, 3403, - 3406, 0, 0, 0, 3373, 3405, 3377, 1949, 1947, 3275, - 0, 1538, 3385, 3356, 0, 3415, 3417, 3418, 3420, 3422, - 3423, 3425, 3378, 677, 0, 0, 3365, 677, 677, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3404, 3368, 3369, 3370, 677, 3409, 0, 3455, - 0, 3411, 0, 0, 0, 3414, 0, 3430, 3431, 0, - 3451, 612, 3433, 3432, 0, 0, 0, 918, 0, 89, - 0, 0, 0, 0, 0, 0, 0, 3448, 0, 0, - 0, 0, 0, 908, 0, 0, 0, 0, 918, 1840, - 0, 0, 0, 0, 0, 0, 0, 3454, 0, 0, - 0, 0, 0, 0, 0, 0, 979, 1947, 3408, 3450, - 0, 0, 0, 0, 0, 2833, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 677, 974, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3456, - 0, 200, 3215, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 677, - 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3475, 0, 3480, 0, 0, 0, 3472, - 0, 0, 0, 0, 0, 3470, 0, 0, 3467, 0, - 0, 0, 0, 0, 0, 3496, 0, 0, 43, 0, - 0, 3497, 3498, 0, 0, 0, 0, 0, 0, 0, - 677, 0, 0, 3463, 0, 0, 0, 0, 0, 0, - 1406, 0, 677, 3509, 0, 3490, 0, 0, 3491, 0, - 0, 0, 0, 0, 0, 0, 3499, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 677, 677, 0, 3534, - 3535, 0, 0, 0, 0, 3514, 3506, 0, 0, 0, - 3516, 0, 0, 3544, 3546, 3548, 0, 0, 677, 3541, - 3542, 3527, 3519, 3524, 43, 3521, 3520, 3518, 3523, 3522, - 0, 2830, 200, 677, 0, 3385, 3529, 0, 3576, 0, - 0, 0, 3511, 0, 0, 0, 3552, 0, 0, 0, - 0, 0, 3555, 0, 0, 0, 3573, 3563, 3568, 0, - 0, 0, 0, 0, 0, 0, 3582, 0, 0, 0, - 3541, 3542, 0, 3580, 0, 0, 677, 3593, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1908, 1909, 1910, - 1911, 0, 0, 3591, 0, 0, 3596, 0, 677, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3614, - 3616, 3618, 3609, 3439, 0, 677, 3611, 677, 1414, 0, - 0, 1949, 0, 0, 0, 0, 3620, 3619, 3626, 0, - 3624, 0, 0, 0, 0, 3622, 1955, 1956, 0, 0, - 3637, 1958, 3634, 945, 945, 1963, 3541, 3542, 3640, 1968, - 0, 0, 0, 0, 3648, 3646, 3649, 3650, 0, 0, - 0, 0, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, - 1989, 1990, 0, 0, 0, 1949, 2016, 2017, 2018, 2019, - 2020, 2021, 2023, 3405, 2028, 3656, 2030, 2031, 2032, 0, - 2034, 2035, 2036, 0, 2042, 2043, 2044, 2045, 2046, 2047, - 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, - 2058, 2059, 2060, 2061, 2062, 2063, 2064, 0, 2066, 0, - 2073, 2074, 945, 0, 945, 945, 945, 945, 945, 3657, - 3658, 1947, 3623, 0, 2086, 2087, 2088, 2089, 2090, 2091, - 2092, 2093, 0, 2095, 2096, 2097, 2098, 2099, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3479, 0, 0, 0, 0, - 0, 0, 0, 3489, 0, 0, 0, 0, 0, 0, - 0, 945, 0, 0, 0, 1947, 3655, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2136, 2137, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2175, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1096, 0, 1102, 0, 0, 1104, 1106, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1163, 0, 1163, 1163, - 2217, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3595, 0, 0, 0, 0, 0, 0, 0, - 0, 1335, 1630, 0, 0, 0, 918, 1403, 1408, 1409, - 0, 1412, 0, 1413, 1415, 1416, 1417, 0, 1420, 1421, - 1423, 1423, 0, 1423, 1427, 1427, 1429, 1430, 1431, 1432, - 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, - 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, - 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, - 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, - 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, - 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, - 1493, 0, 0, 0, 0, 1494, 0, 1496, 1497, 1498, - 1499, 1500, 0, 0, 0, 0, 0, 0, 0, 0, - 1427, 1427, 1427, 1427, 1427, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1506, 1507, 1508, 1509, 1510, 1511, - 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 0, 0, - 0, 0, 0, 0, 0, 0, 1618, 0, 0, 0, - 0, 0, 0, 0, 0, 1533, 0, 0, 0, 0, - 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2638, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, - 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 177, 0, 1630, 0, 0, 0, 0, 1539, 0, - 0, 0, 0, 0, 918, 0, 0, 0, 918, 0, - 0, 0, 0, 918, 0, 0, 0, 0, 0, 0, - 0, 1631, 167, 0, 0, 0, 0, 0, 155, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, - 175, 0, 0, 0, 2403, 0, 0, 0, 0, 0, - 1591, 0, 0, 0, 0, 2410, 2411, 2412, 2413, 1690, - 1691, 166, 165, 194, 0, 0, 0, 0, 0, 1608, - 0, 0, 0, 0, 0, 0, 1644, 1647, 1648, 1649, - 1650, 1651, 1652, 0, 1653, 1654, 1656, 1657, 1655, 1658, - 1659, 1632, 1633, 1634, 1635, 1616, 1617, 1645, 0, 1619, - 1419, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, - 0, 0, 1629, 1636, 1637, 1638, 1639, 0, 1640, 1641, - 1642, 1643, 0, 0, 0, 0, 0, 1618, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 195, 0, 0, 0, - 0, 0, 0, 1749, 0, 0, 0, 1686, 0, 0, - 0, 0, 160, 1692, 163, 0, 1689, 0, 161, 162, - 134, 0, 156, 0, 0, 0, 178, 0, 0, 0, - 0, 0, 0, 177, 0, 184, 0, 0, 1794, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1631, 0, 167, 0, 1579, 0, 0, 0, - 155, 0, 0, 0, 0, 1847, 0, 0, 1163, 0, - 0, 0, 1851, 0, 0, 0, 0, 0, 0, 174, - 0, 0, 175, 1862, 1863, 1864, 1865, 1866, 1867, 1868, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1690, 1691, 166, 165, 194, 0, 0, 0, 0, - 1646, 0, 0, 0, 0, 0, 0, 1644, 1647, 1648, - 1649, 1650, 1651, 1652, 0, 1653, 1654, 1656, 1657, 1655, - 1658, 1659, 1632, 1633, 1634, 1635, 1616, 1617, 1645, 0, - 1619, 0, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, - 1628, 0, 169, 1629, 1636, 1637, 1638, 1639, 0, 1640, - 1641, 1642, 1643, 0, 0, 0, 838, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 160, 1692, 163, 0, 1689, 0, - 161, 162, 0, 0, 0, 0, 0, 0, 178, 0, - 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, - 0, 656, 0, 0, 0, 0, 0, 676, 164, 0, - 0, 0, 1163, 1163, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 89, 0, 0, 89, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1901, 0, 0, 0, - 676, 0, 0, 676, 2703, 0, 0, 0, 0, 157, - 0, 0, 158, 0, 0, 0, 0, 0, 0, 0, - 0, 1646, 0, 945, 0, 0, 2727, 2728, 0, 0, - 2730, 0, 0, 2732, 0, 0, 0, 0, 0, 0, - 0, 0, 170, 0, 0, 0, 0, 0, 0, 182, - 0, 0, 0, 2739, 2740, 2741, 0, 0, 0, 0, - 0, 0, 0, 0, 169, 2746, 0, 0, 2748, 2749, - 2750, 0, 0, 0, 2751, 2752, 0, 0, 2042, 2754, - 0, 0, 2756, 0, 0, 2758, 2759, 2760, 2761, 0, - 190, 0, 0, 2762, 2042, 2042, 2042, 2042, 2042, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 945, 0, 0, 0, 0, 0, 0, 2785, - 2786, 2787, 2788, 2789, 2790, 0, 0, 0, 2791, 2792, - 0, 2793, 0, 2794, 0, 171, 176, 173, 179, 180, - 181, 183, 185, 186, 187, 188, 0, 0, 0, 0, - 164, 189, 191, 192, 193, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2825, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2855, 0, 0, 0, 0, 0, 0, - 0, 157, 0, 0, 158, 0, 0, 0, 0, 0, - 0, 0, 2156, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2142, 0, 0, 0, 0, 0, 0, 0, - 2146, 0, 2149, 0, 170, 1901, 0, 0, 0, 0, - 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2918, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 97, 190, 0, 856, 0, 979, 0, 844, 857, - 858, 859, 860, 845, 0, 0, 846, 847, 0, 848, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 853, 861, 862, 0, 0, 0, 979, - 0, 0, 0, 0, 0, 0, 0, 171, 176, 173, - 179, 180, 181, 183, 185, 186, 187, 188, 0, 0, - 0, 0, 0, 189, 191, 192, 193, 0, 0, 3010, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2952, 2953, 0, 3019, 0, 0, 0, 0, 0, 0, - 0, 0, 863, 864, 865, 866, 867, 868, 869, 870, - 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, - 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, - 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, - 901, 902, 903, 904, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1901, 0, 0, 0, 0, - 0, 0, 2306, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2954, 0, 0, 0, - 0, 2343, 2344, 0, 0, 2348, 0, 0, 0, 0, - 0, 0, 0, 2352, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2354, 0, 0, 0, 0, 97, 0, - 2357, 856, 0, 0, 0, 844, 857, 858, 859, 860, - 845, 0, 0, 846, 847, 0, 848, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2360, - 853, 861, 862, 676, 1322, 676, 676, 0, 0, 0, - 0, 0, 2376, 3160, 0, 0, 2955, 2956, 0, 0, - 0, 0, 0, 0, 0, 676, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3184, 2952, 2953, 0, - 0, 2386, 0, 0, 1405, 0, 0, 0, 0, 863, - 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, - 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, - 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, - 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, - 904, 0, 0, 0, 3204, 810, 3205, 0, 814, 3206, - 811, 812, 3209, 3210, 0, 813, 0, 0, 0, 0, - 0, 3214, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3216, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2954, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3233, 0, 0, 3234, 0, 3235, 3236, - 0, 3237, 0, 3238, 0, 0, 0, 0, 3239, 0, - 0, 0, 0, 0, 0, 0, 0, 2484, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3264, 0, 0, 1405, 0, 0, 0, - 0, 0, 0, 0, 3272, 0, 795, 3274, 0, 2516, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3278, - 0, 0, 0, 2955, 2956, 0, 918, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3353, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2555, 2556, 0, - 0, 0, 0, 0, 0, 0, 2156, 676, 676, 918, - 2575, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, - 0, 0, 0, 2576, 0, 88, 45, 46, 90, 0, - 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 94, 0, 676, 0, 49, - 79, 80, 0, 77, 81, 0, 0, 0, 1661, 0, - 0, 0, 78, 0, 0, 0, 0, 0, 0, 1672, - 970, 0, 0, 978, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3438, 0, 0, - 0, 65, 676, 0, 1698, 0, 0, 2625, 0, 0, - 0, 0, 1707, 97, 0, 1405, 1709, 0, 0, 1712, - 1713, 676, 676, 2652, 676, 0, 676, 676, 0, 676, - 676, 676, 676, 676, 676, 0, 0, 0, 0, 0, - 0, 0, 1405, 1744, 1745, 1405, 676, 1405, 0, 1750, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2674, 2675, 2676, 2677, 2678, 0, 0, - 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1822, 0, 0, 676, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1901, 2691, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3478, 0, 2699, 0, 676, 0, 0, 0, 0, - 0, 52, 55, 58, 57, 60, 0, 76, 0, 0, - 85, 63, 82, 0, 3492, 0, 0, 3493, 0, 3494, - 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, - 0, 0, 0, 0, 0, 64, 93, 92, 0, 0, - 74, 75, 59, 0, 0, 0, 0, 0, 83, 84, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2772, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 66, 67, 0, 68, 69, 70, 71, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3574, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2156, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3588, 0, 3589, 0, 3590, 0, 0, - 0, 0, 0, 2834, 0, 89, 0, 0, 2156, 2156, - 2156, 2156, 2156, 0, 0, 0, 0, 0, 0, 676, - 676, 0, 0, 0, 0, 0, 0, 0, 2156, 0, - 0, 2156, 676, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3635, 0, 3636, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, - 676, 0, 0, 0, 0, 2940, 0, 0, 0, 2908, - 1405, 0, 0, 0, 0, 2948, 0, 0, 0, 1957, - 0, 676, 0, 0, 0, 0, 0, 1405, 0, 0, - 0, 0, 0, 0, 0, 2946, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2958, - 0, 0, 676, 676, 0, 0, 0, 0, 0, 96, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2978, 0, 0, 2981, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1165, 0, 1165, 1165, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1334, 0, 0, 0, 0, - 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 73, 0, 0, 0, 62, - 0, 0, 0, 0, 0, 0, 0, 676, 0, 0, - 0, 0, 0, 3077, 0, 0, 0, 0, 0, 0, - 0, 676, 0, 0, 676, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 676, 0, 0, 2156, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3121, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3138, 0, - 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, - 2239, 2240, 2241, 0, 0, 0, 0, 0, 3153, 0, - 0, 3154, 3155, 3156, 0, 0, 0, 0, 0, 0, - 676, 0, 0, 0, 0, 0, 676, 1707, 0, 0, - 1707, 0, 1707, 0, 0, 0, 0, 0, 2271, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 676, 0, 0, 0, 0, 676, 0, - 0, 0, 676, 676, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1542, 1543, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1585, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1603, 0, 0, - 0, 3240, 0, 3244, 3245, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2834, 0, 89, 0, - 2834, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 970, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 856, 0, 2072, 0, 0, 857, 0, - 0, 1715, 1715, 676, 1715, 0, 1715, 1715, 1948, 1724, - 1715, 1715, 1715, 1715, 1715, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 970, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3366, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1792, 0, 0, 0, 0, 0, 0, 0, 1405, - 0, 676, 0, 0, 0, 0, 0, 0, 1826, 0, - 0, 863, 864, 865, 866, 867, 868, 869, 870, 871, - 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, - 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, - 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, - 902, 903, 904, 0, 0, 1165, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2834, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, - 1439, 1440, 1441, 1442, 1443, 1444, 1448, 1449, 1450, 1451, + 1564, 3655, 840, 850, 843, 3666, 3214, 3561, 3624, 713, + 3625, 2185, 2136, 1611, 3527, 2988, 3550, 3582, 2890, 2897, + 3071, 3477, 3461, 3409, 2117, 2939, 936, 2948, 2953, 3243, + 2950, 2949, 2947, 2952, 3245, 2951, 3244, 2851, 3459, 3201, + 1166, 3273, 2497, 2119, 914, 810, 2854, 2968, 2797, 3449, + 692, 2905, 809, 2967, 2259, 43, 2531, 695, 1901, 200, + 2852, 5, 200, 2855, 3110, 3104, 3278, 1571, 672, 2732, + 2140, 1534, 723, 678, 2156, 2570, 803, 2970, 2159, 2557, + 3130, 842, 2849, 1955, 200, 2839, 2079, 3096, 2663, 805, + 693, 1669, 2222, 2631, 691, 2994, 1040, 2716, 2227, 200, + 1111, 2632, 2290, 2633, 2173, 168, 969, 1168, 2247, 2582, + 42, 2161, 44, 937, 2160, 2533, 1558, 2549, 2563, 2076, + 2050, 2084, 804, 916, 1970, 1909, 678, 200, 1951, 678, + 2268, 1140, 2246, 2148, 2703, 154, 2307, 2229, 2624, 1003, + 918, 1698, 921, 998, 1580, 1716, 1600, 2599, 2163, 687, + 2049, 1538, 1420, 705, 102, 1974, 1836, 106, 1347, 1705, + 1332, 939, 1841, 1928, 977, 973, 1006, 107, 1009, 2244, + 1832, 978, 1797, 2218, 1016, 1004, 1005, 700, 1599, 1585, + 927, 2141, 954, 956, 2085, 1404, 1380, 1157, 2046, 1900, + 1164, 101, 1983, 1850, 2219, 172, 132, 1662, 109, 1690, + 922, 130, 923, 924, 131, 137, 87, 138, 108, 1089, + 949, 699, 1424, 925, 3486, 2656, 100, 86, 3656, 2958, + 3202, 2936, 682, 2261, 2654, 667, 2261, 2262, 2263, 3512, + 2686, 2685, 2955, 2305, 3194, 1782, 1348, 3608, 944, 948, + 3157, 617, 2724, 2725, 97, 3507, 622, 97, 95, 133, + 2958, 1428, 3508, 1042, 139, 3513, 930, 1916, 1915, 1348, + 1914, 97, 661, 970, 667, 1045, 1059, 1060, 1061, 661, + 1064, 1065, 1066, 1067, 1913, 2956, 1070, 1071, 1072, 1073, + 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, + 1084, 1085, 1086, 2, 931, 915, 963, 3248, 683, 121, + 964, 2962, 1912, 996, 1911, 917, 2956, 1884, 1019, 1882, + 685, 658, 2529, 3248, 686, 995, 1020, 97, 621, 2385, + 859, 860, 861, 2114, 2115, 133, 994, 1046, 1049, 1050, + 3603, 993, 2962, 2559, 992, 2676, 1931, 195, 1053, 113, + 114, 115, 2835, 118, 2294, 1359, 127, 1343, 3508, 196, + 2801, 982, 611, 1365, 1062, 3612, 3628, 938, 987, 640, + 3610, 134, 859, 860, 861, 3676, 680, 681, 1359, 3562, + 1565, 966, 3623, 638, 177, 3646, 910, 911, 912, 913, + 3611, 3076, 920, 3075, 3247, 3609, 2679, 2292, 2293, 3462, + 2498, 1921, 3018, 133, 661, 2238, 3405, 3404, 3207, 1044, + 3247, 3208, 88, 1043, 3637, 88, 3415, 3606, 3226, 1334, + 951, 952, 3215, 635, 2959, 88, 3551, 2613, 2232, 976, + 2394, 3558, 652, 2287, 3414, 3225, 962, 807, 808, 2573, + 174, 3491, 88, 175, 1960, 90, 2144, 647, 3587, 3592, + 3038, 1679, 2693, 2694, 3568, 2959, 2887, 2888, 2530, 645, + 650, 3291, 1842, 2886, 2574, 1354, 194, 3590, 1346, 962, + 807, 808, 2180, 2181, 2723, 2608, 3596, 3597, 2607, 2391, + 661, 2609, 1893, 1894, 2907, 2908, 2179, 662, 1354, 2708, + 97, 3591, 2702, 97, 662, 2392, 3568, 1130, 1362, 1842, + 1363, 1364, 991, 97, 1100, 1101, 1118, 1161, 1601, 908, + 1602, 1119, 907, 661, 3478, 1135, 1136, 2620, 1118, 1117, + 97, 1116, 1333, 1119, 1131, 2657, 2990, 625, 986, 627, + 641, 988, 664, 661, 663, 631, 1103, 629, 633, 642, + 634, 1124, 628, 3107, 639, 2116, 2383, 630, 643, 644, + 649, 653, 654, 655, 651, 648, 656, 623, 624, 646, + 989, 637, 665, 3629, 1840, 1088, 661, 620, 2198, 2197, + 1344, 2566, 2567, 2766, 3026, 2144, 2231, 3024, 1892, 178, + 1896, 675, 679, 673, 3630, 1381, 2995, 2269, 184, 1542, + 2704, 2664, 1772, 2906, 2386, 2387, 2389, 2388, 1094, 1597, + 3437, 1543, 3438, 2689, 2308, 2909, 3658, 3015, 1382, 1383, + 1384, 1385, 1386, 1387, 1388, 1390, 1389, 1391, 1392, 662, + 1132, 1137, 2991, 200, 1160, 200, 2313, 2983, 200, 200, + 991, 1138, 983, 661, 1798, 2984, 1773, 1125, 1774, 985, + 984, 1133, 1134, 2142, 2143, 2348, 2344, 2346, 2347, 2345, + 2351, 2352, 1151, 1159, 2349, 2350, 1139, 2374, 2333, 1147, + 2332, 1149, 1096, 2336, 2337, 955, 3196, 2334, 2335, 2711, + 678, 3195, 678, 678, 1063, 2360, 2363, 2361, 1069, 2362, + 618, 2314, 1068, 3604, 1029, 2992, 2310, 3389, 989, 1027, + 2272, 1546, 678, 200, 3192, 662, 3252, 990, 999, 1146, + 1148, 2157, 1000, 2312, 1355, 1000, 1353, 1350, 1351, 1352, + 1358, 1360, 1357, 2909, 1356, 2800, 169, 1038, 1037, 1036, + 195, 1408, 1035, 1034, 1349, 1033, 1032, 1355, 662, 1353, + 1350, 1351, 1352, 1358, 1360, 1357, 1114, 1356, 1120, 1121, + 1122, 1123, 1031, 2767, 134, 2311, 1026, 1349, 662, 1683, + 1039, 1395, 974, 1395, 991, 1087, 972, 177, 3677, 3635, + 974, 965, 959, 957, 1162, 1163, 3485, 2655, 1011, 974, + 1833, 2392, 2142, 2143, 1012, 1416, 666, 1704, 2715, 1048, + 2245, 662, 2929, 950, 1018, 1011, 1152, 1153, 1155, 1047, + 2712, 997, 2534, 2536, 965, 959, 957, 2298, 2297, 659, + 2622, 2691, 1398, 1399, 1400, 1401, 619, 1144, 1406, 3191, + 1818, 1145, 1412, 174, 660, 856, 175, 2291, 856, 1091, + 1325, 1150, 2658, 1829, 1335, 990, 1056, 1846, 1598, 2688, + 1677, 1093, 1030, 1092, 1018, 1676, 1675, 1028, 2728, 194, + 2406, 2960, 2961, 2674, 3108, 1830, 1673, 3564, 662, 616, + 615, 2235, 1128, 1143, 2964, 610, 2701, 3474, 3670, 2700, + 1326, 1327, 2564, 1408, 1846, 3144, 2289, 1843, 1844, 1847, + 1845, 1402, 2960, 2961, 1784, 1783, 1785, 1786, 1787, 3155, + 3156, 3563, 3126, 3224, 2678, 2964, 1703, 1017, 856, 3564, + 2604, 2236, 1021, 1011, 2569, 91, 170, 1023, 2234, 1396, + 1397, 1024, 1022, 182, 1843, 1844, 1847, 1845, 2506, 1963, + 1589, 1803, 1497, 3246, 1105, 2186, 1395, 1392, 1532, 3595, + 200, 2885, 1025, 3563, 678, 678, 1090, 96, 2677, 3246, + 96, 2393, 2237, 1566, 1568, 129, 2718, 1017, 933, 200, + 96, 2717, 2233, 2718, 190, 1426, 1158, 1427, 2717, 990, + 3499, 1547, 178, 1041, 3187, 3120, 1113, 96, 1802, 678, + 2535, 184, 200, 3594, 1342, 1141, 2309, 2647, 1905, 3016, + 1115, 1826, 1550, 1099, 678, 3060, 1533, 958, 1549, 1018, + 1102, 200, 1553, 1603, 2752, 1851, 1984, 918, 1430, 171, + 176, 173, 179, 180, 181, 183, 185, 186, 187, 188, + 1985, 1975, 1975, 2423, 1018, 189, 191, 192, 193, 3287, + 958, 2320, 2316, 2318, 2319, 2317, 2323, 2324, 1141, 678, + 2321, 2322, 3638, 3162, 1821, 1364, 1819, 1820, 2286, 1824, + 1825, 2284, 1408, 1822, 1823, 1363, 1364, 3161, 678, 678, + 1533, 678, 1551, 678, 678, 106, 678, 678, 678, 678, + 678, 678, 1552, 2276, 1713, 107, 1127, 1712, 1702, 1408, + 2288, 1029, 1408, 678, 1408, 200, 1539, 1129, 2733, 1027, + 1811, 2281, 1526, 1503, 1504, 1505, 1506, 1507, 3668, 3678, + 3672, 3669, 1017, 3667, 1055, 200, 109, 1021, 1011, 169, + 3631, 3145, 1023, 1154, 929, 1018, 1024, 1022, 678, 1112, + 200, 3397, 1680, 1681, 1682, 2281, 1799, 1017, 1800, 3396, + 2285, 1801, 1142, 1011, 1014, 1015, 678, 974, 200, 1710, + 3387, 1008, 1012, 1696, 1567, 1806, 1767, 1804, 1805, 1982, + 1809, 1810, 1852, 1095, 1807, 1808, 915, 3237, 200, 1536, + 1365, 3236, 1007, 3529, 2283, 200, 1745, 3169, 1689, 1748, + 1570, 1750, 917, 2735, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 678, 1933, 1142, 3679, 1749, 1708, 1757, + 1758, 1365, 1594, 1595, 1548, 1763, 1764, 3467, 1934, 1393, + 1394, 1932, 1718, 3168, 1719, 1707, 1721, 1723, 3530, 1578, + 1727, 1729, 1731, 1733, 1735, 1018, 1792, 3158, 1017, 1706, + 1706, 1672, 2937, 1790, 1011, 1014, 1015, 3221, 974, 3222, + 2925, 1686, 1008, 1012, 1565, 2629, 1699, 1687, 1365, 1685, + 2628, 1980, 3468, 1838, 3642, 1565, 2627, 2745, 2744, 2743, + 1981, 2241, 2737, 1793, 2741, 1855, 2736, 3033, 2734, 2398, + 2399, 2400, 1859, 2739, 1861, 1862, 1863, 1864, 1753, 1777, + 1776, 1868, 2738, 1775, 1765, 1577, 125, 1759, 1853, 1854, + 1791, 2081, 1756, 1880, 1881, 2078, 1883, 1789, 1755, 170, + 2740, 2742, 1858, 122, 2080, 1362, 182, 1363, 1364, 1865, + 1866, 1867, 1754, 1834, 1813, 2024, 1812, 1725, 854, 1816, + 1817, 1678, 1110, 1814, 1815, 1381, 1365, 2727, 1017, 1109, + 1054, 133, 994, 1565, 1051, 2081, 1362, 993, 1363, 1364, + 992, 1387, 1388, 1390, 1389, 1391, 1392, 190, 1382, 1383, + 1384, 1385, 1386, 1387, 1388, 1390, 1389, 1391, 1392, 2987, + 1857, 859, 860, 861, 123, 3152, 667, 678, 678, 1383, + 1384, 1385, 1386, 1387, 1388, 1390, 1389, 1391, 1392, 1879, + 678, 1878, 1779, 1362, 1329, 1363, 1364, 2611, 667, 200, + 2257, 2256, 171, 176, 173, 179, 180, 181, 183, 185, + 186, 187, 188, 667, 1365, 2255, 2254, 1597, 189, 191, + 192, 193, 2016, 2005, 2006, 2007, 2008, 2018, 2009, 2010, + 2011, 2023, 2019, 2012, 2013, 2020, 2021, 2022, 2014, 2015, + 2017, 43, 2253, 2252, 43, 3632, 124, 3494, 678, 1574, + 1958, 1958, 3493, 1923, 1925, 1926, 1778, 2460, 1408, 1385, + 1386, 1387, 1388, 1390, 1389, 1391, 1392, 1361, 1565, 678, + 3471, 1362, 1929, 1363, 1364, 1408, 1978, 1924, 3470, 1936, + 1979, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, + 1947, 1948, 1949, 1950, 3469, 1575, 2555, 3657, 97, 3392, + 678, 678, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1390, + 1389, 1391, 1392, 1927, 2042, 3376, 103, 3375, 1532, 3286, + 1937, 3619, 1565, 105, 1361, 1565, 1565, 104, 1956, 1956, + 1365, 1959, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1367, + 2555, 3557, 2074, 2555, 3537, 1406, 1365, 2555, 3533, 1362, + 2089, 1363, 1364, 1365, 2149, 2150, 3284, 103, 2754, 112, + 2038, 3233, 1976, 3520, 1565, 1889, 1890, 2103, 104, 1531, + 111, 1530, 110, 1529, 1365, 3166, 1533, 3151, 1381, 2036, + 1930, 1906, 1565, 2551, 1566, 2110, 3205, 3484, 2086, 2047, + 3000, 1365, 87, 200, 2996, 87, 3400, 1565, 105, 678, + 2462, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1390, 1389, + 1391, 1392, 2993, 2450, 1935, 1365, 2555, 3388, 2133, 3205, + 1565, 3487, 200, 1565, 3423, 678, 2928, 2128, 2927, 2129, + 3640, 1565, 2555, 3203, 3422, 200, 2638, 3574, 1565, 678, + 1565, 1962, 2089, 200, 2625, 200, 1365, 200, 200, 1528, + 1365, 2303, 1969, 1971, 1365, 2088, 2416, 2111, 3572, 1565, + 2281, 1565, 678, 2047, 2302, 1362, 2077, 1363, 1364, 3124, + 1565, 2091, 2092, 2195, 2139, 1986, 1987, 1988, 1989, 2123, + 2086, 1362, 2122, 1363, 1364, 1365, 2471, 1565, 1362, 2000, + 1363, 1364, 112, 2918, 2917, 3380, 106, 2167, 105, 3570, + 1565, 2915, 2916, 111, 2087, 110, 107, 1885, 1365, 1362, + 1848, 1363, 1364, 1788, 105, 2913, 2914, 106, 1780, 2458, + 1770, 678, 2242, 2913, 2912, 2132, 1362, 107, 1363, 1364, + 3446, 1565, 3379, 2090, 3444, 1565, 2093, 2094, 3441, 1565, + 2579, 1565, 2600, 2204, 2205, 2206, 2207, 2088, 678, 1766, + 1362, 1762, 1363, 1364, 678, 2392, 2687, 1565, 2199, 1761, + 2200, 2201, 2202, 2203, 2189, 1760, 2190, 1668, 2668, 3427, + 1565, 2171, 930, 1565, 3213, 2109, 2210, 2211, 2212, 2213, + 2121, 1362, 1576, 1363, 1364, 1362, 1156, 1363, 1364, 1362, + 2131, 1363, 1364, 1565, 2665, 2270, 2154, 2661, 2662, 2193, + 2134, 678, 2643, 1365, 2224, 2601, 678, 2571, 1365, 2194, + 678, 678, 2555, 2554, 2850, 2603, 2152, 2416, 1565, 2420, + 1362, 2578, 1363, 1364, 963, 3119, 2230, 2177, 964, 2176, + 2175, 1961, 1565, 2600, 2880, 2192, 2191, 1381, 1365, 111, + 1377, 2571, 1378, 1362, 2392, 1363, 1364, 3119, 200, 1668, + 1667, 2282, 2267, 2240, 1361, 200, 1379, 1393, 1394, 1376, + 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1390, 1389, 1391, + 1392, 1609, 1608, 3121, 3600, 2893, 2579, 3525, 2225, 2579, + 3498, 200, 200, 2221, 2555, 200, 1365, 200, 1565, 2579, + 2239, 3080, 2419, 200, 2275, 2243, 2601, 2278, 2251, 2279, + 2214, 2216, 2217, 200, 2915, 2295, 2392, 2823, 1361, 2281, + 200, 1019, 2940, 3119, 2277, 2225, 2274, 2178, 2273, 1020, + 2894, 1365, 3095, 1565, 2416, 2471, 1381, 1365, 2405, 1706, + 2296, 3540, 2299, 2447, 2446, 2281, 2300, 2301, 1362, 200, + 1363, 1364, 2264, 1362, 2896, 1363, 1364, 3170, 678, 1382, + 1383, 1384, 1385, 1386, 1387, 1388, 1390, 1389, 1391, 1392, + 2413, 2147, 2891, 1569, 1381, 2112, 1961, 1907, 1891, 1828, + 2412, 2306, 1596, 1362, 1002, 1363, 1364, 125, 1001, 2907, + 2908, 3411, 1365, 1572, 3377, 3298, 2892, 1382, 1383, 1384, + 1385, 1386, 1387, 1388, 1390, 1389, 1391, 1392, 3171, 3172, + 3173, 3186, 2989, 3183, 2376, 2377, 3633, 3164, 3043, 2379, + 3412, 3088, 1565, 2409, 1408, 3042, 2089, 2414, 2380, 2898, + 2417, 1362, 2418, 1363, 1364, 1670, 1365, 2425, 1929, 2223, + 2985, 2427, 2428, 2429, 2402, 2942, 2404, 2938, 2669, 2220, + 2215, 2435, 2436, 2437, 2438, 2439, 2440, 2441, 2442, 2443, + 2444, 2366, 2372, 1365, 2410, 97, 1362, 2209, 1363, 1364, + 2208, 1795, 1362, 1365, 1363, 1364, 3085, 1565, 1701, 1697, + 1664, 126, 1365, 2635, 1094, 2403, 2238, 2451, 2452, 2453, + 2454, 2455, 3174, 2457, 1365, 3131, 3132, 2459, 2906, 2126, + 1365, 2464, 2465, 3652, 2466, 1365, 3650, 2469, 3626, 2470, + 2909, 2408, 2382, 2473, 1365, 2430, 2634, 2477, 1365, 3506, + 3418, 2482, 2483, 2484, 2485, 1365, 2390, 1362, 3432, 1363, + 1364, 2088, 2445, 3134, 2496, 1887, 2499, 2500, 2934, 3175, + 3176, 3177, 1365, 1741, 2502, 2504, 1930, 3083, 1565, 1365, + 2933, 2507, 2508, 2509, 2510, 2511, 2401, 3048, 1565, 3137, + 2932, 1365, 2518, 2519, 2635, 2520, 3031, 1565, 2523, 2525, + 2133, 1362, 2527, 1363, 1364, 200, 2850, 2648, 2526, 1565, + 2087, 1365, 2539, 200, 2524, 1565, 2367, 1573, 1958, 2422, + 3482, 3136, 1365, 678, 1742, 1743, 1744, 1888, 1362, 3384, + 1363, 1364, 2503, 1565, 678, 1365, 2869, 2872, 1362, 3139, + 1363, 1364, 2873, 2870, 3268, 2868, 3267, 1362, 2871, 1363, + 1364, 3502, 3413, 2138, 2538, 2130, 2486, 1565, 200, 1362, + 2895, 1363, 1364, 200, 3188, 1362, 3125, 1363, 1364, 2828, + 1362, 2827, 1363, 1364, 2456, 2478, 1565, 3466, 3277, 1362, + 3112, 1363, 1364, 1362, 2837, 1363, 1364, 3279, 3111, 3115, + 1362, 1365, 1363, 1364, 3266, 3090, 1956, 1365, 2540, 43, + 2556, 2541, 688, 2543, 1365, 2575, 3086, 1362, 2593, 1363, + 1364, 2595, 1827, 1365, 1362, 906, 1363, 1364, 2874, 3058, + 2588, 2589, 2911, 2840, 2842, 934, 1362, 1540, 1363, 1364, + 1365, 678, 2843, 935, 2594, 2618, 2639, 200, 1058, 2552, + 1057, 1365, 1984, 1328, 200, 1365, 1362, 1737, 1363, 1364, + 3009, 1539, 2565, 103, 2528, 2634, 1985, 1362, 678, 1363, + 1364, 2621, 2623, 2721, 104, 678, 1533, 2675, 2660, 3117, + 1362, 134, 1363, 1364, 678, 3054, 2548, 1365, 103, 2553, + 112, 3040, 2568, 105, 2614, 105, 2598, 613, 3039, 104, + 1408, 111, 3664, 110, 1738, 1739, 1740, 3036, 2149, 2150, + 1365, 2684, 105, 200, 200, 200, 200, 200, 1365, 909, + 2602, 2930, 1365, 940, 2522, 2605, 946, 946, 2637, 1365, + 2615, 2612, 2370, 2640, 2641, 2521, 1362, 2230, 1363, 1364, + 2630, 3579, 1362, 1365, 1363, 1364, 3483, 3407, 2626, 1362, + 2910, 1363, 1364, 2899, 2592, 2135, 2359, 2903, 1362, 2358, + 1363, 1364, 975, 3097, 2902, 2357, 2636, 1365, 2356, 200, + 200, 2517, 942, 943, 2355, 1362, 2644, 1363, 1364, 1365, + 2645, 2649, 2650, 2651, 1365, 2681, 1362, 2682, 1363, 1364, + 1362, 1365, 1363, 1364, 2516, 200, 2826, 2354, 2904, 1365, + 1689, 2411, 2515, 2900, 2825, 2396, 2514, 2353, 2901, 2343, + 2342, 3454, 2341, 2513, 2340, 1365, 678, 2339, 2670, 2671, + 2338, 2331, 1362, 2330, 1363, 1364, 2680, 2512, 2329, 2328, + 2327, 2756, 2757, 2758, 2759, 2760, 1365, 2584, 2587, 2588, + 2589, 2585, 2326, 2586, 2590, 1362, 2325, 1363, 1364, 110, + 2765, 2501, 111, 1362, 3453, 1363, 1364, 1362, 2731, 1363, + 1364, 1365, 3435, 678, 1362, 2705, 1363, 1364, 2495, 3285, + 3283, 2706, 3282, 3275, 3184, 2494, 1365, 2707, 1362, 3116, + 1363, 1364, 2746, 2493, 3114, 112, 2709, 2748, 2943, 2265, + 2761, 1684, 2713, 2710, 941, 112, 111, 2730, 110, 2492, + 2729, 678, 1362, 3274, 1363, 1364, 111, 2719, 3105, 678, + 2720, 2571, 3654, 3653, 1362, 3256, 1363, 1364, 2551, 1362, + 2491, 1363, 1364, 2768, 1365, 2448, 1362, 2124, 1363, 1364, + 1590, 1582, 116, 117, 1362, 3653, 1363, 1364, 3654, 3472, + 678, 2749, 2747, 2802, 3150, 2490, 2778, 2807, 2780, 932, + 1362, 2804, 1363, 1364, 200, 125, 1904, 3, 678, 10, + 2489, 1365, 99, 1, 2791, 2792, 2793, 2794, 1107, 1839, + 1331, 1362, 678, 1363, 1364, 1902, 1408, 2859, 9, 678, + 678, 1408, 200, 200, 200, 200, 200, 1365, 1330, 2770, + 1903, 1365, 2776, 8, 200, 2877, 1362, 2847, 1363, 1364, + 200, 3154, 200, 3589, 2167, 200, 200, 200, 2488, 636, + 2807, 1362, 2113, 1363, 1364, 1537, 2862, 3627, 3585, 3586, + 2856, 2803, 2879, 2805, 2077, 2830, 2077, 2806, 1781, 921, + 2831, 1771, 2167, 2167, 2167, 2167, 2167, 3216, 2786, 2787, + 2788, 2789, 2790, 2048, 3408, 2487, 2946, 2271, 2818, 3182, + 2228, 200, 2167, 1010, 159, 2167, 2187, 2188, 3553, 1362, + 120, 1363, 1364, 2853, 678, 967, 2829, 1408, 2853, 2832, + 119, 2481, 678, 1013, 1126, 2480, 2266, 200, 2881, 2844, + 2845, 2882, 2966, 2822, 3206, 2619, 2196, 922, 1615, 923, + 1613, 200, 2864, 2865, 2863, 2867, 1362, 2866, 1363, 1364, + 2875, 1365, 1614, 1612, 1617, 1616, 3017, 106, 2883, 2819, + 2820, 2821, 1838, 2449, 3059, 200, 1895, 107, 200, 2889, + 674, 2591, 1362, 2861, 1363, 1364, 1362, 3011, 1363, 1364, + 1365, 2923, 2924, 2920, 668, 2922, 2921, 197, 1604, 1583, + 1365, 3072, 1052, 626, 2919, 2304, 632, 3028, 3029, 3030, + 1365, 3032, 3034, 2974, 2945, 1413, 1886, 1365, 2824, 2606, + 961, 1365, 953, 2125, 2542, 3041, 960, 2965, 2944, 2980, + 3045, 3046, 3047, 3049, 3050, 3051, 3052, 2230, 3385, 3053, + 2858, 3055, 3056, 3057, 3109, 2479, 3061, 3062, 3063, 3064, + 3065, 3066, 3067, 3068, 3069, 3070, 2836, 2838, 678, 2973, + 2558, 2997, 2998, 2999, 3077, 3001, 3002, 3081, 3005, 3082, + 3084, 3004, 3087, 3089, 2476, 3091, 3092, 3093, 3094, 3013, + 3007, 3008, 3012, 3100, 2475, 3019, 3020, 200, 3021, 2841, + 3022, 3023, 2834, 3025, 2474, 3027, 1362, 1365, 1363, 1364, + 3074, 2472, 3465, 3276, 3538, 2468, 2616, 3078, 1098, 1579, + 1104, 3079, 2421, 1106, 1108, 1973, 1403, 2164, 3122, 3123, + 3251, 1922, 3127, 697, 696, 1362, 694, 1363, 1364, 1365, + 2544, 2572, 1368, 844, 2532, 1362, 1365, 1363, 1364, 1591, + 2583, 2581, 2580, 200, 2368, 1362, 2172, 1363, 1364, 1365, + 3133, 3129, 1362, 1365, 1363, 1364, 1362, 3581, 1363, 1364, + 2166, 2162, 1366, 2550, 795, 3103, 794, 706, 3098, 3099, + 3101, 698, 200, 690, 3106, 793, 792, 3147, 1337, 2972, + 3565, 2467, 2690, 2986, 3113, 2692, 2617, 2982, 1345, 1555, + 684, 1421, 200, 2167, 3118, 200, 200, 200, 3128, 981, + 3014, 3489, 2395, 3037, 3138, 678, 678, 3135, 1554, 2003, + 2004, 3496, 2954, 2463, 3140, 3189, 3190, 3142, 3143, 3141, + 2461, 3200, 2935, 2666, 2258, 72, 3148, 47, 3204, 3460, + 2974, 3149, 1362, 2426, 1363, 1364, 3526, 2415, 791, 788, + 3210, 3211, 3253, 3165, 3254, 3167, 3255, 2798, 2799, 3509, + 3510, 787, 678, 678, 678, 678, 3511, 2031, 1341, 1338, + 3159, 3160, 3602, 1897, 1362, 98, 1363, 1364, 38, 37, + 36, 1362, 35, 1363, 1364, 3223, 2973, 34, 3227, 28, + 27, 26, 25, 24, 1362, 21, 1363, 1364, 1362, 20, + 1363, 1364, 2584, 2587, 2588, 2589, 2585, 31, 2586, 2590, + 23, 22, 3131, 3132, 19, 3238, 1563, 1559, 18, 3212, + 2957, 3622, 3663, 3193, 1563, 1559, 128, 3197, 3198, 3199, + 3242, 1560, 56, 53, 3232, 51, 136, 135, 54, 1560, + 50, 1097, 3250, 48, 33, 32, 17, 16, 15, 14, + 3257, 13, 12, 11, 7, 6, 1665, 1666, 1562, 41, + 1561, 3228, 40, 30, 1556, 1557, 1562, 39, 1561, 29, + 4, 2653, 2260, 200, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1408, 0, 0, 3271, 3240, 678, 0, 678, + 3249, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1958, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1581, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2856, 0, 3272, + 0, 2856, 3294, 3296, 3281, 3280, 43, 0, 0, 0, + 3288, 0, 3292, 0, 0, 3290, 0, 1593, 0, 678, + 0, 855, 0, 1671, 89, 0, 0, 0, 0, 3386, + 0, 3399, 200, 0, 0, 678, 1610, 0, 3304, 2853, + 3406, 0, 0, 0, 0, 0, 3301, 3302, 678, 0, + 0, 1956, 0, 3300, 0, 0, 0, 0, 0, 0, + 3416, 3417, 0, 3419, 0, 3420, 3421, 3382, 3390, 3383, + 3424, 3425, 3426, 3398, 3428, 3431, 3381, 0, 0, 0, + 0, 0, 1958, 3403, 0, 3402, 3410, 0, 0, 0, + 3440, 3442, 3443, 3445, 3447, 3448, 3450, 0, 678, 0, + 0, 0, 678, 678, 0, 0, 0, 0, 3430, 919, + 3429, 89, 0, 0, 0, 0, 0, 0, 0, 0, + 1751, 3393, 3394, 3395, 0, 0, 3434, 0, 0, 0, + 919, 678, 3436, 0, 3480, 0, 3439, 0, 0, 0, + 0, 3476, 0, 0, 3458, 0, 0, 0, 980, 3455, + 3456, 0, 0, 3475, 0, 1796, 1849, 0, 3457, 0, + 1956, 0, 3433, 0, 0, 0, 0, 2856, 3473, 0, + 0, 0, 0, 0, 0, 0, 3479, 3464, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1856, 0, 0, 0, 0, 0, 0, + 1860, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 678, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 0, 0, + 3481, 0, 0, 0, 0, 0, 200, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 678, 200, 0, 0, 0, 0, + 0, 0, 0, 0, 3500, 0, 0, 0, 0, 0, + 3505, 0, 0, 0, 0, 3488, 0, 3492, 0, 0, + 3495, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3521, 0, 0, 0, 0, 0, 3522, 3523, 0, 0, + 43, 0, 0, 0, 0, 678, 3497, 0, 0, 0, + 0, 0, 0, 0, 0, 1408, 0, 678, 3534, 3515, + 0, 0, 3516, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3524, 0, 3504, + 0, 678, 678, 0, 3559, 3560, 3536, 3514, 0, 0, + 3531, 0, 3541, 0, 0, 0, 3566, 0, 3569, 3571, + 3573, 3567, 3552, 678, 3544, 3549, 0, 3546, 3545, 3543, + 3548, 0, 3547, 0, 0, 0, 43, 200, 678, 3410, + 3554, 0, 3539, 3601, 0, 0, 0, 0, 3577, 0, + 0, 0, 0, 0, 0, 0, 3598, 3588, 3593, 3580, + 0, 0, 2853, 0, 0, 0, 0, 3566, 0, 0, + 3607, 0, 3567, 3605, 1917, 1918, 1919, 1920, 0, 0, + 0, 678, 3618, 0, 1910, 0, 0, 0, 0, 0, + 0, 0, 0, 3616, 0, 0, 0, 3621, 0, 0, + 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, + 0, 0, 3636, 3634, 3639, 3641, 3643, 0, 0, 1416, + 678, 0, 678, 1964, 1965, 0, 1958, 0, 1967, 0, + 946, 946, 1972, 3647, 3651, 3649, 1977, 3645, 3644, 0, + 0, 0, 0, 3566, 0, 3662, 3659, 0, 3567, 1990, + 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 3673, + 3671, 3674, 3675, 2025, 2026, 2027, 2028, 2029, 2030, 2032, + 3665, 2037, 0, 2039, 2040, 2041, 0, 2043, 2044, 2045, + 1958, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, + 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, + 2070, 2071, 2072, 2073, 1956, 2075, 3648, 2082, 2083, 946, + 3681, 946, 946, 946, 946, 946, 3430, 3682, 3683, 0, + 0, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 0, + 2104, 2105, 2106, 2107, 2108, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1956, 0, + 3680, 0, 0, 0, 0, 0, 0, 0, 946, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2145, 2146, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2184, 0, 0, 0, + 2151, 0, 0, 0, 0, 0, 0, 0, 2155, 0, + 2158, 0, 0, 1910, 0, 0, 0, 0, 0, 0, + 1632, 0, 0, 0, 0, 0, 0, 0, 0, 1165, + 0, 1165, 1165, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2226, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 919, + 1405, 1410, 1411, 0, 1414, 0, 1415, 1417, 1418, 1419, + 0, 1422, 1423, 1425, 1425, 0, 1425, 1429, 1429, 1431, + 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, + 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, - 1472, 1473, 1474, 1475, 1476, 1477, 1479, 1480, 1481, 1482, - 1483, 1484, 1485, 1486, 1487, 1488, 1506, 1507, 1508, 1509, - 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3465, 0, 0, 0, 676, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, - 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 796, 3476, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2589, 0, 0, 0, 0, 1165, - 1165, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1889, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3510, 0, 0, 0, 0, 89, 0, - 0, 0, 0, 0, 0, 198, 0, 856, 613, 0, - 0, 0, 857, 0, 0, 0, 676, 0, 0, 0, - 0, 0, 1948, 0, 0, 0, 0, 0, 0, 0, - 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1943, 0, 0, 676, 0, 927, 0, 0, 0, 0, - 676, 0, 0, 0, 1707, 1707, 0, 0, 0, 676, - 0, 1959, 946, 946, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 613, 0, 1405, 2662, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1992, 1993, 3592, 863, 864, 865, 866, 867, - 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, - 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, - 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, - 898, 899, 900, 901, 902, 903, 904, 0, 0, 0, - 0, 0, 1165, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2118, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2128, 0, 0, - 0, 0, 0, 0, 0, 0, 676, 0, 0, 0, - 0, 1585, 0, 0, 1165, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 970, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 676, 0, 0, 0, 0, 0, - 0, 0, 676, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 978, 0, 0, 0, 0, 0, 0, - 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 676, 0, 0, 0, 1405, - 970, 0, 676, 676, 1405, 0, 978, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 970, 0, 0, 0, 0, 1943, 0, - 0, 0, 1943, 1943, 0, 2903, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 676, 0, 0, - 1405, 0, 0, 0, 0, 676, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2985, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2363, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 613, 676, - 613, 0, 0, 613, 613, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1165, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 613, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1407, 0, 0, 0, - 0, 0, 3128, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 676, 676, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 676, 676, 676, 676, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2524, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2539, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1407, 0, + 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, + 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, + 1492, 1493, 1494, 1495, 1620, 0, 0, 0, 1496, 0, + 1498, 1499, 1500, 1501, 1502, 0, 0, 0, 0, 0, + 0, 0, 0, 1429, 1429, 1429, 1429, 1429, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1508, 1509, 1510, + 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, + 1521, 0, 0, 1910, 0, 0, 0, 0, 0, 0, + 2315, 0, 0, 0, 0, 0, 0, 0, 1535, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2364, 2365, 0, 1633, + 2369, 0, 0, 0, 0, 0, 0, 0, 2373, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2375, 0, + 0, 0, 0, 0, 0, 2378, 0, 0, 0, 0, + 0, 1541, 0, 0, 0, 0, 0, 919, 0, 0, + 0, 919, 0, 0, 0, 0, 919, 0, 0, 0, + 0, 0, 0, 0, 2381, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1646, 1649, 1650, 1651, 1652, + 1653, 1654, 0, 1655, 1656, 1658, 1659, 1657, 1660, 1661, + 1634, 1635, 1636, 1637, 1618, 1619, 1647, 0, 1621, 0, + 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 839, + 0, 1631, 1638, 1639, 1640, 1641, 0, 1642, 1643, 1644, + 1645, 0, 0, 0, 0, 0, 0, 0, 2424, 0, + 0, 0, 195, 0, 0, 0, 0, 0, 0, 2431, + 2432, 2433, 2434, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 134, 0, 156, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, + 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, + 677, 0, 0, 0, 1421, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 167, 0, 0, 0, 0, 0, 155, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 174, 0, 0, 175, 0, + 0, 0, 0, 677, 0, 0, 677, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 143, 144, 166, + 165, 194, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1648, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1165, 0, 0, 0, 0, 195, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2659, 0, + 1581, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 134, 0, 156, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2597, 0, + 160, 141, 163, 148, 140, 167, 161, 162, 0, 0, + 0, 155, 0, 0, 178, 0, 0, 0, 0, 0, + 0, 0, 0, 184, 149, 0, 0, 0, 0, 0, + 174, 0, 0, 175, 0, 0, 0, 0, 152, 150, + 145, 146, 147, 151, 0, 0, 0, 0, 0, 0, + 142, 0, 1692, 1693, 166, 165, 194, 0, 0, 153, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2646, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1165, 1165, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 89, 0, 0, 89, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2695, 2696, + 2697, 2698, 2699, 0, 0, 0, 0, 0, 0, 0, + 0, 169, 0, 0, 0, 160, 1694, 163, 0, 1691, + 0, 161, 162, 0, 0, 0, 0, 0, 0, 178, + 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1910, 2714, 0, 0, 0, 0, + 2726, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 946, + 2722, 0, 2750, 2751, 0, 0, 2753, 0, 0, 2755, + 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2762, + 2763, 2764, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2769, 0, 0, 2771, 2772, 2773, 0, 0, 0, + 2774, 2775, 0, 0, 2051, 2777, 0, 0, 2779, 0, + 0, 2781, 2782, 2783, 2784, 0, 0, 0, 0, 2785, + 2051, 2051, 2051, 2051, 2051, 0, 0, 0, 157, 0, + 0, 158, 0, 0, 0, 0, 169, 0, 946, 0, + 0, 0, 0, 3620, 0, 2808, 2809, 2810, 2811, 2812, + 2813, 0, 0, 1632, 2814, 2815, 0, 2816, 0, 2817, + 0, 170, 0, 0, 0, 0, 0, 0, 182, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2848, 0, 2165, 0, 0, 190, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 164, 0, 0, 0, 0, 0, 0, 2878, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 677, 1324, 677, + 677, 0, 0, 0, 171, 176, 173, 179, 180, 181, + 183, 185, 186, 187, 188, 0, 0, 0, 0, 677, + 189, 191, 192, 193, 0, 0, 0, 0, 0, 0, + 980, 0, 0, 157, 0, 0, 158, 0, 195, 0, + 2941, 0, 0, 0, 0, 0, 0, 1620, 1407, 1688, + 0, 0, 0, 0, 0, 0, 2931, 0, 0, 0, + 0, 0, 134, 980, 156, 0, 170, 0, 0, 0, + 0, 0, 0, 182, 0, 177, 0, 0, 0, 0, + 0, 0, 2969, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2981, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 167, 0, 0, 0, + 0, 0, 155, 0, 190, 0, 0, 0, 0, 0, + 3003, 0, 0, 3006, 0, 0, 0, 0, 0, 0, + 0, 174, 1633, 0, 175, 0, 0, 3035, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3044, 0, 1692, 1693, 166, 165, 194, 0, 171, + 176, 173, 179, 180, 181, 183, 185, 186, 187, 188, + 0, 0, 0, 0, 0, 189, 191, 192, 193, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1407, 0, 0, 0, 0, 0, 0, 0, 1646, 1649, + 1650, 1651, 1652, 1653, 1654, 0, 1655, 1656, 1658, 1659, + 1657, 1660, 1661, 1634, 1635, 1636, 1637, 1618, 1619, 1647, + 0, 1621, 0, 1622, 1623, 1624, 1625, 1626, 1627, 1628, + 1629, 1630, 3102, 0, 1631, 1638, 1639, 1640, 1641, 0, + 1642, 1643, 1644, 1645, 0, 0, 0, 0, 0, 0, + 0, 677, 677, 0, 0, 0, 160, 1694, 163, 0, + 1691, 0, 161, 162, 0, 0, 0, 0, 0, 0, + 178, 0, 0, 0, 0, 0, 0, 0, 0, 184, + 0, 0, 0, 2397, 0, 0, 677, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1663, 0, 0, 0, 0, 3163, 0, 0, + 0, 3185, 2407, 1674, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3178, 0, 0, + 3179, 3180, 3181, 0, 0, 0, 677, 0, 1700, 0, + 0, 0, 0, 0, 3209, 0, 1709, 0, 0, 1407, + 1711, 0, 0, 1714, 1715, 677, 677, 0, 677, 0, + 677, 677, 0, 677, 677, 677, 677, 677, 677, 0, + 0, 0, 0, 0, 0, 0, 1407, 1746, 1747, 1407, + 677, 1407, 1648, 1752, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, + 0, 0, 796, 0, 3229, 0, 3230, 0, 0, 3231, + 0, 0, 3234, 3235, 0, 677, 0, 0, 0, 0, + 0, 3239, 0, 0, 0, 0, 0, 0, 0, 0, + 1831, 3241, 0, 677, 0, 0, 0, 0, 2505, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3258, 0, 0, 3259, 0, 3260, 3261, + 0, 3262, 0, 3263, 0, 0, 0, 0, 3264, 0, + 2537, 0, 0, 676, 0, 0, 0, 0, 0, 0, + 677, 0, 0, 164, 0, 0, 0, 919, 0, 0, + 0, 0, 0, 3289, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3297, 0, 0, 3299, 2576, 2577, + 0, 0, 0, 0, 0, 0, 0, 2165, 0, 3303, + 919, 2596, 0, 0, 0, 0, 971, 0, 0, 979, + 0, 88, 45, 46, 90, 0, 0, 3378, 0, 0, + 0, 0, 0, 0, 157, 0, 0, 158, 0, 0, + 0, 94, 0, 0, 0, 49, 79, 80, 0, 77, + 81, 0, 0, 0, 0, 0, 0, 0, 78, 0, + 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, + 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, + 0, 0, 0, 0, 2673, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3463, 0, 0, + 0, 0, 0, 0, 677, 677, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 677, 0, 0, + 171, 176, 173, 179, 180, 181, 183, 185, 186, 187, + 188, 0, 0, 0, 0, 0, 189, 191, 192, 193, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1407, 0, 0, 0, 0, + 0, 0, 0, 0, 1966, 0, 677, 52, 55, 58, + 57, 60, 1407, 76, 0, 0, 85, 63, 82, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 61, 0, 0, 0, 0, 677, 677, 0, + 0, 64, 93, 92, 0, 0, 74, 75, 59, 0, + 0, 3503, 0, 0, 83, 84, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3501, 0, 0, 0, 3517, 0, 0, 3518, 0, 3519, + 0, 0, 0, 0, 0, 0, 0, 677, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 66, 67, 0, 68, 69, 70, 71, 0, 0, 0, + 2795, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 677, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 677, 2165, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3599, 0, 0, 677, 0, 0, 677, + 0, 0, 0, 0, 0, 0, 2857, 0, 89, 0, + 0, 2165, 2165, 2165, 2165, 2165, 0, 0, 0, 677, + 0, 0, 0, 3613, 0, 3614, 0, 3615, 0, 0, + 0, 2165, 0, 0, 2165, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 677, 0, + 0, 0, 0, 0, 0, 2248, 2249, 2250, 0, 0, + 0, 0, 0, 3660, 0, 3661, 0, 0, 2963, 0, + 0, 0, 0, 0, 0, 677, 0, 0, 2971, 0, + 0, 677, 1709, 0, 0, 1709, 0, 1709, 0, 0, + 0, 0, 0, 2280, 0, 0, 96, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1167, 0, 1167, 1167, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 677, 0, + 0, 0, 1336, 677, 0, 0, 0, 677, 677, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 797, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 73, 0, 0, 0, 62, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 198, 0, 0, 614, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, + 928, 0, 2165, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3146, 0, 947, 947, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 97, 0, 0, 857, 0, 0, + 0, 845, 858, 859, 860, 861, 846, 0, 0, 847, + 848, 1407, 849, 677, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 854, 862, 863, 0, + 0, 0, 0, 0, 1544, 1545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1587, + 0, 0, 0, 2975, 2976, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1605, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, + 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, + 899, 900, 901, 902, 903, 904, 905, 0, 0, 971, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1717, 1717, + 0, 1717, 0, 1717, 1717, 0, 1726, 1717, 1717, 1717, + 1717, 1717, 0, 0, 0, 0, 0, 0, 3265, 2977, + 3269, 3270, 0, 971, 0, 0, 0, 0, 0, 0, + 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 677, 0, 2857, 0, 89, 0, 2857, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1794, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1835, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 927, 0, 2621, 0, 0, 0, - 0, 1405, 0, 0, 0, 0, 676, 0, 676, 0, - 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, - 0, 0, 0, 2128, 0, 0, 0, 0, 0, 0, - 2646, 0, 0, 0, 0, 0, 613, 0, 0, 2651, + 2978, 2979, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3391, 0, 0, 0, 0, 0, + 0, 0, 0, 1167, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 676, 0, + 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, + 0, 0, 677, 0, 0, 0, 1709, 1709, 0, 0, + 0, 677, 0, 0, 0, 0, 0, 0, 0, 811, + 0, 0, 815, 0, 812, 813, 0, 1407, 2683, 814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 676, 0, 0, 1407, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 676, 0, 0, + 0, 0, 0, 2857, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1431, 1432, 1433, + 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, + 1444, 1445, 1446, 1450, 1451, 1452, 1453, 1454, 1455, 1456, + 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, + 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, + 1477, 1478, 1479, 1481, 1482, 1483, 1484, 1485, 1486, 1487, + 1488, 1489, 1490, 1508, 1509, 1510, 1511, 1512, 1513, 1514, + 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1167, 1167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1407, 0, 0, 1407, 0, 1407, - 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1898, 3490, 0, 677, 614, 0, 614, 0, 0, 614, + 614, 0, 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1766, 0, 0, 0, 0, 0, 0, 676, 0, 0, - 0, 676, 676, 0, 0, 613, 0, 0, 0, 1943, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1828, 0, 0, 0, 0, 0, 0, 0, - 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 613, 0, 0, 0, 0, 0, 0, 613, - 0, 0, 0, 0, 0, 0, 1943, 0, 1860, 1861, - 613, 613, 613, 613, 613, 613, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 677, 0, 0, 0, 0, 0, 0, 0, 1952, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2773, 0, 0, 0, 0, 0, - 0, 0, 1165, 0, 0, 0, 0, 0, 0, 676, + 0, 0, 0, 0, 614, 0, 0, 0, 0, 1968, + 0, 0, 0, 0, 0, 0, 0, 0, 677, 0, + 3535, 0, 0, 0, 0, 89, 677, 0, 0, 0, + 0, 0, 1409, 0, 0, 0, 0, 0, 0, 0, + 2001, 2002, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 677, + 1167, 0, 0, 1407, 0, 0, 677, 677, 1407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1715, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 676, 0, 0, 0, 0, 0, 0, - 0, 2810, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1165, 0, 0, 0, 0, - 0, 0, 2837, 1715, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 676, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1405, 0, 676, 0, 0, 0, + 0, 3617, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2926, + 0, 0, 0, 0, 0, 2137, 0, 0, 0, 0, + 0, 0, 0, 0, 1409, 0, 0, 0, 0, 1587, + 0, 677, 1167, 0, 1407, 0, 0, 0, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 676, 676, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 971, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 676, 0, 0, 0, 0, 970, 0, 0, - 0, 0, 0, 613, 0, 2128, 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3010, 0, 0, 0, 0, + 928, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 979, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 971, 0, + 0, 0, 614, 0, 979, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1407, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 676, 0, 946, 946, 0, 0, 0, 1407, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 676, - 0, 676, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 971, 0, 1409, 0, 0, 1952, 0, 0, 0, + 1952, 1952, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1409, 0, 0, 1409, 0, 1409, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3048, + 0, 0, 0, 0, 0, 0, 1768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 614, 0, 0, 0, 0, 0, 0, 3153, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1837, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 946, 1828, 946, 946, 946, 946, 946, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, + 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, + 0, 0, 677, 677, 0, 1869, 1870, 614, 614, 614, + 614, 614, 614, 614, 97, 0, 0, 857, 0, 0, + 0, 845, 858, 859, 860, 861, 846, 0, 2384, 847, + 848, 0, 849, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 854, 862, 863, 677, + 677, 677, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1766, 0, 0, + 0, 0, 0, 2975, 2976, 0, 1167, 0, 0, 0, + 0, 0, 0, 0, 0, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, + 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, + 899, 900, 901, 902, 903, 904, 905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 946, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 927, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, - 0, 0, 0, 0, 0, 0, 1828, 613, 0, 613, - 0, 613, 2165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2128, 2128, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3297, - 3299, 3298, 3316, 3317, 3318, 3319, 3320, 3321, 3322, 744, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1407, + 0, 0, 0, 0, 677, 0, 677, 0, 0, 2977, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3192, 3193, 3194, 3195, 0, 0, 0, + 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 677, 2545, 0, 0, 0, 0, 0, 1409, + 2978, 2979, 0, 0, 2560, 677, 0, 0, 0, 0, + 0, 947, 947, 0, 0, 0, 1409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 677, 0, 0, 0, 677, + 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 677, 0, + 947, 1837, 947, 947, 947, 947, 947, 0, 0, 0, + 0, 2642, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2137, 0, + 0, 0, 0, 0, 1768, 2667, 0, 0, 0, 0, + 0, 0, 0, 0, 2672, 0, 0, 0, 0, 947, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 928, 0, 0, 0, 677, 0, 0, + 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, + 0, 0, 0, 1837, 614, 0, 614, 0, 614, 2174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 677, 0, 0, 0, 0, 0, 3322, 3324, 3323, + 3341, 3342, 3343, 3344, 3345, 3346, 3347, 745, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 613, 0, 0, 0, 3268, 0, 3270, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 613, 613, - 0, 0, 613, 0, 2350, 0, 0, 0, 0, 0, - 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 613, 0, 0, 0, 0, 0, 0, 613, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2128, 0, - 0, 0, 0, 0, 0, 0, 0, 3303, 0, 0, - 0, 0, 0, 0, 3376, 0, 613, 0, 0, 0, - 0, 0, 3311, 3312, 0, 0, 0, 1165, 0, 0, + 0, 0, 677, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1407, 0, 677, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1952, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 677, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1952, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3426, 0, 0, - 0, 3426, 3426, 0, 0, 0, 0, 0, 0, 0, - 0, 1407, 810, 1828, 723, 814, 725, 811, 812, 0, - 721, 724, 813, 0, 0, 0, 0, 0, 0, 0, - 2128, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 742, 743, - 3296, 3300, 3301, 3302, 3313, 3314, 3315, 3323, 3325, 775, - 3324, 3326, 3327, 3328, 3331, 3332, 3333, 3334, 3329, 3330, - 3335, 3280, 3284, 3281, 3282, 3283, 3295, 3285, 3286, 3287, - 3288, 3289, 3290, 3291, 3292, 3293, 3294, 3336, 3337, 3338, - 3339, 3340, 3341, 3306, 3310, 3309, 3307, 3308, 3304, 3305, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2128, - 0, 0, 815, 0, 816, 0, 0, 820, 0, 0, - 0, 822, 821, 0, 823, 789, 788, 0, 0, 817, - 818, 0, 819, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, - 1766, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2796, 0, 0, 0, 0, 0, 0, 677, 1167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3503, 0, 0, 3342, 3343, 3344, - 3345, 3346, 3347, 3348, 3349, 0, 3507, 0, 0, 0, - 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, - 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1165, 1165, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, + 677, 0, 0, 857, 0, 2081, 614, 0, 858, 0, + 1717, 0, 0, 0, 0, 0, 0, 677, 1957, 677, + 0, 0, 0, 0, 0, 0, 0, 0, 2833, 0, + 0, 0, 614, 614, 0, 0, 614, 0, 2371, 0, + 0, 0, 1167, 0, 614, 0, 0, 0, 0, 2860, + 1717, 0, 0, 0, 614, 0, 3328, 0, 0, 0, + 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3336, 3337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3550, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3558, 0, 0, + 614, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, + 903, 904, 905, 0, 971, 0, 0, 0, 0, 0, + 0, 811, 2137, 724, 815, 726, 812, 813, 0, 722, + 725, 814, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1409, 0, 1837, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 743, 744, 3321, + 3325, 3326, 3327, 3338, 3339, 3340, 3348, 3350, 776, 3349, + 3351, 3352, 3353, 3356, 3357, 3358, 3359, 3354, 3355, 3360, + 3305, 3309, 3306, 3307, 3308, 3320, 3310, 3311, 3312, 3313, + 3314, 3315, 3316, 3317, 3318, 3319, 3361, 3362, 3363, 3364, + 3365, 3366, 3331, 3335, 3334, 3332, 3333, 3329, 3330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 816, 0, 817, 0, 0, 821, 0, 0, 0, + 823, 822, 0, 824, 790, 789, 0, 0, 818, 819, + 0, 820, 0, 0, 0, 0, 0, 0, 3073, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, - 0, 2631, 0, 0, 0, 0, 0, 0, 0, 0, - 3503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2128, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1407, 0, 3048, - 0, 3558, 0, 0, 0, 0, 0, 0, 0, 0, - 613, 613, 613, 613, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, + 0, 0, 0, 0, 1768, 0, 3367, 3368, 3369, 3370, + 3371, 3372, 3373, 3374, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 613, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, + 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 946, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2137, 2137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 857, 0, 0, 0, 0, 858, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1957, 0, 614, 0, + 0, 0, 0, 0, 0, 2652, 0, 0, 0, 0, + 0, 0, 3217, 3218, 3219, 3220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1409, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 614, 614, 614, 614, 614, 864, + 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, + 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, + 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 614, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 614, 3293, 0, 3295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 946, 0, 0, 0, 0, 0, 0, + 947, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, + 0, 0, 0, 0, 0, 3401, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 947, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1407, 0, 0, 0, 0, 1407, 613, 613, 613, - 613, 613, 0, 0, 0, 0, 0, 0, 0, 2853, - 0, 0, 0, 0, 0, 1766, 0, 613, 0, 0, - 613, 2861, 1828, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3451, 0, + 0, 0, 3451, 3451, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2137, 0, 0, 0, 0, 0, 1409, 0, 0, + 0, 0, 1409, 614, 614, 614, 614, 614, 0, 0, + 0, 0, 0, 0, 0, 2876, 0, 0, 0, 0, + 0, 1768, 0, 614, 0, 0, 614, 2884, 1837, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1407, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 613, 0, - 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2137, 0, 614, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1409, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, + 0, 0, 0, 0, 2137, 0, 0, 0, 0, 0, + 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 614, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3528, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1167, 1167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3575, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2137, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, + 3073, 0, 3583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 614, 0, 0, 614, 614, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 613, 0, 0, 613, 613, - 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2525,1427 +2469,1157 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 392, 0, 0, 0, 1301, 1286, 513, + 0, 1229, 1304, 1198, 1217, 1314, 1220, 1223, 1265, 1177, + 1243, 411, 1214, 1170, 1202, 1172, 1209, 1173, 1200, 1231, + 269, 1197, 1288, 1247, 1303, 362, 266, 1179, 1203, 425, + 1219, 207, 1267, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 1310, 366, 1253, + 0, 492, 396, 0, 0, 0, 1233, 1292, 1241, 1279, + 1228, 1266, 1187, 1252, 1305, 1215, 1262, 1306, 321, 249, + 323, 206, 408, 493, 285, 0, 0, 1768, 0, 3555, + 667, 0, 0, 0, 0, 3556, 0, 0, 0, 0, + 239, 0, 0, 246, 0, 0, 614, 347, 356, 355, + 336, 337, 339, 341, 346, 353, 359, 1211, 1259, 1300, + 1212, 1261, 264, 319, 271, 263, 518, 1311, 1291, 1176, + 1240, 1299, 0, 0, 230, 1302, 1235, 0, 1264, 0, + 1317, 1171, 1255, 0, 1174, 1178, 1313, 1295, 1206, 274, + 0, 0, 0, 0, 0, 0, 0, 1232, 1242, 1276, + 1280, 1226, 0, 0, 0, 0, 1409, 0, 0, 1204, + 0, 1251, 0, 0, 0, 1183, 1175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1230, + 0, 0, 0, 0, 1186, 0, 1205, 1277, 1768, 1169, + 296, 1180, 397, 256, 1323, 0, 449, 1284, 1294, 1227, + 561, 1298, 1225, 1224, 1271, 1184, 1290, 1218, 361, 1182, + 328, 202, 226, 0, 1216, 407, 457, 469, 1289, 1201, + 1210, 254, 1208, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 1250, 1269, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 586, 227, 259, + 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, + 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, + 288, 452, 431, 432, 570, 581, 571, 214, 502, 533, + 240, 479, 0, 0, 588, 248, 499, 216, 530, 498, + 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, + 257, 410, 527, 528, 255, 589, 229, 555, 221, 1181, + 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, + 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, + 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, + 590, 235, 236, 238, 1196, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 443, 439, 448, 1285, 517, 536, + 548, 560, 566, 567, 569, 573, 574, 575, 576, 582, + 580, 577, 578, 579, 572, 402, 309, 490, 331, 369, + 1274, 1316, 420, 468, 241, 540, 491, 1319, 1320, 1321, + 1322, 1191, 1195, 1189, 1256, 1190, 1245, 1246, 1192, 1307, + 1308, 1309, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 0, 1278, 1185, 0, 1193, 1194, 1287, 1296, 1297, 609, + 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, + 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, + 291, 546, 307, 464, 463, 329, 330, 375, 446, 1249, + 201, 222, 364, 1312, 450, 287, 587, 551, 545, 208, + 224, 1188, 261, 1199, 1207, 0, 1213, 1221, 1222, 1234, + 1236, 1237, 1238, 1239, 1257, 1258, 1260, 1268, 1270, 1273, + 1275, 1282, 1293, 1315, 203, 204, 211, 223, 233, 237, + 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, + 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, + 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, + 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, + 312, 313, 584, 585, 298, 534, 565, 532, 583, 559, + 435, 374, 1248, 1318, 549, 1254, 377, 280, 303, 318, + 1263, 550, 497, 228, 462, 289, 252, 1281, 1283, 213, + 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, + 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, + 391, 265, 428, 1244, 1272, 372, 514, 515, 314, 392, + 0, 0, 0, 1301, 1286, 513, 0, 1229, 1304, 1198, + 1217, 1314, 1220, 1223, 1265, 1177, 1243, 411, 1214, 1170, + 1202, 1172, 1209, 1173, 1200, 1231, 269, 1197, 1288, 1247, + 1303, 362, 266, 1179, 1203, 425, 1219, 207, 1267, 482, + 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, + 423, 503, 417, 1310, 366, 1253, 0, 492, 396, 0, + 0, 0, 1233, 1292, 1241, 1279, 1228, 1266, 1187, 1252, + 1305, 1215, 1262, 1306, 321, 249, 323, 206, 408, 493, + 285, 0, 0, 0, 0, 0, 199, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, + 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, + 346, 353, 359, 1211, 1259, 1300, 1212, 1261, 264, 319, + 271, 263, 518, 1311, 1291, 1176, 1240, 1299, 0, 0, + 230, 1302, 1235, 0, 1264, 0, 1317, 1171, 1255, 0, + 1174, 1178, 1313, 1295, 1206, 274, 0, 0, 0, 0, + 0, 0, 0, 1232, 1242, 1276, 1280, 1226, 0, 0, + 0, 0, 0, 2885, 0, 1204, 0, 1251, 0, 0, + 0, 1183, 1175, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1230, 0, 0, 0, 0, + 1186, 0, 1205, 1277, 0, 1169, 296, 1180, 397, 256, + 1323, 0, 449, 1284, 1294, 1227, 561, 1298, 1225, 1224, + 1271, 1184, 1290, 1218, 361, 1182, 328, 202, 226, 0, + 1216, 407, 457, 469, 1289, 1201, 1210, 254, 1208, 467, + 421, 538, 234, 283, 454, 427, 465, 437, 286, 1250, + 1269, 466, 368, 523, 447, 535, 562, 563, 262, 401, + 547, 507, 556, 586, 227, 259, 415, 500, 541, 489, + 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, + 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, + 570, 581, 571, 214, 502, 533, 240, 479, 0, 0, + 588, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, + 255, 589, 229, 555, 221, 1181, 554, 403, 522, 531, + 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, + 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, + 542, 0, 210, 0, 494, 543, 590, 235, 236, 238, + 1196, 278, 282, 290, 293, 301, 302, 311, 363, 414, + 443, 439, 448, 1285, 517, 536, 548, 560, 566, 567, + 569, 573, 574, 575, 576, 582, 580, 577, 578, 579, + 572, 402, 309, 490, 331, 369, 1274, 1316, 420, 468, + 241, 540, 491, 1319, 1320, 1321, 1322, 1191, 1195, 1189, + 1256, 1190, 1245, 1246, 1192, 1307, 1308, 1309, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 0, 1278, 1185, 0, + 1193, 1194, 1287, 1296, 1297, 609, 380, 481, 537, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, + 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, + 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, + 463, 329, 330, 375, 446, 1249, 201, 222, 364, 1312, + 450, 287, 587, 551, 545, 208, 224, 1188, 261, 1199, + 1207, 0, 1213, 1221, 1222, 1234, 1236, 1237, 1238, 1239, + 1257, 1258, 1260, 1268, 1270, 1273, 1275, 1282, 1293, 1315, + 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, + 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, + 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, + 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, + 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, + 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, + 564, 476, 299, 300, 441, 442, 312, 313, 584, 585, + 298, 534, 565, 532, 583, 559, 435, 374, 1248, 1318, + 549, 1254, 377, 280, 303, 318, 1263, 550, 497, 228, + 462, 289, 252, 1281, 1283, 213, 247, 231, 258, 273, + 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, + 242, 480, 504, 505, 506, 508, 391, 265, 428, 1244, + 1272, 372, 514, 515, 314, 392, 0, 0, 0, 1301, + 1286, 513, 0, 1229, 1304, 1198, 1217, 1314, 1220, 1223, + 1265, 1177, 1243, 411, 1214, 1170, 1202, 1172, 1209, 1173, + 1200, 1231, 269, 1197, 1288, 1247, 1303, 362, 266, 1179, + 1203, 425, 1219, 207, 1267, 482, 253, 373, 370, 521, + 281, 272, 268, 251, 315, 381, 423, 503, 417, 1310, + 366, 1253, 0, 492, 396, 0, 0, 0, 1233, 1292, + 1241, 1279, 1228, 1266, 1187, 1252, 1305, 1215, 1262, 1306, + 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, + 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, + 356, 355, 336, 337, 339, 341, 346, 353, 359, 1211, + 1259, 1300, 1212, 1261, 264, 319, 271, 263, 518, 1311, + 1291, 1176, 1240, 1299, 0, 0, 230, 1302, 1235, 0, + 1264, 0, 1317, 1171, 1255, 0, 1174, 1178, 1313, 1295, + 1206, 274, 0, 0, 0, 0, 0, 0, 0, 1232, + 1242, 1276, 1280, 1226, 0, 0, 0, 0, 0, 2846, + 0, 1204, 0, 1251, 0, 0, 0, 1183, 1175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 392, 0, 0, 0, 1299, 1284, 513, - 0, 1227, 1302, 1196, 1215, 1312, 1218, 1221, 1263, 1175, - 1241, 411, 1212, 1168, 1200, 1170, 1207, 1171, 1198, 1229, - 269, 1195, 1286, 1245, 1301, 362, 266, 1177, 1201, 425, - 1217, 207, 1265, 482, 253, 373, 370, 521, 281, 272, - 268, 251, 315, 381, 423, 503, 417, 1308, 366, 1251, - 0, 492, 396, 0, 0, 0, 1231, 1290, 1239, 1277, - 1226, 1264, 1185, 1250, 1303, 1213, 1260, 1304, 321, 249, - 323, 206, 408, 493, 285, 0, 0, 1766, 0, 3530, - 666, 0, 0, 0, 0, 3531, 0, 0, 0, 0, - 239, 0, 0, 246, 0, 0, 613, 347, 356, 355, - 336, 337, 339, 341, 346, 353, 359, 1209, 1257, 1298, - 1210, 1259, 264, 319, 271, 263, 518, 1309, 1289, 1174, - 1238, 1297, 0, 0, 230, 1300, 1233, 0, 1262, 0, - 1315, 1169, 1253, 0, 1172, 1176, 1311, 1293, 1204, 274, - 0, 0, 0, 0, 0, 0, 0, 1230, 1240, 1274, - 1278, 1224, 0, 0, 0, 0, 1407, 0, 0, 1202, - 0, 1249, 0, 0, 0, 1181, 1173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1228, - 0, 0, 0, 0, 1184, 0, 1203, 1275, 1766, 1167, - 296, 1178, 397, 256, 1321, 0, 449, 1282, 1292, 1225, - 561, 1296, 1223, 1222, 1269, 1182, 1288, 1216, 361, 1180, - 328, 202, 226, 0, 1214, 407, 457, 469, 1287, 1199, - 1208, 254, 1206, 467, 421, 538, 234, 283, 454, 427, - 465, 437, 286, 1248, 1267, 466, 368, 523, 447, 535, - 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, - 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, - 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, - 288, 452, 431, 432, 570, 580, 214, 502, 533, 240, - 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, - 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 527, 528, 255, 588, 229, 555, 221, 1179, 554, - 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 589, - 235, 236, 238, 1194, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 1283, 517, 536, 548, - 560, 566, 567, 569, 572, 573, 574, 575, 581, 579, - 576, 577, 578, 571, 402, 309, 490, 331, 369, 1272, - 1314, 420, 468, 241, 540, 491, 1317, 1318, 1319, 1320, - 1189, 1193, 1187, 1254, 1188, 1243, 1244, 1190, 1305, 1306, - 1307, 590, 591, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 0, - 1276, 1183, 0, 1191, 1192, 1285, 1294, 1295, 608, 380, - 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, - 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, - 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, - 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, - 546, 307, 464, 463, 329, 330, 375, 446, 1247, 201, - 222, 364, 1310, 450, 287, 586, 551, 545, 208, 224, - 1186, 261, 1197, 1205, 0, 1211, 1219, 1220, 1232, 1234, - 1235, 1236, 1237, 1255, 1256, 1258, 1266, 1268, 1271, 1273, - 1280, 1291, 1313, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 583, 584, 298, 534, 565, 532, 582, 559, 435, - 374, 1246, 1316, 549, 1252, 377, 280, 303, 318, 1261, - 550, 497, 228, 462, 289, 252, 1279, 1281, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 1242, 1270, 372, 514, 515, 314, 392, 0, - 0, 0, 1299, 1284, 513, 0, 1227, 1302, 1196, 1215, - 1312, 1218, 1221, 1263, 1175, 1241, 411, 1212, 1168, 1200, - 1170, 1207, 1171, 1198, 1229, 269, 1195, 1286, 1245, 1301, - 362, 266, 1177, 1201, 425, 1217, 207, 1265, 482, 253, - 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 1308, 366, 1251, 0, 492, 396, 0, 0, - 0, 1231, 1290, 1239, 1277, 1226, 1264, 1185, 1250, 1303, - 1213, 1260, 1304, 321, 249, 323, 206, 408, 493, 285, - 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, - 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, - 353, 359, 1209, 1257, 1298, 1210, 1259, 264, 319, 271, - 263, 518, 1309, 1289, 1174, 1238, 1297, 0, 0, 230, - 1300, 1233, 0, 1262, 0, 1315, 1169, 1253, 0, 1172, - 1176, 1311, 1293, 1204, 274, 0, 0, 0, 0, 0, - 0, 0, 1230, 1240, 1274, 1278, 1224, 0, 0, 0, - 0, 0, 2862, 0, 1202, 0, 1249, 0, 0, 0, - 1181, 1173, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1228, 0, 0, 0, 0, 1184, - 0, 1203, 1275, 0, 1167, 296, 1178, 397, 256, 1321, - 0, 449, 1282, 1292, 1225, 561, 1296, 1223, 1222, 1269, - 1182, 1288, 1216, 361, 1180, 328, 202, 226, 0, 1214, - 407, 457, 469, 1287, 1199, 1208, 254, 1206, 467, 421, - 538, 234, 283, 454, 427, 465, 437, 286, 1248, 1267, - 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, - 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, - 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 580, 214, 502, 533, 240, 479, 0, 0, 587, 248, - 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 588, - 229, 555, 221, 1179, 554, 403, 522, 531, 390, 379, - 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, - 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 589, 235, 236, 238, 1194, 278, - 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 1283, 517, 536, 548, 560, 566, 567, 569, 572, - 573, 574, 575, 581, 579, 576, 577, 578, 571, 402, - 309, 490, 331, 369, 1272, 1314, 420, 468, 241, 540, - 491, 1317, 1318, 1319, 1320, 1189, 1193, 1187, 1254, 1188, - 1243, 1244, 1190, 1305, 1306, 1307, 590, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 0, 1276, 1183, 0, 1191, 1192, - 1285, 1294, 1295, 608, 380, 481, 537, 333, 345, 348, - 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, - 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, - 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, - 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, - 330, 375, 446, 1247, 201, 222, 364, 1310, 450, 287, - 586, 551, 545, 208, 224, 1186, 261, 1197, 1205, 0, - 1211, 1219, 1220, 1232, 1234, 1235, 1236, 1237, 1255, 1256, - 1258, 1266, 1268, 1271, 1273, 1280, 1291, 1313, 203, 204, - 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, - 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, - 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, - 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, - 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, - 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 299, 300, 441, 442, 312, 313, 583, 584, 298, 534, - 565, 532, 582, 559, 435, 374, 1246, 1316, 549, 1252, - 377, 280, 303, 318, 1261, 550, 497, 228, 462, 289, - 252, 1279, 1281, 213, 247, 231, 258, 273, 276, 322, - 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, - 504, 505, 506, 508, 391, 265, 428, 1242, 1270, 372, - 514, 515, 314, 392, 0, 0, 0, 1299, 1284, 513, - 0, 1227, 1302, 1196, 1215, 1312, 1218, 1221, 1263, 1175, - 1241, 411, 1212, 1168, 1200, 1170, 1207, 1171, 1198, 1229, - 269, 1195, 1286, 1245, 1301, 362, 266, 1177, 1201, 425, - 1217, 207, 1265, 482, 253, 373, 370, 521, 281, 272, - 268, 251, 315, 381, 423, 503, 417, 1308, 366, 1251, - 0, 492, 396, 0, 0, 0, 1231, 1290, 1239, 1277, - 1226, 1264, 1185, 1250, 1303, 1213, 1260, 1304, 321, 249, - 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, - 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, - 336, 337, 339, 341, 346, 353, 359, 1209, 1257, 1298, - 1210, 1259, 264, 319, 271, 263, 518, 1309, 1289, 1174, - 1238, 1297, 0, 0, 230, 1300, 1233, 0, 1262, 0, - 1315, 1169, 1253, 0, 1172, 1176, 1311, 1293, 1204, 274, - 0, 0, 0, 0, 0, 0, 0, 1230, 1240, 1274, - 1278, 1224, 0, 0, 0, 0, 0, 2823, 0, 1202, - 0, 1249, 0, 0, 0, 1181, 1173, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1228, - 0, 0, 0, 0, 1184, 0, 1203, 1275, 0, 1167, - 296, 1178, 397, 256, 1321, 0, 449, 1282, 1292, 1225, - 561, 1296, 1223, 1222, 1269, 1182, 1288, 1216, 361, 1180, - 328, 202, 226, 0, 1214, 407, 457, 469, 1287, 1199, - 1208, 254, 1206, 467, 421, 538, 234, 283, 454, 427, - 465, 437, 286, 1248, 1267, 466, 368, 523, 447, 535, - 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, - 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, - 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, - 288, 452, 431, 432, 570, 580, 214, 502, 533, 240, - 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, - 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 527, 528, 255, 588, 229, 555, 221, 1179, 554, - 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 589, - 235, 236, 238, 1194, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 1283, 517, 536, 548, - 560, 566, 567, 569, 572, 573, 574, 575, 581, 579, - 576, 577, 578, 571, 402, 309, 490, 331, 369, 1272, - 1314, 420, 468, 241, 540, 491, 1317, 1318, 1319, 1320, - 1189, 1193, 1187, 1254, 1188, 1243, 1244, 1190, 1305, 1306, - 1307, 590, 591, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 0, - 1276, 1183, 0, 1191, 1192, 1285, 1294, 1295, 608, 380, - 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, - 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, - 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, - 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, - 546, 307, 464, 463, 329, 330, 375, 446, 1247, 201, - 222, 364, 1310, 450, 287, 586, 551, 545, 208, 224, - 1186, 261, 1197, 1205, 0, 1211, 1219, 1220, 1232, 1234, - 1235, 1236, 1237, 1255, 1256, 1258, 1266, 1268, 1271, 1273, - 1280, 1291, 1313, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 583, 584, 298, 534, 565, 532, 582, 559, 435, - 374, 1246, 1316, 549, 1252, 377, 280, 303, 318, 1261, - 550, 497, 228, 462, 289, 252, 1279, 1281, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 1242, 1270, 372, 514, 515, 314, 392, 0, - 0, 0, 1299, 1284, 513, 0, 1227, 1302, 1196, 1215, - 1312, 1218, 1221, 1263, 1175, 1241, 411, 1212, 1168, 1200, - 1170, 1207, 1171, 1198, 1229, 269, 1195, 1286, 1245, 1301, - 362, 266, 1177, 1201, 425, 1217, 207, 1265, 482, 253, - 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 1308, 366, 1251, 0, 492, 396, 0, 0, - 0, 1231, 1290, 1239, 1277, 1226, 1264, 1185, 1250, 1303, - 1213, 1260, 1304, 321, 249, 323, 206, 408, 493, 285, - 0, 0, 0, 0, 0, 840, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, - 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, - 353, 359, 1209, 1257, 1298, 1210, 1259, 264, 319, 271, - 263, 518, 1309, 1289, 1174, 1238, 1297, 0, 0, 230, - 1300, 1233, 0, 1262, 0, 1315, 1169, 1253, 0, 1172, - 1176, 1311, 1293, 1204, 274, 0, 0, 0, 0, 0, - 0, 0, 1230, 1240, 1274, 1278, 1224, 0, 0, 0, - 0, 0, 2144, 0, 1202, 0, 1249, 0, 0, 0, - 1181, 1173, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1228, 0, 0, 0, 0, 1184, - 0, 1203, 1275, 0, 1167, 296, 1178, 397, 256, 1321, - 0, 449, 1282, 1292, 1225, 561, 1296, 1223, 1222, 1269, - 1182, 1288, 1216, 361, 1180, 328, 202, 226, 0, 1214, - 407, 457, 469, 1287, 1199, 1208, 254, 1206, 467, 421, - 538, 234, 283, 454, 427, 465, 437, 286, 1248, 1267, - 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, - 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, - 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 580, 214, 502, 533, 240, 479, 0, 0, 587, 248, - 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 588, - 229, 555, 221, 1179, 554, 403, 522, 531, 390, 379, - 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, - 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 589, 235, 236, 238, 1194, 278, - 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 1283, 517, 536, 548, 560, 566, 567, 569, 572, - 573, 574, 575, 581, 579, 576, 577, 578, 571, 402, - 309, 490, 331, 369, 1272, 1314, 420, 468, 241, 540, - 491, 1317, 1318, 1319, 1320, 1189, 1193, 1187, 1254, 1188, - 1243, 1244, 1190, 1305, 1306, 1307, 590, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 0, 1276, 1183, 0, 1191, 1192, - 1285, 1294, 1295, 608, 380, 481, 537, 333, 345, 348, - 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, - 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, - 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, - 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, - 330, 375, 446, 1247, 201, 222, 364, 1310, 450, 287, - 586, 551, 545, 208, 224, 1186, 261, 1197, 1205, 0, - 1211, 1219, 1220, 1232, 1234, 1235, 1236, 1237, 1255, 1256, - 1258, 1266, 1268, 1271, 1273, 1280, 1291, 1313, 203, 204, - 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, - 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, - 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, - 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, - 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, - 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 299, 300, 441, 442, 312, 313, 583, 584, 298, 534, - 565, 532, 582, 559, 435, 374, 1246, 1316, 549, 1252, - 377, 280, 303, 318, 1261, 550, 497, 228, 462, 289, - 252, 1279, 1281, 213, 247, 231, 258, 273, 276, 322, - 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, - 504, 505, 506, 508, 391, 265, 428, 1242, 1270, 372, - 514, 515, 314, 392, 0, 0, 0, 1299, 1284, 513, - 0, 1227, 1302, 1196, 1215, 1312, 1218, 1221, 1263, 1175, - 1241, 411, 1212, 1168, 1200, 1170, 1207, 1171, 1198, 1229, - 269, 1195, 1286, 1245, 1301, 362, 266, 1177, 1201, 425, - 1217, 207, 1265, 482, 253, 373, 370, 521, 281, 272, - 268, 251, 315, 381, 423, 503, 417, 1308, 366, 1251, - 0, 492, 396, 0, 0, 0, 1231, 1290, 1239, 1277, - 1226, 1264, 1185, 1250, 1303, 1213, 1260, 1304, 321, 249, - 323, 206, 408, 493, 285, 0, 97, 0, 0, 0, - 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, - 336, 337, 339, 341, 346, 353, 359, 1209, 1257, 1298, - 1210, 1259, 264, 319, 271, 263, 518, 1309, 1289, 1174, - 1238, 1297, 0, 0, 230, 1300, 1233, 0, 1262, 0, - 1315, 1169, 1253, 0, 1172, 1176, 1311, 1293, 1204, 274, - 0, 0, 0, 0, 0, 0, 0, 1230, 1240, 1274, - 1278, 1224, 0, 0, 0, 0, 0, 0, 0, 1202, - 0, 1249, 0, 0, 0, 1181, 1173, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1228, - 0, 0, 0, 0, 1184, 0, 1203, 1275, 0, 1167, - 296, 1178, 397, 256, 1321, 0, 449, 1282, 1292, 1225, - 561, 1296, 1223, 1222, 1269, 1182, 1288, 1216, 361, 1180, - 328, 202, 226, 0, 1214, 407, 457, 469, 1287, 1199, - 1208, 254, 1206, 467, 421, 538, 234, 283, 454, 427, - 465, 437, 286, 1248, 1267, 466, 368, 523, 447, 535, - 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, - 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, - 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, - 288, 452, 431, 432, 570, 580, 214, 502, 533, 240, - 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, - 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 527, 528, 255, 588, 229, 555, 221, 1179, 554, - 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 589, - 235, 236, 238, 1194, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 1283, 517, 536, 548, - 560, 566, 567, 569, 572, 573, 574, 575, 581, 579, - 576, 577, 578, 571, 402, 309, 490, 331, 369, 1272, - 1314, 420, 468, 241, 540, 491, 1317, 1318, 1319, 1320, - 1189, 1193, 1187, 1254, 1188, 1243, 1244, 1190, 1305, 1306, - 1307, 590, 591, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 0, - 1276, 1183, 0, 1191, 1192, 1285, 1294, 1295, 608, 380, - 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, - 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, - 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, - 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, - 546, 307, 464, 463, 329, 330, 375, 446, 1247, 201, - 222, 364, 1310, 450, 287, 586, 551, 545, 208, 224, - 1186, 261, 1197, 1205, 0, 1211, 1219, 1220, 1232, 1234, - 1235, 1236, 1237, 1255, 1256, 1258, 1266, 1268, 1271, 1273, - 1280, 1291, 1313, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 583, 584, 298, 534, 565, 532, 582, 559, 435, - 374, 1246, 1316, 549, 1252, 377, 280, 303, 318, 1261, - 550, 497, 228, 462, 289, 252, 1279, 1281, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 1242, 1270, 372, 514, 515, 314, 392, 0, - 0, 0, 1299, 1284, 513, 0, 1227, 1302, 1196, 1215, - 1312, 1218, 1221, 1263, 1175, 1241, 411, 1212, 1168, 1200, - 1170, 1207, 1171, 1198, 1229, 269, 1195, 1286, 1245, 1301, - 362, 266, 1177, 1201, 425, 1217, 207, 1265, 482, 253, - 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 1308, 366, 1251, 0, 492, 396, 0, 0, - 0, 1231, 1290, 1239, 1277, 1226, 1264, 1185, 1250, 1303, - 1213, 1260, 1304, 321, 249, 323, 206, 408, 493, 285, - 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, - 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, - 353, 359, 1209, 1257, 1298, 1210, 1259, 264, 319, 271, - 263, 518, 1309, 1289, 1174, 1238, 1297, 0, 0, 230, - 1300, 1233, 0, 1262, 0, 1315, 1169, 1253, 0, 1172, - 1176, 1311, 1293, 1204, 274, 0, 0, 0, 0, 0, - 0, 0, 1230, 1240, 1274, 1278, 1224, 0, 0, 0, - 0, 0, 0, 0, 1202, 0, 1249, 0, 0, 0, - 1181, 1173, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1228, 0, 0, 0, 0, 1184, - 0, 1203, 1275, 0, 1167, 296, 1178, 397, 256, 1321, - 0, 449, 1282, 1292, 1225, 561, 1296, 1223, 1222, 1269, - 1182, 1288, 1216, 361, 1180, 328, 202, 226, 0, 1214, - 407, 457, 469, 1287, 1199, 1208, 254, 1206, 467, 421, - 538, 234, 283, 454, 427, 465, 437, 286, 1248, 1267, - 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, - 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, - 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 580, 214, 502, 533, 240, 479, 0, 0, 587, 248, + 0, 1230, 0, 0, 0, 0, 1186, 0, 1205, 1277, + 0, 1169, 296, 1180, 397, 256, 1323, 0, 449, 1284, + 1294, 1227, 561, 1298, 1225, 1224, 1271, 1184, 1290, 1218, + 361, 1182, 328, 202, 226, 0, 1216, 407, 457, 469, + 1289, 1201, 1210, 254, 1208, 467, 421, 538, 234, 283, + 454, 427, 465, 437, 286, 1250, 1269, 466, 368, 523, + 447, 535, 562, 563, 262, 401, 547, 507, 556, 586, + 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, + 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, + 525, 544, 288, 452, 431, 432, 570, 581, 571, 214, + 502, 533, 240, 479, 0, 0, 588, 248, 499, 216, + 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, + 0, 0, 257, 410, 527, 528, 255, 589, 229, 555, + 221, 1181, 554, 403, 522, 531, 390, 379, 220, 529, + 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, + 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, + 494, 543, 590, 235, 236, 238, 1196, 278, 282, 290, + 293, 301, 302, 311, 363, 414, 443, 439, 448, 1285, + 517, 536, 548, 560, 566, 567, 569, 573, 574, 575, + 576, 582, 580, 577, 578, 579, 572, 402, 309, 490, + 331, 369, 1274, 1316, 420, 468, 241, 540, 491, 1319, + 1320, 1321, 1322, 1191, 1195, 1189, 1256, 1190, 1245, 1246, + 1192, 1307, 1308, 1309, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 608, 0, 1278, 1185, 0, 1193, 1194, 1287, 1296, + 1297, 609, 380, 481, 537, 333, 345, 348, 338, 357, + 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, + 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, + 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, + 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, + 446, 1249, 201, 222, 364, 1312, 450, 287, 587, 551, + 545, 208, 224, 1188, 261, 1199, 1207, 0, 1213, 1221, + 1222, 1234, 1236, 1237, 1238, 1239, 1257, 1258, 1260, 1268, + 1270, 1273, 1275, 1282, 1293, 1315, 203, 204, 211, 223, + 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, + 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, + 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, + 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, + 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, + 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, + 441, 442, 312, 313, 584, 585, 298, 534, 565, 532, + 583, 559, 435, 374, 1248, 1318, 549, 1254, 377, 280, + 303, 318, 1263, 550, 497, 228, 462, 289, 252, 1281, + 1283, 213, 247, 231, 258, 273, 276, 322, 387, 395, + 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, + 506, 508, 391, 265, 428, 1244, 1272, 372, 514, 515, + 314, 392, 0, 0, 0, 1301, 1286, 513, 0, 1229, + 1304, 1198, 1217, 1314, 1220, 1223, 1265, 1177, 1243, 411, + 1214, 1170, 1202, 1172, 1209, 1173, 1200, 1231, 269, 1197, + 1288, 1247, 1303, 362, 266, 1179, 1203, 425, 1219, 207, + 1267, 482, 253, 373, 370, 521, 281, 272, 268, 251, + 315, 381, 423, 503, 417, 1310, 366, 1253, 0, 492, + 396, 0, 0, 0, 1233, 1292, 1241, 1279, 1228, 1266, + 1187, 1252, 1305, 1215, 1262, 1306, 321, 249, 323, 206, + 408, 493, 285, 0, 0, 0, 0, 0, 841, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, + 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, + 339, 341, 346, 353, 359, 1211, 1259, 1300, 1212, 1261, + 264, 319, 271, 263, 518, 1311, 1291, 1176, 1240, 1299, + 0, 0, 230, 1302, 1235, 0, 1264, 0, 1317, 1171, + 1255, 0, 1174, 1178, 1313, 1295, 1206, 274, 0, 0, + 0, 0, 0, 0, 0, 1232, 1242, 1276, 1280, 1226, + 0, 0, 0, 0, 0, 2153, 0, 1204, 0, 1251, + 0, 0, 0, 1183, 1175, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1230, 0, 0, + 0, 0, 1186, 0, 1205, 1277, 0, 1169, 296, 1180, + 397, 256, 1323, 0, 449, 1284, 1294, 1227, 561, 1298, + 1225, 1224, 1271, 1184, 1290, 1218, 361, 1182, 328, 202, + 226, 0, 1216, 407, 457, 469, 1289, 1201, 1210, 254, + 1208, 467, 421, 538, 234, 283, 454, 427, 465, 437, + 286, 1250, 1269, 466, 368, 523, 447, 535, 562, 563, + 262, 401, 547, 507, 556, 586, 227, 259, 415, 500, + 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, + 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, + 431, 432, 570, 581, 571, 214, 502, 533, 240, 479, + 0, 0, 588, 248, 499, 216, 530, 498, 389, 324, + 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, + 527, 528, 255, 589, 229, 555, 221, 1181, 554, 403, + 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, + 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, + 400, 209, 542, 0, 210, 0, 494, 543, 590, 235, + 236, 238, 1196, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 443, 439, 448, 1285, 517, 536, 548, 560, + 566, 567, 569, 573, 574, 575, 576, 582, 580, 577, + 578, 579, 572, 402, 309, 490, 331, 369, 1274, 1316, + 420, 468, 241, 540, 491, 1319, 1320, 1321, 1322, 1191, + 1195, 1189, 1256, 1190, 1245, 1246, 1192, 1307, 1308, 1309, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 0, 1278, + 1185, 0, 1193, 1194, 1287, 1296, 1297, 609, 380, 481, + 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, + 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, + 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, + 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, + 307, 464, 463, 329, 330, 375, 446, 1249, 201, 222, + 364, 1312, 450, 287, 587, 551, 545, 208, 224, 1188, + 261, 1199, 1207, 0, 1213, 1221, 1222, 1234, 1236, 1237, + 1238, 1239, 1257, 1258, 1260, 1268, 1270, 1273, 1275, 1282, + 1293, 1315, 203, 204, 211, 223, 233, 237, 244, 260, + 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, + 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, + 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, + 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, + 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, + 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, + 584, 585, 298, 534, 565, 532, 583, 559, 435, 374, + 1248, 1318, 549, 1254, 377, 280, 303, 318, 1263, 550, + 497, 228, 462, 289, 252, 1281, 1283, 213, 247, 231, + 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, + 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, + 428, 1244, 1272, 372, 514, 515, 314, 392, 0, 0, + 0, 1301, 1286, 513, 0, 1229, 1304, 1198, 1217, 1314, + 1220, 1223, 1265, 1177, 1243, 411, 1214, 1170, 1202, 1172, + 1209, 1173, 1200, 1231, 269, 1197, 1288, 1247, 1303, 362, + 266, 1179, 1203, 425, 1219, 207, 1267, 482, 253, 373, + 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, + 417, 1310, 366, 1253, 0, 492, 396, 0, 0, 0, + 1233, 1292, 1241, 1279, 1228, 1266, 1187, 1252, 1305, 1215, + 1262, 1306, 321, 249, 323, 206, 408, 493, 285, 0, + 97, 0, 0, 0, 667, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, + 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, + 359, 1211, 1259, 1300, 1212, 1261, 264, 319, 271, 263, + 518, 1311, 1291, 1176, 1240, 1299, 0, 0, 230, 1302, + 1235, 0, 1264, 0, 1317, 1171, 1255, 0, 1174, 1178, + 1313, 1295, 1206, 274, 0, 0, 0, 0, 0, 0, + 0, 1232, 1242, 1276, 1280, 1226, 0, 0, 0, 0, + 0, 0, 0, 1204, 0, 1251, 0, 0, 0, 1183, + 1175, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1230, 0, 0, 0, 0, 1186, 0, + 1205, 1277, 0, 1169, 296, 1180, 397, 256, 1323, 0, + 449, 1284, 1294, 1227, 561, 1298, 1225, 1224, 1271, 1184, + 1290, 1218, 361, 1182, 328, 202, 226, 0, 1216, 407, + 457, 469, 1289, 1201, 1210, 254, 1208, 467, 421, 538, + 234, 283, 454, 427, 465, 437, 286, 1250, 1269, 466, + 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, + 556, 586, 227, 259, 415, 500, 541, 489, 393, 519, + 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, + 243, 232, 525, 544, 288, 452, 431, 432, 570, 581, + 571, 214, 502, 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 588, - 229, 555, 221, 1179, 554, 403, 522, 531, 390, 379, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 589, + 229, 555, 221, 1181, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 589, 235, 236, 238, 1194, 278, + 210, 0, 494, 543, 590, 235, 236, 238, 1196, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 1283, 517, 536, 548, 560, 566, 567, 569, 572, - 573, 574, 575, 581, 579, 576, 577, 578, 571, 402, - 309, 490, 331, 369, 1272, 1314, 420, 468, 241, 540, - 491, 1317, 1318, 1319, 1320, 1189, 1193, 1187, 1254, 1188, - 1243, 1244, 1190, 1305, 1306, 1307, 590, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 0, 1276, 1183, 0, 1191, 1192, - 1285, 1294, 1295, 608, 380, 481, 537, 333, 345, 348, + 448, 1285, 517, 536, 548, 560, 566, 567, 569, 573, + 574, 575, 576, 582, 580, 577, 578, 579, 572, 402, + 309, 490, 331, 369, 1274, 1316, 420, 468, 241, 540, + 491, 1319, 1320, 1321, 1322, 1191, 1195, 1189, 1256, 1190, + 1245, 1246, 1192, 1307, 1308, 1309, 591, 592, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 0, 1278, 1185, 0, 1193, 1194, + 1287, 1296, 1297, 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, - 330, 375, 446, 1247, 201, 222, 364, 1310, 450, 287, - 586, 551, 545, 208, 224, 1186, 261, 1197, 1205, 0, - 1211, 1219, 1220, 1232, 1234, 1235, 1236, 1237, 1255, 1256, - 1258, 1266, 1268, 1271, 1273, 1280, 1291, 1313, 203, 204, + 330, 375, 446, 1249, 201, 222, 364, 1312, 450, 287, + 587, 551, 545, 208, 224, 1188, 261, 1199, 1207, 0, + 1213, 1221, 1222, 1234, 1236, 1237, 1238, 1239, 1257, 1258, + 1260, 1268, 1270, 1273, 1275, 1282, 1293, 1315, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 299, 300, 441, 442, 312, 313, 583, 584, 298, 534, - 565, 532, 582, 559, 435, 374, 1246, 1316, 549, 1252, - 377, 280, 303, 318, 1261, 550, 497, 228, 462, 289, - 252, 1279, 1281, 213, 247, 231, 258, 273, 276, 322, + 299, 300, 441, 442, 312, 313, 584, 585, 298, 534, + 565, 532, 583, 559, 435, 374, 1248, 1318, 549, 1254, + 377, 280, 303, 318, 1263, 550, 497, 228, 462, 289, + 252, 1281, 1283, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, - 504, 505, 506, 508, 391, 265, 428, 1242, 1270, 372, - 514, 515, 314, 392, 0, 0, 0, 1299, 1284, 513, - 0, 1227, 1302, 1196, 1215, 1312, 1218, 1221, 1263, 1175, - 1241, 411, 1212, 1168, 1200, 1170, 1207, 1171, 1198, 1229, - 269, 1195, 1286, 1245, 1301, 362, 266, 1177, 1201, 425, - 1217, 207, 1265, 482, 253, 373, 370, 521, 281, 272, - 268, 251, 315, 381, 423, 503, 417, 1308, 366, 1251, - 0, 492, 396, 0, 0, 0, 1231, 1290, 1239, 1277, - 1226, 1264, 1185, 1250, 1303, 1213, 1260, 1304, 321, 249, + 504, 505, 506, 508, 391, 265, 428, 1244, 1272, 372, + 514, 515, 314, 392, 0, 0, 0, 1301, 1286, 513, + 0, 1229, 1304, 1198, 1217, 1314, 1220, 1223, 1265, 1177, + 1243, 411, 1214, 1170, 1202, 1172, 1209, 1173, 1200, 1231, + 269, 1197, 1288, 1247, 1303, 362, 266, 1179, 1203, 425, + 1219, 207, 1267, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 1310, 366, 1253, + 0, 492, 396, 0, 0, 0, 1233, 1292, 1241, 1279, + 1228, 1266, 1187, 1252, 1305, 1215, 1262, 1306, 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, - 840, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, - 336, 337, 339, 341, 346, 353, 359, 1209, 1257, 1298, - 1210, 1259, 264, 319, 271, 263, 518, 1309, 1289, 1174, - 1238, 1297, 0, 0, 230, 1300, 1233, 0, 1262, 0, - 1315, 1169, 1253, 0, 1172, 1176, 1311, 1293, 1204, 274, - 0, 0, 0, 0, 0, 0, 0, 1230, 1240, 1274, - 1278, 1224, 0, 0, 0, 0, 0, 0, 0, 1202, - 0, 1249, 0, 0, 0, 1181, 1173, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1228, - 0, 0, 0, 0, 1184, 0, 1203, 1275, 0, 1167, - 296, 1178, 397, 256, 1321, 0, 449, 1282, 1292, 1225, - 561, 1296, 1223, 1222, 1269, 1182, 1288, 1216, 361, 1180, - 328, 202, 226, 0, 1214, 407, 457, 469, 1287, 1199, - 1208, 254, 1206, 467, 421, 538, 234, 283, 454, 427, - 465, 437, 286, 1248, 1267, 466, 368, 523, 447, 535, - 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, + 336, 337, 339, 341, 346, 353, 359, 1211, 1259, 1300, + 1212, 1261, 264, 319, 271, 263, 518, 1311, 1291, 1176, + 1240, 1299, 0, 0, 230, 1302, 1235, 0, 1264, 0, + 1317, 1171, 1255, 0, 1174, 1178, 1313, 1295, 1206, 274, + 0, 0, 0, 0, 0, 0, 0, 1232, 1242, 1276, + 1280, 1226, 0, 0, 0, 0, 0, 0, 0, 1204, + 0, 1251, 0, 0, 0, 1183, 1175, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1230, + 0, 0, 0, 0, 1186, 0, 1205, 1277, 0, 1169, + 296, 1180, 397, 256, 1323, 0, 449, 1284, 1294, 1227, + 561, 1298, 1225, 1224, 1271, 1184, 1290, 1218, 361, 1182, + 328, 202, 226, 0, 1216, 407, 457, 469, 1289, 1201, + 1210, 254, 1208, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 1250, 1269, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 586, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, - 288, 452, 431, 432, 570, 580, 214, 502, 533, 240, - 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, - 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 527, 528, 255, 588, 229, 555, 221, 1179, 554, - 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 589, - 235, 236, 238, 1194, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 1283, 517, 536, 548, - 560, 566, 567, 569, 572, 573, 574, 575, 581, 579, - 576, 577, 578, 571, 402, 309, 490, 331, 369, 1272, - 1314, 420, 468, 241, 540, 491, 1317, 1318, 1319, 1320, - 1189, 1193, 1187, 1254, 1188, 1243, 1244, 1190, 1305, 1306, - 1307, 590, 591, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 0, - 1276, 1183, 0, 1191, 1192, 1285, 1294, 1295, 608, 380, - 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, - 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, - 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, - 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, - 546, 307, 464, 463, 329, 330, 375, 446, 1247, 201, - 222, 364, 1310, 450, 287, 586, 551, 545, 208, 224, - 1186, 261, 1197, 1205, 0, 1211, 1219, 1220, 1232, 1234, - 1235, 1236, 1237, 1255, 1256, 1258, 1266, 1268, 1271, 1273, - 1280, 1291, 1313, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 583, 584, 298, 534, 565, 532, 582, 559, 435, - 374, 1246, 1316, 549, 1252, 377, 280, 303, 318, 1261, - 550, 497, 228, 462, 289, 252, 1279, 1281, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 1242, 1270, 372, 514, 515, 314, 392, 0, - 0, 0, 1299, 1284, 513, 0, 1227, 1302, 1196, 1215, - 1312, 1218, 1221, 1263, 1175, 1241, 411, 1212, 1168, 1200, - 1170, 1207, 1171, 1198, 1229, 269, 1195, 1286, 1245, 1301, - 362, 266, 1177, 1201, 425, 1217, 207, 1265, 482, 253, - 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 1308, 366, 1251, 0, 492, 396, 0, 0, - 0, 1231, 1290, 1239, 1277, 1226, 1264, 1185, 1250, 1303, - 1213, 1260, 1304, 321, 249, 323, 206, 408, 493, 285, - 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, - 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, - 353, 359, 1209, 1257, 1298, 1210, 1259, 264, 319, 271, - 263, 518, 1309, 1289, 1174, 1238, 1297, 0, 0, 230, - 1300, 1233, 0, 1262, 0, 1315, 1169, 1253, 0, 1172, - 1176, 1311, 1293, 1204, 274, 0, 0, 0, 0, 0, - 0, 0, 1230, 1240, 1274, 1278, 1224, 0, 0, 0, - 0, 0, 0, 0, 1202, 0, 1249, 0, 0, 0, - 1181, 1173, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1228, 0, 0, 0, 0, 1184, - 0, 1203, 1275, 0, 1167, 296, 1178, 397, 256, 1321, - 0, 449, 1282, 1292, 1225, 561, 1296, 1223, 1222, 1269, - 1182, 1288, 1216, 361, 1180, 328, 202, 226, 0, 1214, - 407, 457, 469, 1287, 1199, 1208, 254, 1206, 467, 421, - 538, 234, 283, 454, 427, 465, 437, 286, 1248, 1267, - 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, - 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, - 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 580, 214, 502, 533, 240, 479, 0, 0, 587, 248, - 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 588, - 229, 555, 221, 1179, 554, 403, 522, 531, 390, 379, - 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, - 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 589, 235, 236, 238, 1194, 278, - 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 1283, 517, 536, 548, 560, 566, 567, 569, 572, - 573, 574, 575, 581, 579, 576, 577, 578, 571, 402, - 309, 490, 331, 369, 1272, 1314, 420, 468, 241, 540, - 491, 1317, 1318, 1319, 1320, 1189, 1193, 1187, 1254, 1188, - 1243, 1244, 1190, 1305, 1306, 1307, 590, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 0, 1276, 1183, 0, 1191, 1192, - 1285, 1294, 1295, 608, 380, 481, 537, 333, 345, 348, - 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, - 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, - 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, - 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, - 330, 375, 446, 1247, 201, 222, 364, 1310, 450, 287, - 586, 551, 545, 208, 224, 1186, 261, 1197, 1205, 0, - 1211, 1219, 1220, 1232, 1234, 1235, 1236, 1237, 1255, 1256, - 1258, 1266, 1268, 1271, 1273, 1280, 1291, 1313, 203, 204, - 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, - 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, - 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, - 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, - 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, - 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 299, 300, 441, 442, 312, 313, 583, 584, 298, 534, - 565, 532, 582, 559, 435, 374, 1246, 1316, 549, 1252, - 377, 280, 303, 318, 1261, 550, 497, 228, 462, 289, - 252, 1279, 1281, 213, 247, 231, 258, 273, 276, 322, - 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, - 504, 505, 506, 508, 391, 265, 428, 1242, 1270, 372, - 514, 515, 314, 392, 0, 0, 0, 0, 0, 513, - 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 411, 0, 0, 0, 0, 706, 0, 0, 0, - 269, 711, 0, 0, 0, 362, 266, 0, 0, 425, - 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, - 268, 251, 315, 381, 423, 503, 417, 718, 366, 0, - 0, 492, 396, 0, 0, 0, 0, 0, 714, 715, - 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, - 323, 206, 408, 493, 285, 0, 97, 0, 0, 856, - 840, 806, 807, 844, 857, 858, 859, 860, 845, 0, - 239, 846, 847, 246, 848, 0, 805, 746, 748, 747, - 765, 766, 767, 768, 769, 770, 771, 744, 853, 861, - 862, 0, 264, 319, 271, 263, 518, 0, 0, 2024, - 2025, 2026, 0, 0, 230, 0, 0, 0, 0, 0, - 0, 0, 688, 703, 0, 717, 0, 0, 0, 274, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 700, 701, 0, 0, 0, - 0, 800, 0, 702, 0, 0, 710, 863, 864, 865, - 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, - 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, - 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, - 896, 897, 898, 899, 900, 901, 902, 903, 904, 713, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 296, 0, 397, 256, 0, 0, 449, 799, 0, 0, - 561, 0, 0, 797, 0, 0, 0, 0, 361, 0, - 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, - 0, 850, 0, 467, 421, 538, 234, 283, 454, 427, - 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, - 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, - 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, - 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, - 288, 452, 431, 432, 570, 580, 214, 502, 533, 240, - 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, + 288, 452, 431, 432, 570, 581, 571, 214, 502, 533, + 240, 479, 0, 0, 588, 248, 499, 216, 530, 498, + 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, + 257, 410, 527, 528, 255, 589, 229, 555, 221, 1181, + 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, + 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, + 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, + 590, 235, 236, 238, 1196, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 443, 439, 448, 1285, 517, 536, + 548, 560, 566, 567, 569, 573, 574, 575, 576, 582, + 580, 577, 578, 579, 572, 402, 309, 490, 331, 369, + 1274, 1316, 420, 468, 241, 540, 491, 1319, 1320, 1321, + 1322, 1191, 1195, 1189, 1256, 1190, 1245, 1246, 1192, 1307, + 1308, 1309, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 0, 1278, 1185, 0, 1193, 1194, 1287, 1296, 1297, 609, + 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, + 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, + 291, 546, 307, 464, 463, 329, 330, 375, 446, 1249, + 201, 222, 364, 1312, 450, 287, 587, 551, 545, 208, + 224, 1188, 261, 1199, 1207, 0, 1213, 1221, 1222, 1234, + 1236, 1237, 1238, 1239, 1257, 1258, 1260, 1268, 1270, 1273, + 1275, 1282, 1293, 1315, 203, 204, 211, 223, 233, 237, + 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, + 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, + 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, + 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, + 312, 313, 584, 585, 298, 534, 565, 532, 583, 559, + 435, 374, 1248, 1318, 549, 1254, 377, 280, 303, 318, + 1263, 550, 497, 228, 462, 289, 252, 1281, 1283, 213, + 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, + 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, + 391, 265, 428, 1244, 1272, 372, 514, 515, 314, 392, + 0, 0, 0, 1301, 1286, 513, 0, 1229, 1304, 1198, + 1217, 1314, 1220, 1223, 1265, 1177, 1243, 411, 1214, 1170, + 1202, 1172, 1209, 1173, 1200, 1231, 269, 1197, 1288, 1247, + 1303, 362, 266, 1179, 1203, 425, 1219, 207, 1267, 482, + 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, + 423, 503, 417, 1310, 366, 1253, 0, 492, 396, 0, + 0, 0, 1233, 1292, 1241, 1279, 1228, 1266, 1187, 1252, + 1305, 1215, 1262, 1306, 321, 249, 323, 206, 408, 493, + 285, 0, 0, 0, 0, 0, 841, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, + 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, + 346, 353, 359, 1211, 1259, 1300, 1212, 1261, 264, 319, + 271, 263, 518, 1311, 1291, 1176, 1240, 1299, 0, 0, + 230, 1302, 1235, 0, 1264, 0, 1317, 1171, 1255, 0, + 1174, 1178, 1313, 1295, 1206, 274, 0, 0, 0, 0, + 0, 0, 0, 1232, 1242, 1276, 1280, 1226, 0, 0, + 0, 0, 0, 0, 0, 1204, 0, 1251, 0, 0, + 0, 1183, 1175, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1230, 0, 0, 0, 0, + 1186, 0, 1205, 1277, 0, 1169, 296, 1180, 397, 256, + 1323, 0, 449, 1284, 1294, 1227, 561, 1298, 1225, 1224, + 1271, 1184, 1290, 1218, 361, 1182, 328, 202, 226, 0, + 1216, 407, 457, 469, 1289, 1201, 1210, 254, 1208, 467, + 421, 538, 234, 283, 454, 427, 465, 437, 286, 1250, + 1269, 466, 368, 523, 447, 535, 562, 563, 262, 401, + 547, 507, 556, 586, 227, 259, 415, 500, 541, 489, + 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, + 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, + 570, 581, 571, 214, 502, 533, 240, 479, 0, 0, + 588, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, + 255, 589, 229, 555, 221, 1181, 554, 403, 522, 531, + 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, + 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, + 542, 0, 210, 0, 494, 543, 590, 235, 236, 238, + 1196, 278, 282, 290, 293, 301, 302, 311, 363, 414, + 443, 439, 448, 1285, 517, 536, 548, 560, 566, 567, + 569, 573, 574, 575, 576, 582, 580, 577, 578, 579, + 572, 402, 309, 490, 331, 369, 1274, 1316, 420, 468, + 241, 540, 491, 1319, 1320, 1321, 1322, 1191, 1195, 1189, + 1256, 1190, 1245, 1246, 1192, 1307, 1308, 1309, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 0, 1278, 1185, 0, + 1193, 1194, 1287, 1296, 1297, 609, 380, 481, 537, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, + 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, + 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, + 463, 329, 330, 375, 446, 1249, 201, 222, 364, 1312, + 450, 287, 587, 551, 545, 208, 224, 1188, 261, 1199, + 1207, 0, 1213, 1221, 1222, 1234, 1236, 1237, 1238, 1239, + 1257, 1258, 1260, 1268, 1270, 1273, 1275, 1282, 1293, 1315, + 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, + 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, + 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, + 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, + 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, + 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, + 564, 476, 299, 300, 441, 442, 312, 313, 584, 585, + 298, 534, 565, 532, 583, 559, 435, 374, 1248, 1318, + 549, 1254, 377, 280, 303, 318, 1263, 550, 497, 228, + 462, 289, 252, 1281, 1283, 213, 247, 231, 258, 273, + 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, + 242, 480, 504, 505, 506, 508, 391, 265, 428, 1244, + 1272, 372, 514, 515, 314, 392, 0, 0, 0, 1301, + 1286, 513, 0, 1229, 1304, 1198, 1217, 1314, 1220, 1223, + 1265, 1177, 1243, 411, 1214, 1170, 1202, 1172, 1209, 1173, + 1200, 1231, 269, 1197, 1288, 1247, 1303, 362, 266, 1179, + 1203, 425, 1219, 207, 1267, 482, 253, 373, 370, 521, + 281, 272, 268, 251, 315, 381, 423, 503, 417, 1310, + 366, 1253, 0, 492, 396, 0, 0, 0, 1233, 1292, + 1241, 1279, 1228, 1266, 1187, 1252, 1305, 1215, 1262, 1306, + 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, + 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, + 356, 355, 336, 337, 339, 341, 346, 353, 359, 1211, + 1259, 1300, 1212, 1261, 264, 319, 271, 263, 518, 1311, + 1291, 1176, 1240, 1299, 0, 0, 230, 1302, 1235, 0, + 1264, 0, 1317, 1171, 1255, 0, 1174, 1178, 1313, 1295, + 1206, 274, 0, 0, 0, 0, 0, 0, 0, 1232, + 1242, 1276, 1280, 1226, 0, 0, 0, 0, 0, 0, + 0, 1204, 0, 1251, 0, 0, 0, 1183, 1175, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1230, 0, 0, 0, 0, 1186, 0, 1205, 1277, + 0, 1169, 296, 1180, 397, 256, 1323, 0, 449, 1284, + 1294, 1227, 561, 1298, 1225, 1224, 1271, 1184, 1290, 1218, + 361, 1182, 328, 202, 226, 0, 1216, 407, 457, 469, + 1289, 1201, 1210, 254, 1208, 467, 421, 538, 234, 283, + 454, 427, 465, 437, 286, 1250, 1269, 466, 368, 523, + 447, 535, 562, 563, 262, 401, 547, 507, 556, 586, + 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, + 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, + 525, 544, 288, 452, 431, 432, 570, 581, 571, 214, + 502, 533, 240, 479, 0, 0, 588, 248, 499, 216, + 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, + 0, 0, 257, 410, 527, 528, 255, 589, 229, 555, + 221, 1181, 554, 403, 522, 531, 390, 379, 220, 529, + 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, + 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, + 494, 543, 590, 235, 236, 238, 1196, 278, 282, 290, + 293, 301, 302, 311, 363, 414, 443, 439, 448, 1285, + 517, 536, 548, 560, 566, 567, 569, 573, 574, 575, + 576, 582, 580, 577, 578, 579, 572, 402, 309, 490, + 331, 369, 1274, 1316, 420, 468, 241, 540, 491, 1319, + 1320, 1321, 1322, 1191, 1195, 1189, 1256, 1190, 1245, 1246, + 1192, 1307, 1308, 1309, 591, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 608, 0, 1278, 1185, 0, 1193, 1194, 1287, 1296, + 1297, 609, 380, 481, 537, 333, 345, 348, 338, 357, + 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, + 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, + 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, + 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, + 446, 1249, 201, 222, 364, 1312, 450, 287, 587, 551, + 545, 208, 224, 1188, 261, 1199, 1207, 0, 1213, 1221, + 1222, 1234, 1236, 1237, 1238, 1239, 1257, 1258, 1260, 1268, + 1270, 1273, 1275, 1282, 1293, 1315, 203, 204, 211, 223, + 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, + 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, + 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, + 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, + 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, + 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, + 441, 442, 312, 313, 584, 585, 298, 534, 565, 532, + 583, 559, 435, 374, 1248, 1318, 549, 1254, 377, 280, + 303, 318, 1263, 550, 497, 228, 462, 289, 252, 1281, + 1283, 213, 247, 231, 258, 273, 276, 322, 387, 395, + 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, + 506, 508, 391, 265, 428, 1244, 1272, 372, 514, 515, + 314, 392, 0, 0, 0, 0, 0, 513, 0, 720, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, + 0, 0, 0, 0, 707, 0, 0, 0, 269, 712, + 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, + 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, + 315, 381, 423, 503, 417, 719, 366, 0, 0, 492, + 396, 0, 0, 0, 0, 0, 715, 716, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, + 408, 493, 285, 0, 97, 0, 0, 857, 841, 807, + 808, 845, 858, 859, 860, 861, 846, 0, 239, 847, + 848, 246, 849, 0, 806, 747, 749, 748, 766, 767, + 768, 769, 770, 771, 772, 745, 854, 862, 863, 0, + 264, 319, 271, 263, 518, 0, 0, 2033, 2034, 2035, + 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, + 689, 704, 0, 718, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 701, 702, 0, 0, 0, 0, 801, + 0, 703, 0, 0, 711, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, + 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, + 899, 900, 901, 902, 903, 904, 905, 714, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, + 397, 256, 0, 0, 449, 800, 0, 0, 561, 0, + 0, 798, 0, 0, 0, 0, 361, 0, 328, 202, + 226, 0, 0, 407, 457, 469, 0, 0, 0, 851, + 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, + 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, + 262, 401, 547, 507, 556, 586, 227, 259, 415, 500, + 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, + 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, + 431, 432, 570, 581, 571, 214, 502, 533, 240, 479, + 0, 0, 588, 248, 499, 216, 530, 498, 389, 324, + 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, + 852, 853, 255, 589, 753, 555, 221, 0, 554, 403, + 522, 531, 390, 379, 220, 529, 388, 378, 332, 761, + 762, 279, 305, 444, 371, 445, 304, 306, 399, 398, + 400, 209, 542, 0, 210, 0, 494, 543, 590, 235, + 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, + 566, 567, 569, 573, 574, 575, 576, 582, 580, 577, + 578, 579, 572, 402, 309, 490, 331, 369, 0, 0, + 420, 468, 241, 540, 491, 0, 0, 0, 0, 811, + 799, 724, 815, 726, 812, 813, 721, 722, 725, 814, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 0, 802, + 710, 709, 0, 717, 0, 743, 744, 746, 750, 751, + 752, 763, 764, 765, 773, 775, 776, 774, 777, 778, + 779, 782, 783, 784, 785, 780, 781, 786, 727, 731, + 728, 729, 730, 742, 732, 733, 734, 735, 736, 737, + 738, 739, 740, 741, 825, 826, 827, 828, 829, 830, + 756, 760, 759, 757, 758, 754, 755, 708, 201, 222, + 364, 0, 450, 287, 587, 551, 545, 208, 224, 816, + 261, 817, 0, 0, 821, 0, 0, 0, 823, 822, + 0, 824, 790, 789, 0, 0, 818, 819, 0, 820, + 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, + 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, + 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, + 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, + 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, + 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, + 539, 558, 564, 476, 831, 832, 833, 834, 835, 836, + 837, 838, 298, 534, 565, 532, 583, 559, 435, 374, + 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, + 497, 228, 462, 289, 252, 856, 0, 213, 247, 231, + 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, + 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, + 428, 392, 0, 372, 514, 515, 314, 513, 0, 720, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, + 0, 0, 0, 0, 707, 0, 0, 0, 269, 712, + 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, + 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, + 315, 381, 423, 503, 417, 719, 366, 0, 0, 492, + 396, 0, 0, 0, 0, 0, 715, 716, 0, 0, + 0, 0, 0, 0, 2182, 0, 321, 249, 323, 206, + 408, 493, 285, 0, 97, 0, 0, 857, 841, 807, + 808, 845, 858, 859, 860, 861, 846, 0, 239, 847, + 848, 246, 849, 0, 806, 747, 749, 748, 766, 767, + 768, 769, 770, 771, 772, 745, 854, 862, 863, 2183, + 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, + 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, + 689, 704, 0, 718, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 701, 702, 0, 0, 0, 0, 801, + 0, 703, 0, 0, 711, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, + 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, + 899, 900, 901, 902, 903, 904, 905, 714, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, + 397, 256, 0, 0, 449, 800, 0, 0, 561, 0, + 0, 798, 0, 0, 0, 0, 361, 0, 328, 202, + 226, 0, 0, 407, 457, 469, 0, 0, 0, 851, + 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, + 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, + 262, 401, 547, 507, 556, 586, 227, 259, 415, 500, + 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, + 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, + 431, 432, 570, 581, 571, 214, 502, 533, 240, 479, + 0, 0, 588, 248, 499, 216, 530, 498, 389, 324, + 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, + 852, 853, 255, 589, 753, 555, 221, 0, 554, 403, + 522, 531, 390, 379, 220, 529, 388, 378, 332, 761, + 762, 279, 305, 444, 371, 445, 304, 306, 399, 398, + 400, 209, 542, 0, 210, 0, 494, 543, 590, 235, + 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, + 566, 567, 569, 573, 574, 575, 576, 582, 580, 577, + 578, 579, 572, 402, 309, 490, 331, 369, 0, 0, + 420, 468, 241, 540, 491, 0, 0, 0, 0, 811, + 799, 724, 815, 726, 812, 813, 721, 722, 725, 814, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 0, 802, + 710, 709, 0, 717, 0, 743, 744, 746, 750, 751, + 752, 763, 764, 765, 773, 775, 776, 774, 777, 778, + 779, 782, 783, 784, 785, 780, 781, 786, 727, 731, + 728, 729, 730, 742, 732, 733, 734, 735, 736, 737, + 738, 739, 740, 741, 825, 826, 827, 828, 829, 830, + 756, 760, 759, 757, 758, 754, 755, 708, 201, 222, + 364, 0, 450, 287, 587, 551, 545, 208, 224, 816, + 261, 817, 0, 0, 821, 0, 0, 0, 823, 822, + 0, 824, 790, 789, 0, 0, 818, 819, 0, 820, + 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, + 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, + 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, + 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, + 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, + 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, + 539, 558, 564, 476, 831, 832, 833, 834, 835, 836, + 837, 838, 298, 534, 565, 532, 583, 559, 435, 374, + 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, + 497, 228, 462, 289, 252, 856, 0, 213, 247, 231, + 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, + 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, + 428, 0, 392, 372, 514, 515, 314, 88, 513, 0, + 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 707, 0, 0, 0, 269, + 712, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, + 251, 315, 381, 423, 503, 417, 719, 366, 0, 0, + 492, 396, 0, 0, 0, 0, 0, 715, 716, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, + 206, 408, 493, 285, 0, 97, 0, 0, 857, 841, + 807, 808, 845, 858, 859, 860, 861, 846, 0, 239, + 847, 848, 246, 849, 0, 806, 747, 749, 748, 766, + 767, 768, 769, 770, 771, 772, 745, 854, 862, 863, + 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, + 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, + 0, 689, 704, 0, 718, 0, 0, 0, 274, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 701, 702, 0, 0, 0, 0, + 801, 0, 703, 0, 0, 711, 864, 865, 866, 867, + 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, + 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, + 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 714, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, + 0, 397, 256, 0, 0, 449, 800, 0, 0, 561, + 0, 0, 798, 0, 0, 0, 0, 361, 0, 328, + 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, + 851, 0, 467, 421, 538, 234, 283, 454, 427, 465, + 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, + 563, 262, 401, 547, 507, 556, 586, 227, 259, 415, + 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, + 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, + 452, 431, 432, 570, 581, 571, 214, 502, 533, 240, + 479, 0, 0, 588, 248, 499, 216, 530, 498, 389, + 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, + 410, 852, 853, 255, 589, 753, 555, 221, 0, 554, + 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, + 761, 762, 279, 305, 444, 371, 445, 304, 306, 399, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 590, + 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, + 560, 566, 567, 569, 573, 574, 575, 576, 582, 580, + 577, 578, 579, 572, 402, 309, 490, 331, 369, 0, + 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, + 811, 799, 724, 815, 726, 812, 813, 721, 722, 725, + 814, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 0, + 802, 710, 709, 0, 717, 0, 743, 744, 746, 750, + 751, 752, 763, 764, 765, 773, 775, 776, 774, 777, + 778, 779, 782, 783, 784, 785, 780, 781, 786, 727, + 731, 728, 729, 730, 742, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 825, 826, 827, 828, 829, + 830, 756, 760, 759, 757, 758, 754, 755, 708, 201, + 222, 364, 96, 450, 287, 587, 551, 545, 208, 224, + 816, 261, 817, 0, 0, 821, 0, 0, 0, 823, + 822, 0, 824, 790, 789, 0, 0, 818, 819, 0, + 820, 0, 0, 203, 204, 211, 223, 233, 237, 244, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, + 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, + 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, + 526, 539, 558, 564, 476, 831, 832, 833, 834, 835, + 836, 837, 838, 298, 534, 565, 532, 583, 559, 435, + 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, + 550, 497, 228, 462, 289, 252, 856, 0, 213, 247, + 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, + 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, + 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 707, 0, 0, 0, 269, + 712, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, + 251, 315, 381, 423, 503, 417, 719, 366, 0, 0, + 492, 396, 0, 0, 0, 0, 0, 715, 716, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, + 206, 408, 493, 285, 0, 97, 0, 0, 857, 841, + 807, 808, 845, 858, 859, 860, 861, 846, 0, 239, + 847, 848, 246, 849, 0, 806, 747, 749, 748, 766, + 767, 768, 769, 770, 771, 772, 745, 854, 862, 863, + 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, + 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, + 0, 689, 704, 0, 718, 0, 0, 0, 274, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 701, 702, 0, 0, 0, 0, + 801, 0, 703, 0, 0, 711, 864, 865, 866, 867, + 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, + 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, + 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 714, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, + 0, 397, 256, 0, 0, 449, 800, 0, 0, 561, + 0, 0, 798, 0, 0, 0, 0, 361, 0, 328, + 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, + 851, 0, 467, 421, 538, 234, 283, 454, 427, 465, + 437, 286, 3542, 0, 466, 368, 523, 447, 535, 562, + 563, 262, 401, 547, 507, 556, 586, 227, 259, 415, + 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, + 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, + 452, 431, 432, 570, 581, 571, 214, 502, 533, 240, + 479, 0, 0, 588, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 851, 852, 255, 588, 752, 555, 221, 0, 554, + 410, 852, 853, 255, 589, 753, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 760, 761, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 589, + 761, 762, 279, 305, 444, 371, 445, 304, 306, 399, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, - 560, 566, 567, 569, 572, 573, 574, 575, 581, 579, - 576, 577, 578, 571, 402, 309, 490, 331, 369, 0, + 560, 566, 567, 569, 573, 574, 575, 576, 582, 580, + 577, 578, 579, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, - 810, 798, 723, 814, 725, 811, 812, 720, 721, 724, - 813, 590, 591, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 0, - 801, 709, 708, 0, 716, 0, 742, 743, 745, 749, - 750, 751, 762, 763, 764, 772, 774, 775, 773, 776, - 777, 778, 781, 782, 783, 784, 779, 780, 785, 726, - 730, 727, 728, 729, 741, 731, 732, 733, 734, 735, - 736, 737, 738, 739, 740, 824, 825, 826, 827, 828, - 829, 755, 759, 758, 756, 757, 753, 754, 707, 201, - 222, 364, 0, 450, 287, 586, 551, 545, 208, 224, - 815, 261, 816, 0, 0, 820, 0, 0, 0, 822, - 821, 0, 823, 789, 788, 0, 0, 817, 818, 0, - 819, 0, 0, 203, 204, 211, 223, 233, 237, 244, + 811, 799, 724, 815, 726, 812, 813, 721, 722, 725, + 814, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 0, + 802, 710, 709, 0, 717, 0, 743, 744, 746, 750, + 751, 752, 763, 764, 765, 773, 775, 776, 774, 777, + 778, 779, 782, 783, 784, 785, 780, 781, 786, 727, + 731, 728, 729, 730, 742, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 825, 826, 827, 828, 829, + 830, 756, 760, 759, 757, 758, 754, 755, 708, 201, + 222, 364, 0, 450, 287, 587, 551, 545, 208, 224, + 816, 261, 817, 0, 0, 821, 0, 0, 0, 823, + 822, 0, 824, 790, 789, 0, 0, 818, 819, 0, + 820, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 830, 831, 832, 833, 834, - 835, 836, 837, 298, 534, 565, 532, 582, 559, 435, + 526, 539, 558, 564, 476, 831, 832, 833, 834, 835, + 836, 837, 838, 298, 534, 565, 532, 583, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 855, 0, 213, 247, + 550, 497, 228, 462, 289, 252, 856, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, - 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 706, 0, 0, 0, 269, - 711, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 707, 0, 0, 0, 269, + 712, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 718, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 714, 715, 0, - 0, 0, 0, 0, 0, 2173, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 97, 0, 0, 856, 840, - 806, 807, 844, 857, 858, 859, 860, 845, 0, 239, - 846, 847, 246, 848, 0, 805, 746, 748, 747, 765, - 766, 767, 768, 769, 770, 771, 744, 853, 861, 862, - 2174, 264, 319, 271, 263, 518, 0, 0, 0, 0, + 251, 315, 381, 423, 503, 417, 719, 366, 0, 0, + 492, 396, 0, 0, 0, 0, 0, 715, 716, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, + 206, 408, 493, 285, 0, 97, 0, 1565, 857, 841, + 807, 808, 845, 858, 859, 860, 861, 846, 0, 239, + 847, 848, 246, 849, 0, 806, 747, 749, 748, 766, + 767, 768, 769, 770, 771, 772, 745, 854, 862, 863, + 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 688, 703, 0, 717, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 700, 701, 0, 0, 0, 0, - 800, 0, 702, 0, 0, 710, 863, 864, 865, 866, - 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, - 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, - 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, - 897, 898, 899, 900, 901, 902, 903, 904, 713, 0, + 0, 689, 704, 0, 718, 0, 0, 0, 274, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 701, 702, 0, 0, 0, 0, + 801, 0, 703, 0, 0, 711, 864, 865, 866, 867, + 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, + 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, + 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 799, 0, 0, 561, - 0, 0, 797, 0, 0, 0, 0, 361, 0, 328, + 0, 397, 256, 0, 0, 449, 800, 0, 0, 561, + 0, 0, 798, 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, - 850, 0, 467, 421, 538, 234, 283, 454, 427, 465, + 851, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 585, 227, 259, 415, + 563, 262, 401, 547, 507, 556, 586, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 580, 214, 502, 533, 240, 479, - 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, - 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 851, 852, 255, 588, 752, 555, 221, 0, 554, 403, - 522, 531, 390, 379, 220, 529, 388, 378, 332, 760, - 761, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 589, 235, - 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, - 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, - 566, 567, 569, 572, 573, 574, 575, 581, 579, 576, - 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, - 420, 468, 241, 540, 491, 0, 0, 0, 0, 810, - 798, 723, 814, 725, 811, 812, 720, 721, 724, 813, - 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 0, 801, - 709, 708, 0, 716, 0, 742, 743, 745, 749, 750, - 751, 762, 763, 764, 772, 774, 775, 773, 776, 777, - 778, 781, 782, 783, 784, 779, 780, 785, 726, 730, - 727, 728, 729, 741, 731, 732, 733, 734, 735, 736, - 737, 738, 739, 740, 824, 825, 826, 827, 828, 829, - 755, 759, 758, 756, 757, 753, 754, 707, 201, 222, - 364, 0, 450, 287, 586, 551, 545, 208, 224, 815, - 261, 816, 0, 0, 820, 0, 0, 0, 822, 821, - 0, 823, 789, 788, 0, 0, 817, 818, 0, 819, - 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, - 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, - 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, - 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, - 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, - 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, - 539, 558, 564, 476, 830, 831, 832, 833, 834, 835, - 836, 837, 298, 534, 565, 532, 582, 559, 435, 374, - 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, - 497, 228, 462, 289, 252, 855, 0, 213, 247, 231, - 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, - 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, - 428, 0, 392, 372, 514, 515, 314, 88, 513, 0, - 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 706, 0, 0, 0, 269, - 711, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 452, 431, 432, 570, 581, 571, 214, 502, 533, 240, + 479, 0, 0, 588, 248, 499, 216, 530, 498, 389, + 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, + 410, 852, 853, 255, 589, 753, 555, 221, 0, 554, + 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, + 761, 762, 279, 305, 444, 371, 445, 304, 306, 399, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 590, + 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, + 560, 566, 567, 569, 573, 574, 575, 576, 582, 580, + 577, 578, 579, 572, 402, 309, 490, 331, 369, 0, + 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, + 811, 799, 724, 815, 726, 812, 813, 721, 722, 725, + 814, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 0, + 802, 710, 709, 0, 717, 0, 743, 744, 746, 750, + 751, 752, 763, 764, 765, 773, 775, 776, 774, 777, + 778, 779, 782, 783, 784, 785, 780, 781, 786, 727, + 731, 728, 729, 730, 742, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 825, 826, 827, 828, 829, + 830, 756, 760, 759, 757, 758, 754, 755, 708, 201, + 222, 364, 0, 450, 287, 587, 551, 545, 208, 224, + 816, 261, 817, 0, 0, 821, 0, 0, 0, 823, + 822, 0, 824, 790, 789, 0, 0, 818, 819, 0, + 820, 0, 0, 203, 204, 211, 223, 233, 237, 244, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, + 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, + 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, + 526, 539, 558, 564, 476, 831, 832, 833, 834, 835, + 836, 837, 838, 298, 534, 565, 532, 583, 559, 435, + 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, + 550, 497, 228, 462, 289, 252, 856, 0, 213, 247, + 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, + 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, + 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 707, 0, 0, 0, 269, + 712, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 718, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 714, 715, 0, + 251, 315, 381, 423, 503, 417, 719, 366, 0, 0, + 492, 396, 0, 0, 0, 0, 0, 715, 716, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 97, 0, 0, 856, 840, - 806, 807, 844, 857, 858, 859, 860, 845, 0, 239, - 846, 847, 246, 848, 0, 805, 746, 748, 747, 765, - 766, 767, 768, 769, 770, 771, 744, 853, 861, 862, + 206, 408, 493, 285, 0, 97, 0, 0, 857, 841, + 807, 808, 845, 858, 859, 860, 861, 846, 0, 239, + 847, 848, 246, 849, 0, 806, 747, 749, 748, 766, + 767, 768, 769, 770, 771, 772, 745, 854, 862, 863, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 688, 703, 0, 717, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 700, 701, 0, 0, 0, 0, - 800, 0, 702, 0, 0, 710, 863, 864, 865, 866, - 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, - 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, - 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, - 897, 898, 899, 900, 901, 902, 903, 904, 713, 0, + 0, 689, 704, 0, 718, 0, 0, 0, 274, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 701, 702, 945, 0, 0, 0, + 801, 0, 703, 0, 0, 711, 864, 865, 866, 867, + 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, + 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, + 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 714, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 799, 0, 0, 561, - 0, 0, 797, 0, 0, 0, 0, 361, 0, 328, + 0, 397, 256, 0, 0, 449, 800, 0, 0, 561, + 0, 0, 798, 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, - 850, 0, 467, 421, 538, 234, 283, 454, 427, 465, + 851, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 585, 227, 259, 415, + 563, 262, 401, 547, 507, 556, 586, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 580, 214, 502, 533, 240, 479, - 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, - 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 851, 852, 255, 588, 752, 555, 221, 0, 554, 403, - 522, 531, 390, 379, 220, 529, 388, 378, 332, 760, - 761, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 589, 235, - 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, - 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, - 566, 567, 569, 572, 573, 574, 575, 581, 579, 576, - 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, - 420, 468, 241, 540, 491, 0, 0, 0, 0, 810, - 798, 723, 814, 725, 811, 812, 720, 721, 724, 813, - 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 0, 801, - 709, 708, 0, 716, 0, 742, 743, 745, 749, 750, - 751, 762, 763, 764, 772, 774, 775, 773, 776, 777, - 778, 781, 782, 783, 784, 779, 780, 785, 726, 730, - 727, 728, 729, 741, 731, 732, 733, 734, 735, 736, - 737, 738, 739, 740, 824, 825, 826, 827, 828, 829, - 755, 759, 758, 756, 757, 753, 754, 707, 201, 222, - 364, 96, 450, 287, 586, 551, 545, 208, 224, 815, - 261, 816, 0, 0, 820, 0, 0, 0, 822, 821, - 0, 823, 789, 788, 0, 0, 817, 818, 0, 819, - 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, - 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, - 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, - 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, - 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, - 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, - 539, 558, 564, 476, 830, 831, 832, 833, 834, 835, - 836, 837, 298, 534, 565, 532, 582, 559, 435, 374, - 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, - 497, 228, 462, 289, 252, 855, 0, 213, 247, 231, - 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, - 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, - 428, 392, 0, 372, 514, 515, 314, 513, 0, 719, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, - 0, 0, 0, 0, 706, 0, 0, 0, 269, 711, - 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, - 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, - 315, 381, 423, 503, 417, 718, 366, 0, 0, 492, - 396, 0, 0, 0, 0, 0, 714, 715, 0, 0, - 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, - 408, 493, 285, 0, 97, 0, 0, 856, 840, 806, - 807, 844, 857, 858, 859, 860, 845, 0, 239, 846, - 847, 246, 848, 0, 805, 746, 748, 747, 765, 766, - 767, 768, 769, 770, 771, 744, 853, 861, 862, 0, - 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, - 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, - 688, 703, 0, 717, 0, 0, 0, 274, 0, 0, + 452, 431, 432, 570, 581, 571, 214, 502, 533, 240, + 479, 0, 0, 588, 248, 499, 216, 530, 498, 389, + 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, + 410, 852, 853, 255, 589, 753, 555, 221, 0, 554, + 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, + 761, 762, 279, 305, 444, 371, 445, 304, 306, 399, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 590, + 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, + 560, 566, 567, 569, 573, 574, 575, 576, 582, 580, + 577, 578, 579, 572, 402, 309, 490, 331, 369, 0, + 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, + 811, 799, 724, 815, 726, 812, 813, 721, 722, 725, + 814, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 0, + 802, 710, 709, 0, 717, 0, 743, 744, 746, 750, + 751, 752, 763, 764, 765, 773, 775, 776, 774, 777, + 778, 779, 782, 783, 784, 785, 780, 781, 786, 727, + 731, 728, 729, 730, 742, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 825, 826, 827, 828, 829, + 830, 756, 760, 759, 757, 758, 754, 755, 708, 201, + 222, 364, 0, 450, 287, 587, 551, 545, 208, 224, + 816, 261, 817, 0, 0, 821, 0, 0, 0, 823, + 822, 0, 824, 790, 789, 0, 0, 818, 819, 0, + 820, 0, 0, 203, 204, 211, 223, 233, 237, 244, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, + 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, + 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, + 526, 539, 558, 564, 476, 831, 832, 833, 834, 835, + 836, 837, 838, 298, 534, 565, 532, 583, 559, 435, + 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, + 550, 497, 228, 462, 289, 252, 856, 0, 213, 247, + 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, + 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, + 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 707, 0, 0, 0, 269, + 712, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, + 251, 315, 381, 423, 503, 417, 719, 366, 0, 0, + 492, 396, 0, 0, 0, 0, 0, 715, 716, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, + 206, 408, 493, 285, 0, 97, 0, 0, 857, 841, + 807, 808, 845, 858, 859, 860, 861, 846, 0, 239, + 847, 848, 246, 849, 0, 806, 747, 749, 748, 766, + 767, 768, 769, 770, 771, 772, 745, 854, 862, 863, + 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, + 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, + 0, 689, 704, 0, 718, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 700, 701, 0, 0, 0, 0, 800, - 0, 702, 0, 0, 710, 863, 864, 865, 866, 867, + 0, 0, 0, 0, 701, 702, 0, 0, 0, 0, + 801, 0, 703, 0, 0, 711, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, - 898, 899, 900, 901, 902, 903, 904, 713, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, - 397, 256, 0, 0, 449, 799, 0, 0, 561, 0, - 0, 797, 0, 0, 0, 0, 361, 0, 328, 202, - 226, 0, 0, 407, 457, 469, 0, 0, 0, 850, - 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, - 286, 3517, 0, 466, 368, 523, 447, 535, 562, 563, - 262, 401, 547, 507, 556, 585, 227, 259, 415, 500, - 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, - 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, - 431, 432, 570, 580, 214, 502, 533, 240, 479, 0, - 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, - 215, 0, 453, 267, 292, 0, 0, 257, 410, 851, - 852, 255, 588, 752, 555, 221, 0, 554, 403, 522, - 531, 390, 379, 220, 529, 388, 378, 332, 760, 761, - 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, - 209, 542, 0, 210, 0, 494, 543, 589, 235, 236, - 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, - 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, - 567, 569, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, - 468, 241, 540, 491, 0, 0, 0, 0, 810, 798, - 723, 814, 725, 811, 812, 720, 721, 724, 813, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 801, 709, - 708, 0, 716, 0, 742, 743, 745, 749, 750, 751, - 762, 763, 764, 772, 774, 775, 773, 776, 777, 778, - 781, 782, 783, 784, 779, 780, 785, 726, 730, 727, - 728, 729, 741, 731, 732, 733, 734, 735, 736, 737, - 738, 739, 740, 824, 825, 826, 827, 828, 829, 755, - 759, 758, 756, 757, 753, 754, 707, 201, 222, 364, - 0, 450, 287, 586, 551, 545, 208, 224, 815, 261, - 816, 0, 0, 820, 0, 0, 0, 822, 821, 0, - 823, 789, 788, 0, 0, 817, 818, 0, 819, 0, - 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, - 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, - 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, - 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, - 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, - 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, - 558, 564, 476, 830, 831, 832, 833, 834, 835, 836, - 837, 298, 534, 565, 532, 582, 559, 435, 374, 0, - 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, - 228, 462, 289, 252, 855, 0, 213, 247, 231, 258, - 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, - 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, - 392, 0, 372, 514, 515, 314, 513, 0, 719, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, - 0, 0, 0, 706, 0, 0, 0, 269, 711, 0, - 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, - 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, - 381, 423, 503, 417, 718, 366, 0, 0, 492, 396, - 0, 0, 0, 0, 0, 714, 715, 0, 0, 0, - 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, - 493, 285, 0, 97, 0, 1563, 856, 840, 806, 807, - 844, 857, 858, 859, 860, 845, 0, 239, 846, 847, - 246, 848, 0, 805, 746, 748, 747, 765, 766, 767, - 768, 769, 770, 771, 744, 853, 861, 862, 0, 264, - 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 688, - 703, 0, 717, 0, 0, 0, 274, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 700, 701, 0, 0, 0, 0, 800, 0, - 702, 0, 0, 710, 863, 864, 865, 866, 867, 868, - 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, - 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, - 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, - 899, 900, 901, 902, 903, 904, 713, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, - 256, 0, 0, 449, 799, 0, 0, 561, 0, 0, - 797, 0, 0, 0, 0, 361, 0, 328, 202, 226, - 0, 0, 407, 457, 469, 0, 0, 0, 850, 0, - 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, - 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, - 401, 547, 507, 556, 585, 227, 259, 415, 500, 541, - 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, - 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, - 432, 570, 580, 214, 502, 533, 240, 479, 0, 0, - 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, - 0, 453, 267, 292, 0, 0, 257, 410, 851, 852, - 255, 588, 752, 555, 221, 0, 554, 403, 522, 531, - 390, 379, 220, 529, 388, 378, 332, 760, 761, 279, - 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 589, 235, 236, 238, - 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, - 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, - 569, 572, 573, 574, 575, 581, 579, 576, 577, 578, - 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, - 241, 540, 491, 0, 0, 0, 0, 810, 798, 723, - 814, 725, 811, 812, 720, 721, 724, 813, 590, 591, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 0, 801, 709, 708, - 0, 716, 0, 742, 743, 745, 749, 750, 751, 762, - 763, 764, 772, 774, 775, 773, 776, 777, 778, 781, - 782, 783, 784, 779, 780, 785, 726, 730, 727, 728, - 729, 741, 731, 732, 733, 734, 735, 736, 737, 738, - 739, 740, 824, 825, 826, 827, 828, 829, 755, 759, - 758, 756, 757, 753, 754, 707, 201, 222, 364, 0, - 450, 287, 586, 551, 545, 208, 224, 815, 261, 816, - 0, 0, 820, 0, 0, 0, 822, 821, 0, 823, - 789, 788, 0, 0, 817, 818, 0, 819, 0, 0, - 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, - 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, - 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, - 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, - 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, - 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, - 564, 476, 830, 831, 832, 833, 834, 835, 836, 837, - 298, 534, 565, 532, 582, 559, 435, 374, 0, 0, - 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, - 462, 289, 252, 855, 0, 213, 247, 231, 258, 273, - 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, - 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, - 0, 372, 514, 515, 314, 513, 0, 719, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, - 0, 0, 706, 0, 0, 0, 269, 711, 0, 0, - 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, - 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, - 423, 503, 417, 718, 366, 0, 0, 492, 396, 0, - 0, 0, 0, 0, 714, 715, 0, 0, 0, 0, - 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, - 285, 0, 97, 0, 0, 856, 840, 806, 807, 844, - 857, 858, 859, 860, 845, 0, 239, 846, 847, 246, - 848, 0, 805, 746, 748, 747, 765, 766, 767, 768, - 769, 770, 771, 744, 853, 861, 862, 0, 264, 319, - 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, - 230, 0, 0, 0, 0, 0, 0, 0, 688, 703, - 0, 717, 0, 0, 0, 274, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 700, 701, 944, 0, 0, 0, 800, 0, 702, - 0, 0, 710, 863, 864, 865, 866, 867, 868, 869, - 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, - 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, - 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, - 900, 901, 902, 903, 904, 713, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, - 0, 0, 449, 799, 0, 0, 561, 0, 0, 797, - 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, - 0, 407, 457, 469, 0, 0, 0, 850, 0, 467, - 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, - 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, - 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, - 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, - 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, - 570, 580, 214, 502, 533, 240, 479, 0, 0, 587, - 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, - 453, 267, 292, 0, 0, 257, 410, 851, 852, 255, - 588, 752, 555, 221, 0, 554, 403, 522, 531, 390, - 379, 220, 529, 388, 378, 332, 760, 761, 279, 305, - 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, - 0, 210, 0, 494, 543, 589, 235, 236, 238, 0, - 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, - 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, - 572, 573, 574, 575, 581, 579, 576, 577, 578, 571, - 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, - 540, 491, 0, 0, 0, 0, 810, 798, 723, 814, - 725, 811, 812, 720, 721, 724, 813, 590, 591, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 0, 801, 709, 708, 0, - 716, 0, 742, 743, 745, 749, 750, 751, 762, 763, - 764, 772, 774, 775, 773, 776, 777, 778, 781, 782, - 783, 784, 779, 780, 785, 726, 730, 727, 728, 729, - 741, 731, 732, 733, 734, 735, 736, 737, 738, 739, - 740, 824, 825, 826, 827, 828, 829, 755, 759, 758, - 756, 757, 753, 754, 707, 201, 222, 364, 0, 450, - 287, 586, 551, 545, 208, 224, 815, 261, 816, 0, - 0, 820, 0, 0, 0, 822, 821, 0, 823, 789, - 788, 0, 0, 817, 818, 0, 819, 0, 0, 203, - 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, - 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, - 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, - 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, - 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, - 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, - 476, 830, 831, 832, 833, 834, 835, 836, 837, 298, - 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, - 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, - 289, 252, 855, 0, 213, 247, 231, 258, 273, 276, - 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, - 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, - 372, 514, 515, 314, 513, 0, 719, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, - 0, 706, 0, 0, 0, 269, 711, 0, 0, 0, - 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, - 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 718, 366, 0, 0, 492, 396, 0, 0, - 0, 0, 0, 714, 715, 0, 0, 0, 0, 0, - 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, - 0, 97, 0, 0, 856, 840, 806, 807, 844, 857, - 858, 859, 860, 845, 0, 239, 846, 847, 246, 848, - 0, 805, 746, 748, 747, 765, 766, 767, 768, 769, - 770, 771, 744, 853, 861, 862, 0, 264, 319, 271, - 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 688, 703, 0, - 717, 0, 0, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 700, 701, 0, 0, 0, 0, 800, 0, 702, 0, - 0, 710, 863, 864, 865, 866, 867, 868, 869, 870, - 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, - 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, - 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, - 901, 902, 903, 904, 713, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, - 0, 449, 799, 0, 0, 561, 0, 0, 797, 0, - 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, - 407, 457, 469, 0, 0, 0, 850, 0, 467, 421, - 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, - 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, - 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, - 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 580, 214, 502, 533, 240, 479, 0, 0, 587, 248, - 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 851, 852, 255, 588, - 752, 555, 221, 0, 554, 403, 522, 531, 390, 379, - 220, 529, 388, 378, 332, 760, 761, 279, 305, 444, - 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 589, 235, 236, 238, 0, 278, - 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 0, 517, 536, 548, 560, 566, 567, 569, 572, - 573, 574, 575, 581, 579, 576, 577, 578, 571, 402, - 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, - 491, 0, 0, 0, 0, 810, 798, 723, 814, 725, - 811, 812, 720, 721, 724, 813, 590, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 0, 801, 709, 708, 0, 716, - 0, 742, 743, 745, 749, 750, 751, 762, 763, 764, - 772, 774, 775, 773, 776, 777, 778, 781, 782, 783, - 784, 779, 780, 785, 726, 730, 727, 728, 729, 741, - 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, - 824, 825, 826, 827, 828, 829, 755, 759, 758, 756, - 757, 753, 754, 707, 201, 222, 364, 0, 450, 287, - 586, 551, 545, 208, 224, 815, 261, 816, 0, 0, - 820, 0, 0, 0, 822, 821, 0, 823, 789, 788, - 0, 0, 817, 818, 0, 819, 0, 0, 203, 204, - 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, - 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, - 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, - 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, - 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, - 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 830, 831, 832, 833, 834, 835, 836, 837, 298, 534, - 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, - 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, - 252, 855, 0, 213, 247, 231, 258, 273, 276, 322, - 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, - 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, - 514, 515, 314, 513, 0, 719, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, - 706, 0, 0, 0, 269, 711, 0, 0, 0, 362, - 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, - 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, - 417, 718, 366, 0, 0, 492, 396, 0, 0, 0, - 0, 0, 714, 715, 0, 0, 0, 0, 0, 0, - 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, - 97, 0, 0, 856, 840, 806, 807, 844, 857, 858, - 859, 860, 845, 0, 239, 846, 847, 246, 848, 0, - 805, 746, 748, 747, 765, 766, 767, 768, 769, 770, - 771, 744, 853, 861, 862, 0, 264, 319, 271, 263, - 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, - 0, 0, 0, 0, 0, 0, 0, 703, 0, 717, - 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 700, - 701, 0, 0, 0, 0, 800, 0, 702, 0, 0, - 710, 863, 864, 865, 866, 867, 868, 869, 870, 871, - 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, - 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, - 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, - 902, 903, 904, 713, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, - 449, 799, 0, 0, 561, 0, 0, 797, 0, 0, - 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, - 457, 469, 0, 0, 0, 850, 0, 467, 421, 538, - 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, - 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, - 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, - 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, - 243, 232, 525, 544, 288, 452, 431, 432, 570, 580, - 214, 502, 533, 240, 479, 0, 0, 587, 248, 499, - 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, - 292, 0, 0, 257, 410, 851, 852, 255, 588, 752, - 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, - 529, 388, 378, 332, 760, 761, 279, 305, 444, 371, - 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, - 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, - 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, - 0, 517, 536, 548, 560, 566, 567, 569, 572, 573, - 574, 575, 581, 579, 576, 577, 578, 571, 402, 309, - 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, - 0, 0, 0, 0, 810, 798, 723, 814, 725, 811, - 812, 720, 721, 724, 813, 590, 591, 592, 593, 594, - 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 0, 801, 709, 708, 0, 716, 0, - 742, 743, 745, 749, 750, 751, 762, 763, 764, 772, - 774, 775, 773, 776, 777, 778, 781, 782, 783, 784, - 779, 780, 785, 726, 730, 727, 728, 729, 741, 731, - 732, 733, 734, 735, 736, 737, 738, 739, 740, 824, - 825, 826, 827, 828, 829, 755, 759, 758, 756, 757, - 753, 754, 707, 201, 222, 364, 0, 450, 287, 586, - 551, 545, 208, 224, 815, 261, 816, 0, 0, 820, - 0, 0, 0, 822, 821, 0, 823, 789, 788, 0, - 0, 817, 818, 0, 819, 0, 0, 203, 204, 211, - 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, - 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, - 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, - 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, - 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, - 495, 496, 501, 524, 526, 539, 558, 564, 476, 830, - 831, 832, 833, 834, 835, 836, 837, 298, 534, 565, - 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, - 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, - 855, 0, 213, 247, 231, 258, 273, 276, 322, 387, - 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, - 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, - 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, - 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, - 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, - 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, - 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, - 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, - 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, - 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, - 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, - 0, 0, 1379, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1380, 1381, 1382, 1383, 1384, - 1385, 1386, 1388, 1387, 1389, 1390, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, - 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, - 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, - 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, - 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, - 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, - 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, - 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, - 232, 525, 544, 288, 452, 431, 432, 570, 580, 214, - 502, 533, 240, 479, 0, 0, 587, 248, 499, 216, - 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, - 0, 0, 257, 410, 527, 528, 255, 588, 229, 555, - 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, - 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, - 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, - 494, 543, 589, 235, 236, 238, 0, 278, 282, 290, - 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, - 517, 536, 548, 560, 566, 567, 569, 572, 573, 574, - 575, 581, 579, 576, 577, 578, 571, 402, 309, 490, - 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 590, 591, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, - 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, - 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, - 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, - 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, - 446, 0, 201, 222, 364, 0, 450, 287, 586, 551, - 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, - 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, - 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, - 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, - 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, - 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, - 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, - 441, 442, 312, 313, 583, 584, 298, 534, 565, 532, - 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, - 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, - 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, - 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, - 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, - 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, - 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, - 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, - 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, - 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, - 0, 0, 666, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, - 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, - 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, - 0, 0, 0, 0, 0, 0, 230, 0, 1017, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, - 0, 1016, 561, 0, 0, 0, 0, 0, 1013, 1014, - 361, 973, 328, 202, 226, 1007, 1011, 407, 457, 469, - 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, - 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, - 447, 535, 562, 563, 262, 401, 547, 507, 556, 585, - 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, - 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, - 525, 544, 288, 452, 431, 432, 570, 580, 214, 502, - 533, 240, 479, 0, 0, 587, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 588, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 572, 573, 574, 575, - 581, 579, 576, 577, 578, 571, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 590, 591, 592, 593, 594, 595, 596, - 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 586, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 583, 584, 298, 534, 565, 532, 582, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 1526, 840, 0, 0, 1523, 0, 0, 0, 0, 1521, - 0, 239, 1522, 1520, 246, 1525, 0, 805, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 585, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 580, 214, 502, 533, - 240, 479, 0, 0, 587, 248, 499, 216, 530, 498, - 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 527, 528, 255, 588, 229, 555, 221, 0, - 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, - 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, - 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, - 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, - 548, 560, 566, 567, 569, 572, 573, 574, 575, 581, - 579, 576, 577, 578, 571, 402, 309, 490, 331, 369, - 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 590, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, - 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, - 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, - 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, - 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, - 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, - 201, 222, 364, 0, 450, 287, 586, 551, 545, 208, - 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, - 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, - 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, - 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, - 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, - 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, - 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, - 312, 313, 583, 584, 298, 534, 565, 532, 582, 559, - 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, - 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, - 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, - 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, - 391, 265, 428, 0, 392, 372, 514, 515, 314, 88, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 97, 0, 0, - 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 585, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 580, 214, 502, 533, - 240, 479, 0, 0, 587, 248, 499, 216, 530, 498, - 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 527, 528, 255, 588, 229, 555, 221, 0, - 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, - 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, - 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, - 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, - 548, 560, 566, 567, 569, 572, 573, 574, 575, 581, - 579, 576, 577, 578, 571, 402, 309, 490, 331, 369, - 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 590, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, - 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, - 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, - 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, - 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, - 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, - 201, 222, 364, 96, 450, 287, 586, 551, 545, 208, - 224, 0, 261, 0, 0, 0, 0, 0, 0, 2160, - 0, 0, 2159, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, - 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, - 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, - 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, - 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, - 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, - 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, - 312, 313, 583, 584, 298, 534, 565, 532, 582, 559, - 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, - 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, - 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, - 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, - 391, 265, 428, 1582, 0, 372, 514, 515, 314, 513, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 411, 0, 0, 0, 1584, 0, 0, 0, 0, - 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, - 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, - 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, - 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, - 323, 206, 408, 493, 285, 0, 0, 0, 0, 1586, - 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, - 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, - 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, - 0, 0, 0, 0, 230, 0, 0, 0, 1360, 0, - 1361, 1362, 0, 0, 0, 0, 0, 0, 0, 274, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 898, 899, 900, 901, 902, 903, 904, 905, 714, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, + 0, 397, 256, 0, 0, 449, 800, 0, 0, 561, + 0, 0, 798, 0, 0, 0, 0, 361, 0, 328, + 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, + 851, 0, 467, 421, 538, 234, 283, 454, 427, 465, + 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, + 563, 262, 401, 547, 507, 556, 586, 227, 259, 415, + 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, + 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, + 452, 431, 432, 570, 581, 571, 214, 502, 533, 240, + 479, 0, 0, 588, 248, 499, 216, 530, 498, 389, + 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, + 410, 852, 853, 255, 589, 753, 555, 221, 0, 554, + 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, + 761, 762, 279, 305, 444, 371, 445, 304, 306, 399, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 590, + 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, + 560, 566, 567, 569, 573, 574, 575, 576, 582, 580, + 577, 578, 579, 572, 402, 309, 490, 331, 369, 0, + 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, + 811, 799, 724, 815, 726, 812, 813, 721, 722, 725, + 814, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 0, + 802, 710, 709, 0, 717, 0, 743, 744, 746, 750, + 751, 752, 763, 764, 765, 773, 775, 776, 774, 777, + 778, 779, 782, 783, 784, 785, 780, 781, 786, 727, + 731, 728, 729, 730, 742, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 825, 826, 827, 828, 829, + 830, 756, 760, 759, 757, 758, 754, 755, 708, 201, + 222, 364, 0, 450, 287, 587, 551, 545, 208, 224, + 816, 261, 817, 0, 0, 821, 0, 0, 0, 823, + 822, 0, 824, 790, 789, 0, 0, 818, 819, 0, + 820, 0, 0, 203, 204, 211, 223, 233, 237, 244, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, + 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, + 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, + 526, 539, 558, 564, 476, 831, 832, 833, 834, 835, + 836, 837, 838, 298, 534, 565, 532, 583, 559, 435, + 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, + 550, 497, 228, 462, 289, 252, 856, 0, 213, 247, + 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, + 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, + 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 707, 0, 0, 0, 269, + 712, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, + 251, 315, 381, 423, 503, 417, 719, 366, 0, 0, + 492, 396, 0, 0, 0, 0, 0, 715, 716, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, + 206, 408, 493, 285, 0, 97, 0, 0, 857, 841, + 807, 808, 845, 858, 859, 860, 861, 846, 0, 239, + 847, 848, 246, 849, 0, 806, 747, 749, 748, 766, + 767, 768, 769, 770, 771, 772, 745, 854, 862, 863, + 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, + 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, + 0, 0, 704, 0, 718, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 701, 702, 0, 0, 0, 0, + 801, 0, 703, 0, 0, 711, 864, 865, 866, 867, + 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, + 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, + 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 714, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, + 0, 397, 256, 0, 0, 449, 800, 0, 0, 561, + 0, 0, 798, 0, 0, 0, 0, 361, 0, 328, + 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, + 851, 0, 467, 421, 538, 234, 283, 454, 427, 465, + 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, + 563, 262, 401, 547, 507, 556, 586, 227, 259, 415, + 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, + 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, + 452, 431, 432, 570, 581, 571, 214, 502, 533, 240, + 479, 0, 0, 588, 248, 499, 216, 530, 498, 389, + 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, + 410, 852, 853, 255, 589, 753, 555, 221, 0, 554, + 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, + 761, 762, 279, 305, 444, 371, 445, 304, 306, 399, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 590, + 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, + 560, 566, 567, 569, 573, 574, 575, 576, 582, 580, + 577, 578, 579, 572, 402, 309, 490, 331, 369, 0, + 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, + 811, 799, 724, 815, 726, 812, 813, 721, 722, 725, + 814, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 0, + 802, 710, 709, 0, 717, 0, 743, 744, 746, 750, + 751, 752, 763, 764, 765, 773, 775, 776, 774, 777, + 778, 779, 782, 783, 784, 785, 780, 781, 786, 727, + 731, 728, 729, 730, 742, 732, 733, 734, 735, 736, + 737, 738, 739, 740, 741, 825, 826, 827, 828, 829, + 830, 756, 760, 759, 757, 758, 754, 755, 708, 201, + 222, 364, 0, 450, 287, 587, 551, 545, 208, 224, + 816, 261, 817, 0, 0, 821, 0, 0, 0, 823, + 822, 0, 824, 790, 789, 0, 0, 818, 819, 0, + 820, 0, 0, 203, 204, 211, 223, 233, 237, 244, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, + 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, + 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, + 526, 539, 558, 564, 476, 831, 832, 833, 834, 835, + 836, 837, 838, 298, 534, 565, 532, 583, 559, 435, + 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, + 550, 497, 228, 462, 289, 252, 856, 0, 213, 247, + 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, + 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, + 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, + 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, + 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, + 206, 408, 493, 285, 0, 0, 0, 0, 0, 667, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, + 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, + 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, + 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, + 0, 0, 0, 230, 0, 0, 0, 0, 1381, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1390, 1389, + 1391, 1392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, - 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, - 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, - 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, - 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, - 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, - 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, - 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, - 288, 452, 431, 432, 570, 580, 214, 502, 533, 240, - 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, + 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, + 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, + 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, + 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, + 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, + 563, 262, 401, 547, 507, 556, 586, 227, 259, 415, + 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, + 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, + 452, 431, 432, 570, 581, 571, 214, 502, 533, 240, + 479, 0, 0, 588, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 527, 528, 255, 588, 229, 555, 221, 0, 554, + 410, 527, 528, 255, 589, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 589, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, - 560, 566, 567, 569, 572, 573, 574, 575, 581, 579, - 576, 577, 578, 571, 402, 309, 490, 331, 369, 0, + 560, 566, 567, 569, 573, 574, 575, 576, 582, 580, + 577, 578, 579, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 590, 591, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 608, 380, + 0, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, - 222, 364, 0, 450, 287, 586, 551, 545, 208, 224, + 222, 364, 0, 450, 287, 587, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, @@ -3955,27 +3629,26 @@ var yyAct = [...]int{ 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 583, 584, 298, 534, 565, 532, 582, 559, 435, + 313, 584, 585, 298, 534, 565, 532, 583, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 0, 392, 372, 514, 515, 314, 88, 513, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, - 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, - 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, - 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, - 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, - 323, 206, 408, 493, 285, 0, 97, 0, 1563, 0, - 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, - 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, - 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, - 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, + 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, + 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, + 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, + 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, + 206, 408, 493, 285, 0, 0, 0, 0, 0, 667, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, + 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, + 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, + 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, + 0, 0, 0, 230, 0, 1018, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3983,36 +3656,37 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, - 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, - 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, - 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, - 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, - 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, - 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, - 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, - 288, 452, 431, 432, 570, 580, 214, 502, 533, 240, - 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, + 0, 397, 256, 0, 0, 449, 0, 0, 1017, 561, + 0, 0, 0, 0, 0, 1014, 1015, 361, 974, 328, + 202, 226, 1008, 1012, 407, 457, 469, 0, 0, 0, + 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, + 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, + 563, 262, 401, 547, 507, 556, 586, 227, 259, 415, + 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, + 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, + 452, 431, 432, 570, 581, 571, 214, 502, 533, 240, + 479, 0, 0, 588, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 527, 528, 255, 588, 229, 555, 221, 0, 554, + 410, 527, 528, 255, 589, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 589, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, - 560, 566, 567, 569, 572, 573, 574, 575, 581, 579, - 576, 577, 578, 571, 402, 309, 490, 331, 369, 0, + 560, 566, 567, 569, 573, 574, 575, 576, 582, 580, + 577, 578, 579, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 590, 591, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 608, 380, + 0, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, - 222, 364, 96, 450, 287, 586, 551, 545, 208, 224, + 222, 364, 0, 450, 287, 587, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, @@ -4022,7 +3696,7 @@ var yyAct = [...]int{ 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 583, 584, 298, 534, 565, 532, 582, 559, 435, + 313, 584, 585, 298, 534, 565, 532, 583, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, @@ -4035,9 +3709,9 @@ var yyAct = [...]int{ 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 97, 0, 0, 0, 199, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, - 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, + 206, 408, 493, 285, 0, 0, 0, 0, 1528, 841, + 0, 0, 1525, 0, 0, 0, 0, 1523, 0, 239, + 1524, 1522, 246, 1527, 0, 806, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, @@ -4055,462 +3729,2138 @@ var yyAct = [...]int{ 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 585, 227, 259, 415, + 563, 262, 401, 547, 507, 556, 586, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 580, 214, 502, 533, 240, 479, - 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, - 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 527, 528, 255, 588, 229, 555, 221, 0, 554, 403, - 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, - 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 589, 235, - 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, - 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, - 566, 567, 569, 572, 573, 574, 575, 581, 579, 576, - 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, - 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, + 452, 431, 432, 570, 581, 571, 214, 502, 533, 240, + 479, 0, 0, 588, 248, 499, 216, 530, 498, 389, + 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, + 410, 527, 528, 255, 589, 229, 555, 221, 0, 554, + 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, + 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 590, + 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, + 560, 566, 567, 569, 573, 574, 575, 576, 582, 580, + 577, 578, 579, 572, 402, 309, 490, 331, 369, 0, + 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 608, 380, 481, - 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, - 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, - 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, - 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, - 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, - 364, 0, 450, 287, 586, 551, 545, 208, 224, 0, - 261, 0, 0, 0, 0, 0, 0, 2160, 0, 0, - 2159, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, - 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, - 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, - 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, - 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, - 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, - 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, - 583, 584, 298, 534, 565, 532, 582, 559, 435, 374, - 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, - 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, - 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, - 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, - 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, - 0, 0, 0, 2111, 0, 0, 0, 0, 269, 0, - 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, - 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, - 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, - 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, - 408, 493, 285, 0, 0, 0, 0, 1767, 199, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, - 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, - 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, - 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, - 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, + 0, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 609, 380, + 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, + 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, + 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, + 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, + 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, + 222, 364, 0, 450, 287, 587, 551, 545, 208, 224, + 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, + 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, + 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, + 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, + 313, 584, 585, 298, 534, 565, 532, 583, 559, 435, + 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, + 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, + 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, + 265, 428, 0, 392, 372, 514, 515, 314, 88, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, + 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, + 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, + 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, + 323, 206, 408, 493, 285, 0, 97, 0, 0, 0, + 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, + 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, + 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, + 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, - 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, - 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, - 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, - 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, - 286, 0, 2109, 466, 368, 523, 447, 535, 562, 563, - 262, 401, 547, 507, 556, 585, 227, 259, 415, 500, - 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, - 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, - 431, 432, 570, 580, 214, 502, 533, 240, 479, 0, - 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, - 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, - 528, 255, 588, 229, 555, 221, 0, 554, 403, 522, - 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, - 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, - 209, 542, 0, 210, 0, 494, 543, 589, 235, 236, - 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, - 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, - 567, 569, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, - 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 380, 481, 537, - 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, - 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, - 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, - 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, - 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, - 0, 450, 287, 586, 551, 545, 208, 224, 0, 261, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, - 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, - 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, - 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, - 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, - 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, - 558, 564, 476, 299, 300, 441, 442, 312, 313, 583, - 584, 298, 534, 565, 532, 582, 559, 435, 374, 0, - 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, - 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, - 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, - 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, - 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, - 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, - 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, - 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, - 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, - 493, 285, 0, 0, 0, 0, 0, 666, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, - 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, - 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, - 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, - 0, 0, 0, 0, 0, 967, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, - 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, - 0, 0, 0, 0, 0, 361, 973, 328, 202, 226, - 971, 0, 407, 457, 469, 0, 0, 0, 254, 0, - 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, - 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, - 401, 547, 507, 556, 585, 227, 259, 415, 500, 541, - 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, - 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, - 432, 570, 580, 214, 502, 533, 240, 479, 0, 0, - 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, - 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, - 255, 588, 229, 555, 221, 0, 554, 403, 522, 531, - 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, - 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 589, 235, 236, 238, - 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, - 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, - 569, 572, 573, 574, 575, 581, 579, 576, 577, 578, - 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, - 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 590, 591, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 608, 380, 481, 537, 333, - 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, - 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, - 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, - 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, - 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, - 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, - 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, - 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, - 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, - 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, - 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, - 564, 476, 299, 300, 441, 442, 312, 313, 583, 584, - 298, 534, 565, 532, 582, 559, 435, 374, 0, 0, - 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, - 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, - 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, - 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, - 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, - 0, 2111, 0, 0, 0, 0, 269, 0, 0, 0, - 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, - 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, - 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, - 285, 0, 0, 0, 0, 1767, 199, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, - 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, - 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, - 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, + 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, + 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, + 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 586, 227, 259, + 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, + 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, + 288, 452, 431, 432, 570, 581, 571, 214, 502, 533, + 240, 479, 0, 0, 588, 248, 499, 216, 530, 498, + 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, + 257, 410, 527, 528, 255, 589, 229, 555, 221, 0, + 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, + 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, + 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, + 590, 235, 236, 238, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, + 548, 560, 566, 567, 569, 573, 574, 575, 576, 582, + 580, 577, 578, 579, 572, 402, 309, 490, 331, 369, + 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, + 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, + 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, + 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, + 201, 222, 364, 96, 450, 287, 587, 551, 545, 208, + 224, 0, 261, 0, 0, 0, 0, 0, 0, 2169, + 0, 0, 2168, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, + 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, + 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, + 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, + 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, + 312, 313, 584, 585, 298, 534, 565, 532, 583, 559, + 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, + 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, + 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, + 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, + 391, 265, 428, 1584, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 0, 0, 1586, 0, 0, 0, 0, + 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, + 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, + 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, + 323, 206, 408, 493, 285, 0, 0, 0, 0, 1588, + 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, + 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, + 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, + 0, 0, 0, 0, 230, 0, 0, 0, 1362, 0, + 1363, 1364, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, - 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, - 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, - 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, - 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, - 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, - 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, - 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, - 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, - 570, 580, 214, 502, 533, 240, 479, 0, 0, 587, - 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, - 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, - 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, - 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, - 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, - 0, 210, 0, 494, 543, 589, 235, 236, 238, 0, - 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, - 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, - 572, 573, 574, 575, 581, 579, 576, 577, 578, 571, - 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, - 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 590, 591, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 608, 380, 481, 537, 333, 345, - 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, - 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, - 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, - 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, - 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, - 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, - 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, - 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, - 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, - 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, - 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, - 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, - 476, 299, 300, 441, 442, 312, 313, 583, 584, 298, - 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, - 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, - 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, - 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, - 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, - 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, - 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, - 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, - 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, - 0, 0, 0, 1563, 0, 666, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, - 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, - 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, - 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, - 0, 449, 0, 0, 0, 561, 0, 0, 0, 3427, - 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, - 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, - 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, - 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, - 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, - 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 580, 214, 502, 533, 240, 479, 0, 0, 587, 248, - 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 588, - 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, - 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, - 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 589, 235, 236, 238, 0, 278, - 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 0, 517, 536, 548, 560, 566, 567, 569, 572, - 573, 574, 575, 581, 579, 576, 577, 578, 571, 402, - 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, - 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 590, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 608, 380, 481, 537, 333, 345, 348, - 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, - 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, - 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, - 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, - 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, - 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, - 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, - 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, - 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, - 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, - 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, - 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 299, 300, 441, 442, 312, 313, 583, 584, 298, 534, - 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, - 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, - 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, - 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, - 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, - 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, - 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, - 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, - 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, - 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, - 0, 0, 0, 1944, 666, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, - 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, - 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, - 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, + 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, + 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 586, 227, 259, + 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, + 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, + 288, 452, 431, 432, 570, 581, 571, 214, 502, 533, + 240, 479, 0, 0, 588, 248, 499, 216, 530, 498, + 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, + 257, 410, 527, 528, 255, 589, 229, 555, 221, 0, + 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, + 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, + 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, + 590, 235, 236, 238, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, + 548, 560, 566, 567, 569, 573, 574, 575, 576, 582, + 580, 577, 578, 579, 572, 402, 309, 490, 331, 369, + 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 591, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, + 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, + 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, + 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, + 201, 222, 364, 0, 450, 287, 587, 551, 545, 208, + 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, + 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, + 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, + 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, + 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, + 312, 313, 584, 585, 298, 534, 565, 532, 583, 559, + 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, + 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, + 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, + 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, + 391, 265, 428, 0, 392, 372, 514, 515, 314, 88, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 97, 0, 1565, + 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1945, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, - 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, - 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, - 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, - 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, - 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, - 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, - 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, - 243, 232, 525, 544, 288, 452, 431, 432, 570, 580, - 214, 502, 533, 240, 479, 0, 0, 587, 248, 499, - 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, - 292, 0, 0, 257, 410, 527, 528, 255, 588, 229, - 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, - 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, - 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, - 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, - 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, - 0, 517, 536, 548, 560, 566, 567, 569, 572, 573, - 574, 575, 581, 579, 576, 577, 578, 571, 402, 309, - 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 590, 591, 592, 593, 594, - 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 608, 380, 481, 537, 333, 345, 348, 338, - 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, - 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, - 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, - 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, - 375, 446, 0, 201, 222, 364, 0, 450, 287, 586, - 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, - 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, - 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, - 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, - 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, - 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, - 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, - 300, 441, 442, 312, 313, 583, 584, 298, 534, 565, - 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, - 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, - 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, - 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, - 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, - 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, - 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, - 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, - 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, - 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, - 0, 0, 2540, 666, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, - 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, - 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, - 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2541, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, - 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, - 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, - 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, - 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, - 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, - 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, - 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, - 232, 525, 544, 288, 452, 431, 432, 570, 580, 214, - 502, 533, 240, 479, 0, 0, 587, 248, 499, 216, - 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, - 0, 0, 257, 410, 527, 528, 255, 588, 229, 555, - 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, - 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, - 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, - 494, 543, 589, 235, 236, 238, 0, 278, 282, 290, - 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, - 517, 536, 548, 560, 566, 567, 569, 572, 573, 574, - 575, 581, 579, 576, 577, 578, 571, 402, 309, 490, - 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 590, 591, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, - 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, - 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, - 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, - 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, - 446, 0, 201, 222, 364, 0, 450, 287, 586, 551, - 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, - 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, - 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, - 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, - 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, - 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, - 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, - 441, 442, 312, 313, 583, 584, 298, 534, 565, 532, - 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, - 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, - 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, - 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, - 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, - 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, - 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, - 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, - 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, - 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, - 0, 0, 666, 0, 0, 0, 0, 2525, 0, 0, - 0, 0, 239, 0, 0, 246, 2526, 0, 0, 347, - 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, - 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, - 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 96, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 97, 0, 0, + 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 2169, 0, 0, 2168, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 2120, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 1769, 199, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 2118, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 968, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 974, 328, 202, 226, 972, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 2120, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 1769, 199, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 1565, + 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 3452, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 1953, 667, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1954, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 2561, 667, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2562, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 0, 667, 0, 0, 0, 0, 2546, 0, 0, 0, + 0, 239, 0, 0, 246, 2547, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 1607, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 1606, 667, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 0, 669, 670, 671, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 3576, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 1769, 199, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 3452, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 97, 0, 0, + 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 2170, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 1588, 667, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 1908, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 1899, 667, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 1736, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 1734, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 1732, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 1730, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 1728, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 1724, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 1722, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 1720, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 1695, 0, 0, + 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 1592, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 97, 0, 0, + 0, 841, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4518,36 +5868,36 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, - 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, - 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, - 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, - 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, - 447, 535, 562, 563, 262, 401, 547, 507, 556, 585, - 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, - 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, - 525, 544, 288, 452, 431, 432, 570, 580, 214, 502, - 533, 240, 479, 0, 0, 587, 248, 499, 216, 530, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 588, 229, 555, 221, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 572, 573, 574, 575, - 581, 579, 576, 577, 578, 571, 402, 309, 490, 331, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 590, 591, 592, 593, 594, 595, 596, - 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 586, 551, 545, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, @@ -4557,7 +5907,7 @@ var yyAct = [...]int{ 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 583, 584, 298, 534, 565, 532, 582, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, @@ -4565,13 +5915,13 @@ var yyAct = [...]int{ 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 1605, 0, 0, 0, 362, 266, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 1604, 666, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, @@ -4584,639 +5934,37 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1340, 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 585, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 580, 214, 502, 533, - 240, 479, 0, 0, 587, 248, 499, 216, 530, 498, - 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 527, 528, 255, 588, 229, 555, 221, 0, - 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, - 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, - 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, - 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, - 548, 560, 566, 567, 569, 572, 573, 574, 575, 581, - 579, 576, 577, 578, 571, 402, 309, 490, 331, 369, - 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 590, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, - 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, - 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, - 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, - 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, - 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, - 201, 222, 364, 0, 450, 287, 586, 551, 545, 208, - 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, - 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, - 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, - 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, - 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, - 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, - 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, - 312, 313, 583, 584, 298, 534, 565, 532, 582, 559, - 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, - 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, - 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, - 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, - 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, - 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, - 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, - 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, - 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, - 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, - 668, 669, 670, 0, 0, 0, 0, 0, 0, 0, - 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, - 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, - 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, - 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, - 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, - 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, - 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, - 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, - 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, - 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, - 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, - 288, 452, 431, 432, 570, 580, 214, 502, 533, 240, - 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, - 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 527, 528, 255, 588, 229, 555, 221, 0, 554, - 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 589, - 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, - 560, 566, 567, 569, 572, 573, 574, 575, 581, 579, - 576, 577, 578, 571, 402, 309, 490, 331, 369, 0, - 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 590, 591, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 608, 380, - 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, - 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, - 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, - 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, - 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, - 222, 364, 0, 450, 287, 586, 551, 545, 208, 224, - 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 583, 584, 298, 534, 565, 532, 582, 559, 435, - 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, - 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, - 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 0, 0, 0, 0, 666, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, - 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, - 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, - 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, - 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, - 0, 0, 0, 3551, 0, 0, 0, 361, 0, 328, - 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, - 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, - 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 585, 227, 259, 415, - 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, - 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 580, 214, 502, 533, 240, 479, - 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, - 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 527, 528, 255, 588, 229, 555, 221, 0, 554, 403, - 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, - 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 589, 235, - 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, - 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, - 566, 567, 569, 572, 573, 574, 575, 581, 579, 576, - 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, - 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 608, 380, 481, - 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, - 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, - 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, - 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, - 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, - 364, 0, 450, 287, 586, 551, 545, 208, 224, 0, - 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, - 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, - 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, - 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, - 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, - 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, - 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, - 583, 584, 298, 534, 565, 532, 582, 559, 435, 374, - 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, - 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, - 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, - 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, - 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, - 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, - 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, - 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, - 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, - 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, - 408, 493, 285, 0, 0, 0, 0, 1767, 199, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, - 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, - 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, - 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, - 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, - 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, - 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, - 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, - 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, - 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, - 262, 401, 547, 507, 556, 585, 227, 259, 415, 500, - 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, - 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, - 431, 432, 570, 580, 214, 502, 533, 240, 479, 0, - 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, - 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, - 528, 255, 588, 229, 555, 221, 0, 554, 403, 522, - 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, - 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, - 209, 542, 0, 210, 0, 494, 543, 589, 235, 236, - 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, - 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, - 567, 569, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, - 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 380, 481, 537, - 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, - 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, - 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, - 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, - 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, - 0, 450, 287, 586, 551, 545, 208, 224, 0, 261, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, - 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, - 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, - 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, - 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, - 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, - 558, 564, 476, 299, 300, 441, 442, 312, 313, 583, - 584, 298, 534, 565, 532, 582, 559, 435, 374, 0, - 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, - 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, - 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, - 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, - 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, - 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, - 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, - 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, - 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, - 493, 285, 0, 0, 0, 0, 0, 666, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, - 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, - 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, - 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, - 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, - 0, 3427, 0, 0, 0, 361, 0, 328, 202, 226, - 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, - 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, - 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, - 401, 547, 507, 556, 585, 227, 259, 415, 500, 541, - 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, - 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, - 432, 570, 580, 214, 502, 533, 240, 479, 0, 0, - 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, - 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, - 255, 588, 229, 555, 221, 0, 554, 403, 522, 531, - 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, - 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 589, 235, 236, 238, - 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, - 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, - 569, 572, 573, 574, 575, 581, 579, 576, 577, 578, - 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, - 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 590, 591, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 608, 380, 481, 537, 333, - 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, - 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, - 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, - 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, - 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, - 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, - 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, - 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, - 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, - 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, - 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, - 564, 476, 299, 300, 441, 442, 312, 313, 583, 584, - 298, 534, 565, 532, 582, 559, 435, 374, 0, 0, - 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, - 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, - 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, - 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, - 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, - 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, - 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, - 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, - 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, - 285, 0, 97, 0, 0, 0, 666, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, - 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, - 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, - 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, - 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, - 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, - 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, - 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, - 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, - 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, - 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, - 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, - 570, 580, 214, 502, 533, 240, 479, 0, 0, 587, - 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, - 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, - 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, - 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, - 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, - 0, 210, 0, 494, 543, 589, 235, 236, 238, 0, - 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, - 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, - 572, 573, 574, 575, 581, 579, 576, 577, 578, 571, - 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, - 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 590, 591, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 608, 380, 481, 537, 333, 345, - 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, - 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, - 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, - 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, - 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, - 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, - 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, - 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, - 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, - 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, - 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, - 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, - 476, 299, 300, 441, 442, 312, 313, 583, 584, 298, - 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, - 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, - 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, - 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, - 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, - 372, 514, 515, 314, 513, 0, 0, 0, 0, 2161, - 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, - 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, - 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, - 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, - 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, - 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, - 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, - 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, - 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, - 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, - 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, - 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, - 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, - 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, - 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 580, 214, 502, 533, 240, 479, 0, 0, 587, 248, - 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 588, - 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, - 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, - 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 589, 235, 236, 238, 0, 278, - 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 0, 517, 536, 548, 560, 566, 567, 569, 572, - 573, 574, 575, 581, 579, 576, 577, 578, 571, 402, - 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, - 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 590, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 608, 380, 481, 537, 333, 345, 348, - 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, - 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, - 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, - 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, - 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, - 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, - 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, - 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, - 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, - 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, - 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, - 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 299, 300, 441, 442, 312, 313, 583, 584, 298, 534, - 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, - 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, - 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, - 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, - 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, - 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, - 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, - 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, - 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, - 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, - 0, 0, 0, 1586, 666, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, - 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, - 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, - 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, - 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, - 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, - 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, - 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, - 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, - 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, - 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, - 243, 232, 525, 544, 288, 452, 431, 432, 570, 580, - 214, 502, 533, 240, 479, 0, 0, 587, 248, 499, - 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, - 292, 0, 0, 257, 410, 527, 528, 255, 588, 229, - 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, - 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, - 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, - 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, - 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, - 0, 517, 536, 548, 560, 566, 567, 569, 572, 573, - 574, 575, 581, 579, 576, 577, 578, 571, 402, 309, - 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 590, 591, 592, 593, 594, - 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 608, 380, 481, 537, 333, 345, 348, 338, - 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, - 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, - 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, - 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, - 375, 446, 0, 201, 222, 364, 0, 450, 287, 586, - 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, - 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, - 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, - 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, - 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, - 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, - 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, - 300, 441, 442, 312, 313, 583, 584, 298, 534, 565, - 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, - 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, - 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, - 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, - 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, - 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, - 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, - 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, - 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, - 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, - 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, - 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, - 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, - 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, - 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, - 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, - 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, - 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, - 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, - 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, - 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, - 232, 525, 544, 288, 452, 431, 432, 570, 580, 214, - 502, 533, 240, 479, 0, 0, 587, 248, 499, 216, - 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, - 0, 0, 257, 410, 527, 528, 255, 588, 229, 555, - 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, - 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, - 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, - 494, 543, 589, 235, 236, 238, 0, 278, 282, 290, - 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, - 517, 536, 548, 560, 566, 567, 569, 572, 573, 574, - 575, 581, 579, 576, 577, 578, 571, 402, 309, 490, - 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 590, 591, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, - 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, - 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, - 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, - 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, - 446, 0, 201, 222, 364, 1899, 450, 287, 586, 551, - 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, - 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, - 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, - 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, - 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, - 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, - 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, - 441, 442, 312, 313, 583, 584, 298, 534, 565, 532, - 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, - 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, - 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, - 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, - 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, - 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, - 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, - 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, - 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, - 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, - 0, 1890, 666, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, - 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, - 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, - 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, - 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, - 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, - 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, - 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, - 447, 535, 562, 563, 262, 401, 547, 507, 556, 585, - 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, - 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, - 525, 544, 288, 452, 431, 432, 570, 580, 214, 502, - 533, 240, 479, 0, 0, 587, 248, 499, 216, 530, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 588, 229, 555, 221, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 572, 573, 574, 575, - 581, 579, 576, 577, 578, 571, 402, 309, 490, 331, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 590, 591, 592, 593, 594, 595, 596, - 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 586, 551, 545, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, @@ -5226,21 +5974,21 @@ var yyAct = [...]int{ 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 583, 584, 298, 534, 565, 532, 582, + 442, 312, 313, 584, 585, 1339, 534, 565, 532, 583, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 1734, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, @@ -5259,596 +6007,61 @@ var yyAct = [...]int{ 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 585, 227, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 580, 214, 502, 533, - 240, 479, 0, 0, 587, 248, 499, 216, 530, 498, - 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 527, 528, 255, 588, 229, 555, 221, 0, - 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, - 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, - 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, - 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, - 548, 560, 566, 567, 569, 572, 573, 574, 575, 581, - 579, 576, 577, 578, 571, 402, 309, 490, 331, 369, - 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 590, 591, 592, 593, 594, 595, 596, 597, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, - 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, - 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, - 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, - 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, - 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, - 201, 222, 364, 0, 450, 287, 586, 551, 545, 208, - 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, - 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, - 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, - 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, - 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, - 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, - 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, - 312, 313, 583, 584, 298, 534, 565, 532, 582, 559, - 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, - 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, - 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, - 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, - 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 411, 0, 1732, 0, 0, 0, 0, 0, 0, - 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, - 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, - 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, - 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, - 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, - 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, - 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, - 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, - 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, - 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, - 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, - 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, - 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, - 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, - 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, - 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, - 288, 452, 431, 432, 570, 580, 214, 502, 533, 240, - 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, - 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 527, 528, 255, 588, 229, 555, 221, 0, 554, - 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 589, - 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, - 560, 566, 567, 569, 572, 573, 574, 575, 581, 579, - 576, 577, 578, 571, 402, 309, 490, 331, 369, 0, - 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 590, 591, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 608, 380, - 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, - 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, - 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, - 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, - 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, - 222, 364, 0, 450, 287, 586, 551, 545, 208, 224, - 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 583, 584, 298, 534, 565, 532, 582, 559, 435, - 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 1730, 0, 0, 0, 0, 0, 0, 269, - 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, - 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 0, 0, 0, 0, 666, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, - 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, - 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, - 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, - 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, - 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, - 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, - 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, - 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 585, 227, 259, 415, - 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, - 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 580, 214, 502, 533, 240, 479, - 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, - 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 527, 528, 255, 588, 229, 555, 221, 0, 554, 403, - 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, - 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 589, 235, - 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, - 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, - 566, 567, 569, 572, 573, 574, 575, 581, 579, 576, - 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, - 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 608, 380, 481, - 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, - 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, - 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, - 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, - 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, - 364, 0, 450, 287, 586, 551, 545, 208, 224, 0, - 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, - 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, - 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, - 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, - 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, - 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, - 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, - 583, 584, 298, 534, 565, 532, 582, 559, 435, 374, - 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, - 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, - 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, - 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, - 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, - 0, 1728, 0, 0, 0, 0, 0, 0, 269, 0, - 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, - 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, - 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, - 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, - 408, 493, 285, 0, 0, 0, 0, 0, 666, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, - 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, - 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, - 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, - 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, - 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, - 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, - 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, - 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, - 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, - 262, 401, 547, 507, 556, 585, 227, 259, 415, 500, - 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, - 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, - 431, 432, 570, 580, 214, 502, 533, 240, 479, 0, - 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, - 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, - 528, 255, 588, 229, 555, 221, 0, 554, 403, 522, - 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, - 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, - 209, 542, 0, 210, 0, 494, 543, 589, 235, 236, - 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, - 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, - 567, 569, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, - 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 380, 481, 537, - 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, - 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, - 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, - 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, - 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, - 0, 450, 287, 586, 551, 545, 208, 224, 0, 261, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, - 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, - 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, - 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, - 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, - 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, - 558, 564, 476, 299, 300, 441, 442, 312, 313, 583, - 584, 298, 534, 565, 532, 582, 559, 435, 374, 0, - 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, - 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, - 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, - 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, - 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, - 1726, 0, 0, 0, 0, 0, 0, 269, 0, 0, - 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, - 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, - 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, - 493, 285, 0, 0, 0, 0, 0, 666, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, - 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, - 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, - 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, - 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, - 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, - 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, - 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, - 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, - 401, 547, 507, 556, 585, 227, 259, 415, 500, 541, - 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, - 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, - 432, 570, 580, 214, 502, 533, 240, 479, 0, 0, - 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, - 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, - 255, 588, 229, 555, 221, 0, 554, 403, 522, 531, - 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, - 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 589, 235, 236, 238, - 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, - 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, - 569, 572, 573, 574, 575, 581, 579, 576, 577, 578, - 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, - 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 590, 591, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 608, 380, 481, 537, 333, - 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, - 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, - 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, - 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, - 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, - 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, - 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, - 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, - 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, - 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, - 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, - 564, 476, 299, 300, 441, 442, 312, 313, 583, 584, - 298, 534, 565, 532, 582, 559, 435, 374, 0, 0, - 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, - 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, - 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, - 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, - 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 411, 0, 1722, - 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, - 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, - 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, - 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, - 285, 0, 0, 0, 0, 0, 666, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, - 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, - 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, - 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, - 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, - 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, - 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, - 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, - 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, - 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, - 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, - 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, - 570, 580, 214, 502, 533, 240, 479, 0, 0, 587, - 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, - 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, - 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, - 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, - 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, - 0, 210, 0, 494, 543, 589, 235, 236, 238, 0, - 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, - 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, - 572, 573, 574, 575, 581, 579, 576, 577, 578, 571, - 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, - 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 590, 591, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 608, 380, 481, 537, 333, 345, - 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, - 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, - 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, - 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, - 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, - 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, - 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, - 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, - 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, - 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, - 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, - 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, - 476, 299, 300, 441, 442, 312, 313, 583, 584, 298, - 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, - 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, - 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, - 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, - 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, - 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 411, 0, 1720, 0, - 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, - 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, - 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, - 0, 0, 0, 0, 0, 666, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, - 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, - 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, - 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, - 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, - 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, - 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, - 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, - 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, - 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, - 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 580, 214, 502, 533, 240, 479, 0, 0, 587, 248, - 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 588, - 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, - 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, - 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 589, 235, 236, 238, 0, 278, - 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 0, 517, 536, 548, 560, 566, 567, 569, 572, - 573, 574, 575, 581, 579, 576, 577, 578, 571, 402, - 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, - 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 590, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 608, 380, 481, 537, 333, 345, 348, - 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, - 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, - 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, - 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, - 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, - 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, - 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, - 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, - 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, - 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, - 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, - 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 299, 300, 441, 442, 312, 313, 583, 584, 298, 534, - 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, - 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, - 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, - 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, - 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, - 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 411, 0, 1718, 0, 0, - 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, - 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, - 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, - 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, - 0, 0, 0, 0, 666, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, - 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, - 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, - 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, - 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, - 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, - 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, - 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, - 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, - 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, - 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, - 243, 232, 525, 544, 288, 452, 431, 432, 570, 580, - 214, 502, 533, 240, 479, 0, 0, 587, 248, 499, - 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, - 292, 0, 0, 257, 410, 527, 528, 255, 588, 229, - 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, - 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, - 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, - 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, - 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, - 0, 517, 536, 548, 560, 566, 567, 569, 572, 573, - 574, 575, 581, 579, 576, 577, 578, 571, 402, 309, - 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 590, 591, 592, 593, 594, - 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 608, 380, 481, 537, 333, 345, 348, 338, - 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, - 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, - 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, - 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, - 375, 446, 0, 201, 222, 364, 0, 450, 287, 586, - 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, - 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, - 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, - 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, - 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, - 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, - 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, - 300, 441, 442, 312, 313, 583, 584, 298, 534, 565, - 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, - 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, - 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, - 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, - 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, - 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, - 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, - 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, - 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, - 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 321, 249, 323, 206, 408, 493, 285, 0, 1693, - 0, 0, 0, 666, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, - 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, - 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, - 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, - 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, - 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, - 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, - 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, - 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, - 585, 227, 259, 415, 500, 541, 489, 393, 519, 520, - 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, - 232, 525, 544, 288, 452, 431, 432, 570, 580, 214, - 502, 533, 240, 479, 0, 0, 587, 248, 499, 216, - 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, - 0, 0, 257, 410, 527, 528, 255, 588, 229, 555, - 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, - 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, - 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, - 494, 543, 589, 235, 236, 238, 0, 278, 282, 290, - 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, - 517, 536, 548, 560, 566, 567, 569, 572, 573, 574, - 575, 581, 579, 576, 577, 578, 571, 402, 309, 490, - 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 590, 591, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 608, 380, 481, 537, 333, 345, 348, 338, 357, - 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, - 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, - 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, - 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, - 446, 0, 201, 222, 364, 0, 450, 287, 586, 551, - 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, - 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, - 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, - 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, - 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, - 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, - 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, - 441, 442, 312, 313, 583, 584, 298, 534, 565, 532, - 582, 559, 435, 374, 0, 0, 549, 0, 377, 280, - 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, - 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, - 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, - 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, - 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, - 0, 1590, 269, 0, 0, 0, 0, 362, 266, 0, - 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, - 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, - 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, - 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, - 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, - 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, - 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, + 0, 926, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5856,36 +6069,36 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, - 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, - 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, - 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, - 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, - 447, 535, 562, 563, 262, 401, 547, 507, 556, 585, - 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, - 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, - 525, 544, 288, 452, 431, 432, 570, 580, 214, 502, - 533, 240, 479, 0, 0, 587, 248, 499, 216, 530, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 612, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 588, 229, 555, 221, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 589, 235, 236, 238, 0, 278, 282, 290, 293, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 572, 573, 574, 575, - 581, 579, 576, 577, 578, 571, 402, 309, 490, 331, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 590, 591, 592, 593, 594, 595, 596, - 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 608, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 586, 551, 545, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, @@ -5895,7 +6108,7 @@ var yyAct = [...]int{ 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 583, 584, 298, 534, 565, 532, 582, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, @@ -5908,8 +6121,8 @@ var yyAct = [...]int{ 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 97, 0, 0, - 0, 840, 0, 0, 0, 0, 0, 0, 0, 0, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, @@ -5928,538 +6141,270 @@ var yyAct = [...]int{ 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 585, 227, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 580, 214, 502, 533, - 240, 479, 0, 0, 587, 248, 499, 216, 530, 498, - 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 527, 528, 255, 588, 229, 555, 221, 0, - 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, - 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, - 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 589, 235, 236, 238, 0, 278, 282, 290, 293, 301, - 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, - 548, 560, 566, 567, 569, 572, 573, 574, 575, 581, - 579, 576, 577, 578, 571, 402, 309, 490, 331, 369, - 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 590, 591, 592, 593, 594, 595, 596, 597, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, - 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, - 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, - 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, - 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, - 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, - 201, 222, 364, 0, 450, 287, 586, 551, 545, 208, - 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, - 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, - 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, - 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, - 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, - 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, - 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, - 312, 313, 583, 584, 298, 534, 565, 532, 582, 559, - 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, - 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, - 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, - 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, - 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, - 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, - 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, - 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, - 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, - 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, - 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, - 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, - 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, - 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1338, 0, - 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, - 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, - 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, - 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, - 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, - 562, 563, 262, 401, 547, 507, 556, 585, 227, 259, - 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, - 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, - 288, 452, 431, 432, 570, 580, 214, 502, 533, 240, - 479, 0, 0, 587, 248, 499, 216, 530, 498, 389, - 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 527, 528, 255, 588, 229, 555, 221, 0, 554, - 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 589, - 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, - 560, 566, 567, 569, 572, 573, 574, 575, 581, 579, - 576, 577, 578, 571, 402, 309, 490, 331, 369, 0, - 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 590, 591, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 608, 380, - 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, - 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, - 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, - 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, - 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, - 222, 364, 0, 450, 287, 586, 551, 545, 208, 224, - 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 583, 584, 1337, 534, 565, 532, 582, 559, 435, - 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, - 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, - 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 0, 0, 0, 0, 199, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, - 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, - 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, - 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, - 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 3584, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, - 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, - 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, - 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, - 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 585, 227, 259, 415, - 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, - 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 580, 214, 502, 533, 240, 479, - 0, 0, 587, 248, 499, 216, 530, 498, 389, 324, - 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 527, 528, 255, 588, 229, 555, 221, 0, 554, 403, - 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, - 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 589, 235, - 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, - 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, - 566, 567, 569, 572, 573, 574, 575, 581, 579, 576, - 577, 578, 571, 402, 309, 490, 331, 369, 0, 0, - 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 608, 380, 481, - 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, - 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, - 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, - 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, - 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, - 364, 0, 450, 287, 586, 551, 545, 208, 224, 0, - 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 925, 0, - 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, - 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, - 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, - 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, - 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, - 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, - 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, - 583, 584, 298, 534, 565, 532, 582, 559, 435, 374, - 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, - 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, - 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, - 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, - 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, - 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, - 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, - 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, - 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, - 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, - 408, 493, 285, 0, 0, 0, 0, 0, 199, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, - 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, - 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, - 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, - 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, - 397, 256, 0, 0, 449, 0, 611, 0, 561, 0, - 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, - 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, - 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, - 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, - 262, 401, 547, 507, 556, 585, 227, 259, 415, 500, - 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, - 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, - 431, 432, 570, 580, 214, 502, 533, 240, 479, 0, - 0, 587, 248, 499, 216, 530, 498, 389, 324, 325, - 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, - 528, 255, 588, 229, 555, 221, 0, 554, 403, 522, - 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, - 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, - 209, 542, 0, 210, 0, 494, 543, 589, 235, 236, - 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, - 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, - 567, 569, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 571, 402, 309, 490, 331, 369, 0, 0, 420, - 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 380, 481, 537, - 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, - 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, - 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, - 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, - 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, - 0, 450, 287, 586, 551, 545, 208, 224, 0, 261, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, - 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, - 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, - 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, - 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, - 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, - 558, 564, 476, 299, 300, 441, 442, 312, 313, 583, - 584, 298, 534, 565, 532, 582, 559, 435, 374, 0, - 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, - 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, - 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, - 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, - 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, - 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, - 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, - 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, - 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, - 493, 285, 0, 0, 0, 0, 0, 666, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, - 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, - 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, - 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, - 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, - 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, - 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, - 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, - 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, - 401, 547, 507, 556, 585, 227, 259, 415, 500, 541, - 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, - 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, - 432, 570, 580, 214, 502, 533, 240, 479, 0, 0, - 587, 248, 499, 216, 530, 498, 389, 324, 325, 215, - 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, - 255, 588, 229, 555, 221, 0, 554, 403, 522, 531, - 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, - 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 589, 235, 236, 238, - 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, - 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, - 569, 572, 573, 574, 575, 581, 579, 576, 577, 578, - 571, 402, 309, 490, 331, 369, 0, 0, 420, 468, - 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 590, 591, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 608, 380, 481, 537, 333, - 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, - 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, - 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, - 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, - 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, - 450, 287, 586, 551, 545, 208, 224, 0, 261, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 0, 841, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, - 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, - 384, 385, 3559, 405, 406, 409, 412, 413, 416, 418, - 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, - 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, - 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, - 564, 476, 299, 300, 441, 442, 312, 313, 583, 584, - 298, 534, 565, 532, 582, 559, 435, 374, 0, 0, - 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, - 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, - 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, - 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, - 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, - 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, - 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, - 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, - 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, - 285, 0, 0, 0, 0, 0, 666, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, - 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, - 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, - 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, - 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, - 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, - 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, - 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, - 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, - 547, 507, 556, 585, 227, 259, 415, 500, 541, 489, - 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, - 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, - 570, 580, 214, 502, 533, 240, 479, 0, 0, 587, - 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, - 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, - 588, 229, 555, 221, 0, 554, 403, 522, 531, 390, - 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, - 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, - 0, 210, 0, 494, 543, 589, 235, 236, 238, 0, - 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, - 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, - 572, 573, 574, 575, 581, 579, 576, 577, 578, 571, - 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, - 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 590, 591, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 608, 380, 481, 537, 333, 345, - 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, - 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, - 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, - 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, - 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, - 287, 586, 551, 545, 208, 224, 0, 261, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, - 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, - 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, - 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, - 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, - 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, - 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, - 476, 299, 300, 441, 442, 312, 313, 583, 584, 298, - 534, 565, 532, 582, 559, 435, 374, 0, 0, 549, - 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, - 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, - 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, - 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, - 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, - 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, - 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, - 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, - 0, 0, 0, 0, 0, 840, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, - 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, - 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, - 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, - 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, - 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, - 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, - 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, - 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 585, 227, 259, 415, 500, 541, 489, 393, - 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, - 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 580, 214, 502, 533, 240, 479, 0, 0, 587, 248, - 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 588, - 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, - 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, - 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 589, 235, 236, 238, 0, 278, - 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 0, 517, 536, 548, 560, 566, 567, 569, 572, - 573, 574, 575, 581, 579, 576, 577, 578, 571, 402, - 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, - 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 590, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 608, 380, 481, 537, 333, 345, 348, - 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, - 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, - 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, - 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, - 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, - 586, 551, 545, 208, 224, 0, 261, 0, 0, 0, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, - 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, - 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, - 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, - 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, - 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, - 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 299, 300, 441, 442, 312, 313, 583, 584, 298, 534, - 565, 532, 582, 559, 435, 374, 0, 0, 549, 0, - 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, - 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, - 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, - 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, - 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, - 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, - 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, - 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, - 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, + 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, - 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, - 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, - 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, - 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, + 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, + 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, - 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, - 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, - 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, - 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, - 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, - 556, 585, 227, 259, 415, 500, 541, 489, 393, 519, - 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, - 243, 232, 525, 544, 288, 452, 431, 432, 570, 580, - 214, 502, 533, 240, 479, 0, 0, 587, 248, 499, - 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, - 292, 0, 0, 257, 410, 527, 528, 255, 588, 229, - 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, - 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, - 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, - 0, 494, 543, 589, 235, 236, 238, 0, 278, 282, - 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, - 0, 517, 536, 548, 560, 566, 567, 569, 572, 573, - 574, 575, 581, 579, 576, 577, 578, 571, 402, 309, - 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 590, 591, 592, 593, 594, - 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 608, 380, 481, 537, 333, 345, 348, 338, - 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, - 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, - 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, - 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, - 375, 446, 0, 201, 222, 364, 0, 450, 287, 586, - 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, - 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, - 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, - 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, - 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, - 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, - 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, - 300, 441, 442, 312, 313, 583, 584, 298, 534, 565, - 532, 582, 559, 435, 374, 0, 0, 549, 0, 377, - 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, - 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, - 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, - 505, 506, 508, 391, 265, 428, 0, 0, 372, 514, - 515, 314, + 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 0, 0, 372, 514, 515, 314, } var yyPact = [...]int{ - -1000, -1000, 5386, -1000, -466, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 5362, -1000, -464, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 2248, 2442, -1000, -1000, -1000, -1000, 2511, -1000, - 1015, 1979, -1000, 2263, 335, -1000, 48083, 643, -1000, 45407, - 638, 624, 140, -83, 241, 30689, -1000, 239, -1000, 230, - 46745, 249, -1000, -1000, -1000, -1000, -313, 19314, 2186, 117, - 93, 48083, -1000, -1000, -1000, -1000, 2476, 1920, -1000, 420, - -1000, -1000, -1000, -1000, -1000, -1000, 44738, -1000, 1038, -1000, - -1000, 2289, 2262, 2517, 779, 2209, -1000, 2413, 1920, -1000, - 19314, 2463, 2332, 18645, 18645, 560, -1000, -1000, 349, -1000, - -1000, -1000, 2523, 26006, 48083, -1000, 33365, 1028, -1000, 2263, - -1000, -1000, -1000, 95, -1000, 462, 1839, -1000, 1838, -1000, - 838, 1077, 480, 613, 604, 476, 475, 472, 471, 470, - 469, 468, 464, 488, -1000, 823, 823, -130, -131, 574, - 592, 549, 549, 831, 597, 2228, 2218, -1000, -1000, 823, - 823, 823, 418, 823, 823, 823, 823, 401, 397, 823, - 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, - 823, 823, 823, 823, 823, 823, 427, 2263, 344, -1000, + -1000, -1000, 2265, 2282, -1000, -1000, -1000, -1000, 2519, -1000, + 1237, 1934, -1000, 2249, 4184, -1000, 47520, 606, -1000, 44840, + 601, 600, 145, -78, 134, 30100, -1000, 253, -1000, 246, + 46180, 249, -1000, -1000, -1000, -1000, -322, 18708, 2180, 103, + 100, 47520, -1000, -1000, -1000, -1000, 2487, 1918, -1000, 406, + -1000, -1000, -1000, -1000, -1000, -1000, 44170, -1000, 984, -1000, + -1000, 2263, 2240, 2536, 766, 2192, -1000, 2428, 1918, -1000, + 18708, 2474, 2348, 18038, 18038, 530, -1000, -1000, 335, -1000, + -1000, -1000, 2546, 25410, 47520, -1000, 32780, 382, -1000, 2249, + -1000, -1000, -1000, 127, -1000, 417, 1840, -1000, 1836, -1000, + 857, 637, 461, 552, 547, 457, 441, 440, 438, 437, + 434, 433, 432, 470, -1000, 792, 792, -125, -129, 702, + 529, 512, 512, 1048, 574, 2214, 2212, -1000, -1000, 792, + 792, 792, 488, 792, 792, 792, 792, 389, 385, 792, + 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, + 792, 792, 792, 792, 792, 792, 506, 2249, 367, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -6500,64 +6445,63 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 48083, - 245, 48083, -1000, 699, 48083, 48083, -1000, 1241, 1240, -1000, - -1000, 949, -1000, -1000, 949, 138, 949, 949, 949, 949, - 260, 804, 91, -1000, 251, 386, 236, 336, 932, 309, - -1000, -1000, 321, 932, 1001, 932, 1688, -1000, 800, 330, - 226, -1000, 949, 949, -1000, -1000, 12599, 171, 12599, 12599, - -1000, 2270, -1000, -1000, -1000, -1000, -1000, 1289, -1000, -1000, - -1000, -1000, 2, 595, -1000, -1000, -1000, -1000, 46745, 44069, - 295, -1000, -1000, 52, -1000, -1000, 1760, 1234, 19314, 1348, - -1000, 1622, 760, -1000, -1000, -1000, -1000, -1000, 681, -1000, - 19983, 19983, 19983, 19983, -1000, -1000, 1781, 43400, 1781, 1781, - 19983, 1781, -1000, 19983, 1781, 1781, 1781, 19314, 1781, 1781, - 1781, 1781, -1000, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, -1000, -1000, -1000, -1000, 1781, 694, 1781, 1781, 1781, - 1781, 1781, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 1781, 1781, 1781, 1781, 1781, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 21990, - 1445, 1439, 1435, -1000, 16638, 1781, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 47520, 254, 47520, -1000, 683, 47520, 47520, -1000, 1193, 1186, + -1000, -1000, 930, -1000, -1000, 930, 112, 930, 930, 930, + 930, 245, 806, 88, -1000, 228, 345, 219, 360, 940, + 410, -1000, -1000, 355, 940, 993, 940, 1646, -1000, 777, + 357, 215, -1000, 930, 930, -1000, -1000, 11983, 173, 11983, + 11983, -1000, 2220, -1000, -1000, -1000, -1000, -1000, 1252, -1000, + -1000, -1000, -1000, -12, 572, -1000, -1000, -1000, -1000, 46180, + 43500, 323, -1000, -1000, 59, -1000, -1000, 1716, 1282, 18708, + 1331, -1000, 1647, 730, -1000, -1000, -1000, -1000, -1000, 666, + -1000, 19378, 19378, 19378, 19378, -1000, -1000, 1361, 42830, 1361, + 1361, 19378, 1361, -1000, 19378, 1361, 1361, 1361, 18708, 1361, + 1361, 1361, 1361, -1000, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, -1000, -1000, -1000, -1000, 1361, 681, 1361, 1361, + 1361, 1361, 1361, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 1361, 1361, 1361, 1361, 1361, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 21388, 1433, 1431, 1429, -1000, 16028, 1361, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 48083, -1000, 1781, 283, - 46745, 46745, 451, 2413, 1920, -1000, 2476, 2457, 420, 3070, - 1457, 1500, 1306, 1920, 1810, 48083, -1000, 1875, -1000, -1000, - -1000, -1000, 2113, 1342, 1665, -1000, -1000, -1000, -1000, 2294, - 19314, -1000, -1000, 2506, -1000, 23329, 690, 2505, 42731, -1000, - 560, 560, 1836, 492, 56, -1000, -1000, -1000, -1000, 891, - 30020, -1000, -1000, -1000, -1000, -1000, 1718, 48083, -1000, -1000, - 4080, 1250, -1000, 1977, -1000, 2334, 1716, -1000, 1928, 19314, - 1968, 623, 1250, 606, 605, 594, -1000, -18, -1000, -1000, - -1000, -1000, -1000, -1000, 823, 823, 823, -1000, 486, 2462, - 335, 4268, -1000, -1000, -1000, 42062, 1962, 1250, -1000, 1960, - -1000, 960, 658, 689, 689, 1250, -1000, -1000, 47414, 1250, - 959, 953, 1250, 1250, 46745, 46745, -1000, 41393, -1000, 40724, - 40055, 1239, 46745, 39386, 38717, 38048, 37379, 36710, -1000, 2090, - -1000, 2007, -1000, -1000, -1000, 47414, 1250, 1250, 47414, 46745, - 47414, 48083, 1250, -1000, -1000, 405, -1000, -1000, 1237, 1233, - 1232, 823, 823, 1225, 1663, 1661, 1656, 823, 823, 1222, - 1654, 32027, 1651, 400, 1220, 1219, 1214, 1268, 1629, 207, - 1617, 1218, 1168, 1213, 46745, 1959, 48083, -1000, 323, 820, - 648, 515, 883, 2263, 2183, 1834, 593, 612, 1250, 566, - 566, 46745, -1000, 14624, -1000, 489, -1000, -1000, -1000, -1000, - 1586, 19314, -1000, 961, 932, 932, -1000, -1000, -1000, -1000, - -1000, -1000, 949, 48083, 961, -1000, -1000, -1000, 932, 949, - 48083, 949, 949, 949, 949, 932, 932, 932, 949, 48083, - 48083, 48083, 48083, 48083, 48083, 48083, 48083, 48083, 12599, 800, - 949, 949, -354, 949, -364, -1000, 1578, -1000, -1000, 2083, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 47520, -1000, 1361, + 276, 46180, 46180, 409, 2428, 1918, -1000, 2487, 2477, 406, + 3030, 1634, 1443, 1387, 1918, 1825, 47520, -1000, 1846, -1000, + -1000, -1000, -1000, 2065, 1355, 1642, -1000, -1000, -1000, -1000, + 1157, 18708, -1000, -1000, 2516, -1000, 22729, 679, 2515, 42160, + -1000, 530, 530, 1834, 498, 79, -1000, -1000, -1000, -1000, + 822, 29430, -1000, -1000, -1000, -1000, -1000, 1733, 47520, -1000, + -1000, 3807, 1272, -1000, 1933, -1000, 3022, 1711, -1000, 1888, + 18708, 1942, 597, 1272, 586, 585, 580, -1000, -21, -1000, + -1000, -1000, -1000, -1000, -1000, 792, 792, 792, -1000, 469, + 2471, 4184, 4860, -1000, -1000, -1000, 41490, 1932, 1272, -1000, + 1931, -1000, 911, 631, 687, 687, 1272, -1000, -1000, 46850, + 1272, 910, 907, 1272, 1272, 46180, 46180, -1000, 40820, -1000, + 40150, 39480, 1181, 46180, 38810, 38140, 37470, 36800, 36130, -1000, + 2225, -1000, 2051, -1000, -1000, -1000, 46850, 1272, 1272, 46850, + 46180, 46850, 47520, 1272, -1000, -1000, 421, -1000, -1000, 1176, + 1162, 1156, 792, 792, 1151, 1625, 1619, 1611, 792, 792, + 1148, 1609, 31440, 1580, 326, 1147, 1144, 1143, 1310, 1578, + 203, 1573, 1161, 1154, 1127, 46180, 1924, 47520, -1000, 334, + 871, 811, 970, 710, 810, 2249, 2177, 1831, 571, 596, + 1272, 516, 516, 46180, -1000, 14011, -1000, 466, -1000, -1000, + -1000, -1000, 1570, 18708, -1000, 960, 940, 940, -1000, -1000, + -1000, -1000, -1000, -1000, 930, 47520, 960, -1000, -1000, -1000, + 940, 930, 47520, 930, 930, 930, 930, 940, 940, 940, + 930, 47520, 47520, 47520, 47520, 47520, 47520, 47520, 47520, 47520, + 11983, 777, 930, 930, -328, 930, -330, -1000, 1567, -1000, + -1000, 2060, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -6572,289 +6516,293 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 12599, 12599, -1000, -1000, -1000, -1000, -1000, 1832, - -1000, 227, 57, 248, -1000, 36041, 426, 856, -1000, 426, - -1000, -1000, -1000, 1831, 35372, -1000, -367, -368, -371, -372, - -1000, -1000, -1000, -1000, -373, -377, -1000, -1000, -1000, 19314, - 19314, 19314, 19314, -160, -1000, 1126, 19983, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 146, 956, 19983, 19983, 19983, 19983, - 19983, 19983, 19983, 19983, 19983, 19983, 19983, 19983, 19983, 19983, - 19983, -1000, -1000, 28013, 6587, 6587, 760, 760, 760, 760, - -1000, -89, 1830, 47414, -1000, -1000, -1000, 687, 19314, 19314, - 760, -1000, 1250, 16638, 20652, 18645, 18645, 19314, 902, 1234, - 47414, 19314, -1000, 1306, -1000, -1000, -1000, 1107, -1000, 1031, - 2224, 2224, 2224, 2224, 19314, 19314, 19314, 19314, 19314, 19314, - 19314, 19314, 19314, 19314, 2224, 46745, 46745, 1488, 19314, 19314, - 19314, 19314, 19314, 19314, 15299, 19314, 19314, 19983, 19314, 19314, - 19314, 1306, 19314, 19314, 19314, 19314, 19314, 19314, 19314, 19314, - 19314, 19314, 19314, 19314, 19314, 19314, 19314, 19314, 19314, 19314, - 19314, 19314, 19314, 19314, 19314, 19314, 19314, 19314, 19314, 1306, - 19314, 1215, 19314, 19314, 18645, 13949, 18645, 18645, 18645, 18645, - 18645, -1000, -1000, -1000, -1000, -1000, 19314, 19314, 19314, 19314, - 19314, 19314, 19314, 19314, 1306, 19314, 19314, 19314, 19314, 19314, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 1447, 1538, 1320, 19314, -1000, 1826, -1000, -72, 25337, 19314, - 1549, 1546, 2496, 2011, 46745, -1000, -1000, -1000, 2413, -1000, - 2413, 1447, 2117, 18645, -1000, -1000, 2334, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 1671, -1000, 48083, 1810, 2327, - 46745, 2087, 1542, 410, -1000, 19314, 19314, 1809, -1000, 1465, - 48083, -1000, -160, -1000, 34703, -1000, -1000, 11924, 48083, 457, - 48083, -1000, 24668, 34034, 311, -1000, 56, 1785, -1000, 63, - 50, 15968, 750, -1000, -1000, -1000, 574, 21321, 1616, 750, - 152, -1000, -1000, -1000, 1928, -1000, 1928, 1928, 1928, 1928, - 410, 410, 410, 410, -1000, -1000, -1000, -1000, -1000, 1958, - 1956, -1000, 1928, 1928, 1928, 1928, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 11983, 11983, -1000, -1000, -1000, -1000, + -1000, 1830, -1000, 242, 50, 247, -1000, 35460, 423, 807, + -1000, 423, -1000, -1000, -1000, 1829, 34790, -1000, -333, -335, + -363, -377, -1000, -1000, -1000, -1000, -379, -380, -1000, -1000, + -1000, 18708, 18708, 18708, 18708, -156, -1000, 1284, 19378, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 230, 1009, 19378, 19378, + 19378, 19378, 19378, 19378, 19378, 19378, 19378, 19378, 19378, 19378, + 19378, 19378, 19378, -1000, -1000, 27420, 8111, 8111, 730, 730, + 730, 730, -1000, -87, 1828, 46850, -1000, -1000, -1000, 678, + 18708, 18708, 730, -1000, 1272, 16028, 20048, 18038, 18038, 18708, + 845, 1282, 46850, 18708, -1000, 1387, -1000, -1000, -1000, 1115, + -1000, 951, 2227, 2227, 2227, 2227, 18708, 18708, 18708, 18708, + 18708, 18708, 18708, 18708, 18708, 18708, 2227, 46180, 46180, 929, + 18708, 18708, 18708, 18708, 18708, 18708, 14687, 18708, 18708, 19378, + 18708, 18708, 18708, 1387, 18708, 18708, 18708, 18708, 18708, 18708, + 18708, 18708, 18708, 18708, 18708, 18708, 18708, 18708, 18708, 18708, + 18708, 18708, 18708, 18708, 18708, 18708, 18708, 18708, 18708, 18708, + 18708, 1387, 18708, 1159, 18708, 18708, 18038, 13335, 18038, 18038, + 18038, 18038, 18038, -1000, -1000, -1000, -1000, -1000, 18708, 18708, + 18708, 18708, 18708, 18708, 18708, 18708, 1387, 18708, 18708, 18708, + 18708, 18708, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 1501, 1484, 1386, 18708, -1000, 1827, -1000, -98, + 24740, 18708, 1542, 1539, 2512, 1961, 46180, -1000, -1000, -1000, + 2428, -1000, 2428, 1501, 2105, 18038, -1000, -1000, 3022, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1618, -1000, 47520, + 1825, 2329, 46180, 2100, 1534, 388, -1000, 18708, 18708, 1823, + -1000, 1476, 47520, -1000, -156, -1000, 34120, -1000, -1000, 11307, + 47520, 416, 47520, -1000, 24070, 33450, 368, -1000, 79, 1779, + -1000, 56, 40, 15357, 729, -1000, -1000, -1000, 702, 20718, + 1670, 729, 179, -1000, -1000, -1000, 1888, -1000, 1888, 1888, + 1888, 1888, 388, 388, 388, 388, -1000, -1000, -1000, -1000, + -1000, 1923, 1920, -1000, 1888, 1888, 1888, 1888, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 1954, 1954, 1954, 1949, 1949, 1930, 1930, - 535, -1000, 19314, -1000, -1000, 320, 33365, 2308, 1210, 1627, - 323, 568, 1996, 1250, 1250, 1250, 568, -1000, 1287, 1277, - 1275, -1000, -455, 1808, -1000, -1000, 2461, -1000, -1000, 1165, - 983, 980, 1134, 46745, 272, 430, -1000, 523, -1000, 33365, - 1250, 946, 689, 1250, -1000, 1250, -1000, -1000, -1000, -1000, - -1000, 1250, -1000, -1000, 1803, -1000, 1805, 1043, 978, 1041, - 976, 1803, -1000, -1000, -95, 1803, -1000, 1803, -1000, 1803, - -1000, 1803, -1000, 1803, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 868, 240, -209, 46745, 272, 576, -1000, - 575, 28013, -1000, -1000, -1000, 28013, 28013, -1000, -1000, -1000, - -1000, 1540, 1525, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 1903, 1903, 1903, 1902, 1902, + 1892, 1892, 500, -1000, 18708, -1000, -1000, 317, 32780, 2280, + 1125, 1749, 334, 526, 1948, 1272, 1272, 1272, 526, -1000, + 1302, 1275, 1260, -1000, -448, 1804, -1000, -1000, 2469, -1000, + -1000, 948, 932, 924, 832, 46180, 277, 405, -1000, 509, + -1000, 32780, 1272, 906, 687, 1272, -1000, 1272, -1000, -1000, + -1000, -1000, -1000, 1272, -1000, -1000, 1797, -1000, 1771, 1007, + 894, 973, 891, 1797, -1000, -1000, -101, 1797, -1000, 1797, + -1000, 1797, -1000, 1797, -1000, 1797, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 823, 244, -227, 46180, 277, + 546, -1000, 545, 27420, -1000, -1000, -1000, 27420, 27420, -1000, + -1000, -1000, -1000, 1524, 1511, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -442, 48083, -1000, 305, 855, 416, 448, 382, - 48083, 884, 2404, 2401, 2395, 2394, 2392, 2391, 2385, 705, - 2380, 2379, 2373, 2369, 2366, 2339, 2336, 374, 396, 48083, - 48083, 566, 2057, 48083, 2306, 48083, -1000, -1000, -1000, -1000, - 569, 48083, -1000, 325, -1000, -1000, -1000, -1000, -1000, -1000, - 1234, 48083, -1000, -1000, 949, 949, -1000, -1000, 48083, 949, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 949, -1000, + -1000, -1000, -1000, -1000, -437, 47520, -1000, 302, 805, 395, + 454, 377, 47520, 697, 2422, 2418, 2406, 2405, 2404, 2399, + 2397, 344, 2396, 2393, 2390, 2388, 2386, 2385, 331, 2383, + 2373, 2350, 2344, 2341, 2335, 2332, 372, 383, 47520, 47520, + 516, 2049, 47520, 2305, 47520, -1000, -1000, -1000, -1000, 429, + 47520, -1000, 362, -1000, -1000, -1000, -1000, -1000, -1000, 1282, + 47520, -1000, -1000, 930, 930, -1000, -1000, 47520, 930, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 930, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 48083, -1000, -1000, - -1000, -1000, 2, 223, -1000, -1000, 46745, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -47, -1000, 80, 48, - 389, -1000, -1000, -1000, -1000, -1000, 2409, -1000, 1234, 934, - 919, -1000, 1781, -1000, -1000, 1115, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 146, 19983, 19983, 19983, 1737, 585, 1975, - 2016, 1493, 1049, 1049, 1085, 1085, 764, 764, 764, 764, - 764, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1518, - -1000, 1781, 47414, 1713, 13949, 1556, 1207, 1306, 2978, -1000, - 1644, -1000, 1644, 1963, 920, -1000, 19314, 1306, 2969, -1000, - -1000, 1306, 1306, 1306, 19314, -1000, -1000, 19314, 19314, 19314, - 19314, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, - 1627, 19314, 1800, 1798, 2492, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 47520, -1000, -1000, -1000, + -1000, -12, 209, -1000, -1000, 46180, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -42, -1000, 82, 48, 397, + -1000, -1000, -1000, -1000, -1000, 2382, -1000, 1282, 884, 873, + -1000, 1361, -1000, -1000, 1110, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 230, 19378, 19378, 19378, 1736, 567, 1774, 1289, + 1165, 1243, 1243, 1133, 1133, 734, 734, 734, 734, 734, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1509, -1000, + 1361, 46850, 1693, 13335, 2375, 1832, 1387, 2889, -1000, 1679, + -1000, 1679, 1754, 844, -1000, 18708, 1387, 2885, -1000, -1000, + 1387, 1387, 1387, 18708, -1000, -1000, 18708, 18708, 18708, 18708, + 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, + 18708, 1796, 1795, 2510, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 1470, 1627, 1627, 1627, - 1627, 1627, 19314, 2188, -1000, -1000, -1000, 1312, 2964, 1386, - 2951, 1627, 1627, -1000, 1627, 2946, 2935, 1306, 1760, 1306, - 1796, -1000, 2928, 1627, 2912, 2891, 2886, 2158, 2876, 2872, - 2868, 1627, 1627, 1627, 2151, 2864, 2860, 2855, 2836, 2778, - 2740, 2732, 2709, 2690, 1627, -162, 1627, 1306, -1000, -1000, - -1000, -1000, -1000, 2685, 2147, 1306, 1786, 1781, 686, -1000, - -1000, 1644, 1306, 1306, 1644, 1644, 2593, 2522, 2499, 2452, - 2402, 2397, 1627, 1627, -1000, 1627, 2376, 2371, 2126, 2084, - 1306, -1000, 1320, 48083, -1000, -294, -1000, 24, 774, 1781, - -1000, 32027, 1306, -1000, -1000, 6243, -1000, 1238, -1000, -1000, - -1000, 29351, 1795, 2334, -1000, -1000, 1781, 1641, -1000, -1000, - 410, 131, 28682, 725, 725, 165, 1234, 1234, 19314, -1000, - -1000, -1000, -1000, -1000, -1000, 685, 2473, 423, 1781, -1000, - 1823, 2831, -1000, -1000, -1000, 2325, 22660, -1000, -1000, 1781, - 1781, 48083, 1733, 1640, -1000, 678, -1000, 1292, 1785, 56, - 44, -1000, -1000, -1000, -1000, 1234, -1000, 1260, 460, 704, - -1000, 559, -1000, -1000, -1000, -1000, 2201, 147, -1000, -1000, - -1000, 334, 410, -1000, -1000, -1000, -1000, -1000, -1000, 1513, - 1513, -1000, -1000, -1000, -1000, -1000, 1209, -1000, -1000, -1000, - -1000, 1208, -1000, -1000, 1188, -1000, -1000, 2307, 2046, 320, - -1000, -1000, 823, 1504, -1000, -1000, 2203, 823, 823, 46745, - -1000, -1000, 1537, 2308, 305, 48083, 914, 2056, -1000, 1996, - 1996, 1996, 48083, -1000, -1000, -1000, -1000, -1000, -1000, -444, - 75, 437, -1000, -1000, -1000, 4066, 46745, 1615, -1000, 294, - -1000, 1492, -1000, 46745, -1000, 1611, 1947, 1250, 1250, -1000, - -1000, -1000, 46745, 1781, -1000, -1000, -1000, -1000, 577, 2247, - 324, -1000, -1000, -181, -1000, -1000, 272, 294, 47414, 1250, - 750, -1000, -1000, -1000, -1000, -1000, -445, 1599, 603, 297, - 361, 48083, 48083, 48083, 48083, 48083, 666, -1000, -1000, 82, - -1000, -1000, -1000, -1000, 263, -1000, -1000, -1000, -1000, -1000, - -1000, 263, -1000, -1000, -1000, 81, -1000, -1000, -1000, -1000, - 263, -1000, -1000, -1000, -1000, -1000, -1000, 263, -1000, -1000, - -1000, -1000, 355, 573, -1000, 48083, 48083, 682, -1000, -1000, - -1000, -1000, -1000, -1000, 932, -1000, -1000, 932, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 1537, 1749, 1749, 1749, 1749, + 1749, 18708, 1654, -1000, -1000, -1000, 1329, 2872, 1388, 2865, + 1749, 1749, -1000, 1749, 2833, 2757, 1387, 1716, 1387, 1787, + -1000, 2753, 1749, 2746, 2736, 2726, 2097, 2697, 2587, 2583, + 1749, 1749, 1749, 2078, 2557, 2520, 2472, 2457, 2432, 2411, + 2395, 2387, 2380, 1749, -158, 1749, 1387, -1000, -1000, -1000, + -1000, -1000, 2363, 2054, 1387, 1786, 1361, 677, -1000, -1000, + 1679, 1387, 1387, 1679, 1679, 2339, 2325, 2318, 2314, 2306, + 2283, 1749, 1749, -1000, 1749, 2247, 2236, 2036, 2030, 1387, + -1000, 1386, 47520, -1000, -320, -1000, 26, 707, 1361, -1000, + 31440, 1387, -1000, -1000, 7683, -1000, 1203, -1000, -1000, -1000, + 28760, 1518, 3022, -1000, -1000, 1361, 1674, -1000, -1000, 388, + 124, 28090, 675, 675, 187, 1282, 1282, 18708, -1000, -1000, + -1000, -1000, -1000, -1000, 663, 2495, 396, 1361, -1000, 1738, + 2370, -1000, -1000, -1000, 2328, 22059, -1000, -1000, 1361, 1361, + 47520, 1768, 1677, -1000, 659, -1000, 1276, 1779, 79, 44, + -1000, -1000, -1000, -1000, 1282, -1000, 1257, 420, 329, -1000, + 492, -1000, -1000, -1000, -1000, 2204, 126, -1000, -1000, -1000, + 259, 388, -1000, -1000, -1000, -1000, -1000, -1000, 1504, 1504, + -1000, -1000, -1000, -1000, -1000, 1120, -1000, -1000, -1000, -1000, + 1114, -1000, -1000, 1109, -1000, -1000, 2251, 2022, 317, -1000, + -1000, 792, 1496, -1000, -1000, 2206, 792, 792, 46180, -1000, + -1000, 1663, 2280, 302, 47520, 814, 2040, -1000, 1948, 1948, + 1948, 47520, -1000, -1000, -1000, -1000, -1000, -1000, -449, 78, + 428, -1000, -1000, -1000, 4339, 46180, 1659, -1000, 280, -1000, + 1655, -1000, 46180, -1000, 1629, 1901, 1272, 1272, -1000, -1000, + -1000, 46180, 1361, -1000, -1000, -1000, -1000, 594, 2245, 303, + -1000, -1000, -177, -1000, -1000, 277, 280, 46850, 1272, 729, + -1000, -1000, -1000, -1000, -1000, -441, 1617, 578, 294, 352, + 47520, 47520, 47520, 47520, 47520, 619, -1000, -1000, 75, -1000, + -1000, -1000, -1000, 269, -1000, -1000, -1000, -1000, -1000, -1000, + 269, -1000, -1000, -1000, -1000, -1000, 269, -1000, -1000, -1000, + -1000, -1000, 269, -1000, -1000, -1000, 72, -1000, -1000, -1000, + -1000, 269, -1000, -1000, -1000, -1000, -1000, -1000, 269, -1000, + -1000, -1000, -1000, 375, 538, -1000, 47520, 47520, 680, -1000, + -1000, -1000, -1000, -1000, -1000, 940, -1000, -1000, 940, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 2242, 48083, 37, -408, -1000, -403, 19314, -1000, -1000, -1000, - -1000, 1477, 584, 1975, 19983, 19983, 19983, -1000, -1000, -1000, - 1135, 1135, 28013, -1000, 19314, 18645, -1000, -1000, 19314, 19314, - 896, -1000, 19314, 1155, -1000, 19314, -1000, -1000, -1000, 1320, - 1627, 1627, 1627, 1627, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 1824, 19314, 19314, 19314, 1306, 358, - -1000, -1000, -1000, -1000, -1000, 2486, -1000, 19314, -1000, 28013, - 19314, 19314, 19314, -1000, -1000, -1000, 19314, 19314, -1000, -1000, - 19314, 19314, -1000, 19314, 19314, 19314, -1000, 19314, 19314, 19314, - 19314, -1000, -1000, -1000, -1000, 19314, 19314, 19314, 19314, 19314, - 19314, 19314, 19314, 19314, 19314, -1000, -1000, 33365, 116, -162, - 1215, 116, 1215, -1000, 18645, 13274, -1000, -1000, -1000, -1000, - -1000, 19314, 19314, 19314, 19314, 19314, 19314, -1000, -1000, -1000, - 19314, 19314, -1000, 19314, -1000, 19314, -1000, -1000, -1000, -1000, - -1000, 774, -1000, 689, 689, 689, 46745, -1000, -1000, -1000, - -1000, 1782, -1000, 2439, -1000, 2133, 2132, 2485, 2473, -1000, - 24668, 2334, -1000, -1000, 46745, -271, -1000, 2177, 2164, 725, - 725, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 11249, 2413, - 19314, 2050, 47414, 157, -1000, 23999, 46745, 47414, 24668, 24668, - 24668, 24668, 24668, -1000, 2100, 2086, -1000, 2096, 2082, 2127, - 48083, -1000, 1447, 1593, -1000, 19314, 26675, 1758, 24668, -1000, - -1000, 24668, 48083, 10574, -1000, -1000, 28, 30, -1000, -1000, - -1000, -1000, 574, -1000, -1000, 1780, 2319, 2191, -1000, -1000, - -1000, -1000, -1000, 1585, -1000, 1583, 1777, 1563, 1509, 240, - -1000, 1926, 2238, 823, 823, -1000, 1187, -1000, 1250, 1502, - 1496, -1000, -1000, -1000, 586, -1000, 2301, 48083, 2049, 2048, - 2034, -1000, -453, 1167, 1944, 1867, 19314, 1939, 2454, 1771, - 46745, -1000, -1000, 47414, -1000, 326, -1000, 320, 46745, -1000, - -1000, -1000, 430, 48083, -1000, 4991, -1000, -1000, -1000, 294, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 48083, 317, -1000, - 1936, 1252, -1000, -1000, 1897, -1000, -1000, -1000, -1000, 266, - 404, 1495, 261, 1494, 261, 1481, 261, 261, -1000, 48083, - 674, 2046, 48083, -1000, -1000, -1000, 949, 949, -1000, -1000, - 2235, -1000, 1250, 1627, 19983, 19983, -1000, 760, 333, -138, - 1928, 1928, -1000, 1928, 1930, -1000, 1928, 211, 1928, 210, - 1928, -1000, -1000, 1306, 1306, 1320, -1000, 2077, 1708, -1000, - 1234, 19314, 2367, -1000, -1000, -1000, -1000, -1000, -29, 2363, - 2357, 1627, -1000, 1927, 1913, 19314, 1627, 1306, 2069, 1627, - 1627, 1627, 1627, -1000, 1234, 1320, 2298, 1320, 1627, 1627, - 2237, 351, 1627, 1491, 1491, 1491, 1491, 1491, 1320, 1320, - 1320, 1320, 46745, -1000, -162, -1000, -1000, -202, -205, -1000, - 1306, -162, 1774, 1306, -1000, 1990, 1888, 2116, 1871, 1627, - 1921, 1627, 1627, 1627, 1862, -1000, 2354, 2354, 2354, 1486, - 1238, 48083, -1000, -1000, -1000, -1000, 2473, 2470, 1773, -1000, - -1000, 131, 481, -1000, 2150, 2164, -1000, 2453, 2172, 2450, - -1000, -1000, -1000, -1000, -1000, 1234, -1000, 2284, 1732, -1000, - 854, 1765, -1000, -1000, 17976, 1489, 2118, 671, 1486, 1799, - 2831, 1993, 2033, 2353, -1000, -1000, -1000, -1000, 2085, -1000, - 2070, -1000, -1000, 1875, -1000, 1917, 457, 24668, 1797, 1797, - -1000, 665, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1017, - 4784, 2516, -1000, 1453, -1000, 1249, 213, 1148, -1000, -1000, - 823, 823, -1000, 944, 942, -1000, 48083, 1911, -1000, 410, - 1449, 410, 1147, -1000, -1000, 1117, -1000, -1000, -1000, -1000, - 1881, 2037, -1000, -1000, -1000, -1000, 48083, -1000, -1000, 48083, - 48083, 48083, 1893, 2449, -1000, 19314, 1884, 853, 2266, 46745, - 46745, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 553, 823, -423, 391, 387, 823, 823, 823, - -454, -1000, -1000, 1479, 1476, -1000, -117, -1000, 19314, -1000, - -1000, -1000, 1191, 1191, 1445, 1439, 1435, -1000, 1875, -1000, - -1000, -1000, 1487, -1000, -1000, -100, 46745, 46745, 46745, 46745, - -1000, -1000, 1064, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 760, 1306, - 359, -105, 1306, -1000, -1000, 410, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 19314, -1000, 19314, -1000, - 1234, 19314, 2413, 1426, 19314, 19314, -1000, 1099, 1086, 1627, - -1000, -1000, -1000, 19314, -1000, -1000, -1000, -1000, -1000, 19314, - -1000, -1000, -1000, 19314, 244, 1135, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 1306, 450, -1000, -1000, - -1000, -1000, 2482, -1000, 1306, 19314, -1000, -1000, 19314, -1000, - 19314, 19314, -1000, 19314, -1000, 19314, -1000, -1000, -1000, -1000, - 19314, 1781, 2234, 1781, 1781, 26675, -1000, -1000, 2470, 2468, - 2448, 2163, 2167, 2167, 2150, -1000, 2446, 2438, -1000, 1421, - 2432, 1417, 931, -1000, 47414, 19314, 157, -1000, 407, 46745, - 157, 46745, -1000, 2458, -1000, -1000, 19314, 1883, -1000, 19314, - -1000, -1000, -1000, -1000, 6587, 2473, 1797, -1000, -1000, 777, - -1000, 19314, -1000, -1000, -1000, 8141, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 1407, 1395, -1000, -1000, 1882, 19314, - -1000, -1000, -1000, 1480, 1363, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 1875, -1000, -1000, -1000, -1000, 430, -449, - 2246, 46745, 1073, -1000, 1433, 1771, 425, 157, 1383, 823, - 823, 823, 1060, 1056, 32027, 1431, -1000, 46745, 506, -1000, - 430, -1000, -132, -135, 1627, -1000, -1000, 2316, -1000, -1000, - 13274, -1000, -1000, 1866, 1994, -1000, -1000, -1000, -1000, 2073, - -92, -115, -1000, -1000, 1627, 1627, 1601, 1306, -1000, 1627, - 1627, 1338, 1321, -1000, 1627, 1320, 1730, -1000, 244, 1306, - 2032, -1000, -1000, 6587, -1000, -1000, 2458, 2427, 116, -1000, - -1000, 291, 116, 1234, 1675, 1627, 1633, 1597, 1627, 1627, - 27344, -1000, 2423, 2418, 32696, 32696, 774, 2468, -171, 19314, - 19314, 2140, 1127, -1000, -1000, -1000, -1000, 1374, 1368, -1000, - 1328, -1000, 2515, -1000, 1234, -1000, 157, -1000, 663, 1765, - -1000, 2413, 1234, 46745, 1234, 135, 2458, -1000, 1627, -1000, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - -1000, -1000, 46745, 2223, -1000, -1000, 2314, 1400, 74, -1000, - 1313, 1771, -1000, -1000, 151, -1000, 19314, -1000, 32027, 1326, - 1324, -1000, -1000, -1000, -1000, -454, -1000, -1000, -1000, -1000, - -1000, -1000, 420, 1770, -1000, 821, 46745, 48083, -1000, 2060, - -1000, -1000, -1000, 19314, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 19314, -1000, 1306, 2031, -1000, -286, -1000, -427, - 19314, -162, -1000, -1000, -162, -1000, 19314, -1000, -1000, 19314, - -1000, 19314, -1000, -1000, 1362, -1000, -1000, -1000, -1000, -1000, - 1362, 1362, -1000, -171, -1000, 1766, -1000, 46745, 1234, 1760, - -1000, 1051, -1000, -1000, -1000, -1000, -1000, 47414, 1765, 46745, - -1000, 1358, 1306, 1781, 2413, -1000, 1337, -1000, 420, -1000, - 1865, 1867, -1000, -1000, -1000, 17307, -1000, -1000, -1000, -1000, - -1000, 209, -99, 13274, 9899, 1333, -1000, -97, 1627, 1320, - -1000, -388, -1000, -1000, -1000, -1000, 243, -1000, -1000, 1760, - -1000, -1000, 1536, 1403, 1341, 31358, -1000, -1000, -1000, -1000, - -171, -1000, -1000, 2312, -1000, -1000, 1635, -1000, -1000, 26675, - 46076, -1000, -85, 271, -99, 19314, 1841, 1306, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 32, -1000, -1000, -1000, - -1000, -1000, 1897, -109, -1000, -1000, -1000, 145, -415, -197, - -201, -1000, -1000, 19983, -1000, 19314, -1000, 19314, -1000, 19314, - -1000, -1000, -1000, 46745, 1781, -1000, 1305, -1000, 3879, -214, - 2030, -1000, -31, -1000, -1000, -1000, 1016, 1297, -1000, -1000, - -1000, -1000, -1000, -1000, 2205, 46745, -1000, 529, -1000, -1000, - -100, -124, 916, -1000, -1000, -1000, -1000, -1000, 1315, 1120, - 1627, -1000, 46745, -1000, 46076, -208, 750, 6587, -1000, 2020, - 2018, 2479, -1000, -1000, -1000, -1000, -1000, -1000, -461, 1303, - 318, -1000, -1000, 145, -1000, 19314, -1000, 19314, -1000, 1306, - -1000, -1000, 2296, 135, -1000, 2509, -1000, 2500, 773, 773, - -1000, 1044, -461, -1000, -1000, 1627, 1627, -1000, -217, -1000, - -1000, -1000, -1000, -1000, 517, 1088, -1000, -1000, -1000, -1000, - -1000, 6587, -1000, -1000, -1000, 238, 238, -1000, -1000, + -1000, 2239, 47520, 43, -404, -1000, -401, 18708, -1000, -1000, + -1000, -1000, 1145, 565, 1774, 19378, 19378, 19378, -1000, -1000, + -1000, 881, 881, 27420, -1000, 18708, 18038, -1000, -1000, 18708, + 18708, 824, -1000, 18708, 1360, -1000, 18708, -1000, -1000, -1000, + 1386, 1749, 1749, 1749, 1749, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 1770, 18708, 18708, 18708, 1387, + 386, -1000, -1000, -1000, -1000, -1000, 2508, -1000, 18708, -1000, + 27420, 18708, 18708, 18708, -1000, -1000, -1000, 18708, 18708, -1000, + -1000, 18708, 18708, -1000, 18708, 18708, 18708, -1000, 18708, 18708, + 18708, 18708, -1000, -1000, -1000, -1000, 18708, 18708, 18708, 18708, + 18708, 18708, 18708, 18708, 18708, 18708, -1000, -1000, 32780, 107, + -158, 1159, 107, 1159, -1000, 18038, 12659, -1000, -1000, -1000, + -1000, -1000, 18708, 18708, 18708, 18708, 18708, 18708, -1000, -1000, + -1000, 18708, 18708, -1000, 18708, -1000, 18708, -1000, -1000, -1000, + -1000, -1000, 707, -1000, 687, 687, 687, 46180, -1000, -1000, + -1000, -1000, 1769, -1000, 2381, -1000, 2123, 2121, 2503, 2495, + -1000, 24070, 3022, -1000, -1000, 46180, -283, -1000, 2147, 2185, + 675, 675, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 10631, + 2428, 18708, 2039, 46850, 160, -1000, 23400, 46180, 46850, 24070, + 24070, 24070, 24070, 24070, -1000, 2088, 2079, -1000, 2086, 2080, + 2161, 47520, -1000, 1501, 1602, -1000, 18708, 26080, 1706, 24070, + -1000, -1000, 24070, 47520, 9955, -1000, -1000, 32, 21, -1000, + -1000, -1000, -1000, 702, -1000, -1000, 1793, 2324, 2190, -1000, + -1000, -1000, -1000, -1000, 1585, -1000, 1577, 1766, 1563, 1555, + 244, -1000, 1941, 2231, 792, 792, -1000, 1104, -1000, 1272, + 1488, 1486, -1000, -1000, -1000, 531, -1000, 2294, 47520, 2023, + 2013, 2001, -1000, -456, 1096, 1900, 1780, 18708, 1898, 2468, + 1746, 46180, -1000, -1000, 46850, -1000, 174, -1000, 317, 46180, + -1000, -1000, -1000, 405, 47520, -1000, 7037, -1000, -1000, -1000, + 280, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 47520, 327, + -1000, 1893, 1227, -1000, -1000, 1874, -1000, -1000, -1000, -1000, + 235, 394, 1472, 264, 1454, 264, 264, 264, 1450, 264, + 264, -1000, 47520, 673, 2022, 47520, -1000, -1000, -1000, 930, + 930, -1000, -1000, 2226, -1000, 1272, 1749, 19378, 19378, -1000, + 730, 435, -138, 1888, 1888, -1000, 1888, 1892, -1000, 1888, + 234, 1888, 231, 1888, -1000, -1000, 1387, 1387, 1386, -1000, + 2018, 1204, -1000, 1282, 18708, 2219, -1000, -1000, -1000, -1000, + -1000, -27, 2210, 2203, 1749, -1000, 1878, 1871, 18708, 1749, + 1387, 2009, 1749, 1749, 1749, 1749, -1000, 1282, 1386, 2197, + 1386, 1749, 1749, 2141, 349, 1749, 1548, 1548, 1548, 1548, + 1548, 1386, 1386, 1386, 1386, 46180, -1000, -158, -1000, -1000, + -197, -199, -1000, 1387, -158, 1753, 1387, -1000, 1999, 1928, + 2128, 1873, 1749, 2117, 1749, 1749, 1749, 1784, -1000, 2340, + 2340, 2340, 1522, 1203, 47520, -1000, -1000, -1000, -1000, 2495, + 2491, 1751, -1000, -1000, 124, 481, -1000, 2142, 2185, -1000, + 2464, 2149, 2459, -1000, -1000, -1000, -1000, -1000, 1282, -1000, + 2248, 1687, -1000, 794, 1735, -1000, -1000, 17368, 1531, 2118, + 651, 1522, 1775, 2370, 1958, 1996, 2965, -1000, -1000, -1000, + -1000, 2064, -1000, 2032, -1000, -1000, 1846, -1000, 2061, 416, + 24070, 1741, 1741, -1000, 634, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 962, 6027, 2531, -1000, 1437, -1000, 1235, 208, + 1091, -1000, -1000, 792, 792, -1000, 890, 876, -1000, 47520, + 1870, -1000, 388, 1435, 388, 1077, -1000, -1000, 1041, -1000, + -1000, -1000, -1000, 1865, 2000, -1000, -1000, -1000, -1000, 47520, + -1000, -1000, 47520, 47520, 47520, 1866, 2454, -1000, 18708, 1864, + 793, 2085, 46180, 46180, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 522, 792, -421, 378, 373, + 792, 792, 792, -457, -1000, -1000, 1494, 1481, -1000, -126, + -1000, 18708, -1000, -1000, -1000, 1225, 1225, 1433, 1431, 1429, + -1000, 1846, -1000, -1000, -1000, 1635, -1000, -1000, -112, 46180, + 46180, 46180, 46180, -1000, -1000, 1101, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 730, 1387, 351, -117, 1387, -1000, -1000, + 388, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 18708, -1000, 18708, -1000, 1282, 18708, 2428, 1421, 18708, + 18708, -1000, 1035, 1031, 1749, -1000, -1000, -1000, 18708, -1000, + -1000, -1000, -1000, -1000, 18708, -1000, -1000, -1000, 18708, 281, + 881, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 1387, 411, -1000, -1000, -1000, -1000, 2500, -1000, 1387, + 18708, -1000, -1000, 18708, -1000, 18708, 18708, -1000, 18708, -1000, + 18708, -1000, -1000, -1000, -1000, 18708, 1361, 2137, 1361, 1361, + 26080, -1000, -1000, 2491, 2485, 2453, 2134, 2144, 2144, 2142, + -1000, 2452, 2450, -1000, 1416, 2449, 1379, 862, -1000, 46850, + 18708, 160, -1000, 393, 46180, 160, 46180, -1000, 2433, -1000, + -1000, 18708, 1848, -1000, 18708, -1000, -1000, -1000, -1000, 8111, + 2495, 1741, -1000, -1000, 743, -1000, 18708, -1000, -1000, -1000, + 7479, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1377, + 1375, -1000, -1000, 1847, 18708, -1000, -1000, -1000, 1593, 1556, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1846, -1000, + -1000, -1000, -1000, 405, -451, 2050, 46180, 1014, -1000, 1478, + 1746, 399, 160, 1359, 792, 792, 792, 1003, 995, 31440, + 1458, -1000, 46180, 446, -1000, 405, -1000, -131, -132, 1749, + -1000, -1000, 2321, -1000, -1000, 12659, -1000, -1000, 1844, 1882, + -1000, -1000, -1000, -1000, 2099, -99, -120, -1000, -1000, 1749, + 1749, 1972, 1387, -1000, 1749, 1749, 1495, 1485, -1000, 1749, + 1386, 1631, -1000, 281, 1387, 1991, -1000, -1000, 8111, -1000, + -1000, 2433, 2442, 107, -1000, -1000, 290, 107, 1282, 1600, + 1749, 1596, 1592, 1749, 1749, 26750, -1000, 2434, 2391, 32110, + 32110, 707, 2485, -165, 18708, 18708, 2132, 1090, -1000, -1000, + -1000, -1000, 1354, 1338, -1000, 1330, -1000, 2526, -1000, 1282, + -1000, 160, -1000, 626, 1735, -1000, 2428, 1282, 46180, 1282, + 120, 2433, -1000, 1749, -1000, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, -1000, -1000, 46180, 2041, -1000, + -1000, 2320, 1448, 77, -1000, 1482, 1746, -1000, -1000, 157, + -1000, 18708, -1000, 31440, 1312, 1307, -1000, -1000, -1000, -1000, + -457, -1000, -1000, -1000, -1000, -1000, -1000, 406, 1742, -1000, + 789, 46180, 47520, -1000, 2098, -1000, -1000, -1000, 18708, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 18708, -1000, 1387, + 1982, -1000, -290, -1000, -420, 18708, -158, -1000, -1000, -158, + -1000, 18708, -1000, -1000, 18708, -1000, 18708, -1000, -1000, 1425, + -1000, -1000, -1000, -1000, -1000, 1425, 1425, -1000, -165, -1000, + 1739, -1000, 46180, 1282, 1716, -1000, 1056, -1000, -1000, -1000, + -1000, -1000, 46850, 1735, 46180, -1000, 1409, 1387, 1361, 2428, + -1000, 1405, -1000, 406, -1000, 1794, 1780, -1000, -1000, -1000, + 16698, -1000, -1000, -1000, -1000, -1000, 205, -108, 12659, 9279, + 1402, -1000, -103, 1749, 1386, -1000, -386, -1000, -1000, -1000, + -1000, 224, -1000, -1000, 1716, -1000, -1000, 1561, 1520, 1499, + 30770, -1000, -1000, -1000, -1000, -165, -1000, -1000, 2315, -1000, + -1000, 1709, -1000, -1000, 26080, 45510, -1000, -82, 338, -108, + 18708, 1737, 1387, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 41, -1000, -1000, -1000, -1000, -1000, 1874, -118, -1000, + -1000, -1000, 266, -411, -206, -211, -1000, -1000, 19378, -1000, + 18708, -1000, 18708, -1000, 18708, -1000, -1000, -1000, 46180, 1361, + -1000, 1383, -1000, 4700, -216, 1971, -1000, -34, -1000, -1000, + -1000, 961, 1305, -1000, -1000, -1000, -1000, -1000, -1000, 1867, + 46180, -1000, 499, -1000, -1000, -112, -122, 870, -1000, -1000, + -1000, -1000, -1000, 1492, 1126, 1749, -1000, 46180, -1000, 45510, + -209, 729, 8111, -1000, 1969, 1966, 2499, -1000, -1000, -1000, + -1000, -1000, -1000, -460, 1358, 305, -1000, -1000, 266, -1000, + 18708, -1000, 18708, -1000, 1387, -1000, -1000, 2275, 120, -1000, + 2525, -1000, 2521, 815, 815, -1000, 974, -460, -1000, -1000, + 1749, 1749, -1000, -223, -1000, -1000, -1000, -1000, -1000, 496, + 1037, -1000, -1000, -1000, -1000, -1000, 8111, -1000, -1000, -1000, + 265, 265, -1000, -1000, } var yyPgo = [...]int{ - 0, 3126, 3124, 28, 1, 37, 36, 3123, 45, 124, - 217, 26, 207, 112, 3122, 191, 3121, 3116, 3115, 3114, - 3113, 3112, 2547, 2546, 2542, 3107, 3100, 3099, 3096, 3091, - 3089, 3086, 3084, 3083, 3082, 187, 179, 208, 3081, 3079, - 3075, 125, 201, 96, 98, 205, 3073, 3072, 88, 3071, - 3068, 3064, 199, 198, 197, 921, 3063, 196, 130, 58, - 3062, 3061, 3060, 3059, 3058, 3056, 3050, 3049, 3048, 3046, - 3045, 3044, 3040, 3036, 3031, 3029, 3026, 3024, 3022, 3021, - 261, 3019, 3012, 21, 3008, 97, 3004, 2998, 2995, 2992, - 2991, 8, 2989, 2988, 14, 43, 2987, 2986, 52, 2983, - 2981, 2980, 2976, 2967, 19, 2963, 25, 2962, 32, 2958, - 2957, 141, 2954, 2953, 2951, 39, 2949, 2944, 2940, 2935, - 2934, 2930, 2929, 158, 2928, 2927, 2926, 189, 215, 2918, - 2908, 183, 115, 120, 2907, 2906, 110, 200, 2893, 137, - 2892, 2888, 2887, 167, 2883, 2207, 2878, 2877, 76, 71, - 2875, 54, 2870, 2869, 13, 85, 75, 12, 113, 114, - 2867, 2865, 70, 94, 2863, 131, 2862, 2861, 116, 80, - 2857, 117, 111, 2856, 2855, 11, 4, 2854, 53, 9, - 6, 77, 2853, 2852, 121, 2849, 2847, 2846, 108, 2843, - 2842, 3231, 2841, 100, 152, 119, 87, 2838, 46, 51, - 2837, 2834, 2833, 2830, 2823, 56, 2822, 2821, 2819, 163, - 342, 180, 2813, 40, 78, 60, 153, 2811, 63, 95, - 210, 184, 2809, 2806, 156, 155, 2801, 2785, 72, 44, - 50, 2783, 104, 145, 132, 67, 102, 151, 2779, 2762, - 66, 82, 2761, 2757, 2754, 2745, 186, 2743, 2740, 81, - 2739, 64, 2733, 203, 2730, 16, 79, 2723, 42, 182, - 2722, 83, 2721, 2720, 74, 149, 86, 38, 2719, 174, - 178, 143, 181, 2716, 2715, 57, 2714, 2712, 2708, 206, - 352, 2705, 2703, 147, 192, 177, 168, 101, 2702, 360, - 2701, 2699, 106, 2, 5316, 2698, 41, 176, 2697, 2696, - 6618, 157, 49, 22, 2693, 136, 2691, 2688, 2687, 2686, - 255, 194, 138, 175, 65, 2685, 2684, 2682, 17, 2673, - 2669, 2667, 2660, 2658, 2657, 91, 35, 34, 33, 251, - 69, 18, 109, 185, 173, 92, 2652, 2648, 2647, 140, - 105, 2645, 172, 171, 142, 139, 2639, 188, 161, 123, - 2629, 103, 31, 2628, 2626, 2625, 2623, 107, 2622, 2620, - 2619, 2618, 170, 160, 134, 90, 2615, 93, 128, 165, - 169, 55, 2613, 61, 2609, 2603, 30, 204, 27, 2602, - 15, 118, 166, 2598, 4456, 193, 2595, 20, 362, 162, - 2592, 2589, 5, 7, 10, 2588, 2583, 2582, 2577, 144, - 2575, 2572, 2571, 2570, 24, 47, 23, 3, 122, 89, - 2568, 2567, 159, 164, 2566, 2557, 2553, 2548, 3209, 0, - 150, 2535, 209, + 0, 3102, 3101, 25, 1, 35, 33, 3100, 52, 110, + 217, 58, 248, 112, 3099, 189, 3097, 3093, 3092, 3089, + 3085, 3084, 2590, 2575, 2556, 3083, 3082, 3081, 3079, 3078, + 3077, 3076, 3075, 3074, 3073, 203, 180, 213, 3071, 3070, + 3068, 135, 199, 101, 103, 207, 3067, 3066, 93, 3065, + 3063, 3062, 204, 201, 196, 925, 3056, 195, 130, 54, + 3052, 3051, 3050, 3048, 3044, 3041, 3040, 3037, 3029, 3025, + 3023, 3022, 3021, 3020, 3019, 3017, 3012, 3010, 3009, 3008, + 293, 3005, 3003, 16, 3002, 97, 2999, 2998, 2997, 2996, + 2991, 7, 2990, 2989, 20, 42, 2988, 2987, 48, 2986, + 2984, 2982, 2979, 2978, 14, 2976, 22, 2969, 38, 2967, + 2965, 143, 2964, 2963, 2962, 39, 2961, 2952, 2951, 2950, + 2949, 2948, 2943, 158, 2942, 2941, 2940, 192, 208, 2939, + 2930, 184, 121, 124, 2929, 2928, 116, 209, 2927, 136, + 2926, 2925, 2923, 172, 2922, 2212, 2920, 2919, 77, 122, + 2917, 50, 2916, 2915, 9, 90, 76, 4, 81, 83, + 2913, 2911, 72, 94, 2907, 119, 2906, 2904, 117, 78, + 2903, 114, 111, 2901, 2900, 17, 21, 2897, 36, 29, + 34, 80, 2891, 2890, 125, 2886, 2884, 2882, 109, 2881, + 2880, 2237, 2879, 104, 148, 115, 87, 2874, 56, 75, + 2873, 2872, 2871, 2870, 2866, 57, 2864, 2863, 2861, 163, + 71, 188, 2860, 46, 45, 63, 153, 2857, 89, 88, + 211, 185, 2856, 2855, 155, 152, 2852, 2851, 65, 41, + 44, 2849, 123, 144, 133, 26, 113, 154, 2846, 2844, + 66, 79, 2843, 2842, 2832, 2829, 186, 2800, 2797, 85, + 2796, 64, 2784, 191, 2780, 12, 67, 2778, 49, 177, + 2766, 86, 2764, 2763, 74, 145, 82, 37, 2762, 178, + 183, 146, 181, 2760, 2759, 60, 2758, 2756, 2755, 210, + 333, 2746, 2745, 100, 187, 170, 169, 102, 2744, 351, + 2743, 2742, 107, 2, 5242, 2741, 40, 179, 2739, 2738, + 5973, 156, 43, 24, 2737, 131, 2734, 2721, 2720, 2716, + 222, 190, 128, 182, 69, 2714, 2713, 2706, 13, 2705, + 2704, 2703, 2702, 2690, 2688, 91, 32, 31, 30, 251, + 70, 11, 118, 194, 173, 92, 2686, 2685, 2684, 138, + 106, 2676, 176, 175, 139, 174, 2674, 193, 159, 141, + 2673, 96, 28, 2670, 2665, 2660, 2658, 105, 2657, 2656, + 2654, 2653, 171, 164, 137, 108, 2650, 98, 132, 168, + 165, 53, 2649, 47, 2647, 2646, 27, 205, 23, 2644, + 6, 120, 150, 2643, 4169, 197, 2637, 15, 358, 166, + 2631, 2628, 5, 8, 10, 2619, 2618, 2617, 2615, 151, + 2612, 2609, 2603, 2601, 19, 51, 18, 3, 134, 95, + 2588, 2570, 160, 162, 2569, 2568, 2563, 2562, 3191, 0, + 147, 2557, 212, } -//line sql.y:8291 +//line sql.y:8390 type yySymType struct { union any empty struct{} @@ -7606,62 +7554,63 @@ var yyR1 = [...]int{ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 111, 111, 112, 112, 112, - 112, 114, 114, 114, 372, 372, 59, 59, 3, 3, - 174, 176, 177, 177, 175, 175, 175, 175, 175, 175, - 61, 61, 60, 60, 179, 178, 180, 180, 180, 1, - 1, 2, 2, 4, 4, 377, 377, 377, 377, 377, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 111, 111, 112, + 112, 112, 112, 114, 114, 114, 372, 372, 59, 59, + 3, 3, 174, 176, 177, 177, 175, 175, 175, 175, + 175, 175, 61, 61, 60, 60, 179, 178, 180, 180, + 180, 1, 1, 2, 2, 4, 4, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, - 377, 377, 377, 377, 377, 377, 377, 338, 338, 338, - 371, 371, 373, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 117, 116, 116, 115, 118, 118, 118, - 118, 118, 118, 118, 118, 375, 375, 375, 62, 62, - 376, 326, 327, 328, 5, 6, 352, 374, 125, 125, - 29, 38, 38, 30, 30, 30, 30, 31, 31, 63, - 64, 415, 415, 68, 68, 68, 69, 69, 65, 65, + 377, 377, 377, 377, 377, 377, 377, 377, 377, 338, + 338, 338, 371, 371, 373, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 117, 116, 116, 115, 118, + 118, 118, 118, 118, 118, 118, 118, 375, 375, 375, + 62, 62, 376, 326, 327, 328, 5, 6, 352, 374, + 125, 125, 29, 38, 38, 30, 30, 30, 30, 31, + 31, 63, 64, 415, 415, 68, 68, 68, 69, 69, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 281, 281, 290, 290, - 280, 280, 305, 305, 305, 283, 283, 283, 284, 284, - 401, 401, 401, 277, 277, 66, 66, 66, 306, 306, - 306, 306, 70, 70, 410, 410, 411, 411, 412, 412, - 412, 71, 72, 72, 308, 308, 309, 309, 73, 74, - 86, 86, 86, 86, 86, 86, 86, 87, 87, 87, - 87, 110, 110, 110, 15, 15, 15, 15, 82, 82, - 82, 14, 14, 17, 67, 67, 76, 398, 398, 399, - 400, 400, 400, 400, 77, 79, 79, 32, 32, 32, - 32, 32, 32, 135, 135, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 123, 130, 130, - 130, 124, 124, 421, 80, 81, 81, 128, 128, 128, - 121, 121, 121, 127, 127, 127, 16, 16, 18, 263, - 263, 19, 19, 132, 132, 134, 134, 134, 134, 134, - 136, 136, 136, 136, 136, 136, 136, 131, 131, 133, - 133, 133, 133, 298, 298, 298, 297, 297, 168, 168, - 170, 169, 169, 171, 171, 172, 172, 172, 172, 217, - 217, 194, 194, 256, 256, 257, 257, 255, 255, 262, - 262, 258, 258, 258, 258, 265, 265, 173, 173, 173, - 173, 181, 181, 182, 182, 183, 183, 307, 307, 303, - 303, 303, 302, 302, 187, 187, 187, 189, 188, 188, - 188, 188, 190, 190, 192, 192, 191, 191, 193, 198, - 198, 197, 197, 195, 195, 195, 195, 196, 196, 196, - 196, 199, 199, 145, 145, 145, 145, 145, 145, 145, - 160, 160, 160, 160, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 246, 246, 151, 151, 151, + 65, 65, 65, 65, 65, 65, 65, 65, 281, 281, + 290, 290, 280, 280, 305, 305, 305, 283, 283, 283, + 284, 284, 401, 401, 401, 277, 277, 66, 66, 66, + 306, 306, 306, 306, 70, 70, 410, 410, 411, 411, + 412, 412, 412, 71, 72, 72, 308, 308, 309, 309, + 73, 74, 86, 86, 86, 86, 86, 86, 86, 87, + 87, 87, 87, 110, 110, 110, 15, 15, 15, 15, + 82, 82, 82, 14, 14, 17, 67, 67, 76, 398, + 398, 399, 400, 400, 400, 400, 77, 79, 79, 32, + 32, 32, 32, 32, 32, 135, 135, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 130, 130, 130, 124, 124, 421, 80, 81, 81, 128, + 128, 128, 121, 121, 121, 127, 127, 127, 16, 16, + 18, 263, 263, 19, 19, 132, 132, 134, 134, 134, + 134, 134, 136, 136, 136, 136, 136, 136, 136, 131, + 131, 133, 133, 133, 133, 298, 298, 298, 297, 297, + 168, 168, 170, 169, 169, 171, 171, 172, 172, 172, + 172, 217, 217, 194, 194, 256, 256, 257, 257, 255, + 255, 262, 262, 258, 258, 258, 258, 265, 265, 173, + 173, 173, 173, 181, 181, 182, 182, 183, 183, 307, + 307, 303, 303, 303, 302, 302, 187, 187, 187, 189, + 188, 188, 188, 188, 190, 190, 192, 192, 191, 191, + 193, 198, 198, 197, 197, 195, 195, 195, 195, 196, + 196, 196, 196, 199, 199, 145, 145, 145, 145, 145, + 145, 145, 160, 160, 160, 160, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 246, 246, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 154, 222, 222, 221, 221, - 88, 88, 88, 89, 89, 90, 90, 90, 90, 90, - 91, 91, 91, 91, 91, 146, 146, 93, 93, 92, - 92, 212, 212, 295, 295, 94, 95, 95, 98, 98, - 97, 96, 96, 102, 102, 99, 99, 101, 101, 100, - 103, 103, 104, 105, 105, 278, 278, 200, 200, 208, - 208, 208, 208, 201, 201, 201, 201, 201, 201, 201, - 209, 209, 209, 216, 210, 210, 206, 206, 204, 204, - 204, 204, 204, 204, 204, 204, 204, 204, 205, 205, + 155, 155, 155, 155, 155, 155, 155, 154, 222, 222, + 221, 221, 88, 88, 88, 89, 89, 90, 90, 90, + 90, 90, 91, 91, 91, 91, 91, 146, 146, 93, + 93, 92, 92, 212, 212, 295, 295, 94, 95, 95, + 98, 98, 97, 96, 96, 102, 102, 99, 99, 101, + 101, 100, 103, 103, 104, 105, 105, 278, 278, 200, + 200, 208, 208, 208, 208, 201, 201, 201, 201, 201, + 201, 201, 209, 209, 209, 216, 210, 210, 206, 206, + 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, @@ -7670,34 +7619,35 @@ var yyR1 = [...]int{ 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 165, 165, 165, 165, 227, 227, - 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, - 152, 152, 152, 152, 152, 153, 153, 166, 166, 166, - 166, 167, 167, 167, 167, 167, 167, 167, 315, 315, - 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 422, 422, 329, 329, 329, 329, 207, 207, 207, - 207, 207, 126, 126, 126, 126, 126, 312, 312, 312, - 316, 316, 316, 314, 314, 314, 314, 314, 314, 314, - 314, 314, 314, 314, 314, 314, 314, 314, 317, 317, - 225, 225, 122, 122, 223, 223, 224, 226, 226, 218, - 218, 218, 218, 220, 220, 203, 203, 203, 228, 228, - 229, 229, 106, 107, 107, 108, 108, 230, 230, 232, - 231, 231, 233, 234, 234, 234, 235, 235, 236, 236, - 236, 48, 48, 48, 48, 48, 43, 43, 43, 43, - 44, 44, 44, 44, 137, 137, 137, 137, 139, 139, - 138, 138, 83, 83, 84, 84, 84, 414, 414, 414, - 413, 413, 413, 413, 413, 413, 143, 143, 144, 144, - 144, 141, 141, 142, 142, 253, 253, 237, 237, 237, - 244, 244, 244, 240, 240, 242, 242, 242, 243, 243, - 243, 241, 250, 250, 252, 252, 251, 251, 247, 247, - 248, 248, 249, 249, 249, 245, 245, 202, 202, 202, - 202, 202, 254, 254, 254, 254, 266, 266, 213, 213, - 215, 215, 214, 214, 164, 267, 267, 275, 272, 272, - 273, 273, 299, 299, 299, 276, 276, 289, 289, 285, - 285, 286, 286, 279, 279, 291, 291, 291, 78, 211, - 211, 368, 368, 365, 294, 294, 296, 296, 300, 300, - 304, 304, 301, 301, 292, 292, 292, 292, 292, 292, + 205, 205, 205, 205, 205, 205, 165, 165, 165, 165, + 227, 227, 152, 152, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 153, 153, 166, + 166, 166, 166, 167, 167, 167, 167, 167, 167, 167, + 315, 315, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 422, 422, 329, 329, 329, 329, 207, + 207, 207, 207, 207, 126, 126, 126, 126, 126, 312, + 312, 312, 316, 316, 316, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 317, 317, 225, 225, 122, 122, 223, 223, 224, 226, + 226, 218, 218, 218, 218, 220, 220, 203, 203, 203, + 228, 228, 229, 229, 106, 107, 107, 108, 108, 230, + 230, 232, 231, 231, 233, 234, 234, 234, 235, 235, + 236, 236, 236, 48, 48, 48, 48, 48, 43, 43, + 43, 43, 44, 44, 44, 44, 137, 137, 137, 137, + 139, 139, 138, 138, 83, 83, 84, 84, 84, 414, + 414, 414, 413, 413, 413, 413, 413, 413, 143, 143, + 144, 144, 144, 141, 141, 142, 142, 253, 253, 237, + 237, 237, 244, 244, 244, 240, 240, 242, 242, 242, + 243, 243, 243, 241, 250, 250, 252, 252, 251, 251, + 247, 247, 248, 248, 249, 249, 249, 245, 245, 202, + 202, 202, 202, 202, 254, 254, 254, 254, 266, 266, + 213, 213, 215, 215, 214, 214, 164, 267, 267, 275, + 272, 272, 273, 273, 299, 299, 299, 276, 276, 289, + 289, 285, 285, 286, 286, 279, 279, 291, 291, 291, + 78, 211, 211, 368, 368, 365, 294, 294, 296, 296, + 300, 300, 304, 304, 301, 301, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, @@ -7712,7 +7662,7 @@ var yyR1 = [...]int{ 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 293, + 292, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, @@ -7753,8 +7703,7 @@ var yyR1 = [...]int{ 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 418, 419, 310, - 311, 311, 311, + 418, 419, 310, 311, 311, 311, } var yyR2 = [...]int{ @@ -7819,99 +7768,101 @@ var yyR2 = [...]int{ 11, 3, 6, 8, 6, 6, 6, 13, 8, 6, 10, 5, 5, 5, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 7, 5, 5, 5, 5, - 5, 7, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 7, 7, 5, 5, 0, 6, 5, 6, 4, - 5, 0, 8, 9, 0, 3, 0, 1, 0, 3, - 8, 4, 1, 3, 3, 6, 7, 7, 8, 4, - 0, 1, 0, 1, 3, 3, 1, 1, 2, 1, - 1, 0, 2, 0, 2, 5, 3, 7, 4, 4, - 4, 4, 3, 3, 3, 7, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 2, 0, 2, 2, - 1, 3, 2, 0, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 3, 1, 3, 3, 0, 2, 2, - 2, 2, 2, 2, 2, 4, 4, 3, 0, 1, - 4, 3, 4, 4, 3, 3, 3, 2, 1, 3, - 3, 3, 5, 7, 7, 6, 5, 3, 2, 3, - 4, 1, 3, 2, 3, 3, 2, 2, 3, 2, - 2, 3, 7, 3, 3, 3, 3, 4, 7, 5, - 2, 4, 4, 4, 4, 4, 5, 5, 4, 4, - 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, - 4, 4, 4, 4, 4, 4, 2, 3, 3, 3, - 3, 5, 2, 3, 3, 2, 2, 3, 4, 4, - 4, 3, 4, 4, 5, 3, 0, 1, 0, 1, - 1, 1, 0, 2, 2, 0, 2, 2, 0, 2, - 0, 1, 1, 1, 1, 2, 1, 3, 1, 1, - 1, 1, 1, 3, 0, 1, 1, 3, 3, 2, - 2, 1, 1, 5, 0, 1, 0, 1, 2, 3, - 0, 3, 3, 3, 3, 3, 1, 0, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, - 1, 4, 4, 4, 2, 2, 3, 1, 3, 2, - 1, 2, 1, 2, 2, 4, 4, 3, 3, 6, - 4, 7, 6, 1, 3, 2, 2, 2, 2, 1, - 1, 1, 1, 3, 2, 1, 1, 1, 0, 1, - 1, 0, 3, 0, 2, 0, 2, 1, 2, 2, - 0, 1, 1, 0, 1, 1, 5, 5, 4, 0, - 2, 4, 4, 0, 1, 0, 1, 2, 3, 4, - 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, - 2, 3, 5, 0, 1, 2, 1, 1, 0, 1, - 2, 1, 3, 1, 1, 1, 4, 3, 1, 1, - 2, 3, 7, 0, 3, 0, 1, 1, 3, 1, - 3, 1, 1, 3, 3, 1, 3, 4, 4, 4, - 3, 2, 4, 0, 1, 0, 2, 0, 1, 0, - 1, 2, 1, 1, 1, 2, 2, 1, 2, 3, - 2, 3, 2, 2, 2, 1, 1, 3, 3, 0, - 1, 1, 2, 6, 5, 6, 6, 0, 2, 3, - 3, 0, 2, 3, 3, 3, 2, 3, 1, 6, - 3, 4, 3, 1, 3, 4, 5, 6, 3, 4, - 5, 6, 3, 4, 1, 1, 1, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, - 1, 1, 1, 1, 3, 1, 1, 1, 2, 2, - 2, 2, 1, 1, 2, 7, 7, 6, 6, 2, - 2, 1, 6, 3, 3, 3, 1, 3, 1, 3, + 5, 5, 5, 5, 5, 5, 7, 7, 5, 5, + 5, 5, 5, 7, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 7, 7, 5, 5, 0, 6, 5, + 6, 4, 5, 0, 8, 9, 0, 3, 0, 1, + 0, 3, 8, 4, 1, 3, 3, 6, 7, 7, + 8, 4, 0, 1, 0, 1, 3, 3, 1, 1, + 2, 1, 1, 0, 2, 0, 2, 5, 3, 7, + 4, 4, 4, 4, 3, 3, 3, 7, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 2, 0, + 2, 2, 1, 3, 2, 0, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 3, 1, 3, 3, 0, + 2, 2, 2, 2, 2, 2, 2, 4, 4, 3, + 0, 1, 4, 3, 4, 4, 3, 3, 3, 2, + 1, 3, 3, 3, 5, 7, 7, 6, 5, 3, + 2, 3, 4, 1, 3, 2, 3, 3, 2, 2, + 3, 2, 2, 3, 7, 3, 3, 3, 3, 4, + 7, 5, 2, 4, 4, 4, 4, 4, 5, 5, + 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, + 4, 4, 4, 4, 4, 4, 4, 4, 2, 3, + 3, 3, 3, 5, 2, 3, 3, 2, 2, 3, + 4, 4, 4, 3, 4, 4, 5, 3, 0, 1, + 0, 1, 1, 1, 0, 2, 2, 0, 2, 2, + 0, 2, 0, 1, 1, 1, 1, 2, 1, 3, + 1, 1, 1, 1, 1, 3, 0, 1, 1, 3, + 3, 2, 2, 1, 1, 5, 0, 1, 0, 1, + 2, 3, 0, 3, 3, 3, 3, 3, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 1, 1, 0, 1, 2, - 5, 0, 3, 0, 1, 4, 4, 2, 0, 1, - 1, 2, 2, 1, 1, 2, 2, 0, 1, 1, - 1, 1, 5, 1, 3, 0, 3, 1, 1, 1, - 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 3, 4, 6, 4, 4, - 8, 6, 8, 6, 5, 4, 10, 2, 2, 1, - 2, 2, 2, 4, 5, 5, 5, 5, 5, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, - 8, 8, 6, 5, 4, 4, 4, 4, 4, 7, - 4, 4, 6, 6, 6, 8, 6, 6, 4, 4, - 3, 4, 6, 6, 4, 4, 4, 6, 8, 6, - 4, 6, 6, 8, 10, 7, 8, 8, 9, 4, - 4, 4, 4, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 4, 4, 6, 5, 9, 6, 9, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, - 6, 8, 10, 12, 14, 6, 8, 8, 10, 12, - 14, 6, 8, 10, 12, 6, 8, 4, 4, 3, - 4, 6, 6, 4, 6, 4, 6, 8, 0, 2, + 0, 1, 1, 4, 4, 4, 2, 2, 3, 1, + 3, 2, 1, 2, 1, 2, 2, 4, 4, 3, + 3, 6, 4, 7, 6, 1, 3, 2, 2, 2, + 2, 1, 1, 1, 1, 3, 2, 1, 1, 1, + 0, 1, 1, 0, 3, 0, 2, 0, 2, 1, + 2, 2, 0, 1, 1, 0, 1, 1, 5, 5, + 4, 0, 2, 4, 4, 0, 1, 0, 1, 2, + 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 1, 2, 3, 5, 0, 1, 2, 1, 1, + 0, 1, 2, 1, 3, 1, 1, 1, 4, 3, + 1, 1, 2, 3, 7, 0, 3, 0, 1, 1, + 3, 1, 3, 1, 1, 3, 3, 1, 3, 4, + 4, 4, 3, 2, 4, 0, 1, 0, 2, 0, + 1, 0, 1, 2, 1, 1, 1, 2, 2, 1, + 2, 3, 2, 3, 2, 2, 2, 1, 1, 3, + 3, 0, 1, 1, 2, 6, 5, 6, 6, 0, + 2, 3, 3, 0, 2, 3, 3, 3, 2, 3, + 1, 6, 3, 4, 3, 1, 3, 4, 5, 6, + 3, 4, 5, 6, 3, 4, 1, 1, 1, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, + 2, 2, 2, 2, 1, 1, 2, 7, 7, 6, + 6, 2, 2, 1, 6, 3, 3, 3, 1, 3, + 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 1, 1, 0, + 1, 2, 5, 0, 3, 0, 1, 4, 4, 2, + 0, 1, 1, 2, 2, 1, 1, 2, 2, 0, + 1, 1, 1, 1, 5, 1, 3, 0, 3, 1, + 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 3, 4, 6, + 4, 4, 8, 6, 8, 6, 5, 4, 10, 2, + 2, 1, 2, 2, 2, 4, 5, 5, 5, 5, + 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 8, 8, 8, 6, 5, 4, 4, 4, 4, + 4, 7, 4, 4, 6, 6, 6, 8, 6, 6, + 4, 4, 3, 4, 6, 6, 4, 4, 4, 6, + 8, 6, 4, 6, 6, 8, 10, 7, 8, 8, + 9, 4, 4, 4, 4, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 4, 4, 6, 5, 9, + 6, 9, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 2, 6, 8, 10, 12, 14, 6, 8, 8, + 10, 12, 14, 6, 8, 10, 12, 6, 8, 4, + 4, 3, 4, 6, 6, 4, 6, 4, 6, 8, + 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 2, 0, 2, 3, 3, 4, + 4, 4, 4, 4, 0, 3, 4, 7, 3, 1, + 1, 1, 0, 5, 5, 2, 3, 1, 2, 2, + 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, + 0, 1, 0, 1, 0, 2, 1, 2, 4, 0, + 2, 1, 1, 3, 5, 1, 1, 1, 2, 2, + 0, 3, 0, 2, 2, 1, 3, 0, 1, 0, + 1, 3, 1, 3, 2, 0, 1, 1, 0, 1, + 2, 4, 4, 0, 2, 2, 1, 1, 3, 3, + 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, + 0, 3, 1, 1, 0, 4, 0, 1, 1, 0, + 1, 2, 2, 1, 1, 1, 1, 1, 0, 3, + 1, 3, 2, 1, 1, 0, 1, 2, 4, 9, + 3, 5, 0, 3, 3, 0, 1, 0, 2, 2, + 0, 2, 2, 2, 0, 2, 1, 2, 3, 3, + 0, 2, 1, 2, 3, 4, 3, 0, 1, 2, + 1, 5, 4, 4, 1, 3, 3, 5, 0, 5, + 1, 3, 1, 2, 3, 4, 1, 1, 3, 3, + 1, 2, 1, 1, 1, 1, 1, 1, 1, 0, + 1, 0, 2, 0, 3, 0, 1, 0, 1, 1, + 5, 0, 1, 0, 1, 2, 1, 1, 1, 1, + 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 2, 0, 2, 3, 3, 4, 4, 4, - 4, 4, 0, 3, 4, 7, 3, 1, 1, 1, - 0, 5, 5, 2, 3, 1, 2, 2, 1, 2, - 1, 2, 2, 1, 2, 2, 1, 1, 0, 1, - 0, 1, 0, 2, 1, 2, 4, 0, 2, 1, - 1, 3, 5, 1, 1, 1, 2, 2, 0, 3, - 0, 2, 2, 1, 3, 0, 1, 0, 1, 3, - 1, 3, 2, 0, 1, 1, 0, 1, 2, 4, - 4, 0, 2, 2, 1, 1, 3, 3, 3, 3, - 3, 3, 3, 3, 0, 3, 3, 3, 0, 3, - 1, 1, 0, 4, 0, 1, 1, 0, 1, 2, - 2, 1, 1, 1, 1, 1, 0, 3, 1, 3, - 2, 1, 1, 0, 1, 2, 4, 9, 3, 5, - 0, 3, 3, 0, 1, 0, 2, 2, 0, 2, - 2, 2, 0, 2, 1, 2, 3, 3, 0, 2, - 1, 2, 3, 4, 3, 0, 1, 2, 1, 5, - 4, 4, 1, 3, 3, 5, 0, 5, 1, 3, - 1, 2, 3, 4, 1, 1, 3, 3, 1, 2, - 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, - 2, 0, 3, 0, 1, 0, 1, 1, 5, 0, - 1, 0, 1, 2, 1, 1, 1, 1, 1, 1, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -7967,8 +7918,7 @@ var yyR2 = [...]int{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 0, 1, 1, + 1, 1, 0, 0, 1, 1, } var yyChk = [...]int{ @@ -7978,487 +7928,489 @@ var yyChk = [...]int{ -17, -67, -32, -33, -75, -76, -77, -78, -79, -16, -18, -19, -9, -8, -13, 10, 11, -109, -34, 33, -39, -49, 225, -50, -40, 226, -51, 228, 227, 266, - 229, 250, 633, 235, 259, 75, 317, 318, 320, 321, - 322, 323, -110, 629, 264, 265, 231, 37, 46, 34, + 229, 250, 634, 235, 259, 75, 318, 319, 321, 322, + 323, 324, -110, 630, 264, 265, 231, 37, 46, 34, 35, 38, 236, 272, 273, 234, -10, -35, 9, -418, - 12, 461, 261, 260, 29, -12, 523, 87, -81, -417, - 679, -253, -237, 23, 34, 30, -236, -232, -128, -237, + 12, 462, 261, 260, 29, -12, 524, 87, -81, -417, + 680, -253, -237, 23, 34, 30, -236, -232, -128, -237, 21, 19, 8, -80, -80, -80, 13, 14, -80, -353, -355, -12, 26, 87, 159, 9, 87, -80, -56, -55, -53, -52, -54, -57, 32, -46, -47, -377, -45, -42, 230, 227, 276, 123, 124, 266, 267, 268, 229, 250, - 265, 269, 264, 285, -41, 82, 34, 523, 526, -360, - 226, 232, 233, 228, 462, 126, 125, 76, -357, 376, - 556, 649, -57, 651, 101, 104, 650, 45, 240, 652, - 653, 654, 563, 655, 249, 656, 657, 658, 659, 665, - 604, 666, 667, 668, 127, 8, -80, -304, -300, 91, - -293, 520, 252, 554, 555, 301, 82, 42, 529, 373, - 376, 556, 491, 649, 317, 333, 327, 496, 497, 498, - 356, 348, 521, 557, 530, 304, 253, 289, 643, 346, - 135, 651, 308, 558, 267, 381, 382, 559, 383, 101, - 320, 424, 664, 307, 560, 662, 104, 650, 325, 80, - 490, 52, 646, 45, 262, 344, 234, 340, 652, 290, - 561, 532, 283, 126, 123, 671, 37, 336, 51, 31, - 661, 125, 50, 653, 150, 562, 654, 563, 385, 363, - 637, 49, 386, 268, 564, 85, 273, 525, 311, 645, - 387, 510, 337, 388, 300, 660, 231, 565, 624, 616, - 617, 389, 390, 638, 368, 364, 369, 512, 566, 416, - 495, 391, 620, 621, 678, 53, 567, 568, 639, 124, - 569, 79, 655, 81, 331, 332, 570, 298, 251, 515, - 516, 418, 360, 473, 480, 481, 111, 112, 476, 113, - 482, 114, 483, 484, 485, 474, 115, 108, 475, 486, - 487, 361, 362, 116, 488, 110, 109, 477, 479, 117, - 489, 249, 36, 392, 522, 302, 59, 306, 277, 419, - 47, 366, 675, 46, 631, 517, 571, 636, 359, 355, - 470, 54, 572, 573, 574, 575, 492, 656, 358, 330, - 354, 670, 4, 295, 493, 657, 63, 233, 371, 370, - 372, 284, 415, 351, 576, 577, 578, 256, 83, 579, - 341, 22, 580, 581, 393, 291, 582, 57, 583, 584, - 422, 265, 585, 55, 658, 40, 586, 270, 672, 659, - 587, 313, 314, 588, 589, 630, 590, 272, 591, 395, - 592, 618, 619, 394, 365, 367, 518, 279, 396, 237, - 524, 593, 312, 335, 269, 663, 594, 257, 506, 507, - 508, 509, 644, 514, 513, 271, 276, 264, 423, 258, - 595, 596, 597, 598, 599, 305, 615, 600, 601, 321, - 665, 471, 44, 602, 603, 604, 605, 606, 299, 294, - 417, 426, 62, 84, 378, 607, 608, 642, 329, 326, - 292, 609, 318, 56, 666, 667, 668, 286, 669, 499, - 500, 501, 502, 10, 676, 677, 494, 398, 127, 296, - 297, 48, 352, 278, 610, 309, 611, 342, 343, 357, - 328, 353, 627, 319, 625, 280, 399, 472, 266, 612, - 425, 293, 374, 379, 310, 528, 511, 285, 400, 634, - 641, 527, 503, 504, 350, 347, 287, 505, 613, 629, - 401, 241, 281, 282, 614, 626, 402, 403, 303, 404, - 315, 414, 405, 406, 407, 408, 411, 412, 413, 410, - 316, 409, 628, 622, 623, 288, 526, 324, 345, 380, - 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 455, 456, 457, 458, 459, 469, 239, - -80, 239, -191, -300, 239, 239, 96, 524, 650, 634, - 395, -272, 412, 413, 382, -290, 384, 397, 392, 402, - 390, -281, 393, 395, 279, -401, 416, 239, 399, 225, - 385, 394, 403, 404, 315, 414, 303, 410, 405, 316, - 409, 288, 406, 407, 408, 411, -384, 177, 654, 669, - 135, 349, 389, 387, 417, 631, 91, -306, 91, 92, - 93, -293, 319, -308, 324, -294, -384, -293, 322, -80, - -80, -310, -310, -130, 631, 635, -210, -145, 143, -160, - -163, -151, -155, -204, -205, -206, -207, -161, -220, -259, - 166, 167, 174, 144, -216, -164, 27, 519, 463, 462, - 177, 32, -154, 220, 69, 70, 465, 146, 58, 12, - 438, 439, -162, 433, 440, 435, 490, 492, 493, 494, - 491, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 495, 467, 468, 118, 469, 108, 110, 109, 470, - 471, 472, 346, 517, 518, 512, 515, 516, 514, 513, - 361, 362, 473, 474, 475, 111, 112, 113, 114, 115, - 116, 117, 476, 479, 477, 478, 480, 481, 482, 487, - 488, 483, 484, 485, 486, 489, -90, -102, 545, 544, - -103, -152, -153, -166, -167, -294, -300, 244, 432, 238, - 172, 461, -156, -149, -218, 107, 92, 93, -8, -214, - 431, 436, 437, 441, 434, 531, 533, 548, 549, 551, - 536, 541, 540, 543, 506, 507, 508, 509, 510, 511, - 616, 617, 618, 619, 620, 621, 622, 623, -384, -293, - 91, -158, -157, -200, 94, 99, 102, 103, 105, -407, - 262, 342, 343, 119, -418, 647, 90, 95, 96, 97, - 98, 120, 121, 178, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 45, 398, 398, -191, -80, - -80, -80, -80, -230, -128, -232, -10, -8, -418, -80, - -8, -9, -13, -35, -37, 550, -36, -300, 100, -237, - -253, 13, 162, 43, 51, -235, -236, -12, -8, -145, - 20, 24, 25, -133, 168, -145, -300, -133, -279, 243, - -80, -80, -268, -313, 319, -270, 417, 631, 416, -260, - -273, 91, -259, -272, 415, -12, -354, 159, -340, -344, - -294, 254, -370, 250, -191, -80, -363, -362, -294, -418, - -129, -289, 240, 248, 247, 136, -388, 139, 296, 432, - 238, -52, -53, -54, -272, 176, 653, -111, 271, 275, - 88, 88, -344, -343, -342, -389, 275, 254, -369, -361, - 246, 255, -350, 247, 248, -345, 240, 137, -389, -345, - 245, 255, 250, 254, 275, 275, 127, 275, 127, 275, - 275, 275, 275, 275, 275, 275, 275, 275, 270, -351, - 151, -351, 527, 527, -357, -389, 250, 240, -389, -389, - 246, -291, -345, 242, 26, 242, 36, 36, -351, -351, - -351, -272, 176, -351, -351, -351, -351, 283, 283, -351, + 265, 269, 264, 285, -41, 82, 34, 524, 527, -360, + 226, 232, 233, 228, 463, 126, 125, 76, -357, 377, + 557, 650, -57, 652, 101, 104, 651, 45, 240, 653, + 654, 655, 564, 656, 249, 657, 658, 659, 660, 666, + 605, 667, 668, 669, 127, 8, -80, -304, -300, 91, + -293, 521, 252, 555, 556, 301, 82, 42, 530, 374, + 377, 557, 492, 650, 318, 334, 328, 497, 498, 499, + 357, 349, 522, 558, 531, 304, 253, 289, 644, 347, + 135, 652, 308, 559, 267, 382, 383, 560, 384, 101, + 321, 425, 665, 307, 561, 663, 104, 651, 326, 80, + 491, 52, 647, 45, 262, 345, 234, 341, 653, 290, + 562, 533, 283, 126, 123, 672, 37, 337, 51, 31, + 662, 125, 50, 654, 150, 563, 655, 564, 386, 364, + 638, 49, 387, 268, 565, 85, 273, 526, 311, 646, + 388, 511, 338, 389, 300, 661, 231, 566, 625, 617, + 618, 390, 391, 639, 369, 365, 370, 513, 567, 417, + 496, 392, 621, 622, 679, 53, 568, 569, 640, 124, + 570, 79, 656, 81, 332, 333, 571, 298, 251, 516, + 517, 419, 361, 474, 481, 482, 111, 112, 477, 113, + 483, 114, 484, 485, 486, 475, 115, 108, 476, 487, + 488, 362, 363, 116, 489, 110, 109, 478, 480, 117, + 490, 249, 36, 393, 523, 302, 59, 306, 277, 420, + 47, 367, 676, 46, 632, 518, 572, 637, 360, 356, + 471, 54, 573, 574, 575, 576, 493, 657, 359, 331, + 355, 671, 4, 295, 494, 658, 63, 233, 372, 371, + 373, 284, 416, 352, 577, 578, 579, 256, 83, 580, + 342, 22, 581, 582, 394, 291, 583, 57, 584, 585, + 423, 265, 586, 55, 659, 40, 587, 270, 673, 660, + 588, 313, 314, 589, 590, 631, 591, 272, 592, 396, + 593, 619, 620, 395, 366, 368, 519, 279, 397, 237, + 525, 594, 312, 336, 269, 664, 595, 257, 507, 508, + 509, 510, 645, 515, 514, 271, 276, 264, 424, 258, + 596, 597, 598, 599, 600, 305, 616, 601, 602, 322, + 666, 472, 44, 603, 604, 605, 606, 607, 299, 294, + 418, 427, 62, 84, 379, 608, 609, 643, 330, 327, + 292, 610, 319, 56, 667, 668, 669, 286, 670, 500, + 501, 502, 503, 10, 677, 678, 495, 399, 127, 296, + 297, 48, 353, 278, 611, 309, 612, 343, 344, 358, + 329, 354, 628, 320, 626, 280, 400, 473, 266, 613, + 426, 293, 375, 380, 310, 529, 512, 285, 401, 635, + 642, 528, 504, 505, 351, 348, 287, 506, 614, 630, + 402, 241, 281, 282, 615, 627, 403, 404, 303, 405, + 315, 317, 415, 406, 407, 408, 409, 412, 413, 414, + 411, 316, 410, 629, 623, 624, 288, 527, 325, 346, + 381, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 470, + 239, -80, 239, -191, -300, 239, 239, 96, 525, 651, + 635, 396, -272, 413, 414, 383, -290, 385, 398, 393, + 403, 391, -281, 394, 396, 279, -401, 417, 239, 400, + 225, 386, 395, 404, 405, 315, 415, 303, 411, 406, + 316, 410, 288, 407, 408, 409, 412, -384, 177, 655, + 670, 135, 350, 390, 388, 418, 632, 91, -306, 91, + 92, 93, -293, 320, -308, 325, -294, -384, -293, 323, + -80, -80, -310, -310, -130, 632, 636, -210, -145, 143, + -160, -163, -151, -155, -204, -205, -206, -207, -161, -220, + -259, 166, 167, 174, 144, -216, -164, 27, 520, 464, + 463, 177, 32, -154, 220, 69, 70, 466, 146, 58, + 12, 439, 440, -162, 434, 441, 436, 491, 493, 494, + 495, 492, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 496, 468, 469, 118, 470, 108, 110, 109, + 471, 472, 473, 347, 518, 519, 513, 516, 517, 515, + 514, 362, 363, 474, 475, 476, 111, 112, 113, 114, + 115, 116, 117, 477, 480, 478, 479, 481, 482, 483, + 488, 489, 484, 485, 486, 487, 490, -90, -102, 546, + 545, -103, -152, -153, -166, -167, -294, -300, 244, 433, + 238, 172, 462, -156, -149, -218, 107, 92, 93, -8, + -214, 432, 437, 438, 442, 435, 532, 534, 549, 550, + 552, 537, 542, 541, 544, 507, 508, 509, 510, 511, + 512, 617, 618, 619, 620, 621, 622, 623, 624, -384, + -293, 91, -158, -157, -200, 94, 99, 102, 103, 105, + -407, 262, 343, 344, 119, -418, 648, 90, 95, 96, + 97, 98, 120, 121, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 45, 399, 399, -191, + -80, -80, -80, -80, -230, -128, -232, -10, -8, -418, + -80, -8, -9, -13, -35, -37, 551, -36, -300, 100, + -237, -253, 13, 162, 43, 51, -235, -236, -12, -8, + -145, 20, 24, 25, -133, 168, -145, -300, -133, -279, + 243, -80, -80, -268, -313, 320, -270, 418, 632, 417, + -260, -273, 91, -259, -272, 416, -12, -354, 159, -340, + -344, -294, 254, -370, 250, -191, -80, -363, -362, -294, + -418, -129, -289, 240, 248, 247, 136, -388, 139, 296, + 433, 238, -52, -53, -54, -272, 176, 654, -111, 271, + 275, 88, 88, -344, -343, -342, -389, 275, 254, -369, + -361, 246, 255, -350, 247, 248, -345, 240, 137, -389, + -345, 245, 255, 250, 254, 275, 275, 127, 275, 127, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 270, + -351, 151, -351, 528, 528, -357, -389, 250, 240, -389, + -389, 246, -291, -345, 242, 26, 242, 36, 36, -351, + -351, -351, -272, 176, -351, -351, -351, -351, 283, 283, -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, - -351, -351, -351, -351, -351, -351, 239, -388, -137, 409, - 303, 315, 82, -55, 285, -38, -191, -289, 240, 241, - -388, 272, -191, 221, -191, -415, -191, 96, 96, -283, - 159, 16, -283, -280, 398, 396, 383, 388, -283, -283, - -283, -283, 286, 381, -346, 240, 36, 251, 398, 286, - 381, 286, 287, 286, 287, 391, 401, 286, -305, 15, - 162, 432, 386, 390, 279, 239, 280, 241, 400, 287, - -305, -305, 90, -305, 90, -284, 159, 286, 398, 282, - -283, -283, -311, -418, -296, -294, -292, 230, 24, 142, - 26, 28, 145, 177, 130, 20, 146, 38, 232, 349, - 250, 176, 246, 462, 225, 73, 531, 433, 435, 431, - 438, 464, 465, 432, 384, 32, 14, 533, 29, 260, - 25, 39, 170, 227, 149, 534, 263, 27, 261, 118, - 121, 536, 23, 76, 255, 15, 248, 41, 17, 537, - 538, 18, 244, 243, 162, 240, 71, 12, 220, 30, - 158, 67, 539, 137, 540, 541, 542, 543, 131, 69, - 159, 21, 673, 436, 437, 34, 632, 519, 274, 172, - 74, 60, 635, 143, 434, 544, 545, 119, 546, 122, - 77, 640, 139, 19, 72, 43, 547, 275, 548, 245, - 674, 549, 420, 550, 160, 228, 461, 70, 161, 647, - 551, 648, 238, 397, 9, 466, 33, 259, 247, 129, - 68, 552, 239, 148, 467, 468, 242, 132, 120, 8, - 136, 35, 13, 75, 78, 439, 440, 441, 58, 128, - 523, 147, 16, 553, 421, 141, 633, 427, 428, 429, - 430, 235, -384, 636, -311, -311, 33, 92, -410, -411, - -412, 523, 420, 242, -294, -191, -86, 624, 229, -87, - 630, 24, 237, -135, 398, -123, 177, 654, 637, 638, - 639, 636, 395, 634, 644, 642, 640, 286, 641, 88, - 139, 141, 142, 4, -145, 158, -201, 151, 152, 153, - 154, 155, 156, 157, 162, 143, 145, 159, -246, 140, - 163, 164, 165, 166, 167, 168, 169, 171, 170, 172, - 173, 160, 161, 176, 223, 224, -155, -155, -155, -155, - -216, -222, -221, -418, -218, -384, -293, -300, -418, -418, - -155, -278, -418, -418, -151, -418, -418, -418, -225, -145, - -418, -418, -422, -418, -422, -422, -329, -418, -329, -418, - -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -351, -351, -351, -351, -351, -351, -351, 239, -388, -137, + 410, 303, 317, 315, 82, -55, 285, -38, -191, -289, + 240, 241, -388, 272, -191, 221, -191, -415, -191, 96, + 96, -283, 159, 16, -283, -280, 399, 397, 384, 389, + -283, -283, -283, -283, 286, 382, -346, 240, 36, 251, + 399, 286, 382, 286, 287, 286, 287, 392, 402, 286, + -305, 15, 162, 433, 387, 391, 279, 239, 280, 241, + 401, 287, -305, -305, 90, -305, 90, -284, 159, 286, + 399, 282, -283, -283, -311, -418, -296, -294, -292, 230, + 24, 142, 26, 28, 145, 177, 130, 20, 146, 38, + 232, 350, 250, 176, 246, 463, 225, 73, 532, 434, + 436, 432, 439, 465, 466, 433, 385, 32, 14, 534, + 29, 260, 25, 39, 170, 227, 149, 535, 263, 27, + 261, 118, 121, 537, 23, 76, 255, 15, 248, 41, + 17, 538, 539, 18, 244, 243, 162, 240, 71, 12, + 220, 30, 158, 67, 540, 137, 541, 542, 543, 544, + 131, 69, 159, 21, 674, 437, 438, 34, 633, 520, + 274, 172, 74, 60, 636, 143, 435, 545, 546, 119, + 547, 122, 77, 641, 139, 19, 72, 43, 548, 275, + 549, 245, 675, 550, 421, 551, 160, 228, 462, 70, + 161, 648, 552, 649, 238, 398, 9, 467, 33, 259, + 247, 129, 68, 553, 239, 148, 468, 469, 242, 132, + 120, 8, 136, 35, 13, 75, 78, 440, 441, 442, + 58, 128, 524, 147, 16, 554, 422, 141, 634, 428, + 429, 430, 431, 235, -384, 637, -311, -311, 33, 92, + -410, -411, -412, 524, 421, 242, -294, -191, -86, 625, + 229, -87, 631, 24, 237, -135, 399, -123, 177, 655, + 638, 639, 640, 637, 396, 635, 645, 643, 641, 286, + 642, 88, 139, 141, 142, 4, -145, 158, -201, 151, + 152, 153, 154, 155, 156, 157, 162, 143, 145, 159, + -246, 140, 163, 164, 165, 166, 167, 168, 169, 171, + 170, 172, 173, 160, 161, 176, 223, 224, -155, -155, + -155, -155, -216, -222, -221, -418, -218, -384, -293, -300, + -418, -418, -155, -278, -418, -418, -151, -418, -418, -418, + -225, -145, -418, -418, -422, -418, -422, -422, -329, -418, + -329, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, - -418, -418, -418, -418, -418, 221, -418, -418, -418, -418, - -418, -329, -329, -329, -329, -329, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, 221, -418, -418, + -418, -418, -418, -329, -329, -329, -329, -329, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, - 103, 99, 102, 94, -220, 105, 90, 90, 90, 90, - -8, -9, -210, -418, -310, -398, -399, -194, -191, -418, - 303, 315, -294, -294, 272, -235, -12, -8, -230, -236, - -232, -8, -121, -134, 64, 65, -136, 25, 39, 68, - 66, 24, -419, 89, -419, -253, -419, 88, -37, -256, - 87, 62, 44, 90, 90, 88, 22, -231, -233, -145, - 15, -298, 4, -297, 26, -294, 90, 221, 15, -192, - 30, -191, -279, -279, 88, 91, 319, -269, -271, 418, - 420, 151, -299, -294, 90, 32, 89, 88, -191, -318, - -321, -323, -322, -324, -319, -320, 346, 347, 177, 350, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 363, - 33, 262, 342, 343, 344, 345, 364, 365, 366, 367, - 369, 370, 371, 372, 327, 348, 521, 328, 329, 330, - 331, 332, 333, 335, 336, 339, 337, 338, 340, 341, - -385, -384, 87, 64, 65, 89, 88, -325, 87, -145, - -137, 239, -384, 240, 240, 240, -80, 461, -351, -351, - -351, 270, 20, -45, -42, -377, 19, -41, -42, 230, - 123, 124, 227, 87, -340, 87, -349, -385, -384, 87, - 137, 245, 136, -348, -345, -348, -349, -384, -218, -384, - 137, 137, -384, -384, -265, -294, -265, -265, 24, -265, - 24, -265, 24, 96, -294, -265, 24, -265, 24, -265, - 24, -265, 24, -265, 24, 32, 79, 80, 81, 32, - 83, 84, 85, -218, -384, -384, -218, -340, -218, -191, - -384, -272, 96, 96, 96, -351, -351, 96, 90, 90, - 90, -351, -351, 96, 90, -302, -300, 90, 90, -390, - 256, 300, 302, 96, 96, 96, 96, 32, 90, -391, - 32, 661, 660, 662, 663, 664, 90, 96, 32, 96, - 32, 96, -294, 87, -191, -143, 290, 225, 227, 230, - 77, 90, 306, 307, 304, 313, 314, 309, 310, 90, - 306, 307, 304, 313, 314, 309, 310, 151, 45, 88, - 242, 239, -384, -285, 244, -285, -294, -301, -300, -292, - -414, 88, -413, 23, 427, 428, 430, 387, 429, 90, - -145, -347, 15, 162, -305, -305, -283, -191, -347, -305, - -283, -191, -283, -283, -283, -283, -305, -305, -305, -283, - -300, -300, -191, -191, -191, -191, -191, -191, -191, -311, - -284, -283, -283, 636, -283, 636, 90, -277, 15, 77, - -311, -311, 88, 325, 421, 422, -309, 322, -82, -294, - 90, -15, -11, -23, -22, -24, 151, -15, 88, 523, - -184, -191, 636, 636, 636, 636, 636, 636, -145, -145, - -145, -145, 546, -208, 119, 143, 120, 121, -163, -209, - -214, -216, 106, 162, 145, 159, -246, -151, -155, -151, + -418, -418, 103, 99, 102, 94, -220, 105, 90, 90, + 90, 90, -8, -9, -210, -418, -310, -398, -399, -194, + -191, -418, 303, 315, -294, -294, 272, -235, -12, -8, + -230, -236, -232, -8, -121, -134, 64, 65, -136, 25, + 39, 68, 66, 24, -419, 89, -419, -253, -419, 88, + -37, -256, 87, 62, 44, 90, 90, 88, 22, -231, + -233, -145, 15, -298, 4, -297, 26, -294, 90, 221, + 15, -192, 30, -191, -279, -279, 88, 91, 320, -269, + -271, 419, 421, 151, -299, -294, 90, 32, 89, 88, + -191, -318, -321, -323, -322, -324, -319, -320, 347, 348, + 177, 351, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 364, 33, 262, 343, 344, 345, 346, 365, 366, + 367, 368, 370, 371, 372, 373, 328, 349, 522, 329, + 330, 331, 332, 333, 334, 336, 337, 340, 338, 339, + 341, 342, -385, -384, 87, 64, 65, 89, 88, -325, + 87, -145, -137, 239, -384, 240, 240, 240, -80, 462, + -351, -351, -351, 270, 20, -45, -42, -377, 19, -41, + -42, 230, 123, 124, 227, 87, -340, 87, -349, -385, + -384, 87, 137, 245, 136, -348, -345, -348, -349, -384, + -218, -384, 137, 137, -384, -384, -265, -294, -265, -265, + 24, -265, 24, -265, 24, 96, -294, -265, 24, -265, + 24, -265, 24, -265, 24, -265, 24, 32, 79, 80, + 81, 32, 83, 84, 85, -218, -384, -384, -218, -340, + -218, -191, -384, -272, 96, 96, 96, -351, -351, 96, + 90, 90, 90, -351, -351, 96, 90, -302, -300, 90, + 90, -390, 256, 300, 302, 96, 96, 96, 96, 32, + 90, -391, 32, 662, 661, 663, 664, 665, 90, 96, + 32, 96, 32, 96, -294, 87, -191, -143, 290, 225, + 227, 230, 77, 90, 306, 307, 304, 313, 314, 309, + 310, 90, 306, 304, 313, 314, 309, 310, 90, 306, + 307, 304, 313, 314, 309, 310, 151, 45, 88, 242, + 239, -384, -285, 244, -285, -294, -301, -300, -292, -414, + 88, -413, 23, 428, 429, 431, 388, 430, 90, -145, + -347, 15, 162, -305, -305, -283, -191, -347, -305, -283, + -191, -283, -283, -283, -283, -305, -305, -305, -283, -300, + -300, -191, -191, -191, -191, -191, -191, -191, -311, -284, + -283, -283, 637, -283, 637, 90, -277, 15, 77, -311, + -311, 88, 326, 422, 423, -309, 323, -82, -294, 90, + -15, -11, -23, -22, -24, 151, -15, 88, 524, -184, + -191, 637, 637, 637, 637, 637, 637, -145, -145, -145, + -145, 547, -208, 119, 143, 120, 121, -163, -209, -214, + -216, 106, 162, 145, 159, -246, -151, -155, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, - -151, -151, -312, -294, 90, 177, -159, -158, 105, -407, - -159, 520, 88, -221, 221, -145, -145, -384, -145, -294, - -131, -133, -131, -145, -223, -224, 147, -218, -145, -419, - -419, 96, 105, 168, -127, 25, 39, -127, -127, -127, - -127, -145, -145, -145, -145, -145, -145, -145, -145, -145, - -145, -127, -294, -294, -120, -119, 443, 444, 445, 446, - 448, 449, 450, 453, 454, 458, 459, 442, 460, 447, - 452, 455, 456, 457, 451, 345, -145, -145, -145, -145, - -145, -145, -88, -145, 130, 131, 132, -210, -145, -151, - -145, -145, -145, -419, -145, -145, -145, -211, -210, -383, - -382, -381, -145, -145, -145, -145, -145, -145, -145, -145, + -151, -312, -294, 90, 177, -159, -158, 105, -407, -159, + 521, 88, -221, 221, -145, -145, -384, -145, -294, -131, + -133, -131, -145, -223, -224, 147, -218, -145, -419, -419, + 96, 105, 168, -127, 25, 39, -127, -127, -127, -127, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, - -145, -145, -145, -145, -145, -419, -145, -165, -149, 96, - -261, 105, 92, -145, -145, -132, -131, -296, -301, -292, - -293, -131, -132, -132, -131, -131, -145, -145, -145, -145, - -145, -145, -145, -145, -419, -145, -145, -145, -145, -145, - -253, -419, -210, 88, -400, 420, 421, 632, -303, 275, - -302, 26, -211, 90, 90, 15, -263, 78, -294, -235, - -235, 60, -131, -136, -419, -36, 26, -255, -294, 63, - 90, -330, -272, 373, 374, 177, -145, -145, 88, -234, - 28, 29, -191, -297, 168, -301, -191, -264, 275, -191, - -169, -171, -172, -173, -194, -217, -418, -174, -8, 542, - 539, 15, -184, -185, -193, -300, -270, -313, -269, 88, - 419, 421, 422, 77, 122, -145, -331, 176, -359, -358, - -357, -340, -342, -343, -344, 89, -331, -336, 379, 378, - -325, -325, -325, -325, -325, -330, -330, -330, -330, 87, - 87, -325, -325, -325, -325, -333, 87, -333, -333, -334, - -333, 87, -334, -335, 87, -335, -370, -145, -367, -366, - -364, -365, 249, 101, 614, 570, 523, 563, 604, 78, - -362, -234, 96, -419, -143, -286, 244, -368, -365, -384, - -384, -384, -286, 91, 90, 91, 90, 91, 90, -112, - -59, -1, 673, 674, 675, 88, 20, -341, -340, -58, - 300, -373, -374, 275, -369, -363, -349, 137, -348, -349, - -349, -384, 88, 30, 127, 127, 127, 127, 523, 227, - 33, -287, 562, 143, 614, 570, -340, -58, 242, 242, - -312, -312, -312, 90, 90, -282, 669, -184, -139, 292, - 151, 281, 281, 239, 239, 294, -191, 305, 308, 306, - 307, 304, 313, 314, 309, 310, 24, 24, 24, 24, - 24, 24, 24, 305, 308, 306, 307, 304, 313, 314, - 309, 310, 24, 24, 24, 24, 24, 24, 24, 293, - 295, 297, 283, -191, -191, -285, 77, -186, -191, 27, - -300, -413, -191, 285, -191, -283, -283, -191, -283, -283, - -191, -412, 326, -294, 360, 625, 626, 628, 627, -123, - 420, 88, 523, 23, -124, 23, -418, 119, 120, 121, - -209, -151, -155, -151, 142, 263, -418, -218, -419, -296, - 26, 88, 78, -419, 88, 88, -419, -419, 88, 15, - -226, -224, 149, -145, -419, 88, -419, -419, -419, -210, - -145, -145, -145, -145, -419, -419, -419, -419, -419, -419, - -419, -419, -419, -419, -210, 88, 88, 15, -316, 26, - -419, -419, -419, -419, -419, -225, -419, 15, -419, 78, - 88, 162, 88, -419, -419, -419, 88, 88, -419, -419, - 88, 88, -419, 88, 88, 88, -419, 88, 88, 88, - 88, -419, -419, -419, -419, 88, 88, 88, 88, 88, - 88, 88, 88, 88, 88, -419, -95, 547, -419, -419, - 88, -419, 88, -419, -418, 221, -419, -419, -419, -419, - -419, 88, 88, 88, 88, 88, 88, -419, -419, -419, - 88, 88, -419, 88, -419, 88, -419, -399, 631, 421, - -198, -197, -195, 75, 243, 76, -418, -302, -419, -159, - -261, -262, -261, -203, -294, 96, 105, -237, -168, -170, - 15, -136, -216, 89, 88, -330, -241, -247, -280, -294, - 90, 177, -332, 177, -332, 373, 374, -233, 221, -199, - 16, -202, 33, 58, -11, -418, -418, 33, 88, -187, - -189, -188, -190, 67, 71, 73, 68, 69, 70, 74, - -307, 26, -8, -169, -8, -418, -191, -184, -420, 15, - 78, -420, 88, 221, -271, -274, 423, 420, 426, -384, - 90, -111, 88, -357, -344, -238, -140, 41, -337, 380, - -330, 530, -330, -339, 90, -339, 96, 96, 96, 89, - -48, -43, -44, 34, 82, -364, -351, 90, 40, -351, - -351, -294, 89, -234, -139, -191, 143, 77, -368, -368, - -368, -300, -2, 672, 678, 137, 87, 383, 19, -255, - 88, 89, -219, 301, 89, -113, -294, 89, 87, -349, - -349, -294, -418, 239, 32, 32, 614, 570, 562, -58, - -219, -218, -384, -331, 671, 670, 89, 241, 299, -144, - 438, -141, 90, 91, -191, -191, -191, -191, -191, 230, - 227, 406, -408, 311, -408, 406, -408, -408, 284, 242, - -184, -191, 88, -85, 258, 253, -305, -305, 34, -191, - 420, 645, 643, -145, 142, 263, -163, -155, -151, -314, - 177, 346, 262, 344, 340, 360, 351, 378, 342, 379, - 337, 336, 335, -314, -312, -210, -133, -145, -145, 150, - -145, 148, -145, -419, -419, -419, -419, -419, -230, -145, - -145, -145, -419, 177, 346, 15, -145, -312, -145, -145, - -145, -145, -145, -381, -145, -210, -145, -210, -145, -145, - -145, -145, -145, -382, -382, -382, -382, -382, -210, -210, - -210, -210, -418, -294, -98, -97, -96, 597, 243, -95, - -165, -98, -165, -132, -296, -145, -145, -145, -145, -145, - -145, -145, -145, -145, -145, -195, -345, -345, -345, -265, - 88, -276, 23, 15, 58, 58, -168, -199, -169, -136, - -294, -244, 624, -250, 47, -248, -249, 48, -245, 49, - 57, -332, -332, 168, -235, -145, -266, 77, -267, -275, - -218, -213, -215, -214, -418, -254, -419, -294, -265, -267, - -171, -172, -172, -171, -172, 67, 67, 67, 72, 67, - 72, 67, -188, -300, -419, -145, -303, 78, -169, -169, - -193, -300, 168, 420, 424, 425, -357, -406, 119, 143, - 32, 77, 376, 101, -404, 176, 559, 609, 614, 570, - 563, 604, -405, 245, 136, 137, 257, 26, 42, 89, - 88, 89, 88, 89, 89, 88, -288, -287, -44, -43, - -351, -351, 96, -384, 90, 90, 241, 27, -191, 77, - 77, 77, -114, 676, 96, 87, -3, 82, -145, 87, - 20, -340, -218, -375, -326, -376, -327, -328, -5, -6, - -352, -117, 58, 101, -62, 45, 240, 656, 657, 127, - -418, 669, -367, -255, -371, -373, -191, -148, -418, -147, - -149, -156, 166, 167, 262, 342, 343, -219, -191, -138, - 290, 298, 87, -142, 92, -387, 78, 281, 376, 281, - 90, -409, 312, 90, -409, 90, -409, -409, -191, -85, - -48, -191, -283, -283, 34, -384, -419, -163, -155, -126, - 162, 523, -317, 529, -325, -325, -325, -335, -325, 332, - -325, 332, -325, -419, -419, -419, 88, -419, 23, -419, - -145, 88, -122, 466, 88, 88, -419, 87, 87, -145, - -419, -419, -419, 88, -419, -419, -419, -419, -419, 88, - -419, -419, -419, 88, -315, 615, -419, -419, -419, -419, - -419, -419, -419, -419, -419, -419, -94, -295, -294, -95, - 579, 579, -419, -95, -227, 88, -419, -419, 88, -419, - 88, 88, -419, 88, -419, 88, -419, -419, -419, -419, - 88, -196, 23, -196, -196, -419, -261, -191, -199, -228, - 17, -241, 52, 352, -252, -251, 56, 48, -249, 20, - 50, 20, 31, -266, 88, 151, 88, -419, -419, 88, - 58, 221, -419, -199, -182, -181, 77, 78, -183, 77, - -181, 67, 67, -256, 88, -264, -169, -199, -199, 221, - 119, -418, -150, -162, -148, 13, 90, 90, -384, -403, - 660, 661, 32, 96, -351, -351, 137, 137, -191, 87, - -330, 90, -330, 96, 96, 32, 83, 84, 85, 32, - 79, 80, 81, -191, -191, -191, -191, -372, 87, 20, - -145, 87, 151, 89, -255, -255, 277, 162, -351, 654, - 283, 283, -351, -351, -351, -116, -115, 676, 89, -419, - 88, -338, 523, 526, -145, -157, -157, -256, 89, -380, - 523, -386, -294, -294, -294, -294, 96, 98, -419, 521, - 74, 524, -419, -330, -145, -145, -145, -235, 90, -145, - -145, 96, 96, -419, -145, -210, -145, -419, -179, -178, - -180, 637, 119, 32, -314, -419, -212, 275, -101, -100, - -99, 15, -419, -145, -145, -145, -145, -145, -145, -145, - -418, 67, 19, 17, -418, -418, -303, -228, -229, 18, - 20, -242, 54, -240, 53, -240, -251, 20, 20, 90, - 20, 90, 137, -275, -145, -215, 58, -11, -294, -213, - -294, -230, -145, 87, -145, -159, -199, -199, -145, -205, - 490, 492, 493, 494, 491, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 495, 469, 108, 110, 109, - 470, 471, 472, 346, 517, 518, 512, 515, 516, 514, - 513, 361, 362, 473, 474, 475, 111, 112, 113, 114, - 115, 116, 117, 476, 479, 477, 480, 481, 482, 487, - 488, 483, 484, 485, 486, 489, 506, 507, 508, 509, - 510, 511, 616, 617, 618, 619, 620, 621, 622, 623, - 90, 90, 87, -145, 89, 89, -256, -371, -59, 89, - -257, -255, 96, 89, 278, -214, -418, 90, -351, -351, - -351, 96, 96, -302, -419, 88, -294, -405, -373, 527, - 527, -419, 26, -379, -378, -296, 87, 78, 63, 522, - 525, -419, -419, 88, -419, -419, -419, 89, 89, -419, - -419, -419, 88, -419, -178, -180, -419, 77, -159, -230, - 20, -98, 300, 302, -98, -419, 88, -419, -419, 88, - -419, 88, -419, -419, -258, -419, -294, 245, 20, 20, - -258, -258, -198, -229, -108, -107, -106, 553, -145, -210, - -243, 55, 77, 122, 90, 90, 90, 13, -213, 221, - -235, -255, -176, 383, -230, -419, -255, 89, 26, 89, - 678, 137, 89, -214, -125, -418, 274, -302, 90, 90, - -115, -118, -11, 88, 151, -255, -191, 63, -145, -210, - -419, 77, 534, 637, -93, -92, -89, 648, 674, -210, - -95, -95, -145, -145, -145, 88, -419, -419, -419, -108, - 88, -105, -104, -294, 77, 122, -267, -294, 89, -419, - -418, -235, 89, -239, -11, 87, -3, 274, -326, -376, - -327, -328, -5, -6, -352, -83, 523, -378, -356, -296, - 90, 96, 89, 523, -419, -419, -91, 145, 646, 612, - -146, -157, -154, 220, -419, 88, -419, 88, -419, 88, - -294, 245, -106, 88, 26, -303, -177, -175, -294, 576, - -396, -395, 519, -406, -402, 119, 143, 101, -404, 614, - 570, 128, 129, -83, -145, 87, -419, -84, 289, 631, - -387, 524, -91, 647, 590, 565, 590, 565, -145, -145, - -145, -104, -418, -419, 88, 23, -318, -61, 587, -393, - -394, 77, -397, 389, 586, 607, 119, 90, 89, -255, - 250, -380, 525, 142, -419, 88, -419, 88, -419, -94, - -175, 583, -331, -159, -394, 77, -393, 77, 14, 13, - -4, 677, 89, 291, -91, -145, -145, -419, -60, 27, - -176, -392, 258, 253, 256, 33, -392, 96, -4, -419, - -419, 587, 252, 32, 119, -159, -179, -178, -178, + -127, -294, -294, -120, -119, 444, 445, 446, 447, 449, + 450, 451, 454, 455, 459, 460, 443, 461, 448, 453, + 456, 457, 458, 452, 346, -145, -145, -145, -145, -145, + -145, -88, -145, 130, 131, 132, -210, -145, -151, -145, + -145, -145, -419, -145, -145, -145, -211, -210, -383, -382, + -381, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -419, -145, -165, -149, 96, -261, + 105, 92, -145, -145, -132, -131, -296, -301, -292, -293, + -131, -132, -132, -131, -131, -145, -145, -145, -145, -145, + -145, -145, -145, -419, -145, -145, -145, -145, -145, -253, + -419, -210, 88, -400, 421, 422, 633, -303, 275, -302, + 26, -211, 90, 90, 15, -263, 78, -294, -235, -235, + 60, -131, -136, -419, -36, 26, -255, -294, 63, 90, + -330, -272, 374, 375, 177, -145, -145, 88, -234, 28, + 29, -191, -297, 168, -301, -191, -264, 275, -191, -169, + -171, -172, -173, -194, -217, -418, -174, -8, 543, 540, + 15, -184, -185, -193, -300, -270, -313, -269, 88, 420, + 422, 423, 77, 122, -145, -331, 176, -359, -358, -357, + -340, -342, -343, -344, 89, -331, -336, 380, 379, -325, + -325, -325, -325, -325, -330, -330, -330, -330, 87, 87, + -325, -325, -325, -325, -333, 87, -333, -333, -334, -333, + 87, -334, -335, 87, -335, -370, -145, -367, -366, -364, + -365, 249, 101, 615, 571, 524, 564, 605, 78, -362, + -234, 96, -419, -143, -286, 244, -368, -365, -384, -384, + -384, -286, 91, 90, 91, 90, 91, 90, -112, -59, + -1, 674, 675, 676, 88, 20, -341, -340, -58, 300, + -373, -374, 275, -369, -363, -349, 137, -348, -349, -349, + -384, 88, 30, 127, 127, 127, 127, 524, 227, 33, + -287, 563, 143, 615, 571, -340, -58, 242, 242, -312, + -312, -312, 90, 90, -282, 670, -184, -139, 292, 151, + 281, 281, 239, 239, 294, -191, 305, 308, 306, 307, + 304, 313, 314, 309, 310, 24, 24, 24, 24, 24, + 24, 24, 306, 304, 313, 314, 309, 310, 24, 24, + 24, 24, 24, 24, 305, 308, 306, 307, 304, 313, + 314, 309, 310, 24, 24, 24, 24, 24, 24, 24, + 293, 295, 297, 283, -191, -191, -285, 77, -186, -191, + 27, -300, -413, -191, 285, -191, -283, -283, -191, -283, + -283, -191, -412, 327, -294, 361, 626, 627, 629, 628, + -123, 421, 88, 524, 23, -124, 23, -418, 119, 120, + 121, -209, -151, -155, -151, 142, 263, -418, -218, -419, + -296, 26, 88, 78, -419, 88, 88, -419, -419, 88, + 15, -226, -224, 149, -145, -419, 88, -419, -419, -419, + -210, -145, -145, -145, -145, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -210, 88, 88, 15, -316, + 26, -419, -419, -419, -419, -419, -225, -419, 15, -419, + 78, 88, 162, 88, -419, -419, -419, 88, 88, -419, + -419, 88, 88, -419, 88, 88, 88, -419, 88, 88, + 88, 88, -419, -419, -419, -419, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, -419, -95, 548, -419, + -419, 88, -419, 88, -419, -418, 221, -419, -419, -419, + -419, -419, 88, 88, 88, 88, 88, 88, -419, -419, + -419, 88, 88, -419, 88, -419, 88, -419, -399, 632, + 422, -198, -197, -195, 75, 243, 76, -418, -302, -419, + -159, -261, -262, -261, -203, -294, 96, 105, -237, -168, + -170, 15, -136, -216, 89, 88, -330, -241, -247, -280, + -294, 90, 177, -332, 177, -332, 374, 375, -233, 221, + -199, 16, -202, 33, 58, -11, -418, -418, 33, 88, + -187, -189, -188, -190, 67, 71, 73, 68, 69, 70, + 74, -307, 26, -8, -169, -8, -418, -191, -184, -420, + 15, 78, -420, 88, 221, -271, -274, 424, 421, 427, + -384, 90, -111, 88, -357, -344, -238, -140, 41, -337, + 381, -330, 531, -330, -339, 90, -339, 96, 96, 96, + 89, -48, -43, -44, 34, 82, -364, -351, 90, 40, + -351, -351, -294, 89, -234, -139, -191, 143, 77, -368, + -368, -368, -300, -2, 673, 679, 137, 87, 384, 19, + -255, 88, 89, -219, 301, 89, -113, -294, 89, 87, + -349, -349, -294, -418, 239, 32, 32, 615, 571, 563, + -58, -219, -218, -384, -331, 672, 671, 89, 241, 299, + -144, 439, -141, 90, 91, -191, -191, -191, -191, -191, + 230, 227, 407, -408, 311, -408, -408, -408, 407, -408, + -408, 284, 242, -184, -191, 88, -85, 258, 253, -305, + -305, 34, -191, 421, 646, 644, -145, 142, 263, -163, + -155, -151, -314, 177, 347, 262, 345, 341, 361, 352, + 379, 343, 380, 338, 337, 336, -314, -312, -210, -133, + -145, -145, 150, -145, 148, -145, -419, -419, -419, -419, + -419, -230, -145, -145, -145, -419, 177, 347, 15, -145, + -312, -145, -145, -145, -145, -145, -381, -145, -210, -145, + -210, -145, -145, -145, -145, -145, -382, -382, -382, -382, + -382, -210, -210, -210, -210, -418, -294, -98, -97, -96, + 598, 243, -95, -165, -98, -165, -132, -296, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -195, -345, + -345, -345, -265, 88, -276, 23, 15, 58, 58, -168, + -199, -169, -136, -294, -244, 625, -250, 47, -248, -249, + 48, -245, 49, 57, -332, -332, 168, -235, -145, -266, + 77, -267, -275, -218, -213, -215, -214, -418, -254, -419, + -294, -265, -267, -171, -172, -172, -171, -172, 67, 67, + 67, 72, 67, 72, 67, -188, -300, -419, -145, -303, + 78, -169, -169, -193, -300, 168, 421, 425, 426, -357, + -406, 119, 143, 32, 77, 377, 101, -404, 176, 560, + 610, 615, 571, 564, 605, -405, 245, 136, 137, 257, + 26, 42, 89, 88, 89, 88, 89, 89, 88, -288, + -287, -44, -43, -351, -351, 96, -384, 90, 90, 241, + 27, -191, 77, 77, 77, -114, 677, 96, 87, -3, + 82, -145, 87, 20, -340, -218, -375, -326, -376, -327, + -328, -5, -6, -352, -117, 58, 101, -62, 45, 240, + 657, 658, 127, -418, 670, -367, -255, -371, -373, -191, + -148, -418, -147, -149, -156, 166, 167, 262, 343, 344, + -219, -191, -138, 290, 298, 87, -142, 92, -387, 78, + 281, 377, 281, 90, -409, 312, 90, -409, -409, -409, + 90, -409, -409, -191, -85, -48, -191, -283, -283, 34, + -384, -419, -163, -155, -126, 162, 524, -317, 530, -325, + -325, -325, -335, -325, 333, -325, 333, -325, -419, -419, + -419, 88, -419, 23, -419, -145, 88, -122, 467, 88, + 88, -419, 87, 87, -145, -419, -419, -419, 88, -419, + -419, -419, -419, -419, 88, -419, -419, -419, 88, -315, + 616, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -94, -295, -294, -95, 580, 580, -419, -95, -227, + 88, -419, -419, 88, -419, 88, 88, -419, 88, -419, + 88, -419, -419, -419, -419, 88, -196, 23, -196, -196, + -419, -261, -191, -199, -228, 17, -241, 52, 353, -252, + -251, 56, 48, -249, 20, 50, 20, 31, -266, 88, + 151, 88, -419, -419, 88, 58, 221, -419, -199, -182, + -181, 77, 78, -183, 77, -181, 67, 67, -256, 88, + -264, -169, -199, -199, 221, 119, -418, -150, -162, -148, + 13, 90, 90, -384, -403, 661, 662, 32, 96, -351, + -351, 137, 137, -191, 87, -330, 90, -330, 96, 96, + 32, 83, 84, 85, 32, 79, 80, 81, -191, -191, + -191, -191, -372, 87, 20, -145, 87, 151, 89, -255, + -255, 277, 162, -351, 655, 283, 283, -351, -351, -351, + -116, -115, 677, 89, -419, 88, -338, 524, 527, -145, + -157, -157, -256, 89, -380, 524, -386, -294, -294, -294, + -294, 96, 98, -419, 522, 74, 525, -419, -330, -145, + -145, -145, -235, 90, -145, -145, 96, 96, -419, -145, + -210, -145, -419, -179, -178, -180, 638, 119, 32, -314, + -419, -212, 275, -101, -100, -99, 15, -419, -145, -145, + -145, -145, -145, -145, -145, -418, 67, 19, 17, -418, + -418, -303, -228, -229, 18, 20, -242, 54, -240, 53, + -240, -251, 20, 20, 90, 20, 90, 137, -275, -145, + -215, 58, -11, -294, -213, -294, -230, -145, 87, -145, + -159, -199, -199, -145, -205, 491, 493, 494, 495, 492, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 496, 470, 108, 110, 109, 471, 472, 473, 347, 518, + 519, 513, 516, 517, 515, 514, 362, 363, 474, 475, + 476, 111, 112, 113, 114, 115, 116, 117, 477, 480, + 478, 481, 482, 483, 488, 489, 484, 485, 486, 487, + 490, 507, 508, 509, 510, 511, 512, 617, 618, 619, + 620, 621, 622, 623, 624, 90, 90, 87, -145, 89, + 89, -256, -371, -59, 89, -257, -255, 96, 89, 278, + -214, -418, 90, -351, -351, -351, 96, 96, -302, -419, + 88, -294, -405, -373, 528, 528, -419, 26, -379, -378, + -296, 87, 78, 63, 523, 526, -419, -419, 88, -419, + -419, -419, 89, 89, -419, -419, -419, 88, -419, -178, + -180, -419, 77, -159, -230, 20, -98, 300, 302, -98, + -419, 88, -419, -419, 88, -419, 88, -419, -419, -258, + -419, -294, 245, 20, 20, -258, -258, -198, -229, -108, + -107, -106, 554, -145, -210, -243, 55, 77, 122, 90, + 90, 90, 13, -213, 221, -235, -255, -176, 384, -230, + -419, -255, 89, 26, 89, 679, 137, 89, -214, -125, + -418, 274, -302, 90, 90, -115, -118, -11, 88, 151, + -255, -191, 63, -145, -210, -419, 77, 535, 638, -93, + -92, -89, 649, 675, -210, -95, -95, -145, -145, -145, + 88, -419, -419, -419, -108, 88, -105, -104, -294, 77, + 122, -267, -294, 89, -419, -418, -235, 89, -239, -11, + 87, -3, 274, -326, -376, -327, -328, -5, -6, -352, + -83, 524, -378, -356, -296, 90, 96, 89, 524, -419, + -419, -91, 145, 647, 613, -146, -157, -154, 220, -419, + 88, -419, 88, -419, 88, -294, 245, -106, 88, 26, + -303, -177, -175, -294, 577, -396, -395, 520, -406, -402, + 119, 143, 101, -404, 615, 571, 128, 129, -83, -145, + 87, -419, -84, 289, 632, -387, 525, -91, 648, 591, + 566, 591, 566, -145, -145, -145, -104, -418, -419, 88, + 23, -318, -61, 588, -393, -394, 77, -397, 390, 587, + 608, 119, 90, 89, -255, 250, -380, 526, 142, -419, + 88, -419, 88, -419, -94, -175, 584, -331, -159, -394, + 77, -393, 77, 14, 13, -4, 678, 89, 291, -91, + -145, -145, -419, -60, 27, -176, -392, 258, 253, 256, + 33, -392, 96, -4, -419, -419, 588, 252, 32, 119, + -159, -179, -178, -178, } var yyDef = [...]int{ - 913, -2, -2, 915, 2, 4, 5, 6, 7, 8, + 925, -2, -2, 927, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 73, 75, 76, 913, 913, 913, 0, 913, - 0, 0, 913, -2, -2, 913, 1530, 0, 913, 0, - 0, 0, 0, 0, -2, 826, 832, 0, 841, -2, - 0, 0, 913, 913, 2099, 2099, 908, 0, 0, 0, - 0, 0, 913, 913, 913, 913, 1387, 53, 913, 0, - 88, 89, 861, 862, 863, 68, 0, 2097, 914, 1, - 3, 74, 78, 0, 0, 0, 61, 1396, 0, 81, - 0, 0, 917, 0, 0, 1513, 913, 913, 0, 129, - 130, 131, 0, 0, 0, 913, 0, -2, 135, -2, - 164, 165, 166, 0, 171, 625, 527, 579, 525, 564, + 39, 40, 73, 75, 76, 925, 925, 925, 0, 925, + 0, 0, 925, -2, -2, 925, 1542, 0, 925, 0, + 0, 0, 0, 0, -2, 838, 844, 0, 853, -2, + 0, 0, 925, 925, 2112, 2112, 920, 0, 0, 0, + 0, 0, 925, 925, 925, 925, 1399, 53, 925, 0, + 88, 89, 873, 874, 875, 68, 0, 2110, 926, 1, + 3, 74, 78, 0, 0, 0, 61, 1408, 0, 81, + 0, 0, 929, 0, 0, 1525, 925, 925, 0, 129, + 130, 131, 0, 0, 0, 925, 0, -2, 135, -2, + 164, 165, 166, 0, 171, 637, 527, 579, 525, 564, -2, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 403, 403, 0, 0, -2, - 513, 513, 513, 1515, 0, 0, 0, 561, 465, 403, + 513, 513, 513, 1527, 0, 0, 0, 561, 465, 403, 403, 403, 0, 403, 403, 403, 403, 0, 0, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, - 403, 403, 403, 403, 403, 403, 1414, 170, 1531, 1528, - 1529, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, - 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, - 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, - 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, - 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, - 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, - 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, - 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, - 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, - 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, - 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, - 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, - 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, - 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, - 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, - 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, - 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, - 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, - 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, - 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, - 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, - 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, - 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, - 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, - 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, - 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, - 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, - 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, - 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, - 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, - 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, - 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, - 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, - 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, - 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, - 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, - 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, - 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, - 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, - 2078, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, - 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 0, - 1507, 0, 738, 1016, 0, 0, 743, 0, 0, 746, - 747, 815, 749, 750, 815, 0, 815, 815, 815, 815, - 0, 0, 0, 760, 0, 0, 0, 0, 812, 0, - 776, 777, 0, 812, 812, 812, 0, 786, 818, 0, - 0, 792, 815, 815, 795, 796, 2100, 0, 2100, 2100, - 1498, 0, 809, 807, 821, 822, 43, 825, 828, 829, - 830, 831, 834, 0, 845, 848, 1524, 1525, 0, 850, - 857, 874, 875, 0, 909, 910, 48, 1164, 0, 1038, - 1043, 1054, 1069, 1070, 1071, 1072, 1073, 1075, 1076, 1077, - 0, 0, 0, 0, 1082, 1083, 0, 0, 0, 0, - 0, 1145, 1091, 0, 0, 0, 0, 1360, 0, 0, - 1321, 1321, 1179, 1321, 1323, 1323, 1738, 1874, 1882, 2004, - 1700, 1705, 1706, 1707, 1997, 1998, 1999, 2000, 2040, 2041, - 2045, 1798, 0, 0, 0, 2096, 1835, 1843, 1844, 1868, - 1969, 2025, 1717, 1863, 1934, 1795, 1817, 1818, 1951, 1952, - 1839, 1840, 1821, 1833, 1836, 1824, 1825, 1827, 1829, 1834, - 1841, 1847, 1826, 1846, 1845, 0, 1822, 1823, 1828, 1838, - 1842, 1830, 1831, 1832, 1837, 1848, 0, 0, 0, 0, - 0, 1260, 1261, 1262, 1263, 0, 0, 0, 0, 0, - 0, 0, 295, 296, 1373, 1374, 46, 47, 1163, 1494, - 1323, 1323, 1323, 1323, 1323, 1105, 1106, 1107, 1108, 1109, - 1133, 1134, 1140, 1141, 1946, 1947, 1948, 1949, 1779, 2034, - 1787, 1788, 1929, 1930, 1800, 1801, 2071, 2072, -2, -2, - -2, 236, 237, 238, 239, 240, 241, 242, 243, 0, - 1742, 2015, 2016, 232, 0, 0, 300, 301, 297, 298, - 299, 1147, 1148, 253, 254, 255, 256, 257, 258, 259, - 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 2099, 0, 884, 0, 0, - 0, 0, 0, 1396, 0, 1388, 1387, 66, 0, -2, - 0, 0, 0, 0, 50, 0, 55, 973, 916, 80, - 79, 1445, 0, 0, 0, 62, 1397, 70, 72, 1398, - 0, 918, 919, 0, 949, 953, 0, 0, 0, 1514, - 1513, 1513, 105, 0, 0, 106, 126, 127, 128, 0, - 0, 112, 113, 1500, 1501, 132, 0, 0, 182, 183, - 0, 44, 430, 0, 178, 935, 0, 423, 362, 0, - 1414, 0, 0, 0, 0, 0, 913, 0, 1508, 159, - 160, 167, 168, 169, 403, 403, 403, 576, 0, 0, - 170, 170, 534, 535, 536, 0, 0, -2, 428, 0, - 514, 0, 0, 417, 417, 421, 419, 420, 0, 0, - 0, 0, 0, 0, 0, 0, 553, 0, 554, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 686, 0, - 404, 0, 574, 575, 466, 0, 0, 0, 0, 0, - 0, 0, 0, 1516, 1517, 0, 551, 552, 0, 0, - 0, 403, 403, 0, 0, 0, 0, 403, 403, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 158, 1436, 0, - 0, 0, 0, -2, 0, 730, 0, 0, 0, 1509, - 1509, 0, 737, 0, 739, 1427, 741, 744, 745, 748, - 0, 0, 751, 0, 812, 812, 810, 811, 753, 754, - 755, 756, 815, 0, 0, 412, 413, 414, 812, 815, - 0, 815, 815, 815, 815, 812, 812, 812, 815, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2100, 818, - 815, 815, 0, 815, 0, 787, 0, 788, 789, 790, - 793, 794, 797, 2101, 2102, 1526, 1527, 1534, 1535, 1536, - 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, + 403, 403, 403, 403, 403, 403, 1426, 170, 1543, 1540, + 1541, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, + 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, + 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, + 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, + 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, + 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, + 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, + 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, + 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, + 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, + 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, + 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, + 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, + 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, + 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, + 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, + 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, + 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, + 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, + 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, + 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, + 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, + 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, + 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, + 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, + 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, + 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, + 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, + 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, + 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, + 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, + 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, + 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, + 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, + 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, + 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, + 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, + 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, + 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, + 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, + 0, 1519, 0, 750, 1028, 0, 0, 755, 0, 0, + 758, 759, 827, 761, 762, 827, 0, 827, 827, 827, + 827, 0, 0, 0, 772, 0, 0, 0, 0, 824, + 0, 788, 789, 0, 824, 824, 824, 0, 798, 830, + 0, 0, 804, 827, 827, 807, 808, 2113, 0, 2113, + 2113, 1510, 0, 821, 819, 833, 834, 43, 837, 840, + 841, 842, 843, 846, 0, 857, 860, 1536, 1537, 0, + 862, 869, 886, 887, 0, 921, 922, 48, 1176, 0, + 1050, 1055, 1066, 1081, 1082, 1083, 1084, 1085, 1087, 1088, + 1089, 0, 0, 0, 0, 1094, 1095, 0, 0, 0, + 0, 0, 1157, 1103, 0, 0, 0, 0, 1372, 0, + 0, 1333, 1333, 1191, 1333, 1335, 1335, 1750, 1886, 1894, + 2016, 1712, 1717, 1718, 1719, 2009, 2010, 2011, 2012, 2052, + 2053, 2057, 1810, 0, 0, 0, 2109, 1847, 1855, 1856, + 1880, 1981, 2037, 1729, 1875, 1946, 1807, 1829, 1830, 1963, + 1964, 1851, 1852, 1833, 1845, 1848, 1836, 1837, 1839, 1841, + 1846, 1853, 1859, 1838, 1858, 1857, 0, 1834, 1835, 1840, + 1850, 1854, 1842, 1843, 1844, 1849, 1860, 0, 0, 0, + 0, 0, 1272, 1273, 1274, 1275, 0, 0, 0, 0, + 0, 0, 0, 295, 296, 1385, 1386, 46, 47, 1175, + 1506, 1335, 1335, 1335, 1335, 1335, 1117, 1118, 1119, 1120, + 1121, 1145, 1146, 1152, 1153, 1958, 1959, 1960, 1961, 1791, + 2046, 1799, 1800, 1941, 1942, 1812, 1813, 2084, 2085, -2, + -2, -2, 236, 237, 238, 239, 240, 241, 242, 243, + 0, 1754, 2027, 2028, 232, 0, 0, 300, 301, 297, + 298, 299, 1159, 1160, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 2112, 0, 896, 0, + 0, 0, 0, 0, 1408, 0, 1400, 1399, 66, 0, + -2, 0, 0, 0, 0, 50, 0, 55, 985, 928, + 80, 79, 1457, 0, 0, 0, 62, 1409, 70, 72, + 1410, 0, 930, 931, 0, 961, 965, 0, 0, 0, + 1526, 1525, 1525, 105, 0, 0, 106, 126, 127, 128, + 0, 0, 112, 113, 1512, 1513, 132, 0, 0, 182, + 183, 0, 44, 430, 0, 178, 947, 0, 423, 362, + 0, 1426, 0, 0, 0, 0, 0, 925, 0, 1520, + 159, 160, 167, 168, 169, 403, 403, 403, 576, 0, + 0, 170, 170, 534, 535, 536, 0, 0, -2, 428, + 0, 514, 0, 0, 417, 417, 421, 419, 420, 0, + 0, 0, 0, 0, 0, 0, 0, 553, 0, 554, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 698, + 0, 404, 0, 574, 575, 466, 0, 0, 0, 0, + 0, 0, 0, 0, 1528, 1529, 0, 551, 552, 0, + 0, 0, 403, 403, 0, 0, 0, 0, 403, 403, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 158, 1448, + 0, 0, 0, 0, 0, -2, 0, 742, 0, 0, + 0, 1521, 1521, 0, 749, 0, 751, 1439, 753, 756, + 757, 760, 0, 0, 763, 0, 824, 824, 822, 823, + 765, 766, 767, 768, 827, 0, 0, 412, 413, 414, + 824, 827, 0, 827, 827, 827, 827, 824, 824, 824, + 827, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2113, 830, 827, 827, 0, 827, 0, 799, 0, 800, + 801, 802, 805, 806, 809, 2114, 2115, 1538, 1539, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, @@ -8473,240 +8425,244 @@ var yyDef = [...]int{ 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, - 1687, 1688, 2100, 2100, 801, 805, 1499, 827, 833, 835, - 836, 0, 0, 846, 849, 868, 52, 1786, 856, 52, - 858, 859, 860, 887, 888, 893, 0, 0, 0, 0, - 899, 900, 901, 902, 0, 0, 905, 906, 907, 0, - 0, 0, 0, 0, 1036, 0, 0, 1153, 1154, 1155, - 1156, 1157, 1158, 1159, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1055, 1056, 0, 0, 0, 1078, 1079, 1080, 1081, - 1084, 0, 1096, 0, 1098, 1369, -2, 0, 0, 0, - 1089, 1090, 0, 0, 0, 0, 0, 0, 0, 1361, - 0, 0, 1177, 0, 1178, 1180, 1181, 0, 1182, 923, - 923, 923, 923, 923, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 923, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1519, 146, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 933, 0, 0, 933, 933, 0, - 0, 225, 226, 227, 228, 229, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 244, 245, 246, 247, 248, 249, 302, 250, 251, 252, - 1163, 0, 0, 0, 49, 876, 877, 0, 999, 1519, - 0, 0, 0, 929, 0, 60, 69, 71, 1396, 64, - 1396, 0, 0, 0, -2, -2, 936, 942, 943, 944, - 945, 946, 57, 2098, 58, 0, 77, 0, 51, 0, - 0, 0, 0, 376, 1448, 0, 0, 1389, 1390, 1393, - 0, 950, 1880, 954, 0, 956, 957, 0, 0, 103, - 0, 1015, 0, 0, 0, 114, 0, 116, 117, 0, - 0, 0, 387, 1502, 1503, 1504, -2, 410, 0, 387, - 371, 310, 311, 312, 362, 314, 362, 362, 362, 362, - 376, 376, 376, 376, 345, 346, 347, 348, 349, 0, - 0, 331, 362, 362, 362, 362, 352, 353, 354, 355, - 356, 357, 358, 359, 315, 316, 317, 318, 319, 320, - 321, 322, 323, 364, 364, 364, 364, 364, 368, 368, - 0, 45, 0, 940, 941, 391, 0, 1393, 0, 0, - 1436, 1511, 1521, 0, 0, 0, 1511, 137, 0, 0, - 0, 577, 636, 528, 565, 578, 0, 531, 532, -2, - 0, 0, 513, 0, 515, 0, 411, 0, -2, 0, - 421, 0, 417, 421, 418, 421, 409, 422, 555, 556, - 557, 0, 559, 560, 666, 985, 0, 0, 0, 0, - 0, 672, 673, 674, 0, 676, 677, 678, 679, 680, - 681, 682, 683, 684, 685, 566, 567, 568, 569, 570, - 571, 572, 573, 0, 0, 0, 0, 515, 0, 562, - 0, 0, 467, 468, 469, 0, 0, 472, 473, 474, - 475, 0, 0, 478, 479, 480, 1002, 1003, 481, 482, - 507, 508, 509, 483, 484, 485, 486, 487, 488, 489, - 501, 502, 503, 504, 505, 506, 490, 491, 492, 493, - 494, 495, 498, 0, 152, 1418, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1509, 0, 0, 0, 0, 932, 1017, 1532, 1533, - 740, 0, 1428, 0, 1431, 1432, 1433, 1434, 1435, 816, - 817, 0, 415, 416, 815, 815, 757, 802, 0, 815, - 761, 803, 762, 764, 763, 765, 778, 779, 815, 768, - 813, 814, 769, 770, 771, 772, 773, 774, 775, 798, - 780, 781, 782, 785, 783, 784, 819, 0, 823, 824, - 799, 800, 0, 0, 839, 840, 0, 847, 871, 869, - 870, 872, 864, 865, 866, 867, 0, 873, 0, 0, - 890, 99, 895, 896, 897, 898, 911, 904, 1165, 1033, - 1034, 1035, 0, 1037, 1040, 0, 1149, 1151, 1042, 1044, - 1160, 1161, 1162, 0, 0, 0, 0, 0, 1048, 1052, - 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, - 1067, 1068, 1074, 1337, 1338, 1339, 1093, 303, 304, 0, - 1094, 0, 0, 0, 0, 0, 0, 0, 1164, 1095, - 0, 947, 0, 0, 1367, 1364, 0, 0, 0, 1322, - 1324, 0, 0, 0, 0, 924, 925, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1300, 1301, 1302, 1303, 1304, - 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, - 1315, 1316, 1317, 1318, 1319, 1320, 1340, 0, 0, 0, - 0, 0, 1360, 0, 1100, 1101, 1102, 0, 0, 0, - 0, 0, 0, 1220, 0, 0, 0, 0, 1520, 0, - 147, 148, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1264, 1265, - 1266, 1267, 42, 0, 0, 0, 934, 1371, 0, -2, - -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1289, 0, 0, 0, 0, 0, - 0, 1492, 0, 0, 879, 880, 882, 0, 1019, 0, - 1000, 0, 0, 885, 886, 0, 928, 0, 931, 63, - 65, 0, 958, 937, 59, 54, 0, 0, 977, 1446, - 376, 1468, 0, 385, 385, 382, 1399, 1400, 0, 1392, - 1394, 1395, 82, 955, 951, 0, 1031, 0, 0, 1014, - 0, 961, 963, 964, 965, 997, 0, 968, 969, 0, - 0, 0, 0, 0, 101, 1016, 107, 0, 115, 0, - 0, 120, 121, 108, 109, 110, 111, 0, 625, -2, - 462, 184, 186, 187, 188, 179, -2, 374, 372, 373, - 313, 376, 376, 339, 340, 341, 342, 343, 344, 0, - 0, 332, 333, 334, 335, 324, 0, 325, 326, 327, - 366, 0, 328, 329, 0, 330, 429, 0, 1401, 392, - 393, 395, 403, 0, 398, 399, 0, 403, 403, 0, - 424, 425, 0, 1393, 1418, 0, 0, 0, 1522, 1521, - 1521, 1521, 0, 172, 173, 174, 175, 176, 177, 661, - 0, 0, 637, 659, 660, 170, 0, 0, 180, 517, - 516, 0, 693, 0, 427, 0, 0, 421, 421, 406, - 407, 558, 0, 0, 668, 669, 670, 671, 0, 0, - 0, 544, 456, 0, 545, 546, 515, 517, 0, 0, - 387, 470, 471, 476, 477, 496, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 591, 592, 593, - 596, 598, 599, 600, 519, 606, 595, 597, 601, 602, - 603, 519, 607, 608, 609, 610, 613, 615, 616, 617, - 519, 623, 612, 614, 618, 619, 620, 519, 624, 1415, - 1416, 1417, 0, 0, 731, 0, 0, 453, 97, 1510, - 736, 1429, 742, 1430, 812, 767, 804, 812, 759, 766, - 791, 837, 838, 843, 851, 852, 853, 854, 855, 894, - 0, 0, 0, 0, 903, 0, 0, 1041, 1150, 1152, - 1045, 0, 1049, 1053, 0, 0, 0, 1099, 1097, 1371, - 0, 0, 0, 1146, 0, 0, 1168, 1169, 0, 0, - 0, 1365, 0, 0, 1175, 0, 1325, 1326, 1183, 0, - 0, 0, 0, 0, 1189, 1190, 1191, 1192, 1193, 1194, - 1195, 1196, 1197, 1198, 1387, 0, 0, 0, 0, 0, - 1204, 1205, 1206, 1207, 1208, 0, 1210, 0, 1211, 0, - 0, 0, 0, 1218, 1219, 1221, 0, 0, 1224, 1225, - 0, 0, 1226, 0, 0, 0, 1230, 0, 0, 0, - 0, 1239, 1240, 1241, 1242, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1253, 1254, 0, 1128, 0, - 0, 1128, 0, 1166, 933, 0, 1327, 1328, 1329, 1330, - 1331, 0, 0, 0, 0, 0, 0, 1287, 1288, 1290, - 0, 0, 1293, 0, 1295, 0, 1493, 878, 881, 883, - 971, 1020, 1021, 0, 0, 0, 0, 1001, 1518, 926, - 927, 930, 979, 0, 1375, 0, 0, 958, 1031, 959, - 0, 938, 56, 974, 0, 1450, 1449, 1462, 1475, 385, - 385, 379, 380, 386, 381, 383, 384, 1391, 0, 1396, - 0, 1486, 0, 0, 1478, 0, 0, 0, 0, 0, - 0, 0, 0, 1004, 0, 0, 1007, 0, 0, 0, - 0, 998, 969, 0, 970, 0, -2, 0, 0, 95, - 96, 0, 0, 0, 118, 119, 0, 0, 125, 388, - 389, 161, 170, 464, 185, 437, 0, 0, 309, 375, - 336, 337, 338, 0, 360, 0, 0, 0, 0, 458, - 133, 1405, 1404, 403, 403, 394, 0, 397, 0, 0, - 0, 1523, 363, 426, 0, 151, 0, 0, 0, 0, - 0, 157, 631, 0, 0, 638, 0, 0, 0, 526, - 0, 537, 538, 0, 665, -2, 727, 391, 0, 405, - 408, 986, 0, 0, 539, 0, 542, 543, 457, 517, - 548, 549, 563, 550, 499, 500, 497, 0, 0, 1437, - 1438, 1443, 1441, 1442, 138, 584, 586, 585, 589, 0, - 0, 0, 521, 0, 521, 0, 521, 521, 582, 0, - 453, 1401, 0, 735, 454, 455, 815, 815, 889, 100, - 0, 892, 0, 0, 0, 0, 1046, 1050, 1332, 1358, - 362, 362, 1345, 362, 368, 1348, 362, 1350, 362, 1353, - 362, 1356, 1357, 0, 0, 0, 948, 0, 0, 1174, - 1368, 0, 0, 1184, 1185, 1186, 1187, 1188, 1362, 0, - 0, 0, 1203, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 149, 150, 0, 0, 0, 0, 0, - 0, 1298, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1123, 1127, 0, 1129, 1130, 0, 0, 1256, - 0, 0, 1268, 0, 1372, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1022, 1027, 1027, 1027, 0, - 0, 0, 1505, 1506, 1376, 1377, 1031, 1378, 960, 939, - 978, 1468, 0, 1461, 0, -2, 1470, 0, 0, 0, - 1476, 377, 378, 952, 83, 1032, 86, 0, 1486, 1495, - 0, 1477, 1488, 1490, 0, 0, 0, 1482, 0, 1031, - 962, 993, 995, 0, 990, 1005, 1006, 1008, 0, 1010, - 0, 1012, 1013, 973, 967, 0, 103, 0, 1031, 1031, - 102, 0, 1018, 122, 123, 124, 463, 189, 194, 0, - 0, 0, 199, 0, 201, 0, 0, 0, 206, 207, - 403, 403, 438, 0, 306, 308, 0, 0, 192, 376, - 0, 376, 0, 367, 369, 0, 439, 459, 1402, 1403, - 0, 0, 396, 400, 401, 402, 0, 1512, 153, 0, - 0, 0, 634, 0, 662, 0, 0, 0, 0, 0, - 0, 181, 518, 694, 695, 696, 697, 698, 699, 700, - 701, 702, 0, 403, 0, 0, 0, 403, 403, 403, - 0, 719, 390, 0, 0, 690, 687, 540, 0, 230, - 231, 233, 0, 0, 0, 0, 0, 547, 973, 1419, - 1420, 1421, 0, 1440, 1444, 141, 0, 0, 0, 0, - 594, 604, 0, 520, 605, 611, 621, 622, 732, 733, - 734, 98, 752, 758, 891, 912, 1039, 1047, 1051, 0, - 0, 0, 0, 1359, 1343, 376, 1346, 1347, 1349, 1351, - 1352, 1354, 1355, 1087, 1088, 1092, 0, 1171, 0, 1173, - 1366, 0, 1396, 0, 0, 0, 1202, 0, 0, 0, - 1213, 1212, 1214, 0, 1216, 1217, 1222, 1223, 1227, 0, - 1229, 1231, 1232, 0, 0, 0, 1243, 1244, 1245, 1246, - 1247, 1248, 1249, 1250, 1251, 1252, 0, 1121, 1124, 1255, - 1131, 1132, 1137, 1258, 0, 0, 1167, 1270, 0, 1275, - 0, 0, 1281, 0, 1285, 0, 1291, 1292, 1294, 1296, - 0, 0, 0, 0, 0, 999, 980, 67, 1378, 1380, - 0, 1455, 1453, 1453, 1463, 1464, 0, 0, 1471, 0, - 0, 0, 0, 87, 0, 0, 0, 1491, 0, 0, - 0, 0, 104, 1387, 987, 994, 0, 0, 988, 0, - 989, 1009, 1011, 966, 0, 1031, 1031, 93, 94, 0, - 195, 0, 197, 223, 224, 0, 200, 202, 203, 204, - 210, 211, 212, 205, 0, 0, 305, 307, 0, 0, - 350, 361, 351, 0, 0, 1406, 1407, 1408, 1409, 1410, - 1411, 1412, 1413, 973, 154, 155, 156, 626, 0, 636, - 0, 975, 0, 629, 0, 529, 0, 0, 0, 403, - 403, 403, 0, 0, 0, 0, 704, 0, 0, 667, - 0, 675, 0, 0, 0, 234, 235, 0, 1439, 583, - 0, 139, 140, 0, 0, 588, 522, 523, 1085, 0, - 0, 0, 1086, 1344, 0, 0, 0, 0, 1363, 0, - 0, 0, 0, 1209, 0, 0, 0, 1235, 0, 0, - 0, 656, 657, 0, 1299, 1126, 1387, 0, 1128, 1138, - 1139, 0, 1128, 1269, 0, 0, 0, 0, 0, 0, - 0, 1028, 0, 0, 0, 0, 1019, 1380, 1385, 0, - 0, 1458, 0, 1451, 1454, 1452, 1465, 0, 0, 1472, - 0, 1474, 0, 1496, 1497, 1489, 0, 1481, 1484, 1480, - 1483, 1396, 991, 0, 996, 0, 1387, 92, 0, 198, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 208, 209, 0, 0, 365, 370, 0, 0, 0, 627, - 0, 976, 639, 630, 0, 717, 0, 721, 0, 0, - 0, 724, 725, 726, 703, 0, 707, 431, 691, 688, - 689, 541, 0, 142, 143, 0, 0, 0, 1333, 0, - 1336, 1170, 1172, 0, 1199, 1200, 1201, 1341, 1342, 1215, - 1228, 1233, 0, 1236, 0, 0, 1237, 0, 658, 1117, - 0, 0, 1135, 1136, 0, 1271, 0, 1276, 1277, 0, - 1282, 0, 1286, 1297, 0, 1024, 981, 982, 1029, 1030, - 0, 0, 972, 1385, 85, 1386, 1383, 0, 1381, 1379, - 1447, 0, 1456, 1457, 1466, 1467, 1473, 0, 1479, 0, - 90, 0, 0, 0, 1396, 196, 0, 215, 0, 635, - 0, 638, 628, 715, 716, 0, 728, 720, 722, 723, - 705, -2, 1422, 0, 0, 0, 590, 1334, 0, 0, - 1238, 0, 654, 655, 1125, 1118, 0, 1103, 1104, 1122, - 1257, 1259, 0, 0, 0, 0, 1023, 1025, 1026, 84, - 0, 1382, 1143, 0, 1459, 1460, 1487, 1485, 992, 999, - 0, 91, 444, 437, 1422, 0, 0, 0, 708, 709, - 710, 711, 712, 713, 714, 580, 1424, 144, 145, 510, - 511, 512, 138, 0, 1176, 1234, 1119, 0, 0, 0, - 0, 1115, 1116, 0, 1272, 0, 1278, 0, 1283, 0, - 983, 984, 1384, 0, 0, 640, 0, 642, 0, -2, - 432, 445, 0, 190, 216, 217, 0, 0, 220, 221, - 222, 213, 214, 134, 0, 0, 729, 0, 1425, 1426, - 141, 0, 0, 1110, 1111, 1112, 1113, 1114, 0, 0, - 0, 1144, 1123, 641, 0, 0, 387, 0, 651, 433, - 434, 0, 440, 441, 442, 443, 218, 219, 663, 0, - 0, 587, 1335, 0, 1273, 0, 1279, 0, 1284, 0, - 643, 644, 652, 0, 435, 0, 436, 0, 0, 0, - 632, 0, 663, 1423, 1120, 0, 0, 1142, 0, 653, - 649, 446, 448, 449, 0, 0, 447, 664, 633, 1274, - 1280, 0, 450, 451, 452, 645, 646, 647, 648, + 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, + 1697, 1698, 1699, 1700, 2113, 2113, 813, 817, 1511, 839, + 845, 847, 848, 0, 0, 858, 861, 880, 52, 1798, + 868, 52, 870, 871, 872, 899, 900, 905, 0, 0, + 0, 0, 911, 912, 913, 914, 0, 0, 917, 918, + 919, 0, 0, 0, 0, 0, 1048, 0, 0, 1165, + 1166, 1167, 1168, 1169, 1170, 1171, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1067, 1068, 0, 0, 0, 1090, 1091, + 1092, 1093, 1096, 0, 1108, 0, 1110, 1381, -2, 0, + 0, 0, 1101, 1102, 0, 0, 0, 0, 0, 0, + 0, 1373, 0, 0, 1189, 0, 1190, 1192, 1193, 0, + 1194, 935, 935, 935, 935, 935, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 935, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1531, 146, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 945, 0, 0, 945, + 945, 0, 0, 225, 226, 227, 228, 229, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 244, 245, 246, 247, 248, 249, 302, 250, + 251, 252, 1175, 0, 0, 0, 49, 888, 889, 0, + 1011, 1531, 0, 0, 0, 941, 0, 60, 69, 71, + 1408, 64, 1408, 0, 0, 0, -2, -2, 948, 954, + 955, 956, 957, 958, 57, 2111, 58, 0, 77, 0, + 51, 0, 0, 0, 0, 376, 1460, 0, 0, 1401, + 1402, 1405, 0, 962, 1892, 966, 0, 968, 969, 0, + 0, 103, 0, 1027, 0, 0, 0, 114, 0, 116, + 117, 0, 0, 0, 387, 1514, 1515, 1516, -2, 410, + 0, 387, 371, 310, 311, 312, 362, 314, 362, 362, + 362, 362, 376, 376, 376, 376, 345, 346, 347, 348, + 349, 0, 0, 331, 362, 362, 362, 362, 352, 353, + 354, 355, 356, 357, 358, 359, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 364, 364, 364, 364, 364, + 368, 368, 0, 45, 0, 952, 953, 391, 0, 1405, + 0, 0, 1448, 1523, 1533, 0, 0, 0, 1523, 137, + 0, 0, 0, 577, 648, 528, 565, 578, 0, 531, + 532, -2, 0, 0, 513, 0, 515, 0, 411, 0, + -2, 0, 421, 0, 417, 421, 418, 421, 409, 422, + 555, 556, 557, 0, 559, 560, 678, 997, 0, 0, + 0, 0, 0, 684, 685, 686, 0, 688, 689, 690, + 691, 692, 693, 694, 695, 696, 697, 566, 567, 568, + 569, 570, 571, 572, 573, 0, 0, 0, 0, 515, + 0, 562, 0, 0, 467, 468, 469, 0, 0, 472, + 473, 474, 475, 0, 0, 478, 479, 480, 1014, 1015, + 481, 482, 507, 508, 509, 483, 484, 485, 486, 487, + 488, 489, 501, 502, 503, 504, 505, 506, 490, 491, + 492, 493, 494, 495, 498, 0, 152, 1430, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1521, 0, 0, 0, 0, 944, 1029, 1544, 1545, 752, + 0, 1440, 0, 1443, 1444, 1445, 1446, 1447, 828, 829, + 0, 415, 416, 827, 827, 769, 814, 0, 827, 773, + 815, 774, 776, 775, 777, 790, 791, 827, 780, 825, + 826, 781, 782, 783, 784, 785, 786, 787, 810, 792, + 793, 794, 797, 795, 796, 831, 0, 835, 836, 811, + 812, 0, 0, 851, 852, 0, 859, 883, 881, 882, + 884, 876, 877, 878, 879, 0, 885, 0, 0, 902, + 99, 907, 908, 909, 910, 923, 916, 1177, 1045, 1046, + 1047, 0, 1049, 1052, 0, 1161, 1163, 1054, 1056, 1172, + 1173, 1174, 0, 0, 0, 0, 0, 1060, 1064, 1069, + 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, + 1080, 1086, 1349, 1350, 1351, 1105, 303, 304, 0, 1106, + 0, 0, 0, 0, 0, 0, 0, 1176, 1107, 0, + 959, 0, 0, 1379, 1376, 0, 0, 0, 1334, 1336, + 0, 0, 0, 0, 936, 937, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1312, 1313, 1314, 1315, 1316, 1317, + 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, + 1328, 1329, 1330, 1331, 1332, 1352, 0, 0, 0, 0, + 0, 1372, 0, 1112, 1113, 1114, 0, 0, 0, 0, + 0, 0, 1232, 0, 0, 0, 0, 1532, 0, 147, + 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1276, 1277, 1278, + 1279, 42, 0, 0, 0, 946, 1383, 0, -2, -2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1301, 0, 0, 0, 0, 0, 0, + 1504, 0, 0, 891, 892, 894, 0, 1031, 0, 1012, + 0, 0, 897, 898, 0, 940, 0, 943, 63, 65, + 0, 970, 949, 59, 54, 0, 0, 989, 1458, 376, + 1480, 0, 385, 385, 382, 1411, 1412, 0, 1404, 1406, + 1407, 82, 967, 963, 0, 1043, 0, 0, 1026, 0, + 973, 975, 976, 977, 1009, 0, 980, 981, 0, 0, + 0, 0, 0, 101, 1028, 107, 0, 115, 0, 0, + 120, 121, 108, 109, 110, 111, 0, 637, -2, 462, + 184, 186, 187, 188, 179, -2, 374, 372, 373, 313, + 376, 376, 339, 340, 341, 342, 343, 344, 0, 0, + 332, 333, 334, 335, 324, 0, 325, 326, 327, 366, + 0, 328, 329, 0, 330, 429, 0, 1413, 392, 393, + 395, 403, 0, 398, 399, 0, 403, 403, 0, 424, + 425, 0, 1405, 1430, 0, 0, 0, 1534, 1533, 1533, + 1533, 0, 172, 173, 174, 175, 176, 177, 673, 0, + 0, 649, 671, 672, 170, 0, 0, 180, 517, 516, + 0, 705, 0, 427, 0, 0, 421, 421, 406, 407, + 558, 0, 0, 680, 681, 682, 683, 0, 0, 0, + 544, 456, 0, 545, 546, 515, 517, 0, 0, 387, + 470, 471, 476, 477, 496, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 591, 592, 593, 596, + 598, 599, 600, 519, 606, 595, 597, 601, 602, 603, + 519, 607, 608, 610, 611, 612, 519, 618, 609, 613, + 614, 615, 519, 619, 620, 621, 622, 625, 627, 628, + 629, 519, 635, 624, 626, 630, 631, 632, 519, 636, + 1427, 1428, 1429, 0, 0, 743, 0, 0, 453, 97, + 1522, 748, 1441, 754, 1442, 824, 779, 816, 824, 771, + 778, 803, 849, 850, 855, 863, 864, 865, 866, 867, + 906, 0, 0, 0, 0, 915, 0, 0, 1053, 1162, + 1164, 1057, 0, 1061, 1065, 0, 0, 0, 1111, 1109, + 1383, 0, 0, 0, 1158, 0, 0, 1180, 1181, 0, + 0, 0, 1377, 0, 0, 1187, 0, 1337, 1338, 1195, + 0, 0, 0, 0, 0, 1201, 1202, 1203, 1204, 1205, + 1206, 1207, 1208, 1209, 1210, 1399, 0, 0, 0, 0, + 0, 1216, 1217, 1218, 1219, 1220, 0, 1222, 0, 1223, + 0, 0, 0, 0, 1230, 1231, 1233, 0, 0, 1236, + 1237, 0, 0, 1238, 0, 0, 0, 1242, 0, 0, + 0, 0, 1251, 1252, 1253, 1254, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1265, 1266, 0, 1140, + 0, 0, 1140, 0, 1178, 945, 0, 1339, 1340, 1341, + 1342, 1343, 0, 0, 0, 0, 0, 0, 1299, 1300, + 1302, 0, 0, 1305, 0, 1307, 0, 1505, 890, 893, + 895, 983, 1032, 1033, 0, 0, 0, 0, 1013, 1530, + 938, 939, 942, 991, 0, 1387, 0, 0, 970, 1043, + 971, 0, 950, 56, 986, 0, 1462, 1461, 1474, 1487, + 385, 385, 379, 380, 386, 381, 383, 384, 1403, 0, + 1408, 0, 1498, 0, 0, 1490, 0, 0, 0, 0, + 0, 0, 0, 0, 1016, 0, 0, 1019, 0, 0, + 0, 0, 1010, 981, 0, 982, 0, -2, 0, 0, + 95, 96, 0, 0, 0, 118, 119, 0, 0, 125, + 388, 389, 161, 170, 464, 185, 437, 0, 0, 309, + 375, 336, 337, 338, 0, 360, 0, 0, 0, 0, + 458, 133, 1417, 1416, 403, 403, 394, 0, 397, 0, + 0, 0, 1535, 363, 426, 0, 151, 0, 0, 0, + 0, 0, 157, 643, 0, 0, 650, 0, 0, 0, + 526, 0, 537, 538, 0, 677, -2, 739, 391, 0, + 405, 408, 998, 0, 0, 539, 0, 542, 543, 457, + 517, 548, 549, 563, 550, 499, 500, 497, 0, 0, + 1449, 1450, 1455, 1453, 1454, 138, 584, 586, 585, 589, + 0, 0, 0, 521, 0, 521, 521, 521, 0, 521, + 521, 582, 0, 453, 1413, 0, 747, 454, 455, 827, + 827, 901, 100, 0, 904, 0, 0, 0, 0, 1058, + 1062, 1344, 1370, 362, 362, 1357, 362, 368, 1360, 362, + 1362, 362, 1365, 362, 1368, 1369, 0, 0, 0, 960, + 0, 0, 1186, 1380, 0, 0, 1196, 1197, 1198, 1199, + 1200, 1374, 0, 0, 0, 1215, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 149, 150, 0, 0, + 0, 0, 0, 0, 1310, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1135, 1139, 0, 1141, 1142, + 0, 0, 1268, 0, 0, 1280, 0, 1384, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1034, 1039, + 1039, 1039, 0, 0, 0, 1517, 1518, 1388, 1389, 1043, + 1390, 972, 951, 990, 1480, 0, 1473, 0, -2, 1482, + 0, 0, 0, 1488, 377, 378, 964, 83, 1044, 86, + 0, 1498, 1507, 0, 1489, 1500, 1502, 0, 0, 0, + 1494, 0, 1043, 974, 1005, 1007, 0, 1002, 1017, 1018, + 1020, 0, 1022, 0, 1024, 1025, 985, 979, 0, 103, + 0, 1043, 1043, 102, 0, 1030, 122, 123, 124, 463, + 189, 194, 0, 0, 0, 199, 0, 201, 0, 0, + 0, 206, 207, 403, 403, 438, 0, 306, 308, 0, + 0, 192, 376, 0, 376, 0, 367, 369, 0, 439, + 459, 1414, 1415, 0, 0, 396, 400, 401, 402, 0, + 1524, 153, 0, 0, 0, 646, 0, 674, 0, 0, + 0, 0, 0, 0, 181, 518, 706, 707, 708, 709, + 710, 711, 712, 713, 714, 0, 403, 0, 0, 0, + 403, 403, 403, 0, 731, 390, 0, 0, 702, 699, + 540, 0, 230, 231, 233, 0, 0, 0, 0, 0, + 547, 985, 1431, 1432, 1433, 0, 1452, 1456, 141, 0, + 0, 0, 0, 594, 604, 0, 520, 605, 616, 617, + 623, 633, 634, 744, 745, 746, 98, 764, 770, 903, + 924, 1051, 1059, 1063, 0, 0, 0, 0, 1371, 1355, + 376, 1358, 1359, 1361, 1363, 1364, 1366, 1367, 1099, 1100, + 1104, 0, 1183, 0, 1185, 1378, 0, 1408, 0, 0, + 0, 1214, 0, 0, 0, 1225, 1224, 1226, 0, 1228, + 1229, 1234, 1235, 1239, 0, 1241, 1243, 1244, 0, 0, + 0, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, + 1264, 0, 1133, 1136, 1267, 1143, 1144, 1149, 1270, 0, + 0, 1179, 1282, 0, 1287, 0, 0, 1293, 0, 1297, + 0, 1303, 1304, 1306, 1308, 0, 0, 0, 0, 0, + 1011, 992, 67, 1390, 1392, 0, 1467, 1465, 1465, 1475, + 1476, 0, 0, 1483, 0, 0, 0, 0, 87, 0, + 0, 0, 1503, 0, 0, 0, 0, 104, 1399, 999, + 1006, 0, 0, 1000, 0, 1001, 1021, 1023, 978, 0, + 1043, 1043, 93, 94, 0, 195, 0, 197, 223, 224, + 0, 200, 202, 203, 204, 210, 211, 212, 205, 0, + 0, 305, 307, 0, 0, 350, 361, 351, 0, 0, + 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 985, 154, + 155, 156, 638, 0, 648, 0, 987, 0, 641, 0, + 529, 0, 0, 0, 403, 403, 403, 0, 0, 0, + 0, 716, 0, 0, 679, 0, 687, 0, 0, 0, + 234, 235, 0, 1451, 583, 0, 139, 140, 0, 0, + 588, 522, 523, 1097, 0, 0, 0, 1098, 1356, 0, + 0, 0, 0, 1375, 0, 0, 0, 0, 1221, 0, + 0, 0, 1247, 0, 0, 0, 668, 669, 0, 1311, + 1138, 1399, 0, 1140, 1150, 1151, 0, 1140, 1281, 0, + 0, 0, 0, 0, 0, 0, 1040, 0, 0, 0, + 0, 1031, 1392, 1397, 0, 0, 1470, 0, 1463, 1466, + 1464, 1477, 0, 0, 1484, 0, 1486, 0, 1508, 1509, + 1501, 0, 1493, 1496, 1492, 1495, 1408, 1003, 0, 1008, + 0, 1399, 92, 0, 198, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 208, 209, 0, 0, 365, + 370, 0, 0, 0, 639, 0, 988, 651, 642, 0, + 729, 0, 733, 0, 0, 0, 736, 737, 738, 715, + 0, 719, 431, 703, 700, 701, 541, 0, 142, 143, + 0, 0, 0, 1345, 0, 1348, 1182, 1184, 0, 1211, + 1212, 1213, 1353, 1354, 1227, 1240, 1245, 0, 1248, 0, + 0, 1249, 0, 670, 1129, 0, 0, 1147, 1148, 0, + 1283, 0, 1288, 1289, 0, 1294, 0, 1298, 1309, 0, + 1036, 993, 994, 1041, 1042, 0, 0, 984, 1397, 85, + 1398, 1395, 0, 1393, 1391, 1459, 0, 1468, 1469, 1478, + 1479, 1485, 0, 1491, 0, 90, 0, 0, 0, 1408, + 196, 0, 215, 0, 647, 0, 650, 640, 727, 728, + 0, 740, 732, 734, 735, 717, -2, 1434, 0, 0, + 0, 590, 1346, 0, 0, 1250, 0, 666, 667, 1137, + 1130, 0, 1115, 1116, 1134, 1269, 1271, 0, 0, 0, + 0, 1035, 1037, 1038, 84, 0, 1394, 1155, 0, 1471, + 1472, 1499, 1497, 1004, 1011, 0, 91, 444, 437, 1434, + 0, 0, 0, 720, 721, 722, 723, 724, 725, 726, + 580, 1436, 144, 145, 510, 511, 512, 138, 0, 1188, + 1246, 1131, 0, 0, 0, 0, 1127, 1128, 0, 1284, + 0, 1290, 0, 1295, 0, 995, 996, 1396, 0, 0, + 652, 0, 654, 0, -2, 432, 445, 0, 190, 216, + 217, 0, 0, 220, 221, 222, 213, 214, 134, 0, + 0, 741, 0, 1437, 1438, 141, 0, 0, 1122, 1123, + 1124, 1125, 1126, 0, 0, 0, 1156, 1135, 653, 0, + 0, 387, 0, 663, 433, 434, 0, 440, 441, 442, + 443, 218, 219, 675, 0, 0, 587, 1347, 0, 1285, + 0, 1291, 0, 1296, 0, 655, 656, 664, 0, 435, + 0, 436, 0, 0, 0, 644, 0, 675, 1435, 1132, + 0, 0, 1154, 0, 665, 661, 446, 448, 449, 0, + 0, 447, 676, 645, 1286, 1292, 0, 450, 451, 452, + 657, 658, 659, 660, } var yyTok1 = [...]int{ @@ -8715,7 +8671,7 @@ var yyTok1 = [...]int{ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 144, 3, 3, 3, 171, 163, 3, 87, 89, 168, 166, 88, 167, 221, 169, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 679, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 680, 152, 151, 153, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -8835,7 +8791,8 @@ var yyTok3 = [...]int{ 57985, 660, 57986, 661, 57987, 662, 57988, 663, 57989, 664, 57990, 665, 57991, 666, 57992, 667, 57993, 668, 57994, 669, 57995, 670, 57996, 671, 57997, 672, 57998, 673, 57999, 674, - 58000, 675, 58001, 676, 58002, 677, 58003, 678, 0, + 58000, 675, 58001, 676, 58002, 677, 58003, 678, 58004, 679, + 0, } var yyErrorMessages = [...]struct { @@ -9185,7 +9142,7 @@ yydefault: case 1: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:625 +//line sql.y:627 { stmt := yyDollar[2].statementUnion() // If the statement is empty and we have comments @@ -9199,58 +9156,58 @@ yydefault: } case 2: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:638 +//line sql.y:640 { } case 3: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:639 +//line sql.y:641 { } case 4: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:643 +//line sql.y:645 { yyLOCAL = yyDollar[1].selStmtUnion() } yyVAL.union = yyLOCAL case 41: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:683 +//line sql.y:685 { setParseTree(yylex, nil) } case 42: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:689 +//line sql.y:691 { yyLOCAL = NewVariableExpression(yyDollar[1].str, SingleAt) } yyVAL.union = yyLOCAL case 43: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:695 +//line sql.y:697 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } case 44: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:700 +//line sql.y:702 { yyVAL.identifierCI = NewIdentifierCI("") } case 45: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:704 +//line sql.y:706 { yyVAL.identifierCI = yyDollar[1].identifierCI } case 46: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:710 +//line sql.y:712 { yyLOCAL = NewVariableExpression(string(yyDollar[1].str), SingleAt) } @@ -9258,7 +9215,7 @@ yydefault: case 47: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:714 +//line sql.y:716 { yyLOCAL = NewVariableExpression(string(yyDollar[1].str), DoubleAt) } @@ -9266,7 +9223,7 @@ yydefault: case 48: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:720 +//line sql.y:722 { yyLOCAL = &OtherAdmin{} } @@ -9274,7 +9231,7 @@ yydefault: case 49: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:726 +//line sql.y:728 { yyLOCAL = &Load{} } @@ -9282,7 +9239,7 @@ yydefault: case 50: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *With -//line sql.y:732 +//line sql.y:734 { yyLOCAL = &With{ctes: yyDollar[2].ctesUnion(), Recursive: false} } @@ -9290,7 +9247,7 @@ yydefault: case 51: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *With -//line sql.y:736 +//line sql.y:738 { yyLOCAL = &With{ctes: yyDollar[3].ctesUnion(), Recursive: true} } @@ -9298,7 +9255,7 @@ yydefault: case 52: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *With -//line sql.y:741 +//line sql.y:743 { yyLOCAL = nil } @@ -9306,14 +9263,14 @@ yydefault: case 53: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *With -//line sql.y:745 +//line sql.y:747 { yyLOCAL = yyDollar[1].withUnion() } yyVAL.union = yyLOCAL case 54: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:751 +//line sql.y:753 { yySLICE := (*[]*CommonTableExpr)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].cteUnion()) @@ -9321,7 +9278,7 @@ yydefault: case 55: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*CommonTableExpr -//line sql.y:755 +//line sql.y:757 { yyLOCAL = []*CommonTableExpr{yyDollar[1].cteUnion()} } @@ -9329,7 +9286,7 @@ yydefault: case 56: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *CommonTableExpr -//line sql.y:761 +//line sql.y:763 { yyLOCAL = &CommonTableExpr{ID: yyDollar[1].identifierCS, Columns: yyDollar[2].columnsUnion(), Subquery: yyDollar[4].subqueryUnion()} } @@ -9337,7 +9294,7 @@ yydefault: case 57: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:767 +//line sql.y:769 { yyLOCAL = yyDollar[2].selStmtUnion() } @@ -9345,7 +9302,7 @@ yydefault: case 58: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:771 +//line sql.y:773 { yyLOCAL = yyDollar[2].selStmtUnion() } @@ -9353,7 +9310,7 @@ yydefault: case 59: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:775 +//line sql.y:777 { setLockInSelect(yyDollar[2].selStmtUnion(), yyDollar[3].lockUnion()) yyLOCAL = yyDollar[2].selStmtUnion() @@ -9362,7 +9319,7 @@ yydefault: case 60: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:798 +//line sql.y:800 { yyDollar[1].selStmtUnion().SetOrderBy(yyDollar[2].orderByUnion()) yyDollar[1].selStmtUnion().SetLimit(yyDollar[3].limitUnion()) @@ -9372,7 +9329,7 @@ yydefault: case 61: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:804 +//line sql.y:806 { yyDollar[1].selStmtUnion().SetLimit(yyDollar[2].limitUnion()) yyLOCAL = yyDollar[1].selStmtUnion() @@ -9381,7 +9338,7 @@ yydefault: case 62: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:809 +//line sql.y:811 { yyDollar[1].selStmtUnion().SetOrderBy(yyDollar[2].orderByUnion()) yyDollar[1].selStmtUnion().SetLimit(yyDollar[3].limitUnion()) @@ -9391,7 +9348,7 @@ yydefault: case 63: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:815 +//line sql.y:817 { yyDollar[2].selStmtUnion().SetWith(yyDollar[1].withUnion()) yyDollar[2].selStmtUnion().SetOrderBy(yyDollar[3].orderByUnion()) @@ -9402,7 +9359,7 @@ yydefault: case 64: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:822 +//line sql.y:824 { yyDollar[2].selStmtUnion().SetWith(yyDollar[1].withUnion()) yyDollar[2].selStmtUnion().SetLimit(yyDollar[3].limitUnion()) @@ -9412,7 +9369,7 @@ yydefault: case 65: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:828 +//line sql.y:830 { yyDollar[2].selStmtUnion().SetWith(yyDollar[1].withUnion()) yyDollar[2].selStmtUnion().SetOrderBy(yyDollar[3].orderByUnion()) @@ -9422,14 +9379,14 @@ yydefault: yyVAL.union = yyLOCAL case 66: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:835 +//line sql.y:837 { yyDollar[2].selStmtUnion().SetWith(yyDollar[1].withUnion()) } case 67: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:839 +//line sql.y:841 { yyLOCAL = NewSelect(Comments(yyDollar[2].strs), SelectExprs{&Nextval{Expr: yyDollar[5].exprUnion()}}, []string{yyDollar[3].str} /*options*/, nil, TableExprs{&AliasedTableExpr{Expr: yyDollar[7].tableName}}, nil /*where*/, nil /*groupBy*/, nil /*having*/, nil) } @@ -9437,7 +9394,7 @@ yydefault: case 68: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:845 +//line sql.y:847 { yyLOCAL = yyDollar[1].selStmtUnion() } @@ -9445,7 +9402,7 @@ yydefault: case 69: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:849 +//line sql.y:851 { yyLOCAL = &Union{Left: yyDollar[1].selStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].selStmtUnion()} } @@ -9453,7 +9410,7 @@ yydefault: case 70: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:853 +//line sql.y:855 { yyLOCAL = &Union{Left: yyDollar[1].selStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].selStmtUnion()} } @@ -9461,7 +9418,7 @@ yydefault: case 71: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:857 +//line sql.y:859 { yyLOCAL = &Union{Left: yyDollar[1].selStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].selStmtUnion()} } @@ -9469,7 +9426,7 @@ yydefault: case 72: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:861 +//line sql.y:863 { yyLOCAL = &Union{Left: yyDollar[1].selStmtUnion(), Distinct: yyDollar[2].booleanUnion(), Right: yyDollar[3].selStmtUnion()} } @@ -9477,7 +9434,7 @@ yydefault: case 73: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:867 +//line sql.y:869 { yyLOCAL = yyDollar[1].selStmtUnion() } @@ -9485,7 +9442,7 @@ yydefault: case 74: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:871 +//line sql.y:873 { setLockInSelect(yyDollar[1].selStmtUnion(), yyDollar[2].lockUnion()) yyLOCAL = yyDollar[1].selStmtUnion() @@ -9494,7 +9451,7 @@ yydefault: case 75: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:876 +//line sql.y:878 { yyLOCAL = yyDollar[1].selStmtUnion() } @@ -9502,7 +9459,7 @@ yydefault: case 76: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:880 +//line sql.y:882 { yyLOCAL = yyDollar[1].selStmtUnion() } @@ -9510,7 +9467,7 @@ yydefault: case 77: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:886 +//line sql.y:888 { yyLOCAL = yyDollar[2].selStmtUnion() } @@ -9518,7 +9475,7 @@ yydefault: case 78: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:890 +//line sql.y:892 { yyDollar[1].selStmtUnion().SetInto(yyDollar[2].selectIntoUnion()) yyLOCAL = yyDollar[1].selStmtUnion() @@ -9527,7 +9484,7 @@ yydefault: case 79: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:895 +//line sql.y:897 { yyDollar[1].selStmtUnion().SetInto(yyDollar[2].selectIntoUnion()) yyDollar[1].selStmtUnion().SetLock(yyDollar[3].lockUnion()) @@ -9537,7 +9494,7 @@ yydefault: case 80: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:901 +//line sql.y:903 { yyDollar[1].selStmtUnion().SetInto(yyDollar[3].selectIntoUnion()) yyDollar[1].selStmtUnion().SetLock(yyDollar[2].lockUnion()) @@ -9547,7 +9504,7 @@ yydefault: case 81: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:907 +//line sql.y:909 { yyDollar[1].selStmtUnion().SetInto(yyDollar[2].selectIntoUnion()) yyLOCAL = yyDollar[1].selStmtUnion() @@ -9556,7 +9513,7 @@ yydefault: case 82: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:914 +//line sql.y:916 { yyLOCAL = &Stream{Comments: Comments(yyDollar[2].strs).Parsed(), SelectExpr: yyDollar[3].selectExprUnion(), Table: yyDollar[5].tableName} } @@ -9564,7 +9521,7 @@ yydefault: case 83: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:920 +//line sql.y:922 { yyLOCAL = &VStream{Comments: Comments(yyDollar[2].strs).Parsed(), SelectExpr: yyDollar[3].selectExprUnion(), Table: yyDollar[5].tableName, Where: NewWhere(WhereClause, yyDollar[6].exprUnion()), Limit: yyDollar[7].limitUnion()} } @@ -9572,7 +9529,7 @@ yydefault: case 84: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:928 +//line sql.y:930 { yyLOCAL = NewSelect(Comments(yyDollar[2].strs), yyDollar[4].selectExprsUnion() /*SelectExprs*/, yyDollar[3].strs /*options*/, yyDollar[5].selectIntoUnion() /*into*/, yyDollar[6].tableExprsUnion() /*from*/, NewWhere(WhereClause, yyDollar[7].exprUnion()), GroupBy(yyDollar[8].exprsUnion()), NewWhere(HavingClause, yyDollar[9].exprUnion()), yyDollar[10].namedWindowsUnion()) } @@ -9580,7 +9537,7 @@ yydefault: case 85: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL SelectStatement -//line sql.y:932 +//line sql.y:934 { yyLOCAL = NewSelect(Comments(yyDollar[2].strs), yyDollar[4].selectExprsUnion() /*SelectExprs*/, yyDollar[3].strs /*options*/, nil, yyDollar[5].tableExprsUnion() /*from*/, NewWhere(WhereClause, yyDollar[6].exprUnion()), GroupBy(yyDollar[7].exprsUnion()), NewWhere(HavingClause, yyDollar[8].exprUnion()), yyDollar[9].namedWindowsUnion()) } @@ -9588,7 +9545,7 @@ yydefault: case 86: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:938 +//line sql.y:940 { // insert_data returns a *Insert pre-filled with Columns & Values ins := yyDollar[6].insUnion() @@ -9604,7 +9561,7 @@ yydefault: case 87: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:950 +//line sql.y:952 { cols := make(Columns, 0, len(yyDollar[7].updateExprsUnion())) vals := make(ValTuple, 0, len(yyDollar[8].updateExprsUnion())) @@ -9618,7 +9575,7 @@ yydefault: case 88: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL InsertAction -//line sql.y:962 +//line sql.y:964 { yyLOCAL = InsertAct } @@ -9626,7 +9583,7 @@ yydefault: case 89: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL InsertAction -//line sql.y:966 +//line sql.y:968 { yyLOCAL = ReplaceAct } @@ -9634,7 +9591,7 @@ yydefault: case 90: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Statement -//line sql.y:972 +//line sql.y:974 { yyLOCAL = &Update{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), TableExprs: yyDollar[5].tableExprsUnion(), Exprs: yyDollar[7].updateExprsUnion(), Where: NewWhere(WhereClause, yyDollar[8].exprUnion()), OrderBy: yyDollar[9].orderByUnion(), Limit: yyDollar[10].limitUnion()} } @@ -9642,7 +9599,7 @@ yydefault: case 91: yyDollar = yyS[yypt-11 : yypt+1] var yyLOCAL Statement -//line sql.y:978 +//line sql.y:980 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), TableExprs: TableExprs{&AliasedTableExpr{Expr: yyDollar[6].tableName, As: yyDollar[7].identifierCS}}, Partitions: yyDollar[8].partitionsUnion(), Where: NewWhere(WhereClause, yyDollar[9].exprUnion()), OrderBy: yyDollar[10].orderByUnion(), Limit: yyDollar[11].limitUnion()} } @@ -9650,7 +9607,7 @@ yydefault: case 92: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Statement -//line sql.y:982 +//line sql.y:984 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), Targets: yyDollar[6].tableNamesUnion(), TableExprs: yyDollar[8].tableExprsUnion(), Where: NewWhere(WhereClause, yyDollar[9].exprUnion())} } @@ -9658,7 +9615,7 @@ yydefault: case 93: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:986 +//line sql.y:988 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), Targets: yyDollar[5].tableNamesUnion(), TableExprs: yyDollar[7].tableExprsUnion(), Where: NewWhere(WhereClause, yyDollar[8].exprUnion())} } @@ -9666,32 +9623,32 @@ yydefault: case 94: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:990 +//line sql.y:992 { yyLOCAL = &Delete{With: yyDollar[1].withUnion(), Comments: Comments(yyDollar[3].strs).Parsed(), Ignore: yyDollar[4].ignoreUnion(), Targets: yyDollar[5].tableNamesUnion(), TableExprs: yyDollar[7].tableExprsUnion(), Where: NewWhere(WhereClause, yyDollar[8].exprUnion())} } yyVAL.union = yyLOCAL case 95: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:995 +//line sql.y:997 { } case 96: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:996 +//line sql.y:998 { } case 97: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableNames -//line sql.y:1000 +//line sql.y:1002 { yyLOCAL = TableNames{yyDollar[1].tableName.ToViewName()} } yyVAL.union = yyLOCAL case 98: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1004 +//line sql.y:1006 { yySLICE := (*TableNames)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableName.ToViewName()) @@ -9699,14 +9656,14 @@ yydefault: case 99: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableNames -//line sql.y:1010 +//line sql.y:1012 { yyLOCAL = TableNames{yyDollar[1].tableName} } yyVAL.union = yyLOCAL case 100: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1014 +//line sql.y:1016 { yySLICE := (*TableNames)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableName) @@ -9714,14 +9671,14 @@ yydefault: case 101: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableNames -//line sql.y:1020 +//line sql.y:1022 { yyLOCAL = TableNames{yyDollar[1].tableName} } yyVAL.union = yyLOCAL case 102: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1024 +//line sql.y:1026 { yySLICE := (*TableNames)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableName) @@ -9729,7 +9686,7 @@ yydefault: case 103: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Partitions -//line sql.y:1029 +//line sql.y:1031 { yyLOCAL = nil } @@ -9737,7 +9694,7 @@ yydefault: case 104: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Partitions -//line sql.y:1033 +//line sql.y:1035 { yyLOCAL = yyDollar[3].partitionsUnion() } @@ -9745,7 +9702,7 @@ yydefault: case 105: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:1039 +//line sql.y:1041 { yyLOCAL = NewSetStatement(Comments(yyDollar[2].strs).Parsed(), yyDollar[3].setExprsUnion()) } @@ -9753,14 +9710,14 @@ yydefault: case 106: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SetExprs -//line sql.y:1045 +//line sql.y:1047 { yyLOCAL = SetExprs{yyDollar[1].setExprUnion()} } yyVAL.union = yyLOCAL case 107: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1049 +//line sql.y:1051 { yySLICE := (*SetExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].setExprUnion()) @@ -9768,7 +9725,7 @@ yydefault: case 108: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1055 +//line sql.y:1057 { yyLOCAL = &SetExpr{Var: yyDollar[1].variableUnion(), Expr: NewStrLiteral("on")} } @@ -9776,7 +9733,7 @@ yydefault: case 109: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1059 +//line sql.y:1061 { yyLOCAL = &SetExpr{Var: yyDollar[1].variableUnion(), Expr: NewStrLiteral("off")} } @@ -9784,7 +9741,7 @@ yydefault: case 110: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1063 +//line sql.y:1065 { yyLOCAL = &SetExpr{Var: yyDollar[1].variableUnion(), Expr: yyDollar[3].exprUnion()} } @@ -9792,7 +9749,7 @@ yydefault: case 111: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1067 +//line sql.y:1069 { yyLOCAL = &SetExpr{Var: NewSetVariable(string(yyDollar[1].str), SessionScope), Expr: yyDollar[2].exprUnion()} } @@ -9800,7 +9757,7 @@ yydefault: case 112: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:1073 +//line sql.y:1075 { yyLOCAL = NewSetVariable(string(yyDollar[1].str), SessionScope) } @@ -9808,7 +9765,7 @@ yydefault: case 113: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Variable -//line sql.y:1077 +//line sql.y:1079 { yyLOCAL = yyDollar[1].variableUnion() } @@ -9816,7 +9773,7 @@ yydefault: case 114: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Variable -//line sql.y:1081 +//line sql.y:1083 { yyLOCAL = NewSetVariable(string(yyDollar[2].str), yyDollar[1].scopeUnion()) } @@ -9824,7 +9781,7 @@ yydefault: case 115: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:1087 +//line sql.y:1089 { yyLOCAL = NewSetStatement(Comments(yyDollar[2].strs).Parsed(), UpdateSetExprsScope(yyDollar[5].setExprsUnion(), yyDollar[3].scopeUnion())) } @@ -9832,7 +9789,7 @@ yydefault: case 116: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:1091 +//line sql.y:1093 { yyLOCAL = NewSetStatement(Comments(yyDollar[2].strs).Parsed(), yyDollar[4].setExprsUnion()) } @@ -9840,14 +9797,14 @@ yydefault: case 117: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SetExprs -//line sql.y:1097 +//line sql.y:1099 { yyLOCAL = SetExprs{yyDollar[1].setExprUnion()} } yyVAL.union = yyLOCAL case 118: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1101 +//line sql.y:1103 { yySLICE := (*SetExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].setExprUnion()) @@ -9855,7 +9812,7 @@ yydefault: case 119: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1107 +//line sql.y:1109 { yyLOCAL = &SetExpr{Var: NewSetVariable(TransactionIsolationStr, NextTxScope), Expr: NewStrLiteral(yyDollar[3].str)} } @@ -9863,7 +9820,7 @@ yydefault: case 120: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1111 +//line sql.y:1113 { yyLOCAL = &SetExpr{Var: NewSetVariable(TransactionReadOnlyStr, NextTxScope), Expr: NewStrLiteral("off")} } @@ -9871,39 +9828,39 @@ yydefault: case 121: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SetExpr -//line sql.y:1115 +//line sql.y:1117 { yyLOCAL = &SetExpr{Var: NewSetVariable(TransactionReadOnlyStr, NextTxScope), Expr: NewStrLiteral("on")} } yyVAL.union = yyLOCAL case 122: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1121 +//line sql.y:1123 { yyVAL.str = RepeatableReadStr } case 123: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1125 +//line sql.y:1127 { yyVAL.str = ReadCommittedStr } case 124: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1129 +//line sql.y:1131 { yyVAL.str = ReadUncommittedStr } case 125: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1133 +//line sql.y:1135 { yyVAL.str = SerializableStr } case 126: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Scope -//line sql.y:1139 +//line sql.y:1141 { yyLOCAL = SessionScope } @@ -9911,7 +9868,7 @@ yydefault: case 127: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Scope -//line sql.y:1143 +//line sql.y:1145 { yyLOCAL = SessionScope } @@ -9919,7 +9876,7 @@ yydefault: case 128: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Scope -//line sql.y:1147 +//line sql.y:1149 { yyLOCAL = GlobalScope } @@ -9927,7 +9884,7 @@ yydefault: case 129: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:1153 +//line sql.y:1155 { yyDollar[1].createTableUnion().TableSpec = yyDollar[2].tableSpecUnion() yyDollar[1].createTableUnion().FullyParsed = true @@ -9937,7 +9894,7 @@ yydefault: case 130: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:1159 +//line sql.y:1161 { // Create table [name] like [name] yyDollar[1].createTableUnion().OptLike = yyDollar[2].optLikeUnion() @@ -9948,7 +9905,7 @@ yydefault: case 131: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:1166 +//line sql.y:1168 { yyDollar[1].createTableUnion().Select = yyDollar[2].selStmtUnion() yyLOCAL = yyDollar[1].createTableUnion() @@ -9957,7 +9914,7 @@ yydefault: case 132: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:1171 +//line sql.y:1173 { yyDollar[1].createTableUnion().Select = yyDollar[3].selStmtUnion() yyLOCAL = yyDollar[1].createTableUnion() @@ -9966,7 +9923,7 @@ yydefault: case 133: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:1176 +//line sql.y:1178 { indexDef := yyDollar[1].alterTableUnion().AlterOptions[0].(*AddIndexDefinition).IndexDefinition indexDef.Columns = yyDollar[3].indexColumnsUnion() @@ -9979,7 +9936,7 @@ yydefault: case 134: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Statement -//line sql.y:1185 +//line sql.y:1187 { yyLOCAL = &CreateView{ViewName: yyDollar[8].tableName.ToViewName(), Comments: Comments(yyDollar[2].strs).Parsed(), IsReplace: yyDollar[3].booleanUnion(), Algorithm: yyDollar[4].str, Definer: yyDollar[5].definerUnion(), Security: yyDollar[6].str, Columns: yyDollar[9].columnsUnion(), Select: yyDollar[11].selStmtUnion(), CheckOption: yyDollar[12].str} } @@ -9987,7 +9944,7 @@ yydefault: case 135: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:1189 +//line sql.y:1191 { yyDollar[1].createDatabaseUnion().FullyParsed = true yyDollar[1].createDatabaseUnion().CreateOptions = yyDollar[2].databaseOptionsUnion() @@ -9997,7 +9954,7 @@ yydefault: case 136: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:1196 +//line sql.y:1198 { yyLOCAL = false } @@ -10005,33 +9962,33 @@ yydefault: case 137: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:1200 +//line sql.y:1202 { yyLOCAL = true } yyVAL.union = yyLOCAL case 138: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1205 +//line sql.y:1207 { yyVAL.identifierCI = NewIdentifierCI("") } case 139: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1209 +//line sql.y:1211 { yyVAL.identifierCI = yyDollar[2].identifierCI } case 140: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1215 +//line sql.y:1217 { yyVAL.identifierCI = yyDollar[1].identifierCI } case 141: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []VindexParam -//line sql.y:1220 +//line sql.y:1222 { var v []VindexParam yyLOCAL = v @@ -10040,7 +9997,7 @@ yydefault: case 142: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []VindexParam -//line sql.y:1225 +//line sql.y:1227 { yyLOCAL = yyDollar[2].vindexParamsUnion() } @@ -10048,7 +10005,7 @@ yydefault: case 143: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []VindexParam -//line sql.y:1231 +//line sql.y:1233 { yyLOCAL = make([]VindexParam, 0, 4) yyLOCAL = append(yyLOCAL, yyDollar[1].vindexParam) @@ -10056,21 +10013,21 @@ yydefault: yyVAL.union = yyLOCAL case 144: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1236 +//line sql.y:1238 { yySLICE := (*[]VindexParam)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].vindexParam) } case 145: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1242 +//line sql.y:1244 { yyVAL.vindexParam = VindexParam{Key: yyDollar[1].identifierCI, Val: yyDollar[3].str} } case 146: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*JSONObjectParam -//line sql.y:1247 +//line sql.y:1249 { yyLOCAL = nil } @@ -10078,7 +10035,7 @@ yydefault: case 147: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*JSONObjectParam -//line sql.y:1251 +//line sql.y:1253 { yyLOCAL = yyDollar[1].jsonObjectParamsUnion() } @@ -10086,28 +10043,28 @@ yydefault: case 148: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*JSONObjectParam -//line sql.y:1257 +//line sql.y:1259 { yyLOCAL = []*JSONObjectParam{yyDollar[1].jsonObjectParam} } yyVAL.union = yyLOCAL case 149: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1261 +//line sql.y:1263 { yySLICE := (*[]*JSONObjectParam)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].jsonObjectParam) } case 150: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1267 +//line sql.y:1269 { yyVAL.jsonObjectParam = &JSONObjectParam{Key: yyDollar[1].exprUnion(), Value: yyDollar[3].exprUnion()} } case 151: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *CreateTable -//line sql.y:1273 +//line sql.y:1275 { yyLOCAL = &CreateTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[6].tableName, IfNotExists: yyDollar[5].booleanUnion(), Temp: yyDollar[3].booleanUnion()} setDDL(yylex, yyLOCAL) @@ -10116,7 +10073,7 @@ yydefault: case 152: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1280 +//line sql.y:1282 { yyLOCAL = &AlterTable{Comments: Comments(yyDollar[2].strs).Parsed(), Table: yyDollar[4].tableName} setDDL(yylex, yyLOCAL) @@ -10125,7 +10082,7 @@ yydefault: case 153: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1287 +//line sql.y:1289 { yyLOCAL = &AlterTable{Table: yyDollar[7].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[4].identifierCI, Type: string(yyDollar[3].str)}, Options: yyDollar[5].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) @@ -10134,7 +10091,7 @@ yydefault: case 154: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1292 +//line sql.y:1294 { yyLOCAL = &AlterTable{Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].identifierCI, Type: string(yyDollar[3].str) + " " + string(yyDollar[4].str), Fulltext: true}, Options: yyDollar[6].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) @@ -10143,7 +10100,7 @@ yydefault: case 155: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1297 +//line sql.y:1299 { yyLOCAL = &AlterTable{Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].identifierCI, Type: string(yyDollar[3].str) + " " + string(yyDollar[4].str), Spatial: true}, Options: yyDollar[6].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) @@ -10152,7 +10109,7 @@ yydefault: case 156: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *AlterTable -//line sql.y:1302 +//line sql.y:1304 { yyLOCAL = &AlterTable{Table: yyDollar[8].tableName, AlterOptions: []AlterOption{&AddIndexDefinition{IndexDefinition: &IndexDefinition{Info: &IndexInfo{Name: yyDollar[5].identifierCI, Type: string(yyDollar[3].str) + " " + string(yyDollar[4].str), Unique: true}, Options: yyDollar[6].indexOptionsUnion()}}}} setDDL(yylex, yyLOCAL) @@ -10161,7 +10118,7 @@ yydefault: case 157: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *CreateDatabase -//line sql.y:1309 +//line sql.y:1311 { yyLOCAL = &CreateDatabase{Comments: Comments(yyDollar[4].strs).Parsed(), DBName: yyDollar[6].identifierCS, IfNotExists: yyDollar[5].booleanUnion()} setDDL(yylex, yyLOCAL) @@ -10170,7 +10127,7 @@ yydefault: case 158: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *AlterDatabase -//line sql.y:1316 +//line sql.y:1318 { yyLOCAL = &AlterDatabase{} setDDL(yylex, yyLOCAL) @@ -10179,7 +10136,7 @@ yydefault: case 161: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *TableSpec -//line sql.y:1327 +//line sql.y:1329 { yyLOCAL = yyDollar[2].tableSpecUnion() yyLOCAL.Options = yyDollar[4].tableOptionsUnion() @@ -10189,7 +10146,7 @@ yydefault: case 162: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1334 +//line sql.y:1336 { yyLOCAL = nil } @@ -10197,7 +10154,7 @@ yydefault: case 163: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1338 +//line sql.y:1340 { yyLOCAL = yyDollar[1].databaseOptionsUnion() } @@ -10205,7 +10162,7 @@ yydefault: case 164: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1344 +//line sql.y:1346 { yyLOCAL = []DatabaseOption{yyDollar[1].databaseOption} } @@ -10213,7 +10170,7 @@ yydefault: case 165: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1348 +//line sql.y:1350 { yyLOCAL = []DatabaseOption{yyDollar[1].databaseOption} } @@ -10221,28 +10178,28 @@ yydefault: case 166: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []DatabaseOption -//line sql.y:1352 +//line sql.y:1354 { yyLOCAL = []DatabaseOption{yyDollar[1].databaseOption} } yyVAL.union = yyLOCAL case 167: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1356 +//line sql.y:1358 { yySLICE := (*[]DatabaseOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].databaseOption) } case 168: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1360 +//line sql.y:1362 { yySLICE := (*[]DatabaseOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].databaseOption) } case 169: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1364 +//line sql.y:1366 { yySLICE := (*[]DatabaseOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].databaseOption) @@ -10250,7 +10207,7 @@ yydefault: case 170: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:1370 +//line sql.y:1372 { yyLOCAL = false } @@ -10258,51 +10215,51 @@ yydefault: case 171: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:1374 +//line sql.y:1376 { yyLOCAL = true } yyVAL.union = yyLOCAL case 172: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1380 +//line sql.y:1382 { yyVAL.databaseOption = DatabaseOption{Type: CharacterSetType, Value: string(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } case 173: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1384 +//line sql.y:1386 { yyVAL.databaseOption = DatabaseOption{Type: CharacterSetType, Value: encodeSQLString(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } case 174: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1390 +//line sql.y:1392 { yyVAL.databaseOption = DatabaseOption{Type: CollateType, Value: string(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } case 175: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1394 +//line sql.y:1396 { yyVAL.databaseOption = DatabaseOption{Type: CollateType, Value: encodeSQLString(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } case 176: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1400 +//line sql.y:1402 { yyVAL.databaseOption = DatabaseOption{Type: EncryptionType, Value: string(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } case 177: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1404 +//line sql.y:1406 { yyVAL.databaseOption = DatabaseOption{Type: EncryptionType, Value: encodeSQLString(yyDollar[4].str), IsDefault: yyDollar[1].booleanUnion()} } case 178: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *OptLike -//line sql.y:1410 +//line sql.y:1412 { yyLOCAL = &OptLike{LikeTable: yyDollar[2].tableName} } @@ -10310,7 +10267,7 @@ yydefault: case 179: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *OptLike -//line sql.y:1414 +//line sql.y:1416 { yyLOCAL = &OptLike{LikeTable: yyDollar[3].tableName} } @@ -10318,14 +10275,14 @@ yydefault: case 180: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColumnDefinition -//line sql.y:1420 +//line sql.y:1422 { yyLOCAL = []*ColumnDefinition{yyDollar[1].columnDefinitionUnion()} } yyVAL.union = yyLOCAL case 181: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1424 +//line sql.y:1426 { yySLICE := (*[]*ColumnDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].columnDefinitionUnion()) @@ -10333,7 +10290,7 @@ yydefault: case 182: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *TableSpec -//line sql.y:1430 +//line sql.y:1432 { yyLOCAL = &TableSpec{} yyLOCAL.AddColumn(yyDollar[1].columnDefinitionUnion()) @@ -10342,7 +10299,7 @@ yydefault: case 183: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *TableSpec -//line sql.y:1435 +//line sql.y:1437 { yyLOCAL = &TableSpec{} yyLOCAL.AddConstraint(yyDollar[1].constraintDefinitionUnion()) @@ -10350,39 +10307,39 @@ yydefault: yyVAL.union = yyLOCAL case 184: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1440 +//line sql.y:1442 { yyVAL.tableSpecUnion().AddColumn(yyDollar[3].columnDefinitionUnion()) } case 185: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1444 +//line sql.y:1446 { yyVAL.tableSpecUnion().AddColumn(yyDollar[3].columnDefinitionUnion()) yyVAL.tableSpecUnion().AddConstraint(yyDollar[4].constraintDefinitionUnion()) } case 186: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1449 +//line sql.y:1451 { yyVAL.tableSpecUnion().AddIndex(yyDollar[3].indexDefinitionUnion()) } case 187: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1453 +//line sql.y:1455 { yyVAL.tableSpecUnion().AddConstraint(yyDollar[3].constraintDefinitionUnion()) } case 188: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1457 +//line sql.y:1459 { yyVAL.tableSpecUnion().AddConstraint(yyDollar[3].constraintDefinitionUnion()) } case 189: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ColumnDefinition -//line sql.y:1467 +//line sql.y:1469 { yyDollar[2].columnType.Options = yyDollar[4].columnTypeOptionsUnion() if yyDollar[2].columnType.Options.Collate == "" { @@ -10395,7 +10352,7 @@ yydefault: case 190: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL *ColumnDefinition -//line sql.y:1476 +//line sql.y:1478 { yyDollar[2].columnType.Options = yyDollar[9].columnTypeOptionsUnion() yyDollar[2].columnType.Options.As = yyDollar[7].exprUnion() @@ -10406,20 +10363,20 @@ yydefault: yyVAL.union = yyLOCAL case 191: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1485 +//line sql.y:1487 { yyVAL.str = "" } case 192: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1489 +//line sql.y:1491 { yyVAL.str = "" } case 193: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1498 +//line sql.y:1500 { yyLOCAL = &ColumnTypeOptions{Null: nil, Default: nil, OnUpdate: nil, Autoincrement: false, KeyOpt: ColKeyNone, Comment: nil, As: nil, Invisible: nil, Format: UnspecifiedFormat, EngineAttribute: nil, SecondaryEngineAttribute: nil} } @@ -10427,7 +10384,7 @@ yydefault: case 194: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1502 +//line sql.y:1504 { val := true yyDollar[1].columnTypeOptionsUnion().Null = &val @@ -10437,7 +10394,7 @@ yydefault: case 195: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1508 +//line sql.y:1510 { val := false yyDollar[1].columnTypeOptionsUnion().Null = &val @@ -10447,7 +10404,7 @@ yydefault: case 196: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1514 +//line sql.y:1516 { yyDollar[1].columnTypeOptionsUnion().Default = yyDollar[4].exprUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -10456,7 +10413,7 @@ yydefault: case 197: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1519 +//line sql.y:1521 { yyDollar[1].columnTypeOptionsUnion().Default = yyDollar[3].exprUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -10465,7 +10422,7 @@ yydefault: case 198: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1524 +//line sql.y:1526 { yyDollar[1].columnTypeOptionsUnion().OnUpdate = yyDollar[4].exprUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -10474,7 +10431,7 @@ yydefault: case 199: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1529 +//line sql.y:1531 { yyDollar[1].columnTypeOptionsUnion().Autoincrement = true yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -10483,7 +10440,7 @@ yydefault: case 200: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1534 +//line sql.y:1536 { yyDollar[1].columnTypeOptionsUnion().Comment = NewStrLiteral(yyDollar[3].str) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -10492,7 +10449,7 @@ yydefault: case 201: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1539 +//line sql.y:1541 { yyDollar[1].columnTypeOptionsUnion().KeyOpt = yyDollar[2].colKeyOptUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -10500,14 +10457,14 @@ yydefault: yyVAL.union = yyLOCAL case 202: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1544 +//line sql.y:1546 { yyDollar[1].columnTypeOptionsUnion().Collate = encodeSQLString(yyDollar[3].str) } case 203: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1548 +//line sql.y:1550 { yyDollar[1].columnTypeOptionsUnion().Collate = string(yyDollar[3].identifierCI.String()) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -10515,14 +10472,14 @@ yydefault: yyVAL.union = yyLOCAL case 204: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1553 +//line sql.y:1555 { yyDollar[1].columnTypeOptionsUnion().Format = yyDollar[3].columnFormatUnion() } case 205: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1557 +//line sql.y:1559 { yyDollar[1].columnTypeOptionsUnion().SRID = NewIntLiteral(yyDollar[3].str) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -10531,7 +10488,7 @@ yydefault: case 206: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1562 +//line sql.y:1564 { val := false yyDollar[1].columnTypeOptionsUnion().Invisible = &val @@ -10541,7 +10498,7 @@ yydefault: case 207: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1568 +//line sql.y:1570 { val := true yyDollar[1].columnTypeOptionsUnion().Invisible = &val @@ -10550,20 +10507,20 @@ yydefault: yyVAL.union = yyLOCAL case 208: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1574 +//line sql.y:1576 { yyDollar[1].columnTypeOptionsUnion().EngineAttribute = NewStrLiteral(yyDollar[4].str) } case 209: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1578 +//line sql.y:1580 { yyDollar[1].columnTypeOptionsUnion().SecondaryEngineAttribute = NewStrLiteral(yyDollar[4].str) } case 210: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnFormat -//line sql.y:1584 +//line sql.y:1586 { yyLOCAL = FixedFormat } @@ -10571,7 +10528,7 @@ yydefault: case 211: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnFormat -//line sql.y:1588 +//line sql.y:1590 { yyLOCAL = DynamicFormat } @@ -10579,7 +10536,7 @@ yydefault: case 212: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnFormat -//line sql.y:1592 +//line sql.y:1594 { yyLOCAL = DefaultFormat } @@ -10587,7 +10544,7 @@ yydefault: case 213: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnStorage -//line sql.y:1598 +//line sql.y:1600 { yyLOCAL = VirtualStorage } @@ -10595,7 +10552,7 @@ yydefault: case 214: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnStorage -//line sql.y:1602 +//line sql.y:1604 { yyLOCAL = StoredStorage } @@ -10603,7 +10560,7 @@ yydefault: case 215: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1607 +//line sql.y:1609 { yyLOCAL = &ColumnTypeOptions{} } @@ -10611,7 +10568,7 @@ yydefault: case 216: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1611 +//line sql.y:1613 { yyDollar[1].columnTypeOptionsUnion().Storage = yyDollar[2].columnStorageUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -10620,7 +10577,7 @@ yydefault: case 217: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1616 +//line sql.y:1618 { val := true yyDollar[1].columnTypeOptionsUnion().Null = &val @@ -10630,7 +10587,7 @@ yydefault: case 218: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1622 +//line sql.y:1624 { val := false yyDollar[1].columnTypeOptionsUnion().Null = &val @@ -10640,7 +10597,7 @@ yydefault: case 219: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1628 +//line sql.y:1630 { yyDollar[1].columnTypeOptionsUnion().Comment = NewStrLiteral(yyDollar[3].str) yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -10649,7 +10606,7 @@ yydefault: case 220: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1633 +//line sql.y:1635 { yyDollar[1].columnTypeOptionsUnion().KeyOpt = yyDollar[2].colKeyOptUnion() yyLOCAL = yyDollar[1].columnTypeOptionsUnion() @@ -10658,7 +10615,7 @@ yydefault: case 221: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1638 +//line sql.y:1640 { val := false yyDollar[1].columnTypeOptionsUnion().Invisible = &val @@ -10668,7 +10625,7 @@ yydefault: case 222: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColumnTypeOptions -//line sql.y:1644 +//line sql.y:1646 { val := true yyDollar[1].columnTypeOptionsUnion().Invisible = &val @@ -10678,7 +10635,7 @@ yydefault: case 223: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1652 +//line sql.y:1654 { yyLOCAL = yyDollar[1].exprUnion() } @@ -10686,7 +10643,7 @@ yydefault: case 225: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1659 +//line sql.y:1661 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("current_timestamp"), Fsp: yyDollar[2].exprUnion()} } @@ -10694,7 +10651,7 @@ yydefault: case 226: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1663 +//line sql.y:1665 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("localtime"), Fsp: yyDollar[2].exprUnion()} } @@ -10702,7 +10659,7 @@ yydefault: case 227: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1667 +//line sql.y:1669 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("localtimestamp"), Fsp: yyDollar[2].exprUnion()} } @@ -10710,7 +10667,7 @@ yydefault: case 228: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1671 +//line sql.y:1673 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("utc_timestamp"), Fsp: yyDollar[2].exprUnion()} } @@ -10718,7 +10675,7 @@ yydefault: case 229: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1675 +//line sql.y:1677 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("now"), Fsp: yyDollar[2].exprUnion()} } @@ -10726,7 +10683,7 @@ yydefault: case 232: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1685 +//line sql.y:1687 { yyLOCAL = &NullVal{} } @@ -10734,7 +10691,7 @@ yydefault: case 234: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1692 +//line sql.y:1694 { yyLOCAL = yyDollar[2].exprUnion() } @@ -10742,7 +10699,7 @@ yydefault: case 235: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1696 +//line sql.y:1698 { yyLOCAL = &UnaryExpr{Operator: UMinusOp, Expr: yyDollar[2].exprUnion()} } @@ -10750,7 +10707,7 @@ yydefault: case 236: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1702 +//line sql.y:1704 { yyLOCAL = yyDollar[1].exprUnion() } @@ -10758,7 +10715,7 @@ yydefault: case 237: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1706 +//line sql.y:1708 { yyLOCAL = yyDollar[1].exprUnion() } @@ -10766,7 +10723,7 @@ yydefault: case 238: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1710 +//line sql.y:1712 { yyLOCAL = yyDollar[1].boolValUnion() } @@ -10774,7 +10731,7 @@ yydefault: case 239: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1714 +//line sql.y:1716 { yyLOCAL = NewHexLiteral(yyDollar[1].str) } @@ -10782,7 +10739,7 @@ yydefault: case 240: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1718 +//line sql.y:1720 { yyLOCAL = NewHexNumLiteral(yyDollar[1].str) } @@ -10790,7 +10747,7 @@ yydefault: case 241: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1722 +//line sql.y:1724 { yyLOCAL = NewBitLiteral(yyDollar[1].str[2:]) } @@ -10798,7 +10755,7 @@ yydefault: case 242: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1726 +//line sql.y:1728 { yyLOCAL = NewBitLiteral(yyDollar[1].str) } @@ -10806,7 +10763,7 @@ yydefault: case 243: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1730 +//line sql.y:1732 { yyLOCAL = NewArgument(yyDollar[1].str[1:]) bindVariable(yylex, yyDollar[1].str[1:]) @@ -10815,7 +10772,7 @@ yydefault: case 244: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1735 +//line sql.y:1737 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewBitLiteral(yyDollar[2].str)} } @@ -10823,7 +10780,7 @@ yydefault: case 245: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1739 +//line sql.y:1741 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewHexNumLiteral(yyDollar[2].str)} } @@ -10831,7 +10788,7 @@ yydefault: case 246: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1743 +//line sql.y:1745 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewBitLiteral(yyDollar[2].str[2:])} } @@ -10839,7 +10796,7 @@ yydefault: case 247: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1747 +//line sql.y:1749 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewHexLiteral(yyDollar[2].str)} } @@ -10847,7 +10804,7 @@ yydefault: case 248: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1751 +//line sql.y:1753 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: yyDollar[2].exprUnion()} } @@ -10855,7 +10812,7 @@ yydefault: case 249: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1755 +//line sql.y:1757 { bindVariable(yylex, yyDollar[2].str[1:]) yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewArgument(yyDollar[2].str[1:])} @@ -10864,7 +10821,7 @@ yydefault: case 250: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1760 +//line sql.y:1762 { yyLOCAL = NewDateLiteral(yyDollar[2].str) } @@ -10872,7 +10829,7 @@ yydefault: case 251: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1764 +//line sql.y:1766 { yyLOCAL = NewTimeLiteral(yyDollar[2].str) } @@ -10880,267 +10837,267 @@ yydefault: case 252: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1768 +//line sql.y:1770 { yyLOCAL = NewTimestampLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL case 253: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1774 +//line sql.y:1776 { yyVAL.str = Armscii8Str } case 254: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1778 +//line sql.y:1780 { yyVAL.str = ASCIIStr } case 255: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1782 +//line sql.y:1784 { yyVAL.str = Big5Str } case 256: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1786 +//line sql.y:1788 { yyVAL.str = UBinaryStr } case 257: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1790 +//line sql.y:1792 { yyVAL.str = Cp1250Str } case 258: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1794 +//line sql.y:1796 { yyVAL.str = Cp1251Str } case 259: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1798 +//line sql.y:1800 { yyVAL.str = Cp1256Str } case 260: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1802 +//line sql.y:1804 { yyVAL.str = Cp1257Str } case 261: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1806 +//line sql.y:1808 { yyVAL.str = Cp850Str } case 262: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1810 +//line sql.y:1812 { yyVAL.str = Cp852Str } case 263: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1814 +//line sql.y:1816 { yyVAL.str = Cp866Str } case 264: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1818 +//line sql.y:1820 { yyVAL.str = Cp932Str } case 265: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1822 +//line sql.y:1824 { yyVAL.str = Dec8Str } case 266: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1826 +//line sql.y:1828 { yyVAL.str = EucjpmsStr } case 267: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1830 +//line sql.y:1832 { yyVAL.str = EuckrStr } case 268: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1834 +//line sql.y:1836 { yyVAL.str = Gb18030Str } case 269: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1838 +//line sql.y:1840 { yyVAL.str = Gb2312Str } case 270: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1842 +//line sql.y:1844 { yyVAL.str = GbkStr } case 271: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1846 +//line sql.y:1848 { yyVAL.str = Geostd8Str } case 272: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1850 +//line sql.y:1852 { yyVAL.str = GreekStr } case 273: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1854 +//line sql.y:1856 { yyVAL.str = HebrewStr } case 274: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1858 +//line sql.y:1860 { yyVAL.str = Hp8Str } case 275: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1862 +//line sql.y:1864 { yyVAL.str = Keybcs2Str } case 276: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1866 +//line sql.y:1868 { yyVAL.str = Koi8rStr } case 277: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1870 +//line sql.y:1872 { yyVAL.str = Koi8uStr } case 278: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1874 +//line sql.y:1876 { yyVAL.str = Latin1Str } case 279: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1878 +//line sql.y:1880 { yyVAL.str = Latin2Str } case 280: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1882 +//line sql.y:1884 { yyVAL.str = Latin5Str } case 281: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1886 +//line sql.y:1888 { yyVAL.str = Latin7Str } case 282: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1890 +//line sql.y:1892 { yyVAL.str = MacceStr } case 283: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1894 +//line sql.y:1896 { yyVAL.str = MacromanStr } case 284: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1898 +//line sql.y:1900 { yyVAL.str = SjisStr } case 285: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1902 +//line sql.y:1904 { yyVAL.str = Swe7Str } case 286: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1906 +//line sql.y:1908 { yyVAL.str = Tis620Str } case 287: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1910 +//line sql.y:1912 { yyVAL.str = Ucs2Str } case 288: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1914 +//line sql.y:1916 { yyVAL.str = UjisStr } case 289: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1918 +//line sql.y:1920 { yyVAL.str = Utf16Str } case 290: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1922 +//line sql.y:1924 { yyVAL.str = Utf16leStr } case 291: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1926 +//line sql.y:1928 { yyVAL.str = Utf32Str } case 292: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1930 +//line sql.y:1932 { yyVAL.str = Utf8Str } case 293: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1934 +//line sql.y:1936 { yyVAL.str = Utf8mb4Str } case 294: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1938 +//line sql.y:1940 { yyVAL.str = Utf8Str } case 297: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1948 +//line sql.y:1950 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } @@ -11148,7 +11105,7 @@ yydefault: case 298: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1952 +//line sql.y:1954 { yyLOCAL = NewFloatLiteral(yyDollar[1].str) } @@ -11156,7 +11113,7 @@ yydefault: case 299: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1956 +//line sql.y:1958 { yyLOCAL = NewDecimalLiteral(yyDollar[1].str) } @@ -11164,7 +11121,7 @@ yydefault: case 300: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1962 +//line sql.y:1964 { yyLOCAL = NewStrLiteral(yyDollar[1].str) } @@ -11172,7 +11129,7 @@ yydefault: case 301: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1966 +//line sql.y:1968 { yyLOCAL = &UnaryExpr{Operator: NStringOp, Expr: NewStrLiteral(yyDollar[1].str)} } @@ -11180,7 +11137,7 @@ yydefault: case 302: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:1970 +//line sql.y:1972 { yyLOCAL = &IntroducerExpr{CharacterSet: yyDollar[1].str, Expr: NewStrLiteral(yyDollar[2].str)} } @@ -11188,7 +11145,7 @@ yydefault: case 303: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1976 +//line sql.y:1978 { yyLOCAL = yyDollar[1].exprUnion() } @@ -11196,7 +11153,7 @@ yydefault: case 304: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:1980 +//line sql.y:1982 { yyLOCAL = NewArgument(yyDollar[1].str[1:]) bindVariable(yylex, yyDollar[1].str[1:]) @@ -11205,7 +11162,7 @@ yydefault: case 305: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:1987 +//line sql.y:1989 { yyLOCAL = ColKeyPrimary } @@ -11213,7 +11170,7 @@ yydefault: case 306: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:1991 +//line sql.y:1993 { yyLOCAL = ColKeyUnique } @@ -11221,7 +11178,7 @@ yydefault: case 307: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:1995 +//line sql.y:1997 { yyLOCAL = ColKeyUniqueKey } @@ -11229,14 +11186,14 @@ yydefault: case 308: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColumnKeyOption -//line sql.y:1999 +//line sql.y:2001 { yyLOCAL = ColKey } yyVAL.union = yyLOCAL case 309: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2005 +//line sql.y:2007 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Unsigned = yyDollar[2].booleanUnion() @@ -11244,74 +11201,74 @@ yydefault: } case 313: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2016 +//line sql.y:2018 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Length = yyDollar[2].literalUnion() } case 314: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2021 +//line sql.y:2023 { yyVAL.columnType = yyDollar[1].columnType } case 315: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2027 +//line sql.y:2029 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 316: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2031 +//line sql.y:2033 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 317: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2035 +//line sql.y:2037 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 318: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2039 +//line sql.y:2041 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 319: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2043 +//line sql.y:2045 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 320: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2047 +//line sql.y:2049 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 321: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2051 +//line sql.y:2053 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 322: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2055 +//line sql.y:2057 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 323: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2059 +//line sql.y:2061 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 324: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2065 +//line sql.y:2067 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -11319,7 +11276,7 @@ yydefault: } case 325: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2071 +//line sql.y:2073 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -11327,7 +11284,7 @@ yydefault: } case 326: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2077 +//line sql.y:2079 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -11335,7 +11292,7 @@ yydefault: } case 327: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2083 +//line sql.y:2085 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -11343,7 +11300,7 @@ yydefault: } case 328: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2089 +//line sql.y:2091 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -11351,7 +11308,7 @@ yydefault: } case 329: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2095 +//line sql.y:2097 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -11359,7 +11316,7 @@ yydefault: } case 330: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2101 +//line sql.y:2103 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -11367,43 +11324,43 @@ yydefault: } case 331: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2109 +//line sql.y:2111 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 332: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2113 +//line sql.y:2115 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } case 333: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2117 +//line sql.y:2119 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } case 334: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2121 +//line sql.y:2123 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } case 335: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2125 +//line sql.y:2127 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } case 336: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2131 +//line sql.y:2133 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion(), Charset: yyDollar[3].columnCharset} } case 337: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2135 +//line sql.y:2137 { // CHAR BYTE is an alias for binary. See also: // https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html @@ -11411,153 +11368,153 @@ yydefault: } case 338: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2141 +//line sql.y:2143 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion(), Charset: yyDollar[3].columnCharset} } case 339: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2145 +//line sql.y:2147 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } case 340: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2149 +//line sql.y:2151 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } case 341: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2153 +//line sql.y:2155 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset} } case 342: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2157 +//line sql.y:2159 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset} } case 343: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2161 +//line sql.y:2163 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset} } case 344: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2165 +//line sql.y:2167 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), Charset: yyDollar[2].columnCharset} } case 345: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2169 +//line sql.y:2171 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 346: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2173 +//line sql.y:2175 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 347: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2177 +//line sql.y:2179 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 348: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2181 +//line sql.y:2183 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 349: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2185 +//line sql.y:2187 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 350: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2189 +//line sql.y:2191 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].columnCharset} } case 351: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2194 +//line sql.y:2196 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].columnCharset} } case 352: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2200 +//line sql.y:2202 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 353: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2204 +//line sql.y:2206 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 354: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2208 +//line sql.y:2210 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 355: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2212 +//line sql.y:2214 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 356: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2216 +//line sql.y:2218 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 357: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2220 +//line sql.y:2222 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 358: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2224 +//line sql.y:2226 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 359: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2228 +//line sql.y:2230 { yyVAL.columnType = &ColumnType{Type: string(yyDollar[1].str)} } case 360: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2234 +//line sql.y:2236 { yyVAL.strs = make([]string, 0, 4) yyVAL.strs = append(yyVAL.strs, encodeSQLString(yyDollar[1].str)) } case 361: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2239 +//line sql.y:2241 { yyVAL.strs = append(yyDollar[1].strs, encodeSQLString(yyDollar[3].str)) } case 362: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Literal -//line sql.y:2244 +//line sql.y:2246 { yyLOCAL = nil } @@ -11565,20 +11522,20 @@ yydefault: case 363: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Literal -//line sql.y:2248 +//line sql.y:2250 { yyLOCAL = NewIntLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL case 364: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2253 +//line sql.y:2255 { yyVAL.LengthScaleOption = LengthScaleOption{} } case 365: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2257 +//line sql.y:2259 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntLiteral(yyDollar[2].str), @@ -11587,13 +11544,13 @@ yydefault: } case 366: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2266 +//line sql.y:2268 { yyVAL.LengthScaleOption = yyDollar[1].LengthScaleOption } case 367: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2270 +//line sql.y:2272 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntLiteral(yyDollar[2].str), @@ -11601,13 +11558,13 @@ yydefault: } case 368: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2277 +//line sql.y:2279 { yyVAL.LengthScaleOption = LengthScaleOption{} } case 369: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2281 +//line sql.y:2283 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntLiteral(yyDollar[2].str), @@ -11615,7 +11572,7 @@ yydefault: } case 370: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2287 +//line sql.y:2289 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntLiteral(yyDollar[2].str), @@ -11625,7 +11582,7 @@ yydefault: case 371: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2295 +//line sql.y:2297 { yyLOCAL = false } @@ -11633,7 +11590,7 @@ yydefault: case 372: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2299 +//line sql.y:2301 { yyLOCAL = true } @@ -11641,7 +11598,7 @@ yydefault: case 373: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2303 +//line sql.y:2305 { yyLOCAL = false } @@ -11649,7 +11606,7 @@ yydefault: case 374: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2308 +//line sql.y:2310 { yyLOCAL = false } @@ -11657,66 +11614,66 @@ yydefault: case 375: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2312 +//line sql.y:2314 { yyLOCAL = true } yyVAL.union = yyLOCAL case 376: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2317 +//line sql.y:2319 { yyVAL.columnCharset = ColumnCharset{} } case 377: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2321 +//line sql.y:2323 { yyVAL.columnCharset = ColumnCharset{Name: string(yyDollar[2].identifierCI.String()), Binary: yyDollar[3].booleanUnion()} } case 378: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2325 +//line sql.y:2327 { yyVAL.columnCharset = ColumnCharset{Name: encodeSQLString(yyDollar[2].str), Binary: yyDollar[3].booleanUnion()} } case 379: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2329 +//line sql.y:2331 { yyVAL.columnCharset = ColumnCharset{Name: string(yyDollar[2].str)} } case 380: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2333 +//line sql.y:2335 { // ASCII: Shorthand for CHARACTER SET latin1. yyVAL.columnCharset = ColumnCharset{Name: "latin1", Binary: yyDollar[2].booleanUnion()} } case 381: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2338 +//line sql.y:2340 { // UNICODE: Shorthand for CHARACTER SET ucs2. yyVAL.columnCharset = ColumnCharset{Name: "ucs2", Binary: yyDollar[2].booleanUnion()} } case 382: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2343 +//line sql.y:2345 { // BINARY: Shorthand for default CHARACTER SET but with binary collation yyVAL.columnCharset = ColumnCharset{Name: "", Binary: true} } case 383: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2348 +//line sql.y:2350 { // BINARY ASCII: Shorthand for CHARACTER SET latin1 with binary collation yyVAL.columnCharset = ColumnCharset{Name: "latin1", Binary: true} } case 384: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2353 +//line sql.y:2355 { // BINARY UNICODE: Shorthand for CHARACTER SET ucs2 with binary collation yyVAL.columnCharset = ColumnCharset{Name: "ucs2", Binary: true} @@ -11724,7 +11681,7 @@ yydefault: case 385: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2359 +//line sql.y:2361 { yyLOCAL = false } @@ -11732,33 +11689,33 @@ yydefault: case 386: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2363 +//line sql.y:2365 { yyLOCAL = true } yyVAL.union = yyLOCAL case 387: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2368 +//line sql.y:2370 { yyVAL.str = "" } case 388: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2372 +//line sql.y:2374 { yyVAL.str = string(yyDollar[2].identifierCI.String()) } case 389: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2376 +//line sql.y:2378 { yyVAL.str = encodeSQLString(yyDollar[2].str) } case 390: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *IndexDefinition -//line sql.y:2382 +//line sql.y:2384 { yyLOCAL = &IndexDefinition{Info: yyDollar[1].indexInfoUnion(), Columns: yyDollar[3].indexColumnsUnion(), Options: yyDollar[5].indexOptionsUnion()} } @@ -11766,7 +11723,7 @@ yydefault: case 391: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:2387 +//line sql.y:2389 { yyLOCAL = nil } @@ -11774,7 +11731,7 @@ yydefault: case 392: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:2391 +//line sql.y:2393 { yyLOCAL = yyDollar[1].indexOptionsUnion() } @@ -11782,14 +11739,14 @@ yydefault: case 393: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:2397 +//line sql.y:2399 { yyLOCAL = []*IndexOption{yyDollar[1].indexOptionUnion()} } yyVAL.union = yyLOCAL case 394: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2401 +//line sql.y:2403 { yySLICE := (*[]*IndexOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].indexOptionUnion()) @@ -11797,7 +11754,7 @@ yydefault: case 395: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2407 +//line sql.y:2409 { yyLOCAL = yyDollar[1].indexOptionUnion() } @@ -11805,7 +11762,7 @@ yydefault: case 396: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2411 +//line sql.y:2413 { // should not be string yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} @@ -11814,7 +11771,7 @@ yydefault: case 397: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2416 +//line sql.y:2418 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[2].str)} } @@ -11822,7 +11779,7 @@ yydefault: case 398: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2420 +//line sql.y:2422 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str)} } @@ -11830,7 +11787,7 @@ yydefault: case 399: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2424 +//line sql.y:2426 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str)} } @@ -11838,7 +11795,7 @@ yydefault: case 400: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2428 +//line sql.y:2430 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str) + " " + string(yyDollar[2].str), String: yyDollar[3].identifierCI.String()} } @@ -11846,7 +11803,7 @@ yydefault: case 401: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2432 +//line sql.y:2434 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -11854,27 +11811,27 @@ yydefault: case 402: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:2436 +//line sql.y:2438 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL case 403: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2442 +//line sql.y:2444 { yyVAL.str = "" } case 404: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2446 +//line sql.y:2448 { yyVAL.str = string(yyDollar[1].str) } case 405: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2452 +//line sql.y:2454 { yyLOCAL = &IndexInfo{Type: string(yyDollar[2].str) + " " + string(yyDollar[3].str), ConstraintName: NewIdentifierCI(yyDollar[1].str), Name: NewIdentifierCI("PRIMARY"), Primary: true, Unique: true} } @@ -11882,7 +11839,7 @@ yydefault: case 406: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2456 +//line sql.y:2458 { yyLOCAL = &IndexInfo{Type: string(yyDollar[1].str) + " " + string(yyDollar[2].str), Name: NewIdentifierCI(yyDollar[3].str), Spatial: true, Unique: false} } @@ -11890,7 +11847,7 @@ yydefault: case 407: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2460 +//line sql.y:2462 { yyLOCAL = &IndexInfo{Type: string(yyDollar[1].str) + " " + string(yyDollar[2].str), Name: NewIdentifierCI(yyDollar[3].str), Fulltext: true, Unique: false} } @@ -11898,7 +11855,7 @@ yydefault: case 408: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2464 +//line sql.y:2466 { yyLOCAL = &IndexInfo{Type: string(yyDollar[2].str) + " " + string(yyDollar[3].str), ConstraintName: NewIdentifierCI(yyDollar[1].str), Name: NewIdentifierCI(yyDollar[4].str), Unique: true} } @@ -11906,100 +11863,100 @@ yydefault: case 409: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *IndexInfo -//line sql.y:2468 +//line sql.y:2470 { yyLOCAL = &IndexInfo{Type: string(yyDollar[1].str), Name: NewIdentifierCI(yyDollar[2].str), Unique: false} } yyVAL.union = yyLOCAL case 410: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2473 +//line sql.y:2475 { yyVAL.str = "" } case 411: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2477 +//line sql.y:2479 { yyVAL.str = yyDollar[2].str } case 412: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2483 +//line sql.y:2485 { yyVAL.str = string(yyDollar[1].str) } case 413: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2487 +//line sql.y:2489 { yyVAL.str = string(yyDollar[1].str) } case 414: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2491 +//line sql.y:2493 { yyVAL.str = string(yyDollar[1].str) } case 415: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2497 +//line sql.y:2499 { yyVAL.str = string(yyDollar[1].str) } case 416: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2501 +//line sql.y:2503 { yyVAL.str = string(yyDollar[1].str) } case 417: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2506 +//line sql.y:2508 { yyVAL.str = "key" } case 418: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2510 +//line sql.y:2512 { yyVAL.str = yyDollar[1].str } case 419: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2516 +//line sql.y:2518 { yyVAL.str = string(yyDollar[1].str) } case 420: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2520 +//line sql.y:2522 { yyVAL.str = string(yyDollar[1].str) } case 421: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2525 +//line sql.y:2527 { yyVAL.str = "" } case 422: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2529 +//line sql.y:2531 { yyVAL.str = string(yyDollar[1].identifierCI.String()) } case 423: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexColumn -//line sql.y:2535 +//line sql.y:2537 { yyLOCAL = []*IndexColumn{yyDollar[1].indexColumnUnion()} } yyVAL.union = yyLOCAL case 424: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2539 +//line sql.y:2541 { yySLICE := (*[]*IndexColumn)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].indexColumnUnion()) @@ -12007,7 +11964,7 @@ yydefault: case 425: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *IndexColumn -//line sql.y:2545 +//line sql.y:2547 { yyLOCAL = &IndexColumn{Column: yyDollar[1].identifierCI, Length: yyDollar[2].literalUnion(), Direction: yyDollar[3].orderDirectionUnion()} } @@ -12015,7 +11972,7 @@ yydefault: case 426: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *IndexColumn -//line sql.y:2549 +//line sql.y:2551 { yyLOCAL = &IndexColumn{Expression: yyDollar[2].exprUnion(), Direction: yyDollar[4].orderDirectionUnion()} } @@ -12023,7 +11980,7 @@ yydefault: case 427: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2555 +//line sql.y:2557 { yyLOCAL = &ConstraintDefinition{Name: yyDollar[2].identifierCI, Details: yyDollar[3].constraintInfoUnion()} } @@ -12031,7 +11988,7 @@ yydefault: case 428: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2559 +//line sql.y:2561 { yyLOCAL = &ConstraintDefinition{Details: yyDollar[1].constraintInfoUnion()} } @@ -12039,7 +11996,7 @@ yydefault: case 429: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2565 +//line sql.y:2567 { yyLOCAL = &ConstraintDefinition{Name: yyDollar[2].identifierCI, Details: yyDollar[3].constraintInfoUnion()} } @@ -12047,7 +12004,7 @@ yydefault: case 430: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConstraintDefinition -//line sql.y:2569 +//line sql.y:2571 { yyLOCAL = &ConstraintDefinition{Details: yyDollar[1].constraintInfoUnion()} } @@ -12055,7 +12012,7 @@ yydefault: case 431: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL ConstraintInfo -//line sql.y:2575 +//line sql.y:2577 { yyLOCAL = &ForeignKeyDefinition{IndexName: NewIdentifierCI(yyDollar[3].str), Source: yyDollar[5].columnsUnion(), ReferenceDefinition: yyDollar[7].referenceDefinitionUnion()} } @@ -12063,7 +12020,7 @@ yydefault: case 432: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2581 +//line sql.y:2583 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion()} } @@ -12071,7 +12028,7 @@ yydefault: case 433: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2585 +//line sql.y:2587 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnDelete: yyDollar[7].referenceActionUnion()} } @@ -12079,7 +12036,7 @@ yydefault: case 434: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2589 +//line sql.y:2591 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnUpdate: yyDollar[7].referenceActionUnion()} } @@ -12087,7 +12044,7 @@ yydefault: case 435: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2593 +//line sql.y:2595 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnDelete: yyDollar[7].referenceActionUnion(), OnUpdate: yyDollar[8].referenceActionUnion()} } @@ -12095,7 +12052,7 @@ yydefault: case 436: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2597 +//line sql.y:2599 { yyLOCAL = &ReferenceDefinition{ReferencedTable: yyDollar[2].tableName, ReferencedColumns: yyDollar[4].columnsUnion(), Match: yyDollar[6].matchActionUnion(), OnUpdate: yyDollar[7].referenceActionUnion(), OnDelete: yyDollar[8].referenceActionUnion()} } @@ -12103,7 +12060,7 @@ yydefault: case 437: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2602 +//line sql.y:2604 { yyLOCAL = nil } @@ -12111,7 +12068,7 @@ yydefault: case 438: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ReferenceDefinition -//line sql.y:2606 +//line sql.y:2608 { yyLOCAL = yyDollar[1].referenceDefinitionUnion() } @@ -12119,7 +12076,7 @@ yydefault: case 439: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL ConstraintInfo -//line sql.y:2612 +//line sql.y:2614 { yyLOCAL = &CheckConstraintDefinition{Expr: yyDollar[3].exprUnion(), Enforced: yyDollar[5].booleanUnion()} } @@ -12127,7 +12084,7 @@ yydefault: case 440: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2618 +//line sql.y:2620 { yyLOCAL = yyDollar[2].matchActionUnion() } @@ -12135,7 +12092,7 @@ yydefault: case 441: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2624 +//line sql.y:2626 { yyLOCAL = Full } @@ -12143,7 +12100,7 @@ yydefault: case 442: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2628 +//line sql.y:2630 { yyLOCAL = Partial } @@ -12151,7 +12108,7 @@ yydefault: case 443: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2632 +//line sql.y:2634 { yyLOCAL = Simple } @@ -12159,7 +12116,7 @@ yydefault: case 444: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2637 +//line sql.y:2639 { yyLOCAL = DefaultMatch } @@ -12167,7 +12124,7 @@ yydefault: case 445: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL MatchAction -//line sql.y:2641 +//line sql.y:2643 { yyLOCAL = yyDollar[1].matchActionUnion() } @@ -12175,7 +12132,7 @@ yydefault: case 446: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2647 +//line sql.y:2649 { yyLOCAL = yyDollar[3].referenceActionUnion() } @@ -12183,7 +12140,7 @@ yydefault: case 447: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2653 +//line sql.y:2655 { yyLOCAL = yyDollar[3].referenceActionUnion() } @@ -12191,7 +12148,7 @@ yydefault: case 448: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2659 +//line sql.y:2661 { yyLOCAL = Restrict } @@ -12199,7 +12156,7 @@ yydefault: case 449: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2663 +//line sql.y:2665 { yyLOCAL = Cascade } @@ -12207,7 +12164,7 @@ yydefault: case 450: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2667 +//line sql.y:2669 { yyLOCAL = NoAction } @@ -12215,7 +12172,7 @@ yydefault: case 451: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2671 +//line sql.y:2673 { yyLOCAL = SetDefault } @@ -12223,33 +12180,33 @@ yydefault: case 452: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ReferenceAction -//line sql.y:2675 +//line sql.y:2677 { yyLOCAL = SetNull } yyVAL.union = yyLOCAL case 453: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2680 +//line sql.y:2682 { yyVAL.str = "" } case 454: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2684 +//line sql.y:2686 { yyVAL.str = string(yyDollar[1].str) } case 455: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2688 +//line sql.y:2690 { yyVAL.str = string(yyDollar[1].str) } case 456: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2694 +//line sql.y:2696 { yyLOCAL = true } @@ -12257,7 +12214,7 @@ yydefault: case 457: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:2698 +//line sql.y:2700 { yyLOCAL = false } @@ -12265,7 +12222,7 @@ yydefault: case 458: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2703 +//line sql.y:2705 { yyLOCAL = true } @@ -12273,7 +12230,7 @@ yydefault: case 459: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2707 +//line sql.y:2709 { yyLOCAL = yyDollar[1].booleanUnion() } @@ -12281,7 +12238,7 @@ yydefault: case 460: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL TableOptions -//line sql.y:2712 +//line sql.y:2714 { yyLOCAL = nil } @@ -12289,7 +12246,7 @@ yydefault: case 461: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableOptions -//line sql.y:2716 +//line sql.y:2718 { yyLOCAL = yyDollar[1].tableOptionsUnion() } @@ -12297,21 +12254,21 @@ yydefault: case 462: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableOptions -//line sql.y:2722 +//line sql.y:2724 { yyLOCAL = TableOptions{yyDollar[1].tableOptionUnion()} } yyVAL.union = yyLOCAL case 463: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2726 +//line sql.y:2728 { yySLICE := (*TableOptions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableOptionUnion()) } case 464: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2730 +//line sql.y:2732 { yySLICE := (*TableOptions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].tableOptionUnion()) @@ -12319,14 +12276,14 @@ yydefault: case 465: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableOptions -//line sql.y:2736 +//line sql.y:2738 { yyLOCAL = TableOptions{yyDollar[1].tableOptionUnion()} } yyVAL.union = yyLOCAL case 466: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2740 +//line sql.y:2742 { yySLICE := (*TableOptions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].tableOptionUnion()) @@ -12334,7 +12291,7 @@ yydefault: case 467: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2746 +//line sql.y:2748 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12342,7 +12299,7 @@ yydefault: case 468: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2750 +//line sql.y:2752 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12350,7 +12307,7 @@ yydefault: case 469: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2754 +//line sql.y:2756 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12358,7 +12315,7 @@ yydefault: case 470: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2758 +//line sql.y:2760 { yyLOCAL = &TableOption{Name: (string(yyDollar[2].str)), String: yyDollar[4].str, CaseSensitive: true} } @@ -12366,7 +12323,7 @@ yydefault: case 471: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2762 +//line sql.y:2764 { yyLOCAL = &TableOption{Name: string(yyDollar[2].str), String: yyDollar[4].str, CaseSensitive: true} } @@ -12374,7 +12331,7 @@ yydefault: case 472: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2766 +//line sql.y:2768 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12382,7 +12339,7 @@ yydefault: case 473: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2770 +//line sql.y:2772 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -12390,7 +12347,7 @@ yydefault: case 474: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2774 +//line sql.y:2776 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -12398,7 +12355,7 @@ yydefault: case 475: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2778 +//line sql.y:2780 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -12406,7 +12363,7 @@ yydefault: case 476: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2782 +//line sql.y:2784 { yyLOCAL = &TableOption{Name: (string(yyDollar[1].str) + " " + string(yyDollar[2].str)), Value: NewStrLiteral(yyDollar[4].str)} } @@ -12414,7 +12371,7 @@ yydefault: case 477: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2786 +//line sql.y:2788 { yyLOCAL = &TableOption{Name: (string(yyDollar[1].str) + " " + string(yyDollar[2].str)), Value: NewStrLiteral(yyDollar[4].str)} } @@ -12422,7 +12379,7 @@ yydefault: case 478: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2790 +//line sql.y:2792 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12430,7 +12387,7 @@ yydefault: case 479: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2794 +//line sql.y:2796 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -12438,7 +12395,7 @@ yydefault: case 480: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2798 +//line sql.y:2800 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: yyDollar[3].identifierCS.String(), CaseSensitive: true} } @@ -12446,7 +12403,7 @@ yydefault: case 481: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2802 +//line sql.y:2804 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -12454,7 +12411,7 @@ yydefault: case 482: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2806 +//line sql.y:2808 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } @@ -12462,7 +12419,7 @@ yydefault: case 483: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2810 +//line sql.y:2812 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12470,7 +12427,7 @@ yydefault: case 484: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2814 +//line sql.y:2816 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12478,7 +12435,7 @@ yydefault: case 485: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2818 +//line sql.y:2820 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12486,7 +12443,7 @@ yydefault: case 486: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2822 +//line sql.y:2824 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12494,7 +12451,7 @@ yydefault: case 487: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2826 +//line sql.y:2828 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } @@ -12502,7 +12459,7 @@ yydefault: case 488: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2830 +//line sql.y:2832 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -12510,7 +12467,7 @@ yydefault: case 489: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2834 +//line sql.y:2836 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } @@ -12518,7 +12475,7 @@ yydefault: case 490: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2838 +//line sql.y:2840 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewStrLiteral(yyDollar[3].str)} } @@ -12526,7 +12483,7 @@ yydefault: case 491: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2842 +//line sql.y:2844 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12534,7 +12491,7 @@ yydefault: case 492: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2846 +//line sql.y:2848 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } @@ -12542,7 +12499,7 @@ yydefault: case 493: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2850 +//line sql.y:2852 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12550,7 +12507,7 @@ yydefault: case 494: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2854 +//line sql.y:2856 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: string(yyDollar[3].str)} } @@ -12558,7 +12515,7 @@ yydefault: case 495: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2858 +//line sql.y:2860 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Value: NewIntLiteral(yyDollar[3].str)} } @@ -12566,7 +12523,7 @@ yydefault: case 496: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2862 +//line sql.y:2864 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), String: (yyDollar[3].identifierCI.String() + yyDollar[4].str)} } @@ -12574,57 +12531,57 @@ yydefault: case 497: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *TableOption -//line sql.y:2866 +//line sql.y:2868 { yyLOCAL = &TableOption{Name: string(yyDollar[1].str), Tables: yyDollar[4].tableNamesUnion()} } yyVAL.union = yyLOCAL case 498: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2871 +//line sql.y:2873 { yyVAL.str = "" } case 499: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2875 +//line sql.y:2877 { yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 500: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2879 +//line sql.y:2881 { yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 510: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2898 +//line sql.y:2900 { yyVAL.str = yyDollar[1].identifierCI.String() } case 511: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2902 +//line sql.y:2904 { yyVAL.str = encodeSQLString(yyDollar[1].str) } case 512: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2906 +//line sql.y:2908 { yyVAL.str = string(yyDollar[1].str) } case 513: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2911 +//line sql.y:2913 { yyVAL.str = "" } case 515: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:2917 +//line sql.y:2919 { yyLOCAL = false } @@ -12632,7 +12589,7 @@ yydefault: case 516: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:2921 +//line sql.y:2923 { yyLOCAL = true } @@ -12640,7 +12597,7 @@ yydefault: case 517: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ColName -//line sql.y:2926 +//line sql.y:2928 { yyLOCAL = nil } @@ -12648,27 +12605,27 @@ yydefault: case 518: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ColName -//line sql.y:2930 +//line sql.y:2932 { yyLOCAL = yyDollar[2].colNameUnion() } yyVAL.union = yyLOCAL case 519: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2935 +//line sql.y:2937 { yyVAL.str = "" } case 520: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2939 +//line sql.y:2941 { yyVAL.str = string(yyDollar[2].str) } case 521: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Literal -//line sql.y:2944 +//line sql.y:2946 { yyLOCAL = nil } @@ -12676,7 +12633,7 @@ yydefault: case 522: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Literal -//line sql.y:2948 +//line sql.y:2950 { yyLOCAL = NewIntLiteral(yyDollar[2].str) } @@ -12684,7 +12641,7 @@ yydefault: case 523: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Literal -//line sql.y:2952 +//line sql.y:2954 { yyLOCAL = NewDecimalLiteral(yyDollar[2].str) } @@ -12692,7 +12649,7 @@ yydefault: case 524: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2957 +//line sql.y:2959 { yyLOCAL = nil } @@ -12700,14 +12657,14 @@ yydefault: case 525: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2961 +//line sql.y:2963 { yyLOCAL = yyDollar[1].alterOptionsUnion() } yyVAL.union = yyLOCAL case 526: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2965 +//line sql.y:2967 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, &OrderByOption{Cols: yyDollar[5].columnsUnion()}) @@ -12715,14 +12672,14 @@ yydefault: case 527: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2969 +//line sql.y:2971 { yyLOCAL = yyDollar[1].alterOptionsUnion() } yyVAL.union = yyLOCAL case 528: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2973 +//line sql.y:2975 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionsUnion()...) @@ -12730,7 +12687,7 @@ yydefault: case 529: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2977 +//line sql.y:2979 { yyLOCAL = append(append(yyDollar[1].alterOptionsUnion(), yyDollar[3].alterOptionsUnion()...), &OrderByOption{Cols: yyDollar[7].columnsUnion()}) } @@ -12738,21 +12695,21 @@ yydefault: case 530: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:2983 +//line sql.y:2985 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL case 531: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2987 +//line sql.y:2989 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion()) } case 532: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2991 +//line sql.y:2993 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion()) @@ -12760,7 +12717,7 @@ yydefault: case 533: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL AlterOption -//line sql.y:2997 +//line sql.y:2999 { yyLOCAL = yyDollar[1].tableOptionsUnion() } @@ -12768,7 +12725,7 @@ yydefault: case 534: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3001 +//line sql.y:3003 { yyLOCAL = &AddConstraintDefinition{ConstraintDefinition: yyDollar[2].constraintDefinitionUnion()} } @@ -12776,7 +12733,7 @@ yydefault: case 535: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3005 +//line sql.y:3007 { yyLOCAL = &AddConstraintDefinition{ConstraintDefinition: yyDollar[2].constraintDefinitionUnion()} } @@ -12784,7 +12741,7 @@ yydefault: case 536: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3009 +//line sql.y:3011 { yyLOCAL = &AddIndexDefinition{IndexDefinition: yyDollar[2].indexDefinitionUnion()} } @@ -12792,7 +12749,7 @@ yydefault: case 537: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3013 +//line sql.y:3015 { yyLOCAL = &AddColumns{Columns: yyDollar[4].columnDefinitionsUnion()} } @@ -12800,7 +12757,7 @@ yydefault: case 538: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3017 +//line sql.y:3019 { yyLOCAL = &AddColumns{Columns: []*ColumnDefinition{yyDollar[3].columnDefinitionUnion()}, First: yyDollar[4].booleanUnion(), After: yyDollar[5].colNameUnion()} } @@ -12808,7 +12765,7 @@ yydefault: case 539: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3021 +//line sql.y:3023 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: true} } @@ -12816,7 +12773,7 @@ yydefault: case 540: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3025 +//line sql.y:3027 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: false, DefaultVal: yyDollar[6].exprUnion()} } @@ -12824,7 +12781,7 @@ yydefault: case 541: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3029 +//line sql.y:3031 { yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), DropDefault: false, DefaultVal: yyDollar[7].exprUnion()} } @@ -12832,7 +12789,7 @@ yydefault: case 542: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3033 +//line sql.y:3035 { val := false yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), Invisible: &val} @@ -12841,7 +12798,7 @@ yydefault: case 543: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3038 +//line sql.y:3040 { val := true yyLOCAL = &AlterColumn{Column: yyDollar[3].colNameUnion(), Invisible: &val} @@ -12850,7 +12807,7 @@ yydefault: case 544: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3043 +//line sql.y:3045 { yyLOCAL = &AlterCheck{Name: yyDollar[3].identifierCI, Enforced: yyDollar[4].booleanUnion()} } @@ -12858,7 +12815,7 @@ yydefault: case 545: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3047 +//line sql.y:3049 { yyLOCAL = &AlterIndex{Name: yyDollar[3].identifierCI, Invisible: false} } @@ -12866,7 +12823,7 @@ yydefault: case 546: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3051 +//line sql.y:3053 { yyLOCAL = &AlterIndex{Name: yyDollar[3].identifierCI, Invisible: true} } @@ -12874,7 +12831,7 @@ yydefault: case 547: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3055 +//line sql.y:3057 { yyLOCAL = &ChangeColumn{OldColumn: yyDollar[3].colNameUnion(), NewColDefinition: yyDollar[4].columnDefinitionUnion(), First: yyDollar[5].booleanUnion(), After: yyDollar[6].colNameUnion()} } @@ -12882,7 +12839,7 @@ yydefault: case 548: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3059 +//line sql.y:3061 { yyLOCAL = &ModifyColumn{NewColDefinition: yyDollar[3].columnDefinitionUnion(), First: yyDollar[4].booleanUnion(), After: yyDollar[5].colNameUnion()} } @@ -12890,7 +12847,7 @@ yydefault: case 549: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3063 +//line sql.y:3065 { yyLOCAL = &RenameColumn{OldName: yyDollar[3].colNameUnion(), NewName: yyDollar[5].colNameUnion()} } @@ -12898,7 +12855,7 @@ yydefault: case 550: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3067 +//line sql.y:3069 { yyLOCAL = &AlterCharset{CharacterSet: yyDollar[4].str, Collate: yyDollar[5].str} } @@ -12906,7 +12863,7 @@ yydefault: case 551: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3071 +//line sql.y:3073 { yyLOCAL = &KeyState{Enable: false} } @@ -12914,7 +12871,7 @@ yydefault: case 552: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3075 +//line sql.y:3077 { yyLOCAL = &KeyState{Enable: true} } @@ -12922,7 +12879,7 @@ yydefault: case 553: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3079 +//line sql.y:3081 { yyLOCAL = &TablespaceOperation{Import: false} } @@ -12930,7 +12887,7 @@ yydefault: case 554: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3083 +//line sql.y:3085 { yyLOCAL = &TablespaceOperation{Import: true} } @@ -12938,7 +12895,7 @@ yydefault: case 555: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3087 +//line sql.y:3089 { yyLOCAL = &DropColumn{Name: yyDollar[3].colNameUnion()} } @@ -12946,7 +12903,7 @@ yydefault: case 556: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3091 +//line sql.y:3093 { yyLOCAL = &DropKey{Type: NormalKeyType, Name: yyDollar[3].identifierCI} } @@ -12954,7 +12911,7 @@ yydefault: case 557: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3095 +//line sql.y:3097 { yyLOCAL = &DropKey{Type: PrimaryKeyType} } @@ -12962,7 +12919,7 @@ yydefault: case 558: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3099 +//line sql.y:3101 { yyLOCAL = &DropKey{Type: ForeignKeyType, Name: yyDollar[4].identifierCI} } @@ -12970,7 +12927,7 @@ yydefault: case 559: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3103 +//line sql.y:3105 { yyLOCAL = &DropKey{Type: CheckKeyType, Name: yyDollar[3].identifierCI} } @@ -12978,7 +12935,7 @@ yydefault: case 560: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3107 +//line sql.y:3109 { yyLOCAL = &DropKey{Type: CheckKeyType, Name: yyDollar[3].identifierCI} } @@ -12986,7 +12943,7 @@ yydefault: case 561: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3111 +//line sql.y:3113 { yyLOCAL = &Force{} } @@ -12994,7 +12951,7 @@ yydefault: case 562: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3115 +//line sql.y:3117 { yyLOCAL = &RenameTableName{Table: yyDollar[3].tableName} } @@ -13002,7 +12959,7 @@ yydefault: case 563: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3119 +//line sql.y:3121 { yyLOCAL = &RenameIndex{OldName: yyDollar[3].identifierCI, NewName: yyDollar[5].identifierCI} } @@ -13010,14 +12967,14 @@ yydefault: case 564: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:3125 +//line sql.y:3127 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL case 565: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3129 +//line sql.y:3131 { yySLICE := (*[]AlterOption)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].alterOptionUnion()) @@ -13025,7 +12982,7 @@ yydefault: case 566: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3135 +//line sql.y:3137 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } @@ -13033,7 +12990,7 @@ yydefault: case 567: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3139 +//line sql.y:3141 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } @@ -13041,7 +12998,7 @@ yydefault: case 568: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3143 +//line sql.y:3145 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } @@ -13049,7 +13006,7 @@ yydefault: case 569: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3147 +//line sql.y:3149 { yyLOCAL = AlgorithmValue(string(yyDollar[3].str)) } @@ -13057,7 +13014,7 @@ yydefault: case 570: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3151 +//line sql.y:3153 { yyLOCAL = &LockOption{Type: DefaultType} } @@ -13065,7 +13022,7 @@ yydefault: case 571: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3155 +//line sql.y:3157 { yyLOCAL = &LockOption{Type: NoneType} } @@ -13073,7 +13030,7 @@ yydefault: case 572: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3159 +//line sql.y:3161 { yyLOCAL = &LockOption{Type: SharedType} } @@ -13081,7 +13038,7 @@ yydefault: case 573: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3163 +//line sql.y:3165 { yyLOCAL = &LockOption{Type: ExclusiveType} } @@ -13089,7 +13046,7 @@ yydefault: case 574: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3167 +//line sql.y:3169 { yyLOCAL = &Validation{With: true} } @@ -13097,7 +13054,7 @@ yydefault: case 575: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL AlterOption -//line sql.y:3171 +//line sql.y:3173 { yyLOCAL = &Validation{With: false} } @@ -13105,7 +13062,7 @@ yydefault: case 576: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:3177 +//line sql.y:3179 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion() @@ -13116,7 +13073,7 @@ yydefault: case 577: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:3184 +//line sql.y:3186 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion() @@ -13127,7 +13084,7 @@ yydefault: case 578: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:3191 +//line sql.y:3193 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().AlterOptions = yyDollar[2].alterOptionsUnion() @@ -13138,7 +13095,7 @@ yydefault: case 579: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:3198 +//line sql.y:3200 { yyDollar[1].alterTableUnion().FullyParsed = true yyDollar[1].alterTableUnion().PartitionSpec = yyDollar[2].partSpecUnion() @@ -13148,7 +13105,7 @@ yydefault: case 580: yyDollar = yyS[yypt-11 : yypt+1] var yyLOCAL Statement -//line sql.y:3204 +//line sql.y:3206 { yyLOCAL = &AlterView{ViewName: yyDollar[7].tableName.ToViewName(), Comments: Comments(yyDollar[2].strs).Parsed(), Algorithm: yyDollar[3].str, Definer: yyDollar[4].definerUnion(), Security: yyDollar[5].str, Columns: yyDollar[8].columnsUnion(), Select: yyDollar[10].selStmtUnion(), CheckOption: yyDollar[11].str} } @@ -13156,7 +13113,7 @@ yydefault: case 581: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:3214 +//line sql.y:3216 { yyDollar[1].alterDatabaseUnion().FullyParsed = true yyDollar[1].alterDatabaseUnion().DBName = yyDollar[2].identifierCS @@ -13167,7 +13124,7 @@ yydefault: case 582: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3221 +//line sql.y:3223 { yyDollar[1].alterDatabaseUnion().FullyParsed = true yyDollar[1].alterDatabaseUnion().DBName = yyDollar[2].identifierCS @@ -13178,7 +13135,7 @@ yydefault: case 583: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:3228 +//line sql.y:3230 { yyLOCAL = &AlterVschema{ Action: CreateVindexDDLAction, @@ -13194,7 +13151,7 @@ yydefault: case 584: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3240 +//line sql.y:3242 { yyLOCAL = &AlterVschema{ Action: DropVindexDDLAction, @@ -13208,7 +13165,7 @@ yydefault: case 585: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3250 +//line sql.y:3252 { yyLOCAL = &AlterVschema{Action: AddVschemaTableDDLAction, Table: yyDollar[6].tableName} } @@ -13216,7 +13173,7 @@ yydefault: case 586: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3254 +//line sql.y:3256 { yyLOCAL = &AlterVschema{Action: DropVschemaTableDDLAction, Table: yyDollar[6].tableName} } @@ -13224,7 +13181,7 @@ yydefault: case 587: yyDollar = yyS[yypt-13 : yypt+1] var yyLOCAL Statement -//line sql.y:3258 +//line sql.y:3260 { yyLOCAL = &AlterVschema{ Action: AddColVindexDDLAction, @@ -13241,7 +13198,7 @@ yydefault: case 588: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:3271 +//line sql.y:3273 { yyLOCAL = &AlterVschema{ Action: DropColVindexDDLAction, @@ -13255,7 +13212,7 @@ yydefault: case 589: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:3281 +//line sql.y:3283 { yyLOCAL = &AlterVschema{Action: AddSequenceDDLAction, Table: yyDollar[6].tableName} } @@ -13263,7 +13220,7 @@ yydefault: case 590: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Statement -//line sql.y:3285 +//line sql.y:3287 { yyLOCAL = &AlterVschema{ Action: AddAutoIncDDLAction, @@ -13278,7 +13235,7 @@ yydefault: case 591: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3296 +//line sql.y:3298 { yyLOCAL = &AlterMigration{ Type: RetryMigrationType, @@ -13289,7 +13246,7 @@ yydefault: case 592: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3303 +//line sql.y:3305 { yyLOCAL = &AlterMigration{ Type: CleanupMigrationType, @@ -13300,7 +13257,7 @@ yydefault: case 593: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3310 +//line sql.y:3312 { yyLOCAL = &AlterMigration{ Type: LaunchMigrationType, @@ -13311,7 +13268,7 @@ yydefault: case 594: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3317 +//line sql.y:3319 { yyLOCAL = &AlterMigration{ Type: LaunchMigrationType, @@ -13323,7 +13280,7 @@ yydefault: case 595: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3325 +//line sql.y:3327 { yyLOCAL = &AlterMigration{ Type: LaunchAllMigrationType, @@ -13333,7 +13290,7 @@ yydefault: case 596: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3331 +//line sql.y:3333 { yyLOCAL = &AlterMigration{ Type: CompleteMigrationType, @@ -13344,7 +13301,7 @@ yydefault: case 597: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3338 +//line sql.y:3340 { yyLOCAL = &AlterMigration{ Type: CompleteAllMigrationType, @@ -13354,7 +13311,7 @@ yydefault: case 598: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3344 +//line sql.y:3346 { yyLOCAL = &AlterMigration{ Type: CancelMigrationType, @@ -13365,7 +13322,7 @@ yydefault: case 599: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3351 +//line sql.y:3353 { yyLOCAL = &AlterMigration{ Type: PauseMigrationType, @@ -13376,7 +13333,7 @@ yydefault: case 600: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3358 +//line sql.y:3360 { yyLOCAL = &AlterMigration{ Type: ResumeMigrationType, @@ -13387,7 +13344,7 @@ yydefault: case 601: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3365 +//line sql.y:3367 { yyLOCAL = &AlterMigration{ Type: CancelAllMigrationType, @@ -13397,7 +13354,7 @@ yydefault: case 602: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3371 +//line sql.y:3373 { yyLOCAL = &AlterMigration{ Type: PauseAllMigrationType, @@ -13407,7 +13364,7 @@ yydefault: case 603: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3377 +//line sql.y:3379 { yyLOCAL = &AlterMigration{ Type: ResumeAllMigrationType, @@ -13417,7 +13374,7 @@ yydefault: case 604: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3383 +//line sql.y:3385 { yyLOCAL = &AlterMigration{ Type: ThrottleMigrationType, @@ -13430,7 +13387,7 @@ yydefault: case 605: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3392 +//line sql.y:3394 { yyLOCAL = &AlterMigration{ Type: ThrottleAllMigrationType, @@ -13442,7 +13399,7 @@ yydefault: case 606: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3400 +//line sql.y:3402 { yyLOCAL = &AlterMigration{ Type: UnthrottleMigrationType, @@ -13453,7 +13410,7 @@ yydefault: case 607: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3407 +//line sql.y:3409 { yyLOCAL = &AlterMigration{ Type: UnthrottleAllMigrationType, @@ -13463,7 +13420,137 @@ yydefault: case 608: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3413 +//line sql.y:3426 + { + yyLOCAL = &AlterDMLJob{ + Type: LaunchDMLJobType, + UUID: string(yyDollar[4].str), + } + } + yyVAL.union = yyLOCAL + case 609: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Statement +//line sql.y:3433 + { + yyLOCAL = &AlterDMLJob{ + Type: LaunchAllDMLJobType, + } + } + yyVAL.union = yyLOCAL + case 610: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Statement +//line sql.y:3439 + { + yyLOCAL = &AlterDMLJob{ + Type: CancelDMLJobType, + UUID: string(yyDollar[4].str), + } + } + yyVAL.union = yyLOCAL + case 611: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Statement +//line sql.y:3446 + { + yyLOCAL = &AlterDMLJob{ + Type: PauseDMLJobType, + UUID: string(yyDollar[4].str), + } + } + yyVAL.union = yyLOCAL + case 612: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Statement +//line sql.y:3453 + { + yyLOCAL = &AlterDMLJob{ + Type: ResumeDMLJobType, + UUID: string(yyDollar[4].str), + } + } + yyVAL.union = yyLOCAL + case 613: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Statement +//line sql.y:3460 + { + yyLOCAL = &AlterDMLJob{ + Type: CancelAllDMLJobType, + } + } + yyVAL.union = yyLOCAL + case 614: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Statement +//line sql.y:3466 + { + yyLOCAL = &AlterDMLJob{ + Type: PauseAllDMLJobType, + } + } + yyVAL.union = yyLOCAL + case 615: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Statement +//line sql.y:3472 + { + yyLOCAL = &AlterDMLJob{ + Type: ResumeAllDMLJobType, + } + } + yyVAL.union = yyLOCAL + case 616: + yyDollar = yyS[yypt-7 : yypt+1] + var yyLOCAL Statement +//line sql.y:3478 + { + yyLOCAL = &AlterDMLJob{ + Type: ThrottleDMLJobType, + UUID: string(yyDollar[4].str), + Expire: yyDollar[6].str, + Ratio: yyDollar[7].literalUnion(), + } + } + yyVAL.union = yyLOCAL + case 617: + yyDollar = yyS[yypt-7 : yypt+1] + var yyLOCAL Statement +//line sql.y:3487 + { + yyLOCAL = &AlterDMLJob{ + Type: ThrottleAllDMLJobType, + Expire: yyDollar[6].str, + Ratio: yyDollar[7].literalUnion(), + } + } + yyVAL.union = yyLOCAL + case 618: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Statement +//line sql.y:3495 + { + yyLOCAL = &AlterDMLJob{ + Type: UnthrottleDMLJobType, + UUID: string(yyDollar[4].str), + } + } + yyVAL.union = yyLOCAL + case 619: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Statement +//line sql.y:3502 + { + yyLOCAL = &AlterDMLJob{ + Type: UnthrottleAllDMLJobType, + } + } + yyVAL.union = yyLOCAL + case 620: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Statement +//line sql.y:3511 { yyLOCAL = &AlterMigration{ Type: RetryMigrationType, @@ -13471,10 +13558,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 609: + case 621: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3420 +//line sql.y:3518 { yyLOCAL = &AlterMigration{ Type: CleanupMigrationType, @@ -13482,10 +13569,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 610: + case 622: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3427 +//line sql.y:3525 { yyLOCAL = &AlterMigration{ Type: LaunchMigrationType, @@ -13493,10 +13580,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 611: + case 623: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3434 +//line sql.y:3532 { yyLOCAL = &AlterMigration{ Type: LaunchMigrationType, @@ -13505,20 +13592,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 612: + case 624: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3442 +//line sql.y:3540 { yyLOCAL = &AlterMigration{ Type: LaunchAllMigrationType, } } yyVAL.union = yyLOCAL - case 613: + case 625: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3448 +//line sql.y:3546 { yyLOCAL = &AlterMigration{ Type: CompleteMigrationType, @@ -13526,20 +13613,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 614: + case 626: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3455 +//line sql.y:3553 { yyLOCAL = &AlterMigration{ Type: CompleteAllMigrationType, } } yyVAL.union = yyLOCAL - case 615: + case 627: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3461 +//line sql.y:3559 { yyLOCAL = &AlterMigration{ Type: CancelMigrationType, @@ -13547,10 +13634,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 616: + case 628: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3468 +//line sql.y:3566 { yyLOCAL = &AlterMigration{ Type: PauseMigrationType, @@ -13558,10 +13645,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 617: + case 629: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3475 +//line sql.y:3573 { yyLOCAL = &AlterMigration{ Type: ResumeMigrationType, @@ -13569,40 +13656,40 @@ yydefault: } } yyVAL.union = yyLOCAL - case 618: + case 630: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3482 +//line sql.y:3580 { yyLOCAL = &AlterMigration{ Type: CancelAllMigrationType, } } yyVAL.union = yyLOCAL - case 619: + case 631: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3488 +//line sql.y:3586 { yyLOCAL = &AlterMigration{ Type: PauseAllMigrationType, } } yyVAL.union = yyLOCAL - case 620: + case 632: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3494 +//line sql.y:3592 { yyLOCAL = &AlterMigration{ Type: ResumeAllMigrationType, } } yyVAL.union = yyLOCAL - case 621: + case 633: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3500 +//line sql.y:3598 { yyLOCAL = &AlterMigration{ Type: ThrottleMigrationType, @@ -13612,10 +13699,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 622: + case 634: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3509 +//line sql.y:3607 { yyLOCAL = &AlterMigration{ Type: ThrottleAllMigrationType, @@ -13624,10 +13711,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 623: + case 635: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3517 +//line sql.y:3615 { yyLOCAL = &AlterMigration{ Type: UnthrottleMigrationType, @@ -13635,28 +13722,28 @@ yydefault: } } yyVAL.union = yyLOCAL - case 624: + case 636: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3524 +//line sql.y:3622 { yyLOCAL = &AlterMigration{ Type: UnthrottleAllMigrationType, } } yyVAL.union = yyLOCAL - case 625: + case 637: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3532 +//line sql.y:3630 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 626: + case 638: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3536 +//line sql.y:3634 { yyDollar[3].partitionOptionUnion().Partitions = yyDollar[4].integerUnion() yyDollar[3].partitionOptionUnion().SubPartition = yyDollar[5].subPartitionUnion() @@ -13664,10 +13751,10 @@ yydefault: yyLOCAL = yyDollar[3].partitionOptionUnion() } yyVAL.union = yyLOCAL - case 627: + case 639: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3545 +//line sql.y:3643 { yyLOCAL = &PartitionOption{ IsLinear: yyDollar[1].booleanUnion(), @@ -13676,10 +13763,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 628: + case 640: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3553 +//line sql.y:3651 { yyLOCAL = &PartitionOption{ IsLinear: yyDollar[1].booleanUnion(), @@ -13689,10 +13776,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 629: + case 641: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3562 +//line sql.y:3660 { yyLOCAL = &PartitionOption{ Type: yyDollar[1].partitionByTypeUnion(), @@ -13700,10 +13787,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 630: + case 642: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3569 +//line sql.y:3667 { yyLOCAL = &PartitionOption{ Type: yyDollar[1].partitionByTypeUnion(), @@ -13711,18 +13798,18 @@ yydefault: } } yyVAL.union = yyLOCAL - case 631: + case 643: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *SubPartition -//line sql.y:3577 +//line sql.y:3675 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 632: + case 644: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *SubPartition -//line sql.y:3581 +//line sql.y:3679 { yyLOCAL = &SubPartition{ IsLinear: yyDollar[3].booleanUnion(), @@ -13732,10 +13819,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 633: + case 645: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL *SubPartition -//line sql.y:3590 +//line sql.y:3688 { yyLOCAL = &SubPartition{ IsLinear: yyDollar[3].booleanUnion(), @@ -13746,682 +13833,682 @@ yydefault: } } yyVAL.union = yyLOCAL - case 634: + case 646: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*PartitionDefinition -//line sql.y:3601 +//line sql.y:3699 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 635: + case 647: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*PartitionDefinition -//line sql.y:3605 +//line sql.y:3703 { yyLOCAL = yyDollar[2].partDefsUnion() } yyVAL.union = yyLOCAL - case 636: + case 648: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3610 +//line sql.y:3708 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 637: + case 649: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3614 +//line sql.y:3712 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 638: + case 650: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:3619 +//line sql.y:3717 { yyLOCAL = 0 } yyVAL.union = yyLOCAL - case 639: + case 651: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:3623 +//line sql.y:3721 { yyLOCAL = convertStringToInt(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 640: + case 652: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL TableExpr -//line sql.y:3629 +//line sql.y:3727 { yyLOCAL = &JSONTableExpr{Expr: yyDollar[3].exprUnion(), Filter: yyDollar[5].exprUnion(), Columns: yyDollar[6].jtColumnListUnion(), Alias: yyDollar[8].identifierCS} } yyVAL.union = yyLOCAL - case 641: + case 653: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL []*JtColumnDefinition -//line sql.y:3635 +//line sql.y:3733 { yyLOCAL = yyDollar[3].jtColumnListUnion() } yyVAL.union = yyLOCAL - case 642: + case 654: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*JtColumnDefinition -//line sql.y:3641 +//line sql.y:3739 { yyLOCAL = []*JtColumnDefinition{yyDollar[1].jtColumnDefinitionUnion()} } yyVAL.union = yyLOCAL - case 643: + case 655: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3645 +//line sql.y:3743 { yySLICE := (*[]*JtColumnDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].jtColumnDefinitionUnion()) } - case 644: + case 656: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3651 +//line sql.y:3749 { yyLOCAL = &JtColumnDefinition{JtOrdinal: &JtOrdinalColDef{Name: yyDollar[1].identifierCI}} } yyVAL.union = yyLOCAL - case 645: + case 657: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3655 +//line sql.y:3753 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 646: + case 658: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3661 +//line sql.y:3759 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 647: + case 659: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3667 +//line sql.y:3765 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 648: + case 660: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3673 +//line sql.y:3771 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 649: + case 661: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3679 +//line sql.y:3777 { jtNestedPath := &JtNestedPathColDef{Path: yyDollar[3].exprUnion(), Columns: yyDollar[4].jtColumnListUnion()} yyLOCAL = &JtColumnDefinition{JtNestedPath: jtNestedPath} } yyVAL.union = yyLOCAL - case 650: + case 662: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3685 +//line sql.y:3783 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 651: + case 663: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3689 +//line sql.y:3787 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 652: + case 664: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3693 +//line sql.y:3791 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 653: + case 665: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3697 +//line sql.y:3795 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 654: + case 666: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3703 +//line sql.y:3801 { yyLOCAL = yyDollar[1].jtOnResponseUnion() } yyVAL.union = yyLOCAL - case 655: + case 667: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3709 +//line sql.y:3807 { yyLOCAL = yyDollar[1].jtOnResponseUnion() } yyVAL.union = yyLOCAL - case 656: + case 668: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3715 +//line sql.y:3813 { yyLOCAL = &JtOnResponse{ResponseType: ErrorJSONType} } yyVAL.union = yyLOCAL - case 657: + case 669: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3719 +//line sql.y:3817 { yyLOCAL = &JtOnResponse{ResponseType: NullJSONType} } yyVAL.union = yyLOCAL - case 658: + case 670: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3723 +//line sql.y:3821 { yyLOCAL = &JtOnResponse{ResponseType: DefaultJSONType, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 659: + case 671: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL PartitionByType -//line sql.y:3729 +//line sql.y:3827 { yyLOCAL = RangeType } yyVAL.union = yyLOCAL - case 660: + case 672: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL PartitionByType -//line sql.y:3733 +//line sql.y:3831 { yyLOCAL = ListType } yyVAL.union = yyLOCAL - case 661: + case 673: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:3738 +//line sql.y:3836 { yyLOCAL = -1 } yyVAL.union = yyLOCAL - case 662: + case 674: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL int -//line sql.y:3742 +//line sql.y:3840 { yyLOCAL = convertStringToInt(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 663: + case 675: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:3747 +//line sql.y:3845 { yyLOCAL = -1 } yyVAL.union = yyLOCAL - case 664: + case 676: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL int -//line sql.y:3751 +//line sql.y:3849 { yyLOCAL = convertStringToInt(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 665: + case 677: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3757 +//line sql.y:3855 { yyLOCAL = &PartitionSpec{Action: AddAction, Definitions: []*PartitionDefinition{yyDollar[4].partDefUnion()}} } yyVAL.union = yyLOCAL - case 666: + case 678: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3761 +//line sql.y:3859 { yyLOCAL = &PartitionSpec{Action: DropAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 667: + case 679: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3765 +//line sql.y:3863 { yyLOCAL = &PartitionSpec{Action: ReorganizeAction, Names: yyDollar[3].partitionsUnion(), Definitions: yyDollar[6].partDefsUnion()} } yyVAL.union = yyLOCAL - case 668: + case 680: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3769 +//line sql.y:3867 { yyLOCAL = &PartitionSpec{Action: DiscardAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 669: + case 681: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3773 +//line sql.y:3871 { yyLOCAL = &PartitionSpec{Action: DiscardAction, IsAll: true} } yyVAL.union = yyLOCAL - case 670: + case 682: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3777 +//line sql.y:3875 { yyLOCAL = &PartitionSpec{Action: ImportAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 671: + case 683: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3781 +//line sql.y:3879 { yyLOCAL = &PartitionSpec{Action: ImportAction, IsAll: true} } yyVAL.union = yyLOCAL - case 672: + case 684: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3785 +//line sql.y:3883 { yyLOCAL = &PartitionSpec{Action: TruncateAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 673: + case 685: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3789 +//line sql.y:3887 { yyLOCAL = &PartitionSpec{Action: TruncateAction, IsAll: true} } yyVAL.union = yyLOCAL - case 674: + case 686: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3793 +//line sql.y:3891 { yyLOCAL = &PartitionSpec{Action: CoalesceAction, Number: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 675: + case 687: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3797 +//line sql.y:3895 { yyLOCAL = &PartitionSpec{Action: ExchangeAction, Names: Partitions{yyDollar[3].identifierCI}, TableName: yyDollar[6].tableName, WithoutValidation: yyDollar[7].booleanUnion()} } yyVAL.union = yyLOCAL - case 676: + case 688: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3801 +//line sql.y:3899 { yyLOCAL = &PartitionSpec{Action: AnalyzeAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 677: + case 689: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3805 +//line sql.y:3903 { yyLOCAL = &PartitionSpec{Action: AnalyzeAction, IsAll: true} } yyVAL.union = yyLOCAL - case 678: + case 690: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3809 +//line sql.y:3907 { yyLOCAL = &PartitionSpec{Action: CheckAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 679: + case 691: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3813 +//line sql.y:3911 { yyLOCAL = &PartitionSpec{Action: CheckAction, IsAll: true} } yyVAL.union = yyLOCAL - case 680: + case 692: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3817 +//line sql.y:3915 { yyLOCAL = &PartitionSpec{Action: OptimizeAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 681: + case 693: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3821 +//line sql.y:3919 { yyLOCAL = &PartitionSpec{Action: OptimizeAction, IsAll: true} } yyVAL.union = yyLOCAL - case 682: + case 694: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3825 +//line sql.y:3923 { yyLOCAL = &PartitionSpec{Action: RebuildAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 683: + case 695: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3829 +//line sql.y:3927 { yyLOCAL = &PartitionSpec{Action: RebuildAction, IsAll: true} } yyVAL.union = yyLOCAL - case 684: + case 696: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3833 +//line sql.y:3931 { yyLOCAL = &PartitionSpec{Action: RepairAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 685: + case 697: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3837 +//line sql.y:3935 { yyLOCAL = &PartitionSpec{Action: RepairAction, IsAll: true} } yyVAL.union = yyLOCAL - case 686: + case 698: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3841 +//line sql.y:3939 { yyLOCAL = &PartitionSpec{Action: UpgradeAction} } yyVAL.union = yyLOCAL - case 687: + case 699: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3846 +//line sql.y:3944 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 688: + case 700: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:3850 +//line sql.y:3948 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 689: + case 701: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:3854 +//line sql.y:3952 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 690: + case 702: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*PartitionDefinition -//line sql.y:3860 +//line sql.y:3958 { yyLOCAL = []*PartitionDefinition{yyDollar[1].partDefUnion()} } yyVAL.union = yyLOCAL - case 691: + case 703: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3864 +//line sql.y:3962 { yySLICE := (*[]*PartitionDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].partDefUnion()) } - case 692: + case 704: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3870 +//line sql.y:3968 { yyVAL.partDefUnion().Options = yyDollar[2].partitionDefinitionOptionsUnion() } - case 693: + case 705: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3875 +//line sql.y:3973 { yyLOCAL = &PartitionDefinitionOptions{} } yyVAL.union = yyLOCAL - case 694: + case 706: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3879 +//line sql.y:3977 { yyDollar[1].partitionDefinitionOptionsUnion().ValueRange = yyDollar[2].partitionValueRangeUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 695: + case 707: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3884 +//line sql.y:3982 { yyDollar[1].partitionDefinitionOptionsUnion().Comment = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 696: + case 708: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3889 +//line sql.y:3987 { yyDollar[1].partitionDefinitionOptionsUnion().Engine = yyDollar[2].partitionEngineUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 697: + case 709: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3894 +//line sql.y:3992 { yyDollar[1].partitionDefinitionOptionsUnion().DataDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 698: + case 710: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3899 +//line sql.y:3997 { yyDollar[1].partitionDefinitionOptionsUnion().IndexDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 699: + case 711: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3904 +//line sql.y:4002 { val := yyDollar[2].integerUnion() yyDollar[1].partitionDefinitionOptionsUnion().MaxRows = &val yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 700: + case 712: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3910 +//line sql.y:4008 { val := yyDollar[2].integerUnion() yyDollar[1].partitionDefinitionOptionsUnion().MinRows = &val yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 701: + case 713: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3916 +//line sql.y:4014 { yyDollar[1].partitionDefinitionOptionsUnion().TableSpace = yyDollar[2].str yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 702: + case 714: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3921 +//line sql.y:4019 { yyDollar[1].partitionDefinitionOptionsUnion().SubPartitionDefinitions = yyDollar[2].subPartitionDefinitionsUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 703: + case 715: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SubPartitionDefinitions -//line sql.y:3927 +//line sql.y:4025 { yyLOCAL = yyDollar[2].subPartitionDefinitionsUnion() } yyVAL.union = yyLOCAL - case 704: + case 716: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SubPartitionDefinitions -//line sql.y:3933 +//line sql.y:4031 { yyLOCAL = SubPartitionDefinitions{yyDollar[1].subPartitionDefinitionUnion()} } yyVAL.union = yyLOCAL - case 705: + case 717: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3937 +//line sql.y:4035 { yySLICE := (*SubPartitionDefinitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].subPartitionDefinitionUnion()) } - case 706: + case 718: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SubPartitionDefinition -//line sql.y:3943 +//line sql.y:4041 { yyLOCAL = &SubPartitionDefinition{Name: yyDollar[2].identifierCI, Options: yyDollar[3].subPartitionDefinitionOptionsUnion()} } yyVAL.union = yyLOCAL - case 707: + case 719: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3948 +//line sql.y:4046 { yyLOCAL = &SubPartitionDefinitionOptions{} } yyVAL.union = yyLOCAL - case 708: + case 720: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3952 +//line sql.y:4050 { yyDollar[1].subPartitionDefinitionOptionsUnion().Comment = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 709: + case 721: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3957 +//line sql.y:4055 { yyDollar[1].subPartitionDefinitionOptionsUnion().Engine = yyDollar[2].partitionEngineUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 710: + case 722: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3962 +//line sql.y:4060 { yyDollar[1].subPartitionDefinitionOptionsUnion().DataDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 711: + case 723: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3967 +//line sql.y:4065 { yyDollar[1].subPartitionDefinitionOptionsUnion().IndexDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 712: + case 724: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3972 +//line sql.y:4070 { val := yyDollar[2].integerUnion() yyDollar[1].subPartitionDefinitionOptionsUnion().MaxRows = &val yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 713: + case 725: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3978 +//line sql.y:4076 { val := yyDollar[2].integerUnion() yyDollar[1].subPartitionDefinitionOptionsUnion().MinRows = &val yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 714: + case 726: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:3984 +//line sql.y:4082 { yyDollar[1].subPartitionDefinitionOptionsUnion().TableSpace = yyDollar[2].str yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 715: + case 727: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionValueRange -//line sql.y:3991 +//line sql.y:4089 { yyLOCAL = &PartitionValueRange{ Type: LessThanType, @@ -14429,10 +14516,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 716: + case 728: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionValueRange -//line sql.y:3998 +//line sql.y:4096 { yyLOCAL = &PartitionValueRange{ Type: LessThanType, @@ -14440,10 +14527,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 717: + case 729: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionValueRange -//line sql.y:4005 +//line sql.y:4103 { yyLOCAL = &PartitionValueRange{ Type: InType, @@ -14451,131 +14538,131 @@ yydefault: } } yyVAL.union = yyLOCAL - case 718: + case 730: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4013 +//line sql.y:4111 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 719: + case 731: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4017 +//line sql.y:4115 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 720: + case 732: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionEngine -//line sql.y:4023 +//line sql.y:4121 { yyLOCAL = &PartitionEngine{Storage: yyDollar[1].booleanUnion(), Name: yyDollar[4].identifierCS.String()} } yyVAL.union = yyLOCAL - case 721: + case 733: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Literal -//line sql.y:4029 +//line sql.y:4127 { yyLOCAL = NewStrLiteral(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 722: + case 734: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Literal -//line sql.y:4035 +//line sql.y:4133 { yyLOCAL = NewStrLiteral(yyDollar[4].str) } yyVAL.union = yyLOCAL - case 723: + case 735: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Literal -//line sql.y:4041 +//line sql.y:4139 { yyLOCAL = NewStrLiteral(yyDollar[4].str) } yyVAL.union = yyLOCAL - case 724: + case 736: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:4047 +//line sql.y:4145 { yyLOCAL = convertStringToInt(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 725: + case 737: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:4053 +//line sql.y:4151 { yyLOCAL = convertStringToInt(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 726: + case 738: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4059 +//line sql.y:4157 { yyVAL.str = yyDollar[3].identifierCS.String() } - case 727: + case 739: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinition -//line sql.y:4065 +//line sql.y:4163 { yyLOCAL = &PartitionDefinition{Name: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 728: + case 740: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4071 +//line sql.y:4169 { yyVAL.str = "" } - case 729: + case 741: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4075 +//line sql.y:4173 { yyVAL.str = "" } - case 730: + case 742: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4081 +//line sql.y:4179 { yyLOCAL = &RenameTable{TablePairs: yyDollar[3].renameTablePairsUnion()} } yyVAL.union = yyLOCAL - case 731: + case 743: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*RenameTablePair -//line sql.y:4087 +//line sql.y:4185 { yyLOCAL = []*RenameTablePair{{FromTable: yyDollar[1].tableName, ToTable: yyDollar[3].tableName}} } yyVAL.union = yyLOCAL - case 732: + case 744: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:4091 +//line sql.y:4189 { yySLICE := (*[]*RenameTablePair)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, &RenameTablePair{FromTable: yyDollar[3].tableName, ToTable: yyDollar[5].tableName}) } - case 733: + case 745: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4097 +//line sql.y:4195 { yyLOCAL = &DropTable{FromTables: yyDollar[6].tableNamesUnion(), IfExists: yyDollar[5].booleanUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), Temp: yyDollar[3].booleanUnion()} } yyVAL.union = yyLOCAL - case 734: + case 746: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4101 +//line sql.y:4199 { // Change this to an alter statement if yyDollar[4].identifierCI.Lowered() == "primary" { @@ -14585,1444 +14672,1444 @@ yydefault: } } yyVAL.union = yyLOCAL - case 735: + case 747: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:4110 +//line sql.y:4208 { yyLOCAL = &DropView{FromTables: yyDollar[5].tableNamesUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), IfExists: yyDollar[4].booleanUnion()} } yyVAL.union = yyLOCAL - case 736: + case 748: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4114 +//line sql.y:4212 { yyLOCAL = &DropDatabase{Comments: Comments(yyDollar[2].strs).Parsed(), DBName: yyDollar[5].identifierCS, IfExists: yyDollar[4].booleanUnion()} } yyVAL.union = yyLOCAL - case 737: + case 749: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4120 +//line sql.y:4218 { yyLOCAL = &TruncateTable{Table: yyDollar[3].tableName} } yyVAL.union = yyLOCAL - case 738: + case 750: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4124 +//line sql.y:4222 { yyLOCAL = &TruncateTable{Table: yyDollar[2].tableName} } yyVAL.union = yyLOCAL - case 739: + case 751: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4130 +//line sql.y:4228 { yyLOCAL = &OtherRead{} } yyVAL.union = yyLOCAL - case 740: + case 752: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4136 +//line sql.y:4234 { yyLOCAL = &CheckTable{Tables: yyDollar[3].tableNamesUnion(), Options: yyDollar[4].checkOptionsUnion()} } yyVAL.union = yyLOCAL - case 741: + case 753: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableNames -//line sql.y:4142 +//line sql.y:4240 { yyLOCAL = TableNames{yyDollar[1].tableName} } yyVAL.union = yyLOCAL - case 742: + case 754: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4146 +//line sql.y:4244 { yySLICE := (*TableNames)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableName) } - case 743: + case 755: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4152 +//line sql.y:4250 { yyLOCAL = &Kill{Type: KillConnection, ConnID: NewIntLiteral(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 744: + case 756: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4156 +//line sql.y:4254 { yyLOCAL = &Kill{Type: KillQuery, ConnID: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 745: + case 757: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4160 +//line sql.y:4258 { yyLOCAL = &Kill{Type: KillConnection, ConnID: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 746: + case 758: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4166 +//line sql.y:4264 { yyLOCAL = &Reload{Type: ReloadUsers} } yyVAL.union = yyLOCAL - case 747: + case 759: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4170 +//line sql.y:4268 { yyLOCAL = &Reload{Type: ReloadPrivileges} } yyVAL.union = yyLOCAL - case 748: + case 760: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4176 +//line sql.y:4274 { yyLOCAL = &Show{&ShowBasic{Command: Charset, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 749: + case 761: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4180 +//line sql.y:4278 { yyLOCAL = &Show{&ShowBasic{Command: LastSeenGTID}} } yyVAL.union = yyLOCAL - case 750: + case 762: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4184 +//line sql.y:4282 { yyLOCAL = &Show{&ShowBasic{Command: FailPoints}} } yyVAL.union = yyLOCAL - case 751: + case 763: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4188 +//line sql.y:4286 { yyLOCAL = &Show{&ShowBasic{Command: Collation, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 752: + case 764: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4192 +//line sql.y:4290 { yyLOCAL = &Show{&ShowBasic{Full: yyDollar[2].booleanUnion(), Command: Column, Tbl: yyDollar[5].tableName, DbName: yyDollar[6].identifierCS, Filter: yyDollar[7].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 753: + case 765: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4196 +//line sql.y:4294 { yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 754: + case 766: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4200 +//line sql.y:4298 { yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 755: + case 767: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4204 +//line sql.y:4302 { yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 756: + case 768: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4208 +//line sql.y:4306 { yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 757: + case 769: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4212 +//line sql.y:4310 { yyLOCAL = &Show{&ShowBasic{Command: Function, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 758: + case 770: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4216 +//line sql.y:4314 { yyLOCAL = &Show{&ShowBasic{Command: Index, Tbl: yyDollar[5].tableName, DbName: yyDollar[6].identifierCS, Filter: yyDollar[7].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 759: + case 771: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4220 +//line sql.y:4318 { yyLOCAL = &Show{&ShowBasic{Command: OpenTable, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 760: + case 772: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4224 +//line sql.y:4322 { yyLOCAL = &Show{&ShowBasic{Command: Privilege}} } yyVAL.union = yyLOCAL - case 761: + case 773: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4228 +//line sql.y:4326 { yyLOCAL = &Show{&ShowBasic{Command: Procedure, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 762: + case 774: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4232 +//line sql.y:4330 { yyLOCAL = &Show{&ShowBasic{Command: StatusSession, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 763: + case 775: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4236 +//line sql.y:4334 { yyLOCAL = &Show{&ShowBasic{Command: StatusGlobal, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 764: + case 776: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4240 +//line sql.y:4338 { yyLOCAL = &Show{&ShowBasic{Command: VariableSession, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 765: + case 777: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4244 +//line sql.y:4342 { yyLOCAL = &Show{&ShowBasic{Command: VariableGlobal, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 766: + case 778: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4248 +//line sql.y:4346 { yyLOCAL = &Show{&ShowBasic{Command: TableStatus, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 767: + case 779: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4252 +//line sql.y:4350 { yyLOCAL = &Show{&ShowBasic{Command: Table, Full: yyDollar[2].booleanUnion(), DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 768: + case 780: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4256 +//line sql.y:4354 { yyLOCAL = &Show{&ShowBasic{Command: Trigger, DbName: yyDollar[3].identifierCS, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 769: + case 781: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4260 +//line sql.y:4358 { yyLOCAL = &Show{&ShowCreate{Command: CreateDb, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 770: + case 782: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4264 +//line sql.y:4362 { yyLOCAL = &Show{&ShowCreate{Command: CreateE, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 771: + case 783: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4268 +//line sql.y:4366 { yyLOCAL = &Show{&ShowCreate{Command: CreateF, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 772: + case 784: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4272 +//line sql.y:4370 { yyLOCAL = &Show{&ShowCreate{Command: CreateProc, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 773: + case 785: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4276 +//line sql.y:4374 { yyLOCAL = &Show{&ShowCreate{Command: CreateTbl, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 774: + case 786: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4280 +//line sql.y:4378 { yyLOCAL = &Show{&ShowCreate{Command: CreateTr, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 775: + case 787: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4284 +//line sql.y:4382 { yyLOCAL = &Show{&ShowCreate{Command: CreateV, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 776: + case 788: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4288 +//line sql.y:4386 { yyLOCAL = &Show{&ShowBasic{Command: Engines}} } yyVAL.union = yyLOCAL - case 777: + case 789: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4292 +//line sql.y:4390 { yyLOCAL = &Show{&ShowBasic{Command: Plugins}} } yyVAL.union = yyLOCAL - case 778: + case 790: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4296 +//line sql.y:4394 { yyLOCAL = &Show{&ShowBasic{Command: GtidExecGlobal, DbName: yyDollar[4].identifierCS}} } yyVAL.union = yyLOCAL - case 779: + case 791: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4300 +//line sql.y:4398 { yyLOCAL = &Show{&ShowBasic{Command: VGtidExecGlobal, DbName: yyDollar[4].identifierCS}} } yyVAL.union = yyLOCAL - case 780: + case 792: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4304 +//line sql.y:4402 { yyLOCAL = &Show{&ShowBasic{Command: VitessVariables, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 781: + case 793: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4308 +//line sql.y:4406 { yyLOCAL = &Show{&ShowBasic{Command: VitessMigrations, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL - case 782: + case 794: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4312 +//line sql.y:4410 { yyLOCAL = &Show{&ShowBasic{Command: VitessMigrations, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL - case 783: + case 795: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4316 +//line sql.y:4414 { yyLOCAL = &Show{&ShowBasic{Command: DMLJobs, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL - case 784: + case 796: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4320 +//line sql.y:4418 { yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 785: + case 797: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4324 +//line sql.y:4422 { yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 786: + case 798: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4328 +//line sql.y:4426 { yyLOCAL = &ShowThrottledApps{} } yyVAL.union = yyLOCAL - case 787: + case 799: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4332 +//line sql.y:4430 { yyLOCAL = &Show{&ShowBasic{Command: VitessReplicationStatus, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 788: + case 800: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4336 +//line sql.y:4434 { yyLOCAL = &ShowThrottlerStatus{} } yyVAL.union = yyLOCAL - case 789: + case 801: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4340 +//line sql.y:4438 { yyLOCAL = &Show{&ShowBasic{Command: VschemaTables}} } yyVAL.union = yyLOCAL - case 790: + case 802: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4344 +//line sql.y:4442 { yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes}} } yyVAL.union = yyLOCAL - case 791: + case 803: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4348 +//line sql.y:4446 { yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes, Tbl: yyDollar[5].tableName}} } yyVAL.union = yyLOCAL - case 792: + case 804: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4352 +//line sql.y:4450 { yyLOCAL = &Show{&ShowBasic{Command: Warnings}} } yyVAL.union = yyLOCAL - case 793: + case 805: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4356 +//line sql.y:4454 { yyLOCAL = &Show{&ShowBasic{Command: VitessShards, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 794: + case 806: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4360 +//line sql.y:4458 { yyLOCAL = &Show{&ShowBasic{Command: VitessTablets, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 795: + case 807: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4364 +//line sql.y:4462 { yyLOCAL = &Show{&ShowBasic{Command: VitessTarget}} } yyVAL.union = yyLOCAL - case 796: + case 808: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4368 +//line sql.y:4466 { yyLOCAL = &Show{&ShowBasic{Command: Workload}} } yyVAL.union = yyLOCAL - case 797: + case 809: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4375 +//line sql.y:4473 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].identifierCI.String())}} } yyVAL.union = yyLOCAL - case 798: + case 810: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4379 +//line sql.y:4477 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL - case 799: + case 811: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4383 +//line sql.y:4481 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String()}} } yyVAL.union = yyLOCAL - case 800: + case 812: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4387 +//line sql.y:4485 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL - case 801: + case 813: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4391 +//line sql.y:4489 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}} } yyVAL.union = yyLOCAL - case 802: + case 814: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4395 +//line sql.y:4493 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}} } yyVAL.union = yyLOCAL - case 803: + case 815: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4399 +//line sql.y:4497 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}} } yyVAL.union = yyLOCAL - case 804: + case 816: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4403 +//line sql.y:4501 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL - case 805: + case 817: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4407 +//line sql.y:4505 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}} } yyVAL.union = yyLOCAL - case 806: + case 818: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4413 +//line sql.y:4511 { yyVAL.str = "" } - case 807: + case 819: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4417 +//line sql.y:4515 { yyVAL.str = "extended " } - case 808: + case 820: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4423 +//line sql.y:4521 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 809: + case 821: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4427 +//line sql.y:4525 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 810: + case 822: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4433 +//line sql.y:4531 { yyVAL.str = string(yyDollar[1].str) } - case 811: + case 823: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4437 +//line sql.y:4535 { yyVAL.str = string(yyDollar[1].str) } - case 812: + case 824: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4443 +//line sql.y:4541 { yyVAL.identifierCS = NewIdentifierCS("") } - case 813: + case 825: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4447 +//line sql.y:4545 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 814: + case 826: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4451 +//line sql.y:4549 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 815: + case 827: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4457 +//line sql.y:4555 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 816: + case 828: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4461 +//line sql.y:4559 { yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 817: + case 829: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4465 +//line sql.y:4563 { yyLOCAL = &ShowFilter{Filter: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 818: + case 830: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4471 +//line sql.y:4569 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 819: + case 831: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4475 +//line sql.y:4573 { yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 820: + case 832: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4481 +//line sql.y:4579 { yyVAL.empty = struct{}{} } - case 821: + case 833: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4485 +//line sql.y:4583 { yyVAL.empty = struct{}{} } - case 822: + case 834: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4489 +//line sql.y:4587 { yyVAL.empty = struct{}{} } - case 823: + case 835: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4495 +//line sql.y:4593 { yyVAL.str = string(yyDollar[1].str) } - case 824: + case 836: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4499 +//line sql.y:4597 { yyVAL.str = string(yyDollar[1].str) } - case 825: + case 837: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4505 +//line sql.y:4603 { yyLOCAL = &Use{DBName: yyDollar[2].identifierCS} } yyVAL.union = yyLOCAL - case 826: + case 838: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4509 +//line sql.y:4607 { yyLOCAL = &Use{DBName: IdentifierCS{v: ""}} } yyVAL.union = yyLOCAL - case 827: + case 839: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4513 +//line sql.y:4611 { yyLOCAL = &Use{DBName: NewIdentifierCS(yyDollar[2].identifierCS.String() + "@" + string(yyDollar[3].str))} } yyVAL.union = yyLOCAL - case 828: + case 840: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4520 +//line sql.y:4618 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 829: + case 841: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4524 +//line sql.y:4622 { yyVAL.identifierCS = NewIdentifierCS("@" + string(yyDollar[1].str)) } - case 830: + case 842: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4528 +//line sql.y:4626 { yyVAL.identifierCS = NewIdentifierCS("@@" + string(yyDollar[1].str)) } - case 831: + case 843: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4532 +//line sql.y:4630 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 832: + case 844: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4539 +//line sql.y:4637 { yyLOCAL = &Begin{} } yyVAL.union = yyLOCAL - case 833: + case 845: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4543 +//line sql.y:4641 { yyLOCAL = &Begin{TxAccessModes: yyDollar[3].txAccessModesUnion()} } yyVAL.union = yyLOCAL - case 834: + case 846: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4548 +//line sql.y:4646 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 835: + case 847: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4552 +//line sql.y:4650 { yyLOCAL = yyDollar[1].txAccessModesUnion() } yyVAL.union = yyLOCAL - case 836: + case 848: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4558 +//line sql.y:4656 { yyLOCAL = []TxAccessMode{yyDollar[1].txAccessModeUnion()} } yyVAL.union = yyLOCAL - case 837: + case 849: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4562 +//line sql.y:4660 { yySLICE := (*[]TxAccessMode)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].txAccessModeUnion()) } - case 838: + case 850: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4568 +//line sql.y:4666 { yyLOCAL = WithConsistentSnapshot } yyVAL.union = yyLOCAL - case 839: + case 851: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4572 +//line sql.y:4670 { yyLOCAL = ReadWrite } yyVAL.union = yyLOCAL - case 840: + case 852: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4576 +//line sql.y:4674 { yyLOCAL = ReadOnly } yyVAL.union = yyLOCAL - case 841: + case 853: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4583 +//line sql.y:4681 { yyLOCAL = &Commit{} } yyVAL.union = yyLOCAL - case 842: + case 854: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4589 +//line sql.y:4687 { yyLOCAL = &Rollback{} } yyVAL.union = yyLOCAL - case 843: + case 855: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4593 +//line sql.y:4691 { yyLOCAL = &SRollback{Name: yyDollar[5].identifierCI} } yyVAL.union = yyLOCAL - case 844: + case 856: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4598 +//line sql.y:4696 { yyVAL.empty = struct{}{} } - case 845: + case 857: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4600 +//line sql.y:4698 { yyVAL.empty = struct{}{} } - case 846: + case 858: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4603 +//line sql.y:4701 { yyVAL.empty = struct{}{} } - case 847: + case 859: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4605 +//line sql.y:4703 { yyVAL.empty = struct{}{} } - case 848: + case 860: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4609 +//line sql.y:4707 { yyLOCAL = &Savepoint{Name: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 849: + case 861: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4615 +//line sql.y:4713 { yyLOCAL = &Release{Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 850: + case 862: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4620 +//line sql.y:4718 { yyLOCAL = EmptyType } yyVAL.union = yyLOCAL - case 851: + case 863: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4624 +//line sql.y:4722 { yyLOCAL = JSONType } yyVAL.union = yyLOCAL - case 852: + case 864: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4628 +//line sql.y:4726 { yyLOCAL = TreeType } yyVAL.union = yyLOCAL - case 853: + case 865: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4632 +//line sql.y:4730 { yyLOCAL = VitessType } yyVAL.union = yyLOCAL - case 854: + case 866: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4636 +//line sql.y:4734 { yyLOCAL = VTExplainType } yyVAL.union = yyLOCAL - case 855: + case 867: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4640 +//line sql.y:4738 { yyLOCAL = TraditionalType } yyVAL.union = yyLOCAL - case 856: + case 868: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4644 +//line sql.y:4742 { yyLOCAL = AnalyzeType } yyVAL.union = yyLOCAL - case 857: + case 869: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4649 +//line sql.y:4747 { yyLOCAL = PlanVExplainType } yyVAL.union = yyLOCAL - case 858: + case 870: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4653 +//line sql.y:4751 { yyLOCAL = PlanVExplainType } yyVAL.union = yyLOCAL - case 859: + case 871: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4657 +//line sql.y:4755 { yyLOCAL = AllVExplainType } yyVAL.union = yyLOCAL - case 860: + case 872: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4661 +//line sql.y:4759 { yyLOCAL = QueriesVExplainType } yyVAL.union = yyLOCAL - case 861: + case 873: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4667 +//line sql.y:4765 { yyVAL.str = yyDollar[1].str } - case 862: + case 874: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4671 +//line sql.y:4769 { yyVAL.str = yyDollar[1].str } - case 863: + case 875: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4675 +//line sql.y:4773 { yyVAL.str = yyDollar[1].str } - case 864: + case 876: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4681 +//line sql.y:4779 { yyLOCAL = yyDollar[1].selStmtUnion() } yyVAL.union = yyLOCAL - case 865: + case 877: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4685 +//line sql.y:4783 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 866: + case 878: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4689 +//line sql.y:4787 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 867: + case 879: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4693 +//line sql.y:4791 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 868: + case 880: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4698 +//line sql.y:4796 { yyVAL.str = "" } - case 869: + case 881: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4702 +//line sql.y:4800 { yyVAL.str = yyDollar[1].identifierCI.val } - case 870: + case 882: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4706 +//line sql.y:4804 { yyVAL.str = encodeSQLString(yyDollar[1].str) } - case 871: + case 883: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4712 +//line sql.y:4810 { yyLOCAL = &ExplainTab{Table: yyDollar[3].tableName, Wild: yyDollar[4].str} } yyVAL.union = yyLOCAL - case 872: + case 884: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4716 +//line sql.y:4814 { yyLOCAL = &ExplainStmt{Type: yyDollar[3].explainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()} } yyVAL.union = yyLOCAL - case 873: + case 885: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4722 +//line sql.y:4820 { yyLOCAL = &VExplainStmt{Type: yyDollar[3].vexplainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()} } yyVAL.union = yyLOCAL - case 874: + case 886: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4728 +//line sql.y:4826 { yyLOCAL = &OtherAdmin{} } yyVAL.union = yyLOCAL - case 875: + case 887: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4732 +//line sql.y:4830 { yyLOCAL = &OtherAdmin{} } yyVAL.union = yyLOCAL - case 876: + case 888: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4738 +//line sql.y:4836 { yyLOCAL = &LockTables{Tables: yyDollar[3].tableAndLockTypesUnion()} } yyVAL.union = yyLOCAL - case 877: + case 889: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableAndLockTypes -//line sql.y:4744 +//line sql.y:4842 { yyLOCAL = TableAndLockTypes{yyDollar[1].tableAndLockTypeUnion()} } yyVAL.union = yyLOCAL - case 878: + case 890: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4748 +//line sql.y:4846 { yySLICE := (*TableAndLockTypes)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableAndLockTypeUnion()) } - case 879: + case 891: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *TableAndLockType -//line sql.y:4754 +//line sql.y:4852 { yyLOCAL = &TableAndLockType{Table: yyDollar[1].aliasedTableNameUnion(), Lock: yyDollar[2].lockTypeUnion()} } yyVAL.union = yyLOCAL - case 880: + case 892: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LockType -//line sql.y:4760 +//line sql.y:4858 { yyLOCAL = Read } yyVAL.union = yyLOCAL - case 881: + case 893: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL LockType -//line sql.y:4764 +//line sql.y:4862 { yyLOCAL = ReadLocal } yyVAL.union = yyLOCAL - case 882: + case 894: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LockType -//line sql.y:4768 +//line sql.y:4866 { yyLOCAL = Write } yyVAL.union = yyLOCAL - case 883: + case 895: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL LockType -//line sql.y:4772 +//line sql.y:4870 { yyLOCAL = LowPriorityWrite } yyVAL.union = yyLOCAL - case 884: + case 896: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4778 +//line sql.y:4876 { yyLOCAL = &UnlockTables{} } yyVAL.union = yyLOCAL - case 885: + case 897: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4784 +//line sql.y:4882 { yyLOCAL = &RevertMigration{Comments: Comments(yyDollar[2].strs).Parsed(), UUID: string(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 886: + case 898: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4788 +//line sql.y:4886 { yyLOCAL = &RevertMigration{Comments: Comments(yyDollar[2].strs).Parsed(), UUID: string(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 887: + case 899: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4794 +//line sql.y:4892 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), FlushOptions: yyDollar[3].strs} } yyVAL.union = yyLOCAL - case 888: + case 900: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4798 +//line sql.y:4896 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion()} } yyVAL.union = yyLOCAL - case 889: + case 901: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:4802 +//line sql.y:4900 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), WithLock: true} } yyVAL.union = yyLOCAL - case 890: + case 902: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4806 +//line sql.y:4904 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion()} } yyVAL.union = yyLOCAL - case 891: + case 903: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4810 +//line sql.y:4908 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), WithLock: true} } yyVAL.union = yyLOCAL - case 892: + case 904: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:4814 +//line sql.y:4912 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), ForExport: true} } yyVAL.union = yyLOCAL - case 893: + case 905: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4820 +//line sql.y:4918 { yyVAL.strs = []string{yyDollar[1].str} } - case 894: + case 906: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4824 +//line sql.y:4922 { yyVAL.strs = append(yyDollar[1].strs, yyDollar[3].str) } - case 895: + case 907: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4830 +//line sql.y:4928 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 896: + case 908: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4834 +//line sql.y:4932 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 897: + case 909: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4838 +//line sql.y:4936 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 898: + case 910: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4842 +//line sql.y:4940 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 899: + case 911: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4846 +//line sql.y:4944 { yyVAL.str = string(yyDollar[1].str) } - case 900: + case 912: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4850 +//line sql.y:4948 { yyVAL.str = string(yyDollar[1].str) } - case 901: + case 913: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4854 +//line sql.y:4952 { yyVAL.str = string(yyDollar[1].str) } - case 902: + case 914: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4858 +//line sql.y:4956 { yyVAL.str = string(yyDollar[1].str) } - case 903: + case 915: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4862 +//line sql.y:4960 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) + yyDollar[3].str } - case 904: + case 916: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4866 +//line sql.y:4964 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 905: + case 917: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4870 +//line sql.y:4968 { yyVAL.str = string(yyDollar[1].str) } - case 906: + case 918: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4874 +//line sql.y:4972 { yyVAL.str = string(yyDollar[1].str) } - case 907: + case 919: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4878 +//line sql.y:4976 { yyVAL.str = string(yyDollar[1].str) } - case 908: + case 920: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4883 +//line sql.y:4981 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 909: + case 921: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4887 +//line sql.y:4985 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 910: + case 922: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4891 +//line sql.y:4989 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 911: + case 923: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4896 +//line sql.y:4994 { yyVAL.str = "" } - case 912: + case 924: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4900 +//line sql.y:4998 { yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String() } - case 913: + case 925: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4905 +//line sql.y:5003 { setAllowComments(yylex, true) } - case 914: + case 926: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4909 +//line sql.y:5007 { yyVAL.strs = yyDollar[2].strs setAllowComments(yylex, false) } - case 915: + case 927: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4915 +//line sql.y:5013 { yyVAL.strs = nil } - case 916: + case 928: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4919 +//line sql.y:5017 { yyVAL.strs = append(yyDollar[1].strs, yyDollar[2].str) } - case 917: + case 929: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4925 +//line sql.y:5023 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 918: + case 930: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:4929 +//line sql.y:5027 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 919: + case 931: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:4933 +//line sql.y:5031 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 920: + case 932: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4938 +//line sql.y:5036 { yyVAL.str = "" } - case 921: + case 933: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4942 +//line sql.y:5040 { yyVAL.str = SQLNoCacheStr } - case 922: + case 934: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4946 +//line sql.y:5044 { yyVAL.str = SQLCacheStr } - case 923: + case 935: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4951 +//line sql.y:5049 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 924: + case 936: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4955 +//line sql.y:5053 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 925: + case 937: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4959 +//line sql.y:5057 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 926: + case 938: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4965 +//line sql.y:5063 { yyLOCAL = &PrepareStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Statement: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 927: + case 939: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4969 +//line sql.y:5067 { yyLOCAL = &PrepareStmt{ Name: yyDollar[3].identifierCI, @@ -16031,595 +16118,595 @@ yydefault: } } yyVAL.union = yyLOCAL - case 928: + case 940: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4979 +//line sql.y:5077 { yyLOCAL = &ExecuteStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Arguments: yyDollar[4].variablesUnion()} } yyVAL.union = yyLOCAL - case 929: + case 941: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*Variable -//line sql.y:4984 +//line sql.y:5082 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 930: + case 942: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []*Variable -//line sql.y:4988 +//line sql.y:5086 { yyLOCAL = yyDollar[2].variablesUnion() } yyVAL.union = yyLOCAL - case 931: + case 943: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4994 +//line sql.y:5092 { yyLOCAL = &DeallocateStmt{Type: DeallocateType, Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI} } yyVAL.union = yyLOCAL - case 932: + case 944: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4998 +//line sql.y:5096 { yyLOCAL = &DeallocateStmt{Type: DropType, Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI} } yyVAL.union = yyLOCAL - case 933: + case 945: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL SelectExprs -//line sql.y:5003 +//line sql.y:5101 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 934: + case 946: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExprs -//line sql.y:5007 +//line sql.y:5105 { yyLOCAL = yyDollar[1].selectExprsUnion() } yyVAL.union = yyLOCAL - case 935: + case 947: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5012 +//line sql.y:5110 { yyVAL.strs = nil } - case 936: + case 948: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5016 +//line sql.y:5114 { yyVAL.strs = []string{yyDollar[1].str} } - case 937: + case 949: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5020 +//line sql.y:5118 { // TODO: This is a hack since I couldn't get it to work in a nicer way. I got 'conflicts: 8 shift/reduce' yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str} } - case 938: + case 950: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5024 +//line sql.y:5122 { yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str} } - case 939: + case 951: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:5028 +//line sql.y:5126 { yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str, yyDollar[4].str} } - case 940: + case 952: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5034 +//line sql.y:5132 { yyVAL.str = SQLNoCacheStr } - case 941: + case 953: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5038 +//line sql.y:5136 { yyVAL.str = SQLCacheStr } - case 942: + case 954: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5042 +//line sql.y:5140 { yyVAL.str = DistinctStr } - case 943: + case 955: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5046 +//line sql.y:5144 { yyVAL.str = DistinctStr } - case 944: + case 956: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5050 +//line sql.y:5148 { yyVAL.str = StraightJoinHint } - case 945: + case 957: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5054 +//line sql.y:5152 { yyVAL.str = SQLCalcFoundRowsStr } - case 946: + case 958: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5058 +//line sql.y:5156 { yyVAL.str = AllStr // These are not picked up by NewSelect, and so ALL will be dropped. But this is OK, since it's redundant anyway } - case 947: + case 959: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExprs -//line sql.y:5064 +//line sql.y:5162 { yyLOCAL = SelectExprs{yyDollar[1].selectExprUnion()} } yyVAL.union = yyLOCAL - case 948: + case 960: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5068 +//line sql.y:5166 { yySLICE := (*SelectExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].selectExprUnion()) } - case 949: + case 961: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5074 +//line sql.y:5172 { yyLOCAL = &StarExpr{} } yyVAL.union = yyLOCAL - case 950: + case 962: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5078 +//line sql.y:5176 { yyLOCAL = &AliasedExpr{Expr: yyDollar[1].exprUnion(), As: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 951: + case 963: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5082 +//line sql.y:5180 { yyLOCAL = &StarExpr{TableName: TableName{Name: yyDollar[1].identifierCS}} } yyVAL.union = yyLOCAL - case 952: + case 964: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5086 +//line sql.y:5184 { yyLOCAL = &StarExpr{TableName: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL - case 953: + case 965: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5091 +//line sql.y:5189 { yyVAL.identifierCI = IdentifierCI{} } - case 954: + case 966: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5095 +//line sql.y:5193 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 955: + case 967: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5099 +//line sql.y:5197 { yyVAL.identifierCI = yyDollar[2].identifierCI } - case 957: + case 969: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5106 +//line sql.y:5204 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 958: + case 970: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5111 +//line sql.y:5209 { yyLOCAL = TableExprs{&AliasedTableExpr{Expr: TableName{Name: NewIdentifierCS("dual")}}} } yyVAL.union = yyLOCAL - case 959: + case 971: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5115 +//line sql.y:5213 { yyLOCAL = yyDollar[1].tableExprsUnion() } yyVAL.union = yyLOCAL - case 960: + case 972: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5121 +//line sql.y:5219 { yyLOCAL = yyDollar[2].tableExprsUnion() } yyVAL.union = yyLOCAL - case 961: + case 973: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5127 +//line sql.y:5225 { yyLOCAL = TableExprs{yyDollar[1].tableExprUnion()} } yyVAL.union = yyLOCAL - case 962: + case 974: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5131 +//line sql.y:5229 { yySLICE := (*TableExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableExprUnion()) } - case 965: + case 977: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5141 +//line sql.y:5239 { yyLOCAL = yyDollar[1].aliasedTableNameUnion() } yyVAL.union = yyLOCAL - case 966: + case 978: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5145 +//line sql.y:5243 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].derivedTableUnion(), As: yyDollar[3].identifierCS, Columns: yyDollar[4].columnsUnion()} } yyVAL.union = yyLOCAL - case 967: + case 979: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5149 +//line sql.y:5247 { yyLOCAL = &ParenTableExpr{Exprs: yyDollar[2].tableExprsUnion()} } yyVAL.union = yyLOCAL - case 968: + case 980: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5153 +//line sql.y:5251 { yyLOCAL = yyDollar[1].tableExprUnion() } yyVAL.union = yyLOCAL - case 969: + case 981: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *DerivedTable -//line sql.y:5159 +//line sql.y:5257 { yyLOCAL = &DerivedTable{Lateral: false, Select: yyDollar[1].selStmtUnion()} } yyVAL.union = yyLOCAL - case 970: + case 982: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *DerivedTable -//line sql.y:5163 +//line sql.y:5261 { yyLOCAL = &DerivedTable{Lateral: true, Select: yyDollar[2].selStmtUnion()} } yyVAL.union = yyLOCAL - case 971: + case 983: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *AliasedTableExpr -//line sql.y:5169 +//line sql.y:5267 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, As: yyDollar[2].identifierCS, Hints: yyDollar[3].indexHintsUnion()} } yyVAL.union = yyLOCAL - case 972: + case 984: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *AliasedTableExpr -//line sql.y:5173 +//line sql.y:5271 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, Partitions: yyDollar[4].partitionsUnion(), As: yyDollar[6].identifierCS, Hints: yyDollar[7].indexHintsUnion()} } yyVAL.union = yyLOCAL - case 973: + case 985: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Columns -//line sql.y:5178 +//line sql.y:5276 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 974: + case 986: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Columns -//line sql.y:5182 +//line sql.y:5280 { yyLOCAL = yyDollar[2].columnsUnion() } yyVAL.union = yyLOCAL - case 975: + case 987: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Columns -//line sql.y:5187 +//line sql.y:5285 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 976: + case 988: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5191 +//line sql.y:5289 { yyLOCAL = yyDollar[1].columnsUnion() } yyVAL.union = yyLOCAL - case 977: + case 989: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5197 +//line sql.y:5295 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 978: + case 990: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5201 +//line sql.y:5299 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 979: + case 991: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*Variable -//line sql.y:5207 +//line sql.y:5305 { yyLOCAL = []*Variable{yyDollar[1].variableUnion()} } yyVAL.union = yyLOCAL - case 980: + case 992: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5211 +//line sql.y:5309 { yySLICE := (*[]*Variable)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].variableUnion()) } - case 981: + case 993: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5217 +//line sql.y:5315 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 982: + case 994: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5221 +//line sql.y:5319 { yyLOCAL = Columns{NewIdentifierCI(string(yyDollar[1].str))} } yyVAL.union = yyLOCAL - case 983: + case 995: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5225 +//line sql.y:5323 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 984: + case 996: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5229 +//line sql.y:5327 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, NewIdentifierCI(string(yyDollar[3].str))) } - case 985: + case 997: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Partitions -//line sql.y:5235 +//line sql.y:5333 { yyLOCAL = Partitions{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 986: + case 998: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5239 +//line sql.y:5337 { yySLICE := (*Partitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 987: + case 999: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5252 +//line sql.y:5350 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 988: + case 1000: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5256 +//line sql.y:5354 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 989: + case 1001: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5260 +//line sql.y:5358 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 990: + case 1002: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5264 +//line sql.y:5362 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion()} } yyVAL.union = yyLOCAL - case 991: + case 1003: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5270 +//line sql.y:5368 { yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()} } - case 992: + case 1004: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:5272 +//line sql.y:5370 { yyVAL.joinCondition = &JoinCondition{Using: yyDollar[3].columnsUnion()} } - case 993: + case 1005: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5276 +//line sql.y:5374 { yyVAL.joinCondition = &JoinCondition{} } - case 994: + case 1006: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5278 +//line sql.y:5376 { yyVAL.joinCondition = yyDollar[1].joinCondition } - case 995: + case 1007: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5282 +//line sql.y:5380 { yyVAL.joinCondition = &JoinCondition{} } - case 996: + case 1008: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5284 +//line sql.y:5382 { yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()} } - case 997: + case 1009: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5287 +//line sql.y:5385 { yyVAL.empty = struct{}{} } - case 998: + case 1010: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5289 +//line sql.y:5387 { yyVAL.empty = struct{}{} } - case 999: + case 1011: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5292 +//line sql.y:5390 { yyVAL.identifierCS = NewIdentifierCS("") } - case 1000: + case 1012: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5296 +//line sql.y:5394 { yyVAL.identifierCS = yyDollar[1].identifierCS } - case 1001: + case 1013: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5300 +//line sql.y:5398 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 1003: + case 1015: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5307 +//line sql.y:5405 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1004: + case 1016: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL JoinType -//line sql.y:5313 +//line sql.y:5411 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 1005: + case 1017: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5317 +//line sql.y:5415 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 1006: + case 1018: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5321 +//line sql.y:5419 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 1007: + case 1019: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL JoinType -//line sql.y:5327 +//line sql.y:5425 { yyLOCAL = StraightJoinType } yyVAL.union = yyLOCAL - case 1008: + case 1020: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5333 +//line sql.y:5431 { yyLOCAL = LeftJoinType } yyVAL.union = yyLOCAL - case 1009: + case 1021: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL JoinType -//line sql.y:5337 +//line sql.y:5435 { yyLOCAL = LeftJoinType } yyVAL.union = yyLOCAL - case 1010: + case 1022: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5341 +//line sql.y:5439 { yyLOCAL = RightJoinType } yyVAL.union = yyLOCAL - case 1011: + case 1023: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL JoinType -//line sql.y:5345 +//line sql.y:5443 { yyLOCAL = RightJoinType } yyVAL.union = yyLOCAL - case 1012: + case 1024: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5351 +//line sql.y:5449 { yyLOCAL = NaturalJoinType } yyVAL.union = yyLOCAL - case 1013: + case 1025: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5355 +//line sql.y:5453 { if yyDollar[2].joinTypeUnion() == LeftJoinType { yyLOCAL = NaturalLeftJoinType @@ -16628,593 +16715,593 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1014: + case 1026: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5365 +//line sql.y:5463 { yyVAL.tableName = yyDollar[2].tableName } - case 1015: + case 1027: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5369 +//line sql.y:5467 { yyVAL.tableName = yyDollar[1].tableName } - case 1016: + case 1028: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5375 +//line sql.y:5473 { yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS} } - case 1017: + case 1029: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5379 +//line sql.y:5477 { yyVAL.tableName = TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS} } - case 1018: + case 1030: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5385 +//line sql.y:5483 { yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS} } - case 1019: + case 1031: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5390 +//line sql.y:5488 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1020: + case 1032: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5394 +//line sql.y:5492 { yyLOCAL = yyDollar[1].indexHintsUnion() } yyVAL.union = yyLOCAL - case 1021: + case 1033: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5400 +//line sql.y:5498 { yyLOCAL = IndexHints{yyDollar[1].indexHintUnion()} } yyVAL.union = yyLOCAL - case 1022: + case 1034: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5404 +//line sql.y:5502 { yySLICE := (*IndexHints)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].indexHintUnion()) } - case 1023: + case 1035: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5410 +//line sql.y:5508 { yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 1024: + case 1036: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5414 +//line sql.y:5512 { yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion()} } yyVAL.union = yyLOCAL - case 1025: + case 1037: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5418 +//line sql.y:5516 { yyLOCAL = &IndexHint{Type: IgnoreOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 1026: + case 1038: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5422 +//line sql.y:5520 { yyLOCAL = &IndexHint{Type: ForceOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 1027: + case 1039: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5427 +//line sql.y:5525 { yyLOCAL = NoForType } yyVAL.union = yyLOCAL - case 1028: + case 1040: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5431 +//line sql.y:5529 { yyLOCAL = JoinForType } yyVAL.union = yyLOCAL - case 1029: + case 1041: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5435 +//line sql.y:5533 { yyLOCAL = OrderByForType } yyVAL.union = yyLOCAL - case 1030: + case 1042: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5439 +//line sql.y:5537 { yyLOCAL = GroupByForType } yyVAL.union = yyLOCAL - case 1031: + case 1043: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:5445 +//line sql.y:5543 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1032: + case 1044: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5449 +//line sql.y:5547 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1033: + case 1045: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5456 +//line sql.y:5554 { yyLOCAL = &OrExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1034: + case 1046: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5460 +//line sql.y:5558 { yyLOCAL = &XorExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1035: + case 1047: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5464 +//line sql.y:5562 { yyLOCAL = &AndExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1036: + case 1048: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5468 +//line sql.y:5566 { yyLOCAL = &NotExpr{Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1037: + case 1049: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5472 +//line sql.y:5570 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].isExprOperatorUnion()} } yyVAL.union = yyLOCAL - case 1038: + case 1050: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5476 +//line sql.y:5574 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1039: + case 1051: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5480 +//line sql.y:5578 { yyLOCAL = &MemberOfExpr{Value: yyDollar[1].exprUnion(), JSONArr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1040: + case 1052: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5486 +//line sql.y:5584 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNullOp} } yyVAL.union = yyLOCAL - case 1041: + case 1053: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5490 +//line sql.y:5588 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNotNullOp} } yyVAL.union = yyLOCAL - case 1042: + case 1054: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5494 +//line sql.y:5592 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1043: + case 1055: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5498 +//line sql.y:5596 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1044: + case 1056: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5504 +//line sql.y:5602 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: InOp, Right: yyDollar[3].colTupleUnion()} } yyVAL.union = yyLOCAL - case 1045: + case 1057: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5508 +//line sql.y:5606 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotInOp, Right: yyDollar[4].colTupleUnion()} } yyVAL.union = yyLOCAL - case 1046: + case 1058: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5512 +//line sql.y:5610 { yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: true, From: yyDollar[3].exprUnion(), To: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1047: + case 1059: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5516 +//line sql.y:5614 { yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: false, From: yyDollar[4].exprUnion(), To: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 1048: + case 1060: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5520 +//line sql.y:5618 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1049: + case 1061: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5524 +//line sql.y:5622 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1050: + case 1062: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5528 +//line sql.y:5626 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion(), Escape: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1051: + case 1063: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5532 +//line sql.y:5630 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion(), Escape: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 1052: + case 1064: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5536 +//line sql.y:5634 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: RegexpOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1053: + case 1065: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5540 +//line sql.y:5638 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotRegexpOp, Right: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1054: + case 1066: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5544 +//line sql.y:5642 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1055: + case 1067: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5550 +//line sql.y:5648 { } - case 1056: + case 1068: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5553 +//line sql.y:5651 { } - case 1057: + case 1069: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5559 +//line sql.y:5657 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitOrOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1058: + case 1070: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5563 +//line sql.y:5661 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitAndOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1059: + case 1071: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5567 +//line sql.y:5665 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftLeftOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1060: + case 1072: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5571 +//line sql.y:5669 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftRightOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1061: + case 1073: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5575 +//line sql.y:5673 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: PlusOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1062: + case 1074: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5579 +//line sql.y:5677 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MinusOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1063: + case 1075: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5583 +//line sql.y:5681 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MultOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1064: + case 1076: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5587 +//line sql.y:5685 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: DivOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1065: + case 1077: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5591 +//line sql.y:5689 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1066: + case 1078: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5595 +//line sql.y:5693 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: IntDivOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1067: + case 1079: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5599 +//line sql.y:5697 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1068: + case 1080: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5603 +//line sql.y:5701 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitXorOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1069: + case 1081: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5607 +//line sql.y:5705 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1070: + case 1082: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5613 +//line sql.y:5711 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1071: + case 1083: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5617 +//line sql.y:5715 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1072: + case 1084: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5621 +//line sql.y:5719 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1073: + case 1085: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5625 +//line sql.y:5723 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1074: + case 1086: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5629 +//line sql.y:5727 { yyLOCAL = &CollateExpr{Expr: yyDollar[1].exprUnion(), Collation: yyDollar[3].str} } yyVAL.union = yyLOCAL - case 1075: + case 1087: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5633 +//line sql.y:5731 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1076: + case 1088: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5637 +//line sql.y:5735 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1077: + case 1089: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5641 +//line sql.y:5739 { yyLOCAL = yyDollar[1].variableUnion() } yyVAL.union = yyLOCAL - case 1078: + case 1090: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5645 +//line sql.y:5743 { yyLOCAL = yyDollar[2].exprUnion() // TODO: do we really want to ignore unary '+' before any kind of literals? } yyVAL.union = yyLOCAL - case 1079: + case 1091: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5649 +//line sql.y:5747 { yyLOCAL = &UnaryExpr{Operator: UMinusOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1080: + case 1092: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5653 +//line sql.y:5751 { yyLOCAL = &UnaryExpr{Operator: TildaOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1081: + case 1093: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5657 +//line sql.y:5755 { yyLOCAL = &UnaryExpr{Operator: BangOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1082: + case 1094: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5661 +//line sql.y:5759 { yyLOCAL = yyDollar[1].subqueryUnion() } yyVAL.union = yyLOCAL - case 1083: + case 1095: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5665 +//line sql.y:5763 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1084: + case 1096: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5669 +//line sql.y:5767 { yyLOCAL = &ExistsExpr{Subquery: yyDollar[2].subqueryUnion()} } yyVAL.union = yyLOCAL - case 1085: + case 1097: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:5673 +//line sql.y:5771 { yyLOCAL = &MatchExpr{Columns: yyDollar[2].colNamesUnion(), Expr: yyDollar[5].exprUnion(), Option: yyDollar[6].matchExprOptionUnion()} } yyVAL.union = yyLOCAL - case 1086: + case 1098: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:5677 +//line sql.y:5775 { yyLOCAL = &CastExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion(), Array: yyDollar[6].booleanUnion()} } yyVAL.union = yyLOCAL - case 1087: + case 1099: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5681 +//line sql.y:5779 { yyLOCAL = &ConvertExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion()} } yyVAL.union = yyLOCAL - case 1088: + case 1100: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5685 +//line sql.y:5783 { yyLOCAL = &ConvertUsingExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].str} } yyVAL.union = yyLOCAL - case 1089: + case 1101: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5689 +//line sql.y:5787 { // From: https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#operator_binary // To convert a string expression to a binary string, these constructs are equivalent: @@ -17223,18 +17310,18 @@ yydefault: yyLOCAL = &ConvertExpr{Expr: yyDollar[2].exprUnion(), Type: &ConvertType{Type: yyDollar[1].str}} } yyVAL.union = yyLOCAL - case 1090: + case 1102: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5697 +//line sql.y:5795 { yyLOCAL = &Default{ColName: yyDollar[2].str} } yyVAL.union = yyLOCAL - case 1091: + case 1103: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5701 +//line sql.y:5799 { // INTERVAL can trigger a shift / reduce conflict. We want // to shift here for the interval rule. In case we do have @@ -17243,2192 +17330,2192 @@ yydefault: yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1092: + case 1104: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5709 +//line sql.y:5807 { yyLOCAL = &IntervalFuncExpr{Expr: yyDollar[3].exprUnion(), Exprs: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1093: + case 1105: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5713 +//line sql.y:5811 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: JSONExtractOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1094: + case 1106: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5717 +//line sql.y:5815 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: JSONUnquoteExtractOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1095: + case 1107: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5723 +//line sql.y:5821 { yyLOCAL = &IntervalExpr{Expr: yyDollar[2].exprUnion(), Unit: yyDollar[3].identifierCI.String()} } yyVAL.union = yyLOCAL - case 1096: + case 1108: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5729 +//line sql.y:5827 { yyLOCAL = yyDollar[1].colNamesUnion() } yyVAL.union = yyLOCAL - case 1097: + case 1109: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5733 +//line sql.y:5831 { yyLOCAL = yyDollar[2].colNamesUnion() } yyVAL.union = yyLOCAL - case 1098: + case 1110: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5739 +//line sql.y:5837 { yyLOCAL = []*ColName{yyDollar[1].colNameUnion()} } yyVAL.union = yyLOCAL - case 1099: + case 1111: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5743 +//line sql.y:5841 { yySLICE := (*[]*ColName)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].colNameUnion()) } - case 1100: + case 1112: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:5749 +//line sql.y:5847 { yyLOCAL = BothTrimType } yyVAL.union = yyLOCAL - case 1101: + case 1113: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:5753 +//line sql.y:5851 { yyLOCAL = LeadingTrimType } yyVAL.union = yyLOCAL - case 1102: + case 1114: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:5757 +//line sql.y:5855 { yyLOCAL = TrailingTrimType } yyVAL.union = yyLOCAL - case 1103: + case 1115: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FrameUnitType -//line sql.y:5763 +//line sql.y:5861 { yyLOCAL = FrameRowsType } yyVAL.union = yyLOCAL - case 1104: + case 1116: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FrameUnitType -//line sql.y:5767 +//line sql.y:5865 { yyLOCAL = FrameRangeType } yyVAL.union = yyLOCAL - case 1105: + case 1117: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5774 +//line sql.y:5872 { yyLOCAL = CumeDistExprType } yyVAL.union = yyLOCAL - case 1106: + case 1118: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5778 +//line sql.y:5876 { yyLOCAL = DenseRankExprType } yyVAL.union = yyLOCAL - case 1107: + case 1119: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5782 +//line sql.y:5880 { yyLOCAL = PercentRankExprType } yyVAL.union = yyLOCAL - case 1108: + case 1120: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5786 +//line sql.y:5884 { yyLOCAL = RankExprType } yyVAL.union = yyLOCAL - case 1109: + case 1121: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5790 +//line sql.y:5888 { yyLOCAL = RowNumberExprType } yyVAL.union = yyLOCAL - case 1110: + case 1122: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5796 +//line sql.y:5894 { yyLOCAL = &FramePoint{Type: CurrentRowType} } yyVAL.union = yyLOCAL - case 1111: + case 1123: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5800 +//line sql.y:5898 { yyLOCAL = &FramePoint{Type: UnboundedPrecedingType} } yyVAL.union = yyLOCAL - case 1112: + case 1124: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5804 +//line sql.y:5902 { yyLOCAL = &FramePoint{Type: UnboundedFollowingType} } yyVAL.union = yyLOCAL - case 1113: + case 1125: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5808 +//line sql.y:5906 { yyLOCAL = &FramePoint{Type: ExprPrecedingType, Expr: yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1114: + case 1126: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5812 +//line sql.y:5910 { yyLOCAL = &FramePoint{Type: ExprFollowingType, Expr: yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1115: + case 1127: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5818 +//line sql.y:5916 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1116: + case 1128: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5822 +//line sql.y:5920 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1117: + case 1129: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5827 +//line sql.y:5925 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1118: + case 1130: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5831 +//line sql.y:5929 { yyLOCAL = yyDollar[1].frameClauseUnion() } yyVAL.union = yyLOCAL - case 1119: + case 1131: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5837 +//line sql.y:5935 { yyLOCAL = &FrameClause{Unit: yyDollar[1].frameUnitTypeUnion(), Start: yyDollar[2].framePointUnion()} } yyVAL.union = yyLOCAL - case 1120: + case 1132: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5841 +//line sql.y:5939 { yyLOCAL = &FrameClause{Unit: yyDollar[1].frameUnitTypeUnion(), Start: yyDollar[3].framePointUnion(), End: yyDollar[5].framePointUnion()} } yyVAL.union = yyLOCAL - case 1121: + case 1133: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Exprs -//line sql.y:5846 +//line sql.y:5944 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1122: + case 1134: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Exprs -//line sql.y:5850 +//line sql.y:5948 { yyLOCAL = yyDollar[3].exprsUnion() } yyVAL.union = yyLOCAL - case 1123: + case 1135: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5855 +//line sql.y:5953 { } - case 1124: + case 1136: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5858 +//line sql.y:5956 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 1125: + case 1137: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *WindowSpecification -//line sql.y:5864 +//line sql.y:5962 { yyLOCAL = &WindowSpecification{Name: yyDollar[1].identifierCI, PartitionClause: yyDollar[2].exprsUnion(), OrderClause: yyDollar[3].orderByUnion(), FrameClause: yyDollar[4].frameClauseUnion()} } yyVAL.union = yyLOCAL - case 1126: + case 1138: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *OverClause -//line sql.y:5870 +//line sql.y:5968 { yyLOCAL = &OverClause{WindowSpec: yyDollar[3].windowSpecificationUnion()} } yyVAL.union = yyLOCAL - case 1127: + case 1139: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *OverClause -//line sql.y:5874 +//line sql.y:5972 { yyLOCAL = &OverClause{WindowName: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 1128: + case 1140: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *NullTreatmentClause -//line sql.y:5879 +//line sql.y:5977 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1130: + case 1142: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *NullTreatmentClause -//line sql.y:5886 +//line sql.y:5984 { yyLOCAL = &NullTreatmentClause{yyDollar[1].nullTreatmentTypeUnion()} } yyVAL.union = yyLOCAL - case 1131: + case 1143: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL NullTreatmentType -//line sql.y:5892 +//line sql.y:5990 { yyLOCAL = RespectNullsType } yyVAL.union = yyLOCAL - case 1132: + case 1144: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL NullTreatmentType -//line sql.y:5896 +//line sql.y:5994 { yyLOCAL = IgnoreNullsType } yyVAL.union = yyLOCAL - case 1133: + case 1145: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FirstOrLastValueExprType -//line sql.y:5902 +//line sql.y:6000 { yyLOCAL = FirstValueExprType } yyVAL.union = yyLOCAL - case 1134: + case 1146: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FirstOrLastValueExprType -//line sql.y:5906 +//line sql.y:6004 { yyLOCAL = LastValueExprType } yyVAL.union = yyLOCAL - case 1135: + case 1147: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL FromFirstLastType -//line sql.y:5912 +//line sql.y:6010 { yyLOCAL = FromFirstType } yyVAL.union = yyLOCAL - case 1136: + case 1148: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL FromFirstLastType -//line sql.y:5916 +//line sql.y:6014 { yyLOCAL = FromLastType } yyVAL.union = yyLOCAL - case 1137: + case 1149: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *FromFirstLastClause -//line sql.y:5921 +//line sql.y:6019 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1139: + case 1151: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *FromFirstLastClause -//line sql.y:5928 +//line sql.y:6026 { yyLOCAL = &FromFirstLastClause{yyDollar[1].fromFirstLastTypeUnion()} } yyVAL.union = yyLOCAL - case 1140: + case 1152: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LagLeadExprType -//line sql.y:5934 +//line sql.y:6032 { yyLOCAL = LagExprType } yyVAL.union = yyLOCAL - case 1141: + case 1153: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LagLeadExprType -//line sql.y:5938 +//line sql.y:6036 { yyLOCAL = LeadExprType } yyVAL.union = yyLOCAL - case 1142: + case 1154: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *WindowDefinition -//line sql.y:5944 +//line sql.y:6042 { yyLOCAL = &WindowDefinition{Name: yyDollar[1].identifierCI, WindowSpec: yyDollar[4].windowSpecificationUnion()} } yyVAL.union = yyLOCAL - case 1143: + case 1155: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL WindowDefinitions -//line sql.y:5950 +//line sql.y:6048 { yyLOCAL = WindowDefinitions{yyDollar[1].windowDefinitionUnion()} } yyVAL.union = yyLOCAL - case 1144: + case 1156: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5954 +//line sql.y:6052 { yySLICE := (*WindowDefinitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].windowDefinitionUnion()) } - case 1145: + case 1157: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5960 +//line sql.y:6058 { yyVAL.str = "" } - case 1146: + case 1158: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5964 +//line sql.y:6062 { yyVAL.str = string(yyDollar[2].identifierCI.String()) } - case 1147: + case 1159: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL BoolVal -//line sql.y:5970 +//line sql.y:6068 { yyLOCAL = BoolVal(true) } yyVAL.union = yyLOCAL - case 1148: + case 1160: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL BoolVal -//line sql.y:5974 +//line sql.y:6072 { yyLOCAL = BoolVal(false) } yyVAL.union = yyLOCAL - case 1149: + case 1161: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:5981 +//line sql.y:6079 { yyLOCAL = IsTrueOp } yyVAL.union = yyLOCAL - case 1150: + case 1162: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:5985 +//line sql.y:6083 { yyLOCAL = IsNotTrueOp } yyVAL.union = yyLOCAL - case 1151: + case 1163: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:5989 +//line sql.y:6087 { yyLOCAL = IsFalseOp } yyVAL.union = yyLOCAL - case 1152: + case 1164: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:5993 +//line sql.y:6091 { yyLOCAL = IsNotFalseOp } yyVAL.union = yyLOCAL - case 1153: + case 1165: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:5999 +//line sql.y:6097 { yyLOCAL = EqualOp } yyVAL.union = yyLOCAL - case 1154: + case 1166: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6003 +//line sql.y:6101 { yyLOCAL = LessThanOp } yyVAL.union = yyLOCAL - case 1155: + case 1167: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6007 +//line sql.y:6105 { yyLOCAL = GreaterThanOp } yyVAL.union = yyLOCAL - case 1156: + case 1168: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6011 +//line sql.y:6109 { yyLOCAL = LessEqualOp } yyVAL.union = yyLOCAL - case 1157: + case 1169: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6015 +//line sql.y:6113 { yyLOCAL = GreaterEqualOp } yyVAL.union = yyLOCAL - case 1158: + case 1170: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6019 +//line sql.y:6117 { yyLOCAL = NotEqualOp } yyVAL.union = yyLOCAL - case 1159: + case 1171: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6023 +//line sql.y:6121 { yyLOCAL = NullSafeEqualOp } yyVAL.union = yyLOCAL - case 1160: + case 1172: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:6029 +//line sql.y:6127 { yyLOCAL = yyDollar[1].valTupleUnion() } yyVAL.union = yyLOCAL - case 1161: + case 1173: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:6033 +//line sql.y:6131 { yyLOCAL = yyDollar[1].subqueryUnion() } yyVAL.union = yyLOCAL - case 1162: + case 1174: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:6037 +//line sql.y:6135 { yyLOCAL = ListArg(yyDollar[1].str[2:]) bindVariable(yylex, yyDollar[1].str[2:]) } yyVAL.union = yyLOCAL - case 1163: + case 1175: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Subquery -//line sql.y:6044 +//line sql.y:6142 { yyLOCAL = &Subquery{yyDollar[1].selStmtUnion()} } yyVAL.union = yyLOCAL - case 1164: + case 1176: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Exprs -//line sql.y:6050 +//line sql.y:6148 { yyLOCAL = Exprs{yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1165: + case 1177: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:6054 +//line sql.y:6152 { yySLICE := (*Exprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].exprUnion()) } - case 1166: + case 1178: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6064 +//line sql.y:6162 { yyLOCAL = &FuncExpr{Name: yyDollar[1].identifierCI, Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1167: + case 1179: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6068 +//line sql.y:6166 { yyLOCAL = &FuncExpr{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCI, Exprs: yyDollar[5].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1168: + case 1180: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6078 +//line sql.y:6176 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("left"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1169: + case 1181: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6082 +//line sql.y:6180 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("right"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1170: + case 1182: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6086 +//line sql.y:6184 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1171: + case 1183: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6090 +//line sql.y:6188 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1172: + case 1184: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6094 +//line sql.y:6192 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1173: + case 1185: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6098 +//line sql.y:6196 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1174: + case 1186: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6102 +//line sql.y:6200 { yyLOCAL = &CaseExpr{Expr: yyDollar[2].exprUnion(), Whens: yyDollar[3].whensUnion(), Else: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1175: + case 1187: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6106 +//line sql.y:6204 { yyLOCAL = &ValuesFuncExpr{Name: yyDollar[3].colNameUnion()} } yyVAL.union = yyLOCAL - case 1176: + case 1188: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6110 +//line sql.y:6208 { yyLOCAL = &InsertExpr{Str: yyDollar[3].exprUnion(), Pos: yyDollar[5].exprUnion(), Len: yyDollar[7].exprUnion(), NewStr: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1177: + case 1189: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6114 +//line sql.y:6212 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1178: + case 1190: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6125 +//line sql.y:6223 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("utc_date")} } yyVAL.union = yyLOCAL - case 1179: + case 1191: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6129 +//line sql.y:6227 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1180: + case 1192: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6135 +//line sql.y:6233 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("current_date")} } yyVAL.union = yyLOCAL - case 1181: + case 1193: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6139 +//line sql.y:6237 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("utc_time"), Fsp: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1182: + case 1194: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6144 +//line sql.y:6242 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("current_time"), Fsp: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1183: + case 1195: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6148 +//line sql.y:6246 { yyLOCAL = &CountStar{} } yyVAL.union = yyLOCAL - case 1184: + case 1196: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6152 +//line sql.y:6250 { yyLOCAL = &Count{Distinct: yyDollar[3].booleanUnion(), Args: yyDollar[4].exprsUnion()} } yyVAL.union = yyLOCAL - case 1185: + case 1197: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6156 +//line sql.y:6254 { yyLOCAL = &Max{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1186: + case 1198: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6160 +//line sql.y:6258 { yyLOCAL = &Min{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1187: + case 1199: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6164 +//line sql.y:6262 { yyLOCAL = &Sum{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1188: + case 1200: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6168 +//line sql.y:6266 { yyLOCAL = &Avg{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1189: + case 1201: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6172 +//line sql.y:6270 { yyLOCAL = &BitAnd{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1190: + case 1202: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6176 +//line sql.y:6274 { yyLOCAL = &BitOr{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1191: + case 1203: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6180 +//line sql.y:6278 { yyLOCAL = &BitXor{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1192: + case 1204: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6184 +//line sql.y:6282 { yyLOCAL = &Std{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1193: + case 1205: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6188 +//line sql.y:6286 { yyLOCAL = &StdDev{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1194: + case 1206: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6192 +//line sql.y:6290 { yyLOCAL = &StdPop{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1195: + case 1207: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6196 +//line sql.y:6294 { yyLOCAL = &StdSamp{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1196: + case 1208: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6200 +//line sql.y:6298 { yyLOCAL = &VarPop{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1197: + case 1209: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6204 +//line sql.y:6302 { yyLOCAL = &VarSamp{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1198: + case 1210: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6208 +//line sql.y:6306 { yyLOCAL = &Variance{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1199: + case 1211: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6212 +//line sql.y:6310 { yyLOCAL = &GroupConcatExpr{Distinct: yyDollar[3].booleanUnion(), Exprs: yyDollar[4].exprsUnion(), OrderBy: yyDollar[5].orderByUnion(), Separator: yyDollar[6].str, Limit: yyDollar[7].limitUnion()} } yyVAL.union = yyLOCAL - case 1200: + case 1212: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6216 +//line sql.y:6314 { yyLOCAL = &TimestampFuncExpr{Name: string("timestampadd"), Unit: yyDollar[3].identifierCI.String(), Expr1: yyDollar[5].exprUnion(), Expr2: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1201: + case 1213: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6220 +//line sql.y:6318 { yyLOCAL = &TimestampFuncExpr{Name: string("timestampdiff"), Unit: yyDollar[3].identifierCI.String(), Expr1: yyDollar[5].exprUnion(), Expr2: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1202: + case 1214: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6224 +//line sql.y:6322 { yyLOCAL = &ExtractFuncExpr{IntervalTypes: yyDollar[3].intervalTypeUnion(), Expr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1203: + case 1215: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6228 +//line sql.y:6326 { yyLOCAL = &WeightStringFuncExpr{Expr: yyDollar[3].exprUnion(), As: yyDollar[4].convertTypeUnion()} } yyVAL.union = yyLOCAL - case 1204: + case 1216: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6232 +//line sql.y:6330 { yyLOCAL = &JSONPrettyExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1205: + case 1217: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6236 +//line sql.y:6334 { yyLOCAL = &JSONStorageFreeExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1206: + case 1218: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6240 +//line sql.y:6338 { yyLOCAL = &JSONStorageSizeExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1207: + case 1219: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6244 +//line sql.y:6342 { yyLOCAL = &TrimFuncExpr{TrimFuncType: LTrimType, StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1208: + case 1220: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6248 +//line sql.y:6346 { yyLOCAL = &TrimFuncExpr{TrimFuncType: RTrimType, StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1209: + case 1221: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:6252 +//line sql.y:6350 { yyLOCAL = &TrimFuncExpr{Type: yyDollar[3].trimTypeUnion(), TrimArg: yyDollar[4].exprUnion(), StringArg: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 1210: + case 1222: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6256 +//line sql.y:6354 { yyLOCAL = &TrimFuncExpr{StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1211: + case 1223: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6260 +//line sql.y:6358 { yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1212: + case 1224: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6264 +//line sql.y:6362 { yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion(), Charset: yyDollar[5].str} } yyVAL.union = yyLOCAL - case 1213: + case 1225: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6268 +//line sql.y:6366 { yyLOCAL = &TrimFuncExpr{TrimArg: yyDollar[3].exprUnion(), StringArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1214: + case 1226: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6272 +//line sql.y:6370 { yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1215: + case 1227: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6276 +//line sql.y:6374 { yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion(), Pos: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1216: + case 1228: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6280 +//line sql.y:6378 { yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1217: + case 1229: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6284 +//line sql.y:6382 { yyLOCAL = &LockingFunc{Type: GetLock, Name: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1218: + case 1230: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6288 +//line sql.y:6386 { yyLOCAL = &LockingFunc{Type: IsFreeLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1219: + case 1231: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6292 +//line sql.y:6390 { yyLOCAL = &LockingFunc{Type: IsUsedLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1220: + case 1232: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6296 +//line sql.y:6394 { yyLOCAL = &LockingFunc{Type: ReleaseAllLocks} } yyVAL.union = yyLOCAL - case 1221: + case 1233: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6300 +//line sql.y:6398 { yyLOCAL = &LockingFunc{Type: ReleaseLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1222: + case 1234: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6304 +//line sql.y:6402 { yyLOCAL = &JSONSchemaValidFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1223: + case 1235: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6308 +//line sql.y:6406 { yyLOCAL = &JSONSchemaValidationReportFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1224: + case 1236: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6312 +//line sql.y:6410 { yyLOCAL = &JSONArrayExpr{Params: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1225: + case 1237: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6316 +//line sql.y:6414 { yyLOCAL = &JSONObjectExpr{Params: yyDollar[3].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1226: + case 1238: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6320 +//line sql.y:6418 { yyLOCAL = &JSONQuoteExpr{StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1227: + case 1239: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6324 +//line sql.y:6422 { yyLOCAL = &JSONContainsExpr{Target: yyDollar[3].exprUnion(), Candidate: yyDollar[5].exprsUnion()[0], PathList: yyDollar[5].exprsUnion()[1:]} } yyVAL.union = yyLOCAL - case 1228: + case 1240: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6328 +//line sql.y:6426 { yyLOCAL = &JSONContainsPathExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), PathList: yyDollar[7].exprsUnion()} } yyVAL.union = yyLOCAL - case 1229: + case 1241: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6332 +//line sql.y:6430 { yyLOCAL = &JSONExtractExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1230: + case 1242: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6336 +//line sql.y:6434 { yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1231: + case 1243: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6340 +//line sql.y:6438 { yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1232: + case 1244: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6344 +//line sql.y:6442 { yyLOCAL = &JSONOverlapsExpr{JSONDoc1: yyDollar[3].exprUnion(), JSONDoc2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1233: + case 1245: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6348 +//line sql.y:6446 { yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1234: + case 1246: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6352 +//line sql.y:6450 { yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion(), EscapeChar: yyDollar[9].exprsUnion()[0], PathList: yyDollar[9].exprsUnion()[1:]} } yyVAL.union = yyLOCAL - case 1235: + case 1247: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:6356 +//line sql.y:6454 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion()} } yyVAL.union = yyLOCAL - case 1236: + case 1248: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6360 +//line sql.y:6458 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()} } yyVAL.union = yyLOCAL - case 1237: + case 1249: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6364 +//line sql.y:6462 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()} } yyVAL.union = yyLOCAL - case 1238: + case 1250: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr -//line sql.y:6368 +//line sql.y:6466 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()} } yyVAL.union = yyLOCAL - case 1239: + case 1251: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6372 +//line sql.y:6470 { yyLOCAL = &JSONAttributesExpr{Type: DepthAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1240: + case 1252: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6376 +//line sql.y:6474 { yyLOCAL = &JSONAttributesExpr{Type: ValidAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1241: + case 1253: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6380 +//line sql.y:6478 { yyLOCAL = &JSONAttributesExpr{Type: TypeAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1242: + case 1254: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6384 +//line sql.y:6482 { yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1243: + case 1255: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6388 +//line sql.y:6486 { yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1244: + case 1256: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6392 +//line sql.y:6490 { yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayAppendType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1245: + case 1257: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6396 +//line sql.y:6494 { yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1246: + case 1258: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6400 +//line sql.y:6498 { yyLOCAL = &JSONValueModifierExpr{Type: JSONInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1247: + case 1259: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6404 +//line sql.y:6502 { yyLOCAL = &JSONValueModifierExpr{Type: JSONReplaceType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1248: + case 1260: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6408 +//line sql.y:6506 { yyLOCAL = &JSONValueModifierExpr{Type: JSONSetType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1249: + case 1261: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6412 +//line sql.y:6510 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergeType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1250: + case 1262: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6416 +//line sql.y:6514 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePatchType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1251: + case 1263: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6420 +//line sql.y:6518 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePreserveType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1252: + case 1264: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6424 +//line sql.y:6522 { yyLOCAL = &JSONRemoveExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1253: + case 1265: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6428 +//line sql.y:6526 { yyLOCAL = &JSONUnquoteExpr{JSONValue: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1254: + case 1266: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6432 +//line sql.y:6530 { yyLOCAL = &ArgumentLessWindowExpr{Type: yyDollar[1].argumentLessWindowExprTypeUnion(), OverClause: yyDollar[4].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1255: + case 1267: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6436 +//line sql.y:6534 { yyLOCAL = &FirstOrLastValueExpr{Type: yyDollar[1].firstOrLastValueExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1256: + case 1268: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6440 +//line sql.y:6538 { yyLOCAL = &NtileExpr{N: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1257: + case 1269: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr -//line sql.y:6444 +//line sql.y:6542 { yyLOCAL = &NTHValueExpr{Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), FromFirstLastClause: yyDollar[7].fromFirstLastClauseUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1258: + case 1270: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6448 +//line sql.y:6546 { yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1259: + case 1271: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr -//line sql.y:6452 +//line sql.y:6550 { yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), Default: yyDollar[6].exprUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1264: + case 1276: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6462 +//line sql.y:6560 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1265: + case 1277: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6466 +//line sql.y:6564 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1266: + case 1278: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6470 +//line sql.y:6568 { yyLOCAL = yyDollar[1].variableUnion() } yyVAL.union = yyLOCAL - case 1267: + case 1279: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6474 +//line sql.y:6572 { yyLOCAL = NewArgument(yyDollar[1].str[1:]) bindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL - case 1268: + case 1280: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:6480 +//line sql.y:6578 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1269: + case 1281: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6484 +//line sql.y:6582 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1270: + case 1282: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6490 +//line sql.y:6588 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1271: + case 1283: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6494 +//line sql.y:6592 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1272: + case 1284: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6498 +//line sql.y:6596 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1273: + case 1285: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6502 +//line sql.y:6600 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1274: + case 1286: yyDollar = yyS[yypt-14 : yypt+1] var yyLOCAL Expr -//line sql.y:6506 +//line sql.y:6604 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()} } yyVAL.union = yyLOCAL - case 1275: + case 1287: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6511 +//line sql.y:6609 { yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1276: + case 1288: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6515 +//line sql.y:6613 { yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), MatchType: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1277: + case 1289: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6519 +//line sql.y:6617 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1278: + case 1290: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6523 +//line sql.y:6621 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1279: + case 1291: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6527 +//line sql.y:6625 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1280: + case 1292: yyDollar = yyS[yypt-14 : yypt+1] var yyLOCAL Expr -//line sql.y:6531 +//line sql.y:6629 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()} } yyVAL.union = yyLOCAL - case 1281: + case 1293: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6536 +//line sql.y:6634 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1282: + case 1294: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6540 +//line sql.y:6638 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1283: + case 1295: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6544 +//line sql.y:6642 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1284: + case 1296: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6548 +//line sql.y:6646 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), MatchType: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1285: + case 1297: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6555 +//line sql.y:6653 { yyLOCAL = &ExtractValueExpr{Fragment: yyDollar[3].exprUnion(), XPathExpr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1286: + case 1298: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6559 +//line sql.y:6657 { yyLOCAL = &UpdateXMLExpr{Target: yyDollar[3].exprUnion(), XPathExpr: yyDollar[5].exprUnion(), NewXML: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1287: + case 1299: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6565 +//line sql.y:6663 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatBytesType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1288: + case 1300: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6569 +//line sql.y:6667 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatPicoTimeType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1289: + case 1301: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6573 +//line sql.y:6671 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsCurrentThreadIDType} } yyVAL.union = yyLOCAL - case 1290: + case 1302: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6577 +//line sql.y:6675 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsThreadIDType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1291: + case 1303: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6583 +//line sql.y:6681 { yyLOCAL = >IDFuncExpr{Type: GTIDSubsetType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1292: + case 1304: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6587 +//line sql.y:6685 { yyLOCAL = >IDFuncExpr{Type: GTIDSubtractType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1293: + case 1305: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6591 +//line sql.y:6689 { yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1294: + case 1306: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6595 +//line sql.y:6693 { yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1295: + case 1307: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6599 +//line sql.y:6697 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1296: + case 1308: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6603 +//line sql.y:6701 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1297: + case 1309: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6607 +//line sql.y:6705 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion(), Channel: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1298: + case 1310: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6612 +//line sql.y:6710 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1299: + case 1311: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6616 +//line sql.y:6714 { yyLOCAL = yyDollar[2].convertTypeUnion() } yyVAL.union = yyLOCAL - case 1300: + case 1312: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6622 +//line sql.y:6720 { } - case 1301: + case 1313: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6624 +//line sql.y:6722 { yyLOCAL = IntervalDayHour } yyVAL.union = yyLOCAL - case 1302: + case 1314: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6628 +//line sql.y:6726 { yyLOCAL = IntervalDayMicrosecond } yyVAL.union = yyLOCAL - case 1303: + case 1315: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6632 +//line sql.y:6730 { yyLOCAL = IntervalDayMinute } yyVAL.union = yyLOCAL - case 1304: + case 1316: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6636 +//line sql.y:6734 { yyLOCAL = IntervalDaySecond } yyVAL.union = yyLOCAL - case 1305: + case 1317: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6640 +//line sql.y:6738 { yyLOCAL = IntervalHourMicrosecond } yyVAL.union = yyLOCAL - case 1306: + case 1318: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6644 +//line sql.y:6742 { yyLOCAL = IntervalHourMinute } yyVAL.union = yyLOCAL - case 1307: + case 1319: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6648 +//line sql.y:6746 { yyLOCAL = IntervalHourSecond } yyVAL.union = yyLOCAL - case 1308: + case 1320: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6652 +//line sql.y:6750 { yyLOCAL = IntervalMinuteMicrosecond } yyVAL.union = yyLOCAL - case 1309: + case 1321: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6656 +//line sql.y:6754 { yyLOCAL = IntervalMinuteSecond } yyVAL.union = yyLOCAL - case 1310: + case 1322: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6660 +//line sql.y:6758 { yyLOCAL = IntervalSecondMicrosecond } yyVAL.union = yyLOCAL - case 1311: + case 1323: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6664 +//line sql.y:6762 { yyLOCAL = IntervalYearMonth } yyVAL.union = yyLOCAL - case 1312: + case 1324: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6670 +//line sql.y:6768 { yyLOCAL = IntervalDay } yyVAL.union = yyLOCAL - case 1313: + case 1325: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6674 +//line sql.y:6772 { yyLOCAL = IntervalWeek } yyVAL.union = yyLOCAL - case 1314: + case 1326: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6678 +//line sql.y:6776 { yyLOCAL = IntervalHour } yyVAL.union = yyLOCAL - case 1315: + case 1327: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6682 +//line sql.y:6780 { yyLOCAL = IntervalMinute } yyVAL.union = yyLOCAL - case 1316: + case 1328: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6686 +//line sql.y:6784 { yyLOCAL = IntervalMonth } yyVAL.union = yyLOCAL - case 1317: + case 1329: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6690 +//line sql.y:6788 { yyLOCAL = IntervalQuarter } yyVAL.union = yyLOCAL - case 1318: + case 1330: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6694 +//line sql.y:6792 { yyLOCAL = IntervalSecond } yyVAL.union = yyLOCAL - case 1319: + case 1331: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6698 +//line sql.y:6796 { yyLOCAL = IntervalMicrosecond } yyVAL.union = yyLOCAL - case 1320: + case 1332: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6702 +//line sql.y:6800 { yyLOCAL = IntervalYear } yyVAL.union = yyLOCAL - case 1323: + case 1335: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:6712 +//line sql.y:6810 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1324: + case 1336: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6716 +//line sql.y:6814 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1325: + case 1337: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6720 +//line sql.y:6818 { yyLOCAL = NewIntLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 1326: + case 1338: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6724 +//line sql.y:6822 { yyLOCAL = NewArgument(yyDollar[2].str[1:]) bindVariable(yylex, yyDollar[2].str[1:]) } yyVAL.union = yyLOCAL - case 1327: + case 1339: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6735 +//line sql.y:6833 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("if"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1328: + case 1340: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6739 +//line sql.y:6837 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("database"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1329: + case 1341: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6743 +//line sql.y:6841 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("schema"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1330: + case 1342: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6747 +//line sql.y:6845 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("mod"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1331: + case 1343: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6751 +//line sql.y:6849 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("replace"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1332: + case 1344: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6757 +//line sql.y:6855 { yyLOCAL = NoOption } yyVAL.union = yyLOCAL - case 1333: + case 1345: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6761 +//line sql.y:6859 { yyLOCAL = BooleanModeOpt } yyVAL.union = yyLOCAL - case 1334: + case 1346: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6765 +//line sql.y:6863 { yyLOCAL = NaturalLanguageModeOpt } yyVAL.union = yyLOCAL - case 1335: + case 1347: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6769 +//line sql.y:6867 { yyLOCAL = NaturalLanguageModeWithQueryExpansionOpt } yyVAL.union = yyLOCAL - case 1336: + case 1348: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6773 +//line sql.y:6871 { yyLOCAL = QueryExpansionOpt } yyVAL.union = yyLOCAL - case 1337: + case 1349: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6779 +//line sql.y:6877 { yyVAL.str = string(yyDollar[1].identifierCI.String()) } - case 1338: + case 1350: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6783 +//line sql.y:6881 { yyVAL.str = string(yyDollar[1].str) } - case 1339: + case 1351: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6787 +//line sql.y:6885 { yyVAL.str = string(yyDollar[1].str) } - case 1340: + case 1352: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6793 +//line sql.y:6891 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1341: + case 1353: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6797 +//line sql.y:6895 { yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: NewIntLiteral(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 1342: + case 1354: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6801 +//line sql.y:6899 { yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: NewIntLiteral(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 1343: + case 1355: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6807 +//line sql.y:6905 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1344: + case 1356: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6811 +//line sql.y:6909 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion(), Charset: yyDollar[3].columnCharset} } yyVAL.union = yyLOCAL - case 1345: + case 1357: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6815 +//line sql.y:6913 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1346: + case 1358: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6819 +//line sql.y:6917 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1347: + case 1359: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6823 +//line sql.y:6921 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} yyLOCAL.Length = yyDollar[2].LengthScaleOption.Length yyLOCAL.Scale = yyDollar[2].LengthScaleOption.Scale } yyVAL.union = yyLOCAL - case 1348: + case 1360: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6829 +//line sql.y:6927 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1349: + case 1361: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6833 +//line sql.y:6931 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1350: + case 1362: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6837 +//line sql.y:6935 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1351: + case 1363: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6841 +//line sql.y:6939 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1352: + case 1364: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6845 +//line sql.y:6943 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1353: + case 1365: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6849 +//line sql.y:6947 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1354: + case 1366: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6853 +//line sql.y:6951 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1355: + case 1367: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6857 +//line sql.y:6955 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1356: + case 1368: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6861 +//line sql.y:6959 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1357: + case 1369: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6865 +//line sql.y:6963 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1358: + case 1370: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:6871 +//line sql.y:6969 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1359: + case 1371: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:6875 +//line sql.y:6973 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1360: + case 1372: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:6880 +//line sql.y:6978 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1361: + case 1373: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6884 +//line sql.y:6982 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1362: + case 1374: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:6889 +//line sql.y:6987 { yyVAL.str = string("") } - case 1363: + case 1375: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:6893 +//line sql.y:6991 { yyVAL.str = " separator " + encodeSQLString(yyDollar[2].str) } - case 1364: + case 1376: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*When -//line sql.y:6899 +//line sql.y:6997 { yyLOCAL = []*When{yyDollar[1].whenUnion()} } yyVAL.union = yyLOCAL - case 1365: + case 1377: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:6903 +//line sql.y:7001 { yySLICE := (*[]*When)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].whenUnion()) } - case 1366: + case 1378: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *When -//line sql.y:6909 +//line sql.y:7007 { yyLOCAL = &When{Cond: yyDollar[2].exprUnion(), Val: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1367: + case 1379: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:6914 +//line sql.y:7012 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1368: + case 1380: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6918 +//line sql.y:7016 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1369: + case 1381: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ColName -//line sql.y:6924 +//line sql.y:7022 { yyLOCAL = &ColName{Name: yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 1370: + case 1382: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ColName -//line sql.y:6928 +//line sql.y:7026 { yyLOCAL = &ColName{Name: NewIdentifierCI(string(yyDollar[1].str))} } yyVAL.union = yyLOCAL - case 1371: + case 1383: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColName -//line sql.y:6932 +//line sql.y:7030 { yyLOCAL = &ColName{Qualifier: TableName{Name: yyDollar[1].identifierCS}, Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 1372: + case 1384: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ColName -//line sql.y:6936 +//line sql.y:7034 { yyLOCAL = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}, Name: yyDollar[5].identifierCI} } yyVAL.union = yyLOCAL - case 1373: + case 1385: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6942 +//line sql.y:7040 { yyLOCAL = yyDollar[1].colNameUnion() } yyVAL.union = yyLOCAL - case 1374: + case 1386: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6946 +//line sql.y:7044 { yyLOCAL = &Offset{V: convertStringToInt(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1375: + case 1387: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6952 +//line sql.y:7050 { // TODO(sougou): Deprecate this construct. if yyDollar[1].identifierCI.Lowered() != "value" { @@ -19438,498 +19525,498 @@ yydefault: yyLOCAL = NewIntLiteral("1") } yyVAL.union = yyLOCAL - case 1376: + case 1388: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6961 +//line sql.y:7059 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1377: + case 1389: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6965 +//line sql.y:7063 { yyLOCAL = NewArgument(yyDollar[1].str[1:]) bindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL - case 1378: + case 1390: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Exprs -//line sql.y:6971 +//line sql.y:7069 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1379: + case 1391: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Exprs -//line sql.y:6975 +//line sql.y:7073 { yyLOCAL = yyDollar[3].exprsUnion() } yyVAL.union = yyLOCAL - case 1380: + case 1392: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:6980 +//line sql.y:7078 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1381: + case 1393: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6984 +//line sql.y:7082 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1382: + case 1394: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *NamedWindow -//line sql.y:6990 +//line sql.y:7088 { yyLOCAL = &NamedWindow{yyDollar[2].windowDefinitionsUnion()} } yyVAL.union = yyLOCAL - case 1383: + case 1395: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:6996 +//line sql.y:7094 { yyLOCAL = NamedWindows{yyDollar[1].namedWindowUnion()} } yyVAL.union = yyLOCAL - case 1384: + case 1396: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7000 +//line sql.y:7098 { yySLICE := (*NamedWindows)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].namedWindowUnion()) } - case 1385: + case 1397: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7005 +//line sql.y:7103 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1386: + case 1398: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7009 +//line sql.y:7107 { yyLOCAL = yyDollar[1].namedWindowsUnion() } yyVAL.union = yyLOCAL - case 1387: + case 1399: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7014 +//line sql.y:7112 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1388: + case 1400: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7018 +//line sql.y:7116 { yyLOCAL = yyDollar[1].orderByUnion() } yyVAL.union = yyLOCAL - case 1389: + case 1401: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7024 +//line sql.y:7122 { yyLOCAL = yyDollar[3].orderByUnion() } yyVAL.union = yyLOCAL - case 1390: + case 1402: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7030 +//line sql.y:7128 { yyLOCAL = OrderBy{yyDollar[1].orderUnion()} } yyVAL.union = yyLOCAL - case 1391: + case 1403: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7034 +//line sql.y:7132 { yySLICE := (*OrderBy)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].orderUnion()) } - case 1392: + case 1404: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Order -//line sql.y:7040 +//line sql.y:7138 { yyLOCAL = &Order{Expr: yyDollar[1].exprUnion(), Direction: yyDollar[2].orderDirectionUnion()} } yyVAL.union = yyLOCAL - case 1393: + case 1405: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7045 +//line sql.y:7143 { yyLOCAL = AscOrder } yyVAL.union = yyLOCAL - case 1394: + case 1406: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7049 +//line sql.y:7147 { yyLOCAL = AscOrder } yyVAL.union = yyLOCAL - case 1395: + case 1407: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7053 +//line sql.y:7151 { yyLOCAL = DescOrder } yyVAL.union = yyLOCAL - case 1396: + case 1408: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Limit -//line sql.y:7058 +//line sql.y:7156 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1397: + case 1409: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Limit -//line sql.y:7062 +//line sql.y:7160 { yyLOCAL = yyDollar[1].limitUnion() } yyVAL.union = yyLOCAL - case 1398: + case 1410: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Limit -//line sql.y:7068 +//line sql.y:7166 { yyLOCAL = &Limit{Rowcount: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1399: + case 1411: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Limit -//line sql.y:7072 +//line sql.y:7170 { yyLOCAL = &Limit{Offset: yyDollar[2].exprUnion(), Rowcount: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1400: + case 1412: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Limit -//line sql.y:7076 +//line sql.y:7174 { yyLOCAL = &Limit{Offset: yyDollar[4].exprUnion(), Rowcount: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1401: + case 1413: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7081 +//line sql.y:7179 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1402: + case 1414: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7085 +//line sql.y:7183 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1403: + case 1415: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7089 +//line sql.y:7187 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1404: + case 1416: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7093 +//line sql.y:7191 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1405: + case 1417: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7097 +//line sql.y:7195 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1406: + case 1418: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7107 +//line sql.y:7205 { yyLOCAL = &LockOption{Type: DefaultType} } yyVAL.union = yyLOCAL - case 1407: + case 1419: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7111 +//line sql.y:7209 { yyLOCAL = &LockOption{Type: NoneType} } yyVAL.union = yyLOCAL - case 1408: + case 1420: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7115 +//line sql.y:7213 { yyLOCAL = &LockOption{Type: SharedType} } yyVAL.union = yyLOCAL - case 1409: + case 1421: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7119 +//line sql.y:7217 { yyLOCAL = &LockOption{Type: ExclusiveType} } yyVAL.union = yyLOCAL - case 1410: + case 1422: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7125 +//line sql.y:7223 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1411: + case 1423: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7129 +//line sql.y:7227 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1412: + case 1424: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7133 +//line sql.y:7231 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1413: + case 1425: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7137 +//line sql.y:7235 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1414: + case 1426: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7142 +//line sql.y:7240 { yyVAL.str = "" } - case 1415: + case 1427: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7146 +//line sql.y:7244 { yyVAL.str = string(yyDollar[3].str) } - case 1416: + case 1428: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7150 +//line sql.y:7248 { yyVAL.str = string(yyDollar[3].str) } - case 1417: + case 1429: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7154 +//line sql.y:7252 { yyVAL.str = string(yyDollar[3].str) } - case 1418: + case 1430: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7159 +//line sql.y:7257 { yyVAL.str = "" } - case 1419: + case 1431: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7163 +//line sql.y:7261 { yyVAL.str = yyDollar[3].str } - case 1420: + case 1432: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7169 +//line sql.y:7267 { yyVAL.str = string(yyDollar[1].str) } - case 1421: + case 1433: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7173 +//line sql.y:7271 { yyVAL.str = string(yyDollar[1].str) } - case 1422: + case 1434: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7178 +//line sql.y:7276 { yyVAL.str = "" } - case 1423: + case 1435: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:7182 +//line sql.y:7280 { yyVAL.str = yyDollar[2].str } - case 1424: + case 1436: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7187 +//line sql.y:7285 { yyVAL.str = "cascaded" } - case 1425: + case 1437: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7191 +//line sql.y:7289 { yyVAL.str = string(yyDollar[1].str) } - case 1426: + case 1438: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7195 +//line sql.y:7293 { yyVAL.str = string(yyDollar[1].str) } - case 1427: + case 1439: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL CheckOptions -//line sql.y:7200 +//line sql.y:7298 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1428: + case 1440: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckOptions -//line sql.y:7204 +//line sql.y:7302 { yyLOCAL = CheckOptions{yyDollar[1].checkTypeUnion()} } yyVAL.union = yyLOCAL - case 1429: + case 1441: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7208 +//line sql.y:7306 { yySLICE := (*CheckOptions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].checkTypeUnion()) } - case 1430: + case 1442: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL CheckType -//line sql.y:7214 +//line sql.y:7312 { yyLOCAL = Forupgrade } yyVAL.union = yyLOCAL - case 1431: + case 1443: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType -//line sql.y:7218 +//line sql.y:7316 { yyLOCAL = Fast } yyVAL.union = yyLOCAL - case 1432: + case 1444: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType -//line sql.y:7222 +//line sql.y:7320 { yyLOCAL = Quick } yyVAL.union = yyLOCAL - case 1433: + case 1445: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType -//line sql.y:7226 +//line sql.y:7324 { yyLOCAL = Medium } yyVAL.union = yyLOCAL - case 1434: + case 1446: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType -//line sql.y:7230 +//line sql.y:7328 { yyLOCAL = Extended } yyVAL.union = yyLOCAL - case 1435: + case 1447: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType -//line sql.y:7234 +//line sql.y:7332 { yyLOCAL = CHanged } yyVAL.union = yyLOCAL - case 1436: + case 1448: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Definer -//line sql.y:7240 +//line sql.y:7338 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1437: + case 1449: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Definer -//line sql.y:7244 +//line sql.y:7342 { yyLOCAL = yyDollar[3].definerUnion() } yyVAL.union = yyLOCAL - case 1438: + case 1450: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Definer -//line sql.y:7250 +//line sql.y:7348 { yyLOCAL = &Definer{ Name: string(yyDollar[1].str), } } yyVAL.union = yyLOCAL - case 1439: + case 1451: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Definer -//line sql.y:7256 +//line sql.y:7354 { yyLOCAL = &Definer{ Name: string(yyDollar[1].str), } } yyVAL.union = yyLOCAL - case 1440: + case 1452: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Definer -//line sql.y:7262 +//line sql.y:7360 { yyLOCAL = &Definer{ Name: yyDollar[1].str, @@ -19937,369 +20024,369 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1441: + case 1453: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7271 +//line sql.y:7369 { yyVAL.str = encodeSQLString(yyDollar[1].str) } - case 1442: + case 1454: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7275 +//line sql.y:7373 { yyVAL.str = formatIdentifier(yyDollar[1].str) } - case 1443: + case 1455: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7280 +//line sql.y:7378 { yyVAL.str = "" } - case 1444: + case 1456: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7284 +//line sql.y:7382 { yyVAL.str = formatAddress(yyDollar[1].str) } - case 1445: + case 1457: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Lock -//line sql.y:7290 +//line sql.y:7388 { yyLOCAL = ForUpdateLock } yyVAL.union = yyLOCAL - case 1446: + case 1458: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Lock -//line sql.y:7294 +//line sql.y:7392 { yyLOCAL = ShareModeLock } yyVAL.union = yyLOCAL - case 1447: + case 1459: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7300 +//line sql.y:7398 { yyLOCAL = &SelectInto{Type: IntoOutfileS3, FileName: encodeSQLString(yyDollar[4].str), Charset: yyDollar[5].columnCharset, FormatOption: yyDollar[6].str, ExportOption: yyDollar[7].str, Manifest: yyDollar[8].str, Overwrite: yyDollar[9].str} } yyVAL.union = yyLOCAL - case 1448: + case 1460: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7304 +//line sql.y:7402 { yyLOCAL = &SelectInto{Type: IntoDumpfile, FileName: encodeSQLString(yyDollar[3].str), Charset: ColumnCharset{}, FormatOption: "", ExportOption: "", Manifest: "", Overwrite: ""} } yyVAL.union = yyLOCAL - case 1449: + case 1461: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7308 +//line sql.y:7406 { yyLOCAL = &SelectInto{Type: IntoOutfile, FileName: encodeSQLString(yyDollar[3].str), Charset: yyDollar[4].columnCharset, FormatOption: "", ExportOption: yyDollar[5].str, Manifest: "", Overwrite: ""} } yyVAL.union = yyLOCAL - case 1450: + case 1462: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7313 +//line sql.y:7411 { yyVAL.str = "" } - case 1451: + case 1463: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7317 +//line sql.y:7415 { yyVAL.str = " format csv" + yyDollar[3].str } - case 1452: + case 1464: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7321 +//line sql.y:7419 { yyVAL.str = " format text" + yyDollar[3].str } - case 1453: + case 1465: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7326 +//line sql.y:7424 { yyVAL.str = "" } - case 1454: + case 1466: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7330 +//line sql.y:7428 { yyVAL.str = " header" } - case 1455: + case 1467: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7335 +//line sql.y:7433 { yyVAL.str = "" } - case 1456: + case 1468: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7339 +//line sql.y:7437 { yyVAL.str = " manifest on" } - case 1457: + case 1469: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7343 +//line sql.y:7441 { yyVAL.str = " manifest off" } - case 1458: + case 1470: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7348 +//line sql.y:7446 { yyVAL.str = "" } - case 1459: + case 1471: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7352 +//line sql.y:7450 { yyVAL.str = " overwrite on" } - case 1460: + case 1472: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7356 +//line sql.y:7454 { yyVAL.str = " overwrite off" } - case 1461: + case 1473: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7362 +//line sql.y:7460 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1462: + case 1474: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7367 +//line sql.y:7465 { yyVAL.str = "" } - case 1463: + case 1475: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7371 +//line sql.y:7469 { yyVAL.str = " lines" + yyDollar[2].str } - case 1464: + case 1476: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7377 +//line sql.y:7475 { yyVAL.str = yyDollar[1].str } - case 1465: + case 1477: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7381 +//line sql.y:7479 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1466: + case 1478: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7387 +//line sql.y:7485 { yyVAL.str = " starting by " + encodeSQLString(yyDollar[3].str) } - case 1467: + case 1479: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7391 +//line sql.y:7489 { yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str) } - case 1468: + case 1480: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7396 +//line sql.y:7494 { yyVAL.str = "" } - case 1469: + case 1481: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7400 +//line sql.y:7498 { yyVAL.str = " " + yyDollar[1].str + yyDollar[2].str } - case 1470: + case 1482: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7406 +//line sql.y:7504 { yyVAL.str = yyDollar[1].str } - case 1471: + case 1483: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7410 +//line sql.y:7508 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1472: + case 1484: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7416 +//line sql.y:7514 { yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str) } - case 1473: + case 1485: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:7420 +//line sql.y:7518 { yyVAL.str = yyDollar[1].str + " enclosed by " + encodeSQLString(yyDollar[4].str) } - case 1474: + case 1486: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7424 +//line sql.y:7522 { yyVAL.str = " escaped by " + encodeSQLString(yyDollar[3].str) } - case 1475: + case 1487: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7429 +//line sql.y:7527 { yyVAL.str = "" } - case 1476: + case 1488: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7433 +//line sql.y:7531 { yyVAL.str = " optionally" } - case 1477: + case 1489: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Insert -//line sql.y:7446 +//line sql.y:7544 { yyLOCAL = &Insert{Rows: yyDollar[2].valuesUnion()} } yyVAL.union = yyLOCAL - case 1478: + case 1490: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Insert -//line sql.y:7450 +//line sql.y:7548 { yyLOCAL = &Insert{Rows: yyDollar[1].selStmtUnion()} } yyVAL.union = yyLOCAL - case 1479: + case 1491: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *Insert -//line sql.y:7454 +//line sql.y:7552 { yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[5].valuesUnion()} } yyVAL.union = yyLOCAL - case 1480: + case 1492: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Insert -//line sql.y:7458 +//line sql.y:7556 { yyLOCAL = &Insert{Columns: []IdentifierCI{}, Rows: yyDollar[4].valuesUnion()} } yyVAL.union = yyLOCAL - case 1481: + case 1493: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Insert -//line sql.y:7462 +//line sql.y:7560 { yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[4].selStmtUnion()} } yyVAL.union = yyLOCAL - case 1482: + case 1494: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:7468 +//line sql.y:7566 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 1483: + case 1495: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Columns -//line sql.y:7472 +//line sql.y:7570 { yyLOCAL = Columns{yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 1484: + case 1496: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7476 +//line sql.y:7574 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 1485: + case 1497: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:7480 +//line sql.y:7578 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[5].identifierCI) } - case 1486: + case 1498: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7485 +//line sql.y:7583 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1487: + case 1499: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7489 +//line sql.y:7587 { yyLOCAL = yyDollar[5].updateExprsUnion() } yyVAL.union = yyLOCAL - case 1488: + case 1500: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Values -//line sql.y:7495 +//line sql.y:7593 { yyLOCAL = Values{yyDollar[1].valTupleUnion()} } yyVAL.union = yyLOCAL - case 1489: + case 1501: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7499 +//line sql.y:7597 { yySLICE := (*Values)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].valTupleUnion()) } - case 1490: + case 1502: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7505 +//line sql.y:7603 { yyLOCAL = yyDollar[1].valTupleUnion() } yyVAL.union = yyLOCAL - case 1491: + case 1503: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7509 +//line sql.y:7607 { yyLOCAL = ValTuple{} } yyVAL.union = yyLOCAL - case 1492: + case 1504: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7515 +//line sql.y:7613 { yyLOCAL = ValTuple(yyDollar[2].exprsUnion()) } yyVAL.union = yyLOCAL - case 1493: + case 1505: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7519 +//line sql.y:7617 { yyLOCAL = ValTuple(yyDollar[3].exprsUnion()) } yyVAL.union = yyLOCAL - case 1494: + case 1506: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7524 +//line sql.y:7622 { if len(yyDollar[1].valTupleUnion()) == 1 { yyLOCAL = yyDollar[1].valTupleUnion()[0] @@ -20308,273 +20395,273 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1495: + case 1507: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7534 +//line sql.y:7632 { yyLOCAL = UpdateExprs{yyDollar[1].updateExprUnion()} } yyVAL.union = yyLOCAL - case 1496: + case 1508: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7538 +//line sql.y:7636 { yySLICE := (*UpdateExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].updateExprUnion()) } - case 1497: + case 1509: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *UpdateExpr -//line sql.y:7544 +//line sql.y:7642 { yyLOCAL = &UpdateExpr{Name: yyDollar[1].colNameUnion(), Expr: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1499: + case 1511: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7551 +//line sql.y:7649 { yyVAL.str = "charset" } - case 1502: + case 1514: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7561 +//line sql.y:7659 { yyLOCAL = NewStrLiteral(yyDollar[1].identifierCI.String()) } yyVAL.union = yyLOCAL - case 1503: + case 1515: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7565 +//line sql.y:7663 { yyLOCAL = NewStrLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1504: + case 1516: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7569 +//line sql.y:7667 { yyLOCAL = &Default{} } yyVAL.union = yyLOCAL - case 1507: + case 1519: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7578 +//line sql.y:7676 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1508: + case 1520: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:7580 +//line sql.y:7678 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1509: + case 1521: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7583 +//line sql.y:7681 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1510: + case 1522: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:7585 +//line sql.y:7683 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1511: + case 1523: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7588 +//line sql.y:7686 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1512: + case 1524: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL bool -//line sql.y:7590 +//line sql.y:7688 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1513: + case 1525: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Ignore -//line sql.y:7593 +//line sql.y:7691 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1514: + case 1526: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Ignore -//line sql.y:7595 +//line sql.y:7693 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1515: + case 1527: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7598 +//line sql.y:7696 { yyVAL.empty = struct{}{} } - case 1516: + case 1528: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7600 +//line sql.y:7698 { yyVAL.empty = struct{}{} } - case 1517: + case 1529: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7602 +//line sql.y:7700 { yyVAL.empty = struct{}{} } - case 1518: + case 1530: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:7606 +//line sql.y:7704 { yyLOCAL = &CallProc{Name: yyDollar[2].tableName, Params: yyDollar[4].exprsUnion()} } yyVAL.union = yyLOCAL - case 1519: + case 1531: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Exprs -//line sql.y:7611 +//line sql.y:7709 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1520: + case 1532: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Exprs -//line sql.y:7615 +//line sql.y:7713 { yyLOCAL = yyDollar[1].exprsUnion() } yyVAL.union = yyLOCAL - case 1521: + case 1533: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:7620 +//line sql.y:7718 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1522: + case 1534: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:7622 +//line sql.y:7720 { yyLOCAL = []*IndexOption{yyDollar[1].indexOptionUnion()} } yyVAL.union = yyLOCAL - case 1523: + case 1535: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:7626 +//line sql.y:7724 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), String: string(yyDollar[2].identifierCI.String())} } yyVAL.union = yyLOCAL - case 1524: + case 1536: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7632 +//line sql.y:7730 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 1525: + case 1537: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7636 +//line sql.y:7734 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 1527: + case 1539: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7643 +//line sql.y:7741 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 1528: + case 1540: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7649 +//line sql.y:7747 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1529: + case 1541: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7653 +//line sql.y:7751 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1530: + case 1542: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7659 +//line sql.y:7757 { yyVAL.identifierCS = NewIdentifierCS("") } - case 1531: + case 1543: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7663 +//line sql.y:7761 { yyVAL.identifierCS = yyDollar[1].identifierCS } - case 1533: + case 1545: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7670 +//line sql.y:7768 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 2097: + case 2110: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8261 +//line sql.y:8360 { if incNesting(yylex) { yylex.Error("max nesting level reached") return 1 } } - case 2098: + case 2111: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8270 +//line sql.y:8369 { decNesting(yylex) } - case 2099: + case 2112: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8275 +//line sql.y:8374 { skipToEnd(yylex) } - case 2100: + case 2113: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8280 +//line sql.y:8379 { skipToEnd(yylex) } - case 2101: + case 2114: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8284 +//line sql.y:8383 { skipToEnd(yylex) } - case 2102: + case 2115: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8288 +//line sql.y:8387 { skipToEnd(yylex) } diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index 629f0b5e98..a83a35637b 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -325,6 +325,8 @@ func bindVariable(yylex yyLexer, bvar string) { %token VITESS_MIGRATION CANCEL RETRY LAUNCH COMPLETE CLEANUP THROTTLE UNTHROTTLE EXPIRE RATIO PAUSE RESUME SCHEMA_MIGRATION // Throttler tokens %token VITESS_THROTTLER +// DML JOB tokens +%token DML_JOB // Transaction Tokens %token BEGIN START TRANSACTION COMMIT ROLLBACK SAVEPOINT RELEASE WORK @@ -3409,6 +3411,102 @@ alter_statement: Type: UnthrottleAllMigrationType, } } + + + + + + + + + + + + | ALTER comment_opt DML_JOB STRING LAUNCH + { + $$ = &AlterDMLJob{ + Type: LaunchDMLJobType, + UUID: string($4), + } + } + | ALTER comment_opt DML_JOB LAUNCH ALL + { + $$ = &AlterDMLJob{ + Type: LaunchAllDMLJobType, + } + } + | ALTER comment_opt DML_JOB STRING CANCEL + { + $$ = &AlterDMLJob{ + Type: CancelDMLJobType, + UUID: string($4), + } + } + | ALTER comment_opt DML_JOB STRING PAUSE + { + $$ = &AlterDMLJob{ + Type: PauseDMLJobType, + UUID: string($4), + } + } + | ALTER comment_opt DML_JOB STRING RESUME + { + $$ = &AlterDMLJob{ + Type: ResumeDMLJobType, + UUID: string($4), + } + } + | ALTER comment_opt DML_JOB CANCEL ALL + { + $$ = &AlterDMLJob{ + Type: CancelAllDMLJobType, + } + } + | ALTER comment_opt DML_JOB PAUSE ALL + { + $$ = &AlterDMLJob{ + Type: PauseAllDMLJobType, + } + } + | ALTER comment_opt DML_JOB RESUME ALL + { + $$ = &AlterDMLJob{ + Type: ResumeAllDMLJobType, + } + } + | ALTER comment_opt DML_JOB STRING THROTTLE expire_opt ratio_opt + { + $$ = &AlterDMLJob{ + Type: ThrottleDMLJobType, + UUID: string($4), + Expire: $6, + Ratio: $7, + } + } + | ALTER comment_opt DML_JOB THROTTLE ALL expire_opt ratio_opt + { + $$ = &AlterDMLJob{ + Type: ThrottleAllDMLJobType, + Expire: $6, + Ratio: $7, + } + } + | ALTER comment_opt DML_JOB STRING UNTHROTTLE + { + $$ = &AlterDMLJob{ + Type: UnthrottleDMLJobType, + UUID: string($4), + } + } + | ALTER comment_opt DML_JOB UNTHROTTLE ALL + { + $$ = &AlterDMLJob{ + Type: UnthrottleAllDMLJobType, + } + } + + + | ALTER comment_opt SCHEMA_MIGRATION STRING RETRY { $$ = &AlterMigration{ @@ -8215,6 +8313,7 @@ non_reserved_keyword: | VITESS_MIGRATION | VITESS_MIGRATIONS | SCHEMA_MIGRATION +| DML_JOB | DML_JOBS | VITESS_REPLICATION_STATUS | VITESS_SHARDS diff --git a/go/vt/vtgate/plan_execute.go b/go/vt/vtgate/plan_execute.go index 8585ccfd46..4ec7fab990 100644 --- a/go/vt/vtgate/plan_execute.go +++ b/go/vt/vtgate/plan_execute.go @@ -453,9 +453,9 @@ func HandleDMLJobSubmit(stmt sqlparser.Statement, vcursor *vcursorImpl, sql stri // todo ,在这个地方把qr写回到前端 if qr != nil { if qr.RowsAffected == 1 { - qr.Info = " job submitted successfully" + qr.Info = "job submitted successfully" } else { - qr.Info = " job submitted failed" + qr.Info = "job submitted failed" } } return qr, err diff --git a/go/vt/vtgate/planbuilder/builder.go b/go/vt/vtgate/planbuilder/builder.go index e9b0558d60..e439493f4c 100644 --- a/go/vt/vtgate/planbuilder/builder.go +++ b/go/vt/vtgate/planbuilder/builder.go @@ -152,6 +152,8 @@ func createInstructionFor(query string, stmt sqlparser.Statement, reservedVars * return buildGeneralDDLPlan(query, stmt, reservedVars, vschema, enableOnlineDDL, enableDirectDDL) case *sqlparser.AlterMigration: return buildAlterMigrationPlan(query, vschema, enableOnlineDDL) + case *sqlparser.AlterDMLJob: + return buildAlterDMLJobPlan(query, vschema) case *sqlparser.RevertMigration: return buildRevertMigrationPlan(query, stmt, vschema, enableOnlineDDL) case *sqlparser.ShowMigrationLogs: diff --git a/go/vt/vtgate/planbuilder/dmlJob.go b/go/vt/vtgate/planbuilder/dmlJob.go new file mode 100644 index 0000000000..2149af5bf8 --- /dev/null +++ b/go/vt/vtgate/planbuilder/dmlJob.go @@ -0,0 +1,39 @@ +/* +Copyright ApeCloud, Inc. +Licensed under the Apache v2(found in the LICENSE file in the root directory). +*/ + +package planbuilder + +import ( + "vitess.io/vitess/go/vt/key" + topodatapb "vitess.io/vitess/go/vt/proto/topodata" + "vitess.io/vitess/go/vt/vterrors" + "vitess.io/vitess/go/vt/vtgate/engine" + "vitess.io/vitess/go/vt/vtgate/planbuilder/plancontext" +) + +func buildAlterDMLJobPlan(query string, vschema plancontext.VSchema) (*planResult, error) { + dest, ks, tabletType, err := vschema.TargetDestination("") + if err != nil { + return nil, err + } + if ks == nil { + return nil, vterrors.VT09005() + } + + if tabletType != topodatapb.TabletType_PRIMARY { + return nil, vterrors.VT09006("ALTER") + } + + if dest == nil { + dest = key.DestinationAllShards{} + } + + send := &engine.Send{ + Keyspace: ks, + TargetDestination: dest, + Query: query, + } + return newPlanResult(send), nil +} diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index aabf406301..2a088bdabd 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -10,12 +10,15 @@ import ( "fmt" "math" "regexp" + "strconv" "strings" "sync" "time" + "vitess.io/vitess/go/mysql/collations" "vitess.io/vitess/go/pools" "vitess.io/vitess/go/sqltypes" + querypb "vitess.io/vitess/go/vt/proto/query" topodatapb "vitess.io/vitess/go/vt/proto/topodata" "vitess.io/vitess/go/vt/schema" "vitess.io/vitess/go/vt/sqlparser" @@ -29,8 +32,18 @@ const ( ) const ( - SubmitJob = "submit_job" - ShowJobs = "show_jobs" + SubmitJob = "submit_job" + ShowJobs = "show_jobs" + LaunchJob = "launch" + LaunchAllJobs = "launch_all" + PauseJob = "pause" + PauseAllJobs = "pause_all" + ResumeJob = "resume" + ResumeAllJobs = "resume_all" + ThrottleJob = "throttle" + ThrottleAllJobs = "throttle_all" + UnthrottleJob = "unthrottle" + UnthrottleAllJobs = "unthrottle_all" ) // todo ,支持用户输入 @@ -44,6 +57,7 @@ const ( queuedStatus = "queued" blockedStatus = "blocked" runningStatus = "running" + pausedStatus = "paused" interruptedStatus = "interrupted" canceledStatus = "canceled" failedStatus = "failed" @@ -58,7 +72,8 @@ const ( related_table, timegap_in_ms, subtask_rows, - job_status) values(%a,%a,%a,%a,%a,%a,%a)` + subtask_sql, + job_status) values(%a,%a,%a,%a,%a,%a,%a,%a)` sqlDMLJobUpdateMessage = `update mysql.big_dml_jobs_table set message = %a @@ -74,6 +89,10 @@ const ( job_status = %a where job_uuid = %a` + + sqlDMLJobGetInfo = `select * from mysql.big_dml_jobs_table + where + job_uuid = %a` ) type JobController struct { @@ -83,8 +102,8 @@ type JobController struct { env tabletenv.Env pool *connpool.Pool - runningTables map[string]bool // 用于调度时检测当前任务是否和正在运行的表冲突 - runningTablesMutex sync.Mutex + workingTables map[string]bool // 用于调度时检测当前任务是否和正在工作的表冲突,paused、running状态的job的表都在里面 + workingTablesMutex sync.Mutex jobChans map[string]JobChanStruct jobChansMutex sync.Mutex @@ -104,7 +123,7 @@ func (jc *JobController) Open() error { if jc.tabletTypeFunc() == topodatapb.TabletType_PRIMARY { jc.pool.Open(jc.env.Config().DB.AppConnector(), jc.env.Config().DB.DbaConnector(), jc.env.Config().DB.AppDebugConnector()) - jc.runningTables = map[string]bool{} + jc.workingTables = map[string]bool{} jc.jobChans = map[string]JobChanStruct{} go jc.jonScheduler() @@ -141,6 +160,10 @@ func (jc *JobController) HandleRequest(command, sql, jobUUID string) (*sqltypes. return jc.SubmitJob(sql) case ShowJobs: return jc.ShowJobs() + case PauseJob: + return jc.PauseJob(jobUUID) + case ResumeJob: + return jc.ResumeJob(jobUUID) } } // todo newborn22,对返回值判断为空? @@ -162,18 +185,20 @@ func (jc *JobController) SubmitJob(sql string) (*sqltypes.Result, error) { ctx := context.Background() sql = rewirteSQL(sql) - relatedSchema := "mydb" // todo,传入 - table := "test_table2" // todo ,前端传入 - timeGap := defaultTimeGap - subtaskRows := defaultSubtaskRows + relatedSchema := "mydb" // todo,传入 + table := "test_table2" // todo ,前端传入 + timeGap := int64(defaultTimeGap) // todo 传入 + subtaskRows := int64(defaultSubtaskRows) // todo 传入 + subtaskSQL := genSubtaskDMLSQL(sql, subtaskRows) submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobSubmit, sqltypes.StringBindVariable(jobUUID), sqltypes.StringBindVariable(sql), sqltypes.StringBindVariable(relatedSchema), sqltypes.StringBindVariable(table), - sqltypes.Int64BindVariable(int64(timeGap)), - sqltypes.Int64BindVariable(int64(subtaskRows)), + sqltypes.Int64BindVariable(timeGap), + sqltypes.Int64BindVariable(subtaskRows), + sqltypes.StringBindVariable(subtaskSQL), sqltypes.StringBindVariable(queuedStatus)) if err != nil { return nil, err @@ -182,7 +207,23 @@ func (jc *JobController) SubmitJob(sql string) (*sqltypes.Result, error) { jobChan := JobChanStruct{pauseAndResume: make(chan string), throttleAndUnthrottle: make(chan string)} jc.jobChans[jobUUID] = jobChan - return jc.execQuery(ctx, "", submitQuery) + _, err = jc.execQuery(ctx, "", submitQuery) + if err != nil { + return &sqltypes.Result{}, err + } + return jc.buildJobSubmitResult(jobUUID, subtaskSQL, timeGap, subtaskRows), nil +} + +func (jc *JobController) buildJobSubmitResult(jobUUID, subtaskSQL string, timeGap, subtaskRows int64) *sqltypes.Result { + var rows []sqltypes.Row + row := buildVarCharRow(jobUUID, strconv.FormatInt(timeGap, 10), "support later", strconv.FormatInt(subtaskRows, 10), subtaskSQL, "support later", "support later") + rows = append(rows, row) + submitRst := &sqltypes.Result{ + Fields: buildVarCharFields("job_uuid", "time_gap_in_ms", "total_rows", "subtask_rows", "subtask_sql", "auto_retry", "postpone_launch"), + Rows: rows, + RowsAffected: 1, + } + return submitRst } func (jc *JobController) ShowJobs() (*sqltypes.Result, error) { @@ -193,8 +234,55 @@ func (jc *JobController) ShowJobs() (*sqltypes.Result, error) { return jc.execQuery(ctx, "mysql", showJobsSQL) } -func (jc *JobController) ControlJob() error { - return nil +func (jc *JobController) PauseJob(uuid string) (*sqltypes.Result, error) { + var emptyResult = &sqltypes.Result{} + ctx := context.Background() + status, err := jc.GetStrJobInfo(ctx, uuid, "job_status") + if err != nil { + return emptyResult, err + } + if status != runningStatus { + // todo,将info写回给vtgate,目前还不生效 + emptyResult.Info = " The job status is not running and can't be paused" + return emptyResult, nil + } + + qr, err := jc.updateJobStatus(ctx, uuid, pausedStatus) + if err != nil { + return emptyResult, err + } + + // 往通道发送cmd进行暂停 + jc.jobChansMutex.Lock() + defer jc.jobChansMutex.Unlock() + pauseChan := jc.jobChans[uuid].pauseAndResume + pauseChan <- "pause" + return qr, nil +} + +func (jc *JobController) ResumeJob(uuid string) (*sqltypes.Result, error) { + var emptyResult = &sqltypes.Result{} + ctx := context.Background() + status, err := jc.GetStrJobInfo(ctx, uuid, "job_status") + if err != nil { + return emptyResult, err + } + if status != pausedStatus { + emptyResult.Info = " The job status is not paused and don't need resume" + return emptyResult, nil + } + + qr, err := jc.updateJobStatus(ctx, uuid, runningStatus) + if err != nil { + return emptyResult, err + } + + // 往通道发送cmd以继续 + jc.jobChansMutex.Lock() + defer jc.jobChansMutex.Unlock() + pauseChan := jc.jobChans[uuid].pauseAndResume + pauseChan <- "resume" + return qr, nil } func (jc *JobController) RunJob() error { @@ -205,10 +293,10 @@ func (jc *JobController) QueryJob() error { return nil } -func (jc *JobController) CompleteJob(ctx context.Context, uuid, table string) error { - jc.runningTablesMutex.Lock() - defer jc.runningTablesMutex.Unlock() - delete(jc.runningTables, table) +func (jc *JobController) CompleteJob(ctx context.Context, uuid, table string) (*sqltypes.Result, error) { + jc.workingTablesMutex.Lock() + defer jc.workingTablesMutex.Unlock() + delete(jc.workingTables, table) jc.jobChansMutex.Lock() defer jc.jobChansMutex.Unlock() @@ -222,7 +310,7 @@ func (jc *JobController) CompleteJob(ctx context.Context, uuid, table string) er // todo, 记录错误时的错误怎么处理 func (jc *JobController) FailJob(ctx context.Context, uuid, message string) { _ = jc.updateJobMessage(ctx, uuid, message) - _ = jc.updateJobStatus(ctx, uuid, failedStatus) + _, _ = jc.updateJobStatus(ctx, uuid, failedStatus) } // todo newborn 做成接口 @@ -234,7 +322,8 @@ func jobTask() { func (jc *JobController) jonScheduler() { ctx := context.Background() for { - jc.runningTablesMutex.Lock() + // todo,这里拿锁存在潜在bug,因为checkDmlJobRunnable中也拿了并去变成running状态,一个job可能被启动多次,要成睡眠和唤醒的方式 + jc.workingTablesMutex.Lock() jc.tableMutex.Lock() qr, _ := jc.execQuery(ctx, "", "select * from mysql.big_dml_jobs_table;") @@ -246,15 +335,15 @@ func (jc *JobController) jonScheduler() { schema := row["related_schema"].ToString() table := row["related_table"].ToString() uuid := row["job_uuid"].ToString() - sql := row["dml_sql"].ToString() timegap, _ := row["timegap_in_ms"].ToInt64() - subtaskRows, _ := row["subtask_rows"].ToInt64() + subtaskSQL := row["subtask_sql"].ToString() if jc.checkDmlJobRunnable(status, table) { - go jc.dmlJobRunner(uuid, table, sql, schema, subtaskRows, timegap) + jc.workingTables[table] = true // todo 这里之后改成休眠的方式后要删掉 + go jc.dmlJobRunner(uuid, table, schema, subtaskSQL, timegap) } } - jc.runningTablesMutex.Unlock() + jc.workingTablesMutex.Unlock() jc.tableMutex.Unlock() time.Sleep(3 * time.Second) @@ -267,14 +356,14 @@ func (jc *JobController) checkDmlJobRunnable(status, table string) bool { if status != queuedStatus { return false } - if _, exit := jc.runningTables[table]; exit { + if _, exit := jc.workingTables[table]; exit { return false } return true } -func (jc *JobController) dmlJobRunner(uuid, table, sql, relatedSchema string, subtaskRows, timeGap int64) { - subtaskSQL := genSubtaskDMLSQL(sql, subtaskRows) +func (jc *JobController) dmlJobRunner(uuid, table, relatedSchema, subtaskSQL string, timeGap int64) { + jc.jobChansMutex.Lock() jobChan := jc.jobChans[uuid] jc.jobChansMutex.Unlock() @@ -287,10 +376,13 @@ func (jc *JobController) dmlJobRunner(uuid, table, sql, relatedSchema string, su ctx := context.Background() - jc.runningTablesMutex.Lock() - jc.runningTables[table] = true - jc.runningTablesMutex.Unlock() - _ = jc.updateJobStatus(ctx, uuid, runningStatus) + jc.workingTablesMutex.Lock() + jc.workingTables[table] = true + jc.workingTablesMutex.Unlock() + _, err := jc.updateJobStatus(ctx, uuid, runningStatus) + if err != nil { + jc.FailJob(ctx, uuid, err.Error()) + } // 在一个无限循环中等待定时器触发 for { @@ -303,7 +395,7 @@ func (jc *JobController) dmlJobRunner(uuid, table, sql, relatedSchema string, su return } if qr.RowsAffected == 0 { - err = jc.CompleteJob(ctx, uuid, table) + _, err = jc.CompleteJob(ctx, uuid, table) if err != nil { jc.FailJob(ctx, uuid, err.Error()) } @@ -396,7 +488,7 @@ func (jc *JobController) updateJobAffectedRows(ctx context.Context, uuid string, return err } -func (jc *JobController) updateJobStatus(ctx context.Context, uuid, status string) error { +func (jc *JobController) updateJobStatus(ctx context.Context, uuid, status string) (*sqltypes.Result, error) { jc.tableMutex.Lock() defer jc.tableMutex.Unlock() @@ -404,8 +496,66 @@ func (jc *JobController) updateJobStatus(ctx context.Context, uuid, status strin sqltypes.StringBindVariable(status), sqltypes.StringBindVariable(uuid)) if err != nil { - return err + return &sqltypes.Result{}, err } - _, err = jc.execQuery(ctx, "", submitQuery) - return err + return jc.execQuery(ctx, "", submitQuery) +} + +func (jc *JobController) GetIntJobInfo(ctx context.Context, uuid, fieldName string) (int64, error) { + jc.tableMutex.Lock() + defer jc.tableMutex.Unlock() + + submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobGetInfo, + sqltypes.StringBindVariable(uuid)) + if err != nil { + return 0, err + } + qr, err := jc.execQuery(ctx, "", submitQuery) + if err != nil { + return 0, err + } + if len(qr.Named().Rows) != 1 { + return 0, fmt.Errorf("uuid %s has %d entrys in the table instead of 1", uuid, len(qr.Named().Rows)) + } + return qr.Named().Rows[0].ToInt64(fieldName) +} + +func (jc *JobController) GetStrJobInfo(ctx context.Context, uuid, fieldName string) (string, error) { + jc.tableMutex.Lock() + defer jc.tableMutex.Unlock() + + submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobGetInfo, + sqltypes.StringBindVariable(uuid)) + if err != nil { + return "", err + } + qr, err := jc.execQuery(ctx, "", submitQuery) + if err != nil { + return "", err + } + if len(qr.Named().Rows) != 1 { + return "", fmt.Errorf("uuid %s has %d entrys in the table instead of 1", uuid, len(qr.Named().Rows)) + } + return qr.Named().Rows[0].ToString(fieldName) +} + +func buildVarCharFields(names ...string) []*querypb.Field { + fields := make([]*querypb.Field, len(names)) + for i, v := range names { + fields[i] = &querypb.Field{ + Name: v, + Type: sqltypes.VarChar, + Charset: collations.CollationUtf8ID, + Flags: uint32(querypb.MySqlFlag_NOT_NULL_FLAG), + } + } + return fields +} + +func buildVarCharRow(values ...string) []sqltypes.Value { + row := make([]sqltypes.Value, len(values)) + for i, v := range values { + row[i] = sqltypes.NewVarChar(v) + } + return row } diff --git a/go/vt/vttablet/tabletserver/planbuilder/permission.go b/go/vt/vttablet/tabletserver/planbuilder/permission.go index 9d7f4a869a..95e7c57215 100644 --- a/go/vt/vttablet/tabletserver/planbuilder/permission.go +++ b/go/vt/vttablet/tabletserver/planbuilder/permission.go @@ -76,6 +76,7 @@ func BuildPermissions(stmt sqlparser.Statement, dbName string) []Permission { } case *sqlparser.AlterMigration, + *sqlparser.AlterDMLJob, *sqlparser.RevertMigration, *sqlparser.ShowMigrationLogs, *sqlparser.ShowThrottledApps, diff --git a/go/vt/vttablet/tabletserver/planbuilder/plan.go b/go/vt/vttablet/tabletserver/planbuilder/plan.go index 979f170f93..cc8024b5de 100644 --- a/go/vt/vttablet/tabletserver/planbuilder/plan.go +++ b/go/vt/vttablet/tabletserver/planbuilder/plan.go @@ -80,6 +80,7 @@ const ( PlanUnlockTables PlanCallProc PlanAlterMigration + PlanAlterDMLJob PlanRevertMigration PlanShowMigrationLogs PlanShowThrottledApps @@ -116,6 +117,7 @@ var planName = []string{ "UnlockTables", "CallProcedure", "AlterMigration", + "AlterDMLJob", "RevertMigration", "ShowMigrationLogs", "ShowThrottledApps", @@ -230,6 +232,8 @@ func Build(statement sqlparser.Statement, tables map[string]*schema.Table, dbNam plan, err = analyzeDBDDL(stmt) case *sqlparser.AlterMigration: plan, err = &Plan{PlanID: PlanAlterMigration, FullStmt: stmt}, nil + case *sqlparser.AlterDMLJob: + plan, err = &Plan{PlanID: PlanAlterDMLJob, FullStmt: stmt}, nil case *sqlparser.RevertMigration: plan, err = &Plan{PlanID: PlanRevertMigration, FullStmt: stmt}, nil case *sqlparser.ShowMigrationLogs: diff --git a/go/vt/vttablet/tabletserver/query_executor.go b/go/vt/vttablet/tabletserver/query_executor.go index a1a83920ee..35d8c71b76 100644 --- a/go/vt/vttablet/tabletserver/query_executor.go +++ b/go/vt/vttablet/tabletserver/query_executor.go @@ -201,6 +201,8 @@ func (qre *QueryExecutor) Execute() (reply *sqltypes.Result, err error) { return qre.execCallProc() case p.PlanAlterMigration: return qre.execAlterMigration() + case p.PlanAlterDMLJob: + return qre.execAlterDMLJob() case p.PlanRevertMigration: return qre.execRevertMigration() case p.PlanShowMigrationLogs: @@ -1151,6 +1153,21 @@ func (qre *QueryExecutor) execAlterMigration() (*sqltypes.Result, error) { return nil, vterrors.New(vtrpcpb.Code_UNIMPLEMENTED, "ALTER VITESS_MIGRATION not implemented") } +func (qre *QueryExecutor) execAlterDMLJob() (*sqltypes.Result, error) { + alterDMLJob, ok := qre.plan.FullStmt.(*sqlparser.AlterDMLJob) + if !ok { + return nil, vterrors.New(vtrpcpb.Code_INTERNAL, "Expecting ALTER DML_JOB plan") + } + uuid := alterDMLJob.UUID + switch alterDMLJob.Type { + case sqlparser.PauseDMLJobType: + return qre.tsv.dmlJonController.HandleRequest("pause", "", uuid) + case sqlparser.ResumeDMLJobType: + return qre.tsv.dmlJonController.HandleRequest("resume", "", uuid) + } + return nil, vterrors.New(vtrpcpb.Code_UNIMPLEMENTED, "ALTER DML_JOB not implemented") +} + func (qre *QueryExecutor) execRevertMigration() (*sqltypes.Result, error) { if _, ok := qre.plan.FullStmt.(*sqlparser.RevertMigration); !ok { return nil, vterrors.New(vtrpcpb.Code_INTERNAL, "Expecting REVERT VITESS_MIGRATION plan") From d2544f36250867e7a886ed555dd52ca19b76ecec Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Fri, 8 Dec 2023 10:46:39 +0800 Subject: [PATCH 03/54] feat: demo, update,delete,pause,resume,submit display Signed-off-by: newborn22 <953950914@qq.com> --- .../schema/job/big_dml_jobs_table.sql | 1 + go/vt/vttablet/jobcontroller/controller.go | 238 ++++++++++++++++-- 2 files changed, 212 insertions(+), 27 deletions(-) diff --git a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql index 83f6845eda..08aa91c15b 100644 --- a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql +++ b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql @@ -27,6 +27,7 @@ CREATE TABLE IF NOT EXISTS mysql.big_dml_jobs_table `timegap_in_ms` bigint NOT NULL , `subtask_rows` bigint NOT NULL , `subtask_sql` varchar(256) NULL DEFAULT NULL, + `dml_type` varchar(256) NULL DEFAULT NULL, `affected_rows` bigint NOT NULL DEFAULT 0, PRIMARY KEY (`id`) ) ENGINE = InnoDB diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 2a088bdabd..f43f303917 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -7,6 +7,7 @@ package jobcontroller import ( "context" + "errors" "fmt" "math" "regexp" @@ -73,7 +74,8 @@ const ( timegap_in_ms, subtask_rows, subtask_sql, - job_status) values(%a,%a,%a,%a,%a,%a,%a,%a)` + dml_type, + job_status) values(%a,%a,%a,%a,%a,%a,%a,%a,%a)` sqlDMLJobUpdateMessage = `update mysql.big_dml_jobs_table set message = %a @@ -93,6 +95,17 @@ const ( sqlDMLJobGetInfo = `select * from mysql.big_dml_jobs_table where job_uuid = %a` + + sqlGetTablePk = ` SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE + WHERE + TABLE_SCHEMA = %a + AND TABLE_NAME = %a + AND CONSTRAINT_NAME = 'PRIMARY'` + + sqlGetTableColNames = `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS + WHERE + TABLE_SCHEMA = %a + AND TABLE_NAME = %a` ) type JobController struct { @@ -186,10 +199,14 @@ func (jc *JobController) SubmitJob(sql string) (*sqltypes.Result, error) { ctx := context.Background() sql = rewirteSQL(sql) relatedSchema := "mydb" // todo,传入 - table := "test_table2" // todo ,前端传入 timeGap := int64(defaultTimeGap) // todo 传入 subtaskRows := int64(defaultSubtaskRows) // todo 传入 - subtaskSQL := genSubtaskDMLSQL(sql, subtaskRows) + // todo,改写,根据stmt + // todo 对于jobrunner,要区分update和delete,update每次都要更新执行的limit值。 + table, dmlType, subtaskSQL, err := jc.genSubtaskDMLSQL(sql, relatedSchema, subtaskRows) + if err != nil { + return &sqltypes.Result{}, err + } submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobSubmit, sqltypes.StringBindVariable(jobUUID), @@ -199,6 +216,7 @@ func (jc *JobController) SubmitJob(sql string) (*sqltypes.Result, error) { sqltypes.Int64BindVariable(timeGap), sqltypes.Int64BindVariable(subtaskRows), sqltypes.StringBindVariable(subtaskSQL), + sqltypes.StringBindVariable(dmlType), sqltypes.StringBindVariable(queuedStatus)) if err != nil { return nil, err @@ -285,14 +303,6 @@ func (jc *JobController) ResumeJob(uuid string) (*sqltypes.Result, error) { return qr, nil } -func (jc *JobController) RunJob() error { - return nil -} - -func (jc *JobController) QueryJob() error { - return nil -} - func (jc *JobController) CompleteJob(ctx context.Context, uuid, table string) (*sqltypes.Result, error) { jc.workingTablesMutex.Lock() defer jc.workingTablesMutex.Unlock() @@ -308,9 +318,14 @@ func (jc *JobController) CompleteJob(ctx context.Context, uuid, table string) (* } // todo, 记录错误时的错误怎么处理 -func (jc *JobController) FailJob(ctx context.Context, uuid, message string) { +func (jc *JobController) FailJob(ctx context.Context, uuid, message, tableName string) { _ = jc.updateJobMessage(ctx, uuid, message) _, _ = jc.updateJobStatus(ctx, uuid, failedStatus) + + jc.workingTablesMutex.Lock() + defer jc.workingTablesMutex.Unlock() + delete(jc.workingTables, tableName) + } // todo newborn 做成接口 @@ -337,9 +352,10 @@ func (jc *JobController) jonScheduler() { uuid := row["job_uuid"].ToString() timegap, _ := row["timegap_in_ms"].ToInt64() subtaskSQL := row["subtask_sql"].ToString() + dmlType := row["dml_type"].ToString() if jc.checkDmlJobRunnable(status, table) { jc.workingTables[table] = true // todo 这里之后改成休眠的方式后要删掉 - go jc.dmlJobRunner(uuid, table, schema, subtaskSQL, timegap) + go jc.dmlJobRunner(uuid, table, schema, subtaskSQL, dmlType, timegap) } } @@ -362,7 +378,7 @@ func (jc *JobController) checkDmlJobRunnable(status, table string) bool { return true } -func (jc *JobController) dmlJobRunner(uuid, table, relatedSchema, subtaskSQL string, timeGap int64) { +func (jc *JobController) dmlJobRunner(uuid, table, relatedSchema, subtaskSQL, dmlType string, timeGap int64) { jc.jobChansMutex.Lock() jobChan := jc.jobChans[uuid] @@ -381,31 +397,46 @@ func (jc *JobController) dmlJobRunner(uuid, table, relatedSchema, subtaskSQL str jc.workingTablesMutex.Unlock() _, err := jc.updateJobStatus(ctx, uuid, runningStatus) if err != nil { - jc.FailJob(ctx, uuid, err.Error()) + jc.FailJob(ctx, uuid, err.Error(), table) } + offset := int64(0) + // 在一个无限循环中等待定时器触发 for { select { case <-timer.C: // 定时器触发时执行的函数 - qr, err := jc.execQuery(ctx, relatedSchema, subtaskSQL) + var query string + if dmlType == "update" { + query, err = sqlparser.ParseAndBind(subtaskSQL, sqltypes.Int64BindVariable(offset)) + if err != nil { + jc.FailJob(ctx, uuid, err.Error(), table) + } + } + if dmlType == "delete" { + query = subtaskSQL + } + qr, err := jc.execQuery(ctx, relatedSchema, query) if err != nil { - jc.FailJob(ctx, uuid, err.Error()) + jc.FailJob(ctx, uuid, err.Error(), table) return } if qr.RowsAffected == 0 { _, err = jc.CompleteJob(ctx, uuid, table) if err != nil { - jc.FailJob(ctx, uuid, err.Error()) + jc.FailJob(ctx, uuid, err.Error(), table) } return } err = jc.updateJobAffectedRows(ctx, uuid, int64(qr.RowsAffected)) if err != nil { - jc.FailJob(ctx, uuid, err.Error()) + jc.FailJob(ctx, uuid, err.Error(), table) return } + if dmlType == "update" { + offset += int64(qr.RowsAffected) + } // 控制暂停 case command := <-pauseAndResumeChan: @@ -425,14 +456,103 @@ func (jc *JobController) dmlJobRunner(uuid, table, relatedSchema, subtaskSQL str // todo sql类型的判断换成别的方式 // todo 加行数字段 -func genSubtaskDMLSQL(sql string, subtaskRows int64) string { - var subtaskSQL string - sqlType := strings.ToLower(strings.Fields(sql)[0]) - switch sqlType { - case "delete": - subtaskSQL = sql + fmt.Sprintf(" LIMIT %d", subtaskRows) - } - return subtaskSQL +func (jc *JobController) genSubtaskDMLSQL(sql, tableSchema string, subtaskRows int64) (tableName, dmlType string, subTaskSQL string, err error) { + + stmt, _, err := sqlparser.Parse2(sql) + if err != nil { + return "", "", "", err + } + switch s := stmt.(type) { + case *sqlparser.Delete: + if s.Limit != nil { + return "", "", "", errors.New("the sql already has a LIMIT condition, can't be transferred to a DML job") + } + s.Limit = &sqlparser.Limit{Rowcount: sqlparser.NewIntLiteral(strconv.FormatInt(subtaskRows, 10))} + // todo,目前只支持单表 + if len(s.TableExprs) > 1 { + return "", "", "", errors.New("the delete sql deals multi tables can't be transferred to a DML job") + } + tableName := sqlparser.String(s.TableExprs) + return tableName, "delete", sqlparser.String(s), nil + case *sqlparser.Update: + // todo,最set中包含有pk的进行过滤 + // 如何获得一个表的pk/ pks? + // update t set c1=v1,c2=v2... where P + // update t temp1 join (select PK order by PK limit rows offset off t2) on t1.Pk=t2.Pk set temp1.c1=v1, temp1.c2=v2.. where P + // 需要获得表名、set后的投影,where谓词的字符串,然后用字符串拼接的方式完成 + + // select statement -> derivedTable -> joinTable + // todo,目前只支持单表 + if len(s.TableExprs) > 1 { + return "", "", "", errors.New("the update sql deals multi tables can't be transferred to a DML job") + } + tableName := sqlparser.String(s.TableExprs) + ctx := context.Background() + pkNames, err := jc.getTablePkName(ctx, tableSchema, tableName) + if err != nil { + return "", "", "", err + } + // todo ,目前只支持单个PK + if len(pkNames) > 1 { + return "", "", "", errors.New("the update sql on table with multi Pks can't be transferred to a DML job") + } + selectStr := "select " + firstPK := true + for _, pkName := range pkNames { + if firstPK { + selectStr += pkName + firstPK = false + } else { + selectStr += " ," + selectStr += pkName + } + } + selectStr += fmt.Sprintf(" from %s ", tableName) + + whereStr := sqlparser.String(s.Where) + selectStr += whereStr + + firstPK = true + selectStr += " order by " + for _, pkName := range pkNames { + if firstPK { + selectStr += pkName + firstPK = false + } else { + selectStr += " ," + selectStr += pkName + } + } + + selectStr += fmt.Sprintf(" limit %d offset %%a", subtaskRows) + + updateExprStr := sqlparser.String(s.Exprs) + + //colNames, err := jc.getTableColNames(ctx, tableSchema, tableName) + //if err != nil { + // return "", "", err + //} + // whereStr = rewriteWhereStr(whereStr, "dml_job_temp_table222", colNames) + + pkName := pkNames[0] + + subtaskSQL := "" + if s.With != nil { + subtaskSQL = sqlparser.String(s.With) + " " + } + subtaskSQL += fmt.Sprintf("UPDATE %s dml_job_temp_table111 JOIN (%s) dml_job_temp_table222 ON dml_job_temp_table111.%s = dml_job_temp_table222.%s SET %s", + tableName, selectStr, pkName, pkName, updateExprStr) + + //selectStmt, _, err := sqlparser.Parse2(selectStr) + //if err != nil { + // return "", err + //} + //joinLeftExpr := sqlparser.AliasedTableExpr{Expr: sqlparser.TableName{Name: sqlparser.IdentifierCS{}}} + //sqlparser.JoinTableExpr{Join: sqlparser.NormalJoinType,LeftExpr: } + return tableName, "update", subtaskSQL, nil + + } + return "", "", "", errors.New("the sql type can't be transferred to a DML job") } // execQuery execute sql by using connect poll,so if targetString is not empty, it will add prefix `use database` first then execute sql. @@ -559,3 +679,67 @@ func buildVarCharRow(values ...string) []sqltypes.Value { } return row } + +func (jc *JobController) getTablePkName(ctx context.Context, tableSchema, tableName string) ([]string, error) { + submitQuery, err := sqlparser.ParseAndBind(sqlGetTablePk, + sqltypes.StringBindVariable(tableSchema), + sqltypes.StringBindVariable(tableName)) + if err != nil { + return nil, err + } + qr, err := jc.execQuery(ctx, "", submitQuery) + if err != nil { + return nil, err + } + var pkNames []string + for _, row := range qr.Named().Rows { + pkNames = append(pkNames, row["COLUMN_NAME"].ToString()) + } + return pkNames, nil +} + +func (jc *JobController) getTableColNames(ctx context.Context, tableSchema, tableName string) ([]string, error) { + submitQuery, err := sqlparser.ParseAndBind(sqlGetTableColNames, + sqltypes.StringBindVariable(tableSchema), + sqltypes.StringBindVariable(tableName)) + if err != nil { + return nil, err + } + qr, err := jc.execQuery(ctx, "", submitQuery) + if err != nil { + return nil, err + } + var colNames []string + for _, row := range qr.Named().Rows { + colNames = append(colNames, row["COLUMN_NAME"].ToString()) + } + return colNames, nil +} + +func rewriteWhereStr(whereStr, subQueryTableName string, colNames []string) string { + + // 使用正则表达式匹配单词 + re := regexp.MustCompile(`\b\w+(\.\w+)?\b`) + modifiedStr := re.ReplaceAllStringFunc(whereStr, func(match string) string { + // 检查匹配的单词是否在 colNames 中或者是否以 'mytable.' 开头 + parts := strings.Split(match, ".") + if len(parts) > 1 { + if contains(colNames, parts[1]) { + return subQueryTableName + "." + parts[1] + } + } else if contains(colNames, match) { + return subQueryTableName + "." + match + } + return match + }) + return modifiedStr +} + +func contains(arr []string, str string) bool { + for _, v := range arr { + if v == str { + return true + } + } + return false +} From fbf836b42df138816677f0941109cd6e8b450611 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Mon, 11 Dec 2023 11:38:15 +0800 Subject: [PATCH 04/54] feat: support crash recover when job status is running or paused Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/proto/query/query.pb.go | 245 +++++------ go/vt/proto/query/query_vtproto.pb.go | 28 +- go/vt/proto/queryservice/queryservice.pb.go | 26 +- .../queryservice/queryservice_grpc.pb.go | 28 +- .../schema/job/big_dml_jobs_table.sql | 4 +- go/vt/sqlparser/comments.go | 56 ++- go/vt/vtgate/executor.go | 4 +- go/vt/vtgate/plan_execute.go | 3 +- go/vt/vtgate/vcursor_impl.go | 2 +- go/vt/vttablet/grpcqueryservice/server.go | 6 +- go/vt/vttablet/grpctabletconn/conn.go | 19 +- go/vt/vttablet/jobcontroller/controller.go | 392 ++++++++++++++---- go/vt/vttablet/queryservice/queryservice.go | 2 +- go/vt/vttablet/queryservice/wrapped.go | 6 +- go/vt/vttablet/sandboxconn/sandboxconn.go | 2 +- .../tabletconntest/fakequeryservice.go | 2 +- go/vt/vttablet/tabletserver/query_executor.go | 4 +- go/vt/vttablet/tabletserver/tabletserver.go | 5 +- proto/query.proto | 5 +- proto/queryservice.proto | 2 +- 20 files changed, 568 insertions(+), 273 deletions(-) diff --git a/go/vt/proto/query/query.pb.go b/go/vt/proto/query/query.pb.go index 92334ab791..57694d1e6d 100644 --- a/go/vt/proto/query/query.pb.go +++ b/go/vt/proto/query/query.pb.go @@ -6128,7 +6128,7 @@ func (*ReloadExecResponse) Descriptor() ([]byte, []int) { return file_query_proto_rawDescGZIP(), []int{71} } -type DMLJobRequest struct { +type SubmitDMLJobRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -6143,8 +6143,8 @@ type DMLJobRequest struct { PostponeLaunch bool `protobuf:"varint,9,opt,name=postpone_launch,json=postponeLaunch,proto3" json:"postpone_launch,omitempty"` } -func (x *DMLJobRequest) Reset() { - *x = DMLJobRequest{} +func (x *SubmitDMLJobRequest) Reset() { + *x = SubmitDMLJobRequest{} if protoimpl.UnsafeEnabled { mi := &file_query_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6152,13 +6152,13 @@ func (x *DMLJobRequest) Reset() { } } -func (x *DMLJobRequest) String() string { +func (x *SubmitDMLJobRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DMLJobRequest) ProtoMessage() {} +func (*SubmitDMLJobRequest) ProtoMessage() {} -func (x *DMLJobRequest) ProtoReflect() protoreflect.Message { +func (x *SubmitDMLJobRequest) ProtoReflect() protoreflect.Message { mi := &file_query_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6170,68 +6170,68 @@ func (x *DMLJobRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DMLJobRequest.ProtoReflect.Descriptor instead. -func (*DMLJobRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use SubmitDMLJobRequest.ProtoReflect.Descriptor instead. +func (*SubmitDMLJobRequest) Descriptor() ([]byte, []int) { return file_query_proto_rawDescGZIP(), []int{72} } -func (x *DMLJobRequest) GetCmd() string { +func (x *SubmitDMLJobRequest) GetCmd() string { if x != nil { return x.Cmd } return "" } -func (x *DMLJobRequest) GetJobUuid() string { +func (x *SubmitDMLJobRequest) GetJobUuid() string { if x != nil { return x.JobUuid } return "" } -func (x *DMLJobRequest) GetSql() string { +func (x *SubmitDMLJobRequest) GetSql() string { if x != nil { return x.Sql } return "" } -func (x *DMLJobRequest) GetRelatedSchema() string { +func (x *SubmitDMLJobRequest) GetRelatedSchema() string { if x != nil { return x.RelatedSchema } return "" } -func (x *DMLJobRequest) GetTimegap() int64 { +func (x *SubmitDMLJobRequest) GetTimegap() int64 { if x != nil { return x.Timegap } return 0 } -func (x *DMLJobRequest) GetSubtaskRows() int64 { +func (x *SubmitDMLJobRequest) GetSubtaskRows() int64 { if x != nil { return x.SubtaskRows } return 0 } -func (x *DMLJobRequest) GetAutoRetry() bool { +func (x *SubmitDMLJobRequest) GetAutoRetry() bool { if x != nil { return x.AutoRetry } return false } -func (x *DMLJobRequest) GetPostponeLaunch() bool { +func (x *SubmitDMLJobRequest) GetPostponeLaunch() bool { if x != nil { return x.PostponeLaunch } return false } -type DMLJobResponse struct { +type SubmitDMLJobResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -6239,8 +6239,8 @@ type DMLJobResponse struct { Result *QueryResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` } -func (x *DMLJobResponse) Reset() { - *x = DMLJobResponse{} +func (x *SubmitDMLJobResponse) Reset() { + *x = SubmitDMLJobResponse{} if protoimpl.UnsafeEnabled { mi := &file_query_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6248,13 +6248,13 @@ func (x *DMLJobResponse) Reset() { } } -func (x *DMLJobResponse) String() string { +func (x *SubmitDMLJobResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DMLJobResponse) ProtoMessage() {} +func (*SubmitDMLJobResponse) ProtoMessage() {} -func (x *DMLJobResponse) ProtoReflect() protoreflect.Message { +func (x *SubmitDMLJobResponse) ProtoReflect() protoreflect.Message { mi := &file_query_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -6266,12 +6266,12 @@ func (x *DMLJobResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DMLJobResponse.ProtoReflect.Descriptor instead. -func (*DMLJobResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use SubmitDMLJobResponse.ProtoReflect.Descriptor instead. +func (*SubmitDMLJobResponse) Descriptor() ([]byte, []int) { return file_query_proto_rawDescGZIP(), []int{73} } -func (x *DMLJobResponse) GetResult() *QueryResult { +func (x *SubmitDMLJobResponse) GetResult() *QueryResult { if x != nil { return x.Result } @@ -7297,98 +7297,99 @@ var file_query_proto_rawDesc = []byte{ 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xfa, 0x01, 0x0a, 0x0d, 0x44, 0x4d, 0x4c, 0x4a, 0x6f, 0x62, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, - 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x55, - 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x73, 0x71, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, - 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x18, 0x0a, 0x07, - 0x74, 0x69, 0x6d, 0x65, 0x67, 0x61, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x74, - 0x69, 0x6d, 0x65, 0x67, 0x61, 0x70, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x74, 0x61, 0x73, - 0x6b, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x75, - 0x62, 0x74, 0x61, 0x73, 0x6b, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, - 0x6f, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, - 0x75, 0x74, 0x6f, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x6f, 0x73, 0x74, - 0x70, 0x6f, 0x6e, 0x65, 0x5f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0e, 0x70, 0x6f, 0x73, 0x74, 0x70, 0x6f, 0x6e, 0x65, 0x4c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x22, 0x3c, 0x0a, 0x0e, 0x44, 0x4d, 0x4c, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, - 0x92, 0x03, 0x0a, 0x09, 0x4d, 0x79, 0x53, 0x71, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x09, 0x0a, - 0x05, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, - 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50, - 0x52, 0x49, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, - 0x0f, 0x55, 0x4e, 0x49, 0x51, 0x55, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, - 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x45, 0x5f, 0x4b, - 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x4c, 0x4f, - 0x42, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x10, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x53, 0x49, - 0x47, 0x4e, 0x45, 0x44, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x20, 0x12, 0x11, 0x0a, 0x0d, 0x5a, - 0x45, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x4c, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x40, 0x12, 0x10, - 0x0a, 0x0b, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x01, - 0x12, 0x0e, 0x0a, 0x09, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x02, - 0x12, 0x18, 0x0a, 0x13, 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x49, 0x4e, 0x43, 0x52, 0x45, 0x4d, 0x45, - 0x4e, 0x54, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x04, 0x12, 0x13, 0x0a, 0x0e, 0x54, 0x49, - 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x08, 0x12, - 0x0d, 0x0a, 0x08, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x10, 0x12, 0x1a, - 0x0a, 0x15, 0x4e, 0x4f, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x56, 0x41, 0x4c, - 0x55, 0x45, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x20, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x4e, - 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x57, 0x5f, 0x46, 0x4c, 0x41, 0x47, - 0x10, 0x80, 0x40, 0x12, 0x0e, 0x0a, 0x08, 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, - 0x80, 0x80, 0x02, 0x12, 0x13, 0x0a, 0x0d, 0x50, 0x41, 0x52, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x5f, - 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x01, 0x12, 0x10, 0x0a, 0x0a, 0x47, 0x52, 0x4f, 0x55, - 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x02, 0x12, 0x11, 0x0a, 0x0b, 0x55, 0x4e, - 0x49, 0x51, 0x55, 0x45, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x04, 0x12, 0x11, 0x0a, - 0x0b, 0x42, 0x49, 0x4e, 0x43, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x08, - 0x1a, 0x02, 0x10, 0x01, 0x2a, 0x6b, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x08, 0x0a, 0x04, - 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x49, 0x4e, 0x54, 0x45, - 0x47, 0x52, 0x41, 0x4c, 0x10, 0x80, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x55, 0x4e, 0x53, - 0x49, 0x47, 0x4e, 0x45, 0x44, 0x10, 0x80, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x49, 0x53, 0x46, 0x4c, - 0x4f, 0x41, 0x54, 0x10, 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x53, 0x51, 0x55, 0x4f, 0x54, - 0x45, 0x44, 0x10, 0x80, 0x10, 0x12, 0x0b, 0x0a, 0x06, 0x49, 0x53, 0x54, 0x45, 0x58, 0x54, 0x10, - 0x80, 0x20, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x53, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x80, - 0x40, 0x2a, 0xc0, 0x03, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x55, - 0x4c, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x04, 0x49, 0x4e, 0x54, - 0x38, 0x10, 0x81, 0x02, 0x12, 0x0a, 0x0a, 0x05, 0x55, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x82, 0x06, - 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x31, 0x36, 0x10, 0x83, 0x02, 0x12, 0x0b, 0x0a, 0x06, - 0x55, 0x49, 0x4e, 0x54, 0x31, 0x36, 0x10, 0x84, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, - 0x32, 0x34, 0x10, 0x85, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, - 0x86, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x87, 0x02, 0x12, 0x0b, - 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x88, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, - 0x4e, 0x54, 0x36, 0x34, 0x10, 0x89, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x36, - 0x34, 0x10, 0x8a, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x33, 0x32, 0x10, - 0x8b, 0x08, 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x36, 0x34, 0x10, 0x8c, 0x08, - 0x12, 0x0e, 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x8d, 0x10, - 0x12, 0x09, 0x0a, 0x04, 0x44, 0x41, 0x54, 0x45, 0x10, 0x8e, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x54, - 0x49, 0x4d, 0x45, 0x10, 0x8f, 0x10, 0x12, 0x0d, 0x0a, 0x08, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, - 0x4d, 0x45, 0x10, 0x90, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x59, 0x45, 0x41, 0x52, 0x10, 0x91, 0x06, - 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x43, 0x49, 0x4d, 0x41, 0x4c, 0x10, 0x12, 0x12, 0x09, 0x0a, - 0x04, 0x54, 0x45, 0x58, 0x54, 0x10, 0x93, 0x30, 0x12, 0x09, 0x0a, 0x04, 0x42, 0x4c, 0x4f, 0x42, - 0x10, 0x94, 0x50, 0x12, 0x0c, 0x0a, 0x07, 0x56, 0x41, 0x52, 0x43, 0x48, 0x41, 0x52, 0x10, 0x95, - 0x30, 0x12, 0x0e, 0x0a, 0x09, 0x56, 0x41, 0x52, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x96, - 0x50, 0x12, 0x09, 0x0a, 0x04, 0x43, 0x48, 0x41, 0x52, 0x10, 0x97, 0x30, 0x12, 0x0b, 0x0a, 0x06, - 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x98, 0x50, 0x12, 0x08, 0x0a, 0x03, 0x42, 0x49, 0x54, - 0x10, 0x99, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x9a, 0x10, 0x12, 0x08, - 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, 0x9b, 0x10, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x55, 0x50, 0x4c, - 0x45, 0x10, 0x1c, 0x12, 0x0d, 0x0a, 0x08, 0x47, 0x45, 0x4f, 0x4d, 0x45, 0x54, 0x52, 0x59, 0x10, - 0x9d, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x9e, 0x10, 0x12, 0x0e, 0x0a, - 0x0a, 0x45, 0x58, 0x50, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x1f, 0x12, 0x0b, 0x0a, - 0x06, 0x48, 0x45, 0x58, 0x4e, 0x55, 0x4d, 0x10, 0xa0, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45, - 0x58, 0x56, 0x41, 0x4c, 0x10, 0xa1, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x54, 0x4e, 0x55, - 0x4d, 0x10, 0xa2, 0x20, 0x2a, 0x46, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x45, - 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x12, 0x0c, - 0x0a, 0x08, 0x52, 0x4f, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x03, 0x2a, 0x31, 0x0a, 0x0f, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x09, 0x0a, 0x05, 0x56, 0x49, 0x45, 0x57, 0x53, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x54, 0x41, - 0x42, 0x4c, 0x45, 0x53, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x02, 0x42, - 0x35, 0x0a, 0x0f, 0x69, 0x6f, 0x2e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x5a, 0x22, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, - 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x80, 0x02, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x44, + 0x4d, 0x4c, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, + 0x63, 0x6d, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x19, + 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x55, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x71, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x71, 0x6c, 0x12, 0x25, 0x0a, 0x0e, 0x72, + 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x67, 0x61, 0x70, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x67, 0x61, 0x70, 0x12, 0x21, 0x0a, 0x0c, + 0x73, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0b, 0x73, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b, 0x52, 0x6f, 0x77, 0x73, 0x12, + 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x27, + 0x0a, 0x0f, 0x70, 0x6f, 0x73, 0x74, 0x70, 0x6f, 0x6e, 0x65, 0x5f, 0x6c, 0x61, 0x75, 0x6e, 0x63, + 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x70, 0x6f, 0x73, 0x74, 0x70, 0x6f, 0x6e, + 0x65, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x22, 0x42, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x6d, 0x69, + 0x74, 0x44, 0x4d, 0x4c, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x92, 0x03, 0x0a, 0x09, + 0x4d, 0x79, 0x53, 0x71, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x4d, 0x50, + 0x54, 0x59, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, + 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x52, 0x49, 0x5f, 0x4b, + 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x4e, 0x49, + 0x51, 0x55, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x04, 0x12, 0x15, + 0x0a, 0x11, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, + 0x4c, 0x41, 0x47, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x46, 0x4c, + 0x41, 0x47, 0x10, 0x10, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, + 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x20, 0x12, 0x11, 0x0a, 0x0d, 0x5a, 0x45, 0x52, 0x4f, 0x46, + 0x49, 0x4c, 0x4c, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x40, 0x12, 0x10, 0x0a, 0x0b, 0x42, 0x49, + 0x4e, 0x41, 0x52, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x01, 0x12, 0x0e, 0x0a, 0x09, + 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x02, 0x12, 0x18, 0x0a, 0x13, + 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x49, 0x4e, 0x43, 0x52, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x46, + 0x4c, 0x41, 0x47, 0x10, 0x80, 0x04, 0x12, 0x13, 0x0a, 0x0e, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, + 0x41, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x53, + 0x45, 0x54, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x10, 0x12, 0x1a, 0x0a, 0x15, 0x4e, 0x4f, + 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x46, + 0x4c, 0x41, 0x47, 0x10, 0x80, 0x20, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, + 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x57, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x40, 0x12, + 0x0e, 0x0a, 0x08, 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x02, 0x12, + 0x13, 0x0a, 0x0d, 0x50, 0x41, 0x52, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, + 0x10, 0x80, 0x80, 0x01, 0x12, 0x10, 0x0a, 0x0a, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x46, 0x4c, + 0x41, 0x47, 0x10, 0x80, 0x80, 0x02, 0x12, 0x11, 0x0a, 0x0b, 0x55, 0x4e, 0x49, 0x51, 0x55, 0x45, + 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x04, 0x12, 0x11, 0x0a, 0x0b, 0x42, 0x49, 0x4e, + 0x43, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x08, 0x1a, 0x02, 0x10, 0x01, + 0x2a, 0x6b, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, + 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x4c, + 0x10, 0x80, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, 0x45, + 0x44, 0x10, 0x80, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x49, 0x53, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, + 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x53, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x44, 0x10, 0x80, + 0x10, 0x12, 0x0b, 0x0a, 0x06, 0x49, 0x53, 0x54, 0x45, 0x58, 0x54, 0x10, 0x80, 0x20, 0x12, 0x0d, + 0x0a, 0x08, 0x49, 0x53, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x80, 0x40, 0x2a, 0xc0, 0x03, + 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x04, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x81, 0x02, + 0x12, 0x0a, 0x0a, 0x05, 0x55, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x82, 0x06, 0x12, 0x0a, 0x0a, 0x05, + 0x49, 0x4e, 0x54, 0x31, 0x36, 0x10, 0x83, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, + 0x31, 0x36, 0x10, 0x84, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x85, + 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x86, 0x06, 0x12, 0x0a, + 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x87, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, + 0x4e, 0x54, 0x33, 0x32, 0x10, 0x88, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x36, 0x34, + 0x10, 0x89, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x8a, 0x06, + 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x33, 0x32, 0x10, 0x8b, 0x08, 0x12, 0x0c, + 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x36, 0x34, 0x10, 0x8c, 0x08, 0x12, 0x0e, 0x0a, 0x09, + 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x8d, 0x10, 0x12, 0x09, 0x0a, 0x04, + 0x44, 0x41, 0x54, 0x45, 0x10, 0x8e, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x49, 0x4d, 0x45, 0x10, + 0x8f, 0x10, 0x12, 0x0d, 0x0a, 0x08, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x90, + 0x10, 0x12, 0x09, 0x0a, 0x04, 0x59, 0x45, 0x41, 0x52, 0x10, 0x91, 0x06, 0x12, 0x0b, 0x0a, 0x07, + 0x44, 0x45, 0x43, 0x49, 0x4d, 0x41, 0x4c, 0x10, 0x12, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x45, 0x58, + 0x54, 0x10, 0x93, 0x30, 0x12, 0x09, 0x0a, 0x04, 0x42, 0x4c, 0x4f, 0x42, 0x10, 0x94, 0x50, 0x12, + 0x0c, 0x0a, 0x07, 0x56, 0x41, 0x52, 0x43, 0x48, 0x41, 0x52, 0x10, 0x95, 0x30, 0x12, 0x0e, 0x0a, + 0x09, 0x56, 0x41, 0x52, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x96, 0x50, 0x12, 0x09, 0x0a, + 0x04, 0x43, 0x48, 0x41, 0x52, 0x10, 0x97, 0x30, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x4e, 0x41, + 0x52, 0x59, 0x10, 0x98, 0x50, 0x12, 0x08, 0x0a, 0x03, 0x42, 0x49, 0x54, 0x10, 0x99, 0x10, 0x12, + 0x09, 0x0a, 0x04, 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x9a, 0x10, 0x12, 0x08, 0x0a, 0x03, 0x53, 0x45, + 0x54, 0x10, 0x9b, 0x10, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x55, 0x50, 0x4c, 0x45, 0x10, 0x1c, 0x12, + 0x0d, 0x0a, 0x08, 0x47, 0x45, 0x4f, 0x4d, 0x45, 0x54, 0x52, 0x59, 0x10, 0x9d, 0x10, 0x12, 0x09, + 0x0a, 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x9e, 0x10, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x58, 0x50, + 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x1f, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45, 0x58, + 0x4e, 0x55, 0x4d, 0x10, 0xa0, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45, 0x58, 0x56, 0x41, 0x4c, + 0x10, 0xa1, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x54, 0x4e, 0x55, 0x4d, 0x10, 0xa2, 0x20, + 0x2a, 0x46, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, + 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x45, 0x10, 0x01, 0x12, 0x0a, + 0x0a, 0x06, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x4f, + 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x03, 0x2a, 0x31, 0x0a, 0x0f, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x56, + 0x49, 0x45, 0x57, 0x53, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x53, + 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x02, 0x42, 0x35, 0x0a, 0x0f, 0x69, + 0x6f, 0x2e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x22, + 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, + 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -7491,8 +7492,8 @@ var file_query_proto_goTypes = []interface{}{ (*DropSchemaResponse)(nil), // 82: query.DropSchemaResponse (*ReloadExecRequest)(nil), // 83: query.ReloadExecRequest (*ReloadExecResponse)(nil), // 84: query.ReloadExecResponse - (*DMLJobRequest)(nil), // 85: query.DMLJobRequest - (*DMLJobResponse)(nil), // 86: query.DMLJobResponse + (*SubmitDMLJobRequest)(nil), // 85: query.SubmitDMLJobRequest + (*SubmitDMLJobResponse)(nil), // 86: query.SubmitDMLJobResponse nil, // 87: query.BoundQuery.BindVariablesEntry (*StreamEvent_Statement)(nil), // 88: query.StreamEvent.Statement nil, // 89: query.GetSchemaResponse.TableDefinitionEntry @@ -7644,7 +7645,7 @@ var file_query_proto_depIdxs = []int32{ 89, // 139: query.GetSchemaResponse.table_definition:type_name -> query.GetSchemaResponse.TableDefinitionEntry 93, // 140: query.SetFailPointResponse.error:type_name -> vtrpc.RPCError 13, // 141: query.DropSchemaRequest.target:type_name -> query.Target - 23, // 142: query.DMLJobResponse.result:type_name -> query.QueryResult + 23, // 142: query.SubmitDMLJobResponse.result:type_name -> query.QueryResult 17, // 143: query.BoundQuery.BindVariablesEntry.value:type_name -> query.BindVariable 12, // 144: query.StreamEvent.Statement.category:type_name -> query.StreamEvent.Statement.Category 21, // 145: query.StreamEvent.Statement.primary_key_fields:type_name -> query.Field @@ -8527,7 +8528,7 @@ func file_query_proto_init() { } } file_query_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DMLJobRequest); i { + switch v := v.(*SubmitDMLJobRequest); i { case 0: return &v.state case 1: @@ -8539,7 +8540,7 @@ func file_query_proto_init() { } } file_query_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DMLJobResponse); i { + switch v := v.(*SubmitDMLJobResponse); i { case 0: return &v.state case 1: diff --git a/go/vt/proto/query/query_vtproto.pb.go b/go/vt/proto/query/query_vtproto.pb.go index b1195c2ae9..4fef56ed77 100644 --- a/go/vt/proto/query/query_vtproto.pb.go +++ b/go/vt/proto/query/query_vtproto.pb.go @@ -4677,7 +4677,7 @@ func (m *ReloadExecResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *DMLJobRequest) MarshalVT() (dAtA []byte, err error) { +func (m *SubmitDMLJobRequest) MarshalVT() (dAtA []byte, err error) { if m == nil { return nil, nil } @@ -4690,12 +4690,12 @@ func (m *DMLJobRequest) MarshalVT() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *DMLJobRequest) MarshalToVT(dAtA []byte) (int, error) { +func (m *SubmitDMLJobRequest) MarshalToVT(dAtA []byte) (int, error) { size := m.SizeVT() return m.MarshalToSizedBufferVT(dAtA[:size]) } -func (m *DMLJobRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { +func (m *SubmitDMLJobRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if m == nil { return 0, nil } @@ -4768,7 +4768,7 @@ func (m *DMLJobRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *DMLJobResponse) MarshalVT() (dAtA []byte, err error) { +func (m *SubmitDMLJobResponse) MarshalVT() (dAtA []byte, err error) { if m == nil { return nil, nil } @@ -4781,12 +4781,12 @@ func (m *DMLJobResponse) MarshalVT() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *DMLJobResponse) MarshalToVT(dAtA []byte) (int, error) { +func (m *SubmitDMLJobResponse) MarshalToVT(dAtA []byte) (int, error) { size := m.SizeVT() return m.MarshalToSizedBufferVT(dAtA[:size]) } -func (m *DMLJobResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { +func (m *SubmitDMLJobResponse) MarshalToSizedBufferVT(dAtA []byte) (int, error) { if m == nil { return 0, nil } @@ -6627,7 +6627,7 @@ func (m *ReloadExecResponse) SizeVT() (n int) { return n } -func (m *DMLJobRequest) SizeVT() (n int) { +func (m *SubmitDMLJobRequest) SizeVT() (n int) { if m == nil { return 0 } @@ -6665,7 +6665,7 @@ func (m *DMLJobRequest) SizeVT() (n int) { return n } -func (m *DMLJobResponse) SizeVT() (n int) { +func (m *SubmitDMLJobResponse) SizeVT() (n int) { if m == nil { return 0 } @@ -18705,7 +18705,7 @@ func (m *ReloadExecResponse) UnmarshalVT(dAtA []byte) error { } return nil } -func (m *DMLJobRequest) UnmarshalVT(dAtA []byte) error { +func (m *SubmitDMLJobRequest) UnmarshalVT(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -18728,10 +18728,10 @@ func (m *DMLJobRequest) UnmarshalVT(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: DMLJobRequest: wiretype end group for non-group") + return fmt.Errorf("proto: SubmitDMLJobRequest: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: DMLJobRequest: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: SubmitDMLJobRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -18962,7 +18962,7 @@ func (m *DMLJobRequest) UnmarshalVT(dAtA []byte) error { } return nil } -func (m *DMLJobResponse) UnmarshalVT(dAtA []byte) error { +func (m *SubmitDMLJobResponse) UnmarshalVT(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -18985,10 +18985,10 @@ func (m *DMLJobResponse) UnmarshalVT(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: DMLJobResponse: wiretype end group for non-group") + return fmt.Errorf("proto: SubmitDMLJobResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: DMLJobResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: SubmitDMLJobResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: diff --git a/go/vt/proto/queryservice/queryservice.pb.go b/go/vt/proto/queryservice/queryservice.pb.go index 98dacf1b64..36fbd91b0d 100644 --- a/go/vt/proto/queryservice/queryservice.pb.go +++ b/go/vt/proto/queryservice/queryservice.pb.go @@ -49,7 +49,7 @@ var file_queryservice_proto_rawDesc = []byte{ 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x71, 0x75, 0x65, 0x72, 0x79, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x1a, 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x10, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x32, 0xaa, 0x13, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x43, 0x0a, 0x0a, 0x52, + 0x6f, 0x32, 0xb6, 0x13, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x43, 0x0a, 0x0a, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x78, 0x65, 0x63, 0x12, 0x18, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x6c, 0x6f, @@ -200,14 +200,14 @@ var file_queryservice_proto_rawDesc = []byte{ 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x3d, 0x0a, 0x0c, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x44, 0x4d, 0x4c, 0x4a, 0x6f, 0x62, 0x12, - 0x14, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x4d, 0x4c, 0x4a, 0x6f, 0x62, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x4d, - 0x4c, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x2b, - 0x5a, 0x29, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, - 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x49, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x44, 0x4d, 0x4c, 0x4a, 0x6f, 0x62, 0x12, + 0x1a, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x44, 0x4d, + 0x4c, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x44, 0x4d, 0x4c, 0x4a, 0x6f, 0x62, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x2b, 0x5a, 0x29, 0x76, 0x69, + 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, + 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var file_queryservice_proto_goTypes = []interface{}{ @@ -241,7 +241,7 @@ var file_queryservice_proto_goTypes = []interface{}{ (*query.GetSchemaRequest)(nil), // 27: query.GetSchemaRequest (*query.SetFailPointRequest)(nil), // 28: query.SetFailPointRequest (*query.DropSchemaRequest)(nil), // 29: query.DropSchemaRequest - (*query.DMLJobRequest)(nil), // 30: query.DMLJobRequest + (*query.SubmitDMLJobRequest)(nil), // 30: query.SubmitDMLJobRequest (*query.ReloadExecResponse)(nil), // 31: query.ReloadExecResponse (*query.ExecuteResponse)(nil), // 32: query.ExecuteResponse (*query.StreamExecuteResponse)(nil), // 33: query.StreamExecuteResponse @@ -272,7 +272,7 @@ var file_queryservice_proto_goTypes = []interface{}{ (*query.GetSchemaResponse)(nil), // 58: query.GetSchemaResponse (*query.SetFailPointResponse)(nil), // 59: query.SetFailPointResponse (*query.DropSchemaResponse)(nil), // 60: query.DropSchemaResponse - (*query.DMLJobResponse)(nil), // 61: query.DMLJobResponse + (*query.SubmitDMLJobResponse)(nil), // 61: query.SubmitDMLJobResponse } var file_queryservice_proto_depIdxs = []int32{ 0, // 0: queryservice.Query.ReloadExec:input_type -> query.ReloadExecRequest @@ -306,7 +306,7 @@ var file_queryservice_proto_depIdxs = []int32{ 27, // 28: queryservice.Query.GetSchema:input_type -> query.GetSchemaRequest 28, // 29: queryservice.Query.SetFailPoint:input_type -> query.SetFailPointRequest 29, // 30: queryservice.Query.DropSchema:input_type -> query.DropSchemaRequest - 30, // 31: queryservice.Query.HandleDMLJob:input_type -> query.DMLJobRequest + 30, // 31: queryservice.Query.SubmitDMLJob:input_type -> query.SubmitDMLJobRequest 31, // 32: queryservice.Query.ReloadExec:output_type -> query.ReloadExecResponse 32, // 33: queryservice.Query.ExecuteInternal:output_type -> query.ExecuteResponse 32, // 34: queryservice.Query.Execute:output_type -> query.ExecuteResponse @@ -338,7 +338,7 @@ var file_queryservice_proto_depIdxs = []int32{ 58, // 60: queryservice.Query.GetSchema:output_type -> query.GetSchemaResponse 59, // 61: queryservice.Query.SetFailPoint:output_type -> query.SetFailPointResponse 60, // 62: queryservice.Query.DropSchema:output_type -> query.DropSchemaResponse - 61, // 63: queryservice.Query.HandleDMLJob:output_type -> query.DMLJobResponse + 61, // 63: queryservice.Query.SubmitDMLJob:output_type -> query.SubmitDMLJobResponse 32, // [32:64] is the sub-list for method output_type 0, // [0:32] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name diff --git a/go/vt/proto/queryservice/queryservice_grpc.pb.go b/go/vt/proto/queryservice/queryservice_grpc.pb.go index c80c7b456a..1a3cd8e8fa 100644 --- a/go/vt/proto/queryservice/queryservice_grpc.pb.go +++ b/go/vt/proto/queryservice/queryservice_grpc.pb.go @@ -90,7 +90,7 @@ type QueryClient interface { SetFailPoint(ctx context.Context, in *query.SetFailPointRequest, opts ...grpc.CallOption) (*query.SetFailPointResponse, error) // DropSchema drops the schema on the tablet and cleans up the relevant resources such as OnlineDDL and VReplication DropSchema(ctx context.Context, in *query.DropSchemaRequest, opts ...grpc.CallOption) (*query.DropSchemaResponse, error) - HandleDMLJob(ctx context.Context, in *query.DMLJobRequest, opts ...grpc.CallOption) (*query.DMLJobResponse, error) + SubmitDMLJob(ctx context.Context, in *query.SubmitDMLJobRequest, opts ...grpc.CallOption) (*query.SubmitDMLJobResponse, error) } type queryClient struct { @@ -610,9 +610,9 @@ func (c *queryClient) DropSchema(ctx context.Context, in *query.DropSchemaReques return out, nil } -func (c *queryClient) HandleDMLJob(ctx context.Context, in *query.DMLJobRequest, opts ...grpc.CallOption) (*query.DMLJobResponse, error) { - out := new(query.DMLJobResponse) - err := c.cc.Invoke(ctx, "/queryservice.Query/HandleDMLJob", in, out, opts...) +func (c *queryClient) SubmitDMLJob(ctx context.Context, in *query.SubmitDMLJobRequest, opts ...grpc.CallOption) (*query.SubmitDMLJobResponse, error) { + out := new(query.SubmitDMLJobResponse) + err := c.cc.Invoke(ctx, "/queryservice.Query/SubmitDMLJob", in, out, opts...) if err != nil { return nil, err } @@ -689,7 +689,7 @@ type QueryServer interface { SetFailPoint(context.Context, *query.SetFailPointRequest) (*query.SetFailPointResponse, error) // DropSchema drops the schema on the tablet and cleans up the relevant resources such as OnlineDDL and VReplication DropSchema(context.Context, *query.DropSchemaRequest) (*query.DropSchemaResponse, error) - HandleDMLJob(context.Context, *query.DMLJobRequest) (*query.DMLJobResponse, error) + SubmitDMLJob(context.Context, *query.SubmitDMLJobRequest) (*query.SubmitDMLJobResponse, error) mustEmbedUnimplementedQueryServer() } @@ -790,8 +790,8 @@ func (UnimplementedQueryServer) SetFailPoint(context.Context, *query.SetFailPoin func (UnimplementedQueryServer) DropSchema(context.Context, *query.DropSchemaRequest) (*query.DropSchemaResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method DropSchema not implemented") } -func (UnimplementedQueryServer) HandleDMLJob(context.Context, *query.DMLJobRequest) (*query.DMLJobResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method HandleDMLJob not implemented") +func (UnimplementedQueryServer) SubmitDMLJob(context.Context, *query.SubmitDMLJobRequest) (*query.SubmitDMLJobResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SubmitDMLJob not implemented") } func (UnimplementedQueryServer) mustEmbedUnimplementedQueryServer() {} @@ -1394,20 +1394,20 @@ func _Query_DropSchema_Handler(srv interface{}, ctx context.Context, dec func(in return interceptor(ctx, in, info, handler) } -func _Query_HandleDMLJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(query.DMLJobRequest) +func _Query_SubmitDMLJob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(query.SubmitDMLJobRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(QueryServer).HandleDMLJob(ctx, in) + return srv.(QueryServer).SubmitDMLJob(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/queryservice.Query/HandleDMLJob", + FullMethod: "/queryservice.Query/SubmitDMLJob", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).HandleDMLJob(ctx, req.(*query.DMLJobRequest)) + return srv.(QueryServer).SubmitDMLJob(ctx, req.(*query.SubmitDMLJobRequest)) } return interceptor(ctx, in, info, handler) } @@ -1504,8 +1504,8 @@ var Query_ServiceDesc = grpc.ServiceDesc{ Handler: _Query_DropSchema_Handler, }, { - MethodName: "HandleDMLJob", - Handler: _Query_HandleDMLJob_Handler, + MethodName: "SubmitDMLJob", + Handler: _Query_SubmitDMLJob_Handler, }, }, Streams: []grpc.StreamDesc{ diff --git a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql index 08aa91c15b..d0dac59a04 100644 --- a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql +++ b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql @@ -26,7 +26,9 @@ CREATE TABLE IF NOT EXISTS mysql.big_dml_jobs_table `related_table` varchar(256) NOT NULL, `timegap_in_ms` bigint NOT NULL , `subtask_rows` bigint NOT NULL , - `subtask_sql` varchar(256) NULL DEFAULT NULL, + `count_total_rows` bigint NOT NULL , + `subtask_sql` varchar(2048) NULL DEFAULT NULL, + `count_total_rows_sql` varchar(256) NULL DEFAULT NULL, `dml_type` varchar(256) NULL DEFAULT NULL, `affected_rows` bigint NOT NULL DEFAULT 0, PRIMARY KEY (`id`) diff --git a/go/vt/sqlparser/comments.go b/go/vt/sqlparser/comments.go index cd04e674ee..f01db406be 100644 --- a/go/vt/sqlparser/comments.go +++ b/go/vt/sqlparser/comments.go @@ -58,7 +58,11 @@ const ( // DirectiveRole specifies the node type for the query. possible values are: PRIMARY/REPLICA/RDONLY DirectiveRole = "ROLE" - DirectiveDMLCMD = "DML_CMD" + DirectiveDMLCMD = "DML_CMD" + DirectiveDMLTimeGap = "DML_TIME_GAP" + DirectiveSubtaskRows = "DML_SUBTASK_ROWS" + DirectiveDMLPostponeLaunch = "DML_POSTPONE_LAUNCH" + DirectiveDMLAutoRetry = "DML_AUTO_RETRY" ) func isNonSpace(r rune) bool { @@ -458,3 +462,53 @@ func GetDMLJobCmd(stmt Statement) string { } return str } + +func GetDMLJobArgs(stmt Statement) (timeGapInMs int64, subTaskRows int64, postponeLaunch bool, autoRetry bool) { + var comments *ParsedComments + switch stmt := stmt.(type) { + case *Update: + comments = stmt.Comments + case *Delete: + comments = stmt.Comments + } + if comments == nil { + return timeGapInMs, subTaskRows, postponeLaunch, autoRetry + } + + var err error + directives := comments.Directives() + + timeGapInMsStr, isSet := directives.GetString(DirectiveDMLTimeGap, "") + if isSet { + timeGapInMs, err = strconv.ParseInt(timeGapInMsStr, 10, 64) + if err != nil { + timeGapInMs = 0 + } + } + + subTaskRowsStr, isSet := directives.GetString(DirectiveSubtaskRows, "") + if isSet { + subTaskRows, err = strconv.ParseInt(subTaskRowsStr, 10, 64) + if err != nil { + subTaskRows = 0 + } + } + + postponeLaunchStr, isSet := directives.GetString(DirectiveDMLPostponeLaunch, "") + if isSet { + postponeLaunch, err = strconv.ParseBool(postponeLaunchStr) + if err != nil { + postponeLaunch = false + } + } + + autoRetryStr, isSet := directives.GetString(DirectiveDMLAutoRetry, "") + if isSet { + autoRetry, err = strconv.ParseBool(autoRetryStr) + if err != nil { + autoRetry = false + } + } + + return timeGapInMs, subTaskRows, postponeLaunch, autoRetry +} diff --git a/go/vt/vtgate/executor.go b/go/vt/vtgate/executor.go index 9a863a100a..2f07ffa9e5 100644 --- a/go/vt/vtgate/executor.go +++ b/go/vt/vtgate/executor.go @@ -1556,7 +1556,7 @@ func (e *Executor) SetFailPoint(command string, key string, value string) error return nil } -func (e *Executor) SubmitDMLJob(command, sql, uuid string) (*sqltypes.Result, error) { +func (e *Executor) SubmitDMLJob(command, sql, uuid, tableSchema string, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { ctx := context.Background() // todo newborn22, scatterConn or txnConn? // todo ,这个写法丑陋,要直接拿到primary @@ -1568,7 +1568,7 @@ func (e *Executor) SubmitDMLJob(command, sql, uuid string) (*sqltypes.Result, er break } } - return th.Conn.HandleDMLJob(ctx, command, sql, uuid) + return th.Conn.SubmitDMLJob(ctx, command, sql, uuid, tableSchema, timeGapInMs, subtaskRows, postponeLaunch, autoRetry) } func (e *Executor) checkThatPlanIsValid(stmt sqlparser.Statement, plan *engine.Plan) error { diff --git a/go/vt/vtgate/plan_execute.go b/go/vt/vtgate/plan_execute.go index 4ec7fab990..126b489903 100644 --- a/go/vt/vtgate/plan_execute.go +++ b/go/vt/vtgate/plan_execute.go @@ -449,7 +449,8 @@ func IsSubmitDMLJob(stmt sqlparser.Statement) bool { func HandleDMLJobSubmit(stmt sqlparser.Statement, vcursor *vcursorImpl, sql string) (*sqltypes.Result, error) { // todo newborn22,检查是否在事务中,如果是则报错 if IsSubmitDMLJob(stmt) { - qr, err := vcursor.executor.SubmitDMLJob("submit_job", sql, "") + timeGapInMs, subTaskRows, postponeLaunch, autoRetry := sqlparser.GetDMLJobArgs(stmt) + qr, err := vcursor.executor.SubmitDMLJob("submit_job", sql, "", vcursor.keyspace, timeGapInMs, subTaskRows, postponeLaunch, autoRetry) // todo ,在这个地方把qr写回到前端 if qr != nil { if qr.RowsAffected == 1 { diff --git a/go/vt/vtgate/vcursor_impl.go b/go/vt/vtgate/vcursor_impl.go index ecd03543eb..e08e3f97c0 100644 --- a/go/vt/vtgate/vcursor_impl.go +++ b/go/vt/vtgate/vcursor_impl.go @@ -93,7 +93,7 @@ type iExecute interface { reloadExec(ctx context.Context, reloadType *sqlparser.ReloadType) error VSchema() *vindexes.VSchema SetFailPoint(command string, key string, value string) error - SubmitDMLJob(command, sql, uuid string) (*sqltypes.Result, error) + SubmitDMLJob(command, sql, uuid, tableSchema string, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) } // VSchemaOperator is an interface to Vschema Operations diff --git a/go/vt/vttablet/grpcqueryservice/server.go b/go/vt/vttablet/grpcqueryservice/server.go index 92f23c51e8..c6303715ff 100644 --- a/go/vt/vttablet/grpcqueryservice/server.go +++ b/go/vt/vttablet/grpcqueryservice/server.go @@ -528,9 +528,9 @@ func (q *query) SetFailPoint(ctx context.Context, request *querypb.SetFailPointR return nil, q.server.SetFailPoint(ctx, request.Command, request.Key, request.Value) } -func (q *query) HandleDMLJob(ctx context.Context, request *querypb.DMLJobRequest) (*querypb.DMLJobResponse, error) { - rst, err := q.server.HandleDMLJob(ctx, request.Cmd, request.Sql, request.JobUuid) - return &querypb.DMLJobResponse{Result: sqltypes.ResultToProto3(rst)}, err +func (q *query) SubmitDMLJob(ctx context.Context, request *querypb.SubmitDMLJobRequest) (*querypb.SubmitDMLJobResponse, error) { + rst, err := q.server.SubmitDMLJob(ctx, request.Cmd, request.Sql, request.JobUuid, request.RelatedSchema, request.Timegap, request.SubtaskRows, request.PostponeLaunch, request.AutoRetry) + return &querypb.SubmitDMLJobResponse{Result: sqltypes.ResultToProto3(rst)}, err } // Register registers the implementation on the provide gRPC Server. diff --git a/go/vt/vttablet/grpctabletconn/conn.go b/go/vt/vttablet/grpctabletconn/conn.go index 3c38dbc34b..238a972605 100644 --- a/go/vt/vttablet/grpctabletconn/conn.go +++ b/go/vt/vttablet/grpctabletconn/conn.go @@ -1133,7 +1133,7 @@ func (conn *gRPCQueryClient) SetFailPoint(ctx context.Context, command string, k return nil } -func (conn *gRPCQueryClient) HandleDMLJob(ctx context.Context, command, sql, uuid string) (*sqltypes.Result, error) { +func (conn *gRPCQueryClient) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema string, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { // todo newborn22,为什么要加锁? // todo,什么时候调用? conn.mu.RLock() @@ -1141,12 +1141,17 @@ func (conn *gRPCQueryClient) HandleDMLJob(ctx context.Context, command, sql, uui if conn.cc == nil { return nil, tabletconn.ConnClosed } - req := querypb.DMLJobRequest{ - Cmd: command, - Sql: sql, - JobUuid: uuid, - } - er, err := conn.c.HandleDMLJob(ctx, &req) + req := querypb.SubmitDMLJobRequest{ + Cmd: command, + Sql: sql, + JobUuid: uuid, + RelatedSchema: tableSchema, + Timegap: timeGapInMs, + SubtaskRows: subtaskRows, + PostponeLaunch: postponeLaunch, + AutoRetry: autoRetry, + } + er, err := conn.c.SubmitDMLJob(ctx, &req) if err != nil { return nil, tabletconn.ErrorFromGRPC(err) } diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index f43f303917..6603688370 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -16,12 +16,13 @@ import ( "sync" "time" + "vitess.io/vitess/go/vt/schema" + "vitess.io/vitess/go/mysql/collations" "vitess.io/vitess/go/pools" "vitess.io/vitess/go/sqltypes" querypb "vitess.io/vitess/go/vt/proto/query" topodatapb "vitess.io/vitess/go/vt/proto/topodata" - "vitess.io/vitess/go/vt/schema" "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/vttablet/tabletserver/connpool" "vitess.io/vitess/go/vt/vttablet/tabletserver/tabletenv" @@ -29,7 +30,8 @@ import ( // todo newborn22, 数一下连接数是不是3够用 const ( - databasePoolSize = 3 + databasePoolSize = 3 + healthCheckTimeGap = 10000 // ms ) const ( @@ -45,9 +47,9 @@ const ( ThrottleAllJobs = "throttle_all" UnthrottleJob = "unthrottle" UnthrottleAllJobs = "unthrottle_all" + CancelJob = "cancel_job" ) -// todo ,支持用户输入 const ( defaultTimeGap = 1000 // 1000ms defaultSubtaskRows = 100 @@ -66,16 +68,19 @@ const ( ) const ( - sqlDMLJobSubmit = `insert into mysql.big_dml_jobs_table ( + sqlDMLJobGetAllJobs = `select * from mysql.big_dml_jobs_table order by id;` + sqlDMLJobSubmit = `insert into mysql.big_dml_jobs_table ( job_uuid, dml_sql, related_schema, related_table, timegap_in_ms, subtask_rows, + count_total_rows, subtask_sql, + count_total_rows_sql, dml_type, - job_status) values(%a,%a,%a,%a,%a,%a,%a,%a,%a)` + job_status) values(%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a)` sqlDMLJobUpdateMessage = `update mysql.big_dml_jobs_table set message = %a @@ -118,13 +123,18 @@ type JobController struct { workingTables map[string]bool // 用于调度时检测当前任务是否和正在工作的表冲突,paused、running状态的job的表都在里面 workingTablesMutex sync.Mutex - jobChans map[string]JobChanStruct - jobChansMutex sync.Mutex + // 当running或者paused的时候,应该在working uuid中,以此来做健康检测 + workingUUIDs map[string]bool + workingUUIDsMutex sync.Mutex + + jobChans map[string]JobChanStruct + jobChansMutex sync.Mutex + checkBeforeSchedule chan struct{} } type JobChanStruct struct { - pauseAndResume chan string - throttleAndUnthrottle chan string + pauseAndResume chan string + cancel chan string } // todo newborn22, 初始化函数 @@ -137,9 +147,13 @@ func (jc *JobController) Open() error { jc.pool.Open(jc.env.Config().DB.AppConnector(), jc.env.Config().DB.DbaConnector(), jc.env.Config().DB.AppDebugConnector()) jc.workingTables = map[string]bool{} + jc.workingUUIDs = map[string]bool{} jc.jobChans = map[string]JobChanStruct{} + jc.checkBeforeSchedule = make(chan struct{}) + + go jc.jobHealthCheck(jc.checkBeforeSchedule) + go jc.jobScheduler(jc.checkBeforeSchedule) - go jc.jonScheduler() } return nil } @@ -165,18 +179,22 @@ func NewJobController(tableName string, tabletTypeFunc func() topodatapb.TabletT } // todo newborn22 , 能否改写得更有通用性? 这样改写是否好? -func (jc *JobController) HandleRequest(command, sql, jobUUID string) (*sqltypes.Result, error) { +func (jc *JobController) HandleRequest(command, sql, jobUUID, tableSchema string, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { // todo newborn22, if 可以删掉 if jc.tabletTypeFunc() == topodatapb.TabletType_PRIMARY { switch command { case SubmitJob: - return jc.SubmitJob(sql) + return jc.SubmitJob(sql, tableSchema, timeGapInMs, subtaskRows, postponeLaunch, autoRetry) case ShowJobs: return jc.ShowJobs() case PauseJob: return jc.PauseJob(jobUUID) case ResumeJob: return jc.ResumeJob(jobUUID) + case LaunchJob: + return jc.LaunchJob(jobUUID) + case CancelJob: + return jc.CancelJob(jobUUID) } } // todo newborn22,对返回值判断为空? @@ -185,11 +203,9 @@ func (jc *JobController) HandleRequest(command, sql, jobUUID string) (*sqltypes. // todo newboen22 函数的可见性,封装性上的改进? // todo 传timegap和table_name -func (jc *JobController) SubmitJob(sql string) (*sqltypes.Result, error) { +func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { jc.tableMutex.Lock() defer jc.tableMutex.Unlock() - jc.jobChansMutex.Lock() - defer jc.jobChansMutex.Unlock() jobUUID, err := schema.CreateUUIDWithDelimiter("-") if err != nil { @@ -198,46 +214,60 @@ func (jc *JobController) SubmitJob(sql string) (*sqltypes.Result, error) { ctx := context.Background() sql = rewirteSQL(sql) - relatedSchema := "mydb" // todo,传入 - timeGap := int64(defaultTimeGap) // todo 传入 - subtaskRows := int64(defaultSubtaskRows) // todo 传入 - // todo,改写,根据stmt - // todo 对于jobrunner,要区分update和delete,update每次都要更新执行的limit值。 - table, dmlType, subtaskSQL, err := jc.genSubtaskDMLSQL(sql, relatedSchema, subtaskRows) + if timeGapInMs == 0 { + timeGapInMs = int64(defaultTimeGap) + } + if subtaskRows == 0 { + subtaskRows = int64(defaultSubtaskRows) // todo 传入 + } + table, dmlType, subtaskSQL, countTotalRowsSQL, err := jc.genSubtaskDMLSQL(sql, tableSchema, subtaskRows) if err != nil { return &sqltypes.Result{}, err } + qr, err := jc.execQuery(ctx, tableSchema, countTotalRowsSQL) + if err != nil { + return &sqltypes.Result{}, err + } + countTotalRows, err := qr.Named().Rows[0].ToInt64("count(*)") + if err != nil { + return &sqltypes.Result{}, err + } + + jobStatus := queuedStatus + if postponeLaunch { + jobStatus = postponeLaunchStatus + } + submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobSubmit, sqltypes.StringBindVariable(jobUUID), sqltypes.StringBindVariable(sql), - sqltypes.StringBindVariable(relatedSchema), + sqltypes.StringBindVariable(tableSchema), sqltypes.StringBindVariable(table), - sqltypes.Int64BindVariable(timeGap), + sqltypes.Int64BindVariable(timeGapInMs), sqltypes.Int64BindVariable(subtaskRows), + sqltypes.Int64BindVariable(countTotalRows), sqltypes.StringBindVariable(subtaskSQL), + sqltypes.StringBindVariable(countTotalRowsSQL), sqltypes.StringBindVariable(dmlType), - sqltypes.StringBindVariable(queuedStatus)) + sqltypes.StringBindVariable(jobStatus)) if err != nil { return nil, err } - jobChan := JobChanStruct{pauseAndResume: make(chan string), throttleAndUnthrottle: make(chan string)} - jc.jobChans[jobUUID] = jobChan - _, err = jc.execQuery(ctx, "", submitQuery) if err != nil { return &sqltypes.Result{}, err } - return jc.buildJobSubmitResult(jobUUID, subtaskSQL, timeGap, subtaskRows), nil + return jc.buildJobSubmitResult(jobUUID, subtaskSQL, timeGapInMs, subtaskRows, countTotalRows, postponeLaunch, autoRetry), nil } -func (jc *JobController) buildJobSubmitResult(jobUUID, subtaskSQL string, timeGap, subtaskRows int64) *sqltypes.Result { +func (jc *JobController) buildJobSubmitResult(jobUUID, subtaskSQL string, timeGap, subtaskRows, countTotalRows int64, postponeLaunch, autoRetry bool) *sqltypes.Result { var rows []sqltypes.Row - row := buildVarCharRow(jobUUID, strconv.FormatInt(timeGap, 10), "support later", strconv.FormatInt(subtaskRows, 10), subtaskSQL, "support later", "support later") + row := buildVarCharRow(jobUUID, strconv.FormatInt(timeGap, 10), strconv.FormatInt(countTotalRows, 10), strconv.FormatInt(subtaskRows, 10), subtaskSQL, strconv.FormatBool(autoRetry), strconv.FormatBool(postponeLaunch)) rows = append(rows, row) submitRst := &sqltypes.Result{ - Fields: buildVarCharFields("job_uuid", "time_gap_in_ms", "total_rows", "subtask_rows", "subtask_sql", "auto_retry", "postpone_launch"), + Fields: buildVarCharFields("job_uuid", "time_gap_in_ms", "count_total_rows", "subtask_rows", "subtask_sql", "auto_retry", "postpone_launch"), Rows: rows, RowsAffected: 1, } @@ -265,16 +295,16 @@ func (jc *JobController) PauseJob(uuid string) (*sqltypes.Result, error) { return emptyResult, nil } - qr, err := jc.updateJobStatus(ctx, uuid, pausedStatus) - if err != nil { - return emptyResult, err - } - // 往通道发送cmd进行暂停 jc.jobChansMutex.Lock() defer jc.jobChansMutex.Unlock() pauseChan := jc.jobChans[uuid].pauseAndResume pauseChan <- "pause" + + qr, err := jc.updateJobStatus(ctx, uuid, pausedStatus) + if err != nil { + return emptyResult, err + } return qr, nil } @@ -289,20 +319,49 @@ func (jc *JobController) ResumeJob(uuid string) (*sqltypes.Result, error) { emptyResult.Info = " The job status is not paused and don't need resume" return emptyResult, nil } + // 往通道发送cmd以继续 + jc.jobChansMutex.Lock() + defer jc.jobChansMutex.Unlock() + pauseChan := jc.jobChans[uuid].pauseAndResume + pauseChan <- "resume" qr, err := jc.updateJobStatus(ctx, uuid, runningStatus) if err != nil { return emptyResult, err } - // 往通道发送cmd以继续 - jc.jobChansMutex.Lock() - defer jc.jobChansMutex.Unlock() - pauseChan := jc.jobChans[uuid].pauseAndResume - pauseChan <- "resume" return qr, nil } +func (jc *JobController) LaunchJob(uuid string) (*sqltypes.Result, error) { + var emptyResult = &sqltypes.Result{} + ctx := context.Background() + status, err := jc.GetStrJobInfo(ctx, uuid, "job_status") + if err != nil { + return emptyResult, nil + } + if status != postponeLaunchStatus { + emptyResult.Info = " The job status is not postpone-launch and don't need launch" + return emptyResult, nil + } + return jc.updateJobStatus(ctx, uuid, queuedStatus) +} + +func (jc *JobController) CancelJob(uuid string) (*sqltypes.Result, error) { + var emptyResult = &sqltypes.Result{} + ctx := context.Background() + status, err := jc.GetStrJobInfo(ctx, uuid, "job_status") + if err != nil { + return emptyResult, nil + } + if status == canceledStatus || status == failedStatus { + emptyResult.Info = fmt.Sprintf(" The job status is %s and can't canceld", status) + return emptyResult, nil + } + + return &sqltypes.Result{}, nil +} + func (jc *JobController) CompleteJob(ctx context.Context, uuid, table string) (*sqltypes.Result, error) { jc.workingTablesMutex.Lock() defer jc.workingTablesMutex.Unlock() @@ -311,7 +370,7 @@ func (jc *JobController) CompleteJob(ctx context.Context, uuid, table string) (* jc.jobChansMutex.Lock() defer jc.jobChansMutex.Unlock() close(jc.jobChans[uuid].pauseAndResume) - close(jc.jobChans[uuid].throttleAndUnthrottle) + close(jc.jobChans[uuid].cancel) delete(jc.jobChans, uuid) return jc.updateJobStatus(ctx, uuid, completedStatus) @@ -334,14 +393,21 @@ func jobTask() { // 注意非primary要关掉 // todo 做成休眠和唤醒的 -func (jc *JobController) jonScheduler() { +func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { + // 等待healthcare扫一遍后再进行 + + <-checkBeforeSchedule + fmt.Printf("start jobScheduler\n") + ctx := context.Background() for { // todo,这里拿锁存在潜在bug,因为checkDmlJobRunnable中也拿了并去变成running状态,一个job可能被启动多次,要成睡眠和唤醒的方式 + // todo,优化这里的拿锁结构 jc.workingTablesMutex.Lock() jc.tableMutex.Lock() + jc.workingUUIDsMutex.Lock() - qr, _ := jc.execQuery(ctx, "", "select * from mysql.big_dml_jobs_table;") + qr, _ := jc.execQuery(ctx, "", sqlDMLJobGetAllJobs) if qr == nil { continue } @@ -353,14 +419,17 @@ func (jc *JobController) jonScheduler() { timegap, _ := row["timegap_in_ms"].ToInt64() subtaskSQL := row["subtask_sql"].ToString() dmlType := row["dml_type"].ToString() + countTotalRows, _ := row["count_total_rows"].ToInt64() if jc.checkDmlJobRunnable(status, table) { - jc.workingTables[table] = true // todo 这里之后改成休眠的方式后要删掉 - go jc.dmlJobRunner(uuid, table, schema, subtaskSQL, dmlType, timegap) + // todo 这里之后改成休眠的方式后要删掉, 由于外面拿锁,必须在这里就加上,不然后面的循环可能:已经启动go runner的但是还未加入到working table,导致多个表的同时启动 + jc.initDMLJobRunningMeta(uuid, table) + go jc.dmlJobRunner(uuid, table, schema, subtaskSQL, dmlType, timegap, countTotalRows, 0, true) } } jc.workingTablesMutex.Unlock() jc.tableMutex.Unlock() + jc.workingUUIDsMutex.Unlock() time.Sleep(3 * time.Second) } @@ -378,7 +447,7 @@ func (jc *JobController) checkDmlJobRunnable(status, table string) bool { return true } -func (jc *JobController) dmlJobRunner(uuid, table, relatedSchema, subtaskSQL, dmlType string, timeGap int64) { +func (jc *JobController) dmlJobRunner(uuid, table, relatedSchema, subtaskSQL, dmlType string, timeGap, countTotalRows, offset int64, updateStatusRunning bool) { jc.jobChansMutex.Lock() jobChan := jc.jobChans[uuid] @@ -390,23 +459,22 @@ func (jc *JobController) dmlJobRunner(uuid, table, relatedSchema, subtaskSQL, dm timer := time.NewTicker(time.Duration(timeGap * 1e6)) defer timer.Stop() + var err error ctx := context.Background() - jc.workingTablesMutex.Lock() - jc.workingTables[table] = true - jc.workingTablesMutex.Unlock() - _, err := jc.updateJobStatus(ctx, uuid, runningStatus) - if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) + if updateStatusRunning { + _, err = jc.updateJobStatus(ctx, uuid, runningStatus) + if err != nil { + jc.FailJob(ctx, uuid, err.Error(), table) + } } - offset := int64(0) - // 在一个无限循环中等待定时器触发 for { select { case <-timer.C: // 定时器触发时执行的函数 + // 获得sql,分update和delete两种情况 var query string if dmlType == "update" { query, err = sqlparser.ParseAndBind(subtaskSQL, sqltypes.Int64BindVariable(offset)) @@ -417,25 +485,36 @@ func (jc *JobController) dmlJobRunner(uuid, table, relatedSchema, subtaskSQL, dm if dmlType == "delete" { query = subtaskSQL } - qr, err := jc.execQuery(ctx, relatedSchema, query) + + // todo newborn22,删除,旧方案 有bug + //qr, err := jc.execQuery(ctx, relatedSchema, query) + affectedRows, err := jc.execSubtaskAndRecord(ctx, relatedSchema, query, uuid) + if err != nil { jc.FailJob(ctx, uuid, err.Error(), table) return } - if qr.RowsAffected == 0 { + + // complete,分update和delete两种情况 + // todo newborn22,删除,旧方案 有bug + //if (dmlType == "delete" && qr.RowsAffected == 0) || (dmlType == "update" && offset >= countTotalRows) { + if (dmlType == "delete" && affectedRows == 0) || (dmlType == "update" && offset >= countTotalRows) { _, err = jc.CompleteJob(ctx, uuid, table) if err != nil { jc.FailJob(ctx, uuid, err.Error(), table) } return } - err = jc.updateJobAffectedRows(ctx, uuid, int64(qr.RowsAffected)) - if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) - return - } + + // todo newborn22,删除,旧方案 有bug + //err = jc.updateJobAffectedRows(ctx, uuid, int64(qr.RowsAffected)) + //if err != nil { + // jc.FailJob(ctx, uuid, err.Error(), table) + // return + //} if dmlType == "update" { - offset += int64(qr.RowsAffected) + //offset += int64(qr.RowsAffected) + offset += affectedRows } // 控制暂停 @@ -454,26 +533,67 @@ func (jc *JobController) dmlJobRunner(uuid, table, relatedSchema, subtaskSQL, dm } +// 注意在外面拿锁 +func (jc *JobController) initDMLJobRunningMeta(uuid, table string) { + // 容量为1:如果job crash前为pause,需要先往通道中写入"pause",然后再启动jobRunner。如果不为1则会阻塞 + jobChan := JobChanStruct{pauseAndResume: make(chan string, 1), cancel: make(chan string)} + //jc.jobChansMutex.Lock() + jc.jobChans[uuid] = jobChan + //jc.jobChansMutex.Unlock() + + //jc.workingTablesMutex.Lock() + jc.workingTables[table] = true + //jc.workingTablesMutex.Unlock() + + //jc.workingUUIDsMutex.Lock() + jc.workingUUIDs[uuid] = true + //jc.workingUUIDsMutex.Unlock() + +} + +// 注意在外面拿锁 +func (jc *JobController) deleteDMLJobRunningMeta(uuid, table string) { + // 容量为1:如果job crash前为pause,需要先往通道中写入"pause",然后再启动jobRunner。如果不为1则会阻塞 + //jc.jobChansMutex.Lock() + jobChan := jc.jobChans[uuid] + close(jobChan.pauseAndResume) + close(jobChan.cancel) + delete(jc.jobChans, uuid) + //jc.jobChansMutex.Unlock() + + //jc.workingTablesMutex.Lock() + delete(jc.workingTables, table) + //jc.workingTablesMutex.Unlock() + + //jc.workingUUIDsMutex.Lock() + delete(jc.workingUUIDs, uuid) + //jc.workingUUIDsMutex.Unlock() + +} + // todo sql类型的判断换成别的方式 // todo 加行数字段 -func (jc *JobController) genSubtaskDMLSQL(sql, tableSchema string, subtaskRows int64) (tableName, dmlType string, subTaskSQL string, err error) { +func (jc *JobController) genSubtaskDMLSQL(sql, tableSchema string, subtaskRows int64) (tableName, dmlType string, subTaskSQL, countTotalRowsSQL string, err error) { stmt, _, err := sqlparser.Parse2(sql) if err != nil { - return "", "", "", err + return "", "", "", "", err } switch s := stmt.(type) { case *sqlparser.Delete: if s.Limit != nil { - return "", "", "", errors.New("the sql already has a LIMIT condition, can't be transferred to a DML job") + return "", "", "", "", errors.New("the sql already has a LIMIT condition, can't be transferred to a DML job") } s.Limit = &sqlparser.Limit{Rowcount: sqlparser.NewIntLiteral(strconv.FormatInt(subtaskRows, 10))} // todo,目前只支持单表 if len(s.TableExprs) > 1 { - return "", "", "", errors.New("the delete sql deals multi tables can't be transferred to a DML job") + return "", "", "", "", errors.New("the delete sql deals multi tables can't be transferred to a DML job") } tableName := sqlparser.String(s.TableExprs) - return tableName, "delete", sqlparser.String(s), nil + whereStr := sqlparser.String(s.Where) + countTotalRowsSQL = fmt.Sprintf("select count(*) from %s %s", tableName, whereStr) + + return tableName, "delete", sqlparser.String(s), countTotalRowsSQL, nil case *sqlparser.Update: // todo,最set中包含有pk的进行过滤 // 如何获得一个表的pk/ pks? @@ -484,18 +604,18 @@ func (jc *JobController) genSubtaskDMLSQL(sql, tableSchema string, subtaskRows i // select statement -> derivedTable -> joinTable // todo,目前只支持单表 if len(s.TableExprs) > 1 { - return "", "", "", errors.New("the update sql deals multi tables can't be transferred to a DML job") + return "", "", "", "", errors.New("the update sql deals multi tables can't be transferred to a DML job") } tableName := sqlparser.String(s.TableExprs) ctx := context.Background() pkNames, err := jc.getTablePkName(ctx, tableSchema, tableName) if err != nil { - return "", "", "", err - } - // todo ,目前只支持单个PK - if len(pkNames) > 1 { - return "", "", "", errors.New("the update sql on table with multi Pks can't be transferred to a DML job") + return "", "", "", "", err } + + //if len(pkNames) > 1 { + // return "", "", "", "", errors.New("the update sql on table with multi Pks can't be transferred to a DML job") + //} selectStr := "select " firstPK := true for _, pkName := range pkNames { @@ -534,14 +654,24 @@ func (jc *JobController) genSubtaskDMLSQL(sql, tableSchema string, subtaskRows i //} // whereStr = rewriteWhereStr(whereStr, "dml_job_temp_table222", colNames) - pkName := pkNames[0] - subtaskSQL := "" if s.With != nil { subtaskSQL = sqlparser.String(s.With) + " " } - subtaskSQL += fmt.Sprintf("UPDATE %s dml_job_temp_table111 JOIN (%s) dml_job_temp_table222 ON dml_job_temp_table111.%s = dml_job_temp_table222.%s SET %s", - tableName, selectStr, pkName, pkName, updateExprStr) + + joinOnConditionStr := "" + firstPK = true + for _, pkName := range pkNames { + if firstPK { + joinOnConditionStr += fmt.Sprintf("dml_job_temp_table111.%s = dml_job_temp_table222.%s ", pkName, pkName) + firstPK = false + } else { + joinOnConditionStr += fmt.Sprintf("AND dml_job_temp_table111.%s = dml_job_temp_table222.%s", pkName, pkName) + } + } + + subtaskSQL += fmt.Sprintf("UPDATE %s dml_job_temp_table111 JOIN (%s) dml_job_temp_table222 ON %s SET %s", + tableName, selectStr, joinOnConditionStr, updateExprStr) //selectStmt, _, err := sqlparser.Parse2(selectStr) //if err != nil { @@ -549,10 +679,18 @@ func (jc *JobController) genSubtaskDMLSQL(sql, tableSchema string, subtaskRows i //} //joinLeftExpr := sqlparser.AliasedTableExpr{Expr: sqlparser.TableName{Name: sqlparser.IdentifierCS{}}} //sqlparser.JoinTableExpr{Join: sqlparser.NormalJoinType,LeftExpr: } - return tableName, "update", subtaskSQL, nil + + // 将 "=" 替换成 "!=" + rewriteExprStr := strings.Replace(updateExprStr, "=", "!=", -1) + // 将 "," 替换成 "AND" + rewriteExprStr = strings.Replace(rewriteExprStr, ",", "AND", -1) + + countTotalRowsSQL = fmt.Sprintf("select count(*) from %s %s", tableName, whereStr) + " AND " + rewriteExprStr + + return tableName, "update", subtaskSQL, countTotalRowsSQL, nil } - return "", "", "", errors.New("the sql type can't be transferred to a DML job") + return "", "", "", "", errors.New("the sql type can't be transferred to a DML job") } // execQuery execute sql by using connect poll,so if targetString is not empty, it will add prefix `use database` first then execute sql. @@ -571,6 +709,46 @@ func (jc *JobController) execQuery(ctx context.Context, targetString, query stri return conn.Exec(ctx, query, math.MaxInt32, true) } +func (jc *JobController) execSubtaskAndRecord(ctx context.Context, tableSchema, subtaskSQL, uuid string) (affectedRows int64, err error) { + defer jc.env.LogError() + + var setting pools.Setting + if tableSchema != "" { + setting.SetWithoutDBName(false) + setting.SetQuery(fmt.Sprintf("use %s", tableSchema)) + } + // todo ,是不是有事务专门的连接池?需要看一下代码 + conn, err := jc.pool.Get(ctx, &setting) + defer conn.Recycle() + if err != nil { + return 0, err + } + + _, err = conn.Exec(ctx, "start transaction", math.MaxInt32, true) + if err != nil { + return 0, err + } + + qr, err := conn.Exec(ctx, subtaskSQL, math.MaxInt32, true) + affectedRows = int64(qr.RowsAffected) + + jc.tableMutex.Lock() + defer jc.tableMutex.Unlock() + recordRstSQL, err := sqlparser.ParseAndBind(sqlDMLJobUpdateAffectedRows, + sqltypes.Int64BindVariable(affectedRows), + sqltypes.StringBindVariable(uuid)) + _, err = conn.Exec(ctx, recordRstSQL, math.MaxInt32, true) + if err != nil { + return 0, err + } + _, err = conn.Exec(ctx, "commit", math.MaxInt32, true) + if err != nil { + return 0, err + } + + return affectedRows, nil +} + func rewirteSQL(input string) string { // 定义正则表达式匹配注释 re := regexp.MustCompile(`/\*.*?\*/`) @@ -743,3 +921,57 @@ func contains(arr []string, str string) bool { } return false } + +func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { + ctx := context.Background() + + // 用于crash后,重启时,先扫一遍running和paused的 + qr, _ := jc.execQuery(ctx, "", sqlDMLJobGetAllJobs) + if qr != nil { + + jc.workingTablesMutex.Lock() + jc.tableMutex.Lock() + jc.workingUUIDsMutex.Lock() + + for _, row := range qr.Named().Rows { + status := row["job_status"].ToString() + tableSchema := row["related_schema"].ToString() + table := row["related_table"].ToString() + uuid := row["job_uuid"].ToString() + timegap, _ := row["timegap_in_ms"].ToInt64() + subtaskSQL := row["subtask_sql"].ToString() + dmlType := row["dml_type"].ToString() + countTotalRows, _ := row["count_total_rows"].ToInt64() + AffectedRows, _ := row["affected_rows"].ToInt64() + + if status == runningStatus { + jc.initDMLJobRunningMeta(uuid, table) + go jc.dmlJobRunner(uuid, table, tableSchema, subtaskSQL, dmlType, timegap, countTotalRows, AffectedRows, false) + } + if status == pausedStatus { + jc.initDMLJobRunningMeta(uuid, table) + // 触发暂停 + jc.jobChansMutex.Lock() + pauseChan := jc.jobChans[uuid].pauseAndResume + jc.jobChansMutex.Unlock() + pauseChan <- "pause" + go jc.dmlJobRunner(uuid, table, tableSchema, subtaskSQL, dmlType, timegap, countTotalRows, AffectedRows, false) + } + } + + jc.workingTablesMutex.Unlock() + jc.tableMutex.Unlock() + jc.workingUUIDsMutex.Unlock() + } + + fmt.Printf("check of running and paused done \n") + checkBeforeSchedule <- struct{}{} + + for { + + // todo, 增加对长时间未增加 rows的处理 + // todo,对于cancel和failed 垃圾条目的删除 + + time.Sleep(healthCheckTimeGap) + } +} diff --git a/go/vt/vttablet/queryservice/queryservice.go b/go/vt/vttablet/queryservice/queryservice.go index b4ae04e0b0..bfa46cd722 100644 --- a/go/vt/vttablet/queryservice/queryservice.go +++ b/go/vt/vttablet/queryservice/queryservice.go @@ -115,7 +115,7 @@ type QueryService interface { SetFailPoint(ctx context.Context, command string, key string, value string) error - HandleDMLJob(ctx context.Context, command, sql, uuid string) (*sqltypes.Result, error) + SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema string, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) // HandlePanic will be called if any of the functions panic. HandlePanic(err *error) diff --git a/go/vt/vttablet/queryservice/wrapped.go b/go/vt/vttablet/queryservice/wrapped.go index b947f961e4..0600357a01 100644 --- a/go/vt/vttablet/queryservice/wrapped.go +++ b/go/vt/vttablet/queryservice/wrapped.go @@ -375,11 +375,11 @@ func (ws *wrappedService) SetFailPoint(ctx context.Context, command string, key }) } -func (ws *wrappedService) HandleDMLJob(ctx context.Context, cmd, sql, uuid string) (qr *sqltypes.Result, err error) { - err = ws.wrapper(ctx, nil, ws.impl, "HandleDMLJob", false, nil, func(ctx context.Context, target *querypb.Target, conn QueryService) (bool, error) { +func (ws *wrappedService) SubmitDMLJob(ctx context.Context, cmd, sql, uuid, tableSchema string, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (qr *sqltypes.Result, err error) { + err = ws.wrapper(ctx, nil, ws.impl, "SubmitDMLJob", false, nil, func(ctx context.Context, target *querypb.Target, conn QueryService) (bool, error) { // todo newborn22,这个地方是否要canRetry? 参考 dropschema var innerErr error - qr, innerErr = conn.HandleDMLJob(ctx, cmd, sql, uuid) + qr, innerErr = conn.SubmitDMLJob(ctx, cmd, sql, uuid, tableSchema, timeGapInMs, subtaskRows, postponeLaunch, autoRetry) return canRetry(ctx, innerErr), innerErr }) return qr, err diff --git a/go/vt/vttablet/sandboxconn/sandboxconn.go b/go/vt/vttablet/sandboxconn/sandboxconn.go index 84ec723368..7fd964ebee 100644 --- a/go/vt/vttablet/sandboxconn/sandboxconn.go +++ b/go/vt/vttablet/sandboxconn/sandboxconn.go @@ -625,7 +625,7 @@ func (sbc *SandboxConn) SetFailPoint(ctx context.Context, command string, key st return err } -func (sbc *SandboxConn) HandleDMLJob(ctx context.Context, command, sql, uuid string) (*sqltypes.Result, error) { +func (sbc *SandboxConn) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema string, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { return nil, nil } diff --git a/go/vt/vttablet/tabletconntest/fakequeryservice.go b/go/vt/vttablet/tabletconntest/fakequeryservice.go index 597d5aca0a..fad3ef22b2 100644 --- a/go/vt/vttablet/tabletconntest/fakequeryservice.go +++ b/go/vt/vttablet/tabletconntest/fakequeryservice.go @@ -71,7 +71,7 @@ func (f *FakeQueryService) SetFailPoint(ctx context.Context, command string, key return nil } -func (f *FakeQueryService) HandleDMLJob(ctx context.Context, command, sql, uuid string) (*sqltypes.Result, error) { +func (f *FakeQueryService) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema string, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { panic("implement me") } diff --git a/go/vt/vttablet/tabletserver/query_executor.go b/go/vt/vttablet/tabletserver/query_executor.go index 35d8c71b76..1eb62ae8f1 100644 --- a/go/vt/vttablet/tabletserver/query_executor.go +++ b/go/vt/vttablet/tabletserver/query_executor.go @@ -1161,9 +1161,9 @@ func (qre *QueryExecutor) execAlterDMLJob() (*sqltypes.Result, error) { uuid := alterDMLJob.UUID switch alterDMLJob.Type { case sqlparser.PauseDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("pause", "", uuid) + return qre.tsv.dmlJonController.HandleRequest("pause", "", uuid, "", 0, 0, false, false) case sqlparser.ResumeDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("resume", "", uuid) + return qre.tsv.dmlJonController.HandleRequest("resume", "", uuid, "", 0, 0, false, false) } return nil, vterrors.New(vtrpcpb.Code_UNIMPLEMENTED, "ALTER DML_JOB not implemented") } diff --git a/go/vt/vttablet/tabletserver/tabletserver.go b/go/vt/vttablet/tabletserver/tabletserver.go index 7813e491e4..bc1befb0c5 100644 --- a/go/vt/vttablet/tabletserver/tabletserver.go +++ b/go/vt/vttablet/tabletserver/tabletserver.go @@ -1495,9 +1495,10 @@ func (tsv *TabletServer) SetFailPoint(ctx context.Context, command string, key s return err } -func (tsv *TabletServer) HandleDMLJob(ctx context.Context, command, sql, jobUUID string) (*sqltypes.Result, error) { +// todo newborn22,改名,submitDMLjob +func (tsv *TabletServer) SubmitDMLJob(ctx context.Context, command, sql, jobUUID, tableSchema string, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { // todo newborn22, 这个地方要进行封装?,变成更通用的 - return tsv.dmlJonController.HandleRequest(command, sql, jobUUID) + return tsv.dmlJonController.HandleRequest(command, sql, jobUUID, tableSchema, timeGapInMs, subtaskRows, postponeLaunch, autoRetry) } // execRequest performs verifications, sets up the necessary environments diff --git a/proto/query.proto b/proto/query.proto index 996f170ef6..cdbb10cc8d 100644 --- a/proto/query.proto +++ b/proto/query.proto @@ -1078,7 +1078,6 @@ message DropSchemaResponse { } - message ReloadExecRequest{ int32 reloadType = 1; } @@ -1086,7 +1085,7 @@ message ReloadExecRequest{ message ReloadExecResponse{ } -message DMLJobRequest{ +message SubmitDMLJobRequest{ string cmd = 1; string job_uuid = 2; string sql = 3; @@ -1096,6 +1095,6 @@ message DMLJobRequest{ bool auto_retry = 8; bool postpone_launch = 9; } -message DMLJobResponse { +message SubmitDMLJobResponse { QueryResult result = 1; } \ No newline at end of file diff --git a/proto/queryservice.proto b/proto/queryservice.proto index 202c60cc40..bdc429a66e 100644 --- a/proto/queryservice.proto +++ b/proto/queryservice.proto @@ -128,5 +128,5 @@ service Query { // DropSchema drops the schema on the tablet and cleans up the relevant resources such as OnlineDDL and VReplication rpc DropSchema(query.DropSchemaRequest) returns (query.DropSchemaResponse) {}; - rpc HandleDMLJob(query.DMLJobRequest) returns (query.DMLJobResponse) {}; + rpc SubmitDMLJob(query.SubmitDMLJobRequest) returns (query.SubmitDMLJobResponse) {}; } \ No newline at end of file From fe019af8649a4e89eb0860aac33fc5f8914b60c6 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Mon, 11 Dec 2023 18:19:09 +0800 Subject: [PATCH 05/54] feat: support postpone and cancel Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/vttablet/jobcontroller/controller.go | 145 +++++++++++------- go/vt/vttablet/tabletserver/query_executor.go | 4 + 2 files changed, 97 insertions(+), 52 deletions(-) diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 6603688370..c7d8425058 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -47,7 +47,7 @@ const ( ThrottleAllJobs = "throttle_all" UnthrottleJob = "unthrottle" UnthrottleAllJobs = "unthrottle_all" - CancelJob = "cancel_job" + CancelJob = "cancel" ) const ( @@ -354,12 +354,37 @@ func (jc *JobController) CancelJob(uuid string) (*sqltypes.Result, error) { if err != nil { return emptyResult, nil } - if status == canceledStatus || status == failedStatus { + if status == canceledStatus || status == failedStatus || status == completedStatus { emptyResult.Info = fmt.Sprintf(" The job status is %s and can't canceld", status) return emptyResult, nil } - return &sqltypes.Result{}, nil + qr, err := jc.updateJobStatus(ctx, uuid, canceledStatus) + if err != nil { + return emptyResult, nil + } + + // 对于paused和running这两个状态的job,它们在内存中都有一个jobRunner协程正在运行,需要将协程关闭 + if status == runningStatus || status == pausedStatus { + jc.jobChansMutex.Lock() + cancelChan := jc.jobChans[uuid].cancel + jc.jobChansMutex.Unlock() + + // 由于chan的容量为1,会阻塞在这里,直到jobRunner中接收了此信号 + cancelChan <- "cancel" + } + + tableName, _ := jc.GetStrJobInfo(ctx, uuid, "related_table") + + jc.jobChansMutex.Lock() + jc.workingUUIDsMutex.Lock() + jc.workingTablesMutex.Lock() + jc.deleteDMLJobRunningMeta(uuid, tableName) + jc.jobChansMutex.Unlock() + jc.workingUUIDsMutex.Unlock() + jc.workingTablesMutex.Unlock() + + return qr, nil } func (jc *JobController) CompleteJob(ctx context.Context, uuid, table string) (*sqltypes.Result, error) { @@ -367,6 +392,10 @@ func (jc *JobController) CompleteJob(ctx context.Context, uuid, table string) (* defer jc.workingTablesMutex.Unlock() delete(jc.workingTables, table) + jc.workingUUIDsMutex.Lock() + defer jc.workingUUIDsMutex.Unlock() + delete(jc.workingUUIDs, uuid) + jc.jobChansMutex.Lock() defer jc.jobChansMutex.Unlock() close(jc.jobChans[uuid].pauseAndResume) @@ -420,10 +449,11 @@ func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { subtaskSQL := row["subtask_sql"].ToString() dmlType := row["dml_type"].ToString() countTotalRows, _ := row["count_total_rows"].ToInt64() + subtaskRows, _ := row["subtask_rows"].ToInt64() if jc.checkDmlJobRunnable(status, table) { // todo 这里之后改成休眠的方式后要删掉, 由于外面拿锁,必须在这里就加上,不然后面的循环可能:已经启动go runner的但是还未加入到working table,导致多个表的同时启动 jc.initDMLJobRunningMeta(uuid, table) - go jc.dmlJobRunner(uuid, table, schema, subtaskSQL, dmlType, timegap, countTotalRows, 0, true) + go jc.dmlJobRunner(uuid, table, schema, subtaskSQL, dmlType, timegap, countTotalRows, 0, subtaskRows, true) } } @@ -447,13 +477,14 @@ func (jc *JobController) checkDmlJobRunnable(status, table string) bool { return true } -func (jc *JobController) dmlJobRunner(uuid, table, relatedSchema, subtaskSQL, dmlType string, timeGap, countTotalRows, offset int64, updateStatusRunning bool) { +func (jc *JobController) dmlJobRunner(uuid, table, relatedSchema, subtaskSQL, dmlType string, timeGap, countTotalRows, offset, subtaskRows int64, updateStatusRunning bool) { jc.jobChansMutex.Lock() jobChan := jc.jobChans[uuid] jc.jobChansMutex.Unlock() pauseAndResumeChan := jobChan.pauseAndResume + cancelChan := jobChan.cancel // timeGap 单位ms,duration输入ns,应该乘上1000000 timer := time.NewTicker(time.Duration(timeGap * 1e6)) @@ -471,60 +502,69 @@ func (jc *JobController) dmlJobRunner(uuid, table, relatedSchema, subtaskSQL, dm // 在一个无限循环中等待定时器触发 for { + // 第一层select用于接收是否有用户的cancel命令,以随时结束协程 select { - case <-timer.C: - // 定时器触发时执行的函数 - // 获得sql,分update和delete两种情况 - var query string - if dmlType == "update" { - query, err = sqlparser.ParseAndBind(subtaskSQL, sqltypes.Int64BindVariable(offset)) - if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) - } - } - if dmlType == "delete" { - query = subtaskSQL - } - - // todo newborn22,删除,旧方案 有bug - //qr, err := jc.execQuery(ctx, relatedSchema, query) - affectedRows, err := jc.execSubtaskAndRecord(ctx, relatedSchema, query, uuid) - - if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) + case cmd := <-cancelChan: + if cmd == "cancel" { + _ = jc.updateJobMessage(ctx, uuid, fmt.Sprintf("Canceld by user at %s", time.Now().Format("2006-01-02 15:04:05"))) return } + default: + select { + case <-timer.C: + // 定时器触发时执行的函数 + // 获得sql,分update和delete两种情况 + var query string + if dmlType == "update" { + query, err = sqlparser.ParseAndBind(subtaskSQL, sqltypes.Int64BindVariable(offset)) + if err != nil { + jc.FailJob(ctx, uuid, err.Error(), table) + } + } + if dmlType == "delete" { + query = subtaskSQL + } + + // todo newborn22,删除,旧方案 有bug + //qr, err := jc.execQuery(ctx, relatedSchema, query) + affectedRows, err := jc.execSubtaskAndRecord(ctx, relatedSchema, query, uuid) - // complete,分update和delete两种情况 - // todo newborn22,删除,旧方案 有bug - //if (dmlType == "delete" && qr.RowsAffected == 0) || (dmlType == "update" && offset >= countTotalRows) { - if (dmlType == "delete" && affectedRows == 0) || (dmlType == "update" && offset >= countTotalRows) { - _, err = jc.CompleteJob(ctx, uuid, table) if err != nil { jc.FailJob(ctx, uuid, err.Error(), table) + return } - return - } - // todo newborn22,删除,旧方案 有bug - //err = jc.updateJobAffectedRows(ctx, uuid, int64(qr.RowsAffected)) - //if err != nil { - // jc.FailJob(ctx, uuid, err.Error(), table) - // return - //} - if dmlType == "update" { - //offset += int64(qr.RowsAffected) - offset += affectedRows - } + // complete,分update和delete两种情况 + // todo newborn22,删除,旧方案 有bug + //if (dmlType == "delete" && qr.RowsAffected == 0) || (dmlType == "update" && offset >= countTotalRows) { + if (dmlType == "delete" && affectedRows == 0) || (dmlType == "update" && offset >= countTotalRows) { + _, err = jc.CompleteJob(ctx, uuid, table) + if err != nil { + jc.FailJob(ctx, uuid, err.Error(), table) + } + return + } + + // todo newborn22,删除,旧方案 有bug + //err = jc.updateJobAffectedRows(ctx, uuid, int64(qr.RowsAffected)) + //if err != nil { + // jc.FailJob(ctx, uuid, err.Error(), table) + // return + //} + if dmlType == "update" { + //offset += int64(qr.RowsAffected) + offset += subtaskRows + } - // 控制暂停 - case command := <-pauseAndResumeChan: - switch command { - case "pause": - for { - cmd := <-pauseAndResumeChan - if cmd == "resume" { // actually, cmd will always be "resume", the code logic will guarantee that - break + // 控制暂停 + case command := <-pauseAndResumeChan: + switch command { + case "pause": + for { + cmd := <-pauseAndResumeChan + if cmd == "resume" { // actually, cmd will always be "resume", the code logic will guarantee that + break + } } } } @@ -943,10 +983,11 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { dmlType := row["dml_type"].ToString() countTotalRows, _ := row["count_total_rows"].ToInt64() AffectedRows, _ := row["affected_rows"].ToInt64() + subtaskRows, _ := row["subtask_rows"].ToInt64() if status == runningStatus { jc.initDMLJobRunningMeta(uuid, table) - go jc.dmlJobRunner(uuid, table, tableSchema, subtaskSQL, dmlType, timegap, countTotalRows, AffectedRows, false) + go jc.dmlJobRunner(uuid, table, tableSchema, subtaskSQL, dmlType, timegap, countTotalRows, AffectedRows, subtaskRows, false) } if status == pausedStatus { jc.initDMLJobRunningMeta(uuid, table) @@ -955,7 +996,7 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { pauseChan := jc.jobChans[uuid].pauseAndResume jc.jobChansMutex.Unlock() pauseChan <- "pause" - go jc.dmlJobRunner(uuid, table, tableSchema, subtaskSQL, dmlType, timegap, countTotalRows, AffectedRows, false) + go jc.dmlJobRunner(uuid, table, tableSchema, subtaskSQL, dmlType, timegap, countTotalRows, AffectedRows, subtaskRows, false) } } diff --git a/go/vt/vttablet/tabletserver/query_executor.go b/go/vt/vttablet/tabletserver/query_executor.go index 1eb62ae8f1..2f6576557f 100644 --- a/go/vt/vttablet/tabletserver/query_executor.go +++ b/go/vt/vttablet/tabletserver/query_executor.go @@ -1164,6 +1164,10 @@ func (qre *QueryExecutor) execAlterDMLJob() (*sqltypes.Result, error) { return qre.tsv.dmlJonController.HandleRequest("pause", "", uuid, "", 0, 0, false, false) case sqlparser.ResumeDMLJobType: return qre.tsv.dmlJonController.HandleRequest("resume", "", uuid, "", 0, 0, false, false) + case sqlparser.LaunchDMLJobType: + return qre.tsv.dmlJonController.HandleRequest("launch", "", uuid, "", 0, 0, false, false) + case sqlparser.CancelDMLJobType: + return qre.tsv.dmlJonController.HandleRequest("cancel", "", uuid, "", 0, 0, false, false) } return nil, vterrors.New(vtrpcpb.Code_UNIMPLEMENTED, "ALTER DML_JOB not implemented") } From ce78605b82c66a1dc2cc3dde9aa4193690c04dbe Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Tue, 12 Dec 2023 14:33:06 +0800 Subject: [PATCH 06/54] feat: support throttle Signed-off-by: newborn22 <953950914@qq.com> --- .../schema/job/big_dml_jobs_table.sql | 2 + go/vt/vttablet/jobcontroller/controller.go | 170 ++++++++++++++++-- go/vt/vttablet/tabletserver/query_executor.go | 12 +- go/vt/vttablet/tabletserver/tabletserver.go | 4 +- 4 files changed, 164 insertions(+), 24 deletions(-) diff --git a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql index d0dac59a04..a697b5b2be 100644 --- a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql +++ b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql @@ -31,5 +31,7 @@ CREATE TABLE IF NOT EXISTS mysql.big_dml_jobs_table `count_total_rows_sql` varchar(256) NULL DEFAULT NULL, `dml_type` varchar(256) NULL DEFAULT NULL, `affected_rows` bigint NOT NULL DEFAULT 0, + `throttle_ratio` double NULL DEFAULT NULL, + `throttle_expire_time` varchar(256) NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE = InnoDB diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index c7d8425058..7c7913ff64 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -10,12 +10,18 @@ import ( "errors" "fmt" "math" + "net/http" "regexp" "strconv" "strings" "sync" + "sync/atomic" "time" + vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" + "vitess.io/vitess/go/vt/vterrors" + "vitess.io/vitess/go/vt/vttablet/tabletserver/throttle" + "vitess.io/vitess/go/vt/schema" "vitess.io/vitess/go/mysql/collations" @@ -111,14 +117,32 @@ const ( WHERE TABLE_SCHEMA = %a AND TABLE_NAME = %a` + + sqlDMLJobUpdateThrottleInfo = `update mysql.big_dml_jobs_table set + throttle_ratio = %a , + throttle_expire_time = %a + where + job_uuid = %a` + + sqlDMLJobClearThrottleInfo = `update mysql.big_dml_jobs_table set + throttle_ratio = NULL , + throttle_expire_time = NULL + where + job_uuid = %a` +) + +const ( + throttleCheckDuration = 250 * time.Millisecond ) type JobController struct { - tableName string - tableMutex sync.Mutex // todo newborn22,检查是否都上锁了 - tabletTypeFunc func() topodatapb.TabletType - env tabletenv.Env - pool *connpool.Pool + tableName string + tableMutex sync.Mutex // todo newborn22,检查是否都上锁了 + tabletTypeFunc func() topodatapb.TabletType + env tabletenv.Env + pool *connpool.Pool + lagThrottler *throttle.Throttler + lastSuccessfulThrottle int64 workingTables map[string]bool // 用于调度时检测当前任务是否和正在工作的表冲突,paused、running状态的job的表都在里面 workingTablesMutex sync.Mutex @@ -153,6 +177,7 @@ func (jc *JobController) Open() error { go jc.jobHealthCheck(jc.checkBeforeSchedule) go jc.jobScheduler(jc.checkBeforeSchedule) + initThrottleTicker() } return nil @@ -162,7 +187,7 @@ func (jc *JobController) Close() { jc.pool.Close() } -func NewJobController(tableName string, tabletTypeFunc func() topodatapb.TabletType, env tabletenv.Env) *JobController { +func NewJobController(tableName string, tabletTypeFunc func() topodatapb.TabletType, env tabletenv.Env, lagThrottler *throttle.Throttler) *JobController { return &JobController{ tableName: tableName, tabletTypeFunc: tabletTypeFunc, @@ -170,7 +195,8 @@ func NewJobController(tableName string, tabletTypeFunc func() topodatapb.TabletT pool: connpool.NewPool(env, "DMLJobControllerPool", tabletenv.ConnPoolConfig{ Size: databasePoolSize, IdleTimeoutSeconds: env.Config().OltpReadPool.IdleTimeoutSeconds, - })} + }), + lagThrottler: lagThrottler} // 检查字段 @@ -179,7 +205,7 @@ func NewJobController(tableName string, tabletTypeFunc func() topodatapb.TabletT } // todo newborn22 , 能否改写得更有通用性? 这样改写是否好? -func (jc *JobController) HandleRequest(command, sql, jobUUID, tableSchema string, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (jc *JobController) HandleRequest(command, sql, jobUUID, tableSchema, expireString string, ratioLiteral *sqlparser.Literal, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { // todo newborn22, if 可以删掉 if jc.tabletTypeFunc() == topodatapb.TabletType_PRIMARY { switch command { @@ -195,6 +221,10 @@ func (jc *JobController) HandleRequest(command, sql, jobUUID, tableSchema string return jc.LaunchJob(jobUUID) case CancelJob: return jc.CancelJob(jobUUID) + case ThrottleJob: + return jc.ThrottleJob(jobUUID, expireString, ratioLiteral) + case UnthrottleJob: + return jc.UnthrottleJob(jobUUID) } } // todo newborn22,对返回值判断为空? @@ -387,6 +417,108 @@ func (jc *JobController) CancelJob(uuid string) (*sqltypes.Result, error) { return qr, nil } +// 指定throttle的时长和ratio +// ratio表示限流的比例,最大为1,即完全限流 +// 时长的格式举例: +// "300ms" 表示 300 毫秒。 +// "-1.5h" 表示负1.5小时。 +// "2h45m" 表示2小时45分钟。 +func (jc *JobController) ThrottleJob(uuid, expireString string, ratioLiteral *sqlparser.Literal) (result *sqltypes.Result, err error) { + emptyResult := &sqltypes.Result{} + duration, ratio, err := jc.validateThrottleParams(expireString, ratioLiteral) + if err != nil { + return nil, err + } + if err := jc.lagThrottler.CheckIsReady(); err != nil { + return nil, err + } + expireAt := time.Now().Add(duration) + _ = jc.lagThrottler.ThrottleApp(uuid, expireAt, ratio) + + query, err := sqlparser.ParseAndBind(sqlDMLJobUpdateThrottleInfo, + sqltypes.Float64BindVariable(ratio), + sqltypes.StringBindVariable(expireAt.String()), + sqltypes.StringBindVariable(uuid)) + if err != nil { + return emptyResult, err + } + ctx := context.Background() + jc.tableMutex.Lock() + defer jc.tableMutex.Unlock() + return jc.execQuery(ctx, "", query) +} + +func (jc *JobController) UnthrottleJob(uuid string) (result *sqltypes.Result, err error) { + emptyResult := &sqltypes.Result{} + if err := jc.lagThrottler.CheckIsReady(); err != nil { + return nil, err + } + _ = jc.lagThrottler.UnthrottleApp(uuid) + + query, err := sqlparser.ParseAndBind(sqlDMLJobClearThrottleInfo, + sqltypes.StringBindVariable(uuid)) + if err != nil { + return emptyResult, err + } + ctx := context.Background() + jc.tableMutex.Lock() + defer jc.tableMutex.Unlock() + return jc.execQuery(ctx, "", query) +} + +var throttleTicks int64 +var throttleInit sync.Once + +func initThrottleTicker() { + throttleInit.Do(func() { + go func() { + tick := time.NewTicker(throttleCheckDuration) + defer tick.Stop() + for range tick.C { + atomic.AddInt64(&throttleTicks, 1) + } + }() + }) +} + +func (jc *JobController) requestThrottle(uuid string) (throttleCheckOK bool) { + if jc.lastSuccessfulThrottle >= atomic.LoadInt64(&throttleTicks) { + // if last check was OK just very recently there is no need to check again + return true + } + ctx := context.Background() + // 请求时给每一个throttle的app名都加上了dml-job前缀,这样可以通过throttle dml-job来throttle所有的dml jobs + appName := "dml-job:" + uuid + // 这里不特别设置flag + throttleCheckFlags := &throttle.CheckFlags{} + // 由于dml job子任务需要同步到集群中的各个从节点,因此throttle也依据的是集群的复制延迟 + checkType := throttle.ThrottleCheckPrimaryWrite + checkRst := jc.lagThrottler.CheckByType(ctx, appName, "", throttleCheckFlags, checkType) + if checkRst.StatusCode != http.StatusOK { + return false + } + jc.lastSuccessfulThrottle = atomic.LoadInt64(&throttleTicks) + return true +} + +func (jc *JobController) validateThrottleParams(expireString string, ratioLiteral *sqlparser.Literal) (duration time.Duration, ratio float64, err error) { + duration = time.Hour * 24 * 365 * 100 + if expireString != "" { + duration, err = time.ParseDuration(expireString) + if err != nil || duration < 0 { + return duration, ratio, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid EXPIRE value: %s. Try '120s', '30m', '1h', etc. Allowed units are (s)ec, (m)in, (h)hour", expireString) + } + } + ratio = 1.0 + if ratioLiteral != nil { + ratio, err = strconv.ParseFloat(ratioLiteral.Val, 64) + if err != nil || ratio < 0 || ratio > 1 { + return duration, ratio, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid RATIO value: %s. Try any decimal number between '0.0' (no throttle) and `1.0` (fully throttled)", ratioLiteral.Val) + } + } + return duration, ratio, nil +} + func (jc *JobController) CompleteJob(ctx context.Context, uuid, table string) (*sqltypes.Result, error) { jc.workingTablesMutex.Lock() defer jc.workingTablesMutex.Unlock() @@ -513,6 +645,12 @@ func (jc *JobController) dmlJobRunner(uuid, table, relatedSchema, subtaskSQL, dm select { case <-timer.C: // 定时器触发时执行的函数 + + // 先请求throttle,若被throttle阻塞,则等待下一次timer事件 + if !jc.requestThrottle(uuid) { + continue + } + // 获得sql,分update和delete两种情况 var query string if dmlType == "update" { @@ -525,8 +663,6 @@ func (jc *JobController) dmlJobRunner(uuid, table, relatedSchema, subtaskSQL, dm query = subtaskSQL } - // todo newborn22,删除,旧方案 有bug - //qr, err := jc.execQuery(ctx, relatedSchema, query) affectedRows, err := jc.execSubtaskAndRecord(ctx, relatedSchema, query, uuid) if err != nil { @@ -535,8 +671,6 @@ func (jc *JobController) dmlJobRunner(uuid, table, relatedSchema, subtaskSQL, dm } // complete,分update和delete两种情况 - // todo newborn22,删除,旧方案 有bug - //if (dmlType == "delete" && qr.RowsAffected == 0) || (dmlType == "update" && offset >= countTotalRows) { if (dmlType == "delete" && affectedRows == 0) || (dmlType == "update" && offset >= countTotalRows) { _, err = jc.CompleteJob(ctx, uuid, table) if err != nil { @@ -545,12 +679,6 @@ func (jc *JobController) dmlJobRunner(uuid, table, relatedSchema, subtaskSQL, dm return } - // todo newborn22,删除,旧方案 有bug - //err = jc.updateJobAffectedRows(ctx, uuid, int64(qr.RowsAffected)) - //if err != nil { - // jc.FailJob(ctx, uuid, err.Error(), table) - // return - //} if dmlType == "update" { //offset += int64(qr.RowsAffected) offset += subtaskRows @@ -631,6 +759,9 @@ func (jc *JobController) genSubtaskDMLSQL(sql, tableSchema string, subtaskRows i } tableName := sqlparser.String(s.TableExprs) whereStr := sqlparser.String(s.Where) + if s.Where == nil { + return "", "", "", "", errors.New("the sql without WHERE can't be transferred to a DML job") + } countTotalRowsSQL = fmt.Sprintf("select count(*) from %s %s", tableName, whereStr) return tableName, "delete", sqlparser.String(s), countTotalRowsSQL, nil @@ -670,6 +801,9 @@ func (jc *JobController) genSubtaskDMLSQL(sql, tableSchema string, subtaskRows i selectStr += fmt.Sprintf(" from %s ", tableName) whereStr := sqlparser.String(s.Where) + if s.Where == nil { + return "", "", "", "", errors.New("the sql without WHERE can't be transferred to a DML job") + } selectStr += whereStr firstPK = true diff --git a/go/vt/vttablet/tabletserver/query_executor.go b/go/vt/vttablet/tabletserver/query_executor.go index 2f6576557f..8b080f025b 100644 --- a/go/vt/vttablet/tabletserver/query_executor.go +++ b/go/vt/vttablet/tabletserver/query_executor.go @@ -1161,13 +1161,17 @@ func (qre *QueryExecutor) execAlterDMLJob() (*sqltypes.Result, error) { uuid := alterDMLJob.UUID switch alterDMLJob.Type { case sqlparser.PauseDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("pause", "", uuid, "", 0, 0, false, false) + return qre.tsv.dmlJonController.HandleRequest("pause", "", uuid, "", "", nil, 0, 0, false, false) case sqlparser.ResumeDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("resume", "", uuid, "", 0, 0, false, false) + return qre.tsv.dmlJonController.HandleRequest("resume", "", uuid, "", "", nil, 0, 0, false, false) case sqlparser.LaunchDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("launch", "", uuid, "", 0, 0, false, false) + return qre.tsv.dmlJonController.HandleRequest("launch", "", uuid, "", "", nil, 0, 0, false, false) case sqlparser.CancelDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("cancel", "", uuid, "", 0, 0, false, false) + return qre.tsv.dmlJonController.HandleRequest("cancel", "", uuid, "", "", nil, 0, 0, false, false) + case sqlparser.ThrottleDMLJobType: + return qre.tsv.dmlJonController.HandleRequest("throttle", "", uuid, "", alterDMLJob.Expire, alterDMLJob.Ratio, 0, 0, false, false) + case sqlparser.UnthrottleDMLJobType: + return qre.tsv.dmlJonController.HandleRequest("unthrottle", "", uuid, "", "", nil, 0, 0, false, false) } return nil, vterrors.New(vtrpcpb.Code_UNIMPLEMENTED, "ALTER DML_JOB not implemented") } diff --git a/go/vt/vttablet/tabletserver/tabletserver.go b/go/vt/vttablet/tabletserver/tabletserver.go index bc1befb0c5..c40462a7a6 100644 --- a/go/vt/vttablet/tabletserver/tabletserver.go +++ b/go/vt/vttablet/tabletserver/tabletserver.go @@ -197,7 +197,7 @@ func NewTabletServer(name string, config *tabletenv.TabletConfig, topoServer *to tsv.branchWatch = NewBranchWatcher(tsv, tsv.config.DB.DbaWithDB()) tsv.onlineDDLExecutor = onlineddl.NewExecutor(tsv, alias, topoServer, tsv.lagThrottler, tabletTypeFunc, tsv.onlineDDLExecutorToggleTableBuffer) - tsv.dmlJonController = jobcontroller.NewJobController("big_dml_jobs_table", tabletTypeFunc, tsv) + tsv.dmlJonController = jobcontroller.NewJobController("big_dml_jobs_table", tabletTypeFunc, tsv, tsv.lagThrottler) tsv.tableGC = gc.NewTableGC(tsv, topoServer, tsv.lagThrottler) tsv.sm = &stateManager{ @@ -1498,7 +1498,7 @@ func (tsv *TabletServer) SetFailPoint(ctx context.Context, command string, key s // todo newborn22,改名,submitDMLjob func (tsv *TabletServer) SubmitDMLJob(ctx context.Context, command, sql, jobUUID, tableSchema string, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { // todo newborn22, 这个地方要进行封装?,变成更通用的 - return tsv.dmlJonController.HandleRequest(command, sql, jobUUID, tableSchema, timeGapInMs, subtaskRows, postponeLaunch, autoRetry) + return tsv.dmlJonController.HandleRequest(command, sql, jobUUID, tableSchema, "", nil, timeGapInMs, subtaskRows, postponeLaunch, autoRetry) } // execRequest performs verifications, sets up the necessary environments From 2227c2c6fca7decb2996a2625eebe0cb80bce360 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Tue, 19 Dec 2023 10:48:18 +0800 Subject: [PATCH 07/54] feat: ugly draft of batch job runner, single pk with int type Signed-off-by: newborn22 <953950914@qq.com> --- .../schema/job/big_dml_jobs_table.sql | 7 +- .../schema/job/dml_batch_sql_table.sql | 24 + go/vt/vttablet/jobcontroller/controller.go | 424 ++++++++++++++++-- 3 files changed, 426 insertions(+), 29 deletions(-) create mode 100644 go/vt/sidecardb/schema/job/dml_batch_sql_table.sql diff --git a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql index a697b5b2be..1e7fbe1954 100644 --- a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql +++ b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql @@ -15,10 +15,12 @@ limitations under the License. */ -- todo newborn22 ,需要索引?,名字 +-- todo newbron22 ,改成batchsize CREATE TABLE IF NOT EXISTS mysql.big_dml_jobs_table ( `id` bigint unsigned NOT NULL AUTO_INCREMENT, `job_uuid` varchar(64) NOT NULL UNIQUE, + `job_batch_table` varchar(64) NOT NULL UNIQUE, `job_status` varchar(128) NOT NULL, `message` varchar(2048) NULL DEFAULT NULL, `dml_sql` varchar(256) NOT NULL, @@ -26,12 +28,9 @@ CREATE TABLE IF NOT EXISTS mysql.big_dml_jobs_table `related_table` varchar(256) NOT NULL, `timegap_in_ms` bigint NOT NULL , `subtask_rows` bigint NOT NULL , - `count_total_rows` bigint NOT NULL , - `subtask_sql` varchar(2048) NULL DEFAULT NULL, - `count_total_rows_sql` varchar(256) NULL DEFAULT NULL, - `dml_type` varchar(256) NULL DEFAULT NULL, `affected_rows` bigint NOT NULL DEFAULT 0, `throttle_ratio` double NULL DEFAULT NULL, `throttle_expire_time` varchar(256) NULL DEFAULT NULL, + `dealing_batch_id` double NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE = InnoDB diff --git a/go/vt/sidecardb/schema/job/dml_batch_sql_table.sql b/go/vt/sidecardb/schema/job/dml_batch_sql_table.sql new file mode 100644 index 0000000000..b5d5e05909 --- /dev/null +++ b/go/vt/sidecardb/schema/job/dml_batch_sql_table.sql @@ -0,0 +1,24 @@ +/* +Copyright 2023 The Vitess Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +CREATE TABLE IF NOT EXISTS mysql.dml_batch_sql_table +( + `id` bigint unsigned NOT NULL AUTO_INCREMENT, + `job_uuid` varchar(64) NOT NULL UNIQUE, + `batch_id` bigint unsigned NOT NULL, + `batch_sql` varchar(256) NOT NULL, + PRIMARY KEY (`id`) + ) ENGINE = InnoDB diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 7c7913ff64..cb877155bf 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -59,6 +59,7 @@ const ( const ( defaultTimeGap = 1000 // 1000ms defaultSubtaskRows = 100 + defaultThreshold = 3000 // todo,通过函数来计算出threshold并传入runner中,要依据索引的个数 ) const ( @@ -80,13 +81,10 @@ const ( dml_sql, related_schema, related_table, + job_batch_table, timegap_in_ms, subtask_rows, - count_total_rows, - subtask_sql, - count_total_rows_sql, - dml_type, - job_status) values(%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a)` + job_status) values(%a,%a,%a,%a,%a,%a,%a,%a)` sqlDMLJobUpdateMessage = `update mysql.big_dml_jobs_table set message = %a @@ -248,18 +246,20 @@ func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, subtask timeGapInMs = int64(defaultTimeGap) } if subtaskRows == 0 { - subtaskRows = int64(defaultSubtaskRows) // todo 传入 + subtaskRows = int64(defaultSubtaskRows) } - table, dmlType, subtaskSQL, countTotalRowsSQL, err := jc.genSubtaskDMLSQL(sql, tableSchema, subtaskRows) + + // todo,修改后的代码 + selectSQL, countSQLTemplate, tableName, err := jc.genSelectBatchKeySQL(sql, tableSchema) if err != nil { - return &sqltypes.Result{}, err + return nil, err } - - qr, err := jc.execQuery(ctx, tableSchema, countTotalRowsSQL) + pkNames, err := jc.getTablePkName(ctx, tableSchema, tableName) if err != nil { return &sqltypes.Result{}, err } - countTotalRows, err := qr.Named().Rows[0].ToInt64("count(*)") + // todo,处理返回值 + jobBatchTable, err := jc.genBatchTable(jobUUID, selectSQL, countSQLTemplate, tableSchema, sql, pkNames, subtaskRows) if err != nil { return &sqltypes.Result{}, err } @@ -273,13 +273,10 @@ func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, subtask sqltypes.StringBindVariable(jobUUID), sqltypes.StringBindVariable(sql), sqltypes.StringBindVariable(tableSchema), - sqltypes.StringBindVariable(table), + sqltypes.StringBindVariable(tableName), + sqltypes.StringBindVariable(jobBatchTable), sqltypes.Int64BindVariable(timeGapInMs), sqltypes.Int64BindVariable(subtaskRows), - sqltypes.Int64BindVariable(countTotalRows), - sqltypes.StringBindVariable(subtaskSQL), - sqltypes.StringBindVariable(countTotalRowsSQL), - sqltypes.StringBindVariable(dmlType), sqltypes.StringBindVariable(jobStatus)) if err != nil { return nil, err @@ -289,15 +286,16 @@ func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, subtask if err != nil { return &sqltypes.Result{}, err } - return jc.buildJobSubmitResult(jobUUID, subtaskSQL, timeGapInMs, subtaskRows, countTotalRows, postponeLaunch, autoRetry), nil + // todo 增加 recursive-split,递归拆分batch的选项 + return jc.buildJobSubmitResult(jobUUID, jobBatchTable, timeGapInMs, subtaskRows, postponeLaunch, autoRetry), nil } -func (jc *JobController) buildJobSubmitResult(jobUUID, subtaskSQL string, timeGap, subtaskRows, countTotalRows int64, postponeLaunch, autoRetry bool) *sqltypes.Result { +func (jc *JobController) buildJobSubmitResult(jobUUID, jobBatchTable string, timeGap, subtaskRows int64, postponeLaunch, autoRetry bool) *sqltypes.Result { var rows []sqltypes.Row - row := buildVarCharRow(jobUUID, strconv.FormatInt(timeGap, 10), strconv.FormatInt(countTotalRows, 10), strconv.FormatInt(subtaskRows, 10), subtaskSQL, strconv.FormatBool(autoRetry), strconv.FormatBool(postponeLaunch)) + row := buildVarCharRow(jobUUID, jobBatchTable, strconv.FormatInt(timeGap, 10), strconv.FormatInt(subtaskRows, 10), strconv.FormatBool(autoRetry), strconv.FormatBool(postponeLaunch)) rows = append(rows, row) submitRst := &sqltypes.Result{ - Fields: buildVarCharFields("job_uuid", "time_gap_in_ms", "count_total_rows", "subtask_rows", "subtask_sql", "auto_retry", "postpone_launch"), + Fields: buildVarCharFields("job_uuid", "job_batch_table", "time_gap_in_ms", "subtask_rows", "auto_retry", "postpone_launch"), Rows: rows, RowsAffected: 1, } @@ -577,15 +575,17 @@ func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { schema := row["related_schema"].ToString() table := row["related_table"].ToString() uuid := row["job_uuid"].ToString() + jobBatchTable := row["job_batch_table"].ToString() timegap, _ := row["timegap_in_ms"].ToInt64() - subtaskSQL := row["subtask_sql"].ToString() - dmlType := row["dml_type"].ToString() - countTotalRows, _ := row["count_total_rows"].ToInt64() - subtaskRows, _ := row["subtask_rows"].ToInt64() + //subtaskSQL := row["subtask_sql"].ToString() + //dmlType := row["dml_type"].ToString() + //countTotalRows, _ := row["count_total_rows"].ToInt64() + //subtaskRows, _ := row["subtask_rows"].ToInt64() if jc.checkDmlJobRunnable(status, table) { // todo 这里之后改成休眠的方式后要删掉, 由于外面拿锁,必须在这里就加上,不然后面的循环可能:已经启动go runner的但是还未加入到working table,导致多个表的同时启动 jc.initDMLJobRunningMeta(uuid, table) - go jc.dmlJobRunner(uuid, table, schema, subtaskSQL, dmlType, timegap, countTotalRows, 0, subtaskRows, true) + // go jc.dmlJobRunner(uuid, table, schema, subtaskSQL, dmlType, timegap, countTotalRows, 0, subtaskRows, true) + go jc.dmlJobBatchRunner(uuid, table, schema, jobBatchTable, timegap) } } @@ -701,6 +701,214 @@ func (jc *JobController) dmlJobRunner(uuid, table, relatedSchema, subtaskSQL, dm } +const ( + getDealingBatchIDSQL = `select dealing_batch_id from mysql.big_dml_jobs_table where job_uuid = %a` + updateDealingBatchIDSQL = `update mysql.big_dml_jobs_table set dealing_batch_id = %a where job_uuid = %a` + getBatchSQLsByID = `select batch_sql,batch_count_sql from %s where batch_id = %%a` + getMaxBatchID = `select max(batch_id) as max_batch_id from %s` +) + +func (jc *JobController) getDealingBatchID(ctx context.Context, uuid string) (float64, error) { + jc.tableMutex.Lock() + defer jc.tableMutex.Unlock() + + submitQuery, err := sqlparser.ParseAndBind(getDealingBatchIDSQL, + sqltypes.StringBindVariable(uuid)) + if err != nil { + return 0, err + } + qr, err := jc.execQuery(ctx, "", submitQuery) + if err != nil { + return 0, err + } + if len(qr.Named().Rows) != 1 { + return 0, errors.New("the len of query result of batch ID is not one") + } + return qr.Named().Rows[0].ToFloat64("dealing_batch_id") +} + +func (jc *JobController) updateDealingBatchID(ctx context.Context, uuid string, batchID float64) error { + jc.tableMutex.Lock() + defer jc.tableMutex.Unlock() + + submitQuery, err := sqlparser.ParseAndBind(updateDealingBatchIDSQL, + sqltypes.Float64BindVariable(batchID), + sqltypes.StringBindVariable(uuid)) + if err != nil { + return err + } + _, err = jc.execQuery(ctx, "", submitQuery) + if err != nil { + return err + } + return nil +} + +// todo to confirm,对于同一个job的batch表只有一个线程在访问,因此不用加锁 +func (jc *JobController) getBatchSQLsByID(ctx context.Context, batchID float64, batchTableName, tableSchema string) (batchSQL, batchCountSQL string, err error) { + getBatchSQLWithTableName := fmt.Sprintf(getBatchSQLsByID, batchTableName) + query, err := sqlparser.ParseAndBind(getBatchSQLWithTableName, + sqltypes.Float64BindVariable(batchID)) + if err != nil { + return "", "", err + } + qr, err := jc.execQuery(ctx, tableSchema, query) + if err != nil { + return "", "", err + } + if len(qr.Named().Rows) != 1 { + return "", "", errors.New("the len of qr of getting batch sql by ID is not 1") + } + batchSQL, _ = qr.Named().Rows[0].ToString("batch_sql") + batchCountSQL, _ = qr.Named().Rows[0].ToString("batch_count_sql") + return batchSQL, batchCountSQL, nil +} + +func (jc *JobController) getMaxBatchID(ctx context.Context, batchTableName, tableSchema string) (float64, error) { + getMaxBatchIDWithTableName := fmt.Sprintf(getMaxBatchID, batchTableName) + qr, err := jc.execQuery(ctx, tableSchema, getMaxBatchIDWithTableName) + if err != nil { + return 0, err + } + if len(qr.Named().Rows) != 1 { + return 0, errors.New("the len of qr of getting batch sql by ID is not 1") + } + return qr.Named().Rows[0].ToFloat64("max_batch_id") +} + +func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, batchSQL, batchCountSQL, uuid string, threshold int64, batchID float64) (nextBatchID float64, err error) { + defer jc.env.LogError() + + var setting pools.Setting + if tableSchema != "" { + setting.SetWithoutDBName(false) + setting.SetQuery(fmt.Sprintf("use %s", tableSchema)) + } + conn, err := jc.pool.Get(ctx, &setting) + defer conn.Recycle() + if err != nil { + return 0, err + } + + // 1.开启事务 + _, err = conn.Exec(ctx, "start transaction", math.MaxInt32, true) + if err != nil { + return 0, err + } + + // 2.查询batch sql预计影响的行数,如果超过阈值,则生成新的batch ID + batchCountSQL += " FOR SHARE" + qr, err := conn.Exec(ctx, batchCountSQL, math.MaxInt32, true) + if err != nil { + return 0, err + } + if len(qr.Named().Rows) != 1 { + return 0, errors.New("the len of qr of count expected batch size is not 1") + } + expectedRow, _ := qr.Named().Rows[0].ToInt64("count_rows") + if expectedRow > threshold { + // todo,递归生成新的batch + fmt.Printf("expectedRow > threshold") + } + + // 3.执行batch sql + _, err = conn.Exec(ctx, batchSQL, math.MaxInt32, true) + if err != nil { + return 0, err + } + + // 4.更新正在处理的batch ID + nextBatchID = batchID + 1 // todo,考虑生成新batch的情况,如何正确地获得下一个batch ID? + err = jc.updateDealingBatchID(ctx, uuid, nextBatchID) + if err != nil { + return 0, err + } + + // 5.提交事务 + _, err = conn.Exec(ctx, "commit", math.MaxInt32, true) + if err != nil { + return 0, err + } + return nextBatchID, nil +} + +func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTable string, timeGap int64) { + + // timeGap 单位ms,duration输入ns,应该乘上1000000 + timer := time.NewTicker(time.Duration(timeGap * 1e6)) + defer timer.Stop() + + var err error + ctx := context.Background() + + status, err := jc.GetStrJobInfo(ctx, uuid, "job_status") + if err != nil { + return + } + + if status != runningStatus { + _, err = jc.updateJobStatus(ctx, uuid, runningStatus) + if err != nil { + jc.FailJob(ctx, uuid, err.Error(), table) + return + } + err = jc.updateDealingBatchID(ctx, uuid, 1) + if err != nil { + jc.FailJob(ctx, uuid, err.Error(), table) + return + } + } + currentBatchID, err := jc.getDealingBatchID(ctx, uuid) + if err != nil { + jc.FailJob(ctx, uuid, err.Error(), table) + return + } + // todo,当动态生成batch时,如何更新max? + maxBatchID, err := jc.getMaxBatchID(ctx, batchTable, relatedSchema) + if err != nil { + jc.FailJob(ctx, uuid, err.Error(), table) + return + } + + // 在一个无限循环中等待定时器触发 + for range timer.C { + // 定时器触发时执行的函数 + status, err := jc.GetStrJobInfo(ctx, uuid, "job_status") + if err != nil { + jc.FailJob(ctx, uuid, err.Error(), table) + return + } + // maybe paused / canceled + if status != runningStatus { + return + } + + // 先请求throttle,若被throttle阻塞,则等待下一次timer事件 + if !jc.requestThrottle(uuid) { + continue + } + + batchSQL, batchCountSQL, err := jc.getBatchSQLsByID(ctx, currentBatchID, batchTable, relatedSchema) + if err != nil { + jc.FailJob(ctx, uuid, err.Error(), table) + return + } + + currentBatchID, err = jc.execBatchAndRecord(ctx, relatedSchema, batchSQL, batchCountSQL, uuid, defaultThreshold, currentBatchID) + if err != nil { + jc.FailJob(ctx, uuid, err.Error(), table) + return + } + if currentBatchID > maxBatchID { + _, err = jc.CompleteJob(ctx, uuid, table) + if err != nil { + jc.FailJob(ctx, uuid, err.Error(), table) + return + } + } + } +} + // 注意在外面拿锁 func (jc *JobController) initDMLJobRunningMeta(uuid, table string) { // 容量为1:如果job crash前为pause,需要先往通道中写入"pause",然后再启动jobRunner。如果不为1则会阻塞 @@ -1150,3 +1358,169 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { time.Sleep(healthCheckTimeGap) } } + +// 目前只支持 +// 1.PK作为拆分列,支持多列PK todo 支持UK或其他列 +// 2.目前只支持单表,且没有join +func (jc *JobController) genSelectBatchKeySQL(sql, tableSchema string) (selectSQL, countSQLTemplate, tableName string, err error) { + // SELECT `id` FROM `test`.`t` WHERE (`v` < 6) ORDER BY IF(ISNULL(`id`),0,1),`id`, 由于是PK,因此不需要判断ISNULL + stmt, _, err := sqlparser.Parse2(sql) + if err != nil { + return "", "", "", err + } + wherePart := "" + switch s := stmt.(type) { + case *sqlparser.Delete: + if len(s.TableExprs) != 1 { + return "", "", "", errors.New("the number of table is more than one") + } + tableExpr, ok := s.TableExprs[0].(*sqlparser.AliasedTableExpr) + // 目前暂不支持join和多表 todo + if !ok { + return "", "", "", errors.New("don't support join table now") + } + tableName = sqlparser.String(tableExpr) + wherePart = sqlparser.String(s.Where) + case *sqlparser.Update: + if len(s.TableExprs) != 1 { + return "", "", "", errors.New("the number of table is more than one") + } + tableExpr, ok := s.TableExprs[0].(*sqlparser.AliasedTableExpr) + // 目前暂不支持join和多表 todo + if !ok { + return "", "", "", errors.New("don't support join table now") + } + tableName = sqlparser.String(tableExpr) + wherePart = sqlparser.String(s.Where) + } + + // 选择出PK + ctx := context.Background() + pkNames, err := jc.getTablePkName(ctx, tableSchema, tableName) + if err != nil { + return "", "", "", err + } + PKPart := "" + firstPK := true + for _, pkName := range pkNames { + if !firstPK { + PKPart += "," + } + PKPart += pkName + firstPK = false + } + + selectSQL = fmt.Sprintf("select %s from %s.%s %s order by %s", + PKPart, tableSchema, tableName, wherePart, PKPart) + + // todo,支持多PK多类型 + countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between %%d AND %%d order by %s", + tableSchema, tableName, wherePart, PKPart, PKPart) + + return selectSQL, countSQLTemplate, tableName, nil +} + +const ( + insertBatchSQL = ` insert into %s ( + batch_id, + batch_sql, + batch_count_sql, + batch_size + ) values (%%a,%%a,%%a,%%a)` +) + +// 创建表,todo 表gc +// todo,discussion,建表的过程中需要放在一个事务内,防止崩了,由于一个事务容纳的数据有限,oom,因此需要多个事务? +func (jc *JobController) genBatchTable(jobUUID, selectSQL, countSQLTemplate, tableSchema, sql string, pkNames []string, batchSize int64) (string, error) { + ctx := context.Background() + + qr, err := jc.execQuery(ctx, "", selectSQL) + if err != nil { + return "", err + } + if len(qr.Named().Rows) == 0 { + return "", nil + } + + // 建表 + batchTableName := "job_batch_table_" + strings.Replace(jobUUID, "-", "_", -1) + createTableSQL := fmt.Sprintf(`CREATE TABLE IF NOT EXISTS %s + ( + id bigint unsigned NOT NULL AUTO_INCREMENT, + batch_id DOUBLE NOT NULL, + batch_sql varchar(1024) NOT NULL, + batch_count_sql varchar(1024) NOT NULL, + batch_size bigint unsigned NOT NULL, + PRIMARY KEY (id) + ) ENGINE = InnoDB`, batchTableName) + + _, err = jc.execQuery(ctx, tableSchema, createTableSQL) + if err != nil { + return "", err + } + + // todo,处理多pk的情况 + // todo 处理不同类型的PK + // todo 创建一个新的value结构,表示PK的名字和类型 + currentBatchSize := int64(0) + currentBatchStart := int64(0) + currentBatchEnd := int64(0) + currentBatchID := float64(1) + + insertBatchSQLWithTableName := fmt.Sprintf(insertBatchSQL, batchTableName) + + var pkName string + // todo 对结果集为0的情况进行特判 + for _, row := range qr.Named().Rows { + for _, pkName = range pkNames { + // todo,对于每一列PK的值类型进行判断 + keyVal, _ := row[pkName].ToInt64() + + if currentBatchSize == 0 { + currentBatchStart = keyVal + } + currentBatchEnd = keyVal + currentBatchSize++ // 改成多pk后要移出去 todo + if currentBatchSize == batchSize { + // between是一个闭区间,batch job的sql也是闭区间 + // todo 处理整数之外的类型 + batchSQL := sql + fmt.Sprintf(" AND %s between %d AND %d", pkName, currentBatchStart, currentBatchEnd) + countSQL := fmt.Sprintf(countSQLTemplate, currentBatchStart, currentBatchEnd) + + currentBatchSize = 0 + // insert into table + insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQLWithTableName, + sqltypes.Float64BindVariable(currentBatchID), + sqltypes.StringBindVariable(batchSQL), + sqltypes.StringBindVariable(countSQL), + sqltypes.Int64BindVariable(int64(batchSize))) + if err != nil { + return "", err + } + _, err = jc.execQuery(ctx, tableSchema, insertBatchSQLQuery) + if err != nil { + return "", err + } + currentBatchID++ // 改成多pk后要移出循环 todo + } + } + } + //最后一个batch + if currentBatchSize != 0 { + batchSQL := sql + fmt.Sprintf(" AND %s between %d AND %d", pkName, currentBatchStart, currentBatchEnd) + countSQL := fmt.Sprintf(countSQLTemplate, currentBatchStart, currentBatchEnd) + insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQLWithTableName, + sqltypes.Float64BindVariable(currentBatchID), + sqltypes.StringBindVariable(batchSQL), + sqltypes.StringBindVariable(countSQL), + sqltypes.Int64BindVariable(int64(currentBatchSize))) + if err != nil { + return "", err + } + _, err = jc.execQuery(ctx, tableSchema, insertBatchSQLQuery) + if err != nil { + return "", err + } + } + return batchTableName, nil +} From 34d3d57a5f030eda8d667ae087542c79df7c536c Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Tue, 19 Dec 2023 16:58:21 +0800 Subject: [PATCH 08/54] feat: optimize pause, resume, recover; support table entry gc; all based on single table, single int pk Signed-off-by: newborn22 <953950914@qq.com> --- .../schema/job/big_dml_jobs_table.sql | 1 + go/vt/vttablet/jobcontroller/controller.go | 301 ++++++------------ 2 files changed, 103 insertions(+), 199 deletions(-) diff --git a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql index 1e7fbe1954..6f968957a7 100644 --- a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql +++ b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql @@ -22,6 +22,7 @@ CREATE TABLE IF NOT EXISTS mysql.big_dml_jobs_table `job_uuid` varchar(64) NOT NULL UNIQUE, `job_batch_table` varchar(64) NOT NULL UNIQUE, `job_status` varchar(128) NOT NULL, + `status_set_time` varchar(128) NOT NULL, `message` varchar(2048) NULL DEFAULT NULL, `dml_sql` varchar(256) NOT NULL, `related_schema` varchar(256) NOT NULL, diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index cb877155bf..4753378254 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -37,7 +37,7 @@ import ( // todo newborn22, 数一下连接数是不是3够用 const ( databasePoolSize = 3 - healthCheckTimeGap = 10000 // ms + healthCheckTimeGap = 5000 // ms ) const ( @@ -84,7 +84,8 @@ const ( job_batch_table, timegap_in_ms, subtask_rows, - job_status) values(%a,%a,%a,%a,%a,%a,%a,%a)` + job_status, + status_set_time) values(%a,%a,%a,%a,%a,%a,%a,%a,%a)` sqlDMLJobUpdateMessage = `update mysql.big_dml_jobs_table set message = %a @@ -97,7 +98,8 @@ const ( job_uuid = %a` sqlDMLJobUpdateStatus = `update mysql.big_dml_jobs_table set - job_status = %a + job_status = %a, + status_set_time = %a where job_uuid = %a` @@ -127,12 +129,18 @@ const ( throttle_expire_time = NULL where job_uuid = %a` + + sqlDMLJobDeleteJob = `delete from mysql.big_dml_jobs_table where job_uuid = %a` ) const ( throttleCheckDuration = 250 * time.Millisecond ) +const ( + tableEntryGCTimeGap = 30 * time.Second // todo 改成更长的值,为了测试只设了30s +) + type JobController struct { tableName string tableMutex sync.Mutex // todo newborn22,检查是否都上锁了 @@ -169,7 +177,6 @@ func (jc *JobController) Open() error { jc.pool.Open(jc.env.Config().DB.AppConnector(), jc.env.Config().DB.DbaConnector(), jc.env.Config().DB.AppDebugConnector()) jc.workingTables = map[string]bool{} - jc.workingUUIDs = map[string]bool{} jc.jobChans = map[string]JobChanStruct{} jc.checkBeforeSchedule = make(chan struct{}) @@ -268,6 +275,7 @@ func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, subtask if postponeLaunch { jobStatus = postponeLaunchStatus } + statusSetTime := time.Now().Format(time.RFC3339) submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobSubmit, sqltypes.StringBindVariable(jobUUID), @@ -277,7 +285,8 @@ func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, subtask sqltypes.StringBindVariable(jobBatchTable), sqltypes.Int64BindVariable(timeGapInMs), sqltypes.Int64BindVariable(subtaskRows), - sqltypes.StringBindVariable(jobStatus)) + sqltypes.StringBindVariable(jobStatus), + sqltypes.StringBindVariable(statusSetTime)) if err != nil { return nil, err } @@ -310,6 +319,8 @@ func (jc *JobController) ShowJobs() (*sqltypes.Result, error) { return jc.execQuery(ctx, "mysql", showJobsSQL) } +// 和cancel的区别:1.pasue不会删除元数据 2.cancel状态的job在经过一段时间后会被后台协程回收 +// 和cancel的相同点:都停止了runner协程 func (jc *JobController) PauseJob(uuid string) (*sqltypes.Result, error) { var emptyResult = &sqltypes.Result{} ctx := context.Background() @@ -323,13 +334,10 @@ func (jc *JobController) PauseJob(uuid string) (*sqltypes.Result, error) { return emptyResult, nil } - // 往通道发送cmd进行暂停 - jc.jobChansMutex.Lock() - defer jc.jobChansMutex.Unlock() - pauseChan := jc.jobChans[uuid].pauseAndResume - pauseChan <- "pause" - - qr, err := jc.updateJobStatus(ctx, uuid, pausedStatus) + // 将job在表中的状态改为paused,runner在运行时如果检测到状态不是running,就会退出。 + // pause虽然终止了runner协程,但是 + statusSetTime := time.Now().Format(time.RFC3339) + qr, err := jc.updateJobStatus(ctx, uuid, pausedStatus, statusSetTime) if err != nil { return emptyResult, err } @@ -347,18 +355,30 @@ func (jc *JobController) ResumeJob(uuid string) (*sqltypes.Result, error) { emptyResult.Info = " The job status is not paused and don't need resume" return emptyResult, nil } - // 往通道发送cmd以继续 - jc.jobChansMutex.Lock() - defer jc.jobChansMutex.Unlock() - pauseChan := jc.jobChans[uuid].pauseAndResume - pauseChan <- "resume" - qr, err := jc.updateJobStatus(ctx, uuid, runningStatus) + // 准备拉起runner协程的参数 + query, err := sqlparser.ParseAndBind(sqlDMLJobGetInfo, + sqltypes.StringBindVariable(uuid)) if err != nil { return emptyResult, err } + rst, err := jc.execQuery(ctx, "", query) + if err != nil { + return emptyResult, err + } + if len(rst.Named().Rows) != 1 { + return emptyResult, errors.New("the len of qr of querying job info by uuid is not 1") + } + row := rst.Named().Rows[0] + tableSchema := row["related_schema"].ToString() + table := row["related_table"].ToString() + jobBatchTable := row["job_batch_table"].ToString() + timegap, _ := row["timegap_in_ms"].ToInt64() - return qr, nil + // 拉起runner协程,协程内会将状态改为running + go jc.dmlJobBatchRunner(uuid, table, tableSchema, jobBatchTable, timegap) + emptyResult.RowsAffected = 1 + return emptyResult, nil } func (jc *JobController) LaunchJob(uuid string) (*sqltypes.Result, error) { @@ -372,7 +392,8 @@ func (jc *JobController) LaunchJob(uuid string) (*sqltypes.Result, error) { emptyResult.Info = " The job status is not postpone-launch and don't need launch" return emptyResult, nil } - return jc.updateJobStatus(ctx, uuid, queuedStatus) + statusSetTime := time.Now().Format(time.RFC3339) + return jc.updateJobStatus(ctx, uuid, queuedStatus, statusSetTime) } func (jc *JobController) CancelJob(uuid string) (*sqltypes.Result, error) { @@ -386,31 +407,16 @@ func (jc *JobController) CancelJob(uuid string) (*sqltypes.Result, error) { emptyResult.Info = fmt.Sprintf(" The job status is %s and can't canceld", status) return emptyResult, nil } - - qr, err := jc.updateJobStatus(ctx, uuid, canceledStatus) + statusSetTime := time.Now().Format(time.RFC3339) + qr, err := jc.updateJobStatus(ctx, uuid, canceledStatus, statusSetTime) if err != nil { return emptyResult, nil } - // 对于paused和running这两个状态的job,它们在内存中都有一个jobRunner协程正在运行,需要将协程关闭 - if status == runningStatus || status == pausedStatus { - jc.jobChansMutex.Lock() - cancelChan := jc.jobChans[uuid].cancel - jc.jobChansMutex.Unlock() - - // 由于chan的容量为1,会阻塞在这里,直到jobRunner中接收了此信号 - cancelChan <- "cancel" - } - tableName, _ := jc.GetStrJobInfo(ctx, uuid, "related_table") - jc.jobChansMutex.Lock() - jc.workingUUIDsMutex.Lock() - jc.workingTablesMutex.Lock() + // 相比于pause,cancel需要删除内存中的元数据 jc.deleteDMLJobRunningMeta(uuid, tableName) - jc.jobChansMutex.Unlock() - jc.workingUUIDsMutex.Unlock() - jc.workingTablesMutex.Unlock() return qr, nil } @@ -522,23 +528,15 @@ func (jc *JobController) CompleteJob(ctx context.Context, uuid, table string) (* defer jc.workingTablesMutex.Unlock() delete(jc.workingTables, table) - jc.workingUUIDsMutex.Lock() - defer jc.workingUUIDsMutex.Unlock() - delete(jc.workingUUIDs, uuid) - - jc.jobChansMutex.Lock() - defer jc.jobChansMutex.Unlock() - close(jc.jobChans[uuid].pauseAndResume) - close(jc.jobChans[uuid].cancel) - delete(jc.jobChans, uuid) - - return jc.updateJobStatus(ctx, uuid, completedStatus) + statusSetTime := time.Now().Format(time.RFC3339) + return jc.updateJobStatus(ctx, uuid, completedStatus, statusSetTime) } // todo, 记录错误时的错误怎么处理 func (jc *JobController) FailJob(ctx context.Context, uuid, message, tableName string) { _ = jc.updateJobMessage(ctx, uuid, message) - _, _ = jc.updateJobStatus(ctx, uuid, failedStatus) + statusSetTime := time.Now().Format(time.RFC3339) + _, _ = jc.updateJobStatus(ctx, uuid, failedStatus, statusSetTime) jc.workingTablesMutex.Lock() defer jc.workingTablesMutex.Unlock() @@ -564,7 +562,6 @@ func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { // todo,优化这里的拿锁结构 jc.workingTablesMutex.Lock() jc.tableMutex.Lock() - jc.workingUUIDsMutex.Lock() qr, _ := jc.execQuery(ctx, "", sqlDMLJobGetAllJobs) if qr == nil { @@ -577,21 +574,15 @@ func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { uuid := row["job_uuid"].ToString() jobBatchTable := row["job_batch_table"].ToString() timegap, _ := row["timegap_in_ms"].ToInt64() - //subtaskSQL := row["subtask_sql"].ToString() - //dmlType := row["dml_type"].ToString() - //countTotalRows, _ := row["count_total_rows"].ToInt64() - //subtaskRows, _ := row["subtask_rows"].ToInt64() if jc.checkDmlJobRunnable(status, table) { // todo 这里之后改成休眠的方式后要删掉, 由于外面拿锁,必须在这里就加上,不然后面的循环可能:已经启动go runner的但是还未加入到working table,导致多个表的同时启动 jc.initDMLJobRunningMeta(uuid, table) - // go jc.dmlJobRunner(uuid, table, schema, subtaskSQL, dmlType, timegap, countTotalRows, 0, subtaskRows, true) go jc.dmlJobBatchRunner(uuid, table, schema, jobBatchTable, timegap) } } jc.workingTablesMutex.Unlock() jc.tableMutex.Unlock() - jc.workingUUIDsMutex.Unlock() time.Sleep(3 * time.Second) } @@ -609,98 +600,6 @@ func (jc *JobController) checkDmlJobRunnable(status, table string) bool { return true } -func (jc *JobController) dmlJobRunner(uuid, table, relatedSchema, subtaskSQL, dmlType string, timeGap, countTotalRows, offset, subtaskRows int64, updateStatusRunning bool) { - - jc.jobChansMutex.Lock() - jobChan := jc.jobChans[uuid] - jc.jobChansMutex.Unlock() - - pauseAndResumeChan := jobChan.pauseAndResume - cancelChan := jobChan.cancel - - // timeGap 单位ms,duration输入ns,应该乘上1000000 - timer := time.NewTicker(time.Duration(timeGap * 1e6)) - defer timer.Stop() - - var err error - ctx := context.Background() - - if updateStatusRunning { - _, err = jc.updateJobStatus(ctx, uuid, runningStatus) - if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) - } - } - - // 在一个无限循环中等待定时器触发 - for { - // 第一层select用于接收是否有用户的cancel命令,以随时结束协程 - select { - case cmd := <-cancelChan: - if cmd == "cancel" { - _ = jc.updateJobMessage(ctx, uuid, fmt.Sprintf("Canceld by user at %s", time.Now().Format("2006-01-02 15:04:05"))) - return - } - default: - select { - case <-timer.C: - // 定时器触发时执行的函数 - - // 先请求throttle,若被throttle阻塞,则等待下一次timer事件 - if !jc.requestThrottle(uuid) { - continue - } - - // 获得sql,分update和delete两种情况 - var query string - if dmlType == "update" { - query, err = sqlparser.ParseAndBind(subtaskSQL, sqltypes.Int64BindVariable(offset)) - if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) - } - } - if dmlType == "delete" { - query = subtaskSQL - } - - affectedRows, err := jc.execSubtaskAndRecord(ctx, relatedSchema, query, uuid) - - if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) - return - } - - // complete,分update和delete两种情况 - if (dmlType == "delete" && affectedRows == 0) || (dmlType == "update" && offset >= countTotalRows) { - _, err = jc.CompleteJob(ctx, uuid, table) - if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) - } - return - } - - if dmlType == "update" { - //offset += int64(qr.RowsAffected) - offset += subtaskRows - } - - // 控制暂停 - case command := <-pauseAndResumeChan: - switch command { - case "pause": - for { - cmd := <-pauseAndResumeChan - if cmd == "resume" { // actually, cmd will always be "resume", the code logic will guarantee that - break - } - } - } - } - } - } - -} - const ( getDealingBatchIDSQL = `select dealing_batch_id from mysql.big_dml_jobs_table where job_uuid = %a` updateDealingBatchIDSQL = `update mysql.big_dml_jobs_table set dealing_batch_id = %a where job_uuid = %a` @@ -846,18 +745,21 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTabl return } - if status != runningStatus { - _, err = jc.updateJobStatus(ctx, uuid, runningStatus) - if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) - return - } + // 如果状态为queued,意味着这个job刚刚开始运行,那么将当前处理的batch id设为1。 + // 否则,意味着这个job之前已经启动过,无需再初始化当前处理的batch id,而是直接取表中这个字段的值并接着运行。 + if status == queuedStatus { err = jc.updateDealingBatchID(ctx, uuid, 1) if err != nil { jc.FailJob(ctx, uuid, err.Error(), table) return } } + statusSetTime := time.Now().Format(time.RFC3339) + _, err = jc.updateJobStatus(ctx, uuid, runningStatus, statusSetTime) + if err != nil { + jc.FailJob(ctx, uuid, err.Error(), table) + return + } currentBatchID, err := jc.getDealingBatchID(ctx, uuid) if err != nil { jc.FailJob(ctx, uuid, err.Error(), table) @@ -900,6 +802,7 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTabl return } if currentBatchID > maxBatchID { + // todo,将completeJob移动到execBatchAndRecord中,确保原子性 _, err = jc.CompleteJob(ctx, uuid, table) if err != nil { jc.FailJob(ctx, uuid, err.Error(), table) @@ -909,42 +812,18 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTabl } } -// 注意在外面拿锁 +// 注意在外面拿锁, todo,换成在里面拿锁? func (jc *JobController) initDMLJobRunningMeta(uuid, table string) { - // 容量为1:如果job crash前为pause,需要先往通道中写入"pause",然后再启动jobRunner。如果不为1则会阻塞 - jobChan := JobChanStruct{pauseAndResume: make(chan string, 1), cancel: make(chan string)} - //jc.jobChansMutex.Lock() - jc.jobChans[uuid] = jobChan - //jc.jobChansMutex.Unlock() - //jc.workingTablesMutex.Lock() jc.workingTables[table] = true //jc.workingTablesMutex.Unlock() - //jc.workingUUIDsMutex.Lock() - jc.workingUUIDs[uuid] = true - //jc.workingUUIDsMutex.Unlock() - } -// 注意在外面拿锁 func (jc *JobController) deleteDMLJobRunningMeta(uuid, table string) { - // 容量为1:如果job crash前为pause,需要先往通道中写入"pause",然后再启动jobRunner。如果不为1则会阻塞 - //jc.jobChansMutex.Lock() - jobChan := jc.jobChans[uuid] - close(jobChan.pauseAndResume) - close(jobChan.cancel) - delete(jc.jobChans, uuid) - //jc.jobChansMutex.Unlock() - - //jc.workingTablesMutex.Lock() + jc.workingTablesMutex.Lock() + defer jc.workingTablesMutex.Unlock() delete(jc.workingTables, table) - //jc.workingTablesMutex.Unlock() - - //jc.workingUUIDsMutex.Lock() - delete(jc.workingUUIDs, uuid) - //jc.workingUUIDsMutex.Unlock() - } // todo sql类型的判断换成别的方式 @@ -1168,12 +1047,13 @@ func (jc *JobController) updateJobAffectedRows(ctx context.Context, uuid string, return err } -func (jc *JobController) updateJobStatus(ctx context.Context, uuid, status string) (*sqltypes.Result, error) { +func (jc *JobController) updateJobStatus(ctx context.Context, uuid, status, statusSetTime string) (*sqltypes.Result, error) { jc.tableMutex.Lock() defer jc.tableMutex.Unlock() submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobUpdateStatus, sqltypes.StringBindVariable(status), + sqltypes.StringBindVariable(statusSetTime), sqltypes.StringBindVariable(uuid)) if err != nil { return &sqltypes.Result{}, err @@ -1308,43 +1188,35 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { ctx := context.Background() // 用于crash后,重启时,先扫一遍running和paused的 + // todo,能不能用代码手段确保下面的逻辑只运行一次 qr, _ := jc.execQuery(ctx, "", sqlDMLJobGetAllJobs) if qr != nil { jc.workingTablesMutex.Lock() - jc.tableMutex.Lock() - jc.workingUUIDsMutex.Lock() + jc.tableMutex.Lock() // todo,删掉? for _, row := range qr.Named().Rows { status := row["job_status"].ToString() tableSchema := row["related_schema"].ToString() table := row["related_table"].ToString() + jobBatchTable := row["job_batch_table"].ToString() uuid := row["job_uuid"].ToString() timegap, _ := row["timegap_in_ms"].ToInt64() - subtaskSQL := row["subtask_sql"].ToString() - dmlType := row["dml_type"].ToString() - countTotalRows, _ := row["count_total_rows"].ToInt64() - AffectedRows, _ := row["affected_rows"].ToInt64() - subtaskRows, _ := row["subtask_rows"].ToInt64() if status == runningStatus { jc.initDMLJobRunningMeta(uuid, table) - go jc.dmlJobRunner(uuid, table, tableSchema, subtaskSQL, dmlType, timegap, countTotalRows, AffectedRows, subtaskRows, false) + go jc.dmlJobBatchRunner(uuid, table, tableSchema, jobBatchTable, timegap) } + + // 对于暂停的,不启动协程,只需要恢复内存元数据 if status == pausedStatus { jc.initDMLJobRunningMeta(uuid, table) - // 触发暂停 - jc.jobChansMutex.Lock() - pauseChan := jc.jobChans[uuid].pauseAndResume - jc.jobChansMutex.Unlock() - pauseChan <- "pause" - go jc.dmlJobRunner(uuid, table, tableSchema, subtaskSQL, dmlType, timegap, countTotalRows, AffectedRows, subtaskRows, false) } + } jc.workingTablesMutex.Unlock() jc.tableMutex.Unlock() - jc.workingUUIDsMutex.Unlock() } fmt.Printf("check of running and paused done \n") @@ -1355,7 +1227,38 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { // todo, 增加对长时间未增加 rows的处理 // todo,对于cancel和failed 垃圾条目的删除 - time.Sleep(healthCheckTimeGap) + jc.tableMutex.Lock() + qr, _ := jc.execQuery(ctx, "", sqlDMLJobGetAllJobs) + if qr != nil { + for _, row := range qr.Named().Rows { + status := row["job_status"].ToString() + statusSetTime := row["status_set_time"].ToString() + uuid := row["job_uuid"].ToString() + jobBatchTable := row["job_batch_table"].ToString() + tableSchema := row["related_schema"].ToString() + + statusSetTimeObj, err := time.Parse(time.RFC3339, statusSetTime) + if err != nil { + continue + } + + if status == canceledStatus || status == failedStatus || status == completedStatus { + if time.Now().After(statusSetTimeObj.Add(tableEntryGCTimeGap)) { + deleteJobSQL, err := sqlparser.ParseAndBind(sqlDMLJobDeleteJob, + sqltypes.StringBindVariable(uuid)) + if err != nil { + continue + } + _, _ = jc.execQuery(ctx, "", deleteJobSQL) + + _, _ = jc.execQuery(ctx, tableSchema, fmt.Sprintf("drop table %s", jobBatchTable)) + } + } + } + } + + jc.tableMutex.Unlock() + time.Sleep(healthCheckTimeGap * time.Millisecond) } } From 060e57fe3e71ef19db235554a09fb91107482fcb Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Wed, 20 Dec 2023 10:47:25 +0800 Subject: [PATCH 09/54] feat: enrich batch process display Signed-off-by: newborn22 <953950914@qq.com> --- .../schema/job/dml_batch_sql_table.sql | 24 --------- go/vt/vttablet/jobcontroller/controller.go | 52 ++++++++++++++----- 2 files changed, 39 insertions(+), 37 deletions(-) delete mode 100644 go/vt/sidecardb/schema/job/dml_batch_sql_table.sql diff --git a/go/vt/sidecardb/schema/job/dml_batch_sql_table.sql b/go/vt/sidecardb/schema/job/dml_batch_sql_table.sql deleted file mode 100644 index b5d5e05909..0000000000 --- a/go/vt/sidecardb/schema/job/dml_batch_sql_table.sql +++ /dev/null @@ -1,24 +0,0 @@ -/* -Copyright 2023 The Vitess Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -CREATE TABLE IF NOT EXISTS mysql.dml_batch_sql_table -( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `job_uuid` varchar(64) NOT NULL UNIQUE, - `batch_id` bigint unsigned NOT NULL, - `batch_sql` varchar(256) NOT NULL, - PRIMARY KEY (`id`) - ) ENGINE = InnoDB diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 4753378254..3052229570 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -202,11 +202,6 @@ func NewJobController(tableName string, tabletTypeFunc func() topodatapb.TabletT IdleTimeoutSeconds: env.Config().OltpReadPool.IdleTimeoutSeconds, }), lagThrottler: lagThrottler} - - // 检查字段 - - // 将实例某些字段持久化写入表,能够crash后恢复 - // 将实例放入内存中某个地方 } // todo newborn22 , 能否改写得更有通用性? 这样改写是否好? @@ -256,7 +251,6 @@ func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, subtask subtaskRows = int64(defaultSubtaskRows) } - // todo,修改后的代码 selectSQL, countSQLTemplate, tableName, err := jc.genSelectBatchKeySQL(sql, tableSchema) if err != nil { return nil, err @@ -265,7 +259,6 @@ func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, subtask if err != nil { return &sqltypes.Result{}, err } - // todo,处理返回值 jobBatchTable, err := jc.genBatchTable(jobUUID, selectSQL, countSQLTemplate, tableSchema, sql, pkNames, subtaskRows) if err != nil { return &sqltypes.Result{}, err @@ -675,7 +668,7 @@ func (jc *JobController) getMaxBatchID(ctx context.Context, batchTableName, tabl return qr.Named().Rows[0].ToFloat64("max_batch_id") } -func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, batchSQL, batchCountSQL, uuid string, threshold int64, batchID float64) (nextBatchID float64, err error) { +func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, batchSQL, batchCountSQL, uuid, batchTable string, threshold int64, batchID float64) (nextBatchID float64, err error) { defer jc.env.LogError() var setting pools.Setting @@ -711,19 +704,51 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ba } // 3.执行batch sql - _, err = conn.Exec(ctx, batchSQL, math.MaxInt32, true) + qr, err = conn.Exec(ctx, batchSQL, math.MaxInt32, true) + if err != nil { + return 0, err + } + + // 4.记录batch sql已经完成,将行数增加到affected rows中 + // 4.1在batch table中记录 + updateBatchStatus := fmt.Sprintf("update %s set batch_status = %%a where batch_id = %%a", batchTable) + updateBatchStatusDoneSQL, err := sqlparser.ParseAndBind(updateBatchStatus, + sqltypes.StringBindVariable("Done"), + sqltypes.Float64BindVariable(batchID)) + if err != nil { + return 0, err + } + _, err = conn.Exec(ctx, updateBatchStatusDoneSQL, math.MaxInt32, true) if err != nil { return 0, err } - // 4.更新正在处理的batch ID + // 4.2在job表中记录 + updateAffectedRowsSQL, err := sqlparser.ParseAndBind(sqlDMLJobUpdateAffectedRows, + sqltypes.Int64BindVariable(int64(qr.RowsAffected)), + sqltypes.StringBindVariable(uuid)) + if err != nil { + return 0, err + } + jc.tableMutex.Lock() + defer jc.tableMutex.Unlock() + _, err = conn.Exec(ctx, updateAffectedRowsSQL, math.MaxInt32, true) + if err != nil { + return 0, err + } + + // 5.更新正在处理的batch ID nextBatchID = batchID + 1 // todo,考虑生成新batch的情况,如何正确地获得下一个batch ID? - err = jc.updateDealingBatchID(ctx, uuid, nextBatchID) + submitQuery, err := sqlparser.ParseAndBind(updateDealingBatchIDSQL, + sqltypes.Float64BindVariable(nextBatchID), + sqltypes.StringBindVariable(uuid)) + + _, err = conn.Exec(ctx, submitQuery, math.MaxInt32, true) if err != nil { return 0, err } - // 5.提交事务 + // 6.提交事务 _, err = conn.Exec(ctx, "commit", math.MaxInt32, true) if err != nil { return 0, err @@ -796,7 +821,7 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTabl return } - currentBatchID, err = jc.execBatchAndRecord(ctx, relatedSchema, batchSQL, batchCountSQL, uuid, defaultThreshold, currentBatchID) + currentBatchID, err = jc.execBatchAndRecord(ctx, relatedSchema, batchSQL, batchCountSQL, uuid, batchTable, defaultThreshold, currentBatchID) if err != nil { jc.FailJob(ctx, uuid, err.Error(), table) return @@ -1354,6 +1379,7 @@ func (jc *JobController) genBatchTable(jobUUID, selectSQL, countSQLTemplate, tab batch_sql varchar(1024) NOT NULL, batch_count_sql varchar(1024) NOT NULL, batch_size bigint unsigned NOT NULL, + batch_status varchar(1024) NOT NULL DEFAULT 'Pending', PRIMARY KEY (id) ) ENGINE = InnoDB`, batchTableName) From 9d6e3df320fdf32af3c856d1fc6af41e021ab8c4 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Wed, 20 Dec 2023 16:48:03 +0800 Subject: [PATCH 10/54] feat: support single pk with mysql types which can convert into int, float and string Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/vttablet/jobcontroller/controller.go | 269 ++++++++++----------- 1 file changed, 123 insertions(+), 146 deletions(-) diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 3052229570..3ac65f38df 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -157,7 +157,7 @@ type JobController struct { workingUUIDs map[string]bool workingUUIDsMutex sync.Mutex - jobChans map[string]JobChanStruct + jobChans map[string]JobChanStruct // todo 删除 jobChansMutex sync.Mutex checkBeforeSchedule chan struct{} } @@ -167,6 +167,11 @@ type JobChanStruct struct { cancel chan string } +type PKInfo struct { + pkName string + pkType querypb.Type +} + // todo newborn22, 初始化函数 // 要加锁? func (jc *JobController) Open() error { @@ -255,11 +260,11 @@ func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, subtask if err != nil { return nil, err } - pkNames, err := jc.getTablePkName(ctx, tableSchema, tableName) + pkInfos, err := jc.getTablePkInfo(ctx, tableSchema, tableName) if err != nil { return &sqltypes.Result{}, err } - jobBatchTable, err := jc.genBatchTable(jobUUID, selectSQL, countSQLTemplate, tableSchema, sql, pkNames, subtaskRows) + jobBatchTable, err := jc.genBatchTable(jobUUID, selectSQL, countSQLTemplate, tableSchema, sql, pkInfos, subtaskRows) if err != nil { return &sqltypes.Result{}, err } @@ -851,134 +856,6 @@ func (jc *JobController) deleteDMLJobRunningMeta(uuid, table string) { delete(jc.workingTables, table) } -// todo sql类型的判断换成别的方式 -// todo 加行数字段 -func (jc *JobController) genSubtaskDMLSQL(sql, tableSchema string, subtaskRows int64) (tableName, dmlType string, subTaskSQL, countTotalRowsSQL string, err error) { - - stmt, _, err := sqlparser.Parse2(sql) - if err != nil { - return "", "", "", "", err - } - switch s := stmt.(type) { - case *sqlparser.Delete: - if s.Limit != nil { - return "", "", "", "", errors.New("the sql already has a LIMIT condition, can't be transferred to a DML job") - } - s.Limit = &sqlparser.Limit{Rowcount: sqlparser.NewIntLiteral(strconv.FormatInt(subtaskRows, 10))} - // todo,目前只支持单表 - if len(s.TableExprs) > 1 { - return "", "", "", "", errors.New("the delete sql deals multi tables can't be transferred to a DML job") - } - tableName := sqlparser.String(s.TableExprs) - whereStr := sqlparser.String(s.Where) - if s.Where == nil { - return "", "", "", "", errors.New("the sql without WHERE can't be transferred to a DML job") - } - countTotalRowsSQL = fmt.Sprintf("select count(*) from %s %s", tableName, whereStr) - - return tableName, "delete", sqlparser.String(s), countTotalRowsSQL, nil - case *sqlparser.Update: - // todo,最set中包含有pk的进行过滤 - // 如何获得一个表的pk/ pks? - // update t set c1=v1,c2=v2... where P - // update t temp1 join (select PK order by PK limit rows offset off t2) on t1.Pk=t2.Pk set temp1.c1=v1, temp1.c2=v2.. where P - // 需要获得表名、set后的投影,where谓词的字符串,然后用字符串拼接的方式完成 - - // select statement -> derivedTable -> joinTable - // todo,目前只支持单表 - if len(s.TableExprs) > 1 { - return "", "", "", "", errors.New("the update sql deals multi tables can't be transferred to a DML job") - } - tableName := sqlparser.String(s.TableExprs) - ctx := context.Background() - pkNames, err := jc.getTablePkName(ctx, tableSchema, tableName) - if err != nil { - return "", "", "", "", err - } - - //if len(pkNames) > 1 { - // return "", "", "", "", errors.New("the update sql on table with multi Pks can't be transferred to a DML job") - //} - selectStr := "select " - firstPK := true - for _, pkName := range pkNames { - if firstPK { - selectStr += pkName - firstPK = false - } else { - selectStr += " ," - selectStr += pkName - } - } - selectStr += fmt.Sprintf(" from %s ", tableName) - - whereStr := sqlparser.String(s.Where) - if s.Where == nil { - return "", "", "", "", errors.New("the sql without WHERE can't be transferred to a DML job") - } - selectStr += whereStr - - firstPK = true - selectStr += " order by " - for _, pkName := range pkNames { - if firstPK { - selectStr += pkName - firstPK = false - } else { - selectStr += " ," - selectStr += pkName - } - } - - selectStr += fmt.Sprintf(" limit %d offset %%a", subtaskRows) - - updateExprStr := sqlparser.String(s.Exprs) - - //colNames, err := jc.getTableColNames(ctx, tableSchema, tableName) - //if err != nil { - // return "", "", err - //} - // whereStr = rewriteWhereStr(whereStr, "dml_job_temp_table222", colNames) - - subtaskSQL := "" - if s.With != nil { - subtaskSQL = sqlparser.String(s.With) + " " - } - - joinOnConditionStr := "" - firstPK = true - for _, pkName := range pkNames { - if firstPK { - joinOnConditionStr += fmt.Sprintf("dml_job_temp_table111.%s = dml_job_temp_table222.%s ", pkName, pkName) - firstPK = false - } else { - joinOnConditionStr += fmt.Sprintf("AND dml_job_temp_table111.%s = dml_job_temp_table222.%s", pkName, pkName) - } - } - - subtaskSQL += fmt.Sprintf("UPDATE %s dml_job_temp_table111 JOIN (%s) dml_job_temp_table222 ON %s SET %s", - tableName, selectStr, joinOnConditionStr, updateExprStr) - - //selectStmt, _, err := sqlparser.Parse2(selectStr) - //if err != nil { - // return "", err - //} - //joinLeftExpr := sqlparser.AliasedTableExpr{Expr: sqlparser.TableName{Name: sqlparser.IdentifierCS{}}} - //sqlparser.JoinTableExpr{Join: sqlparser.NormalJoinType,LeftExpr: } - - // 将 "=" 替换成 "!=" - rewriteExprStr := strings.Replace(updateExprStr, "=", "!=", -1) - // 将 "," 替换成 "AND" - rewriteExprStr = strings.Replace(rewriteExprStr, ",", "AND", -1) - - countTotalRowsSQL = fmt.Sprintf("select count(*) from %s %s", tableName, whereStr) + " AND " + rewriteExprStr - - return tableName, "update", subtaskSQL, countTotalRowsSQL, nil - - } - return "", "", "", "", errors.New("the sql type can't be transferred to a DML job") -} - // execQuery execute sql by using connect poll,so if targetString is not empty, it will add prefix `use database` first then execute sql. func (jc *JobController) execQuery(ctx context.Context, targetString, query string) (result *sqltypes.Result, err error) { defer jc.env.LogError() @@ -1145,7 +1022,8 @@ func buildVarCharRow(values ...string) []sqltypes.Value { return row } -func (jc *JobController) getTablePkName(ctx context.Context, tableSchema, tableName string) ([]string, error) { +func (jc *JobController) getTablePkInfo(ctx context.Context, tableSchema, tableName string) ([]PKInfo, error) { + // 1. 先获取pks 的名字 submitQuery, err := sqlparser.ParseAndBind(sqlGetTablePk, sqltypes.StringBindVariable(tableSchema), sqltypes.StringBindVariable(tableName)) @@ -1160,7 +1038,32 @@ func (jc *JobController) getTablePkName(ctx context.Context, tableSchema, tableN for _, row := range qr.Named().Rows { pkNames = append(pkNames, row["COLUMN_NAME"].ToString()) } - return pkNames, nil + + // 2. 根据获得的pk列的名字,去原表中查一行数据,借助封装好的Value对象获得每个pk的类型 + pkCols := "" + firstPK := true + for _, pkName := range pkNames { + if !firstPK { + pkCols += "," + } + pkCols += pkName + firstPK = false + } + selectPKCols := fmt.Sprintf("select %s from %s.%s limit 1", pkCols, tableSchema, tableName) + qr, err = jc.execQuery(ctx, "", selectPKCols) + if err != nil { + return nil, err + } + if len(qr.Named().Rows) != 1 { + return nil, errors.New("the len of qr of select pk cols should be 1") + } + // 获得每一列的type,并生成pkInfo切片 + var pkInfos []PKInfo + for _, pkName := range pkNames { + pkInfos = append(pkInfos, PKInfo{pkName: pkName, pkType: qr.Named().Rows[0][pkName].Type()}) + } + + return pkInfos, nil } func (jc *JobController) getTableColNames(ctx context.Context, tableSchema, tableName string) ([]string, error) { @@ -1324,17 +1227,17 @@ func (jc *JobController) genSelectBatchKeySQL(sql, tableSchema string) (selectSQ // 选择出PK ctx := context.Background() - pkNames, err := jc.getTablePkName(ctx, tableSchema, tableName) + pkInfos, err := jc.getTablePkInfo(ctx, tableSchema, tableName) if err != nil { return "", "", "", err } PKPart := "" firstPK := true - for _, pkName := range pkNames { + for _, pkInfo := range pkInfos { if !firstPK { PKPart += "," } - PKPart += pkName + PKPart += pkInfo.pkName firstPK = false } @@ -1342,10 +1245,32 @@ func (jc *JobController) genSelectBatchKeySQL(sql, tableSchema string) (selectSQ PKPart, tableSchema, tableName, wherePart, PKPart) // todo,支持多PK多类型 - countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between %%d AND %%d order by %s", - tableSchema, tableName, wherePart, PKPart, PKPart) + countSQLTemplate, err = genCountSQLTemplate(tableSchema, tableName, wherePart, PKPart, pkInfos) + return selectSQL, countSQLTemplate, tableName, err +} - return selectSQL, countSQLTemplate, tableName, nil +func genCountSQLTemplate(tableSchema, tableName, wherePart, PKPart string, pkInfos []PKInfo) (countSQLTemplate string, err error) { + // todo 当前是单pk的情况,后续需要考虑多pk + switch pkInfos[0].pkType { + case querypb.Type_INT8, querypb.Type_INT16, querypb.Type_INT24, querypb.Type_INT32, querypb.Type_INT64: + countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between %%d AND %%d order by %s", + tableSchema, tableName, wherePart, PKPart, PKPart) + case querypb.Type_UINT8, querypb.Type_UINT16, querypb.Type_UINT24, querypb.Type_UINT32, querypb.Type_UINT64: + countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between %%d AND %%d order by %s", + tableSchema, tableName, wherePart, PKPart, PKPart) + case querypb.Type_FLOAT32, querypb.Type_FLOAT64: + countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between %%f AND %%f order by %s", + tableSchema, tableName, wherePart, PKPart, PKPart) + // todo decimal类型能否转换成string待定 + case querypb.Type_TIMESTAMP, querypb.Type_DATE, querypb.Type_TIME, querypb.Type_DATETIME, querypb.Type_YEAR, + querypb.Type_DECIMAL, querypb.Type_TEXT, querypb.Type_VARCHAR, querypb.Type_CHAR, querypb.Type_BLOB: + countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between '%%s' AND '%%s' order by %s", + tableSchema, tableName, wherePart, PKPart, PKPart) + default: + return "", fmt.Errorf("Unsupported type: %v", pkInfos[0].pkType) + + } + return countSQLTemplate, nil } const ( @@ -1359,7 +1284,7 @@ const ( // 创建表,todo 表gc // todo,discussion,建表的过程中需要放在一个事务内,防止崩了,由于一个事务容纳的数据有限,oom,因此需要多个事务? -func (jc *JobController) genBatchTable(jobUUID, selectSQL, countSQLTemplate, tableSchema, sql string, pkNames []string, batchSize int64) (string, error) { +func (jc *JobController) genBatchTable(jobUUID, selectSQL, countSQLTemplate, tableSchema, sql string, pkInfos []PKInfo, batchSize int64) (string, error) { ctx := context.Background() qr, err := jc.execQuery(ctx, "", selectSQL) @@ -1392,8 +1317,8 @@ func (jc *JobController) genBatchTable(jobUUID, selectSQL, countSQLTemplate, tab // todo 处理不同类型的PK // todo 创建一个新的value结构,表示PK的名字和类型 currentBatchSize := int64(0) - currentBatchStart := int64(0) - currentBatchEnd := int64(0) + var currentBatchStart interface{} + var currentBatchEnd interface{} currentBatchID := float64(1) insertBatchSQLWithTableName := fmt.Sprintf(insertBatchSQL, batchTableName) @@ -1401,9 +1326,13 @@ func (jc *JobController) genBatchTable(jobUUID, selectSQL, countSQLTemplate, tab var pkName string // todo 对结果集为0的情况进行特判 for _, row := range qr.Named().Rows { - for _, pkName = range pkNames { + for _, pkInfo := range pkInfos { + pkName = pkInfo.pkName // todo,对于每一列PK的值类型进行判断 - keyVal, _ := row[pkName].ToInt64() + keyVal, err := ProcessValue(row[pkName]) + if err != nil { + return "", err + } if currentBatchSize == 0 { currentBatchStart = keyVal @@ -1413,7 +1342,11 @@ func (jc *JobController) genBatchTable(jobUUID, selectSQL, countSQLTemplate, tab if currentBatchSize == batchSize { // between是一个闭区间,batch job的sql也是闭区间 // todo 处理整数之外的类型 - batchSQL := sql + fmt.Sprintf(" AND %s between %d AND %d", pkName, currentBatchStart, currentBatchEnd) + batchSQL, err := jc.genBatchSQL(sql, pkName, currentBatchStart, currentBatchEnd) + if err != nil { + return "", err + } + // todo 处理整数之外的类型 countSQL := fmt.Sprintf(countSQLTemplate, currentBatchStart, currentBatchEnd) currentBatchSize = 0 @@ -1436,7 +1369,10 @@ func (jc *JobController) genBatchTable(jobUUID, selectSQL, countSQLTemplate, tab } //最后一个batch if currentBatchSize != 0 { - batchSQL := sql + fmt.Sprintf(" AND %s between %d AND %d", pkName, currentBatchStart, currentBatchEnd) + batchSQL, err := jc.genBatchSQL(sql, pkName, currentBatchStart, currentBatchEnd) + if err != nil { + return "", err + } countSQL := fmt.Sprintf(countSQLTemplate, currentBatchStart, currentBatchEnd) insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQLWithTableName, sqltypes.Float64BindVariable(currentBatchID), @@ -1453,3 +1389,44 @@ func (jc *JobController) genBatchTable(jobUUID, selectSQL, countSQLTemplate, tab } return batchTableName, nil } + +func ProcessValue(value sqltypes.Value) (interface{}, error) { + typ := value.Type() + + switch typ { + case querypb.Type_INT8, querypb.Type_INT16, querypb.Type_INT24, querypb.Type_INT32, querypb.Type_INT64: + return value.ToInt64() + case querypb.Type_UINT8, querypb.Type_UINT16, querypb.Type_UINT24, querypb.Type_UINT32, querypb.Type_UINT64: + return value.ToUint64() + case querypb.Type_FLOAT32, querypb.Type_FLOAT64: + return value.ToFloat64() + // todo decimal类型能否转换成string待定 + case querypb.Type_TIMESTAMP, querypb.Type_DATE, querypb.Type_TIME, querypb.Type_DATETIME, querypb.Type_YEAR, + querypb.Type_DECIMAL, querypb.Type_TEXT, querypb.Type_VARCHAR, querypb.Type_CHAR, querypb.Type_BLOB: + return value.ToString(), nil + default: + return nil, fmt.Errorf("Unsupported type: %v", typ) + } +} + +func (jc *JobController) genBatchSQL(sql, pkName string, currentBatchStart, currentBatchEnd interface{}) (batchSQL string, err error) { + if fmt.Sprintf("%T", currentBatchStart) != fmt.Sprintf("%T", currentBatchEnd) { + err = errors.New("the type of currentBatchStart and currentBatchEnd is different") + return "", err + } + + switch currentBatchEnd.(type) { + case int64: + batchSQL = sql + fmt.Sprintf(" AND %s between %d AND %d", pkName, currentBatchStart.(int64), currentBatchEnd.(int64)) + case uint64: + batchSQL = sql + fmt.Sprintf(" AND %s between %d AND %d", pkName, currentBatchStart.(uint64), currentBatchEnd.(uint64)) + case float64: + batchSQL = sql + fmt.Sprintf(" AND %s between %f AND %f", pkName, currentBatchStart.(float64), currentBatchEnd.(float64)) + case string: + batchSQL = sql + fmt.Sprintf(" AND %s between '%s' AND '%s'", pkName, currentBatchStart.(string), currentBatchEnd.(string)) + default: + err = errors.New("unsupported type of currentBatchEnd") + return "", err + } + return batchSQL, nil +} From 7c4b34b720268649525a34c87d7b39e9291fc7d7 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Thu, 21 Dec 2023 18:37:21 +0800 Subject: [PATCH 11/54] feat: support multi PK with various types Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/vttablet/jobcontroller/controller.go | 401 +++++++++++++++++---- 1 file changed, 322 insertions(+), 79 deletions(-) diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 3ac65f38df..bac732b7d3 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -256,7 +256,8 @@ func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, subtask subtaskRows = int64(defaultSubtaskRows) } - selectSQL, countSQLTemplate, tableName, err := jc.genSelectBatchKeySQL(sql, tableSchema) + // todo,优化,将下面genSelectBatchKeySQL getTablePkInfo genBatchTable放在一个函数中,减少参数传递,增加易读性 + selectSQL, countSQLTemplate, tableName, wherePart, pkPart, err := jc.genSelectBatchKeySQL(sql, tableSchema) if err != nil { return nil, err } @@ -264,7 +265,7 @@ func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, subtask if err != nil { return &sqltypes.Result{}, err } - jobBatchTable, err := jc.genBatchTable(jobUUID, selectSQL, countSQLTemplate, tableSchema, sql, pkInfos, subtaskRows) + jobBatchTable, err := jc.genBatchTable(jobUUID, selectSQL, countSQLTemplate, tableSchema, sql, tableName, wherePart, pkPart, pkInfos, subtaskRows) if err != nil { return &sqltypes.Result{}, err } @@ -1193,33 +1194,33 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { // 目前只支持 // 1.PK作为拆分列,支持多列PK todo 支持UK或其他列 // 2.目前只支持单表,且没有join -func (jc *JobController) genSelectBatchKeySQL(sql, tableSchema string) (selectSQL, countSQLTemplate, tableName string, err error) { +func (jc *JobController) genSelectBatchKeySQL(sql, tableSchema string) (selectSQL, countSQLTemplate, tableName, wherePart, pkPart string, err error) { // SELECT `id` FROM `test`.`t` WHERE (`v` < 6) ORDER BY IF(ISNULL(`id`),0,1),`id`, 由于是PK,因此不需要判断ISNULL stmt, _, err := sqlparser.Parse2(sql) if err != nil { - return "", "", "", err + return "", "", "", "", "", err } - wherePart := "" + wherePart = "" switch s := stmt.(type) { case *sqlparser.Delete: if len(s.TableExprs) != 1 { - return "", "", "", errors.New("the number of table is more than one") + return "", "", "", "", "", errors.New("the number of table is more than one") } tableExpr, ok := s.TableExprs[0].(*sqlparser.AliasedTableExpr) // 目前暂不支持join和多表 todo if !ok { - return "", "", "", errors.New("don't support join table now") + return "", "", "", "", "", errors.New("don't support join table now") } tableName = sqlparser.String(tableExpr) wherePart = sqlparser.String(s.Where) case *sqlparser.Update: if len(s.TableExprs) != 1 { - return "", "", "", errors.New("the number of table is more than one") + return "", "", "", "", "", errors.New("the number of table is more than one") } tableExpr, ok := s.TableExprs[0].(*sqlparser.AliasedTableExpr) // 目前暂不支持join和多表 todo if !ok { - return "", "", "", errors.New("don't support join table now") + return "", "", "", "", "", errors.New("don't support join table now") } tableName = sqlparser.String(tableExpr) wherePart = sqlparser.String(s.Where) @@ -1229,48 +1230,259 @@ func (jc *JobController) genSelectBatchKeySQL(sql, tableSchema string) (selectSQ ctx := context.Background() pkInfos, err := jc.getTablePkInfo(ctx, tableSchema, tableName) if err != nil { - return "", "", "", err + return "", "", "", "", "", err } - PKPart := "" + pkPart = "" firstPK := true for _, pkInfo := range pkInfos { if !firstPK { - PKPart += "," + pkPart += "," } - PKPart += pkInfo.pkName + pkPart += pkInfo.pkName firstPK = false } selectSQL = fmt.Sprintf("select %s from %s.%s %s order by %s", - PKPart, tableSchema, tableName, wherePart, PKPart) + pkPart, tableSchema, tableName, wherePart, pkPart) // todo,支持多PK多类型 - countSQLTemplate, err = genCountSQLTemplate(tableSchema, tableName, wherePart, PKPart, pkInfos) - return selectSQL, countSQLTemplate, tableName, err + countSQLTemplate, err = genCountSQLTemplate(tableSchema, tableName, wherePart, pkPart, pkInfos) + return selectSQL, countSQLTemplate, tableName, wherePart, pkPart, err } -func genCountSQLTemplate(tableSchema, tableName, wherePart, PKPart string, pkInfos []PKInfo) (countSQLTemplate string, err error) { +func genCountSQLTemplate(tableSchema, tableName, wherePart, pkPart string, pkInfos []PKInfo) (countSQLTemplate string, err error) { // todo 当前是单pk的情况,后续需要考虑多pk - switch pkInfos[0].pkType { + if len(pkInfos) == 0 { + return "", errors.New("the len of pkInfos is 0") + } + if len(pkInfos) == 1 { + switch pkInfos[0].pkType { + case querypb.Type_INT8, querypb.Type_INT16, querypb.Type_INT24, querypb.Type_INT32, querypb.Type_INT64: + countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between %%d AND %%d order by %s", + tableSchema, tableName, wherePart, pkPart, pkPart) + + case querypb.Type_UINT8, querypb.Type_UINT16, querypb.Type_UINT24, querypb.Type_UINT32, querypb.Type_UINT64: + countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between %%d AND %%d order by %s", + tableSchema, tableName, wherePart, pkPart, pkPart) + + case querypb.Type_FLOAT32, querypb.Type_FLOAT64: + countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between %%f AND %%f order by %s", + tableSchema, tableName, wherePart, pkPart, pkPart) + + // todo decimal类型能否转换成string待定 + case querypb.Type_TIMESTAMP, querypb.Type_DATE, querypb.Type_TIME, querypb.Type_DATETIME, querypb.Type_YEAR, + querypb.Type_DECIMAL, querypb.Type_TEXT, querypb.Type_VARCHAR, querypb.Type_CHAR, querypb.Type_BLOB: + countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between '%%s' AND '%%s' order by %s", + tableSchema, tableName, wherePart, pkPart, pkPart) + + default: + return "", fmt.Errorf("Unsupported type: %v", pkInfos[0].pkType) + } + } else { + // 1. 生成>=的部分 + // 遍历PKName,不同的pk类型要对应不同的占位符 + greatThanPart, err := genPKsGreaterThanTemplate(pkInfos) + if err != nil { + return "", err + } + + // 2.生成<=的部分 + lessThanPart, err := genPKsLessThanTemplate(pkInfos) + if err != nil { + return "", err + } + + // 3.将各部分拼接成最终的template + countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND ( (%s) AND (%s) )", + tableSchema, tableName, wherePart, greatThanPart, lessThanPart) + } + return countSQLTemplate, nil +} + +func genCountSQL(tableSchema, tableName, wherePart, pkPart string, currentBatchStart, currentBatchEnd []interface{}, pkInfos []PKInfo) (countSQLTemplate string, err error) { + // todo 当前是单pk的情况,后续需要考虑多pk + if len(pkInfos) == 0 { + return "", errors.New("the len of pkInfos is 0") + } + if len(pkInfos) == 1 { + switch pkInfos[0].pkType { + case querypb.Type_INT8, querypb.Type_INT16, querypb.Type_INT24, querypb.Type_INT32, querypb.Type_INT64: + countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between %d AND %d order by %s", + tableSchema, tableName, wherePart, pkPart, currentBatchStart[0], currentBatchEnd[0], pkPart) + + case querypb.Type_UINT8, querypb.Type_UINT16, querypb.Type_UINT24, querypb.Type_UINT32, querypb.Type_UINT64: + countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between %d AND %d order by %s", + tableSchema, tableName, wherePart, pkPart, currentBatchStart[0], currentBatchEnd[0], pkPart) + + case querypb.Type_FLOAT32, querypb.Type_FLOAT64: + countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between %f AND %f order by %s", + tableSchema, tableName, wherePart, pkPart, currentBatchStart[0], currentBatchEnd[0], pkPart) + + // todo decimal类型能否转换成string待定 + case querypb.Type_TIMESTAMP, querypb.Type_DATE, querypb.Type_TIME, querypb.Type_DATETIME, querypb.Type_YEAR, + querypb.Type_DECIMAL, querypb.Type_TEXT, querypb.Type_VARCHAR, querypb.Type_CHAR, querypb.Type_BLOB: + countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between '%s' AND '%s' order by %s", + tableSchema, tableName, wherePart, pkPart, currentBatchStart[0], currentBatchEnd[0], pkPart) + + default: + return "", fmt.Errorf("Unsupported type: %v", pkInfos[0].pkType) + } + } else { + // 1. 生成>=的部分 + // 遍历PKName,不同的pk类型要对应不同的占位符 + greatThanPart, err := genPKsGreaterThanPart(pkInfos, currentBatchStart) + if err != nil { + return "", err + } + + // 2.生成<=的部分 + lessThanPart, err := genPKsLessThanPart(pkInfos, currentBatchEnd) + if err != nil { + return "", err + } + + // 3.将各部分拼接成最终的template + countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND ( (%s) AND (%s) )", + tableSchema, tableName, wherePart, greatThanPart, lessThanPart) + } + return countSQLTemplate, nil +} + +func genPKsGreaterThanTemplate(pkInfos []PKInfo) (string, error) { + curIdx := 0 + pksNum := len(pkInfos) + var equalStr, rst string + for curIdx < pksNum { + curPkName := pkInfos[curIdx].pkName + curPKType := pkInfos[curIdx].pkType + + placeholder, err := genPlaceholderByType(curPKType) + if err != nil { + return "", err + } + + if curIdx == 0 { + rst = fmt.Sprintf("( %s >= %s )", curPkName, placeholder) + } else { + rst += fmt.Sprintf(" OR ( %s AND %s >= %s )", equalStr, curPkName, placeholder) + } + + if curIdx == 0 { + equalStr = fmt.Sprintf("%s = %s", curPkName, placeholder) + } else { + equalStr += fmt.Sprintf(" AND %s = %s", curPkName, placeholder) + } + curIdx++ + } + return rst, nil +} + +func genPKsLessThanTemplate(pkInfos []PKInfo) (string, error) { + curIdx := 0 + pksNum := len(pkInfos) + var equalStr, rst string + for curIdx < pksNum { + curPkName := pkInfos[curIdx].pkName + curPKType := pkInfos[curIdx].pkType + + placeholder, err := genPlaceholderByType(curPKType) + if err != nil { + return "", err + } + + if curIdx == 0 { + rst = fmt.Sprintf("( %s <= %s )", curPkName, placeholder) + } else { + rst += fmt.Sprintf(" OR ( %s AND %s <= %s )", equalStr, curPkName, placeholder) + } + + if curIdx == 0 { + equalStr = fmt.Sprintf("%s = %s", curPkName, placeholder) + } else { + equalStr += fmt.Sprintf(" AND %s = %s", curPkName, placeholder) + } + curIdx++ + } + return rst, nil +} + +func genPlaceholderByType(typ querypb.Type) (string, error) { + switch typ { case querypb.Type_INT8, querypb.Type_INT16, querypb.Type_INT24, querypb.Type_INT32, querypb.Type_INT64: - countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between %%d AND %%d order by %s", - tableSchema, tableName, wherePart, PKPart, PKPart) + return "%d", nil case querypb.Type_UINT8, querypb.Type_UINT16, querypb.Type_UINT24, querypb.Type_UINT32, querypb.Type_UINT64: - countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between %%d AND %%d order by %s", - tableSchema, tableName, wherePart, PKPart, PKPart) + return "%d", nil case querypb.Type_FLOAT32, querypb.Type_FLOAT64: - countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between %%f AND %%f order by %s", - tableSchema, tableName, wherePart, PKPart, PKPart) + return "%f", nil // todo decimal类型能否转换成string待定 case querypb.Type_TIMESTAMP, querypb.Type_DATE, querypb.Type_TIME, querypb.Type_DATETIME, querypb.Type_YEAR, querypb.Type_DECIMAL, querypb.Type_TEXT, querypb.Type_VARCHAR, querypb.Type_CHAR, querypb.Type_BLOB: - countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between '%%s' AND '%%s' order by %s", - tableSchema, tableName, wherePart, PKPart, PKPart) + return "%s", nil default: - return "", fmt.Errorf("Unsupported type: %v", pkInfos[0].pkType) + return "", fmt.Errorf("Unsupported type: %v", typ) + } +} + +func genPKsGreaterThanPart(pkInfos []PKInfo, currentBatchStart []interface{}) (string, error) { + curIdx := 0 + pksNum := len(pkInfos) + var equalStr, rst string + for curIdx < pksNum { + curPkName := pkInfos[curIdx].pkName + curPKType := pkInfos[curIdx].pkType + + placeholder, err := genPlaceholderByType(curPKType) + if err != nil { + return "", err + } + + if curIdx == 0 { + rst = fmt.Sprintf("( %s >= %s )", curPkName, placeholder) + } else { + rst += fmt.Sprintf(" OR ( %s AND %s >= %s )", equalStr, curPkName, placeholder) + } + rst = fmt.Sprintf(rst, currentBatchStart[curIdx]) + if curIdx == 0 { + equalStr = fmt.Sprintf("%s = %s", curPkName, placeholder) + } else { + equalStr += fmt.Sprintf(" AND %s = %s", curPkName, placeholder) + } + equalStr = fmt.Sprintf(equalStr, currentBatchStart[curIdx]) + curIdx++ } - return countSQLTemplate, nil + return rst, nil +} + +func genPKsLessThanPart(pkInfos []PKInfo, currentBatchEnd []interface{}) (string, error) { + curIdx := 0 + pksNum := len(pkInfos) + var equalStr, rst string + for curIdx < pksNum { + curPkName := pkInfos[curIdx].pkName + curPKType := pkInfos[curIdx].pkType + + placeholder, err := genPlaceholderByType(curPKType) + if err != nil { + return "", err + } + + if curIdx == 0 { + rst = fmt.Sprintf("( %s <= %s )", curPkName, placeholder) + } else { + rst += fmt.Sprintf(" OR ( %s AND %s <= %s )", equalStr, curPkName, placeholder) + } + rst = fmt.Sprintf(rst, currentBatchEnd[curIdx]) + + if curIdx == 0 { + equalStr = fmt.Sprintf("%s = %s", curPkName, placeholder) + } else { + equalStr += fmt.Sprintf(" AND %s = %s", curPkName, placeholder) + } + equalStr = fmt.Sprintf(equalStr, currentBatchEnd[curIdx]) + curIdx++ + } + return rst, nil } const ( @@ -1284,7 +1496,7 @@ const ( // 创建表,todo 表gc // todo,discussion,建表的过程中需要放在一个事务内,防止崩了,由于一个事务容纳的数据有限,oom,因此需要多个事务? -func (jc *JobController) genBatchTable(jobUUID, selectSQL, countSQLTemplate, tableSchema, sql string, pkInfos []PKInfo, batchSize int64) (string, error) { +func (jc *JobController) genBatchTable(jobUUID, selectSQL, countSQLTemplate, tableSchema, sql, tableName, wherePart, pkPart string, pkInfos []PKInfo, batchSize int64) (string, error) { ctx := context.Background() qr, err := jc.execQuery(ctx, "", selectSQL) @@ -1317,63 +1529,76 @@ func (jc *JobController) genBatchTable(jobUUID, selectSQL, countSQLTemplate, tab // todo 处理不同类型的PK // todo 创建一个新的value结构,表示PK的名字和类型 currentBatchSize := int64(0) - var currentBatchStart interface{} - var currentBatchEnd interface{} + var currentBatchStart []interface{} + var currentBatchEnd []interface{} currentBatchID := float64(1) insertBatchSQLWithTableName := fmt.Sprintf(insertBatchSQL, batchTableName) var pkName string + // todo 对结果集为0的情况进行特判 for _, row := range qr.Named().Rows { + var pkValues []interface{} for _, pkInfo := range pkInfos { pkName = pkInfo.pkName // todo,对于每一列PK的值类型进行判断 keyVal, err := ProcessValue(row[pkName]) + pkValues = append(pkValues, keyVal) if err != nil { return "", err } + } - if currentBatchSize == 0 { - currentBatchStart = keyVal + if currentBatchSize == 0 { + currentBatchStart = pkValues + } + currentBatchEnd = pkValues + currentBatchSize++ // 改成多pk后要移出去 todo + if currentBatchSize == batchSize { + // between是一个闭区间,batch job的sql也是闭区间 + // todo 处理多pk + batchSQL, err := jc.genBatchSQL(sql, currentBatchStart, currentBatchEnd, pkInfos) + if err != nil { + return "", err } - currentBatchEnd = keyVal - currentBatchSize++ // 改成多pk后要移出去 todo - if currentBatchSize == batchSize { - // between是一个闭区间,batch job的sql也是闭区间 - // todo 处理整数之外的类型 - batchSQL, err := jc.genBatchSQL(sql, pkName, currentBatchStart, currentBatchEnd) - if err != nil { - return "", err - } - // todo 处理整数之外的类型 - countSQL := fmt.Sprintf(countSQLTemplate, currentBatchStart, currentBatchEnd) - - currentBatchSize = 0 - // insert into table - insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQLWithTableName, - sqltypes.Float64BindVariable(currentBatchID), - sqltypes.StringBindVariable(batchSQL), - sqltypes.StringBindVariable(countSQL), - sqltypes.Int64BindVariable(int64(batchSize))) - if err != nil { - return "", err - } - _, err = jc.execQuery(ctx, tableSchema, insertBatchSQLQuery) - if err != nil { - return "", err - } - currentBatchID++ // 改成多pk后要移出循环 todo + // todo 处理多pk + //countSQL := fmt.Sprintf(countSQLTemplate, currentBatchStart, currentBatchEnd) + countSQL, err := genCountSQL(tableSchema, tableName, wherePart, pkPart, currentBatchStart, currentBatchEnd, pkInfos) + if err != nil { + return "", err + } + currentBatchSize = 0 + // insert into table + insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQLWithTableName, + sqltypes.Float64BindVariable(currentBatchID), + sqltypes.StringBindVariable(batchSQL), + sqltypes.StringBindVariable(countSQL), + sqltypes.Int64BindVariable(int64(batchSize))) + if err != nil { + return "", err + } + _, err = jc.execQuery(ctx, tableSchema, insertBatchSQLQuery) + if err != nil { + return "", err } + currentBatchID++ // 改成多pk后要移出循环 todo + } } //最后一个batch if currentBatchSize != 0 { - batchSQL, err := jc.genBatchSQL(sql, pkName, currentBatchStart, currentBatchEnd) + // todo 处理多pk + batchSQL, err := jc.genBatchSQL(sql, currentBatchStart, currentBatchEnd, pkInfos) + if err != nil { + return "", err + } + // todo 处理多pk + //countSQL := fmt.Sprintf(countSQLTemplate, currentBatchStart, currentBatchEnd) + countSQL, err := genCountSQL(tableSchema, tableName, wherePart, pkPart, currentBatchStart, currentBatchEnd, pkInfos) if err != nil { return "", err } - countSQL := fmt.Sprintf(countSQLTemplate, currentBatchStart, currentBatchEnd) insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQLWithTableName, sqltypes.Float64BindVariable(currentBatchID), sqltypes.StringBindVariable(batchSQL), @@ -1409,24 +1634,42 @@ func ProcessValue(value sqltypes.Value) (interface{}, error) { } } -func (jc *JobController) genBatchSQL(sql, pkName string, currentBatchStart, currentBatchEnd interface{}) (batchSQL string, err error) { - if fmt.Sprintf("%T", currentBatchStart) != fmt.Sprintf("%T", currentBatchEnd) { - err = errors.New("the type of currentBatchStart and currentBatchEnd is different") - return "", err - } +func (jc *JobController) genBatchSQL(sql string, currentBatchStart, currentBatchEnd []interface{}, pkInfos []PKInfo) (batchSQL string, err error) { + if len(pkInfos) == 1 { + if fmt.Sprintf("%T", currentBatchStart[0]) != fmt.Sprintf("%T", currentBatchEnd[0]) { + err = errors.New("the type of currentBatchStart and currentBatchEnd is different") + return "", err + } + pkName := pkInfos[0].pkName + switch currentBatchEnd[0].(type) { + case int64: + batchSQL = sql + fmt.Sprintf(" AND %s between %d AND %d", pkName, currentBatchStart[0].(int64), currentBatchEnd[0].(int64)) + case uint64: + batchSQL = sql + fmt.Sprintf(" AND %s between %d AND %d", pkName, currentBatchStart[0].(uint64), currentBatchEnd[0].(uint64)) + case float64: + batchSQL = sql + fmt.Sprintf(" AND %s between %f AND %f", pkName, currentBatchStart[0].(float64), currentBatchEnd[0].(float64)) + case string: + batchSQL = sql + fmt.Sprintf(" AND %s between '%s' AND '%s'", pkName, currentBatchStart[0].(string), currentBatchEnd[0].(string)) + default: + err = errors.New("unsupported type of currentBatchEnd") + return "", err + } + } else { + // 1. 生成>=的部分 + // 遍历PKName,不同的pk类型要对应不同的占位符 + greatThanPart, err := genPKsGreaterThanPart(pkInfos, currentBatchStart) + if err != nil { + return "", err + } - switch currentBatchEnd.(type) { - case int64: - batchSQL = sql + fmt.Sprintf(" AND %s between %d AND %d", pkName, currentBatchStart.(int64), currentBatchEnd.(int64)) - case uint64: - batchSQL = sql + fmt.Sprintf(" AND %s between %d AND %d", pkName, currentBatchStart.(uint64), currentBatchEnd.(uint64)) - case float64: - batchSQL = sql + fmt.Sprintf(" AND %s between %f AND %f", pkName, currentBatchStart.(float64), currentBatchEnd.(float64)) - case string: - batchSQL = sql + fmt.Sprintf(" AND %s between '%s' AND '%s'", pkName, currentBatchStart.(string), currentBatchEnd.(string)) - default: - err = errors.New("unsupported type of currentBatchEnd") - return "", err + // 2.生成<=的部分 + lessThanPart, err := genPKsLessThanPart(pkInfos, currentBatchEnd) + if err != nil { + return "", err + } + + // 3.将各部分拼接成最终的template + batchSQL = sql + fmt.Sprintf(" AND ( (%s) AND (%s) )", greatThanPart, lessThanPart) } return batchSQL, nil } From 3a253c5a5df21c6b7eda6325949ac849f4e56887 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Thu, 21 Dec 2023 20:05:02 +0800 Subject: [PATCH 12/54] fix: rewrite code of batch generating process to make it more readable Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/proto/query/query.pb.go | 176 +++---- go/vt/proto/query/query_vtproto.pb.go | 14 +- go/vt/sqlparser/comments.go | 14 +- go/vt/vtgate/executor.go | 4 +- go/vt/vtgate/plan_execute.go | 4 +- go/vt/vtgate/vcursor_impl.go | 2 +- go/vt/vttablet/grpcqueryservice/server.go | 2 +- go/vt/vttablet/grpctabletconn/conn.go | 4 +- go/vt/vttablet/jobcontroller/controller.go | 430 ++++++------------ go/vt/vttablet/queryservice/wrapped.go | 4 +- go/vt/vttablet/sandboxconn/sandboxconn.go | 2 +- .../tabletconntest/fakequeryservice.go | 2 +- go/vt/vttablet/tabletserver/tabletserver.go | 4 +- proto/query.proto | 2 +- 14 files changed, 246 insertions(+), 418 deletions(-) diff --git a/go/vt/proto/query/query.pb.go b/go/vt/proto/query/query.pb.go index 57694d1e6d..2acba68bc7 100644 --- a/go/vt/proto/query/query.pb.go +++ b/go/vt/proto/query/query.pb.go @@ -6138,7 +6138,7 @@ type SubmitDMLJobRequest struct { Sql string `protobuf:"bytes,3,opt,name=sql,proto3" json:"sql,omitempty"` RelatedSchema string `protobuf:"bytes,4,opt,name=related_schema,json=relatedSchema,proto3" json:"related_schema,omitempty"` Timegap int64 `protobuf:"varint,6,opt,name=timegap,proto3" json:"timegap,omitempty"` - SubtaskRows int64 `protobuf:"varint,7,opt,name=subtask_rows,json=subtaskRows,proto3" json:"subtask_rows,omitempty"` + BatchSize int64 `protobuf:"varint,7,opt,name=batch_size,json=batchSize,proto3" json:"batch_size,omitempty"` AutoRetry bool `protobuf:"varint,8,opt,name=auto_retry,json=autoRetry,proto3" json:"auto_retry,omitempty"` PostponeLaunch bool `protobuf:"varint,9,opt,name=postpone_launch,json=postponeLaunch,proto3" json:"postpone_launch,omitempty"` } @@ -6210,9 +6210,9 @@ func (x *SubmitDMLJobRequest) GetTimegap() int64 { return 0 } -func (x *SubmitDMLJobRequest) GetSubtaskRows() int64 { +func (x *SubmitDMLJobRequest) GetBatchSize() int64 { if x != nil { - return x.SubtaskRows + return x.BatchSize } return 0 } @@ -7297,7 +7297,7 @@ var file_query_proto_rawDesc = []byte{ 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x80, 0x02, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x44, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xfc, 0x01, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x44, 0x4d, 0x4c, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, @@ -7306,90 +7306,90 @@ var file_query_proto_rawDesc = []byte{ 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x67, 0x61, 0x70, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x67, 0x61, 0x70, 0x12, 0x21, 0x0a, 0x0c, - 0x73, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x73, 0x75, 0x62, 0x74, 0x61, 0x73, 0x6b, 0x52, 0x6f, 0x77, 0x73, 0x12, - 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x27, - 0x0a, 0x0f, 0x70, 0x6f, 0x73, 0x74, 0x70, 0x6f, 0x6e, 0x65, 0x5f, 0x6c, 0x61, 0x75, 0x6e, 0x63, - 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x70, 0x6f, 0x73, 0x74, 0x70, 0x6f, 0x6e, - 0x65, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x22, 0x42, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x44, 0x4d, 0x4c, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x92, 0x03, 0x0a, 0x09, - 0x4d, 0x79, 0x53, 0x71, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x4d, 0x50, - 0x54, 0x59, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, - 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x52, 0x49, 0x5f, 0x4b, - 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x4e, 0x49, - 0x51, 0x55, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x04, 0x12, 0x15, - 0x0a, 0x11, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, - 0x4c, 0x41, 0x47, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x46, 0x4c, - 0x41, 0x47, 0x10, 0x10, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, - 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x20, 0x12, 0x11, 0x0a, 0x0d, 0x5a, 0x45, 0x52, 0x4f, 0x46, - 0x49, 0x4c, 0x4c, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x40, 0x12, 0x10, 0x0a, 0x0b, 0x42, 0x49, - 0x4e, 0x41, 0x52, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x01, 0x12, 0x0e, 0x0a, 0x09, - 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x02, 0x12, 0x18, 0x0a, 0x13, - 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x49, 0x4e, 0x43, 0x52, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x46, - 0x4c, 0x41, 0x47, 0x10, 0x80, 0x04, 0x12, 0x13, 0x0a, 0x0e, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, - 0x41, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x53, - 0x45, 0x54, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x10, 0x12, 0x1a, 0x0a, 0x15, 0x4e, 0x4f, - 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x46, - 0x4c, 0x41, 0x47, 0x10, 0x80, 0x20, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, - 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x57, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x40, 0x12, - 0x0e, 0x0a, 0x08, 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x02, 0x12, - 0x13, 0x0a, 0x0d, 0x50, 0x41, 0x52, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, - 0x10, 0x80, 0x80, 0x01, 0x12, 0x10, 0x0a, 0x0a, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x46, 0x4c, - 0x41, 0x47, 0x10, 0x80, 0x80, 0x02, 0x12, 0x11, 0x0a, 0x0b, 0x55, 0x4e, 0x49, 0x51, 0x55, 0x45, - 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x04, 0x12, 0x11, 0x0a, 0x0b, 0x42, 0x49, 0x4e, - 0x43, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x08, 0x1a, 0x02, 0x10, 0x01, - 0x2a, 0x6b, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, - 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x4c, - 0x10, 0x80, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, 0x45, - 0x44, 0x10, 0x80, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x49, 0x53, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, - 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x53, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x44, 0x10, 0x80, - 0x10, 0x12, 0x0b, 0x0a, 0x06, 0x49, 0x53, 0x54, 0x45, 0x58, 0x54, 0x10, 0x80, 0x20, 0x12, 0x0d, - 0x0a, 0x08, 0x49, 0x53, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x80, 0x40, 0x2a, 0xc0, 0x03, - 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x04, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x81, 0x02, - 0x12, 0x0a, 0x0a, 0x05, 0x55, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x82, 0x06, 0x12, 0x0a, 0x0a, 0x05, - 0x49, 0x4e, 0x54, 0x31, 0x36, 0x10, 0x83, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, - 0x31, 0x36, 0x10, 0x84, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x85, - 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x86, 0x06, 0x12, 0x0a, - 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x87, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, - 0x4e, 0x54, 0x33, 0x32, 0x10, 0x88, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x36, 0x34, - 0x10, 0x89, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x8a, 0x06, - 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x33, 0x32, 0x10, 0x8b, 0x08, 0x12, 0x0c, - 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x36, 0x34, 0x10, 0x8c, 0x08, 0x12, 0x0e, 0x0a, 0x09, - 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x8d, 0x10, 0x12, 0x09, 0x0a, 0x04, - 0x44, 0x41, 0x54, 0x45, 0x10, 0x8e, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x49, 0x4d, 0x45, 0x10, - 0x8f, 0x10, 0x12, 0x0d, 0x0a, 0x08, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x90, - 0x10, 0x12, 0x09, 0x0a, 0x04, 0x59, 0x45, 0x41, 0x52, 0x10, 0x91, 0x06, 0x12, 0x0b, 0x0a, 0x07, - 0x44, 0x45, 0x43, 0x49, 0x4d, 0x41, 0x4c, 0x10, 0x12, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x45, 0x58, - 0x54, 0x10, 0x93, 0x30, 0x12, 0x09, 0x0a, 0x04, 0x42, 0x4c, 0x4f, 0x42, 0x10, 0x94, 0x50, 0x12, - 0x0c, 0x0a, 0x07, 0x56, 0x41, 0x52, 0x43, 0x48, 0x41, 0x52, 0x10, 0x95, 0x30, 0x12, 0x0e, 0x0a, - 0x09, 0x56, 0x41, 0x52, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x96, 0x50, 0x12, 0x09, 0x0a, - 0x04, 0x43, 0x48, 0x41, 0x52, 0x10, 0x97, 0x30, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x4e, 0x41, - 0x52, 0x59, 0x10, 0x98, 0x50, 0x12, 0x08, 0x0a, 0x03, 0x42, 0x49, 0x54, 0x10, 0x99, 0x10, 0x12, - 0x09, 0x0a, 0x04, 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x9a, 0x10, 0x12, 0x08, 0x0a, 0x03, 0x53, 0x45, - 0x54, 0x10, 0x9b, 0x10, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x55, 0x50, 0x4c, 0x45, 0x10, 0x1c, 0x12, - 0x0d, 0x0a, 0x08, 0x47, 0x45, 0x4f, 0x4d, 0x45, 0x54, 0x52, 0x59, 0x10, 0x9d, 0x10, 0x12, 0x09, - 0x0a, 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x9e, 0x10, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x58, 0x50, - 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x1f, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45, 0x58, - 0x4e, 0x55, 0x4d, 0x10, 0xa0, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45, 0x58, 0x56, 0x41, 0x4c, - 0x10, 0xa1, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x54, 0x4e, 0x55, 0x4d, 0x10, 0xa2, 0x20, - 0x2a, 0x46, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, - 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x45, 0x10, 0x01, 0x12, 0x0a, - 0x0a, 0x06, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x4f, - 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x03, 0x2a, 0x31, 0x0a, 0x0f, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x56, - 0x49, 0x45, 0x57, 0x53, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x53, - 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x02, 0x42, 0x35, 0x0a, 0x0f, 0x69, - 0x6f, 0x2e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x22, - 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, - 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x01, 0x28, 0x03, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x67, 0x61, 0x70, 0x12, 0x1d, 0x0a, 0x0a, + 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, + 0x75, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x09, 0x61, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x6f, + 0x73, 0x74, 0x70, 0x6f, 0x6e, 0x65, 0x5f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0e, 0x70, 0x6f, 0x73, 0x74, 0x70, 0x6f, 0x6e, 0x65, 0x4c, 0x61, 0x75, + 0x6e, 0x63, 0x68, 0x22, 0x42, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x44, 0x4d, 0x4c, + 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x92, 0x03, 0x0a, 0x09, 0x4d, 0x79, 0x53, 0x71, + 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x10, 0x00, + 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x46, 0x4c, 0x41, + 0x47, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x52, 0x49, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, + 0x4c, 0x41, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x4e, 0x49, 0x51, 0x55, 0x45, 0x5f, + 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x55, + 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, + 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x10, + 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, 0x5f, 0x46, 0x4c, 0x41, + 0x47, 0x10, 0x20, 0x12, 0x11, 0x0a, 0x0d, 0x5a, 0x45, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x4c, 0x5f, + 0x46, 0x4c, 0x41, 0x47, 0x10, 0x40, 0x12, 0x10, 0x0a, 0x0b, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, + 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x45, 0x4e, 0x55, 0x4d, + 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x02, 0x12, 0x18, 0x0a, 0x13, 0x41, 0x55, 0x54, 0x4f, + 0x5f, 0x49, 0x4e, 0x43, 0x52, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, + 0x80, 0x04, 0x12, 0x13, 0x0a, 0x0e, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x5f, + 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x53, 0x45, 0x54, 0x5f, 0x46, + 0x4c, 0x41, 0x47, 0x10, 0x80, 0x10, 0x12, 0x1a, 0x0a, 0x15, 0x4e, 0x4f, 0x5f, 0x44, 0x45, 0x46, + 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, + 0x80, 0x20, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, + 0x4e, 0x4f, 0x57, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x40, 0x12, 0x0e, 0x0a, 0x08, 0x4e, + 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x02, 0x12, 0x13, 0x0a, 0x0d, 0x50, + 0x41, 0x52, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x01, + 0x12, 0x10, 0x0a, 0x0a, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, + 0x80, 0x02, 0x12, 0x11, 0x0a, 0x0b, 0x55, 0x4e, 0x49, 0x51, 0x55, 0x45, 0x5f, 0x46, 0x4c, 0x41, + 0x47, 0x10, 0x80, 0x80, 0x04, 0x12, 0x11, 0x0a, 0x0b, 0x42, 0x49, 0x4e, 0x43, 0x4d, 0x50, 0x5f, + 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x08, 0x1a, 0x02, 0x10, 0x01, 0x2a, 0x6b, 0x0a, 0x04, + 0x46, 0x6c, 0x61, 0x67, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0f, + 0x0a, 0x0a, 0x49, 0x53, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x4c, 0x10, 0x80, 0x02, 0x12, + 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, 0x10, 0x80, 0x04, + 0x12, 0x0c, 0x0a, 0x07, 0x49, 0x53, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x80, 0x08, 0x12, 0x0d, + 0x0a, 0x08, 0x49, 0x53, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x44, 0x10, 0x80, 0x10, 0x12, 0x0b, 0x0a, + 0x06, 0x49, 0x53, 0x54, 0x45, 0x58, 0x54, 0x10, 0x80, 0x20, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x53, + 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x80, 0x40, 0x2a, 0xc0, 0x03, 0x0a, 0x04, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, + 0x00, 0x12, 0x09, 0x0a, 0x04, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x81, 0x02, 0x12, 0x0a, 0x0a, 0x05, + 0x55, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x82, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x31, + 0x36, 0x10, 0x83, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x31, 0x36, 0x10, 0x84, + 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x85, 0x02, 0x12, 0x0b, 0x0a, + 0x06, 0x55, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x86, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, + 0x54, 0x33, 0x32, 0x10, 0x87, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x33, 0x32, + 0x10, 0x88, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x89, 0x02, 0x12, + 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x8a, 0x06, 0x12, 0x0c, 0x0a, 0x07, + 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x33, 0x32, 0x10, 0x8b, 0x08, 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x4c, + 0x4f, 0x41, 0x54, 0x36, 0x34, 0x10, 0x8c, 0x08, 0x12, 0x0e, 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, + 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x8d, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x44, 0x41, 0x54, 0x45, + 0x10, 0x8e, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x8f, 0x10, 0x12, 0x0d, + 0x0a, 0x08, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x90, 0x10, 0x12, 0x09, 0x0a, + 0x04, 0x59, 0x45, 0x41, 0x52, 0x10, 0x91, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x43, 0x49, + 0x4d, 0x41, 0x4c, 0x10, 0x12, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x45, 0x58, 0x54, 0x10, 0x93, 0x30, + 0x12, 0x09, 0x0a, 0x04, 0x42, 0x4c, 0x4f, 0x42, 0x10, 0x94, 0x50, 0x12, 0x0c, 0x0a, 0x07, 0x56, + 0x41, 0x52, 0x43, 0x48, 0x41, 0x52, 0x10, 0x95, 0x30, 0x12, 0x0e, 0x0a, 0x09, 0x56, 0x41, 0x52, + 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x96, 0x50, 0x12, 0x09, 0x0a, 0x04, 0x43, 0x48, 0x41, + 0x52, 0x10, 0x97, 0x30, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x98, + 0x50, 0x12, 0x08, 0x0a, 0x03, 0x42, 0x49, 0x54, 0x10, 0x99, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x45, + 0x4e, 0x55, 0x4d, 0x10, 0x9a, 0x10, 0x12, 0x08, 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, 0x9b, 0x10, + 0x12, 0x09, 0x0a, 0x05, 0x54, 0x55, 0x50, 0x4c, 0x45, 0x10, 0x1c, 0x12, 0x0d, 0x0a, 0x08, 0x47, + 0x45, 0x4f, 0x4d, 0x45, 0x54, 0x52, 0x59, 0x10, 0x9d, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x4a, 0x53, + 0x4f, 0x4e, 0x10, 0x9e, 0x10, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x58, 0x50, 0x52, 0x45, 0x53, 0x53, + 0x49, 0x4f, 0x4e, 0x10, 0x1f, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45, 0x58, 0x4e, 0x55, 0x4d, 0x10, + 0xa0, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45, 0x58, 0x56, 0x41, 0x4c, 0x10, 0xa1, 0x20, 0x12, + 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x54, 0x4e, 0x55, 0x4d, 0x10, 0xa2, 0x20, 0x2a, 0x46, 0x0a, 0x10, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, + 0x07, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, + 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x4f, 0x4c, 0x4c, 0x42, 0x41, + 0x43, 0x4b, 0x10, 0x03, 0x2a, 0x31, 0x0a, 0x0f, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x56, 0x49, 0x45, 0x57, 0x53, + 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x53, 0x10, 0x01, 0x12, 0x07, + 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x02, 0x42, 0x35, 0x0a, 0x0f, 0x69, 0x6f, 0x2e, 0x76, 0x69, + 0x74, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x22, 0x76, 0x69, 0x74, 0x65, + 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, + 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/go/vt/proto/query/query_vtproto.pb.go b/go/vt/proto/query/query_vtproto.pb.go index 4fef56ed77..cd16cc9a62 100644 --- a/go/vt/proto/query/query_vtproto.pb.go +++ b/go/vt/proto/query/query_vtproto.pb.go @@ -4727,8 +4727,8 @@ func (m *SubmitDMLJobRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { i-- dAtA[i] = 0x40 } - if m.SubtaskRows != 0 { - i = encodeVarint(dAtA, i, uint64(m.SubtaskRows)) + if m.BatchSize != 0 { + i = encodeVarint(dAtA, i, uint64(m.BatchSize)) i-- dAtA[i] = 0x38 } @@ -6652,8 +6652,8 @@ func (m *SubmitDMLJobRequest) SizeVT() (n int) { if m.Timegap != 0 { n += 1 + sov(uint64(m.Timegap)) } - if m.SubtaskRows != 0 { - n += 1 + sov(uint64(m.SubtaskRows)) + if m.BatchSize != 0 { + n += 1 + sov(uint64(m.BatchSize)) } if m.AutoRetry { n += 2 @@ -18883,9 +18883,9 @@ func (m *SubmitDMLJobRequest) UnmarshalVT(dAtA []byte) error { } case 7: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field SubtaskRows", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field BatchSize", wireType) } - m.SubtaskRows = 0 + m.BatchSize = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflow @@ -18895,7 +18895,7 @@ func (m *SubmitDMLJobRequest) UnmarshalVT(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.SubtaskRows |= int64(b&0x7F) << shift + m.BatchSize |= int64(b&0x7F) << shift if b < 0x80 { break } diff --git a/go/vt/sqlparser/comments.go b/go/vt/sqlparser/comments.go index f01db406be..0766ff3ef9 100644 --- a/go/vt/sqlparser/comments.go +++ b/go/vt/sqlparser/comments.go @@ -60,7 +60,7 @@ const ( DirectiveDMLCMD = "DML_CMD" DirectiveDMLTimeGap = "DML_TIME_GAP" - DirectiveSubtaskRows = "DML_SUBTASK_ROWS" + DirectiveBATCHSIZE = "DML_BATCH_SIZE" DirectiveDMLPostponeLaunch = "DML_POSTPONE_LAUNCH" DirectiveDMLAutoRetry = "DML_AUTO_RETRY" ) @@ -463,7 +463,7 @@ func GetDMLJobCmd(stmt Statement) string { return str } -func GetDMLJobArgs(stmt Statement) (timeGapInMs int64, subTaskRows int64, postponeLaunch bool, autoRetry bool) { +func GetDMLJobArgs(stmt Statement) (timeGapInMs int64, batchSize int64, postponeLaunch bool, autoRetry bool) { var comments *ParsedComments switch stmt := stmt.(type) { case *Update: @@ -472,7 +472,7 @@ func GetDMLJobArgs(stmt Statement) (timeGapInMs int64, subTaskRows int64, postpo comments = stmt.Comments } if comments == nil { - return timeGapInMs, subTaskRows, postponeLaunch, autoRetry + return timeGapInMs, batchSize, postponeLaunch, autoRetry } var err error @@ -486,11 +486,11 @@ func GetDMLJobArgs(stmt Statement) (timeGapInMs int64, subTaskRows int64, postpo } } - subTaskRowsStr, isSet := directives.GetString(DirectiveSubtaskRows, "") + subTaskRowsStr, isSet := directives.GetString(DirectiveBATCHSIZE, "") if isSet { - subTaskRows, err = strconv.ParseInt(subTaskRowsStr, 10, 64) + batchSize, err = strconv.ParseInt(subTaskRowsStr, 10, 64) if err != nil { - subTaskRows = 0 + batchSize = 0 } } @@ -510,5 +510,5 @@ func GetDMLJobArgs(stmt Statement) (timeGapInMs int64, subTaskRows int64, postpo } } - return timeGapInMs, subTaskRows, postponeLaunch, autoRetry + return timeGapInMs, batchSize, postponeLaunch, autoRetry } diff --git a/go/vt/vtgate/executor.go b/go/vt/vtgate/executor.go index 2f07ffa9e5..783ad2299b 100644 --- a/go/vt/vtgate/executor.go +++ b/go/vt/vtgate/executor.go @@ -1556,7 +1556,7 @@ func (e *Executor) SetFailPoint(command string, key string, value string) error return nil } -func (e *Executor) SubmitDMLJob(command, sql, uuid, tableSchema string, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (e *Executor) SubmitDMLJob(command, sql, uuid, tableSchema string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { ctx := context.Background() // todo newborn22, scatterConn or txnConn? // todo ,这个写法丑陋,要直接拿到primary @@ -1568,7 +1568,7 @@ func (e *Executor) SubmitDMLJob(command, sql, uuid, tableSchema string, timeGapI break } } - return th.Conn.SubmitDMLJob(ctx, command, sql, uuid, tableSchema, timeGapInMs, subtaskRows, postponeLaunch, autoRetry) + return th.Conn.SubmitDMLJob(ctx, command, sql, uuid, tableSchema, timeGapInMs, batchSize, postponeLaunch, autoRetry) } func (e *Executor) checkThatPlanIsValid(stmt sqlparser.Statement, plan *engine.Plan) error { diff --git a/go/vt/vtgate/plan_execute.go b/go/vt/vtgate/plan_execute.go index 126b489903..b188f88763 100644 --- a/go/vt/vtgate/plan_execute.go +++ b/go/vt/vtgate/plan_execute.go @@ -449,8 +449,8 @@ func IsSubmitDMLJob(stmt sqlparser.Statement) bool { func HandleDMLJobSubmit(stmt sqlparser.Statement, vcursor *vcursorImpl, sql string) (*sqltypes.Result, error) { // todo newborn22,检查是否在事务中,如果是则报错 if IsSubmitDMLJob(stmt) { - timeGapInMs, subTaskRows, postponeLaunch, autoRetry := sqlparser.GetDMLJobArgs(stmt) - qr, err := vcursor.executor.SubmitDMLJob("submit_job", sql, "", vcursor.keyspace, timeGapInMs, subTaskRows, postponeLaunch, autoRetry) + timeGapInMs, batchSize, postponeLaunch, autoRetry := sqlparser.GetDMLJobArgs(stmt) + qr, err := vcursor.executor.SubmitDMLJob("submit_job", sql, "", vcursor.keyspace, timeGapInMs, batchSize, postponeLaunch, autoRetry) // todo ,在这个地方把qr写回到前端 if qr != nil { if qr.RowsAffected == 1 { diff --git a/go/vt/vtgate/vcursor_impl.go b/go/vt/vtgate/vcursor_impl.go index e08e3f97c0..c98d5c8ffa 100644 --- a/go/vt/vtgate/vcursor_impl.go +++ b/go/vt/vtgate/vcursor_impl.go @@ -93,7 +93,7 @@ type iExecute interface { reloadExec(ctx context.Context, reloadType *sqlparser.ReloadType) error VSchema() *vindexes.VSchema SetFailPoint(command string, key string, value string) error - SubmitDMLJob(command, sql, uuid, tableSchema string, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) + SubmitDMLJob(command, sql, uuid, tableSchema string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) } // VSchemaOperator is an interface to Vschema Operations diff --git a/go/vt/vttablet/grpcqueryservice/server.go b/go/vt/vttablet/grpcqueryservice/server.go index c6303715ff..508fb19e94 100644 --- a/go/vt/vttablet/grpcqueryservice/server.go +++ b/go/vt/vttablet/grpcqueryservice/server.go @@ -529,7 +529,7 @@ func (q *query) SetFailPoint(ctx context.Context, request *querypb.SetFailPointR } func (q *query) SubmitDMLJob(ctx context.Context, request *querypb.SubmitDMLJobRequest) (*querypb.SubmitDMLJobResponse, error) { - rst, err := q.server.SubmitDMLJob(ctx, request.Cmd, request.Sql, request.JobUuid, request.RelatedSchema, request.Timegap, request.SubtaskRows, request.PostponeLaunch, request.AutoRetry) + rst, err := q.server.SubmitDMLJob(ctx, request.Cmd, request.Sql, request.JobUuid, request.RelatedSchema, request.Timegap, request.BatchSize, request.PostponeLaunch, request.AutoRetry) return &querypb.SubmitDMLJobResponse{Result: sqltypes.ResultToProto3(rst)}, err } diff --git a/go/vt/vttablet/grpctabletconn/conn.go b/go/vt/vttablet/grpctabletconn/conn.go index 238a972605..1d7f4af2d6 100644 --- a/go/vt/vttablet/grpctabletconn/conn.go +++ b/go/vt/vttablet/grpctabletconn/conn.go @@ -1133,7 +1133,7 @@ func (conn *gRPCQueryClient) SetFailPoint(ctx context.Context, command string, k return nil } -func (conn *gRPCQueryClient) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema string, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (conn *gRPCQueryClient) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { // todo newborn22,为什么要加锁? // todo,什么时候调用? conn.mu.RLock() @@ -1147,7 +1147,7 @@ func (conn *gRPCQueryClient) SubmitDMLJob(ctx context.Context, command, sql, uui JobUuid: uuid, RelatedSchema: tableSchema, Timegap: timeGapInMs, - SubtaskRows: subtaskRows, + BatchSize: batchSize, PostponeLaunch: postponeLaunch, AutoRetry: autoRetry, } diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index bac732b7d3..8079b58d95 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -57,18 +57,17 @@ const ( ) const ( - defaultTimeGap = 1000 // 1000ms - defaultSubtaskRows = 100 - defaultThreshold = 3000 // todo,通过函数来计算出threshold并传入runner中,要依据索引的个数 + defaultTimeGap = 1000 // 1000ms + defaultBatchSize = 100 + defaultThreshold = 3000 // todo,通过函数来计算出threshold并传入runner中,要依据索引的个数 ) const ( postponeLaunchStatus = "postpone-launch" queuedStatus = "queued" - blockedStatus = "blocked" + blockedStatus = "blocked" // todo,被正在运行或者paused的任务阻塞时发条消息? runningStatus = "running" pausedStatus = "paused" - interruptedStatus = "interrupted" canceledStatus = "canceled" failedStatus = "failed" completedStatus = "completed" @@ -153,18 +152,7 @@ type JobController struct { workingTables map[string]bool // 用于调度时检测当前任务是否和正在工作的表冲突,paused、running状态的job的表都在里面 workingTablesMutex sync.Mutex - // 当running或者paused的时候,应该在working uuid中,以此来做健康检测 - workingUUIDs map[string]bool - workingUUIDsMutex sync.Mutex - - jobChans map[string]JobChanStruct // todo 删除 - jobChansMutex sync.Mutex - checkBeforeSchedule chan struct{} -} - -type JobChanStruct struct { - pauseAndResume chan string - cancel chan string + checkBeforeSchedule chan struct{} // 用于确保当healthCheck拉起crash的running job的runner协程后,job scheduler才开始运行 } type PKInfo struct { @@ -182,7 +170,6 @@ func (jc *JobController) Open() error { jc.pool.Open(jc.env.Config().DB.AppConnector(), jc.env.Config().DB.DbaConnector(), jc.env.Config().DB.AppDebugConnector()) jc.workingTables = map[string]bool{} - jc.jobChans = map[string]JobChanStruct{} jc.checkBeforeSchedule = make(chan struct{}) go jc.jobHealthCheck(jc.checkBeforeSchedule) @@ -210,12 +197,12 @@ func NewJobController(tableName string, tabletTypeFunc func() topodatapb.TabletT } // todo newborn22 , 能否改写得更有通用性? 这样改写是否好? -func (jc *JobController) HandleRequest(command, sql, jobUUID, tableSchema, expireString string, ratioLiteral *sqlparser.Literal, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (jc *JobController) HandleRequest(command, sql, jobUUID, tableSchema, expireString string, ratioLiteral *sqlparser.Literal, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { // todo newborn22, if 可以删掉 if jc.tabletTypeFunc() == topodatapb.TabletType_PRIMARY { switch command { case SubmitJob: - return jc.SubmitJob(sql, tableSchema, timeGapInMs, subtaskRows, postponeLaunch, autoRetry) + return jc.SubmitJob(sql, tableSchema, timeGapInMs, batchSize, postponeLaunch, autoRetry) case ShowJobs: return jc.ShowJobs() case PauseJob: @@ -238,34 +225,25 @@ func (jc *JobController) HandleRequest(command, sql, jobUUID, tableSchema, expir // todo newboen22 函数的可见性,封装性上的改进? // todo 传timegap和table_name -func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { jc.tableMutex.Lock() defer jc.tableMutex.Unlock() + ctx := context.Background() + jobUUID, err := schema.CreateUUIDWithDelimiter("-") if err != nil { return nil, err } - - ctx := context.Background() sql = rewirteSQL(sql) if timeGapInMs == 0 { timeGapInMs = int64(defaultTimeGap) } - if subtaskRows == 0 { - subtaskRows = int64(defaultSubtaskRows) + if batchSize == 0 { + batchSize = int64(defaultBatchSize) } - // todo,优化,将下面genSelectBatchKeySQL getTablePkInfo genBatchTable放在一个函数中,减少参数传递,增加易读性 - selectSQL, countSQLTemplate, tableName, wherePart, pkPart, err := jc.genSelectBatchKeySQL(sql, tableSchema) - if err != nil { - return nil, err - } - pkInfos, err := jc.getTablePkInfo(ctx, tableSchema, tableName) - if err != nil { - return &sqltypes.Result{}, err - } - jobBatchTable, err := jc.genBatchTable(jobUUID, selectSQL, countSQLTemplate, tableSchema, sql, tableName, wherePart, pkPart, pkInfos, subtaskRows) + tableName, jobBatchTable, err := jc.createBatchJob(jobUUID, sql, tableSchema, batchSize) if err != nil { return &sqltypes.Result{}, err } @@ -283,7 +261,7 @@ func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, subtask sqltypes.StringBindVariable(tableName), sqltypes.StringBindVariable(jobBatchTable), sqltypes.Int64BindVariable(timeGapInMs), - sqltypes.Int64BindVariable(subtaskRows), + sqltypes.Int64BindVariable(batchSize), sqltypes.StringBindVariable(jobStatus), sqltypes.StringBindVariable(statusSetTime)) if err != nil { @@ -295,7 +273,7 @@ func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, subtask return &sqltypes.Result{}, err } // todo 增加 recursive-split,递归拆分batch的选项 - return jc.buildJobSubmitResult(jobUUID, jobBatchTable, timeGapInMs, subtaskRows, postponeLaunch, autoRetry), nil + return jc.buildJobSubmitResult(jobUUID, jobBatchTable, timeGapInMs, batchSize, postponeLaunch, autoRetry), nil } func (jc *JobController) buildJobSubmitResult(jobUUID, jobBatchTable string, timeGap, subtaskRows int64, postponeLaunch, autoRetry bool) *sqltypes.Result { @@ -543,10 +521,6 @@ func (jc *JobController) FailJob(ctx context.Context, uuid, message, tableName s } -// todo newborn 做成接口 -func jobTask() { -} - // 注意非primary要关掉 // todo 做成休眠和唤醒的 func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { @@ -1085,34 +1059,6 @@ func (jc *JobController) getTableColNames(ctx context.Context, tableSchema, tabl return colNames, nil } -func rewriteWhereStr(whereStr, subQueryTableName string, colNames []string) string { - - // 使用正则表达式匹配单词 - re := regexp.MustCompile(`\b\w+(\.\w+)?\b`) - modifiedStr := re.ReplaceAllStringFunc(whereStr, func(match string) string { - // 检查匹配的单词是否在 colNames 中或者是否以 'mytable.' 开头 - parts := strings.Split(match, ".") - if len(parts) > 1 { - if contains(colNames, parts[1]) { - return subQueryTableName + "." + parts[1] - } - } else if contains(colNames, match) { - return subQueryTableName + "." + match - } - return match - }) - return modifiedStr -} - -func contains(arr []string, str string) bool { - for _, v := range arr { - if v == str { - return true - } - } - return false -} - func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { ctx := context.Background() @@ -1191,46 +1137,53 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { } } -// 目前只支持 -// 1.PK作为拆分列,支持多列PK todo 支持UK或其他列 -// 2.目前只支持单表,且没有join -func (jc *JobController) genSelectBatchKeySQL(sql, tableSchema string) (selectSQL, countSQLTemplate, tableName, wherePart, pkPart string, err error) { - // SELECT `id` FROM `test`.`t` WHERE (`v` < 6) ORDER BY IF(ISNULL(`id`),0,1),`id`, 由于是PK,因此不需要判断ISNULL +func (jc *JobController) createBatchJob(jobUUID, sql, tableSchema string, batchSize int64) (tableName, batchTableName string, err error) { + // 1.解析用户提交的DML sql,返回DML的各个部分。其中selectSQL用于确定每一个batch的pk范围,生成每一个batch所要执行的batch sql + selectSQL, tableName, wherePart, pkPart, pkInfos, err := jc.parseDML(sql, tableSchema) + if err != nil { + return "", "", nil + } + // 2.利用selectSQL为该job生成batch表 + batchTableName, err = jc.createBatchTable(jobUUID, selectSQL, tableSchema, sql, tableName, wherePart, pkPart, pkInfos, batchSize) + return tableName, batchTableName, err +} + +func (jc *JobController) parseDML(sql, tableSchema string) (selectSQL, tableName, wherePart, pkPart string, pkInfos []PKInfo, err error) { stmt, _, err := sqlparser.Parse2(sql) if err != nil { - return "", "", "", "", "", err + return "", "", "", "", nil, err } - wherePart = "" + // 根据stmt,分析DML SQL的各个部分,包括涉及的表,where条件 switch s := stmt.(type) { case *sqlparser.Delete: if len(s.TableExprs) != 1 { - return "", "", "", "", "", errors.New("the number of table is more than one") + return "", "", "", "", nil, errors.New("the number of table is more than one") } tableExpr, ok := s.TableExprs[0].(*sqlparser.AliasedTableExpr) // 目前暂不支持join和多表 todo if !ok { - return "", "", "", "", "", errors.New("don't support join table now") + return "", "", "", "", nil, errors.New("don't support join table now") } tableName = sqlparser.String(tableExpr) wherePart = sqlparser.String(s.Where) case *sqlparser.Update: if len(s.TableExprs) != 1 { - return "", "", "", "", "", errors.New("the number of table is more than one") + return "", "", "", "", nil, errors.New("the number of table is more than one") } tableExpr, ok := s.TableExprs[0].(*sqlparser.AliasedTableExpr) // 目前暂不支持join和多表 todo if !ok { - return "", "", "", "", "", errors.New("don't support join table now") + return "", "", "", "", nil, errors.New("don't support join table now") } tableName = sqlparser.String(tableExpr) wherePart = sqlparser.String(s.Where) } - // 选择出PK + // 获得该DML所相关表的PK信息,将其中的PK列组成字符串pkPart,形如"PKCol1,PKCol2,PKCol3" ctx := context.Background() - pkInfos, err := jc.getTablePkInfo(ctx, tableSchema, tableName) + pkInfos, err = jc.getTablePkInfo(ctx, tableSchema, tableName) if err != nil { - return "", "", "", "", "", err + return "", "", "", "", nil, err } pkPart = "" firstPK := true @@ -1242,65 +1195,119 @@ func (jc *JobController) genSelectBatchKeySQL(sql, tableSchema string) (selectSQ firstPK = false } + // 将该DML的各部分信息组成batch select语句,用于生成每一个batch的pk范围 selectSQL = fmt.Sprintf("select %s from %s.%s %s order by %s", pkPart, tableSchema, tableName, wherePart, pkPart) - // todo,支持多PK多类型 - countSQLTemplate, err = genCountSQLTemplate(tableSchema, tableName, wherePart, pkPart, pkInfos) - return selectSQL, countSQLTemplate, tableName, wherePart, pkPart, err + return selectSQL, tableName, wherePart, pkPart, pkInfos, err } -func genCountSQLTemplate(tableSchema, tableName, wherePart, pkPart string, pkInfos []PKInfo) (countSQLTemplate string, err error) { - // todo 当前是单pk的情况,后续需要考虑多pk - if len(pkInfos) == 0 { - return "", errors.New("the len of pkInfos is 0") - } - if len(pkInfos) == 1 { - switch pkInfos[0].pkType { - case querypb.Type_INT8, querypb.Type_INT16, querypb.Type_INT24, querypb.Type_INT32, querypb.Type_INT64: - countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between %%d AND %%d order by %s", - tableSchema, tableName, wherePart, pkPart, pkPart) +func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, tableName, wherePart, pkPart string, pkInfos []PKInfo, batchSize int64) (string, error) { + ctx := context.Background() - case querypb.Type_UINT8, querypb.Type_UINT16, querypb.Type_UINT24, querypb.Type_UINT32, querypb.Type_UINT64: - countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between %%d AND %%d order by %s", - tableSchema, tableName, wherePart, pkPart, pkPart) + // 执行selectSQL,获得有序的pk值结果集,以生成每一个batch要执行的batch SQL + qr, err := jc.execQuery(ctx, "", selectSQL) + if err != nil { + return "", err + } + if len(qr.Named().Rows) == 0 { + return "", nil + } - case querypb.Type_FLOAT32, querypb.Type_FLOAT64: - countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between %%f AND %%f order by %s", - tableSchema, tableName, wherePart, pkPart, pkPart) + // 为每一个DML job创建一张batch表,保存着该job被拆分成batches的具体信息。 + // healthCheck协程会定时对处于结束状态(completed,canceled,failed)的job的batch表进行回收 + batchTableName := "job_batch_table_" + strings.Replace(jobUUID, "-", "_", -1) + createTableSQL := fmt.Sprintf(`CREATE TABLE IF NOT EXISTS %s + ( + id bigint unsigned NOT NULL AUTO_INCREMENT, + batch_id DOUBLE NOT NULL, + batch_sql varchar(1024) NOT NULL, + batch_count_sql varchar(1024) NOT NULL, + batch_size bigint unsigned NOT NULL, + batch_status varchar(1024) NOT NULL DEFAULT 'Pending', + PRIMARY KEY (id) + ) ENGINE = InnoDB`, batchTableName) + _, err = jc.execQuery(ctx, tableSchema, createTableSQL) + if err != nil { + return "", err + } - // todo decimal类型能否转换成string待定 - case querypb.Type_TIMESTAMP, querypb.Type_DATE, querypb.Type_TIME, querypb.Type_DATETIME, querypb.Type_YEAR, - querypb.Type_DECIMAL, querypb.Type_TEXT, querypb.Type_VARCHAR, querypb.Type_CHAR, querypb.Type_BLOB: - countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between '%%s' AND '%%s' order by %s", - tableSchema, tableName, wherePart, pkPart, pkPart) + // 遍历每一行的每一个PK的值,记录每一个batch的开始和结束pk值(当有多个pk列时,需要记录多个pk值,pk可能具有不同的数据类型 + // 当遍历的行数达到一个batchSize时,即可生成一个batch所要执行的batch SQL,往batch表中插入一个条目 + currentBatchSize := int64(0) + var currentBatchStart []interface{} + var currentBatchEnd []interface{} + currentBatchID := float64(1) + insertBatchSQLWithTableName := fmt.Sprintf(insertBatchSQL, batchTableName) - default: - return "", fmt.Errorf("Unsupported type: %v", pkInfos[0].pkType) + // todo 对结果集为0的情况进行特判 + for _, row := range qr.Named().Rows { + var pkValues []interface{} + for _, pkInfo := range pkInfos { + pkName := pkInfo.pkName + keyVal, err := ProcessValue(row[pkName]) + pkValues = append(pkValues, keyVal) + if err != nil { + return "", err + } } - } else { - // 1. 生成>=的部分 - // 遍历PKName,不同的pk类型要对应不同的占位符 - greatThanPart, err := genPKsGreaterThanTemplate(pkInfos) + if currentBatchSize == 0 { + currentBatchStart = pkValues + } + currentBatchEnd = pkValues + currentBatchSize++ + if currentBatchSize == batchSize { + batchSQL, err := jc.genBatchSQL(sql, currentBatchStart, currentBatchEnd, pkInfos) + if err != nil { + return "", err + } + countSQL, err := genCountSQL(tableSchema, tableName, wherePart, pkPart, currentBatchStart, currentBatchEnd, pkInfos) + if err != nil { + return "", err + } + currentBatchSize = 0 + insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQLWithTableName, + sqltypes.Float64BindVariable(currentBatchID), + sqltypes.StringBindVariable(batchSQL), + sqltypes.StringBindVariable(countSQL), + sqltypes.Int64BindVariable(batchSize)) + if err != nil { + return "", err + } + _, err = jc.execQuery(ctx, tableSchema, insertBatchSQLQuery) + if err != nil { + return "", err + } + currentBatchID++ + } + } + // 最后一个batch的行数不一定是batchSize,在循环结束时要将剩余的行数划分到最后一个batch中 + if currentBatchSize != 0 { + batchSQL, err := jc.genBatchSQL(sql, currentBatchStart, currentBatchEnd, pkInfos) if err != nil { return "", err } - - // 2.生成<=的部分 - lessThanPart, err := genPKsLessThanTemplate(pkInfos) + countSQL, err := genCountSQL(tableSchema, tableName, wherePart, pkPart, currentBatchStart, currentBatchEnd, pkInfos) + if err != nil { + return "", err + } + insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQLWithTableName, + sqltypes.Float64BindVariable(currentBatchID), + sqltypes.StringBindVariable(batchSQL), + sqltypes.StringBindVariable(countSQL), + sqltypes.Int64BindVariable(currentBatchSize)) + if err != nil { + return "", err + } + _, err = jc.execQuery(ctx, tableSchema, insertBatchSQLQuery) if err != nil { return "", err } - - // 3.将各部分拼接成最终的template - countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND ( (%s) AND (%s) )", - tableSchema, tableName, wherePart, greatThanPart, lessThanPart) } - return countSQLTemplate, nil + return batchTableName, nil } func genCountSQL(tableSchema, tableName, wherePart, pkPart string, currentBatchStart, currentBatchEnd []interface{}, pkInfos []PKInfo) (countSQLTemplate string, err error) { - // todo 当前是单pk的情况,后续需要考虑多pk if len(pkInfos) == 0 { return "", errors.New("the len of pkInfos is 0") } @@ -1348,64 +1355,6 @@ func genCountSQL(tableSchema, tableName, wherePart, pkPart string, currentBatchS return countSQLTemplate, nil } -func genPKsGreaterThanTemplate(pkInfos []PKInfo) (string, error) { - curIdx := 0 - pksNum := len(pkInfos) - var equalStr, rst string - for curIdx < pksNum { - curPkName := pkInfos[curIdx].pkName - curPKType := pkInfos[curIdx].pkType - - placeholder, err := genPlaceholderByType(curPKType) - if err != nil { - return "", err - } - - if curIdx == 0 { - rst = fmt.Sprintf("( %s >= %s )", curPkName, placeholder) - } else { - rst += fmt.Sprintf(" OR ( %s AND %s >= %s )", equalStr, curPkName, placeholder) - } - - if curIdx == 0 { - equalStr = fmt.Sprintf("%s = %s", curPkName, placeholder) - } else { - equalStr += fmt.Sprintf(" AND %s = %s", curPkName, placeholder) - } - curIdx++ - } - return rst, nil -} - -func genPKsLessThanTemplate(pkInfos []PKInfo) (string, error) { - curIdx := 0 - pksNum := len(pkInfos) - var equalStr, rst string - for curIdx < pksNum { - curPkName := pkInfos[curIdx].pkName - curPKType := pkInfos[curIdx].pkType - - placeholder, err := genPlaceholderByType(curPKType) - if err != nil { - return "", err - } - - if curIdx == 0 { - rst = fmt.Sprintf("( %s <= %s )", curPkName, placeholder) - } else { - rst += fmt.Sprintf(" OR ( %s AND %s <= %s )", equalStr, curPkName, placeholder) - } - - if curIdx == 0 { - equalStr = fmt.Sprintf("%s = %s", curPkName, placeholder) - } else { - equalStr += fmt.Sprintf(" AND %s = %s", curPkName, placeholder) - } - curIdx++ - } - return rst, nil -} - func genPlaceholderByType(typ querypb.Type) (string, error) { switch typ { case querypb.Type_INT8, querypb.Type_INT16, querypb.Type_INT24, querypb.Type_INT32, querypb.Type_INT64: @@ -1494,127 +1443,6 @@ const ( ) values (%%a,%%a,%%a,%%a)` ) -// 创建表,todo 表gc -// todo,discussion,建表的过程中需要放在一个事务内,防止崩了,由于一个事务容纳的数据有限,oom,因此需要多个事务? -func (jc *JobController) genBatchTable(jobUUID, selectSQL, countSQLTemplate, tableSchema, sql, tableName, wherePart, pkPart string, pkInfos []PKInfo, batchSize int64) (string, error) { - ctx := context.Background() - - qr, err := jc.execQuery(ctx, "", selectSQL) - if err != nil { - return "", err - } - if len(qr.Named().Rows) == 0 { - return "", nil - } - - // 建表 - batchTableName := "job_batch_table_" + strings.Replace(jobUUID, "-", "_", -1) - createTableSQL := fmt.Sprintf(`CREATE TABLE IF NOT EXISTS %s - ( - id bigint unsigned NOT NULL AUTO_INCREMENT, - batch_id DOUBLE NOT NULL, - batch_sql varchar(1024) NOT NULL, - batch_count_sql varchar(1024) NOT NULL, - batch_size bigint unsigned NOT NULL, - batch_status varchar(1024) NOT NULL DEFAULT 'Pending', - PRIMARY KEY (id) - ) ENGINE = InnoDB`, batchTableName) - - _, err = jc.execQuery(ctx, tableSchema, createTableSQL) - if err != nil { - return "", err - } - - // todo,处理多pk的情况 - // todo 处理不同类型的PK - // todo 创建一个新的value结构,表示PK的名字和类型 - currentBatchSize := int64(0) - var currentBatchStart []interface{} - var currentBatchEnd []interface{} - currentBatchID := float64(1) - - insertBatchSQLWithTableName := fmt.Sprintf(insertBatchSQL, batchTableName) - - var pkName string - - // todo 对结果集为0的情况进行特判 - for _, row := range qr.Named().Rows { - var pkValues []interface{} - for _, pkInfo := range pkInfos { - pkName = pkInfo.pkName - // todo,对于每一列PK的值类型进行判断 - keyVal, err := ProcessValue(row[pkName]) - pkValues = append(pkValues, keyVal) - if err != nil { - return "", err - } - } - - if currentBatchSize == 0 { - currentBatchStart = pkValues - } - currentBatchEnd = pkValues - currentBatchSize++ // 改成多pk后要移出去 todo - if currentBatchSize == batchSize { - // between是一个闭区间,batch job的sql也是闭区间 - // todo 处理多pk - batchSQL, err := jc.genBatchSQL(sql, currentBatchStart, currentBatchEnd, pkInfos) - if err != nil { - return "", err - } - // todo 处理多pk - //countSQL := fmt.Sprintf(countSQLTemplate, currentBatchStart, currentBatchEnd) - countSQL, err := genCountSQL(tableSchema, tableName, wherePart, pkPart, currentBatchStart, currentBatchEnd, pkInfos) - if err != nil { - return "", err - } - currentBatchSize = 0 - // insert into table - insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQLWithTableName, - sqltypes.Float64BindVariable(currentBatchID), - sqltypes.StringBindVariable(batchSQL), - sqltypes.StringBindVariable(countSQL), - sqltypes.Int64BindVariable(int64(batchSize))) - if err != nil { - return "", err - } - _, err = jc.execQuery(ctx, tableSchema, insertBatchSQLQuery) - if err != nil { - return "", err - } - currentBatchID++ // 改成多pk后要移出循环 todo - - } - } - //最后一个batch - if currentBatchSize != 0 { - // todo 处理多pk - batchSQL, err := jc.genBatchSQL(sql, currentBatchStart, currentBatchEnd, pkInfos) - if err != nil { - return "", err - } - // todo 处理多pk - //countSQL := fmt.Sprintf(countSQLTemplate, currentBatchStart, currentBatchEnd) - countSQL, err := genCountSQL(tableSchema, tableName, wherePart, pkPart, currentBatchStart, currentBatchEnd, pkInfos) - if err != nil { - return "", err - } - insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQLWithTableName, - sqltypes.Float64BindVariable(currentBatchID), - sqltypes.StringBindVariable(batchSQL), - sqltypes.StringBindVariable(countSQL), - sqltypes.Int64BindVariable(int64(currentBatchSize))) - if err != nil { - return "", err - } - _, err = jc.execQuery(ctx, tableSchema, insertBatchSQLQuery) - if err != nil { - return "", err - } - } - return batchTableName, nil -} - func ProcessValue(value sqltypes.Value) (interface{}, error) { typ := value.Type() diff --git a/go/vt/vttablet/queryservice/wrapped.go b/go/vt/vttablet/queryservice/wrapped.go index 0600357a01..b14ad338bb 100644 --- a/go/vt/vttablet/queryservice/wrapped.go +++ b/go/vt/vttablet/queryservice/wrapped.go @@ -375,11 +375,11 @@ func (ws *wrappedService) SetFailPoint(ctx context.Context, command string, key }) } -func (ws *wrappedService) SubmitDMLJob(ctx context.Context, cmd, sql, uuid, tableSchema string, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (qr *sqltypes.Result, err error) { +func (ws *wrappedService) SubmitDMLJob(ctx context.Context, cmd, sql, uuid, tableSchema string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (qr *sqltypes.Result, err error) { err = ws.wrapper(ctx, nil, ws.impl, "SubmitDMLJob", false, nil, func(ctx context.Context, target *querypb.Target, conn QueryService) (bool, error) { // todo newborn22,这个地方是否要canRetry? 参考 dropschema var innerErr error - qr, innerErr = conn.SubmitDMLJob(ctx, cmd, sql, uuid, tableSchema, timeGapInMs, subtaskRows, postponeLaunch, autoRetry) + qr, innerErr = conn.SubmitDMLJob(ctx, cmd, sql, uuid, tableSchema, timeGapInMs, batchSize, postponeLaunch, autoRetry) return canRetry(ctx, innerErr), innerErr }) return qr, err diff --git a/go/vt/vttablet/sandboxconn/sandboxconn.go b/go/vt/vttablet/sandboxconn/sandboxconn.go index 7fd964ebee..ed354f905d 100644 --- a/go/vt/vttablet/sandboxconn/sandboxconn.go +++ b/go/vt/vttablet/sandboxconn/sandboxconn.go @@ -625,7 +625,7 @@ func (sbc *SandboxConn) SetFailPoint(ctx context.Context, command string, key st return err } -func (sbc *SandboxConn) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema string, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (sbc *SandboxConn) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { return nil, nil } diff --git a/go/vt/vttablet/tabletconntest/fakequeryservice.go b/go/vt/vttablet/tabletconntest/fakequeryservice.go index fad3ef22b2..5b298859c4 100644 --- a/go/vt/vttablet/tabletconntest/fakequeryservice.go +++ b/go/vt/vttablet/tabletconntest/fakequeryservice.go @@ -71,7 +71,7 @@ func (f *FakeQueryService) SetFailPoint(ctx context.Context, command string, key return nil } -func (f *FakeQueryService) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema string, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (f *FakeQueryService) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { panic("implement me") } diff --git a/go/vt/vttablet/tabletserver/tabletserver.go b/go/vt/vttablet/tabletserver/tabletserver.go index c40462a7a6..7e13253b28 100644 --- a/go/vt/vttablet/tabletserver/tabletserver.go +++ b/go/vt/vttablet/tabletserver/tabletserver.go @@ -1496,9 +1496,9 @@ func (tsv *TabletServer) SetFailPoint(ctx context.Context, command string, key s } // todo newborn22,改名,submitDMLjob -func (tsv *TabletServer) SubmitDMLJob(ctx context.Context, command, sql, jobUUID, tableSchema string, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (tsv *TabletServer) SubmitDMLJob(ctx context.Context, command, sql, jobUUID, tableSchema string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { // todo newborn22, 这个地方要进行封装?,变成更通用的 - return tsv.dmlJonController.HandleRequest(command, sql, jobUUID, tableSchema, "", nil, timeGapInMs, subtaskRows, postponeLaunch, autoRetry) + return tsv.dmlJonController.HandleRequest(command, sql, jobUUID, tableSchema, "", nil, timeGapInMs, batchSize, postponeLaunch, autoRetry) } // execRequest performs verifications, sets up the necessary environments diff --git a/proto/query.proto b/proto/query.proto index cdbb10cc8d..9fc044bc85 100644 --- a/proto/query.proto +++ b/proto/query.proto @@ -1091,7 +1091,7 @@ message SubmitDMLJobRequest{ string sql = 3; string related_schema= 4; int64 timegap = 6; - int64 subtask_rows = 7; + int64 batch_size = 7; bool auto_retry = 8; bool postpone_launch = 9; } From 16cf5bb6b68bd98c12d48d97ab12391ed99e2ccd Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Thu, 21 Dec 2023 20:19:09 +0800 Subject: [PATCH 13/54] fix: rename function Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/vttablet/jobcontroller/controller.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 8079b58d95..9d4827973a 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -243,7 +243,7 @@ func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, batchSi batchSize = int64(defaultBatchSize) } - tableName, jobBatchTable, err := jc.createBatchJob(jobUUID, sql, tableSchema, batchSize) + tableName, jobBatchTable, err := jc.createJobBatches(jobUUID, sql, tableSchema, batchSize) if err != nil { return &sqltypes.Result{}, err } @@ -1137,7 +1137,7 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { } } -func (jc *JobController) createBatchJob(jobUUID, sql, tableSchema string, batchSize int64) (tableName, batchTableName string, err error) { +func (jc *JobController) createJobBatches(jobUUID, sql, tableSchema string, batchSize int64) (tableName, batchTableName string, err error) { // 1.解析用户提交的DML sql,返回DML的各个部分。其中selectSQL用于确定每一个batch的pk范围,生成每一个batch所要执行的batch sql selectSQL, tableName, wherePart, pkPart, pkInfos, err := jc.parseDML(sql, tableSchema) if err != nil { From ca7b83acc41c660b2c72182a9f27865f5f7a573e Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Fri, 22 Dec 2023 20:30:18 +0800 Subject: [PATCH 14/54] feat: support dynamic batch split Signed-off-by: newborn22 <953950914@qq.com> --- .../schema/job/big_dml_jobs_table.sql | 2 +- go/vt/vttablet/jobcontroller/controller.go | 292 +++++++++++++++--- 2 files changed, 245 insertions(+), 49 deletions(-) diff --git a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql index 6f968957a7..814b44a760 100644 --- a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql +++ b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql @@ -32,6 +32,6 @@ CREATE TABLE IF NOT EXISTS mysql.big_dml_jobs_table `affected_rows` bigint NOT NULL DEFAULT 0, `throttle_ratio` double NULL DEFAULT NULL, `throttle_expire_time` varchar(256) NULL DEFAULT NULL, - `dealing_batch_id` double NULL DEFAULT NULL, + `dealing_batch_id` varchar(256) NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE = InnoDB diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 9d4827973a..2e848d2f94 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -58,8 +58,8 @@ const ( const ( defaultTimeGap = 1000 // 1000ms - defaultBatchSize = 100 - defaultThreshold = 3000 // todo,通过函数来计算出threshold并传入runner中,要依据索引的个数 + defaultBatchSize = 150 + defaultThreshold = 100 // todo,通过函数来计算出threshold并传入runner中,要依据索引的个数 ) const ( @@ -137,7 +137,7 @@ const ( ) const ( - tableEntryGCTimeGap = 30 * time.Second // todo 改成更长的值,为了测试只设了30s + tableEntryGCTimeGap = 3000 * time.Second // todo 改成更长的值,为了测试只设了30s ) type JobController struct { @@ -577,26 +577,26 @@ const ( getDealingBatchIDSQL = `select dealing_batch_id from mysql.big_dml_jobs_table where job_uuid = %a` updateDealingBatchIDSQL = `update mysql.big_dml_jobs_table set dealing_batch_id = %a where job_uuid = %a` getBatchSQLsByID = `select batch_sql,batch_count_sql from %s where batch_id = %%a` - getMaxBatchID = `select max(batch_id) as max_batch_id from %s` + getMaxBatchID = `select batch_id as max_batch_id from %s order by id desc limit 1` ) -func (jc *JobController) getDealingBatchID(ctx context.Context, uuid string) (float64, error) { +func (jc *JobController) getDealingBatchID(ctx context.Context, uuid string) (string, error) { jc.tableMutex.Lock() defer jc.tableMutex.Unlock() submitQuery, err := sqlparser.ParseAndBind(getDealingBatchIDSQL, sqltypes.StringBindVariable(uuid)) if err != nil { - return 0, err + return "", err } qr, err := jc.execQuery(ctx, "", submitQuery) if err != nil { - return 0, err + return "", err } if len(qr.Named().Rows) != 1 { - return 0, errors.New("the len of query result of batch ID is not one") + return "", errors.New("the len of query result of batch ID is not one") } - return qr.Named().Rows[0].ToFloat64("dealing_batch_id") + return qr.Named().Rows[0].ToString("dealing_batch_id") } func (jc *JobController) updateDealingBatchID(ctx context.Context, uuid string, batchID float64) error { @@ -617,10 +617,10 @@ func (jc *JobController) updateDealingBatchID(ctx context.Context, uuid string, } // todo to confirm,对于同一个job的batch表只有一个线程在访问,因此不用加锁 -func (jc *JobController) getBatchSQLsByID(ctx context.Context, batchID float64, batchTableName, tableSchema string) (batchSQL, batchCountSQL string, err error) { +func (jc *JobController) getBatchSQLsByID(ctx context.Context, batchID, batchTableName, tableSchema string) (batchSQL, batchCountSQL string, err error) { getBatchSQLWithTableName := fmt.Sprintf(getBatchSQLsByID, batchTableName) query, err := sqlparser.ParseAndBind(getBatchSQLWithTableName, - sqltypes.Float64BindVariable(batchID)) + sqltypes.StringBindVariable(batchID)) if err != nil { return "", "", err } @@ -636,19 +636,19 @@ func (jc *JobController) getBatchSQLsByID(ctx context.Context, batchID float64, return batchSQL, batchCountSQL, nil } -func (jc *JobController) getMaxBatchID(ctx context.Context, batchTableName, tableSchema string) (float64, error) { +func (jc *JobController) getMaxBatchID(ctx context.Context, batchTableName, tableSchema string) (string, error) { getMaxBatchIDWithTableName := fmt.Sprintf(getMaxBatchID, batchTableName) qr, err := jc.execQuery(ctx, tableSchema, getMaxBatchIDWithTableName) if err != nil { - return 0, err + return "", err } if len(qr.Named().Rows) != 1 { - return 0, errors.New("the len of qr of getting batch sql by ID is not 1") + return "", errors.New("the len of qr of getting batch sql by ID is not 1") } - return qr.Named().Rows[0].ToFloat64("max_batch_id") + return qr.Named().Rows[0].ToString("max_batch_id") } -func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, batchSQL, batchCountSQL, uuid, batchTable string, threshold int64, batchID float64) (nextBatchID float64, err error) { +func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, table, batchSQL, batchCountSQL, uuid, batchTable, batchID string, threshold int64) (nextBatchID string, err error) { defer jc.env.LogError() var setting pools.Setting @@ -659,48 +659,191 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ba conn, err := jc.pool.Get(ctx, &setting) defer conn.Recycle() if err != nil { - return 0, err + return "", err } // 1.开启事务 + // todo,wantfield是否要设置成false _, err = conn.Exec(ctx, "start transaction", math.MaxInt32, true) if err != nil { - return 0, err + return "", err } // 2.查询batch sql预计影响的行数,如果超过阈值,则生成新的batch ID - batchCountSQL += " FOR SHARE" - qr, err := conn.Exec(ctx, batchCountSQL, math.MaxInt32, true) + batchCountSQLForShare := batchCountSQL + " FOR SHARE" + qr, err := conn.Exec(ctx, batchCountSQLForShare, math.MaxInt32, true) if err != nil { - return 0, err + return "", err } if len(qr.Named().Rows) != 1 { - return 0, errors.New("the len of qr of count expected batch size is not 1") + return "", errors.New("the len of qr of count expected batch size is not 1") } expectedRow, _ := qr.Named().Rows[0].ToInt64("count_rows") if expectedRow > threshold { // todo,递归生成新的batch - fmt.Printf("expectedRow > threshold") + // todo将下面的每一个小步封装在函数中 + // 1).根据batchCountSQL生成查询pk值的select sql + // 1.1).获得PK信息 + pkInfos, err := jc.getTablePkInfo(ctx, tableSchema, table) + if err != nil { + return "", err + } + isFirstPk := true + pkPart := "" + for _, pkInfo := range pkInfos { + if !isFirstPk { + pkPart += "," + } + pkPart += pkInfo.pkName + isFirstPk = false + } + //1.2).生成select sql + batchSplitSelectSQL := strings.Replace(batchCountSQL, "count(*) as count_rows", pkPart, 1) + "order by " + pkPart + + // 2).根据select sql将batch拆分,生成两个新的batch。 + //这里每次只将超过threshold的batch拆成两个batch而不是多个小于等于threshold的batch的原因是: + // 拆成多个batch需要遍历完select的全部结果,这可能会导致超时 + + // 2.1).计算两个batch的batchPKStart和batchPKEnd。实际上,只要获得当前batch的新的PKEnd和新的batch的PKStart + + // 遍历前threshold+1条,依然使用同一个连接 + qr, err = conn.Exec(ctx, batchSplitSelectSQL, math.MaxInt32, true) + if err != nil { + return "", err + } + + var curBatchNewEnd []interface{} + var newBatchStart []interface{} + + for rowCount, row := range qr.Named().Rows { + // 将原本batch的PKEnd设在threshold条数处 + if int64(rowCount) == threshold-1 { + for _, pkInfo := range pkInfos { + pkName := pkInfo.pkName + keyVal, err := ProcessValue(row[pkName]) + if err != nil { + return "", err + } + curBatchNewEnd = append(curBatchNewEnd, keyVal) + } + } + // 将第threshold+1条的PK作为新PK的起点 + if int64(rowCount) == threshold { + for _, pkInfo := range pkInfos { + pkName := pkInfo.pkName + keyVal, err := ProcessValue(row[pkName]) + if err != nil { + return "", err + } + newBatchStart = append(newBatchStart, keyVal) + } + } + } + + // 2.2) 将curBatchNewEnd和newBatchStart转换成sql中where部分的<=和>=的字符串 + curBatchLessThanPart, err := genPKsLessThanPart(pkInfos, curBatchNewEnd) + if err != nil { + return "", err + } + + newBatchGreatThanPart, err := genPKsGreaterThanPart(pkInfos, newBatchStart) + if err != nil { + return "", err + } + + // 2.3) 通过正则表达式,获得原先batchSQL中的great than和less than部分,作为当前batch的great than和新batch的less than部分 + // 定义正则表达式,匹配"( (greatThanPart) AND (lessThanPart) )" + + curBatchGreatThanPart := "" + newBatchLessThanPart := "" + + regexPattern := `\(\s*\((.*)\)\s*AND\s*\((.*)\)\s*\)` + + // 编译正则表达式 + regex := regexp.MustCompile(regexPattern) + + // 查找匹配项 + matches := regex.FindAllStringSubmatch(batchSQL, -1) + + // 如果有匹配项,只取最后一个匹配的结果,因为用户自己输入的where条件中也可能存在这样的格式 + pkScopePart := "" + if len(matches) > 0 { + lastMatch := matches[len(matches)-1] + if len(lastMatch) == 3 { + pkScopePart = lastMatch[0] + curBatchGreatThanPart = lastMatch[1] + newBatchLessThanPart = lastMatch[2] + } + } else { + return "", errors.New("can not match greatThan and lessThan parts by regex") + } + + // 2.4) 生成拆分后,当前batch的sql和新batch的sql + batchSQLCommonPart := strings.Replace(batchSQL, pkScopePart, "", 1) + batchCountSQLCommonPart := strings.Replace(batchCountSQL, pkScopePart, "", 1) + curBatchSQL := batchSQLCommonPart + fmt.Sprintf("( (%s) AND (%s) )", curBatchGreatThanPart, curBatchLessThanPart) + newBatchSQL := batchSQLCommonPart + fmt.Sprintf("( (%s) AND (%s) )", newBatchGreatThanPart, newBatchLessThanPart) + newBatchCountSQL := batchCountSQLCommonPart + fmt.Sprintf("( (%s) AND (%s) )", newBatchGreatThanPart, newBatchLessThanPart) + + // 2.5) 在batch表中更改旧的条目的sql,并插入新batch条目 + // 在表中更改旧的sql + // todo,更改原本条目中的size为threshold + updateBatchSQL := fmt.Sprintf("update %s set batch_sql=%%a where batch_id=%%a", batchTable) + updateBatchSQLQuery, err := sqlparser.ParseAndBind(updateBatchSQL, + sqltypes.StringBindVariable(curBatchSQL), + sqltypes.StringBindVariable(batchID)) + if err != nil { + return "", err + } + _, err = conn.Exec(ctx, updateBatchSQLQuery, math.MaxInt32, true) + if err != nil { + return "", err + } + batchSQL = curBatchSQL + + // 生成新的table条目并插入 + newBatchID := batchID + "+" + nextBatchID = newBatchID + newBatchSize := expectedRow - threshold + + insertBatchSQL := fmt.Sprintf(insertBatchSQL, batchTable) + insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQL, + sqltypes.StringBindVariable(newBatchID), + sqltypes.StringBindVariable(newBatchSQL), + sqltypes.StringBindVariable(newBatchCountSQL), + sqltypes.Int64BindVariable(newBatchSize)) + if err != nil { + return "", err + } + _, err = conn.Exec(ctx, insertBatchSQLQuery, math.MaxInt32, true) + if err != nil { + return "", err + } + + hhh := fmt.Sprintf("%s %s %s %s", curBatchGreatThanPart, curBatchLessThanPart, newBatchGreatThanPart, newBatchLessThanPart) + fmt.Printf("%s", hhh) + } // 3.执行batch sql qr, err = conn.Exec(ctx, batchSQL, math.MaxInt32, true) if err != nil { - return 0, err + return "", err } // 4.记录batch sql已经完成,将行数增加到affected rows中 // 4.1在batch table中记录 - updateBatchStatus := fmt.Sprintf("update %s set batch_status = %%a where batch_id = %%a", batchTable) + updateBatchStatus := fmt.Sprintf("update %s set batch_status = %%a,actually_affected_rows = actually_affected_rows+%%a where batch_id = %%a", batchTable) updateBatchStatusDoneSQL, err := sqlparser.ParseAndBind(updateBatchStatus, sqltypes.StringBindVariable("Done"), - sqltypes.Float64BindVariable(batchID)) + sqltypes.Int64BindVariable(int64(qr.RowsAffected)), + sqltypes.StringBindVariable(batchID)) if err != nil { - return 0, err + return "", err } _, err = conn.Exec(ctx, updateBatchStatusDoneSQL, math.MaxInt32, true) if err != nil { - return 0, err + return "", err } // 4.2在job表中记录 @@ -708,30 +851,35 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ba sqltypes.Int64BindVariable(int64(qr.RowsAffected)), sqltypes.StringBindVariable(uuid)) if err != nil { - return 0, err + return "", err } jc.tableMutex.Lock() defer jc.tableMutex.Unlock() _, err = conn.Exec(ctx, updateAffectedRowsSQL, math.MaxInt32, true) if err != nil { - return 0, err + return "", err } - // 5.更新正在处理的batch ID - nextBatchID = batchID + 1 // todo,考虑生成新batch的情况,如何正确地获得下一个batch ID? + // 5.获得新的batchID,更新正在处理的batch ID + if nextBatchID != "" { + nextBatchID, err = currentBatchIDInc(batchID) // todo,考虑生成新batch的情况,如何正确地获得下一个batch ID? + } + if err != nil { + return "", err + } submitQuery, err := sqlparser.ParseAndBind(updateDealingBatchIDSQL, - sqltypes.Float64BindVariable(nextBatchID), + sqltypes.StringBindVariable(nextBatchID), sqltypes.StringBindVariable(uuid)) _, err = conn.Exec(ctx, submitQuery, math.MaxInt32, true) if err != nil { - return 0, err + return "", err } // 6.提交事务 _, err = conn.Exec(ctx, "commit", math.MaxInt32, true) if err != nil { - return 0, err + return "", err } return nextBatchID, nil } @@ -776,6 +924,11 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTabl jc.FailJob(ctx, uuid, err.Error(), table) return } + maxBatchIDInt, err := strconv.ParseInt(maxBatchID, 10, 64) + if err != nil { + jc.FailJob(ctx, uuid, err.Error(), table) + return + } // 在一个无限循环中等待定时器触发 for range timer.C { @@ -801,12 +954,21 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTabl return } - currentBatchID, err = jc.execBatchAndRecord(ctx, relatedSchema, batchSQL, batchCountSQL, uuid, batchTable, defaultThreshold, currentBatchID) + // 执行当前batch的batch sql,并获得下一要执行的batchID + // todo,将defaultThreshold换成batchSize? 还是说可以超过batchSize但是不超过阈值就行。 + // todo 在batch table中添加一个字段,记录实际执行的行数 + currentBatchID, err = jc.execBatchAndRecord(ctx, relatedSchema, table, batchSQL, batchCountSQL, uuid, batchTable, currentBatchID, defaultThreshold) + if err != nil { + jc.FailJob(ctx, uuid, err.Error(), table) + return + } + // todo,不能简单地字典序比较 + jobDone, err := isAllBatchDone(currentBatchID, maxBatchIDInt) if err != nil { jc.FailJob(ctx, uuid, err.Error(), table) return } - if currentBatchID > maxBatchID { + if jobDone { // todo,将completeJob移动到execBatchAndRecord中,确保原子性 _, err = jc.CompleteJob(ctx, uuid, table) if err != nil { @@ -817,6 +979,25 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTabl } } +func isAllBatchDone(currentBatchID string, maxBatchIDInt int64) (bool, error) { + var currentBatchIDInt int64 + var err error + parts := strings.Split(currentBatchID, "+") + if len(parts) == 0 { + currentBatchIDInt, err = strconv.ParseInt(currentBatchID, 10, 64) + if err != nil { + return false, err + } + } else { + currentBatchIDInt, err = strconv.ParseInt(parts[0], 10, 64) + if err != nil { + return false, err + } + } + + return currentBatchIDInt > maxBatchIDInt, nil +} + // 注意在外面拿锁, todo,换成在里面拿锁? func (jc *JobController) initDMLJobRunningMeta(uuid, table string) { //jc.workingTablesMutex.Lock() @@ -1100,8 +1281,6 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { for { // todo, 增加对长时间未增加 rows的处理 - // todo,对于cancel和failed 垃圾条目的删除 - jc.tableMutex.Lock() qr, _ := jc.execQuery(ctx, "", sqlDMLJobGetAllJobs) if qr != nil { @@ -1220,10 +1399,11 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, createTableSQL := fmt.Sprintf(`CREATE TABLE IF NOT EXISTS %s ( id bigint unsigned NOT NULL AUTO_INCREMENT, - batch_id DOUBLE NOT NULL, + batch_id varchar(1024) NOT NULL, batch_sql varchar(1024) NOT NULL, batch_count_sql varchar(1024) NOT NULL, batch_size bigint unsigned NOT NULL, + actually_affected_rows bigint unsigned NOT NULL DEFAULT 0, batch_status varchar(1024) NOT NULL DEFAULT 'Pending', PRIMARY KEY (id) ) ENGINE = InnoDB`, batchTableName) @@ -1237,7 +1417,7 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, currentBatchSize := int64(0) var currentBatchStart []interface{} var currentBatchEnd []interface{} - currentBatchID := float64(1) + currentBatchID := "1" insertBatchSQLWithTableName := fmt.Sprintf(insertBatchSQL, batchTableName) // todo 对结果集为0的情况进行特判 @@ -1267,7 +1447,7 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, } currentBatchSize = 0 insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQLWithTableName, - sqltypes.Float64BindVariable(currentBatchID), + sqltypes.StringBindVariable(currentBatchID), sqltypes.StringBindVariable(batchSQL), sqltypes.StringBindVariable(countSQL), sqltypes.Int64BindVariable(batchSize)) @@ -1278,7 +1458,10 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, if err != nil { return "", err } - currentBatchID++ + currentBatchID, err = currentBatchIDInc(currentBatchID) + if err != nil { + return "", err + } } } // 最后一个batch的行数不一定是batchSize,在循环结束时要将剩余的行数划分到最后一个batch中 @@ -1292,7 +1475,7 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, return "", err } insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQLWithTableName, - sqltypes.Float64BindVariable(currentBatchID), + sqltypes.StringBindVariable(currentBatchID), sqltypes.StringBindVariable(batchSQL), sqltypes.StringBindVariable(countSQL), sqltypes.Int64BindVariable(currentBatchSize)) @@ -1307,6 +1490,15 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, return batchTableName, nil } +func currentBatchIDInc(currentBatchID string) (string, error) { + currentBatchIDInt64, err := strconv.ParseInt(currentBatchID, 10, 64) + if err != nil { + return "", err + } + currentBatchIDInt64++ + return strconv.FormatInt(currentBatchIDInt64, 10), nil +} + func genCountSQL(tableSchema, tableName, wherePart, pkPart string, currentBatchStart, currentBatchEnd []interface{}, pkInfos []PKInfo) (countSQLTemplate string, err error) { if len(pkInfos) == 0 { return "", errors.New("the len of pkInfos is 0") @@ -1386,8 +1578,10 @@ func genPKsGreaterThanPart(pkInfos []PKInfo, currentBatchStart []interface{}) (s } if curIdx == 0 { - rst = fmt.Sprintf("( %s >= %s )", curPkName, placeholder) - } else { + rst = fmt.Sprintf("( %s > %s )", curPkName, placeholder) + } else if curIdx != (pksNum - 1) { + rst += fmt.Sprintf(" OR ( %s AND %s > %s )", equalStr, curPkName, placeholder) + } else if curIdx == (pksNum - 1) { rst += fmt.Sprintf(" OR ( %s AND %s >= %s )", equalStr, curPkName, placeholder) } rst = fmt.Sprintf(rst, currentBatchStart[curIdx]) @@ -1417,8 +1611,10 @@ func genPKsLessThanPart(pkInfos []PKInfo, currentBatchEnd []interface{}) (string } if curIdx == 0 { - rst = fmt.Sprintf("( %s <= %s )", curPkName, placeholder) - } else { + rst = fmt.Sprintf("( %s < %s )", curPkName, placeholder) + } else if curIdx != (pksNum - 1) { + rst += fmt.Sprintf(" OR ( %s AND %s < %s )", equalStr, curPkName, placeholder) + } else if curIdx == (pksNum - 1) { rst += fmt.Sprintf(" OR ( %s AND %s <= %s )", equalStr, curPkName, placeholder) } rst = fmt.Sprintf(rst, currentBatchEnd[curIdx]) From 5a1346d181c6b35aafb645c3b4660244fc113b5d Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Sat, 23 Dec 2023 20:22:37 +0800 Subject: [PATCH 15/54] fix: fix some bugs in nextBatchID generation; batchSize is min(threshold,userBatchSize) Signed-off-by: newborn22 <953950914@qq.com> --- .../schema/job/big_dml_jobs_table.sql | 2 +- go/vt/vttablet/jobcontroller/controller.go | 50 ++++++++++++------- 2 files changed, 32 insertions(+), 20 deletions(-) diff --git a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql index 814b44a760..7319542552 100644 --- a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql +++ b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql @@ -28,7 +28,7 @@ CREATE TABLE IF NOT EXISTS mysql.big_dml_jobs_table `related_schema` varchar(256) NOT NULL, `related_table` varchar(256) NOT NULL, `timegap_in_ms` bigint NOT NULL , - `subtask_rows` bigint NOT NULL , + `batch_size` bigint NOT NULL , `affected_rows` bigint NOT NULL DEFAULT 0, `throttle_ratio` double NULL DEFAULT NULL, `throttle_expire_time` varchar(256) NULL DEFAULT NULL, diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 2e848d2f94..3788bd24f9 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -82,7 +82,7 @@ const ( related_table, job_batch_table, timegap_in_ms, - subtask_rows, + batch_size, job_status, status_set_time) values(%a,%a,%a,%a,%a,%a,%a,%a,%a)` @@ -197,12 +197,12 @@ func NewJobController(tableName string, tabletTypeFunc func() topodatapb.TabletT } // todo newborn22 , 能否改写得更有通用性? 这样改写是否好? -func (jc *JobController) HandleRequest(command, sql, jobUUID, tableSchema, expireString string, ratioLiteral *sqlparser.Literal, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (jc *JobController) HandleRequest(command, sql, jobUUID, tableSchema, expireString string, ratioLiteral *sqlparser.Literal, timeGapInMs, usrBatchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { // todo newborn22, if 可以删掉 if jc.tabletTypeFunc() == topodatapb.TabletType_PRIMARY { switch command { case SubmitJob: - return jc.SubmitJob(sql, tableSchema, timeGapInMs, batchSize, postponeLaunch, autoRetry) + return jc.SubmitJob(sql, tableSchema, timeGapInMs, usrBatchSize, postponeLaunch, autoRetry) case ShowJobs: return jc.ShowJobs() case PauseJob: @@ -225,7 +225,7 @@ func (jc *JobController) HandleRequest(command, sql, jobUUID, tableSchema, expir // todo newboen22 函数的可见性,封装性上的改进? // todo 传timegap和table_name -func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, userBatchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { jc.tableMutex.Lock() defer jc.tableMutex.Unlock() @@ -239,8 +239,15 @@ func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, batchSi if timeGapInMs == 0 { timeGapInMs = int64(defaultTimeGap) } - if batchSize == 0 { - batchSize = int64(defaultBatchSize) + if userBatchSize == 0 { + userBatchSize = int64(defaultBatchSize) + } + // 取用户输入的batchSize和程序的threshold的最小值作为每个batch最终的batchSize + var batchSize int64 + if userBatchSize < defaultThreshold { + batchSize = userBatchSize + } else { + batchSize = defaultThreshold } tableName, jobBatchTable, err := jc.createJobBatches(jobUUID, sql, tableSchema, batchSize) @@ -273,7 +280,7 @@ func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, batchSi return &sqltypes.Result{}, err } // todo 增加 recursive-split,递归拆分batch的选项 - return jc.buildJobSubmitResult(jobUUID, jobBatchTable, timeGapInMs, batchSize, postponeLaunch, autoRetry), nil + return jc.buildJobSubmitResult(jobUUID, jobBatchTable, timeGapInMs, userBatchSize, postponeLaunch, autoRetry), nil } func (jc *JobController) buildJobSubmitResult(jobUUID, jobBatchTable string, timeGap, subtaskRows int64, postponeLaunch, autoRetry bool) *sqltypes.Result { @@ -281,7 +288,7 @@ func (jc *JobController) buildJobSubmitResult(jobUUID, jobBatchTable string, tim row := buildVarCharRow(jobUUID, jobBatchTable, strconv.FormatInt(timeGap, 10), strconv.FormatInt(subtaskRows, 10), strconv.FormatBool(autoRetry), strconv.FormatBool(postponeLaunch)) rows = append(rows, row) submitRst := &sqltypes.Result{ - Fields: buildVarCharFields("job_uuid", "job_batch_table", "time_gap_in_ms", "subtask_rows", "auto_retry", "postpone_launch"), + Fields: buildVarCharFields("job_uuid", "job_batch_table", "time_gap_in_ms", "batch_size", "auto_retry", "postpone_launch"), Rows: rows, RowsAffected: 1, } @@ -351,9 +358,10 @@ func (jc *JobController) ResumeJob(uuid string) (*sqltypes.Result, error) { table := row["related_table"].ToString() jobBatchTable := row["job_batch_table"].ToString() timegap, _ := row["timegap_in_ms"].ToInt64() + batchSize, _ := row["batch_szie"].ToInt64() // 拉起runner协程,协程内会将状态改为running - go jc.dmlJobBatchRunner(uuid, table, tableSchema, jobBatchTable, timegap) + go jc.dmlJobBatchRunner(uuid, table, tableSchema, jobBatchTable, timegap, batchSize) emptyResult.RowsAffected = 1 return emptyResult, nil } @@ -547,10 +555,11 @@ func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { uuid := row["job_uuid"].ToString() jobBatchTable := row["job_batch_table"].ToString() timegap, _ := row["timegap_in_ms"].ToInt64() + batchSize, _ := row["batch_size"].ToInt64() if jc.checkDmlJobRunnable(status, table) { // todo 这里之后改成休眠的方式后要删掉, 由于外面拿锁,必须在这里就加上,不然后面的循环可能:已经启动go runner的但是还未加入到working table,导致多个表的同时启动 jc.initDMLJobRunningMeta(uuid, table) - go jc.dmlJobBatchRunner(uuid, table, schema, jobBatchTable, timegap) + go jc.dmlJobBatchRunner(uuid, table, schema, jobBatchTable, timegap, batchSize) } } @@ -648,7 +657,7 @@ func (jc *JobController) getMaxBatchID(ctx context.Context, batchTableName, tabl return qr.Named().Rows[0].ToString("max_batch_id") } -func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, table, batchSQL, batchCountSQL, uuid, batchTable, batchID string, threshold int64) (nextBatchID string, err error) { +func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, table, batchSQL, batchCountSQL, uuid, batchTable, batchID string, batchSize int64) (nextBatchID string, err error) { defer jc.env.LogError() var setting pools.Setting @@ -679,7 +688,7 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta return "", errors.New("the len of qr of count expected batch size is not 1") } expectedRow, _ := qr.Named().Rows[0].ToInt64("count_rows") - if expectedRow > threshold { + if expectedRow > batchSize { // todo,递归生成新的batch // todo将下面的每一个小步封装在函数中 // 1).根据batchCountSQL生成查询pk值的select sql @@ -717,7 +726,7 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta for rowCount, row := range qr.Named().Rows { // 将原本batch的PKEnd设在threshold条数处 - if int64(rowCount) == threshold-1 { + if int64(rowCount) == batchSize-1 { for _, pkInfo := range pkInfos { pkName := pkInfo.pkName keyVal, err := ProcessValue(row[pkName]) @@ -728,7 +737,7 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta } } // 将第threshold+1条的PK作为新PK的起点 - if int64(rowCount) == threshold { + if int64(rowCount) == batchSize { for _, pkInfo := range pkInfos { pkName := pkInfo.pkName keyVal, err := ProcessValue(row[pkName]) @@ -804,7 +813,7 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta // 生成新的table条目并插入 newBatchID := batchID + "+" nextBatchID = newBatchID - newBatchSize := expectedRow - threshold + newBatchSize := expectedRow - batchSize insertBatchSQL := fmt.Sprintf(insertBatchSQL, batchTable) insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQL, @@ -861,7 +870,8 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta } // 5.获得新的batchID,更新正在处理的batch ID - if nextBatchID != "" { + if nextBatchID == "" { + // nextBatchID在此处为“”意味着本次batch没有拆分。因此下一个BatchID中不会带有'+' nextBatchID, err = currentBatchIDInc(batchID) // todo,考虑生成新batch的情况,如何正确地获得下一个batch ID? } if err != nil { @@ -884,7 +894,7 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta return nextBatchID, nil } -func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTable string, timeGap int64) { +func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTable string, timeGap, batchSize int64) { // timeGap 单位ms,duration输入ns,应该乘上1000000 timer := time.NewTicker(time.Duration(timeGap * 1e6)) @@ -957,7 +967,7 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTabl // 执行当前batch的batch sql,并获得下一要执行的batchID // todo,将defaultThreshold换成batchSize? 还是说可以超过batchSize但是不超过阈值就行。 // todo 在batch table中添加一个字段,记录实际执行的行数 - currentBatchID, err = jc.execBatchAndRecord(ctx, relatedSchema, table, batchSQL, batchCountSQL, uuid, batchTable, currentBatchID, defaultThreshold) + currentBatchID, err = jc.execBatchAndRecord(ctx, relatedSchema, table, batchSQL, batchCountSQL, uuid, batchTable, currentBatchID, batchSize) if err != nil { jc.FailJob(ctx, uuid, err.Error(), table) return @@ -1258,10 +1268,11 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { jobBatchTable := row["job_batch_table"].ToString() uuid := row["job_uuid"].ToString() timegap, _ := row["timegap_in_ms"].ToInt64() + batchSize, _ := row["batch_size"].ToInt64() if status == runningStatus { jc.initDMLJobRunningMeta(uuid, table) - go jc.dmlJobBatchRunner(uuid, table, tableSchema, jobBatchTable, timegap) + go jc.dmlJobBatchRunner(uuid, table, tableSchema, jobBatchTable, timegap, batchSize) } // 对于暂停的,不启动协程,只需要恢复内存元数据 @@ -1491,6 +1502,7 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, } func currentBatchIDInc(currentBatchID string) (string, error) { + currentBatchID = strings.Replace(currentBatchID, "+", "", -1) // 去除串中的加号 currentBatchIDInt64, err := strconv.ParseInt(currentBatchID, 10, 64) if err != nil { return "", err From ace17f296dcf80e119ba894927792e9323b26c97 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Sun, 24 Dec 2023 16:13:59 +0800 Subject: [PATCH 16/54] feat: support show dml_job [DETAILS] Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/sqlparser/ast.go | 7 + go/vt/sqlparser/ast_clone.go | 13 + go/vt/sqlparser/ast_copy_on_rewrite.go | 16 + go/vt/sqlparser/ast_equals.go | 24 + go/vt/sqlparser/ast_format.go | 4 + go/vt/sqlparser/ast_format_fast.go | 4 + go/vt/sqlparser/ast_rewrite.go | 28 + go/vt/sqlparser/ast_visit.go | 13 + go/vt/sqlparser/cached_size.go | 12 + go/vt/sqlparser/keywords.go | 1 + go/vt/sqlparser/sql.go | 14639 ++++++++++++----------- go/vt/sqlparser/sql.y | 11 +- go/vt/vtgate/planbuilder/show.go | 41 + 13 files changed, 7494 insertions(+), 7319 deletions(-) diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go index 8b5de8a5cf..d7443ee872 100644 --- a/go/vt/sqlparser/ast.go +++ b/go/vt/sqlparser/ast.go @@ -1672,6 +1672,12 @@ type ( Filter *ShowFilter } + ShowDMLJob struct { + UUID string + // todo newborn22,换成枚举类型支持更多 + Detail bool + } + // ShowCreate is of ShowInternal type, holds SHOW CREATE queries. ShowCreate struct { Command ShowCommandType @@ -1687,6 +1693,7 @@ type ( func (*ShowBasic) isShowInternal() {} func (*ShowCreate) isShowInternal() {} func (*ShowOther) isShowInternal() {} +func (*ShowDMLJob) isShowInternal() {} // InsertRows represents the rows for an INSERT statement. type InsertRows interface { diff --git a/go/vt/sqlparser/ast_clone.go b/go/vt/sqlparser/ast_clone.go index 670c3364bc..0e31201b79 100644 --- a/go/vt/sqlparser/ast_clone.go +++ b/go/vt/sqlparser/ast_clone.go @@ -409,6 +409,8 @@ func CloneSQLNode(in SQLNode) SQLNode { return CloneRefOfShowBasic(in) case *ShowCreate: return CloneRefOfShowCreate(in) + case *ShowDMLJob: + return CloneRefOfShowDMLJob(in) case *ShowFilter: return CloneRefOfShowFilter(in) case *ShowMigrationLogs: @@ -2573,6 +2575,15 @@ func CloneRefOfShowCreate(n *ShowCreate) *ShowCreate { return &out } +// CloneRefOfShowDMLJob creates a deep clone of the input. +func CloneRefOfShowDMLJob(n *ShowDMLJob) *ShowDMLJob { + if n == nil { + return nil + } + out := *n + return &out +} + // CloneRefOfShowFilter creates a deep clone of the input. func CloneRefOfShowFilter(n *ShowFilter) *ShowFilter { if n == nil { @@ -3758,6 +3769,8 @@ func CloneShowInternal(in ShowInternal) ShowInternal { return CloneRefOfShowBasic(in) case *ShowCreate: return CloneRefOfShowCreate(in) + case *ShowDMLJob: + return CloneRefOfShowDMLJob(in) case *ShowOther: return CloneRefOfShowOther(in) default: diff --git a/go/vt/sqlparser/ast_copy_on_rewrite.go b/go/vt/sqlparser/ast_copy_on_rewrite.go index e60f0cb671..a11ac66540 100644 --- a/go/vt/sqlparser/ast_copy_on_rewrite.go +++ b/go/vt/sqlparser/ast_copy_on_rewrite.go @@ -408,6 +408,8 @@ func (c *cow) copyOnRewriteSQLNode(n SQLNode, parent SQLNode) (out SQLNode, chan return c.copyOnRewriteRefOfShowBasic(n, parent) case *ShowCreate: return c.copyOnRewriteRefOfShowCreate(n, parent) + case *ShowDMLJob: + return c.copyOnRewriteRefOfShowDMLJob(n, parent) case *ShowFilter: return c.copyOnRewriteRefOfShowFilter(n, parent) case *ShowMigrationLogs: @@ -4864,6 +4866,18 @@ func (c *cow) copyOnRewriteRefOfShowCreate(n *ShowCreate, parent SQLNode) (out S } return } +func (c *cow) copyOnRewriteRefOfShowDMLJob(n *ShowDMLJob, parent SQLNode) (out SQLNode, changed bool) { + if n == nil || c.cursor.stop { + return n, false + } + out = n + if c.pre == nil || c.pre(n, parent) { + } + if c.post != nil { + out, changed = c.postVisit(out, parent, changed) + } + return +} func (c *cow) copyOnRewriteRefOfShowFilter(n *ShowFilter, parent SQLNode) (out SQLNode, changed bool) { if n == nil || c.cursor.stop { return n, false @@ -6697,6 +6711,8 @@ func (c *cow) copyOnRewriteShowInternal(n ShowInternal, parent SQLNode) (out SQL return c.copyOnRewriteRefOfShowBasic(n, parent) case *ShowCreate: return c.copyOnRewriteRefOfShowCreate(n, parent) + case *ShowDMLJob: + return c.copyOnRewriteRefOfShowDMLJob(n, parent) case *ShowOther: return c.copyOnRewriteRefOfShowOther(n, parent) default: diff --git a/go/vt/sqlparser/ast_equals.go b/go/vt/sqlparser/ast_equals.go index 957ec3b666..dc3052482a 100644 --- a/go/vt/sqlparser/ast_equals.go +++ b/go/vt/sqlparser/ast_equals.go @@ -1184,6 +1184,12 @@ func (cmp *Comparator) SQLNode(inA, inB SQLNode) bool { return false } return cmp.RefOfShowCreate(a, b) + case *ShowDMLJob: + b, ok := inB.(*ShowDMLJob) + if !ok { + return false + } + return cmp.RefOfShowDMLJob(a, b) case *ShowFilter: b, ok := inB.(*ShowFilter) if !ok { @@ -3906,6 +3912,18 @@ func (cmp *Comparator) RefOfShowCreate(a, b *ShowCreate) bool { cmp.TableName(a.Op, b.Op) } +// RefOfShowDMLJob does deep equals between the two objects. +func (cmp *Comparator) RefOfShowDMLJob(a, b *ShowDMLJob) bool { + if a == b { + return true + } + if a == nil || b == nil { + return false + } + return a.UUID == b.UUID && + a.Detail == b.Detail +} + // RefOfShowFilter does deep equals between the two objects. func (cmp *Comparator) RefOfShowFilter(a, b *ShowFilter) bool { if a == b { @@ -6085,6 +6103,12 @@ func (cmp *Comparator) ShowInternal(inA, inB ShowInternal) bool { return false } return cmp.RefOfShowCreate(a, b) + case *ShowDMLJob: + b, ok := inB.(*ShowDMLJob) + if !ok { + return false + } + return cmp.RefOfShowDMLJob(a, b) case *ShowOther: b, ok := inB.(*ShowOther) if !ok { diff --git a/go/vt/sqlparser/ast_format.go b/go/vt/sqlparser/ast_format.go index ef3dc049c7..be861d1afc 100644 --- a/go/vt/sqlparser/ast_format.go +++ b/go/vt/sqlparser/ast_format.go @@ -2026,6 +2026,10 @@ func (node *ShowBasic) Format(buf *TrackedBuffer) { buf.astPrintf(node, "%v", node.Filter) } +func (node *ShowDMLJob) Format(buf *TrackedBuffer) { + +} + // Format formats the node. func (node *ShowCreate) Format(buf *TrackedBuffer) { buf.astPrintf(node, "show%s %v", node.Command.ToString(), node.Op) diff --git a/go/vt/sqlparser/ast_format_fast.go b/go/vt/sqlparser/ast_format_fast.go index 5ce7a67166..eac2e92cc0 100644 --- a/go/vt/sqlparser/ast_format_fast.go +++ b/go/vt/sqlparser/ast_format_fast.go @@ -2660,6 +2660,10 @@ func (node *ShowBasic) formatFast(buf *TrackedBuffer) { node.Filter.formatFast(buf) } +func (node *ShowDMLJob) formatFast(buf *TrackedBuffer) { + +} + // formatFast formats the node. func (node *ShowCreate) formatFast(buf *TrackedBuffer) { buf.WriteString("show") diff --git a/go/vt/sqlparser/ast_rewrite.go b/go/vt/sqlparser/ast_rewrite.go index 71d6e05e5b..2082a98fec 100644 --- a/go/vt/sqlparser/ast_rewrite.go +++ b/go/vt/sqlparser/ast_rewrite.go @@ -408,6 +408,8 @@ func (a *application) rewriteSQLNode(parent SQLNode, node SQLNode, replacer repl return a.rewriteRefOfShowBasic(parent, node, replacer) case *ShowCreate: return a.rewriteRefOfShowCreate(parent, node, replacer) + case *ShowDMLJob: + return a.rewriteRefOfShowDMLJob(parent, node, replacer) case *ShowFilter: return a.rewriteRefOfShowFilter(parent, node, replacer) case *ShowMigrationLogs: @@ -6572,6 +6574,30 @@ func (a *application) rewriteRefOfShowCreate(parent SQLNode, node *ShowCreate, r } return true } +func (a *application) rewriteRefOfShowDMLJob(parent SQLNode, node *ShowDMLJob, replacer replacerFunc) bool { + if node == nil { + return true + } + if a.pre != nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + if !a.pre(&a.cur) { + return true + } + } + if a.post != nil { + if a.pre == nil { + a.cur.replacer = replacer + a.cur.parent = parent + a.cur.node = node + } + if !a.post(&a.cur) { + return false + } + } + return true +} func (a *application) rewriteRefOfShowFilter(parent SQLNode, node *ShowFilter, replacer replacerFunc) bool { if node == nil { return true @@ -8909,6 +8935,8 @@ func (a *application) rewriteShowInternal(parent SQLNode, node ShowInternal, rep return a.rewriteRefOfShowBasic(parent, node, replacer) case *ShowCreate: return a.rewriteRefOfShowCreate(parent, node, replacer) + case *ShowDMLJob: + return a.rewriteRefOfShowDMLJob(parent, node, replacer) case *ShowOther: return a.rewriteRefOfShowOther(parent, node, replacer) default: diff --git a/go/vt/sqlparser/ast_visit.go b/go/vt/sqlparser/ast_visit.go index 4dc2f1276f..eadc87f1e3 100644 --- a/go/vt/sqlparser/ast_visit.go +++ b/go/vt/sqlparser/ast_visit.go @@ -408,6 +408,8 @@ func VisitSQLNode(in SQLNode, f Visit) error { return VisitRefOfShowBasic(in, f) case *ShowCreate: return VisitRefOfShowCreate(in, f) + case *ShowDMLJob: + return VisitRefOfShowDMLJob(in, f) case *ShowFilter: return VisitRefOfShowFilter(in, f) case *ShowMigrationLogs: @@ -3283,6 +3285,15 @@ func VisitRefOfShowCreate(in *ShowCreate, f Visit) error { } return nil } +func VisitRefOfShowDMLJob(in *ShowDMLJob, f Visit) error { + if in == nil { + return nil + } + if cont, err := f(in); err != nil || !cont { + return err + } + return nil +} func VisitRefOfShowFilter(in *ShowFilter, f Visit) error { if in == nil { return nil @@ -4630,6 +4641,8 @@ func VisitShowInternal(in ShowInternal, f Visit) error { return VisitRefOfShowBasic(in, f) case *ShowCreate: return VisitRefOfShowCreate(in, f) + case *ShowDMLJob: + return VisitRefOfShowDMLJob(in, f) case *ShowOther: return VisitRefOfShowOther(in, f) default: diff --git a/go/vt/sqlparser/cached_size.go b/go/vt/sqlparser/cached_size.go index d76b5f190d..959b6c1dd5 100644 --- a/go/vt/sqlparser/cached_size.go +++ b/go/vt/sqlparser/cached_size.go @@ -3389,6 +3389,18 @@ func (cached *ShowCreate) CachedSize(alloc bool) int64 { size += cached.Op.CachedSize(false) return size } +func (cached *ShowDMLJob) CachedSize(alloc bool) int64 { + if cached == nil { + return int64(0) + } + size := int64(0) + if alloc { + size += int64(24) + } + // field UUID string + size += hack.RuntimeAllocSize(int64(len(cached.UUID))) + return size +} func (cached *ShowFilter) CachedSize(alloc bool) int64 { if cached == nil { return int64(0) diff --git a/go/vt/sqlparser/keywords.go b/go/vt/sqlparser/keywords.go index ebe8a73719..e690fa6c7a 100644 --- a/go/vt/sqlparser/keywords.go +++ b/go/vt/sqlparser/keywords.go @@ -681,6 +681,7 @@ var keywords = []keyword{ {"vitess_migrations", VITESS_MIGRATIONS}, {"dml_job", DML_JOB}, {"dml_jobs", DML_JOBS}, + {"details", DETAILS}, {"vitess_replication_status", VITESS_REPLICATION_STATUS}, {"vitess_shards", VITESS_SHARDS}, {"vitess_tablets", VITESS_TABLETS}, diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index 575a5c8226..fda1bf95dd 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -342,368 +342,369 @@ const RESUME = 57639 const SCHEMA_MIGRATION = 57640 const VITESS_THROTTLER = 57641 const DML_JOB = 57642 -const BEGIN = 57643 -const START = 57644 -const TRANSACTION = 57645 -const COMMIT = 57646 -const ROLLBACK = 57647 -const SAVEPOINT = 57648 -const RELEASE = 57649 -const WORK = 57650 -const CONSISTENT = 57651 -const SNAPSHOT = 57652 -const BIT = 57653 -const TINYINT = 57654 -const SMALLINT = 57655 -const MEDIUMINT = 57656 -const INT = 57657 -const INTEGER = 57658 -const BIGINT = 57659 -const INTNUM = 57660 -const REAL = 57661 -const DOUBLE = 57662 -const FLOAT_TYPE = 57663 -const FLOAT4_TYPE = 57664 -const FLOAT8_TYPE = 57665 -const DECIMAL_TYPE = 57666 -const NUMERIC = 57667 -const TIME = 57668 -const TIMESTAMP = 57669 -const DATETIME = 57670 -const YEAR = 57671 -const CHAR = 57672 -const VARCHAR = 57673 -const BOOL = 57674 -const CHARACTER = 57675 -const VARBINARY = 57676 -const NCHAR = 57677 -const TEXT = 57678 -const TINYTEXT = 57679 -const MEDIUMTEXT = 57680 -const LONGTEXT = 57681 -const BLOB = 57682 -const TINYBLOB = 57683 -const MEDIUMBLOB = 57684 -const LONGBLOB = 57685 -const JSON = 57686 -const JSON_SCHEMA_VALID = 57687 -const JSON_SCHEMA_VALIDATION_REPORT = 57688 -const ENUM = 57689 -const GEOMETRY = 57690 -const POINT = 57691 -const LINESTRING = 57692 -const POLYGON = 57693 -const GEOMCOLLECTION = 57694 -const GEOMETRYCOLLECTION = 57695 -const MULTIPOINT = 57696 -const MULTILINESTRING = 57697 -const MULTIPOLYGON = 57698 -const ASCII = 57699 -const UNICODE = 57700 -const NULLX = 57701 -const AUTO_INCREMENT = 57702 -const APPROXNUM = 57703 -const SIGNED = 57704 -const UNSIGNED = 57705 -const ZEROFILL = 57706 -const CODE = 57707 -const COLLATION = 57708 -const COLUMNS = 57709 -const DATABASES = 57710 -const ENGINES = 57711 -const EVENT = 57712 -const EXTENDED = 57713 -const FIELDS = 57714 -const FULL = 57715 -const FUNCTION = 57716 -const GTID_EXECUTED = 57717 -const KEYSPACES = 57718 -const OPEN = 57719 -const PLUGINS = 57720 -const PRIVILEGES = 57721 -const PROCESSLIST = 57722 -const SCHEMAS = 57723 -const TABLES = 57724 -const TRIGGERS = 57725 -const USER = 57726 -const VGTID_EXECUTED = 57727 -const VITESS_KEYSPACES = 57728 -const VITESS_METADATA = 57729 -const VITESS_MIGRATIONS = 57730 -const VITESS_REPLICATION_STATUS = 57731 -const VITESS_SHARDS = 57732 -const VITESS_TABLETS = 57733 -const VITESS_TARGET = 57734 -const VSCHEMA = 57735 -const VITESS_THROTTLED_APPS = 57736 -const WORKLOAD = 57737 -const LASTSEENGTID = 57738 -const FAILPOINTS = 57739 -const DML_JOBS = 57740 -const NAMES = 57741 -const GLOBAL = 57742 -const SESSION = 57743 -const ISOLATION = 57744 -const LEVEL = 57745 -const READ = 57746 -const WRITE = 57747 -const ONLY = 57748 -const REPEATABLE = 57749 -const COMMITTED = 57750 -const UNCOMMITTED = 57751 -const SERIALIZABLE = 57752 -const FAST = 57753 -const QUICK = 57754 -const CHANGED = 57755 -const MEDIUM = 57756 -const CURRENT_TIMESTAMP = 57757 -const DATABASE = 57758 -const CURRENT_DATE = 57759 -const NOW = 57760 -const CURRENT_TIME = 57761 -const LOCALTIME = 57762 -const LOCALTIMESTAMP = 57763 -const CURRENT_USER = 57764 -const UTC_DATE = 57765 -const UTC_TIME = 57766 -const UTC_TIMESTAMP = 57767 -const DAY = 57768 -const DAY_HOUR = 57769 -const DAY_MICROSECOND = 57770 -const DAY_MINUTE = 57771 -const DAY_SECOND = 57772 -const HOUR = 57773 -const HOUR_MICROSECOND = 57774 -const HOUR_MINUTE = 57775 -const HOUR_SECOND = 57776 -const MICROSECOND = 57777 -const MINUTE = 57778 -const MINUTE_MICROSECOND = 57779 -const MINUTE_SECOND = 57780 -const MONTH = 57781 -const QUARTER = 57782 -const SECOND = 57783 -const SECOND_MICROSECOND = 57784 -const YEAR_MONTH = 57785 -const WEEK = 57786 -const REPLACE = 57787 -const CONVERT = 57788 -const CAST = 57789 -const SUBSTR = 57790 -const SUBSTRING = 57791 -const SEPARATOR = 57792 -const TIMESTAMPADD = 57793 -const TIMESTAMPDIFF = 57794 -const WEIGHT_STRING = 57795 -const LTRIM = 57796 -const RTRIM = 57797 -const TRIM = 57798 -const JSON_ARRAY = 57799 -const JSON_OBJECT = 57800 -const JSON_QUOTE = 57801 -const JSON_DEPTH = 57802 -const JSON_TYPE = 57803 -const JSON_LENGTH = 57804 -const JSON_VALID = 57805 -const JSON_ARRAY_APPEND = 57806 -const JSON_ARRAY_INSERT = 57807 -const JSON_INSERT = 57808 -const JSON_MERGE = 57809 -const JSON_MERGE_PATCH = 57810 -const JSON_MERGE_PRESERVE = 57811 -const JSON_REMOVE = 57812 -const JSON_REPLACE = 57813 -const JSON_SET = 57814 -const JSON_UNQUOTE = 57815 -const COUNT = 57816 -const AVG = 57817 -const MAX = 57818 -const MIN = 57819 -const SUM = 57820 -const GROUP_CONCAT = 57821 -const BIT_AND = 57822 -const BIT_OR = 57823 -const BIT_XOR = 57824 -const STD = 57825 -const STDDEV = 57826 -const STDDEV_POP = 57827 -const STDDEV_SAMP = 57828 -const VAR_POP = 57829 -const VAR_SAMP = 57830 -const VARIANCE = 57831 -const REGEXP_INSTR = 57832 -const REGEXP_LIKE = 57833 -const REGEXP_REPLACE = 57834 -const REGEXP_SUBSTR = 57835 -const ExtractValue = 57836 -const UpdateXML = 57837 -const GET_LOCK = 57838 -const RELEASE_LOCK = 57839 -const RELEASE_ALL_LOCKS = 57840 -const IS_FREE_LOCK = 57841 -const IS_USED_LOCK = 57842 -const LOCATE = 57843 -const POSITION = 57844 -const MATCH = 57845 -const AGAINST = 57846 -const BOOLEAN = 57847 -const LANGUAGE = 57848 -const WITH = 57849 -const QUERY = 57850 -const EXPANSION = 57851 -const WITHOUT = 57852 -const VALIDATION = 57853 -const UNUSED = 57854 -const ARRAY = 57855 -const BYTE = 57856 -const CUME_DIST = 57857 -const DESCRIPTION = 57858 -const DENSE_RANK = 57859 -const EMPTY = 57860 -const EXCEPT = 57861 -const FIRST_VALUE = 57862 -const GROUPING = 57863 -const GROUPS = 57864 -const JSON_TABLE = 57865 -const LAG = 57866 -const LAST_VALUE = 57867 -const LATERAL = 57868 -const LEAD = 57869 -const NTH_VALUE = 57870 -const NTILE = 57871 -const OF = 57872 -const OVER = 57873 -const PERCENT_RANK = 57874 -const RANK = 57875 -const RECURSIVE = 57876 -const ROW_NUMBER = 57877 -const SYSTEM = 57878 -const WINDOW = 57879 -const ACTIVE = 57880 -const ADMIN = 57881 -const AUTOEXTEND_SIZE = 57882 -const BUCKETS = 57883 -const CLONE = 57884 -const COLUMN_FORMAT = 57885 -const COMPONENT = 57886 -const DEFINITION = 57887 -const ENFORCED = 57888 -const ENGINE_ATTRIBUTE = 57889 -const EXCLUDE = 57890 -const FOLLOWING = 57891 -const GET_MASTER_PUBLIC_KEY = 57892 -const HISTOGRAM = 57893 -const HISTORY = 57894 -const INACTIVE = 57895 -const INVISIBLE = 57896 -const LOCKED = 57897 -const MASTER_COMPRESSION_ALGORITHMS = 57898 -const MASTER_PUBLIC_KEY_PATH = 57899 -const MASTER_TLS_CIPHERSUITES = 57900 -const MASTER_ZSTD_COMPRESSION_LEVEL = 57901 -const NESTED = 57902 -const NETWORK_NAMESPACE = 57903 -const NOWAIT = 57904 -const NULLS = 57905 -const OJ = 57906 -const OLD = 57907 -const OPTIONAL = 57908 -const ORDINALITY = 57909 -const ORGANIZATION = 57910 -const OTHERS = 57911 -const PARTIAL = 57912 -const PATH = 57913 -const PERSIST = 57914 -const PERSIST_ONLY = 57915 -const PRECEDING = 57916 -const PRIVILEGE_CHECKS_USER = 57917 -const PROCESS = 57918 -const RANDOM = 57919 -const REFERENCE = 57920 -const REQUIRE_ROW_FORMAT = 57921 -const RESOURCE = 57922 -const RESPECT = 57923 -const RESTART = 57924 -const RETAIN = 57925 -const REUSE = 57926 -const ROLE = 57927 -const SECONDARY = 57928 -const SECONDARY_ENGINE = 57929 -const SECONDARY_ENGINE_ATTRIBUTE = 57930 -const SECONDARY_LOAD = 57931 -const SECONDARY_UNLOAD = 57932 -const SIMPLE = 57933 -const SKIP = 57934 -const SRID = 57935 -const THREAD_PRIORITY = 57936 -const TIES = 57937 -const UNBOUNDED = 57938 -const VCPU = 57939 -const VISIBLE = 57940 -const RETURNING = 57941 -const FORMAT_BYTES = 57942 -const FORMAT_PICO_TIME = 57943 -const PS_CURRENT_THREAD_ID = 57944 -const PS_THREAD_ID = 57945 -const GTID_SUBSET = 57946 -const GTID_SUBTRACT = 57947 -const WAIT_FOR_EXECUTED_GTID_SET = 57948 -const WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 57949 -const FORMAT = 57950 -const TREE = 57951 -const VITESS = 57952 -const TRADITIONAL = 57953 -const VTEXPLAIN = 57954 -const VEXPLAIN = 57955 -const PLAN = 57956 -const LOCAL = 57957 -const LOW_PRIORITY = 57958 -const KILL = 57959 -const USERS = 57960 -const NO_WRITE_TO_BINLOG = 57961 -const LOGS = 57962 -const ERROR = 57963 -const GENERAL = 57964 -const HOSTS = 57965 -const OPTIMIZER_COSTS = 57966 -const USER_RESOURCES = 57967 -const SLOW = 57968 -const CHANNEL = 57969 -const RELAY = 57970 -const EXPORT = 57971 -const CURRENT = 57972 -const ROW = 57973 -const ROWS = 57974 -const AVG_ROW_LENGTH = 57975 -const CONNECTION = 57976 -const CHECKSUM = 57977 -const DELAY_KEY_WRITE = 57978 -const ENCRYPTION = 57979 -const ENGINE = 57980 -const INSERT_METHOD = 57981 -const MAX_ROWS = 57982 -const MIN_ROWS = 57983 -const PACK_KEYS = 57984 -const PASSWORD = 57985 -const FIXED = 57986 -const DYNAMIC = 57987 -const COMPRESSED = 57988 -const REDUNDANT = 57989 -const COMPACT = 57990 -const ROW_FORMAT = 57991 -const STATS_AUTO_RECALC = 57992 -const STATS_PERSISTENT = 57993 -const STATS_SAMPLE_PAGES = 57994 -const STORAGE = 57995 -const MEMORY = 57996 -const DISK = 57997 -const PARTITIONS = 57998 -const LINEAR = 57999 -const RANGE = 58000 -const LIST = 58001 -const SUBPARTITION = 58002 -const SUBPARTITIONS = 58003 -const HASH = 58004 +const DETAILS = 57643 +const BEGIN = 57644 +const START = 57645 +const TRANSACTION = 57646 +const COMMIT = 57647 +const ROLLBACK = 57648 +const SAVEPOINT = 57649 +const RELEASE = 57650 +const WORK = 57651 +const CONSISTENT = 57652 +const SNAPSHOT = 57653 +const BIT = 57654 +const TINYINT = 57655 +const SMALLINT = 57656 +const MEDIUMINT = 57657 +const INT = 57658 +const INTEGER = 57659 +const BIGINT = 57660 +const INTNUM = 57661 +const REAL = 57662 +const DOUBLE = 57663 +const FLOAT_TYPE = 57664 +const FLOAT4_TYPE = 57665 +const FLOAT8_TYPE = 57666 +const DECIMAL_TYPE = 57667 +const NUMERIC = 57668 +const TIME = 57669 +const TIMESTAMP = 57670 +const DATETIME = 57671 +const YEAR = 57672 +const CHAR = 57673 +const VARCHAR = 57674 +const BOOL = 57675 +const CHARACTER = 57676 +const VARBINARY = 57677 +const NCHAR = 57678 +const TEXT = 57679 +const TINYTEXT = 57680 +const MEDIUMTEXT = 57681 +const LONGTEXT = 57682 +const BLOB = 57683 +const TINYBLOB = 57684 +const MEDIUMBLOB = 57685 +const LONGBLOB = 57686 +const JSON = 57687 +const JSON_SCHEMA_VALID = 57688 +const JSON_SCHEMA_VALIDATION_REPORT = 57689 +const ENUM = 57690 +const GEOMETRY = 57691 +const POINT = 57692 +const LINESTRING = 57693 +const POLYGON = 57694 +const GEOMCOLLECTION = 57695 +const GEOMETRYCOLLECTION = 57696 +const MULTIPOINT = 57697 +const MULTILINESTRING = 57698 +const MULTIPOLYGON = 57699 +const ASCII = 57700 +const UNICODE = 57701 +const NULLX = 57702 +const AUTO_INCREMENT = 57703 +const APPROXNUM = 57704 +const SIGNED = 57705 +const UNSIGNED = 57706 +const ZEROFILL = 57707 +const CODE = 57708 +const COLLATION = 57709 +const COLUMNS = 57710 +const DATABASES = 57711 +const ENGINES = 57712 +const EVENT = 57713 +const EXTENDED = 57714 +const FIELDS = 57715 +const FULL = 57716 +const FUNCTION = 57717 +const GTID_EXECUTED = 57718 +const KEYSPACES = 57719 +const OPEN = 57720 +const PLUGINS = 57721 +const PRIVILEGES = 57722 +const PROCESSLIST = 57723 +const SCHEMAS = 57724 +const TABLES = 57725 +const TRIGGERS = 57726 +const USER = 57727 +const VGTID_EXECUTED = 57728 +const VITESS_KEYSPACES = 57729 +const VITESS_METADATA = 57730 +const VITESS_MIGRATIONS = 57731 +const VITESS_REPLICATION_STATUS = 57732 +const VITESS_SHARDS = 57733 +const VITESS_TABLETS = 57734 +const VITESS_TARGET = 57735 +const VSCHEMA = 57736 +const VITESS_THROTTLED_APPS = 57737 +const WORKLOAD = 57738 +const LASTSEENGTID = 57739 +const FAILPOINTS = 57740 +const DML_JOBS = 57741 +const NAMES = 57742 +const GLOBAL = 57743 +const SESSION = 57744 +const ISOLATION = 57745 +const LEVEL = 57746 +const READ = 57747 +const WRITE = 57748 +const ONLY = 57749 +const REPEATABLE = 57750 +const COMMITTED = 57751 +const UNCOMMITTED = 57752 +const SERIALIZABLE = 57753 +const FAST = 57754 +const QUICK = 57755 +const CHANGED = 57756 +const MEDIUM = 57757 +const CURRENT_TIMESTAMP = 57758 +const DATABASE = 57759 +const CURRENT_DATE = 57760 +const NOW = 57761 +const CURRENT_TIME = 57762 +const LOCALTIME = 57763 +const LOCALTIMESTAMP = 57764 +const CURRENT_USER = 57765 +const UTC_DATE = 57766 +const UTC_TIME = 57767 +const UTC_TIMESTAMP = 57768 +const DAY = 57769 +const DAY_HOUR = 57770 +const DAY_MICROSECOND = 57771 +const DAY_MINUTE = 57772 +const DAY_SECOND = 57773 +const HOUR = 57774 +const HOUR_MICROSECOND = 57775 +const HOUR_MINUTE = 57776 +const HOUR_SECOND = 57777 +const MICROSECOND = 57778 +const MINUTE = 57779 +const MINUTE_MICROSECOND = 57780 +const MINUTE_SECOND = 57781 +const MONTH = 57782 +const QUARTER = 57783 +const SECOND = 57784 +const SECOND_MICROSECOND = 57785 +const YEAR_MONTH = 57786 +const WEEK = 57787 +const REPLACE = 57788 +const CONVERT = 57789 +const CAST = 57790 +const SUBSTR = 57791 +const SUBSTRING = 57792 +const SEPARATOR = 57793 +const TIMESTAMPADD = 57794 +const TIMESTAMPDIFF = 57795 +const WEIGHT_STRING = 57796 +const LTRIM = 57797 +const RTRIM = 57798 +const TRIM = 57799 +const JSON_ARRAY = 57800 +const JSON_OBJECT = 57801 +const JSON_QUOTE = 57802 +const JSON_DEPTH = 57803 +const JSON_TYPE = 57804 +const JSON_LENGTH = 57805 +const JSON_VALID = 57806 +const JSON_ARRAY_APPEND = 57807 +const JSON_ARRAY_INSERT = 57808 +const JSON_INSERT = 57809 +const JSON_MERGE = 57810 +const JSON_MERGE_PATCH = 57811 +const JSON_MERGE_PRESERVE = 57812 +const JSON_REMOVE = 57813 +const JSON_REPLACE = 57814 +const JSON_SET = 57815 +const JSON_UNQUOTE = 57816 +const COUNT = 57817 +const AVG = 57818 +const MAX = 57819 +const MIN = 57820 +const SUM = 57821 +const GROUP_CONCAT = 57822 +const BIT_AND = 57823 +const BIT_OR = 57824 +const BIT_XOR = 57825 +const STD = 57826 +const STDDEV = 57827 +const STDDEV_POP = 57828 +const STDDEV_SAMP = 57829 +const VAR_POP = 57830 +const VAR_SAMP = 57831 +const VARIANCE = 57832 +const REGEXP_INSTR = 57833 +const REGEXP_LIKE = 57834 +const REGEXP_REPLACE = 57835 +const REGEXP_SUBSTR = 57836 +const ExtractValue = 57837 +const UpdateXML = 57838 +const GET_LOCK = 57839 +const RELEASE_LOCK = 57840 +const RELEASE_ALL_LOCKS = 57841 +const IS_FREE_LOCK = 57842 +const IS_USED_LOCK = 57843 +const LOCATE = 57844 +const POSITION = 57845 +const MATCH = 57846 +const AGAINST = 57847 +const BOOLEAN = 57848 +const LANGUAGE = 57849 +const WITH = 57850 +const QUERY = 57851 +const EXPANSION = 57852 +const WITHOUT = 57853 +const VALIDATION = 57854 +const UNUSED = 57855 +const ARRAY = 57856 +const BYTE = 57857 +const CUME_DIST = 57858 +const DESCRIPTION = 57859 +const DENSE_RANK = 57860 +const EMPTY = 57861 +const EXCEPT = 57862 +const FIRST_VALUE = 57863 +const GROUPING = 57864 +const GROUPS = 57865 +const JSON_TABLE = 57866 +const LAG = 57867 +const LAST_VALUE = 57868 +const LATERAL = 57869 +const LEAD = 57870 +const NTH_VALUE = 57871 +const NTILE = 57872 +const OF = 57873 +const OVER = 57874 +const PERCENT_RANK = 57875 +const RANK = 57876 +const RECURSIVE = 57877 +const ROW_NUMBER = 57878 +const SYSTEM = 57879 +const WINDOW = 57880 +const ACTIVE = 57881 +const ADMIN = 57882 +const AUTOEXTEND_SIZE = 57883 +const BUCKETS = 57884 +const CLONE = 57885 +const COLUMN_FORMAT = 57886 +const COMPONENT = 57887 +const DEFINITION = 57888 +const ENFORCED = 57889 +const ENGINE_ATTRIBUTE = 57890 +const EXCLUDE = 57891 +const FOLLOWING = 57892 +const GET_MASTER_PUBLIC_KEY = 57893 +const HISTOGRAM = 57894 +const HISTORY = 57895 +const INACTIVE = 57896 +const INVISIBLE = 57897 +const LOCKED = 57898 +const MASTER_COMPRESSION_ALGORITHMS = 57899 +const MASTER_PUBLIC_KEY_PATH = 57900 +const MASTER_TLS_CIPHERSUITES = 57901 +const MASTER_ZSTD_COMPRESSION_LEVEL = 57902 +const NESTED = 57903 +const NETWORK_NAMESPACE = 57904 +const NOWAIT = 57905 +const NULLS = 57906 +const OJ = 57907 +const OLD = 57908 +const OPTIONAL = 57909 +const ORDINALITY = 57910 +const ORGANIZATION = 57911 +const OTHERS = 57912 +const PARTIAL = 57913 +const PATH = 57914 +const PERSIST = 57915 +const PERSIST_ONLY = 57916 +const PRECEDING = 57917 +const PRIVILEGE_CHECKS_USER = 57918 +const PROCESS = 57919 +const RANDOM = 57920 +const REFERENCE = 57921 +const REQUIRE_ROW_FORMAT = 57922 +const RESOURCE = 57923 +const RESPECT = 57924 +const RESTART = 57925 +const RETAIN = 57926 +const REUSE = 57927 +const ROLE = 57928 +const SECONDARY = 57929 +const SECONDARY_ENGINE = 57930 +const SECONDARY_ENGINE_ATTRIBUTE = 57931 +const SECONDARY_LOAD = 57932 +const SECONDARY_UNLOAD = 57933 +const SIMPLE = 57934 +const SKIP = 57935 +const SRID = 57936 +const THREAD_PRIORITY = 57937 +const TIES = 57938 +const UNBOUNDED = 57939 +const VCPU = 57940 +const VISIBLE = 57941 +const RETURNING = 57942 +const FORMAT_BYTES = 57943 +const FORMAT_PICO_TIME = 57944 +const PS_CURRENT_THREAD_ID = 57945 +const PS_THREAD_ID = 57946 +const GTID_SUBSET = 57947 +const GTID_SUBTRACT = 57948 +const WAIT_FOR_EXECUTED_GTID_SET = 57949 +const WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 57950 +const FORMAT = 57951 +const TREE = 57952 +const VITESS = 57953 +const TRADITIONAL = 57954 +const VTEXPLAIN = 57955 +const VEXPLAIN = 57956 +const PLAN = 57957 +const LOCAL = 57958 +const LOW_PRIORITY = 57959 +const KILL = 57960 +const USERS = 57961 +const NO_WRITE_TO_BINLOG = 57962 +const LOGS = 57963 +const ERROR = 57964 +const GENERAL = 57965 +const HOSTS = 57966 +const OPTIMIZER_COSTS = 57967 +const USER_RESOURCES = 57968 +const SLOW = 57969 +const CHANNEL = 57970 +const RELAY = 57971 +const EXPORT = 57972 +const CURRENT = 57973 +const ROW = 57974 +const ROWS = 57975 +const AVG_ROW_LENGTH = 57976 +const CONNECTION = 57977 +const CHECKSUM = 57978 +const DELAY_KEY_WRITE = 57979 +const ENCRYPTION = 57980 +const ENGINE = 57981 +const INSERT_METHOD = 57982 +const MAX_ROWS = 57983 +const MIN_ROWS = 57984 +const PACK_KEYS = 57985 +const PASSWORD = 57986 +const FIXED = 57987 +const DYNAMIC = 57988 +const COMPRESSED = 57989 +const REDUNDANT = 57990 +const COMPACT = 57991 +const ROW_FORMAT = 57992 +const STATS_AUTO_RECALC = 57993 +const STATS_PERSISTENT = 57994 +const STATS_SAMPLE_PAGES = 57995 +const STORAGE = 57996 +const MEMORY = 57997 +const DISK = 57998 +const PARTITIONS = 57999 +const LINEAR = 58000 +const RANGE = 58001 +const LIST = 58002 +const SUBPARTITION = 58003 +const SUBPARTITIONS = 58004 +const HASH = 58005 var yyToknames = [...]string{ "$end", @@ -1023,6 +1024,7 @@ var yyToknames = [...]string{ "SCHEMA_MIGRATION", "VITESS_THROTTLER", "DML_JOB", + "DETAILS", "BEGIN", "START", "TRANSACTION", @@ -1405,29 +1407,29 @@ var yyExca = [...]int{ -2, 41, -1, 53, 1, 162, - 680, 162, + 681, 162, -2, 170, -1, 54, 135, 170, 176, 170, - 350, 170, + 351, 170, -2, 524, -1, 64, - 36, 818, - 240, 818, - 251, 818, - 286, 832, - 287, 832, - -2, 820, + 36, 820, + 240, 820, + 251, 820, + 286, 834, + 287, 834, + -2, 822, -1, 69, - 242, 856, - -2, 854, + 242, 858, + -2, 856, -1, 127, - 239, 1519, + 239, 1521, -2, 136, -1, 129, 1, 163, - 680, 163, + 681, 163, -2, 170, -1, 140, 136, 410, @@ -1436,79 +1438,79 @@ var yyExca = [...]int{ -1, 159, 135, 170, 176, 170, - 350, 170, + 351, 170, -2, 533, - -1, 839, - 87, 1536, - -2, 1381, - -1, 840, - 87, 1537, - 221, 1541, - -2, 1382, -1, 841, - 221, 1540, + 87, 1538, + -2, 1383, + -1, 842, + 87, 1539, + 221, 1543, + -2, 1384, + -1, 843, + 221, 1542, -2, 43, - -1, 920, - 60, 932, - -2, 947, - -1, 1008, + -1, 922, + 60, 934, + -2, 949, + -1, 1010, 250, 44, 255, 44, -2, 421, - -1, 1095, + -1, 1097, 1, 581, - 680, 581, + 681, 581, -2, 170, - -1, 1408, - 221, 1541, - -2, 1382, - -1, 1556, - 60, 933, - -2, 952, - -1, 1557, - 60, 934, - -2, 953, - -1, 1608, + -1, 1411, + 221, 1543, + -2, 1384, + -1, 1559, + 60, 935, + -2, 954, + -1, 1560, + 60, 936, + -2, 955, + -1, 1611, 135, 170, 176, 170, - 350, 170, + 351, 170, -2, 460, - -1, 1691, + -1, 1694, 136, 410, 245, 410, -2, 513, - -1, 1700, + -1, 1703, 250, 45, 255, 45, -2, 422, - -1, 2088, - 221, 1545, + -1, 2092, + 221, 1547, + -2, 1541, + -1, 2093, + 221, 1543, -2, 1539, - -1, 2089, - 221, 1541, - -2, 1537, - -1, 2188, + -1, 2192, 135, 170, 176, 170, - 350, 170, + 351, 170, -2, 461, - -1, 2195, + -1, 2199, 26, 191, -2, 193, - -1, 2597, + -1, 2601, 78, 99, 88, 99, - -2, 1011, - -1, 2666, - 655, 730, + -2, 1013, + -1, 2670, + 656, 730, -2, 704, - -1, 2838, - 50, 1487, - -2, 1481, - -1, 3496, - 655, 730, + -1, 2842, + 50, 1489, + -2, 1483, + -1, 3500, + 656, 730, -2, 718, - -1, 3584, + -1, 3588, 90, 662, 95, 662, 105, 662, @@ -1554,905 +1556,888 @@ var yyExca = [...]int{ 217, 662, 218, 662, 219, 662, - -2, 1904, + -2, 1906, } const yyPrivate = 57344 -const yyLast = 48200 +const yyLast = 48046 var yyAct = [...]int{ - 1564, 3655, 840, 850, 843, 3666, 3214, 3561, 3624, 713, - 3625, 2185, 2136, 1611, 3527, 2988, 3550, 3582, 2890, 2897, - 3071, 3477, 3461, 3409, 2117, 2939, 936, 2948, 2953, 3243, - 2950, 2949, 2947, 2952, 3245, 2951, 3244, 2851, 3459, 3201, - 1166, 3273, 2497, 2119, 914, 810, 2854, 2968, 2797, 3449, - 692, 2905, 809, 2967, 2259, 43, 2531, 695, 1901, 200, - 2852, 5, 200, 2855, 3110, 3104, 3278, 1571, 672, 2732, - 2140, 1534, 723, 678, 2156, 2570, 803, 2970, 2159, 2557, - 3130, 842, 2849, 1955, 200, 2839, 2079, 3096, 2663, 805, - 693, 1669, 2222, 2631, 691, 2994, 1040, 2716, 2227, 200, - 1111, 2632, 2290, 2633, 2173, 168, 969, 1168, 2247, 2582, - 42, 2161, 44, 937, 2160, 2533, 1558, 2549, 2563, 2076, - 2050, 2084, 804, 916, 1970, 1909, 678, 200, 1951, 678, - 2268, 1140, 2246, 2148, 2703, 154, 2307, 2229, 2624, 1003, - 918, 1698, 921, 998, 1580, 1716, 1600, 2599, 2163, 687, - 2049, 1538, 1420, 705, 102, 1974, 1836, 106, 1347, 1705, - 1332, 939, 1841, 1928, 977, 973, 1006, 107, 1009, 2244, - 1832, 978, 1797, 2218, 1016, 1004, 1005, 700, 1599, 1585, - 927, 2141, 954, 956, 2085, 1404, 1380, 1157, 2046, 1900, - 1164, 101, 1983, 1850, 2219, 172, 132, 1662, 109, 1690, - 922, 130, 923, 924, 131, 137, 87, 138, 108, 1089, - 949, 699, 1424, 925, 3486, 2656, 100, 86, 3656, 2958, - 3202, 2936, 682, 2261, 2654, 667, 2261, 2262, 2263, 3512, - 2686, 2685, 2955, 2305, 3194, 1782, 1348, 3608, 944, 948, - 3157, 617, 2724, 2725, 97, 3507, 622, 97, 95, 133, - 2958, 1428, 3508, 1042, 139, 3513, 930, 1916, 1915, 1348, - 1914, 97, 661, 970, 667, 1045, 1059, 1060, 1061, 661, - 1064, 1065, 1066, 1067, 1913, 2956, 1070, 1071, 1072, 1073, - 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, - 1084, 1085, 1086, 2, 931, 915, 963, 3248, 683, 121, - 964, 2962, 1912, 996, 1911, 917, 2956, 1884, 1019, 1882, - 685, 658, 2529, 3248, 686, 995, 1020, 97, 621, 2385, - 859, 860, 861, 2114, 2115, 133, 994, 1046, 1049, 1050, - 3603, 993, 2962, 2559, 992, 2676, 1931, 195, 1053, 113, - 114, 115, 2835, 118, 2294, 1359, 127, 1343, 3508, 196, - 2801, 982, 611, 1365, 1062, 3612, 3628, 938, 987, 640, - 3610, 134, 859, 860, 861, 3676, 680, 681, 1359, 3562, - 1565, 966, 3623, 638, 177, 3646, 910, 911, 912, 913, - 3611, 3076, 920, 3075, 3247, 3609, 2679, 2292, 2293, 3462, - 2498, 1921, 3018, 133, 661, 2238, 3405, 3404, 3207, 1044, - 3247, 3208, 88, 1043, 3637, 88, 3415, 3606, 3226, 1334, - 951, 952, 3215, 635, 2959, 88, 3551, 2613, 2232, 976, - 2394, 3558, 652, 2287, 3414, 3225, 962, 807, 808, 2573, - 174, 3491, 88, 175, 1960, 90, 2144, 647, 3587, 3592, - 3038, 1679, 2693, 2694, 3568, 2959, 2887, 2888, 2530, 645, - 650, 3291, 1842, 2886, 2574, 1354, 194, 3590, 1346, 962, - 807, 808, 2180, 2181, 2723, 2608, 3596, 3597, 2607, 2391, - 661, 2609, 1893, 1894, 2907, 2908, 2179, 662, 1354, 2708, - 97, 3591, 2702, 97, 662, 2392, 3568, 1130, 1362, 1842, - 1363, 1364, 991, 97, 1100, 1101, 1118, 1161, 1601, 908, - 1602, 1119, 907, 661, 3478, 1135, 1136, 2620, 1118, 1117, - 97, 1116, 1333, 1119, 1131, 2657, 2990, 625, 986, 627, - 641, 988, 664, 661, 663, 631, 1103, 629, 633, 642, - 634, 1124, 628, 3107, 639, 2116, 2383, 630, 643, 644, - 649, 653, 654, 655, 651, 648, 656, 623, 624, 646, - 989, 637, 665, 3629, 1840, 1088, 661, 620, 2198, 2197, - 1344, 2566, 2567, 2766, 3026, 2144, 2231, 3024, 1892, 178, - 1896, 675, 679, 673, 3630, 1381, 2995, 2269, 184, 1542, - 2704, 2664, 1772, 2906, 2386, 2387, 2389, 2388, 1094, 1597, - 3437, 1543, 3438, 2689, 2308, 2909, 3658, 3015, 1382, 1383, - 1384, 1385, 1386, 1387, 1388, 1390, 1389, 1391, 1392, 662, - 1132, 1137, 2991, 200, 1160, 200, 2313, 2983, 200, 200, - 991, 1138, 983, 661, 1798, 2984, 1773, 1125, 1774, 985, - 984, 1133, 1134, 2142, 2143, 2348, 2344, 2346, 2347, 2345, - 2351, 2352, 1151, 1159, 2349, 2350, 1139, 2374, 2333, 1147, - 2332, 1149, 1096, 2336, 2337, 955, 3196, 2334, 2335, 2711, - 678, 3195, 678, 678, 1063, 2360, 2363, 2361, 1069, 2362, - 618, 2314, 1068, 3604, 1029, 2992, 2310, 3389, 989, 1027, - 2272, 1546, 678, 200, 3192, 662, 3252, 990, 999, 1146, - 1148, 2157, 1000, 2312, 1355, 1000, 1353, 1350, 1351, 1352, - 1358, 1360, 1357, 2909, 1356, 2800, 169, 1038, 1037, 1036, - 195, 1408, 1035, 1034, 1349, 1033, 1032, 1355, 662, 1353, - 1350, 1351, 1352, 1358, 1360, 1357, 1114, 1356, 1120, 1121, - 1122, 1123, 1031, 2767, 134, 2311, 1026, 1349, 662, 1683, - 1039, 1395, 974, 1395, 991, 1087, 972, 177, 3677, 3635, - 974, 965, 959, 957, 1162, 1163, 3485, 2655, 1011, 974, - 1833, 2392, 2142, 2143, 1012, 1416, 666, 1704, 2715, 1048, - 2245, 662, 2929, 950, 1018, 1011, 1152, 1153, 1155, 1047, - 2712, 997, 2534, 2536, 965, 959, 957, 2298, 2297, 659, - 2622, 2691, 1398, 1399, 1400, 1401, 619, 1144, 1406, 3191, - 1818, 1145, 1412, 174, 660, 856, 175, 2291, 856, 1091, - 1325, 1150, 2658, 1829, 1335, 990, 1056, 1846, 1598, 2688, - 1677, 1093, 1030, 1092, 1018, 1676, 1675, 1028, 2728, 194, - 2406, 2960, 2961, 2674, 3108, 1830, 1673, 3564, 662, 616, - 615, 2235, 1128, 1143, 2964, 610, 2701, 3474, 3670, 2700, - 1326, 1327, 2564, 1408, 1846, 3144, 2289, 1843, 1844, 1847, - 1845, 1402, 2960, 2961, 1784, 1783, 1785, 1786, 1787, 3155, - 3156, 3563, 3126, 3224, 2678, 2964, 1703, 1017, 856, 3564, - 2604, 2236, 1021, 1011, 2569, 91, 170, 1023, 2234, 1396, - 1397, 1024, 1022, 182, 1843, 1844, 1847, 1845, 2506, 1963, - 1589, 1803, 1497, 3246, 1105, 2186, 1395, 1392, 1532, 3595, - 200, 2885, 1025, 3563, 678, 678, 1090, 96, 2677, 3246, - 96, 2393, 2237, 1566, 1568, 129, 2718, 1017, 933, 200, - 96, 2717, 2233, 2718, 190, 1426, 1158, 1427, 2717, 990, - 3499, 1547, 178, 1041, 3187, 3120, 1113, 96, 1802, 678, - 2535, 184, 200, 3594, 1342, 1141, 2309, 2647, 1905, 3016, - 1115, 1826, 1550, 1099, 678, 3060, 1533, 958, 1549, 1018, - 1102, 200, 1553, 1603, 2752, 1851, 1984, 918, 1430, 171, + 1567, 3659, 842, 852, 845, 3670, 2140, 3565, 3628, 715, + 3629, 2189, 3218, 1614, 3531, 2992, 3554, 3586, 2894, 2901, + 3075, 3481, 3465, 3413, 2121, 2943, 938, 3463, 2952, 3247, + 2957, 2954, 2953, 2501, 2951, 3248, 3249, 2956, 2955, 3205, + 1169, 2855, 916, 2123, 2858, 3277, 812, 2972, 2801, 3453, + 694, 2909, 2263, 697, 2535, 2859, 2856, 3114, 1905, 200, + 811, 5, 200, 43, 2971, 2574, 3282, 1574, 674, 3108, + 2736, 1537, 725, 680, 807, 2974, 805, 2160, 2163, 2853, + 2843, 844, 2561, 1959, 200, 3134, 2083, 3100, 2144, 806, + 2226, 695, 2720, 693, 2231, 1042, 2635, 2667, 2636, 200, + 1672, 2637, 2294, 1171, 2586, 971, 2177, 2164, 2251, 44, + 2553, 1974, 2567, 939, 168, 2080, 2165, 1561, 2088, 2537, + 2054, 2152, 1913, 918, 2272, 2250, 680, 200, 42, 680, + 2233, 154, 1142, 2311, 2628, 1955, 2603, 2053, 2707, 1005, + 1000, 2998, 1603, 1583, 1701, 1541, 707, 1423, 920, 689, + 923, 2167, 1978, 1839, 1932, 1835, 102, 106, 1719, 1335, + 1350, 979, 1844, 1008, 975, 1011, 1018, 107, 1708, 941, + 2248, 1800, 980, 2222, 1006, 1007, 2145, 702, 1602, 1588, + 929, 956, 2223, 958, 2050, 1407, 1383, 1167, 1904, 1853, + 1160, 101, 2089, 1987, 926, 927, 1693, 87, 132, 925, + 109, 172, 130, 131, 1665, 137, 138, 701, 1427, 1091, + 951, 86, 3490, 108, 100, 2660, 3660, 3206, 924, 2265, + 2266, 2267, 684, 2940, 2265, 946, 950, 3516, 2690, 2689, + 2309, 2658, 663, 618, 3161, 1351, 3198, 1785, 861, 862, + 863, 623, 97, 3612, 97, 2728, 2729, 3252, 1431, 97, + 95, 139, 1044, 3517, 3512, 133, 669, 1920, 932, 2962, + 1919, 1918, 1917, 972, 3511, 1061, 1062, 1063, 1935, 1066, + 1067, 1068, 1069, 998, 1047, 1072, 1073, 1074, 1075, 1076, + 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, + 1087, 1088, 2, 3252, 933, 966, 965, 1916, 685, 919, + 917, 121, 1915, 1888, 1568, 1021, 1885, 1351, 1022, 687, + 997, 3607, 622, 688, 2533, 2960, 964, 809, 810, 1346, + 964, 809, 810, 2389, 1048, 1051, 1052, 2563, 996, 2839, + 1055, 133, 995, 994, 3251, 861, 862, 863, 113, 114, + 115, 2966, 118, 1368, 1362, 127, 195, 2298, 196, 1064, + 2962, 612, 2680, 2805, 984, 2118, 2119, 2663, 989, 940, + 663, 3596, 3572, 2959, 663, 682, 683, 3512, 3616, 3614, + 134, 3680, 156, 968, 3627, 912, 913, 914, 915, 3594, + 3251, 922, 3632, 177, 3566, 3650, 3080, 3079, 3600, 3601, + 2683, 2297, 97, 3615, 3613, 2296, 2911, 2912, 3466, 133, + 2502, 2242, 1925, 3595, 3022, 3409, 2960, 3408, 1046, 953, + 954, 663, 3211, 1045, 167, 3212, 1362, 3641, 978, 3419, + 155, 88, 2398, 3610, 2236, 88, 3230, 1337, 90, 3495, + 88, 3219, 2966, 88, 3555, 3562, 2291, 3418, 1964, 174, + 3229, 3591, 175, 3042, 1384, 1682, 2891, 2892, 664, 2697, + 2698, 2184, 2185, 2148, 2963, 1357, 2534, 2577, 1349, 3572, + 2890, 1695, 1696, 166, 165, 194, 3019, 1385, 1386, 1387, + 1388, 1389, 1390, 1391, 1393, 1392, 1394, 1395, 1365, 3295, + 1366, 1367, 2578, 1604, 1096, 1605, 993, 2396, 1102, 1103, + 988, 2612, 2727, 990, 2611, 2395, 1149, 2613, 1151, 97, + 1897, 1898, 2183, 97, 2712, 2910, 2706, 1132, 97, 910, + 1120, 97, 1164, 909, 1845, 1121, 1120, 2913, 1137, 1138, + 1105, 1121, 2624, 1119, 3482, 1118, 1133, 1357, 3111, 2661, + 1336, 1126, 1347, 2202, 2201, 2994, 1148, 1150, 2570, 2571, + 2770, 3030, 3028, 663, 991, 2963, 957, 2387, 1896, 663, + 1113, 621, 677, 2999, 1887, 1090, 675, 1900, 681, 2668, + 2708, 1600, 1545, 2273, 160, 1697, 163, 2120, 1694, 2987, + 161, 162, 2235, 3441, 1546, 3442, 664, 2988, 178, 3633, + 664, 2693, 2364, 2317, 2365, 2148, 2366, 184, 2390, 2391, + 2393, 2392, 993, 663, 985, 1845, 1153, 1801, 2312, 3662, + 3634, 987, 986, 2352, 2348, 2350, 2351, 2349, 2355, 2356, + 1135, 1136, 2353, 2354, 200, 1162, 200, 1141, 2378, 200, + 200, 1821, 1098, 1134, 2715, 1139, 3200, 664, 1127, 3199, + 1163, 2367, 2995, 1071, 1065, 1140, 1070, 1775, 2318, 2996, + 993, 1089, 967, 961, 959, 1146, 967, 961, 959, 1147, + 991, 2146, 2147, 2314, 3393, 3608, 1549, 2737, 2276, 1152, + 1843, 2316, 680, 619, 680, 680, 3196, 1031, 2324, 2320, + 2322, 2323, 2321, 2327, 2328, 1543, 1001, 2325, 2326, 3256, + 1002, 1776, 992, 1777, 680, 200, 1029, 2396, 2161, 3639, + 1806, 1145, 1002, 1040, 1358, 1039, 1356, 1353, 1354, 1355, + 1361, 1363, 1360, 2315, 1359, 1093, 1038, 1037, 1036, 2804, + 1035, 2771, 1034, 1411, 1352, 1033, 169, 1095, 1028, 1094, + 1686, 1041, 3674, 2337, 2913, 2336, 3681, 195, 2340, 2341, + 1707, 976, 2338, 2339, 1398, 614, 1014, 976, 1398, 1050, + 976, 974, 2739, 1013, 1836, 1013, 2249, 2538, 2540, 1049, + 952, 134, 999, 2716, 1130, 3489, 3568, 911, 2659, 664, + 2302, 2301, 1832, 1338, 177, 664, 1358, 1419, 1356, 1353, + 1354, 1355, 1361, 1363, 1360, 1058, 1359, 2933, 1154, 1155, + 1157, 3195, 2692, 2146, 2147, 1409, 1352, 2719, 992, 620, + 3567, 1601, 1680, 1679, 1020, 1401, 1402, 1403, 1404, 2695, + 977, 1678, 164, 1328, 858, 1415, 858, 2617, 2626, 664, + 2678, 858, 1833, 1092, 1676, 1032, 2295, 2749, 2748, 2747, + 174, 2732, 2741, 175, 2745, 2410, 2740, 2662, 2738, 3020, + 3112, 617, 3599, 2743, 1030, 1824, 992, 1822, 1823, 1706, + 1827, 1828, 2742, 616, 1825, 1826, 194, 611, 2239, 1329, + 1330, 2293, 2722, 3568, 3250, 1411, 1405, 2721, 960, 1814, + 2744, 2746, 960, 157, 3159, 3160, 158, 1787, 1786, 1788, + 1789, 1790, 2964, 2965, 2705, 1805, 3598, 2704, 129, 91, + 1849, 1399, 1400, 3478, 3148, 2968, 3130, 3567, 2240, 3228, + 2608, 2573, 2682, 2568, 2510, 2238, 170, 1019, 1967, 1592, + 3250, 1057, 1500, 182, 1809, 1107, 1807, 1808, 2190, 1812, + 1813, 1398, 200, 1810, 1811, 2539, 680, 680, 1535, 1395, + 1846, 1847, 1850, 1848, 2397, 1569, 1571, 1345, 2889, 2241, + 935, 200, 1161, 1429, 1143, 1430, 2681, 96, 1143, 2237, + 1854, 96, 3672, 1550, 190, 3673, 96, 3671, 3503, 96, + 1043, 680, 2722, 3191, 200, 1117, 3064, 2721, 1129, 178, + 3124, 1849, 1553, 2964, 2965, 2313, 680, 1101, 184, 1131, + 1988, 1104, 1909, 200, 1829, 1606, 2968, 1433, 1552, 1115, + 2756, 1979, 1556, 2427, 1989, 1979, 1536, 920, 2651, 171, 176, 173, 179, 180, 181, 183, 185, 186, 187, 188, - 1985, 1975, 1975, 2423, 1018, 189, 191, 192, 193, 3287, - 958, 2320, 2316, 2318, 2319, 2317, 2323, 2324, 1141, 678, - 2321, 2322, 3638, 3162, 1821, 1364, 1819, 1820, 2286, 1824, - 1825, 2284, 1408, 1822, 1823, 1363, 1364, 3161, 678, 678, - 1533, 678, 1551, 678, 678, 106, 678, 678, 678, 678, - 678, 678, 1552, 2276, 1713, 107, 1127, 1712, 1702, 1408, - 2288, 1029, 1408, 678, 1408, 200, 1539, 1129, 2733, 1027, - 1811, 2281, 1526, 1503, 1504, 1505, 1506, 1507, 3668, 3678, - 3672, 3669, 1017, 3667, 1055, 200, 109, 1021, 1011, 169, - 3631, 3145, 1023, 1154, 929, 1018, 1024, 1022, 678, 1112, - 200, 3397, 1680, 1681, 1682, 2281, 1799, 1017, 1800, 3396, - 2285, 1801, 1142, 1011, 1014, 1015, 678, 974, 200, 1710, - 3387, 1008, 1012, 1696, 1567, 1806, 1767, 1804, 1805, 1982, - 1809, 1810, 1852, 1095, 1807, 1808, 915, 3237, 200, 1536, - 1365, 3236, 1007, 3529, 2283, 200, 1745, 3169, 1689, 1748, - 1570, 1750, 917, 2735, 200, 200, 200, 200, 200, 200, - 200, 200, 200, 678, 1933, 1142, 3679, 1749, 1708, 1757, - 1758, 1365, 1594, 1595, 1548, 1763, 1764, 3467, 1934, 1393, - 1394, 1932, 1718, 3168, 1719, 1707, 1721, 1723, 3530, 1578, - 1727, 1729, 1731, 1733, 1735, 1018, 1792, 3158, 1017, 1706, - 1706, 1672, 2937, 1790, 1011, 1014, 1015, 3221, 974, 3222, - 2925, 1686, 1008, 1012, 1565, 2629, 1699, 1687, 1365, 1685, - 2628, 1980, 3468, 1838, 3642, 1565, 2627, 2745, 2744, 2743, - 1981, 2241, 2737, 1793, 2741, 1855, 2736, 3033, 2734, 2398, - 2399, 2400, 1859, 2739, 1861, 1862, 1863, 1864, 1753, 1777, - 1776, 1868, 2738, 1775, 1765, 1577, 125, 1759, 1853, 1854, - 1791, 2081, 1756, 1880, 1881, 2078, 1883, 1789, 1755, 170, - 2740, 2742, 1858, 122, 2080, 1362, 182, 1363, 1364, 1865, - 1866, 1867, 1754, 1834, 1813, 2024, 1812, 1725, 854, 1816, - 1817, 1678, 1110, 1814, 1815, 1381, 1365, 2727, 1017, 1109, - 1054, 133, 994, 1565, 1051, 2081, 1362, 993, 1363, 1364, - 992, 1387, 1388, 1390, 1389, 1391, 1392, 190, 1382, 1383, - 1384, 1385, 1386, 1387, 1388, 1390, 1389, 1391, 1392, 2987, - 1857, 859, 860, 861, 123, 3152, 667, 678, 678, 1383, - 1384, 1385, 1386, 1387, 1388, 1390, 1389, 1391, 1392, 1879, - 678, 1878, 1779, 1362, 1329, 1363, 1364, 2611, 667, 200, - 2257, 2256, 171, 176, 173, 179, 180, 181, 183, 185, - 186, 187, 188, 667, 1365, 2255, 2254, 1597, 189, 191, - 192, 193, 2016, 2005, 2006, 2007, 2008, 2018, 2009, 2010, - 2011, 2023, 2019, 2012, 2013, 2020, 2021, 2022, 2014, 2015, - 2017, 43, 2253, 2252, 43, 3632, 124, 3494, 678, 1574, - 1958, 1958, 3493, 1923, 1925, 1926, 1778, 2460, 1408, 1385, - 1386, 1387, 1388, 1390, 1389, 1391, 1392, 1361, 1565, 678, - 3471, 1362, 1929, 1363, 1364, 1408, 1978, 1924, 3470, 1936, - 1979, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, - 1947, 1948, 1949, 1950, 3469, 1575, 2555, 3657, 97, 3392, - 678, 678, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1390, - 1389, 1391, 1392, 1927, 2042, 3376, 103, 3375, 1532, 3286, - 1937, 3619, 1565, 105, 1361, 1565, 1565, 104, 1956, 1956, - 1365, 1959, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1367, - 2555, 3557, 2074, 2555, 3537, 1406, 1365, 2555, 3533, 1362, - 2089, 1363, 1364, 1365, 2149, 2150, 3284, 103, 2754, 112, - 2038, 3233, 1976, 3520, 1565, 1889, 1890, 2103, 104, 1531, - 111, 1530, 110, 1529, 1365, 3166, 1533, 3151, 1381, 2036, - 1930, 1906, 1565, 2551, 1566, 2110, 3205, 3484, 2086, 2047, - 3000, 1365, 87, 200, 2996, 87, 3400, 1565, 105, 678, - 2462, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1390, 1389, - 1391, 1392, 2993, 2450, 1935, 1365, 2555, 3388, 2133, 3205, - 1565, 3487, 200, 1565, 3423, 678, 2928, 2128, 2927, 2129, - 3640, 1565, 2555, 3203, 3422, 200, 2638, 3574, 1565, 678, - 1565, 1962, 2089, 200, 2625, 200, 1365, 200, 200, 1528, - 1365, 2303, 1969, 1971, 1365, 2088, 2416, 2111, 3572, 1565, - 2281, 1565, 678, 2047, 2302, 1362, 2077, 1363, 1364, 3124, - 1565, 2091, 2092, 2195, 2139, 1986, 1987, 1988, 1989, 2123, - 2086, 1362, 2122, 1363, 1364, 1365, 2471, 1565, 1362, 2000, - 1363, 1364, 112, 2918, 2917, 3380, 106, 2167, 105, 3570, - 1565, 2915, 2916, 111, 2087, 110, 107, 1885, 1365, 1362, - 1848, 1363, 1364, 1788, 105, 2913, 2914, 106, 1780, 2458, - 1770, 678, 2242, 2913, 2912, 2132, 1362, 107, 1363, 1364, - 3446, 1565, 3379, 2090, 3444, 1565, 2093, 2094, 3441, 1565, - 2579, 1565, 2600, 2204, 2205, 2206, 2207, 2088, 678, 1766, - 1362, 1762, 1363, 1364, 678, 2392, 2687, 1565, 2199, 1761, - 2200, 2201, 2202, 2203, 2189, 1760, 2190, 1668, 2668, 3427, - 1565, 2171, 930, 1565, 3213, 2109, 2210, 2211, 2212, 2213, - 2121, 1362, 1576, 1363, 1364, 1362, 1156, 1363, 1364, 1362, - 2131, 1363, 1364, 1565, 2665, 2270, 2154, 2661, 2662, 2193, - 2134, 678, 2643, 1365, 2224, 2601, 678, 2571, 1365, 2194, - 678, 678, 2555, 2554, 2850, 2603, 2152, 2416, 1565, 2420, - 1362, 2578, 1363, 1364, 963, 3119, 2230, 2177, 964, 2176, - 2175, 1961, 1565, 2600, 2880, 2192, 2191, 1381, 1365, 111, - 1377, 2571, 1378, 1362, 2392, 1363, 1364, 3119, 200, 1668, - 1667, 2282, 2267, 2240, 1361, 200, 1379, 1393, 1394, 1376, - 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1390, 1389, 1391, - 1392, 1609, 1608, 3121, 3600, 2893, 2579, 3525, 2225, 2579, - 3498, 200, 200, 2221, 2555, 200, 1365, 200, 1565, 2579, - 2239, 3080, 2419, 200, 2275, 2243, 2601, 2278, 2251, 2279, - 2214, 2216, 2217, 200, 2915, 2295, 2392, 2823, 1361, 2281, - 200, 1019, 2940, 3119, 2277, 2225, 2274, 2178, 2273, 1020, - 2894, 1365, 3095, 1565, 2416, 2471, 1381, 1365, 2405, 1706, - 2296, 3540, 2299, 2447, 2446, 2281, 2300, 2301, 1362, 200, - 1363, 1364, 2264, 1362, 2896, 1363, 1364, 3170, 678, 1382, - 1383, 1384, 1385, 1386, 1387, 1388, 1390, 1389, 1391, 1392, - 2413, 2147, 2891, 1569, 1381, 2112, 1961, 1907, 1891, 1828, - 2412, 2306, 1596, 1362, 1002, 1363, 1364, 125, 1001, 2907, - 2908, 3411, 1365, 1572, 3377, 3298, 2892, 1382, 1383, 1384, - 1385, 1386, 1387, 1388, 1390, 1389, 1391, 1392, 3171, 3172, - 3173, 3186, 2989, 3183, 2376, 2377, 3633, 3164, 3043, 2379, - 3412, 3088, 1565, 2409, 1408, 3042, 2089, 2414, 2380, 2898, - 2417, 1362, 2418, 1363, 1364, 1670, 1365, 2425, 1929, 2223, - 2985, 2427, 2428, 2429, 2402, 2942, 2404, 2938, 2669, 2220, - 2215, 2435, 2436, 2437, 2438, 2439, 2440, 2441, 2442, 2443, - 2444, 2366, 2372, 1365, 2410, 97, 1362, 2209, 1363, 1364, - 2208, 1795, 1362, 1365, 1363, 1364, 3085, 1565, 1701, 1697, - 1664, 126, 1365, 2635, 1094, 2403, 2238, 2451, 2452, 2453, - 2454, 2455, 3174, 2457, 1365, 3131, 3132, 2459, 2906, 2126, - 1365, 2464, 2465, 3652, 2466, 1365, 3650, 2469, 3626, 2470, - 2909, 2408, 2382, 2473, 1365, 2430, 2634, 2477, 1365, 3506, - 3418, 2482, 2483, 2484, 2485, 1365, 2390, 1362, 3432, 1363, - 1364, 2088, 2445, 3134, 2496, 1887, 2499, 2500, 2934, 3175, - 3176, 3177, 1365, 1741, 2502, 2504, 1930, 3083, 1565, 1365, - 2933, 2507, 2508, 2509, 2510, 2511, 2401, 3048, 1565, 3137, - 2932, 1365, 2518, 2519, 2635, 2520, 3031, 1565, 2523, 2525, - 2133, 1362, 2527, 1363, 1364, 200, 2850, 2648, 2526, 1565, - 2087, 1365, 2539, 200, 2524, 1565, 2367, 1573, 1958, 2422, - 3482, 3136, 1365, 678, 1742, 1743, 1744, 1888, 1362, 3384, - 1363, 1364, 2503, 1565, 678, 1365, 2869, 2872, 1362, 3139, - 1363, 1364, 2873, 2870, 3268, 2868, 3267, 1362, 2871, 1363, - 1364, 3502, 3413, 2138, 2538, 2130, 2486, 1565, 200, 1362, - 2895, 1363, 1364, 200, 3188, 1362, 3125, 1363, 1364, 2828, - 1362, 2827, 1363, 1364, 2456, 2478, 1565, 3466, 3277, 1362, - 3112, 1363, 1364, 1362, 2837, 1363, 1364, 3279, 3111, 3115, - 1362, 1365, 1363, 1364, 3266, 3090, 1956, 1365, 2540, 43, - 2556, 2541, 688, 2543, 1365, 2575, 3086, 1362, 2593, 1363, - 1364, 2595, 1827, 1365, 1362, 906, 1363, 1364, 2874, 3058, - 2588, 2589, 2911, 2840, 2842, 934, 1362, 1540, 1363, 1364, - 1365, 678, 2843, 935, 2594, 2618, 2639, 200, 1058, 2552, - 1057, 1365, 1984, 1328, 200, 1365, 1362, 1737, 1363, 1364, - 3009, 1539, 2565, 103, 2528, 2634, 1985, 1362, 678, 1363, - 1364, 2621, 2623, 2721, 104, 678, 1533, 2675, 2660, 3117, - 1362, 134, 1363, 1364, 678, 3054, 2548, 1365, 103, 2553, - 112, 3040, 2568, 105, 2614, 105, 2598, 613, 3039, 104, - 1408, 111, 3664, 110, 1738, 1739, 1740, 3036, 2149, 2150, - 1365, 2684, 105, 200, 200, 200, 200, 200, 1365, 909, - 2602, 2930, 1365, 940, 2522, 2605, 946, 946, 2637, 1365, - 2615, 2612, 2370, 2640, 2641, 2521, 1362, 2230, 1363, 1364, - 2630, 3579, 1362, 1365, 1363, 1364, 3483, 3407, 2626, 1362, - 2910, 1363, 1364, 2899, 2592, 2135, 2359, 2903, 1362, 2358, - 1363, 1364, 975, 3097, 2902, 2357, 2636, 1365, 2356, 200, - 200, 2517, 942, 943, 2355, 1362, 2644, 1363, 1364, 1365, - 2645, 2649, 2650, 2651, 1365, 2681, 1362, 2682, 1363, 1364, - 1362, 1365, 1363, 1364, 2516, 200, 2826, 2354, 2904, 1365, - 1689, 2411, 2515, 2900, 2825, 2396, 2514, 2353, 2901, 2343, - 2342, 3454, 2341, 2513, 2340, 1365, 678, 2339, 2670, 2671, - 2338, 2331, 1362, 2330, 1363, 1364, 2680, 2512, 2329, 2328, - 2327, 2756, 2757, 2758, 2759, 2760, 1365, 2584, 2587, 2588, - 2589, 2585, 2326, 2586, 2590, 1362, 2325, 1363, 1364, 110, - 2765, 2501, 111, 1362, 3453, 1363, 1364, 1362, 2731, 1363, - 1364, 1365, 3435, 678, 1362, 2705, 1363, 1364, 2495, 3285, - 3283, 2706, 3282, 3275, 3184, 2494, 1365, 2707, 1362, 3116, - 1363, 1364, 2746, 2493, 3114, 112, 2709, 2748, 2943, 2265, - 2761, 1684, 2713, 2710, 941, 112, 111, 2730, 110, 2492, - 2729, 678, 1362, 3274, 1363, 1364, 111, 2719, 3105, 678, - 2720, 2571, 3654, 3653, 1362, 3256, 1363, 1364, 2551, 1362, - 2491, 1363, 1364, 2768, 1365, 2448, 1362, 2124, 1363, 1364, - 1590, 1582, 116, 117, 1362, 3653, 1363, 1364, 3654, 3472, - 678, 2749, 2747, 2802, 3150, 2490, 2778, 2807, 2780, 932, - 1362, 2804, 1363, 1364, 200, 125, 1904, 3, 678, 10, - 2489, 1365, 99, 1, 2791, 2792, 2793, 2794, 1107, 1839, - 1331, 1362, 678, 1363, 1364, 1902, 1408, 2859, 9, 678, - 678, 1408, 200, 200, 200, 200, 200, 1365, 1330, 2770, - 1903, 1365, 2776, 8, 200, 2877, 1362, 2847, 1363, 1364, - 200, 3154, 200, 3589, 2167, 200, 200, 200, 2488, 636, - 2807, 1362, 2113, 1363, 1364, 1537, 2862, 3627, 3585, 3586, - 2856, 2803, 2879, 2805, 2077, 2830, 2077, 2806, 1781, 921, - 2831, 1771, 2167, 2167, 2167, 2167, 2167, 3216, 2786, 2787, - 2788, 2789, 2790, 2048, 3408, 2487, 2946, 2271, 2818, 3182, - 2228, 200, 2167, 1010, 159, 2167, 2187, 2188, 3553, 1362, - 120, 1363, 1364, 2853, 678, 967, 2829, 1408, 2853, 2832, - 119, 2481, 678, 1013, 1126, 2480, 2266, 200, 2881, 2844, - 2845, 2882, 2966, 2822, 3206, 2619, 2196, 922, 1615, 923, - 1613, 200, 2864, 2865, 2863, 2867, 1362, 2866, 1363, 1364, - 2875, 1365, 1614, 1612, 1617, 1616, 3017, 106, 2883, 2819, - 2820, 2821, 1838, 2449, 3059, 200, 1895, 107, 200, 2889, - 674, 2591, 1362, 2861, 1363, 1364, 1362, 3011, 1363, 1364, - 1365, 2923, 2924, 2920, 668, 2922, 2921, 197, 1604, 1583, - 1365, 3072, 1052, 626, 2919, 2304, 632, 3028, 3029, 3030, - 1365, 3032, 3034, 2974, 2945, 1413, 1886, 1365, 2824, 2606, - 961, 1365, 953, 2125, 2542, 3041, 960, 2965, 2944, 2980, - 3045, 3046, 3047, 3049, 3050, 3051, 3052, 2230, 3385, 3053, - 2858, 3055, 3056, 3057, 3109, 2479, 3061, 3062, 3063, 3064, - 3065, 3066, 3067, 3068, 3069, 3070, 2836, 2838, 678, 2973, - 2558, 2997, 2998, 2999, 3077, 3001, 3002, 3081, 3005, 3082, - 3084, 3004, 3087, 3089, 2476, 3091, 3092, 3093, 3094, 3013, - 3007, 3008, 3012, 3100, 2475, 3019, 3020, 200, 3021, 2841, - 3022, 3023, 2834, 3025, 2474, 3027, 1362, 1365, 1363, 1364, - 3074, 2472, 3465, 3276, 3538, 2468, 2616, 3078, 1098, 1579, - 1104, 3079, 2421, 1106, 1108, 1973, 1403, 2164, 3122, 3123, - 3251, 1922, 3127, 697, 696, 1362, 694, 1363, 1364, 1365, - 2544, 2572, 1368, 844, 2532, 1362, 1365, 1363, 1364, 1591, - 2583, 2581, 2580, 200, 2368, 1362, 2172, 1363, 1364, 1365, - 3133, 3129, 1362, 1365, 1363, 1364, 1362, 3581, 1363, 1364, - 2166, 2162, 1366, 2550, 795, 3103, 794, 706, 3098, 3099, - 3101, 698, 200, 690, 3106, 793, 792, 3147, 1337, 2972, - 3565, 2467, 2690, 2986, 3113, 2692, 2617, 2982, 1345, 1555, - 684, 1421, 200, 2167, 3118, 200, 200, 200, 3128, 981, - 3014, 3489, 2395, 3037, 3138, 678, 678, 3135, 1554, 2003, - 2004, 3496, 2954, 2463, 3140, 3189, 3190, 3142, 3143, 3141, - 2461, 3200, 2935, 2666, 2258, 72, 3148, 47, 3204, 3460, - 2974, 3149, 1362, 2426, 1363, 1364, 3526, 2415, 791, 788, - 3210, 3211, 3253, 3165, 3254, 3167, 3255, 2798, 2799, 3509, - 3510, 787, 678, 678, 678, 678, 3511, 2031, 1341, 1338, - 3159, 3160, 3602, 1897, 1362, 98, 1363, 1364, 38, 37, - 36, 1362, 35, 1363, 1364, 3223, 2973, 34, 3227, 28, - 27, 26, 25, 24, 1362, 21, 1363, 1364, 1362, 20, - 1363, 1364, 2584, 2587, 2588, 2589, 2585, 31, 2586, 2590, - 23, 22, 3131, 3132, 19, 3238, 1563, 1559, 18, 3212, - 2957, 3622, 3663, 3193, 1563, 1559, 128, 3197, 3198, 3199, - 3242, 1560, 56, 53, 3232, 51, 136, 135, 54, 1560, - 50, 1097, 3250, 48, 33, 32, 17, 16, 15, 14, - 3257, 13, 12, 11, 7, 6, 1665, 1666, 1562, 41, - 1561, 3228, 40, 30, 1556, 1557, 1562, 39, 1561, 29, - 4, 2653, 2260, 200, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1408, 0, 0, 3271, 3240, 678, 0, 678, - 3249, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1958, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1581, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2856, 0, 3272, - 0, 2856, 3294, 3296, 3281, 3280, 43, 0, 0, 0, - 3288, 0, 3292, 0, 0, 3290, 0, 1593, 0, 678, - 0, 855, 0, 1671, 89, 0, 0, 0, 0, 3386, - 0, 3399, 200, 0, 0, 678, 1610, 0, 3304, 2853, - 3406, 0, 0, 0, 0, 0, 3301, 3302, 678, 0, - 0, 1956, 0, 3300, 0, 0, 0, 0, 0, 0, - 3416, 3417, 0, 3419, 0, 3420, 3421, 3382, 3390, 3383, - 3424, 3425, 3426, 3398, 3428, 3431, 3381, 0, 0, 0, - 0, 0, 1958, 3403, 0, 3402, 3410, 0, 0, 0, - 3440, 3442, 3443, 3445, 3447, 3448, 3450, 0, 678, 0, - 0, 0, 678, 678, 0, 0, 0, 0, 3430, 919, - 3429, 89, 0, 0, 0, 0, 0, 0, 0, 0, - 1751, 3393, 3394, 3395, 0, 0, 3434, 0, 0, 0, - 919, 678, 3436, 0, 3480, 0, 3439, 0, 0, 0, - 0, 3476, 0, 0, 3458, 0, 0, 0, 980, 3455, - 3456, 0, 0, 3475, 0, 1796, 1849, 0, 3457, 0, - 1956, 0, 3433, 0, 0, 0, 0, 2856, 3473, 0, - 0, 0, 0, 0, 0, 0, 3479, 3464, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1856, 0, 0, 0, 0, 0, 0, - 1860, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 678, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 0, 0, - 3481, 0, 0, 0, 0, 0, 200, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 678, 200, 0, 0, 0, 0, - 0, 0, 0, 0, 3500, 0, 0, 0, 0, 0, - 3505, 0, 0, 0, 0, 3488, 0, 3492, 0, 0, - 3495, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3521, 0, 0, 0, 0, 0, 3522, 3523, 0, 0, - 43, 0, 0, 0, 0, 678, 3497, 0, 0, 0, - 0, 0, 0, 0, 0, 1408, 0, 678, 3534, 3515, - 0, 0, 3516, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3524, 0, 3504, - 0, 678, 678, 0, 3559, 3560, 3536, 3514, 0, 0, - 3531, 0, 3541, 0, 0, 0, 3566, 0, 3569, 3571, - 3573, 3567, 3552, 678, 3544, 3549, 0, 3546, 3545, 3543, - 3548, 0, 3547, 0, 0, 0, 43, 200, 678, 3410, - 3554, 0, 3539, 3601, 0, 0, 0, 0, 3577, 0, - 0, 0, 0, 0, 0, 0, 3598, 3588, 3593, 3580, - 0, 0, 2853, 0, 0, 0, 0, 3566, 0, 0, - 3607, 0, 3567, 3605, 1917, 1918, 1919, 1920, 0, 0, - 0, 678, 3618, 0, 1910, 0, 0, 0, 0, 0, - 0, 0, 0, 3616, 0, 0, 0, 3621, 0, 0, - 0, 0, 0, 678, 0, 0, 0, 0, 0, 0, - 0, 0, 3636, 3634, 3639, 3641, 3643, 0, 0, 1416, - 678, 0, 678, 1964, 1965, 0, 1958, 0, 1967, 0, - 946, 946, 1972, 3647, 3651, 3649, 1977, 3645, 3644, 0, - 0, 0, 0, 3566, 0, 3662, 3659, 0, 3567, 1990, - 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 3673, - 3671, 3674, 3675, 2025, 2026, 2027, 2028, 2029, 2030, 2032, - 3665, 2037, 0, 2039, 2040, 2041, 0, 2043, 2044, 2045, - 1958, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, + 3642, 1846, 1847, 1850, 1848, 189, 191, 192, 193, 1156, + 1367, 680, 1020, 1386, 1387, 1388, 1389, 1390, 1391, 1393, + 1392, 1394, 1395, 1802, 1411, 1803, 1020, 3291, 1804, 3166, + 680, 680, 3165, 680, 1554, 680, 680, 106, 680, 680, + 680, 680, 680, 680, 1555, 2292, 2280, 107, 1366, 1367, + 1536, 1411, 1716, 1715, 1411, 680, 1411, 200, 1705, 3635, + 1529, 1542, 1506, 1507, 1508, 1509, 1510, 1390, 1391, 1393, + 1392, 1394, 1395, 1816, 2290, 1815, 1097, 200, 1819, 1820, + 109, 1144, 1817, 1818, 2288, 1144, 1031, 1855, 2285, 1029, + 680, 3149, 200, 1683, 1684, 1685, 1713, 169, 1388, 1389, + 1390, 1391, 1393, 1392, 1394, 1395, 931, 2085, 680, 3225, + 200, 3226, 3533, 1986, 1699, 1019, 1570, 1056, 1770, 2028, + 2285, 1053, 1114, 1748, 1573, 125, 1751, 2289, 1753, 1019, + 200, 1539, 1368, 917, 1023, 1013, 1692, 200, 919, 1025, + 3471, 1795, 122, 1026, 1024, 1020, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 680, 1937, 3534, 1752, 2287, + 1760, 1761, 3682, 1711, 1597, 1598, 1766, 1767, 1551, 3676, + 1938, 1396, 1397, 1936, 2402, 2403, 2404, 1116, 1368, 1122, + 1123, 1124, 1125, 1709, 1709, 3472, 1710, 1721, 3401, 1722, + 3400, 1724, 1726, 1675, 1020, 1730, 1732, 1734, 1736, 1738, + 1689, 3391, 3241, 123, 1793, 1794, 1165, 1166, 3240, 1690, + 1688, 1841, 2991, 1368, 1384, 1702, 2020, 2009, 2010, 2011, + 2012, 2022, 2013, 2014, 2015, 2027, 2023, 2016, 2017, 2024, + 2025, 2026, 2018, 2019, 2021, 1756, 1020, 1385, 1386, 1387, + 1388, 1389, 1390, 1391, 1393, 1392, 1394, 1395, 1019, 3683, + 1782, 1856, 1857, 2085, 1013, 1016, 1017, 2082, 976, 3173, + 1837, 3172, 1010, 1014, 3162, 1861, 2084, 1365, 1792, 1366, + 1367, 1368, 1868, 1869, 1870, 124, 2758, 170, 1568, 2941, + 856, 669, 1681, 1009, 182, 1984, 1368, 1100, 2929, 1106, + 2633, 2632, 1108, 1110, 1985, 2631, 996, 1019, 1568, 133, + 995, 994, 1023, 1013, 1927, 1929, 1930, 1025, 2454, 2245, + 1796, 1026, 1024, 1365, 1781, 1366, 1367, 1780, 1860, 861, + 862, 863, 1368, 1600, 1779, 190, 1368, 1778, 1928, 1768, + 680, 680, 1027, 1762, 1759, 1368, 1384, 2424, 2731, 1019, + 1881, 3037, 1758, 680, 1882, 1013, 1016, 1017, 1365, 976, + 1366, 1367, 200, 1010, 1014, 3646, 1568, 1332, 1340, 1385, + 1386, 1387, 1388, 1389, 1390, 1391, 1393, 1392, 1394, 1395, + 171, 176, 173, 179, 180, 181, 183, 185, 186, 187, + 188, 1757, 1728, 1112, 1368, 1111, 189, 191, 192, 193, + 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1393, 1392, 1394, + 1395, 680, 43, 1962, 1962, 43, 1365, 1568, 1366, 1367, + 2423, 1411, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1370, + 3637, 1365, 680, 1366, 1367, 3636, 1933, 3498, 1411, 1982, + 3497, 1368, 1940, 1983, 1942, 1943, 1944, 1945, 1946, 1947, + 1948, 1949, 1950, 1951, 1952, 1953, 1954, 3156, 669, 2615, + 669, 2261, 2260, 680, 680, 2153, 2154, 1365, 3475, 1366, + 1367, 1365, 1577, 1366, 1367, 1931, 3474, 2046, 3644, 1568, + 1365, 1368, 1366, 1367, 1941, 2259, 2258, 2257, 2256, 1535, + 3473, 1960, 1960, 1409, 1963, 103, 3396, 2464, 2559, 3661, + 1568, 112, 105, 2415, 3380, 2078, 104, 1364, 1568, 1368, + 1980, 3379, 111, 2093, 110, 3623, 1568, 1368, 1578, 1364, + 1568, 2559, 3561, 2042, 3290, 1893, 1894, 3491, 1368, 1365, + 2107, 1366, 1367, 3288, 103, 3237, 1934, 1368, 2559, 3541, + 3427, 1384, 2040, 1910, 1368, 104, 87, 1569, 2114, 87, + 1534, 2090, 2051, 2559, 3537, 3426, 200, 1536, 3524, 1568, + 3384, 1568, 680, 2466, 1385, 1386, 1387, 1388, 1389, 1390, + 1391, 1393, 1392, 1394, 1395, 1368, 1365, 1939, 1366, 1367, + 1533, 2137, 1568, 3209, 3488, 200, 2462, 1532, 680, 3170, + 2132, 2417, 2133, 3578, 1568, 3383, 2081, 3155, 200, 3004, + 1568, 2416, 680, 3217, 1966, 2093, 200, 1368, 200, 3000, + 200, 200, 3576, 1568, 2092, 2997, 1365, 1368, 1366, 1367, + 2115, 3574, 1568, 1973, 1975, 680, 2051, 2932, 3450, 1568, + 2669, 2095, 2096, 3404, 1568, 2647, 2199, 1596, 2931, 1990, + 1991, 1992, 1993, 2090, 1365, 1368, 1366, 1367, 2559, 3392, + 3209, 1568, 1365, 2004, 1366, 1367, 1613, 1368, 2642, 106, + 1568, 2559, 3207, 1365, 2091, 1366, 1367, 2629, 2171, 107, + 2285, 1568, 1365, 1531, 1366, 1367, 3128, 1568, 2198, 1365, + 106, 1366, 1367, 2307, 680, 2246, 2306, 1858, 2143, 2136, + 107, 3448, 1568, 97, 1862, 2127, 1864, 1865, 1866, 1867, + 2126, 3445, 1568, 1871, 2094, 2604, 2092, 2097, 2098, 1889, + 1365, 680, 1366, 1367, 1851, 1883, 1884, 680, 1886, 2475, + 1568, 2922, 2921, 3123, 2208, 2209, 2210, 2211, 2194, 3422, + 2203, 2175, 2204, 2205, 2206, 2207, 2193, 932, 2113, 2125, + 1754, 3143, 1365, 1364, 1366, 1367, 2919, 2920, 2214, 2215, + 2216, 2217, 1365, 1368, 1366, 1367, 2158, 1791, 2274, 1368, + 105, 2135, 2197, 2138, 680, 2228, 2917, 2918, 2605, 680, + 2917, 2916, 3125, 680, 680, 1799, 1368, 1581, 2607, 2156, + 1365, 1783, 1366, 1367, 1773, 1368, 966, 965, 1769, 2234, + 2181, 2180, 1365, 2179, 1366, 1367, 1765, 2196, 2195, 2583, + 1568, 2396, 2691, 2575, 2244, 1671, 2672, 2665, 2666, 2604, + 2555, 200, 1764, 1859, 2271, 2559, 2558, 112, 200, 1568, + 1863, 2420, 1568, 2897, 1763, 105, 1965, 1568, 111, 1579, + 110, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 3486, 105, + 2229, 1671, 1670, 1580, 200, 200, 2225, 1159, 200, 1158, + 200, 2218, 2220, 2221, 2243, 111, 200, 2247, 1612, 1611, + 2279, 3388, 2255, 2282, 3604, 2283, 200, 2299, 2898, 3431, + 1568, 1021, 2605, 200, 1022, 2583, 2278, 2229, 2277, 2575, + 3529, 3502, 2396, 2420, 1709, 1368, 2281, 2300, 1365, 1368, + 1366, 1367, 2900, 2854, 1365, 2884, 1366, 1367, 1568, 2559, + 2583, 3084, 2303, 200, 3123, 2396, 2304, 2305, 2286, 2582, + 2895, 1365, 680, 1366, 1367, 2919, 1384, 2827, 2182, 1380, + 1365, 1381, 1366, 1367, 1364, 2420, 2475, 2911, 2912, 2451, + 1384, 2310, 2409, 2450, 2896, 1382, 1396, 1397, 1379, 1385, + 1386, 1387, 1388, 1389, 1390, 1391, 1393, 1392, 1394, 1395, + 3174, 3123, 2285, 1385, 1386, 1387, 1388, 1389, 1390, 1391, + 1393, 1392, 1394, 1395, 2583, 2268, 2285, 2902, 2151, 3099, + 1568, 1572, 2116, 3092, 1568, 1368, 1965, 2413, 1411, 1911, + 2093, 2418, 1895, 1831, 2421, 1599, 2422, 1004, 125, 1003, + 3544, 2429, 3415, 1933, 1575, 2431, 2432, 2433, 2406, 2370, + 2408, 3175, 3176, 3177, 3381, 2439, 2440, 2441, 2442, 2443, + 2444, 2445, 2446, 2447, 2448, 2376, 3302, 3190, 2414, 1368, + 1365, 3187, 1366, 1367, 1365, 3168, 1366, 1367, 3047, 3046, + 1368, 1673, 1744, 2227, 2989, 1914, 2910, 1368, 2946, 2942, + 2407, 2455, 2456, 2457, 2458, 2459, 2673, 2461, 2913, 2224, + 2412, 2463, 2219, 2213, 1368, 2468, 2469, 2212, 2470, 3089, + 1568, 2473, 1798, 2474, 1368, 2386, 97, 2477, 1368, 2434, + 1704, 2481, 1700, 1667, 1368, 2486, 2487, 2488, 2489, 1368, + 126, 2092, 2394, 1745, 1746, 1747, 2449, 2638, 2500, 2944, + 2503, 2504, 2639, 1934, 1096, 1368, 2993, 3178, 2506, 2508, + 1368, 2405, 3416, 3087, 1568, 2511, 2512, 2513, 2514, 2515, + 1365, 1368, 1366, 1367, 3052, 1568, 2522, 2523, 2242, 2524, + 2130, 3094, 2527, 2529, 2137, 1368, 2531, 2134, 1891, 200, + 3141, 2091, 3135, 3136, 3656, 2639, 2543, 200, 3035, 1568, + 2426, 3506, 1962, 3654, 3179, 3180, 3181, 680, 2530, 1568, + 1368, 3630, 2528, 1568, 1365, 1368, 1366, 1367, 680, 3192, + 3510, 3436, 3138, 2507, 1568, 1365, 2938, 1366, 1367, 2899, + 2937, 2936, 1365, 3417, 1366, 1367, 2854, 2652, 2542, 2490, + 1568, 1368, 200, 2371, 2482, 1568, 3272, 200, 3271, 1365, + 1892, 1366, 1367, 2460, 2878, 3090, 2592, 2593, 3140, 1365, + 2873, 1366, 1367, 1365, 1740, 1366, 1367, 2872, 2876, 1365, + 2634, 1366, 1367, 2877, 1365, 1576, 1366, 1367, 2142, 2874, + 1960, 3129, 2544, 690, 2875, 2545, 2832, 2547, 2831, 2579, + 1365, 43, 1366, 1367, 3062, 1365, 3270, 1366, 1367, 3058, + 2597, 3470, 2560, 2599, 3281, 3283, 1365, 3119, 1366, 1367, + 2841, 1741, 1742, 1743, 1830, 680, 2915, 908, 2598, 3116, + 1365, 200, 1366, 1367, 2556, 3044, 1368, 3115, 200, 2622, + 2569, 2155, 2532, 2643, 2844, 2846, 1368, 1060, 1542, 2159, + 1988, 2162, 680, 2847, 1914, 1365, 2664, 1366, 1367, 680, + 1365, 1368, 1366, 1367, 1989, 1059, 2557, 3013, 680, 103, + 103, 936, 2552, 2625, 2627, 2572, 105, 2602, 1536, 937, + 104, 104, 2638, 2725, 1411, 1368, 1365, 2618, 1366, 1367, + 2679, 1368, 1331, 2606, 134, 2688, 3121, 200, 200, 200, + 200, 200, 1368, 105, 942, 2609, 1368, 948, 948, 3668, + 2934, 2641, 2616, 1368, 2619, 2374, 2644, 2645, 2153, 2154, + 3043, 2234, 2903, 3583, 2363, 1368, 2907, 3487, 2630, 3411, + 3040, 2914, 2596, 2906, 2139, 2588, 2591, 2592, 2593, 2589, + 1368, 2590, 2594, 2640, 2830, 2526, 944, 945, 2648, 2362, + 2361, 2360, 2829, 200, 200, 2359, 2686, 2358, 2653, 2654, + 2655, 2649, 2357, 2347, 2346, 1368, 2345, 2908, 2344, 2525, + 2343, 1365, 2904, 1366, 1367, 2521, 2342, 2905, 2685, 200, + 1692, 1365, 1368, 1366, 1367, 3101, 2520, 2380, 2381, 2335, + 2519, 2334, 2383, 2333, 2332, 2331, 1365, 2518, 1366, 1367, + 680, 2384, 1368, 2330, 2684, 2674, 2675, 2329, 2400, 2517, + 110, 3458, 3457, 3439, 112, 2760, 2761, 2762, 2763, 2764, + 1365, 3289, 1366, 1367, 2516, 111, 1365, 110, 1366, 1367, + 3287, 3286, 3279, 3188, 2769, 3120, 105, 1365, 3118, 1366, + 1367, 1365, 2735, 1366, 1367, 112, 2947, 680, 1365, 2505, + 1366, 1367, 2269, 2709, 1914, 1687, 111, 112, 110, 2710, + 1365, 2319, 1366, 1367, 943, 2711, 2499, 2750, 111, 111, + 3278, 2752, 2765, 2717, 2713, 1365, 3109, 1366, 1367, 2575, + 3260, 2714, 2734, 2733, 2555, 680, 2498, 2368, 2369, 3658, + 3657, 2373, 2723, 680, 2772, 2724, 2452, 2128, 1593, 2377, + 1365, 1585, 1366, 1367, 1368, 116, 117, 3657, 3658, 2379, + 3476, 3154, 2753, 1566, 1562, 934, 2382, 1365, 2806, 1366, + 1367, 125, 1908, 1906, 680, 10, 9, 3, 1563, 99, + 2782, 2811, 2784, 2751, 1, 2808, 1109, 1365, 200, 1366, + 1367, 1907, 680, 1842, 8, 1334, 2385, 1333, 2795, 2796, + 2797, 2798, 3158, 1668, 1669, 1565, 680, 1564, 3593, 637, + 1411, 2863, 2117, 680, 680, 1411, 200, 200, 200, 200, + 200, 1368, 1540, 3631, 3589, 2081, 2780, 2081, 200, 2881, + 2774, 2851, 3590, 1784, 200, 1774, 200, 3220, 2497, 200, + 200, 200, 1368, 2052, 2811, 3412, 2171, 2950, 2275, 2834, + 3186, 2807, 2232, 2809, 2866, 2860, 2883, 1012, 2810, 2790, + 2791, 2792, 2793, 2794, 2835, 159, 2191, 2192, 3557, 120, + 969, 923, 119, 1015, 2171, 2171, 2171, 2171, 2171, 1128, + 2270, 3210, 2857, 2623, 2200, 200, 2822, 2857, 1618, 1365, + 1616, 1366, 1367, 2833, 2171, 1617, 1615, 2171, 680, 1620, + 1619, 1411, 3021, 2453, 2836, 2496, 680, 2848, 2849, 3063, + 2970, 200, 2885, 1899, 676, 2886, 2595, 670, 197, 1607, + 925, 2867, 1586, 3076, 2870, 200, 2495, 1054, 627, 2879, + 2826, 2868, 2869, 2923, 2871, 2823, 2824, 2825, 2308, 924, + 633, 106, 1841, 1416, 2887, 1890, 2828, 2610, 963, 200, + 955, 107, 200, 1368, 2129, 2546, 1365, 962, 1366, 1367, + 3389, 3015, 2893, 2862, 2927, 2928, 2926, 2924, 2925, 1368, + 2865, 3113, 2840, 2949, 1368, 2842, 2562, 1365, 2845, 1366, + 1367, 3032, 3033, 3034, 2838, 3036, 3038, 2978, 3469, 1368, + 3280, 3542, 2620, 1368, 1582, 3083, 2425, 2969, 1977, 3045, + 2977, 2948, 1406, 1368, 3049, 3050, 3051, 3053, 3054, 3055, + 3056, 2234, 2984, 3057, 2168, 3059, 3060, 3061, 3255, 1926, + 3065, 3066, 3067, 3068, 3069, 3070, 3071, 3072, 3073, 3074, + 699, 698, 680, 696, 2548, 2576, 1371, 2494, 3081, 1368, + 3008, 3085, 846, 3086, 3088, 3009, 3091, 3093, 2536, 3095, + 3096, 3097, 3098, 2493, 3017, 3016, 1594, 3104, 2492, 2587, + 2585, 200, 3026, 2584, 2372, 3078, 2176, 3137, 3023, 3024, + 3133, 3025, 3082, 2491, 3027, 1368, 3029, 2485, 3031, 3585, + 2601, 3001, 3002, 3003, 2170, 3005, 3006, 2484, 1365, 2166, + 1366, 1367, 3126, 3127, 2554, 797, 3131, 796, 708, 700, + 692, 1368, 795, 794, 1365, 1368, 1366, 1367, 3151, 1365, + 1368, 1366, 1367, 2976, 3569, 2694, 2990, 200, 2696, 2621, + 2986, 1368, 1348, 2483, 1365, 1368, 1366, 1367, 1365, 3107, + 1366, 1367, 1368, 1558, 686, 1369, 983, 3018, 1365, 3493, + 1366, 1367, 3102, 3103, 3105, 2399, 200, 1368, 3041, 1557, + 2007, 3110, 2008, 3117, 2650, 3500, 2958, 1566, 1562, 2480, + 3204, 2939, 3132, 2670, 1424, 3122, 200, 2262, 72, 200, + 200, 200, 1563, 1368, 1365, 2171, 1366, 1367, 3142, 680, + 680, 3146, 3147, 3193, 3194, 2479, 3139, 1368, 47, 2478, + 3464, 3144, 3530, 3145, 2476, 793, 790, 1559, 1560, 1565, + 3152, 1564, 3208, 3153, 2978, 2472, 3257, 3258, 3259, 2471, + 1365, 2802, 1366, 1367, 3214, 3215, 2467, 2977, 2803, 3513, + 2699, 2700, 2701, 2702, 2703, 3514, 680, 680, 680, 680, + 789, 2465, 3515, 3163, 3164, 3169, 1365, 3171, 1366, 1367, + 1365, 2035, 1366, 1367, 1344, 1365, 1341, 1366, 1367, 3227, + 3606, 1901, 3231, 98, 38, 37, 1365, 2430, 1366, 1367, + 1365, 36, 1366, 1367, 35, 34, 28, 1365, 27, 1366, + 1367, 2419, 26, 25, 24, 21, 1914, 2718, 20, 3242, + 31, 23, 1365, 3216, 1366, 1367, 3197, 22, 19, 18, + 3201, 3202, 3203, 2961, 3246, 3626, 3667, 128, 3236, 56, + 53, 51, 2726, 136, 135, 54, 3254, 50, 1365, 1099, + 1366, 1367, 48, 33, 3261, 32, 17, 16, 15, 14, + 13, 12, 1365, 11, 1366, 1367, 7, 6, 2588, 2591, + 2592, 2593, 2589, 41, 2590, 2594, 40, 200, 3135, 3136, + 30, 39, 29, 3232, 4, 2657, 2264, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1411, 0, 0, 3275, + 3244, 680, 0, 680, 0, 3253, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1962, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1584, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3285, 2860, 0, 3298, 3300, 2860, 3276, 0, 3284, + 3292, 3294, 0, 0, 0, 0, 3296, 0, 43, 0, + 0, 0, 857, 680, 0, 89, 1674, 3390, 2857, 0, + 0, 0, 0, 0, 0, 3403, 200, 0, 3308, 680, + 3305, 3306, 0, 0, 3410, 0, 0, 0, 195, 0, + 0, 0, 680, 0, 0, 1960, 0, 3304, 0, 0, + 0, 0, 0, 0, 3420, 3421, 0, 3423, 0, 3424, + 3425, 3387, 134, 3394, 3428, 3429, 3430, 3402, 3432, 3435, + 3385, 0, 3386, 0, 0, 177, 1962, 3407, 0, 3406, + 3414, 0, 0, 0, 3444, 3446, 3447, 3449, 3451, 3452, + 3454, 0, 680, 0, 3011, 3012, 680, 680, 0, 0, + 921, 0, 89, 3433, 3434, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3397, 3398, 3399, 0, 3438, 0, + 0, 921, 0, 0, 0, 680, 3440, 0, 3484, 3480, + 3443, 174, 0, 0, 175, 0, 0, 0, 0, 982, + 0, 0, 3462, 3459, 3460, 0, 0, 3479, 2935, 1852, + 3461, 0, 0, 0, 1960, 0, 3437, 194, 0, 0, + 3477, 0, 2860, 0, 0, 0, 0, 0, 3483, 0, + 0, 3468, 0, 0, 2973, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2985, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 680, 0, 0, 0, 3485, 0, + 0, 0, 3007, 0, 0, 3010, 0, 0, 0, 0, + 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 680, 200, + 0, 0, 3504, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3509, 0, 0, 0, 0, 0, + 3492, 3496, 0, 0, 3499, 0, 0, 0, 0, 0, + 178, 0, 0, 0, 3525, 0, 0, 0, 0, 184, + 3526, 3527, 0, 841, 0, 0, 0, 0, 0, 680, + 3501, 0, 43, 0, 3519, 0, 0, 3520, 0, 1411, + 0, 680, 3538, 0, 0, 0, 0, 0, 0, 0, + 3528, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3508, 3106, 680, 680, 0, 3563, 3564, + 3540, 3518, 0, 0, 0, 0, 3545, 0, 3535, 0, + 3570, 0, 3573, 3575, 3577, 3571, 3556, 680, 659, 3548, + 0, 3553, 3550, 3549, 679, 3547, 0, 0, 3552, 3551, + 0, 200, 680, 3414, 3558, 0, 3543, 3605, 43, 0, + 0, 2857, 3581, 0, 0, 0, 0, 0, 0, 0, + 3602, 3592, 3597, 3584, 0, 0, 0, 0, 0, 0, + 0, 3570, 0, 0, 3611, 0, 3571, 3609, 1921, 1922, + 1923, 1924, 0, 0, 0, 680, 3622, 679, 169, 3167, + 679, 0, 0, 0, 0, 0, 0, 3620, 0, 0, + 0, 3625, 0, 0, 0, 0, 0, 680, 0, 3182, + 0, 3638, 3183, 3184, 3185, 0, 0, 0, 3643, 3645, + 3647, 0, 3640, 1419, 680, 0, 680, 1968, 1969, 0, + 1962, 0, 1971, 0, 948, 948, 1976, 3651, 3655, 3653, + 1981, 3649, 3648, 0, 0, 0, 0, 3570, 0, 3666, + 3663, 0, 3571, 1994, 1995, 1996, 1997, 1998, 1999, 2000, + 2001, 2002, 2003, 3677, 3675, 3678, 3679, 2029, 2030, 2031, + 2032, 2033, 2034, 2036, 3669, 2041, 0, 2043, 2044, 2045, + 0, 2047, 2048, 2049, 1962, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, - 2070, 2071, 2072, 2073, 1956, 2075, 3648, 2082, 2083, 946, - 3681, 946, 946, 946, 946, 946, 3430, 3682, 3683, 0, - 0, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 0, - 2104, 2105, 2106, 2107, 2108, 0, 0, 0, 0, 0, + 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 1960, 2079, + 3652, 2086, 2087, 948, 3685, 948, 948, 948, 948, 948, + 3686, 3687, 3434, 0, 0, 2099, 2100, 2101, 2102, 2103, + 2104, 2105, 2106, 0, 2108, 2109, 2110, 2111, 2112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1956, 0, - 3680, 0, 0, 0, 0, 0, 0, 0, 946, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1960, 0, 3684, 0, 0, 0, 170, 0, + 0, 0, 948, 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2145, 2146, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2149, 2150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2184, 0, 0, 0, - 2151, 0, 0, 0, 0, 0, 0, 0, 2155, 0, - 2158, 0, 0, 1910, 0, 0, 0, 0, 0, 0, - 1632, 0, 0, 0, 0, 0, 0, 0, 0, 1165, - 0, 1165, 1165, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, + 2188, 0, 88, 45, 46, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2226, 0, 0, + 0, 0, 94, 0, 0, 0, 49, 79, 80, 0, + 77, 81, 1168, 0, 1168, 1168, 0, 0, 0, 78, + 0, 171, 176, 173, 179, 180, 181, 183, 185, 186, + 187, 188, 0, 0, 0, 0, 0, 189, 191, 192, + 193, 2230, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 919, - 1405, 1410, 1411, 0, 1414, 0, 1415, 1417, 1418, 1419, - 0, 1422, 1423, 1425, 1425, 0, 1425, 1429, 1429, 1431, - 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, + 97, 0, 921, 1408, 1413, 1414, 0, 1417, 0, 1418, + 1420, 1421, 1422, 0, 1425, 1426, 1428, 1428, 0, 1428, + 1432, 1432, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, - 1492, 1493, 1494, 1495, 1620, 0, 0, 0, 1496, 0, - 1498, 1499, 1500, 1501, 1502, 0, 0, 0, 0, 0, - 0, 0, 0, 1429, 1429, 1429, 1429, 1429, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1508, 1509, 1510, + 1492, 1493, 1494, 1495, 1496, 1497, 1498, 0, 0, 0, + 0, 1499, 0, 1501, 1502, 1503, 1504, 1505, 0, 0, + 0, 0, 0, 0, 0, 0, 1432, 1432, 1432, 1432, + 1432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, - 1521, 0, 0, 1910, 0, 0, 0, 0, 0, 0, - 2315, 0, 0, 0, 0, 0, 0, 0, 1535, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2364, 2365, 0, 1633, - 2369, 0, 0, 0, 0, 0, 0, 0, 2373, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2375, 0, - 0, 0, 0, 0, 0, 2378, 0, 0, 0, 0, - 0, 1541, 0, 0, 0, 0, 0, 919, 0, 0, - 0, 919, 0, 0, 0, 0, 919, 0, 0, 0, - 0, 0, 0, 0, 2381, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1646, 1649, 1650, 1651, 1652, - 1653, 1654, 0, 1655, 1656, 1658, 1659, 1657, 1660, 1661, - 1634, 1635, 1636, 1637, 1618, 1619, 1647, 0, 1621, 0, - 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 839, - 0, 1631, 1638, 1639, 1640, 1641, 0, 1642, 1643, 1644, - 1645, 0, 0, 0, 0, 0, 0, 0, 2424, 0, - 0, 0, 195, 0, 0, 0, 0, 0, 0, 2431, - 2432, 2433, 2434, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 134, 0, 156, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, - 0, 0, 0, 0, 657, 0, 0, 0, 0, 0, - 677, 0, 0, 0, 1421, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 167, 0, 0, 0, 0, 0, 155, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 174, 0, 0, 175, 0, - 0, 0, 0, 677, 0, 0, 677, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 143, 144, 166, - 165, 194, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1648, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1165, 0, 0, 0, 0, 195, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2659, 0, - 1581, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 134, 0, 156, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2597, 0, - 160, 141, 163, 148, 140, 167, 161, 162, 0, 0, - 0, 155, 0, 0, 178, 0, 0, 0, 0, 0, - 0, 0, 0, 184, 149, 0, 0, 0, 0, 0, - 174, 0, 0, 175, 0, 0, 0, 0, 152, 150, - 145, 146, 147, 151, 0, 0, 0, 0, 0, 0, - 142, 0, 1692, 1693, 166, 165, 194, 0, 0, 153, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2646, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1165, 1165, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 89, 0, 0, 89, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2695, 2696, - 2697, 2698, 2699, 0, 0, 0, 0, 0, 0, 0, - 0, 169, 0, 0, 0, 160, 1694, 163, 0, 1691, - 0, 161, 162, 0, 0, 0, 0, 0, 0, 178, - 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1910, 2714, 0, 0, 0, 0, - 2726, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 946, - 2722, 0, 2750, 2751, 0, 0, 2753, 0, 0, 2755, - 0, 0, 0, 0, 0, 0, 0, 164, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2762, - 2763, 2764, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2769, 0, 0, 2771, 2772, 2773, 0, 0, 0, - 2774, 2775, 0, 0, 2051, 2777, 0, 0, 2779, 0, - 0, 2781, 2782, 2783, 2784, 0, 0, 0, 0, 2785, - 2051, 2051, 2051, 2051, 2051, 0, 0, 0, 157, 0, - 0, 158, 0, 0, 0, 0, 169, 0, 946, 0, - 0, 0, 0, 3620, 0, 2808, 2809, 2810, 2811, 2812, - 2813, 0, 0, 1632, 2814, 2815, 0, 2816, 0, 2817, - 0, 170, 0, 0, 0, 0, 0, 0, 182, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2848, 0, 2165, 0, 0, 190, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 164, 0, 0, 0, 0, 0, 0, 2878, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 677, 1324, 677, - 677, 0, 0, 0, 171, 176, 173, 179, 180, 181, - 183, 185, 186, 187, 188, 0, 0, 0, 0, 677, - 189, 191, 192, 193, 0, 0, 0, 0, 0, 0, - 980, 0, 0, 157, 0, 0, 158, 0, 195, 0, - 2941, 0, 0, 0, 0, 0, 0, 1620, 1407, 1688, - 0, 0, 0, 0, 0, 0, 2931, 0, 0, 0, - 0, 0, 134, 980, 156, 0, 170, 0, 0, 0, - 0, 0, 0, 182, 0, 177, 0, 0, 0, 0, - 0, 0, 2969, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2981, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 167, 0, 0, 0, - 0, 0, 155, 0, 190, 0, 0, 0, 0, 0, - 3003, 0, 0, 3006, 0, 0, 0, 0, 0, 0, - 0, 174, 1633, 0, 175, 0, 0, 3035, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3044, 0, 1692, 1693, 166, 165, 194, 0, 171, - 176, 173, 179, 180, 181, 183, 185, 186, 187, 188, - 0, 0, 0, 0, 0, 189, 191, 192, 193, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1407, 0, 0, 0, 0, 0, 0, 0, 1646, 1649, - 1650, 1651, 1652, 1653, 1654, 0, 1655, 1656, 1658, 1659, - 1657, 1660, 1661, 1634, 1635, 1636, 1637, 1618, 1619, 1647, - 0, 1621, 0, 1622, 1623, 1624, 1625, 1626, 1627, 1628, - 1629, 1630, 3102, 0, 1631, 1638, 1639, 1640, 1641, 0, - 1642, 1643, 1644, 1645, 0, 0, 0, 0, 0, 0, - 0, 677, 677, 0, 0, 0, 160, 1694, 163, 0, - 1691, 0, 161, 162, 0, 0, 0, 0, 0, 0, - 178, 0, 0, 0, 0, 0, 0, 0, 0, 184, - 0, 0, 0, 2397, 0, 0, 677, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1663, 0, 0, 0, 0, 3163, 0, 0, - 0, 3185, 2407, 1674, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3178, 0, 0, - 3179, 3180, 3181, 0, 0, 0, 677, 0, 1700, 0, - 0, 0, 0, 0, 3209, 0, 1709, 0, 0, 1407, - 1711, 0, 0, 1714, 1715, 677, 677, 0, 677, 0, - 677, 677, 0, 677, 677, 677, 677, 677, 677, 0, - 0, 0, 0, 0, 0, 0, 1407, 1746, 1747, 1407, - 677, 1407, 1648, 1752, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, - 0, 0, 796, 0, 3229, 0, 3230, 0, 0, 3231, - 0, 0, 3234, 3235, 0, 677, 0, 0, 0, 0, - 0, 3239, 0, 0, 0, 0, 0, 0, 0, 0, - 1831, 3241, 0, 677, 0, 0, 0, 0, 2505, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3258, 0, 0, 3259, 0, 3260, 3261, - 0, 3262, 0, 3263, 0, 0, 0, 0, 3264, 0, - 2537, 0, 0, 676, 0, 0, 0, 0, 0, 0, - 677, 0, 0, 164, 0, 0, 0, 919, 0, 0, - 0, 0, 0, 3289, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3297, 0, 0, 3299, 2576, 2577, - 0, 0, 0, 0, 0, 0, 0, 2165, 0, 3303, - 919, 2596, 0, 0, 0, 0, 971, 0, 0, 979, - 0, 88, 45, 46, 90, 0, 0, 3378, 0, 0, - 0, 0, 0, 0, 157, 0, 0, 158, 0, 0, - 0, 94, 0, 0, 0, 49, 79, 80, 0, 77, - 81, 0, 0, 0, 0, 0, 0, 0, 78, 0, - 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, - 0, 0, 0, 0, 182, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 190, 0, 0, 0, 0, - 0, 0, 0, 0, 2673, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3463, 0, 0, - 0, 0, 0, 0, 677, 677, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 677, 0, 0, - 171, 176, 173, 179, 180, 181, 183, 185, 186, 187, - 188, 0, 0, 0, 0, 0, 189, 191, 192, 193, + 1521, 1522, 1523, 1524, 0, 0, 0, 0, 52, 55, + 58, 57, 60, 0, 76, 0, 0, 85, 63, 82, + 0, 1538, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, + 0, 0, 64, 93, 92, 0, 0, 74, 75, 59, + 0, 0, 0, 0, 0, 83, 84, 0, 0, 0, + 0, 0, 3505, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1544, 195, 0, 0, 0, 0, + 921, 0, 0, 0, 921, 0, 1691, 0, 0, 921, + 0, 0, 0, 679, 1327, 679, 679, 0, 0, 134, + 0, 156, 66, 67, 0, 68, 69, 70, 71, 0, + 0, 0, 177, 0, 0, 679, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 167, 1410, 0, 0, 0, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2428, 0, 0, 0, 0, 174, 0, + 0, 175, 0, 0, 2435, 2436, 2437, 2438, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1407, 0, 0, 0, 0, - 0, 0, 0, 0, 1966, 0, 677, 52, 55, 58, - 57, 60, 1407, 76, 0, 0, 85, 63, 82, 0, + 1695, 1696, 166, 165, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 61, 0, 0, 0, 0, 677, 677, 0, - 0, 64, 93, 92, 0, 0, 74, 75, 59, 0, - 0, 3503, 0, 0, 83, 84, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3501, 0, 0, 0, 3517, 0, 0, 3518, 0, 3519, - 0, 0, 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 67, 0, 68, 69, 70, 71, 0, 0, 0, - 2795, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 677, 2165, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3599, 0, 0, 677, 0, 0, 677, - 0, 0, 0, 0, 0, 0, 2857, 0, 89, 0, - 0, 2165, 2165, 2165, 2165, 2165, 0, 0, 0, 677, - 0, 0, 0, 3613, 0, 3614, 0, 3615, 0, 0, - 0, 2165, 0, 0, 2165, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1410, 0, 0, 0, + 0, 0, 0, 160, 1697, 163, 0, 1694, 0, 161, + 162, 0, 0, 0, 0, 0, 0, 178, 96, 0, + 0, 0, 0, 0, 0, 1168, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1584, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 679, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 677, 0, - 0, 0, 0, 0, 0, 2248, 2249, 2250, 0, 0, - 0, 0, 0, 3660, 0, 3661, 0, 0, 2963, 0, - 0, 0, 0, 0, 0, 677, 0, 0, 2971, 0, - 0, 677, 1709, 0, 0, 1709, 0, 1709, 0, 0, - 0, 0, 0, 2280, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1167, 0, 1167, 1167, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 677, 0, - 0, 0, 1336, 677, 0, 0, 0, 677, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1666, 0, + 0, 0, 0, 0, 73, 0, 0, 0, 62, 1677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 679, 0, 1703, 169, 0, 0, 798, 0, + 0, 0, 1712, 0, 0, 1410, 1714, 0, 0, 1717, + 1718, 679, 679, 0, 679, 0, 679, 679, 0, 679, + 679, 679, 679, 679, 679, 0, 0, 0, 0, 0, + 0, 0, 1410, 1749, 1750, 1410, 679, 1410, 0, 1755, + 1168, 1168, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 89, 0, 0, 89, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 678, + 0, 679, 195, 0, 0, 0, 0, 0, 0, 0, + 0, 164, 0, 0, 0, 0, 1834, 0, 0, 679, + 0, 0, 0, 0, 0, 0, 134, 0, 156, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 797, 0, 0, 0, 0, 0, 0, + 0, 0, 973, 0, 0, 981, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2730, 679, 0, 0, 0, + 167, 0, 157, 0, 0, 158, 155, 0, 0, 0, + 0, 0, 0, 0, 948, 0, 0, 2754, 2755, 0, + 0, 2757, 0, 0, 2759, 174, 0, 0, 175, 0, + 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, + 0, 0, 182, 0, 2766, 2767, 2768, 143, 144, 166, + 165, 194, 0, 0, 0, 0, 2773, 0, 0, 2775, + 2776, 2777, 0, 0, 0, 2778, 2779, 0, 0, 2055, + 2781, 0, 0, 2783, 0, 0, 2785, 2786, 2787, 2788, + 0, 0, 0, 190, 2789, 2055, 2055, 2055, 2055, 2055, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 948, 0, 0, 0, 0, 0, 0, + 2812, 2813, 2814, 2815, 2816, 2817, 0, 0, 0, 2818, + 2819, 0, 2820, 0, 2821, 0, 0, 0, 171, 176, + 173, 179, 180, 181, 183, 185, 186, 187, 188, 0, + 0, 0, 0, 0, 189, 191, 192, 193, 0, 0, + 160, 141, 163, 148, 140, 0, 161, 162, 0, 0, + 0, 0, 0, 0, 178, 0, 0, 0, 0, 2852, + 2169, 679, 679, 184, 149, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 679, 0, 0, 0, 152, 150, + 145, 146, 147, 151, 2882, 0, 0, 0, 0, 0, + 142, 0, 0, 0, 0, 0, 0, 0, 0, 153, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 679, 0, 982, 0, 0, 0, 0, 0, + 0, 0, 1410, 0, 0, 2945, 0, 0, 0, 0, + 0, 1970, 0, 679, 0, 0, 0, 0, 0, 1410, + 0, 0, 0, 0, 0, 0, 0, 982, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 679, 679, 0, 0, 0, 0, + 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, + 0, 0, 3039, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3048, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, + 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 679, 0, 0, 679, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, + 0, 0, 158, 0, 0, 0, 679, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 170, 0, 0, 0, 0, 0, 0, 182, + 0, 0, 0, 0, 0, 0, 0, 0, 2401, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 679, 0, 0, 1170, 0, + 1170, 1170, 2252, 2253, 2254, 0, 0, 0, 669, 0, + 190, 0, 0, 0, 0, 0, 3189, 2411, 0, 0, + 1339, 0, 679, 0, 0, 0, 0, 0, 679, 1712, + 0, 0, 1712, 0, 1712, 0, 0, 0, 0, 0, + 2284, 0, 0, 0, 0, 0, 0, 0, 0, 3213, + 0, 0, 663, 0, 0, 171, 176, 173, 179, 180, + 181, 183, 185, 186, 187, 188, 0, 0, 0, 0, + 0, 189, 191, 192, 193, 679, 0, 0, 0, 0, + 679, 0, 0, 0, 679, 679, 0, 0, 0, 0, + 0, 0, 0, 0, 660, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3233, + 0, 3234, 0, 0, 3235, 0, 0, 3238, 3239, 0, + 0, 0, 0, 0, 0, 0, 3243, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3245, 0, 0, 0, + 0, 0, 641, 2509, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 639, 0, 3262, 0, + 0, 3263, 0, 3264, 3265, 0, 3266, 0, 3267, 0, + 0, 0, 0, 3268, 0, 2541, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 921, 0, 0, 0, 636, 0, 3293, 0, + 0, 0, 0, 0, 0, 654, 0, 0, 0, 3301, + 0, 0, 3303, 2580, 2581, 0, 0, 0, 0, 0, + 649, 0, 2169, 679, 3307, 921, 2600, 0, 0, 0, + 0, 0, 646, 652, 648, 0, 0, 0, 0, 0, + 0, 0, 3382, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1547, 1548, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 73, 0, 0, 0, 62, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1590, 0, 1410, + 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 626, 1608, 628, 642, 0, 666, 0, 665, 632, + 0, 630, 634, 643, 635, 0, 629, 0, 640, 0, + 0, 631, 644, 645, 651, 655, 656, 657, 653, 650, + 658, 624, 625, 647, 0, 638, 667, 0, 0, 2677, + 0, 0, 0, 0, 0, 0, 0, 973, 0, 0, + 0, 0, 3467, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1720, 1720, 0, 1720, + 0, 1720, 1720, 0, 1729, 1720, 1720, 1720, 1720, 1720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 973, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 198, 0, 0, 614, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1797, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, - 928, 0, 2165, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3146, 0, 947, 947, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, + 0, 0, 0, 0, 1838, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1170, 0, 0, 0, 0, 3507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 97, 0, 0, 857, 0, 0, - 0, 845, 858, 859, 860, 861, 846, 0, 0, 847, - 848, 1407, 849, 677, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 854, 862, 863, 0, - 0, 0, 0, 0, 1544, 1545, 0, 0, 0, 0, + 0, 0, 0, 0, 2614, 0, 0, 0, 0, 3521, + 0, 0, 3522, 0, 3523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1587, - 0, 0, 0, 2975, 2976, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1605, 864, 865, 866, 867, 868, - 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, - 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, - 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, - 899, 900, 901, 902, 903, 904, 905, 0, 0, 971, + 668, 0, 0, 0, 0, 2799, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, + 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, + 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, + 679, 0, 0, 0, 1712, 1712, 0, 0, 2169, 679, + 0, 0, 0, 0, 0, 0, 0, 799, 3603, 0, + 0, 0, 0, 0, 0, 1410, 2687, 0, 0, 0, + 0, 2861, 0, 89, 0, 0, 2169, 2169, 2169, 2169, + 2169, 0, 0, 0, 0, 0, 0, 0, 3617, 0, + 3618, 0, 3619, 0, 0, 0, 2169, 0, 0, 2169, + 0, 0, 0, 0, 0, 0, 1170, 1170, 0, 0, + 0, 0, 0, 0, 198, 0, 0, 615, 0, 1902, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1717, 1717, - 0, 1717, 0, 1717, 1717, 0, 1726, 1717, 1717, 1717, - 1717, 1717, 0, 0, 0, 0, 0, 0, 3265, 2977, - 3269, 3270, 0, 971, 0, 0, 0, 0, 0, 0, - 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 677, 0, 2857, 0, 89, 0, 2857, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1794, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1835, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2610, 0, 0, 0, + 0, 0, 0, 0, 930, 0, 0, 0, 3664, 0, + 3665, 0, 0, 2967, 0, 0, 0, 0, 0, 0, + 0, 949, 949, 2975, 0, 0, 0, 1956, 0, 0, + 0, 679, 615, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1972, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2978, 2979, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3391, 0, 0, 0, 0, 0, - 0, 0, 0, 1167, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 679, 2005, + 2006, 0, 0, 0, 0, 3624, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, - 0, 0, 677, 0, 0, 0, 1709, 1709, 0, 0, - 0, 677, 0, 0, 0, 0, 0, 0, 0, 811, - 0, 0, 815, 0, 812, 813, 0, 1407, 2683, 814, + 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, + 0, 0, 0, 0, 679, 0, 0, 0, 0, 1170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2857, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1431, 1432, 1433, - 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, - 1444, 1445, 1446, 1450, 1451, 1452, 1453, 1454, 1455, 1456, - 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, - 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, - 1477, 1478, 1479, 1481, 1482, 1483, 1484, 1485, 1486, 1487, - 1488, 1489, 1490, 1508, 1509, 1510, 1511, 1512, 1513, 1514, - 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1167, 1167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1898, 3490, 0, 677, 614, 0, 614, 0, 0, 614, - 614, 0, 0, 0, 0, 0, 0, 0, 0, 89, + 0, 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 679, 0, 0, 0, 0, 2131, 0, + 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, + 0, 1410, 0, 0, 679, 679, 1410, 0, 0, 0, + 0, 0, 0, 0, 2141, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1590, 0, + 0, 1170, 0, 0, 0, 0, 0, 2169, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1623, + 3150, 973, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, + 0, 0, 1410, 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 677, 0, 0, 0, 0, 0, 0, 0, 1952, 0, + 981, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 614, 0, 0, 0, 0, 1968, - 0, 0, 0, 0, 0, 0, 0, 0, 677, 0, - 3535, 0, 0, 0, 0, 89, 677, 0, 0, 0, - 0, 0, 1409, 0, 0, 0, 0, 0, 0, 0, - 2001, 2002, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 677, 0, 0, + 0, 0, 0, 0, 1636, 0, 0, 973, 0, 0, + 0, 0, 0, 981, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3014, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 677, - 1167, 0, 0, 1407, 0, 0, 677, 677, 1407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3617, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2127, + 973, 0, 0, 0, 0, 1956, 0, 0, 0, 1956, + 1956, 1649, 1652, 1653, 1654, 1655, 1656, 1657, 0, 1658, + 1659, 1661, 1662, 1660, 1663, 1664, 1637, 1638, 1639, 1640, + 1621, 1622, 1650, 679, 1624, 0, 1625, 1626, 1627, 1628, + 1629, 1630, 1631, 1632, 1633, 0, 0, 1634, 1641, 1642, + 1643, 1644, 0, 1645, 1646, 1647, 1648, 0, 0, 0, + 0, 0, 0, 3269, 0, 3273, 3274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2926, - 0, 0, 0, 0, 0, 2137, 0, 0, 0, 0, - 0, 0, 0, 0, 1409, 0, 0, 0, 0, 1587, - 0, 677, 1167, 0, 1407, 0, 0, 0, 0, 677, + 0, 0, 0, 0, 0, 0, 0, 0, 2861, 0, + 89, 0, 2861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 971, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3010, 0, 0, 0, 0, - 928, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 979, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 971, 0, - 0, 0, 614, 0, 979, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3157, 0, 0, 615, + 0, 615, 0, 0, 615, 615, 0, 0, 2388, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 679, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 971, 0, 1409, 0, 0, 1952, 0, 0, 0, - 1952, 1952, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1651, 0, 0, 0, 0, + 615, 0, 0, 0, 0, 0, 1170, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 679, 679, 679, + 679, 0, 0, 0, 0, 0, 0, 0, 1412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1409, 0, 0, 1409, 0, 1409, 614, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1768, 0, 0, 0, + 0, 0, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, + 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1453, 1454, + 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, + 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, + 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1484, 1485, + 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1511, 1512, + 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, + 1523, 1524, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3494, 1410, 0, 0, + 0, 0, 679, 0, 679, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, + 1412, 0, 0, 2549, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2564, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 614, 0, 0, 0, 0, 0, 0, 3153, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1837, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, - 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, - 0, 0, 677, 677, 0, 1869, 1870, 614, 614, 614, - 614, 614, 614, 614, 97, 0, 0, 857, 0, 0, - 0, 845, 858, 859, 860, 861, 846, 0, 2384, 847, - 848, 0, 849, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 854, 862, 863, 677, - 677, 677, 677, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, + 679, 0, 0, 0, 0, 3539, 0, 0, 0, 0, + 89, 0, 0, 679, 0, 0, 930, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2646, 0, 0, 0, 0, 0, 0, 615, 0, + 0, 0, 0, 679, 0, 0, 0, 679, 679, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2141, 0, + 0, 0, 0, 0, 0, 2671, 0, 0, 0, 0, + 0, 0, 0, 0, 2676, 0, 679, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3621, 0, 0, 1412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2975, 2976, 0, 1167, 0, 0, 0, - 0, 0, 0, 0, 0, 864, 865, 866, 867, 868, - 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, - 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, - 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, - 899, 900, 901, 902, 903, 904, 905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1412, 0, 0, 1412, + 0, 1412, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1407, - 0, 0, 0, 0, 677, 0, 677, 0, 0, 2977, + 0, 0, 1771, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 679, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1840, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, + 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, + 1635, 0, 615, 0, 0, 0, 1956, 0, 0, 0, + 0, 1872, 1873, 615, 615, 615, 615, 615, 615, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1410, 0, 679, 1956, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 677, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 679, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 677, 2545, 0, 0, 0, 0, 0, 1409, - 2978, 2979, 0, 0, 2560, 677, 0, 0, 0, 0, - 0, 947, 947, 0, 0, 0, 1409, 0, 0, 0, + 0, 2800, 0, 0, 0, 0, 0, 0, 679, 1170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1720, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1623, 0, 0, 0, 2837, 0, + 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, + 0, 0, 1170, 0, 0, 0, 0, 0, 0, 2864, + 1720, 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 677, 0, 0, 0, 677, - 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 679, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 677, 0, - 947, 1837, 947, 947, 947, 947, 947, 0, 0, 0, - 0, 2642, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1636, + 0, 0, 0, 3326, 3328, 3327, 3345, 3346, 3347, 3348, + 3349, 3350, 3351, 747, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 973, 0, 0, 0, 0, 0, + 0, 0, 2141, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1412, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 949, 949, + 0, 0, 0, 1412, 0, 0, 1649, 1652, 1653, 1654, + 1655, 1656, 1657, 0, 1658, 1659, 1661, 1662, 1660, 1663, + 1664, 1637, 1638, 1639, 1640, 1621, 1622, 1650, 0, 1624, + 0, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, + 0, 0, 1634, 1641, 1642, 1643, 1644, 0, 1645, 1646, + 1647, 1648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2137, 0, - 0, 0, 0, 0, 1768, 2667, 0, 0, 0, 0, - 0, 0, 0, 0, 2672, 0, 0, 0, 0, 947, + 0, 0, 0, 0, 0, 0, 0, 949, 1840, 949, + 949, 949, 949, 949, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3077, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 928, 0, 0, 0, 677, 0, 0, - 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, - 0, 0, 0, 1837, 614, 0, 614, 0, 614, 2174, + 0, 0, 0, 859, 0, 2085, 0, 0, 860, 0, + 0, 1771, 0, 0, 0, 0, 0, 0, 1961, 0, + 0, 0, 0, 0, 0, 0, 949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 677, 0, 0, 0, 0, 0, 3322, 3324, 3323, - 3341, 3342, 3343, 3344, 3345, 3346, 3347, 745, 0, 0, + 930, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, + 1840, 615, 0, 615, 0, 615, 2178, 0, 0, 0, + 0, 0, 0, 3332, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3340, 3341, + 1651, 866, 867, 868, 869, 870, 871, 872, 873, 874, + 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, + 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 0, 0, 2141, 2141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 813, 0, + 726, 817, 728, 814, 815, 0, 724, 727, 816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3221, 3222, 3223, 3224, 0, 0, 0, 0, + 0, 0, 0, 0, 745, 746, 3325, 3329, 3330, 3331, + 3342, 3343, 3344, 3352, 3354, 778, 3353, 3355, 3356, 3357, + 3360, 3361, 3362, 3363, 3358, 3359, 3364, 3309, 3313, 3310, + 3311, 3312, 3324, 3314, 3315, 3316, 3317, 3318, 3319, 3320, + 3321, 3322, 3323, 3365, 3366, 3367, 3368, 3369, 3370, 3335, + 3339, 3338, 3336, 3337, 3333, 3334, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 818, 0, + 819, 0, 0, 823, 0, 0, 615, 825, 824, 0, + 826, 792, 791, 615, 0, 820, 821, 0, 822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 677, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1407, 0, 677, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1952, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 677, 677, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, + 615, 0, 0, 615, 0, 2375, 0, 0, 0, 0, + 0, 615, 0, 0, 0, 0, 0, 3297, 0, 3299, + 0, 615, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3371, 3372, 3373, 3374, 3375, 3376, 3377, + 3378, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 677, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1952, 0, 677, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3405, 0, 0, 0, 0, + 0, 0, 0, 0, 97, 0, 0, 859, 1170, 0, + 0, 847, 860, 861, 862, 863, 848, 0, 0, 849, + 850, 0, 851, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1412, 0, 1840, 856, 864, 865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3455, 0, + 0, 0, 3455, 3455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2796, 0, 0, 0, 0, 0, 0, 677, 1167, + 0, 0, 0, 2979, 2980, 0, 0, 0, 0, 0, + 0, 2141, 0, 0, 0, 866, 867, 868, 869, 870, + 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, + 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, + 901, 902, 903, 904, 905, 906, 907, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, - 677, 0, 0, 857, 0, 2081, 614, 0, 858, 0, - 1717, 0, 0, 0, 0, 0, 0, 677, 1957, 677, - 0, 0, 0, 0, 0, 0, 0, 0, 2833, 0, - 0, 0, 614, 614, 0, 0, 614, 0, 2371, 0, - 0, 0, 1167, 0, 614, 0, 0, 0, 0, 2860, - 1717, 0, 0, 0, 614, 0, 3328, 0, 0, 0, - 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3336, 3337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 614, 864, 865, 866, 867, 868, 869, 870, 871, 872, - 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, - 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, - 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, - 903, 904, 905, 0, 971, 0, 0, 0, 0, 0, - 0, 811, 2137, 724, 815, 726, 812, 813, 0, 722, - 725, 814, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1409, 0, 1837, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 743, 744, 3321, - 3325, 3326, 3327, 3338, 3339, 3340, 3348, 3350, 776, 3349, - 3351, 3352, 3353, 3356, 3357, 3358, 3359, 3354, 3355, 3360, - 3305, 3309, 3306, 3307, 3308, 3320, 3310, 3311, 3312, 3313, - 3314, 3315, 3316, 3317, 3318, 3319, 3361, 3362, 3363, 3364, - 3365, 3366, 3331, 3335, 3334, 3332, 3333, 3329, 3330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 816, 0, 817, 0, 0, 821, 0, 0, 0, - 823, 822, 0, 824, 790, 789, 0, 0, 818, 819, - 0, 820, 0, 0, 0, 0, 0, 0, 3073, 0, + 2141, 0, 0, 0, 0, 0, 0, 0, 0, 2981, + 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, + 0, 0, 1771, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, + 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3532, 0, 0, 0, 0, + 0, 2982, 2983, 0, 0, 0, 0, 3536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, - 0, 0, 0, 0, 1768, 0, 3367, 3368, 3369, 3370, - 3371, 3372, 3373, 3374, 0, 0, 0, 0, 0, 0, + 0, 1170, 1170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3579, 0, 0, 615, 0, 0, 0, + 0, 0, 0, 2656, 0, 0, 0, 0, 3587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, - 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 813, 0, 0, 817, 0, 814, 815, 0, 0, 0, + 816, 0, 0, 0, 0, 0, 0, 0, 0, 1412, + 0, 3532, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 615, 615, 615, 615, 615, 0, 0, 0, + 0, 0, 0, 2141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3077, 0, 3587, 0, 0, 97, 0, 0, 859, 0, + 0, 0, 847, 860, 861, 862, 863, 848, 0, 0, + 849, 850, 0, 851, 0, 0, 0, 0, 615, 615, + 0, 0, 0, 0, 0, 0, 0, 856, 864, 865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2137, 2137, 0, 0, 0, + 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 857, 0, 0, 0, 0, 858, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1957, 0, 614, 0, - 0, 0, 0, 0, 0, 2652, 0, 0, 0, 0, - 0, 0, 3217, 3218, 3219, 3220, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 949, 0, + 0, 0, 0, 0, 2979, 2980, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, + 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, + 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, + 900, 901, 902, 903, 904, 905, 906, 907, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 949, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 859, + 2981, 0, 0, 0, 860, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1961, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1409, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 614, 614, 614, 614, 614, 864, - 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, - 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, - 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, - 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, - 905, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 614, 614, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 614, 3293, 0, 3295, + 0, 0, 0, 0, 0, 1412, 0, 0, 0, 0, + 1412, 615, 615, 615, 615, 615, 0, 0, 0, 0, + 0, 0, 0, 2880, 0, 0, 0, 0, 0, 1771, + 0, 615, 2982, 2983, 615, 2888, 1840, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, + 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, + 899, 900, 901, 902, 903, 904, 905, 906, 907, 0, + 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1412, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 947, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 615, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3401, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 947, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3451, 0, - 0, 0, 3451, 3451, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2137, 0, 0, 0, 0, 0, 1409, 0, 0, - 0, 0, 1409, 614, 614, 614, 614, 614, 0, 0, - 0, 0, 0, 0, 0, 2876, 0, 0, 0, 0, - 0, 1768, 0, 614, 0, 0, 614, 2884, 1837, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2137, 0, 614, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1409, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, - 0, 0, 0, 0, 2137, 0, 0, 0, 0, 0, - 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 614, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3528, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3532, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1167, 1167, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3575, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, + 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 615, 0, 0, 615, 615, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2137, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, - 3073, 0, 3583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 614, 0, 0, 614, 614, 614, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2465,3268 +2450,1389 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 392, 0, 0, 0, 1304, 1289, 513, 0, 1232, + 1307, 1201, 1220, 1317, 1223, 1226, 1268, 1180, 1246, 411, + 1217, 1173, 1205, 1175, 1212, 1176, 1203, 1234, 269, 1200, + 1291, 1250, 1306, 362, 266, 1182, 1206, 425, 1222, 207, + 1270, 482, 253, 373, 370, 521, 281, 272, 268, 251, + 315, 381, 423, 503, 417, 1313, 366, 1256, 0, 492, + 396, 0, 0, 0, 1236, 1295, 1244, 1282, 1231, 1269, + 1190, 1255, 1308, 1218, 1265, 1309, 321, 249, 323, 206, + 408, 493, 285, 0, 0, 1771, 0, 3559, 669, 0, + 0, 0, 0, 3560, 0, 0, 0, 0, 239, 0, + 0, 246, 0, 0, 615, 347, 356, 355, 336, 337, + 339, 341, 346, 353, 359, 1214, 1262, 1303, 1215, 1264, + 264, 319, 271, 263, 518, 1314, 1294, 1179, 1243, 1302, + 0, 0, 230, 1305, 1238, 0, 1267, 0, 1320, 1174, + 1258, 0, 1177, 1181, 1316, 1298, 1209, 274, 0, 0, + 0, 0, 0, 0, 0, 1235, 1245, 1279, 1283, 1229, + 0, 0, 0, 0, 1412, 0, 0, 1207, 0, 1254, + 0, 0, 0, 1186, 1178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1233, 0, 0, + 0, 0, 1189, 0, 1208, 1280, 1771, 1172, 296, 1183, + 397, 256, 1326, 0, 449, 1287, 1297, 1230, 561, 1301, + 1228, 1227, 1274, 1187, 1293, 1221, 361, 1185, 328, 202, + 226, 0, 1219, 407, 457, 469, 1292, 1204, 1213, 254, + 1211, 467, 421, 538, 234, 283, 454, 427, 465, 437, + 286, 1253, 1272, 466, 368, 523, 447, 535, 562, 563, + 262, 401, 547, 507, 556, 587, 227, 259, 415, 500, + 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, + 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, + 431, 432, 570, 582, 571, 573, 214, 502, 533, 240, + 479, 0, 0, 589, 248, 499, 216, 530, 498, 389, + 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, + 410, 527, 528, 255, 590, 229, 555, 221, 1184, 554, + 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, + 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 591, + 235, 236, 238, 1199, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 1288, 517, 536, 548, + 560, 566, 567, 569, 574, 575, 576, 577, 583, 581, + 578, 579, 580, 572, 402, 309, 490, 331, 369, 1277, + 1319, 420, 468, 241, 540, 491, 1322, 1323, 1324, 1325, + 1194, 1198, 1192, 1259, 1193, 1248, 1249, 1195, 1310, 1311, + 1312, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 0, + 1281, 1188, 0, 1196, 1197, 1290, 1299, 1300, 610, 380, + 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, + 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, + 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, + 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, + 546, 307, 464, 463, 329, 330, 375, 446, 1252, 201, + 222, 364, 1315, 450, 287, 588, 551, 545, 208, 224, + 1191, 261, 1202, 1210, 0, 1216, 1224, 1225, 1237, 1239, + 1240, 1241, 1242, 1260, 1261, 1263, 1271, 1273, 1276, 1278, + 1285, 1296, 1318, 203, 204, 211, 223, 233, 237, 244, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, + 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, + 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, + 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, + 313, 585, 586, 298, 534, 565, 532, 584, 559, 435, + 374, 1251, 1321, 549, 1257, 377, 280, 303, 318, 1266, + 550, 497, 228, 462, 289, 252, 1284, 1286, 213, 247, + 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, + 265, 428, 1247, 1275, 372, 514, 515, 314, 392, 0, + 0, 0, 1304, 1289, 513, 0, 1232, 1307, 1201, 1220, + 1317, 1223, 1226, 1268, 1180, 1246, 411, 1217, 1173, 1205, + 1175, 1212, 1176, 1203, 1234, 269, 1200, 1291, 1250, 1306, + 362, 266, 1182, 1206, 425, 1222, 207, 1270, 482, 253, + 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, + 503, 417, 1313, 366, 1256, 0, 492, 396, 0, 0, + 0, 1236, 1295, 1244, 1282, 1231, 1269, 1190, 1255, 1308, + 1218, 1265, 1309, 321, 249, 323, 206, 408, 493, 285, + 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, + 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, + 353, 359, 1214, 1262, 1303, 1215, 1264, 264, 319, 271, + 263, 518, 1314, 1294, 1179, 1243, 1302, 0, 0, 230, + 1305, 1238, 0, 1267, 0, 1320, 1174, 1258, 0, 1177, + 1181, 1316, 1298, 1209, 274, 0, 0, 0, 0, 0, + 0, 0, 1235, 1245, 1279, 1283, 1229, 0, 0, 0, + 0, 0, 2889, 0, 1207, 0, 1254, 0, 0, 0, + 1186, 1178, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1233, 0, 0, 0, 0, 1189, + 0, 1208, 1280, 0, 1172, 296, 1183, 397, 256, 1326, + 0, 449, 1287, 1297, 1230, 561, 1301, 1228, 1227, 1274, + 1187, 1293, 1221, 361, 1185, 328, 202, 226, 0, 1219, + 407, 457, 469, 1292, 1204, 1213, 254, 1211, 467, 421, + 538, 234, 283, 454, 427, 465, 437, 286, 1253, 1272, + 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, + 507, 556, 587, 227, 259, 415, 500, 541, 489, 393, + 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, + 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, + 582, 571, 573, 214, 502, 533, 240, 479, 0, 0, + 589, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, + 255, 590, 229, 555, 221, 1184, 554, 403, 522, 531, + 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, + 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, + 542, 0, 210, 0, 494, 543, 591, 235, 236, 238, + 1199, 278, 282, 290, 293, 301, 302, 311, 363, 414, + 443, 439, 448, 1288, 517, 536, 548, 560, 566, 567, + 569, 574, 575, 576, 577, 583, 581, 578, 579, 580, + 572, 402, 309, 490, 331, 369, 1277, 1319, 420, 468, + 241, 540, 491, 1322, 1323, 1324, 1325, 1194, 1198, 1192, + 1259, 1193, 1248, 1249, 1195, 1310, 1311, 1312, 592, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 0, 1281, 1188, 0, + 1196, 1197, 1290, 1299, 1300, 610, 380, 481, 537, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, + 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, + 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, + 463, 329, 330, 375, 446, 1252, 201, 222, 364, 1315, + 450, 287, 588, 551, 545, 208, 224, 1191, 261, 1202, + 1210, 0, 1216, 1224, 1225, 1237, 1239, 1240, 1241, 1242, + 1260, 1261, 1263, 1271, 1273, 1276, 1278, 1285, 1296, 1318, + 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, + 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, + 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, + 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, + 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, + 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, + 564, 476, 299, 300, 441, 442, 312, 313, 585, 586, + 298, 534, 565, 532, 584, 559, 435, 374, 1251, 1321, + 549, 1257, 377, 280, 303, 318, 1266, 550, 497, 228, + 462, 289, 252, 1284, 1286, 213, 247, 231, 258, 273, + 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, + 242, 480, 504, 505, 506, 508, 391, 265, 428, 1247, + 1275, 372, 514, 515, 314, 392, 0, 0, 0, 1304, + 1289, 513, 0, 1232, 1307, 1201, 1220, 1317, 1223, 1226, + 1268, 1180, 1246, 411, 1217, 1173, 1205, 1175, 1212, 1176, + 1203, 1234, 269, 1200, 1291, 1250, 1306, 362, 266, 1182, + 1206, 425, 1222, 207, 1270, 482, 253, 373, 370, 521, + 281, 272, 268, 251, 315, 381, 423, 503, 417, 1313, + 366, 1256, 0, 492, 396, 0, 0, 0, 1236, 1295, + 1244, 1282, 1231, 1269, 1190, 1255, 1308, 1218, 1265, 1309, + 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, + 0, 0, 669, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, + 356, 355, 336, 337, 339, 341, 346, 353, 359, 1214, + 1262, 1303, 1215, 1264, 264, 319, 271, 263, 518, 1314, + 1294, 1179, 1243, 1302, 0, 0, 230, 1305, 1238, 0, + 1267, 0, 1320, 1174, 1258, 0, 1177, 1181, 1316, 1298, + 1209, 274, 0, 0, 0, 0, 0, 0, 0, 1235, + 1245, 1279, 1283, 1229, 0, 0, 0, 0, 0, 2850, + 0, 1207, 0, 1254, 0, 0, 0, 1186, 1178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 392, 0, 0, 0, 1301, 1286, 513, - 0, 1229, 1304, 1198, 1217, 1314, 1220, 1223, 1265, 1177, - 1243, 411, 1214, 1170, 1202, 1172, 1209, 1173, 1200, 1231, - 269, 1197, 1288, 1247, 1303, 362, 266, 1179, 1203, 425, - 1219, 207, 1267, 482, 253, 373, 370, 521, 281, 272, - 268, 251, 315, 381, 423, 503, 417, 1310, 366, 1253, - 0, 492, 396, 0, 0, 0, 1233, 1292, 1241, 1279, - 1228, 1266, 1187, 1252, 1305, 1215, 1262, 1306, 321, 249, - 323, 206, 408, 493, 285, 0, 0, 1768, 0, 3555, - 667, 0, 0, 0, 0, 3556, 0, 0, 0, 0, - 239, 0, 0, 246, 0, 0, 614, 347, 356, 355, - 336, 337, 339, 341, 346, 353, 359, 1211, 1259, 1300, - 1212, 1261, 264, 319, 271, 263, 518, 1311, 1291, 1176, - 1240, 1299, 0, 0, 230, 1302, 1235, 0, 1264, 0, - 1317, 1171, 1255, 0, 1174, 1178, 1313, 1295, 1206, 274, - 0, 0, 0, 0, 0, 0, 0, 1232, 1242, 1276, - 1280, 1226, 0, 0, 0, 0, 1409, 0, 0, 1204, - 0, 1251, 0, 0, 0, 1183, 1175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1230, - 0, 0, 0, 0, 1186, 0, 1205, 1277, 1768, 1169, - 296, 1180, 397, 256, 1323, 0, 449, 1284, 1294, 1227, - 561, 1298, 1225, 1224, 1271, 1184, 1290, 1218, 361, 1182, - 328, 202, 226, 0, 1216, 407, 457, 469, 1289, 1201, - 1210, 254, 1208, 467, 421, 538, 234, 283, 454, 427, - 465, 437, 286, 1250, 1269, 466, 368, 523, 447, 535, - 562, 563, 262, 401, 547, 507, 556, 586, 227, 259, - 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, - 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, - 288, 452, 431, 432, 570, 581, 571, 214, 502, 533, - 240, 479, 0, 0, 588, 248, 499, 216, 530, 498, + 0, 1233, 0, 0, 0, 0, 1189, 0, 1208, 1280, + 0, 1172, 296, 1183, 397, 256, 1326, 0, 449, 1287, + 1297, 1230, 561, 1301, 1228, 1227, 1274, 1187, 1293, 1221, + 361, 1185, 328, 202, 226, 0, 1219, 407, 457, 469, + 1292, 1204, 1213, 254, 1211, 467, 421, 538, 234, 283, + 454, 427, 465, 437, 286, 1253, 1272, 466, 368, 523, + 447, 535, 562, 563, 262, 401, 547, 507, 556, 587, + 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, + 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, + 525, 544, 288, 452, 431, 432, 570, 582, 571, 573, + 214, 502, 533, 240, 479, 0, 0, 589, 248, 499, + 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, + 292, 0, 0, 257, 410, 527, 528, 255, 590, 229, + 555, 221, 1184, 554, 403, 522, 531, 390, 379, 220, + 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, + 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, + 0, 494, 543, 591, 235, 236, 238, 1199, 278, 282, + 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, + 1288, 517, 536, 548, 560, 566, 567, 569, 574, 575, + 576, 577, 583, 581, 578, 579, 580, 572, 402, 309, + 490, 331, 369, 1277, 1319, 420, 468, 241, 540, 491, + 1322, 1323, 1324, 1325, 1194, 1198, 1192, 1259, 1193, 1248, + 1249, 1195, 1310, 1311, 1312, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 608, 609, 0, 1281, 1188, 0, 1196, 1197, 1290, + 1299, 1300, 610, 380, 481, 537, 333, 345, 348, 338, + 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, + 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, + 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, + 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, + 375, 446, 1252, 201, 222, 364, 1315, 450, 287, 588, + 551, 545, 208, 224, 1191, 261, 1202, 1210, 0, 1216, + 1224, 1225, 1237, 1239, 1240, 1241, 1242, 1260, 1261, 1263, + 1271, 1273, 1276, 1278, 1285, 1296, 1318, 203, 204, 211, + 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, + 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, + 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, + 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, + 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, + 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, + 300, 441, 442, 312, 313, 585, 586, 298, 534, 565, + 532, 584, 559, 435, 374, 1251, 1321, 549, 1257, 377, + 280, 303, 318, 1266, 550, 497, 228, 462, 289, 252, + 1284, 1286, 213, 247, 231, 258, 273, 276, 322, 387, + 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, + 505, 506, 508, 391, 265, 428, 1247, 1275, 372, 514, + 515, 314, 392, 0, 0, 0, 1304, 1289, 513, 0, + 1232, 1307, 1201, 1220, 1317, 1223, 1226, 1268, 1180, 1246, + 411, 1217, 1173, 1205, 1175, 1212, 1176, 1203, 1234, 269, + 1200, 1291, 1250, 1306, 362, 266, 1182, 1206, 425, 1222, + 207, 1270, 482, 253, 373, 370, 521, 281, 272, 268, + 251, 315, 381, 423, 503, 417, 1313, 366, 1256, 0, + 492, 396, 0, 0, 0, 1236, 1295, 1244, 1282, 1231, + 1269, 1190, 1255, 1308, 1218, 1265, 1309, 321, 249, 323, + 206, 408, 493, 285, 0, 0, 0, 0, 0, 843, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, + 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, + 337, 339, 341, 346, 353, 359, 1214, 1262, 1303, 1215, + 1264, 264, 319, 271, 263, 518, 1314, 1294, 1179, 1243, + 1302, 0, 0, 230, 1305, 1238, 0, 1267, 0, 1320, + 1174, 1258, 0, 1177, 1181, 1316, 1298, 1209, 274, 0, + 0, 0, 0, 0, 0, 0, 1235, 1245, 1279, 1283, + 1229, 0, 0, 0, 0, 0, 2157, 0, 1207, 0, + 1254, 0, 0, 0, 1186, 1178, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1233, 0, + 0, 0, 0, 1189, 0, 1208, 1280, 0, 1172, 296, + 1183, 397, 256, 1326, 0, 449, 1287, 1297, 1230, 561, + 1301, 1228, 1227, 1274, 1187, 1293, 1221, 361, 1185, 328, + 202, 226, 0, 1219, 407, 457, 469, 1292, 1204, 1213, + 254, 1211, 467, 421, 538, 234, 283, 454, 427, 465, + 437, 286, 1253, 1272, 466, 368, 523, 447, 535, 562, + 563, 262, 401, 547, 507, 556, 587, 227, 259, 415, + 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, + 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, + 452, 431, 432, 570, 582, 571, 573, 214, 502, 533, + 240, 479, 0, 0, 589, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 527, 528, 255, 589, 229, 555, 221, 1181, + 257, 410, 527, 528, 255, 590, 229, 555, 221, 1184, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 590, 235, 236, 238, 1196, 278, 282, 290, 293, 301, - 302, 311, 363, 414, 443, 439, 448, 1285, 517, 536, - 548, 560, 566, 567, 569, 573, 574, 575, 576, 582, - 580, 577, 578, 579, 572, 402, 309, 490, 331, 369, - 1274, 1316, 420, 468, 241, 540, 491, 1319, 1320, 1321, - 1322, 1191, 1195, 1189, 1256, 1190, 1245, 1246, 1192, 1307, - 1308, 1309, 591, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 0, 1278, 1185, 0, 1193, 1194, 1287, 1296, 1297, 609, + 591, 235, 236, 238, 1199, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 443, 439, 448, 1288, 517, 536, + 548, 560, 566, 567, 569, 574, 575, 576, 577, 583, + 581, 578, 579, 580, 572, 402, 309, 490, 331, 369, + 1277, 1319, 420, 468, 241, 540, 491, 1322, 1323, 1324, + 1325, 1194, 1198, 1192, 1259, 1193, 1248, 1249, 1195, 1310, + 1311, 1312, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 0, 1281, 1188, 0, 1196, 1197, 1290, 1299, 1300, 610, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, - 291, 546, 307, 464, 463, 329, 330, 375, 446, 1249, - 201, 222, 364, 1312, 450, 287, 587, 551, 545, 208, - 224, 1188, 261, 1199, 1207, 0, 1213, 1221, 1222, 1234, - 1236, 1237, 1238, 1239, 1257, 1258, 1260, 1268, 1270, 1273, - 1275, 1282, 1293, 1315, 203, 204, 211, 223, 233, 237, + 291, 546, 307, 464, 463, 329, 330, 375, 446, 1252, + 201, 222, 364, 1315, 450, 287, 588, 551, 545, 208, + 224, 1191, 261, 1202, 1210, 0, 1216, 1224, 1225, 1237, + 1239, 1240, 1241, 1242, 1260, 1261, 1263, 1271, 1273, 1276, + 1278, 1285, 1296, 1318, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, - 312, 313, 584, 585, 298, 534, 565, 532, 583, 559, - 435, 374, 1248, 1318, 549, 1254, 377, 280, 303, 318, - 1263, 550, 497, 228, 462, 289, 252, 1281, 1283, 213, + 312, 313, 585, 586, 298, 534, 565, 532, 584, 559, + 435, 374, 1251, 1321, 549, 1257, 377, 280, 303, 318, + 1266, 550, 497, 228, 462, 289, 252, 1284, 1286, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, - 391, 265, 428, 1244, 1272, 372, 514, 515, 314, 392, - 0, 0, 0, 1301, 1286, 513, 0, 1229, 1304, 1198, - 1217, 1314, 1220, 1223, 1265, 1177, 1243, 411, 1214, 1170, - 1202, 1172, 1209, 1173, 1200, 1231, 269, 1197, 1288, 1247, - 1303, 362, 266, 1179, 1203, 425, 1219, 207, 1267, 482, + 391, 265, 428, 1247, 1275, 372, 514, 515, 314, 392, + 0, 0, 0, 1304, 1289, 513, 0, 1232, 1307, 1201, + 1220, 1317, 1223, 1226, 1268, 1180, 1246, 411, 1217, 1173, + 1205, 1175, 1212, 1176, 1203, 1234, 269, 1200, 1291, 1250, + 1306, 362, 266, 1182, 1206, 425, 1222, 207, 1270, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, - 423, 503, 417, 1310, 366, 1253, 0, 492, 396, 0, - 0, 0, 1233, 1292, 1241, 1279, 1228, 1266, 1187, 1252, - 1305, 1215, 1262, 1306, 321, 249, 323, 206, 408, 493, - 285, 0, 0, 0, 0, 0, 199, 0, 0, 0, + 423, 503, 417, 1313, 366, 1256, 0, 492, 396, 0, + 0, 0, 1236, 1295, 1244, 1282, 1231, 1269, 1190, 1255, + 1308, 1218, 1265, 1309, 321, 249, 323, 206, 408, 493, + 285, 0, 97, 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, - 346, 353, 359, 1211, 1259, 1300, 1212, 1261, 264, 319, - 271, 263, 518, 1311, 1291, 1176, 1240, 1299, 0, 0, - 230, 1302, 1235, 0, 1264, 0, 1317, 1171, 1255, 0, - 1174, 1178, 1313, 1295, 1206, 274, 0, 0, 0, 0, - 0, 0, 0, 1232, 1242, 1276, 1280, 1226, 0, 0, - 0, 0, 0, 2885, 0, 1204, 0, 1251, 0, 0, - 0, 1183, 1175, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1230, 0, 0, 0, 0, - 1186, 0, 1205, 1277, 0, 1169, 296, 1180, 397, 256, - 1323, 0, 449, 1284, 1294, 1227, 561, 1298, 1225, 1224, - 1271, 1184, 1290, 1218, 361, 1182, 328, 202, 226, 0, - 1216, 407, 457, 469, 1289, 1201, 1210, 254, 1208, 467, - 421, 538, 234, 283, 454, 427, 465, 437, 286, 1250, - 1269, 466, 368, 523, 447, 535, 562, 563, 262, 401, - 547, 507, 556, 586, 227, 259, 415, 500, 541, 489, + 346, 353, 359, 1214, 1262, 1303, 1215, 1264, 264, 319, + 271, 263, 518, 1314, 1294, 1179, 1243, 1302, 0, 0, + 230, 1305, 1238, 0, 1267, 0, 1320, 1174, 1258, 0, + 1177, 1181, 1316, 1298, 1209, 274, 0, 0, 0, 0, + 0, 0, 0, 1235, 1245, 1279, 1283, 1229, 0, 0, + 0, 0, 0, 0, 0, 1207, 0, 1254, 0, 0, + 0, 1186, 1178, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1233, 0, 0, 0, 0, + 1189, 0, 1208, 1280, 0, 1172, 296, 1183, 397, 256, + 1326, 0, 449, 1287, 1297, 1230, 561, 1301, 1228, 1227, + 1274, 1187, 1293, 1221, 361, 1185, 328, 202, 226, 0, + 1219, 407, 457, 469, 1292, 1204, 1213, 254, 1211, 467, + 421, 538, 234, 283, 454, 427, 465, 437, 286, 1253, + 1272, 466, 368, 523, 447, 535, 562, 563, 262, 401, + 547, 507, 556, 587, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, - 570, 581, 571, 214, 502, 533, 240, 479, 0, 0, - 588, 248, 499, 216, 530, 498, 389, 324, 325, 215, - 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, - 255, 589, 229, 555, 221, 1181, 554, 403, 522, 531, - 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, - 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 590, 235, 236, 238, - 1196, 278, 282, 290, 293, 301, 302, 311, 363, 414, - 443, 439, 448, 1285, 517, 536, 548, 560, 566, 567, - 569, 573, 574, 575, 576, 582, 580, 577, 578, 579, - 572, 402, 309, 490, 331, 369, 1274, 1316, 420, 468, - 241, 540, 491, 1319, 1320, 1321, 1322, 1191, 1195, 1189, - 1256, 1190, 1245, 1246, 1192, 1307, 1308, 1309, 591, 592, + 570, 582, 571, 573, 214, 502, 533, 240, 479, 0, + 0, 589, 248, 499, 216, 530, 498, 389, 324, 325, + 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, + 528, 255, 590, 229, 555, 221, 1184, 554, 403, 522, + 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, + 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, + 209, 542, 0, 210, 0, 494, 543, 591, 235, 236, + 238, 1199, 278, 282, 290, 293, 301, 302, 311, 363, + 414, 443, 439, 448, 1288, 517, 536, 548, 560, 566, + 567, 569, 574, 575, 576, 577, 583, 581, 578, 579, + 580, 572, 402, 309, 490, 331, 369, 1277, 1319, 420, + 468, 241, 540, 491, 1322, 1323, 1324, 1325, 1194, 1198, + 1192, 1259, 1193, 1248, 1249, 1195, 1310, 1311, 1312, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 0, 1278, 1185, 0, - 1193, 1194, 1287, 1296, 1297, 609, 380, 481, 537, 333, - 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, - 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, - 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, - 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, - 463, 329, 330, 375, 446, 1249, 201, 222, 364, 1312, - 450, 287, 587, 551, 545, 208, 224, 1188, 261, 1199, - 1207, 0, 1213, 1221, 1222, 1234, 1236, 1237, 1238, 1239, - 1257, 1258, 1260, 1268, 1270, 1273, 1275, 1282, 1293, 1315, - 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, - 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, - 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, - 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, - 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, - 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, - 564, 476, 299, 300, 441, 442, 312, 313, 584, 585, - 298, 534, 565, 532, 583, 559, 435, 374, 1248, 1318, - 549, 1254, 377, 280, 303, 318, 1263, 550, 497, 228, - 462, 289, 252, 1281, 1283, 213, 247, 231, 258, 273, - 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, - 242, 480, 504, 505, 506, 508, 391, 265, 428, 1244, - 1272, 372, 514, 515, 314, 392, 0, 0, 0, 1301, - 1286, 513, 0, 1229, 1304, 1198, 1217, 1314, 1220, 1223, - 1265, 1177, 1243, 411, 1214, 1170, 1202, 1172, 1209, 1173, - 1200, 1231, 269, 1197, 1288, 1247, 1303, 362, 266, 1179, - 1203, 425, 1219, 207, 1267, 482, 253, 373, 370, 521, - 281, 272, 268, 251, 315, 381, 423, 503, 417, 1310, - 366, 1253, 0, 492, 396, 0, 0, 0, 1233, 1292, - 1241, 1279, 1228, 1266, 1187, 1252, 1305, 1215, 1262, 1306, - 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, - 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, - 356, 355, 336, 337, 339, 341, 346, 353, 359, 1211, - 1259, 1300, 1212, 1261, 264, 319, 271, 263, 518, 1311, - 1291, 1176, 1240, 1299, 0, 0, 230, 1302, 1235, 0, - 1264, 0, 1317, 1171, 1255, 0, 1174, 1178, 1313, 1295, - 1206, 274, 0, 0, 0, 0, 0, 0, 0, 1232, - 1242, 1276, 1280, 1226, 0, 0, 0, 0, 0, 2846, - 0, 1204, 0, 1251, 0, 0, 0, 1183, 1175, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1230, 0, 0, 0, 0, 1186, 0, 1205, 1277, - 0, 1169, 296, 1180, 397, 256, 1323, 0, 449, 1284, - 1294, 1227, 561, 1298, 1225, 1224, 1271, 1184, 1290, 1218, - 361, 1182, 328, 202, 226, 0, 1216, 407, 457, 469, - 1289, 1201, 1210, 254, 1208, 467, 421, 538, 234, 283, - 454, 427, 465, 437, 286, 1250, 1269, 466, 368, 523, - 447, 535, 562, 563, 262, 401, 547, 507, 556, 586, - 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, - 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, - 525, 544, 288, 452, 431, 432, 570, 581, 571, 214, - 502, 533, 240, 479, 0, 0, 588, 248, 499, 216, - 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, - 0, 0, 257, 410, 527, 528, 255, 589, 229, 555, - 221, 1181, 554, 403, 522, 531, 390, 379, 220, 529, - 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, - 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, - 494, 543, 590, 235, 236, 238, 1196, 278, 282, 290, - 293, 301, 302, 311, 363, 414, 443, 439, 448, 1285, - 517, 536, 548, 560, 566, 567, 569, 573, 574, 575, - 576, 582, 580, 577, 578, 579, 572, 402, 309, 490, - 331, 369, 1274, 1316, 420, 468, 241, 540, 491, 1319, - 1320, 1321, 1322, 1191, 1195, 1189, 1256, 1190, 1245, 1246, - 1192, 1307, 1308, 1309, 591, 592, 593, 594, 595, 596, - 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 608, 0, 1278, 1185, 0, 1193, 1194, 1287, 1296, - 1297, 609, 380, 481, 537, 333, 345, 348, 338, 357, - 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, - 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, - 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, - 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, - 446, 1249, 201, 222, 364, 1312, 450, 287, 587, 551, - 545, 208, 224, 1188, 261, 1199, 1207, 0, 1213, 1221, - 1222, 1234, 1236, 1237, 1238, 1239, 1257, 1258, 1260, 1268, - 1270, 1273, 1275, 1282, 1293, 1315, 203, 204, 211, 223, - 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, - 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, - 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, - 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, - 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, - 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, - 441, 442, 312, 313, 584, 585, 298, 534, 565, 532, - 583, 559, 435, 374, 1248, 1318, 549, 1254, 377, 280, - 303, 318, 1263, 550, 497, 228, 462, 289, 252, 1281, - 1283, 213, 247, 231, 258, 273, 276, 322, 387, 395, - 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, - 506, 508, 391, 265, 428, 1244, 1272, 372, 514, 515, - 314, 392, 0, 0, 0, 1301, 1286, 513, 0, 1229, - 1304, 1198, 1217, 1314, 1220, 1223, 1265, 1177, 1243, 411, - 1214, 1170, 1202, 1172, 1209, 1173, 1200, 1231, 269, 1197, - 1288, 1247, 1303, 362, 266, 1179, 1203, 425, 1219, 207, - 1267, 482, 253, 373, 370, 521, 281, 272, 268, 251, - 315, 381, 423, 503, 417, 1310, 366, 1253, 0, 492, - 396, 0, 0, 0, 1233, 1292, 1241, 1279, 1228, 1266, - 1187, 1252, 1305, 1215, 1262, 1306, 321, 249, 323, 206, - 408, 493, 285, 0, 0, 0, 0, 0, 841, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, - 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, - 339, 341, 346, 353, 359, 1211, 1259, 1300, 1212, 1261, - 264, 319, 271, 263, 518, 1311, 1291, 1176, 1240, 1299, - 0, 0, 230, 1302, 1235, 0, 1264, 0, 1317, 1171, - 1255, 0, 1174, 1178, 1313, 1295, 1206, 274, 0, 0, - 0, 0, 0, 0, 0, 1232, 1242, 1276, 1280, 1226, - 0, 0, 0, 0, 0, 2153, 0, 1204, 0, 1251, - 0, 0, 0, 1183, 1175, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1230, 0, 0, - 0, 0, 1186, 0, 1205, 1277, 0, 1169, 296, 1180, - 397, 256, 1323, 0, 449, 1284, 1294, 1227, 561, 1298, - 1225, 1224, 1271, 1184, 1290, 1218, 361, 1182, 328, 202, - 226, 0, 1216, 407, 457, 469, 1289, 1201, 1210, 254, - 1208, 467, 421, 538, 234, 283, 454, 427, 465, 437, - 286, 1250, 1269, 466, 368, 523, 447, 535, 562, 563, - 262, 401, 547, 507, 556, 586, 227, 259, 415, 500, - 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, - 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, - 431, 432, 570, 581, 571, 214, 502, 533, 240, 479, - 0, 0, 588, 248, 499, 216, 530, 498, 389, 324, - 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 527, 528, 255, 589, 229, 555, 221, 1181, 554, 403, - 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, - 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 590, 235, - 236, 238, 1196, 278, 282, 290, 293, 301, 302, 311, - 363, 414, 443, 439, 448, 1285, 517, 536, 548, 560, - 566, 567, 569, 573, 574, 575, 576, 582, 580, 577, - 578, 579, 572, 402, 309, 490, 331, 369, 1274, 1316, - 420, 468, 241, 540, 491, 1319, 1320, 1321, 1322, 1191, - 1195, 1189, 1256, 1190, 1245, 1246, 1192, 1307, 1308, 1309, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 0, 1278, - 1185, 0, 1193, 1194, 1287, 1296, 1297, 609, 380, 481, - 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, - 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, - 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, - 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, - 307, 464, 463, 329, 330, 375, 446, 1249, 201, 222, - 364, 1312, 450, 287, 587, 551, 545, 208, 224, 1188, - 261, 1199, 1207, 0, 1213, 1221, 1222, 1234, 1236, 1237, - 1238, 1239, 1257, 1258, 1260, 1268, 1270, 1273, 1275, 1282, - 1293, 1315, 203, 204, 211, 223, 233, 237, 244, 260, - 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, - 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, - 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, - 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, - 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, - 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, - 584, 585, 298, 534, 565, 532, 583, 559, 435, 374, - 1248, 1318, 549, 1254, 377, 280, 303, 318, 1263, 550, - 497, 228, 462, 289, 252, 1281, 1283, 213, 247, 231, - 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, - 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, - 428, 1244, 1272, 372, 514, 515, 314, 392, 0, 0, - 0, 1301, 1286, 513, 0, 1229, 1304, 1198, 1217, 1314, - 1220, 1223, 1265, 1177, 1243, 411, 1214, 1170, 1202, 1172, - 1209, 1173, 1200, 1231, 269, 1197, 1288, 1247, 1303, 362, - 266, 1179, 1203, 425, 1219, 207, 1267, 482, 253, 373, - 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, - 417, 1310, 366, 1253, 0, 492, 396, 0, 0, 0, - 1233, 1292, 1241, 1279, 1228, 1266, 1187, 1252, 1305, 1215, - 1262, 1306, 321, 249, 323, 206, 408, 493, 285, 0, - 97, 0, 0, 0, 667, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, - 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, - 359, 1211, 1259, 1300, 1212, 1261, 264, 319, 271, 263, - 518, 1311, 1291, 1176, 1240, 1299, 0, 0, 230, 1302, - 1235, 0, 1264, 0, 1317, 1171, 1255, 0, 1174, 1178, - 1313, 1295, 1206, 274, 0, 0, 0, 0, 0, 0, - 0, 1232, 1242, 1276, 1280, 1226, 0, 0, 0, 0, - 0, 0, 0, 1204, 0, 1251, 0, 0, 0, 1183, - 1175, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1230, 0, 0, 0, 0, 1186, 0, - 1205, 1277, 0, 1169, 296, 1180, 397, 256, 1323, 0, - 449, 1284, 1294, 1227, 561, 1298, 1225, 1224, 1271, 1184, - 1290, 1218, 361, 1182, 328, 202, 226, 0, 1216, 407, - 457, 469, 1289, 1201, 1210, 254, 1208, 467, 421, 538, - 234, 283, 454, 427, 465, 437, 286, 1250, 1269, 466, - 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, - 556, 586, 227, 259, 415, 500, 541, 489, 393, 519, - 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, - 243, 232, 525, 544, 288, 452, 431, 432, 570, 581, - 571, 214, 502, 533, 240, 479, 0, 0, 588, 248, + 603, 604, 605, 606, 607, 608, 609, 0, 1281, 1188, + 0, 1196, 1197, 1290, 1299, 1300, 610, 380, 481, 537, + 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, + 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, + 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, + 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, + 464, 463, 329, 330, 375, 446, 1252, 201, 222, 364, + 1315, 450, 287, 588, 551, 545, 208, 224, 1191, 261, + 1202, 1210, 0, 1216, 1224, 1225, 1237, 1239, 1240, 1241, + 1242, 1260, 1261, 1263, 1271, 1273, 1276, 1278, 1285, 1296, + 1318, 203, 204, 211, 223, 233, 237, 244, 260, 275, + 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, + 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, + 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, + 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, + 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, + 558, 564, 476, 299, 300, 441, 442, 312, 313, 585, + 586, 298, 534, 565, 532, 584, 559, 435, 374, 1251, + 1321, 549, 1257, 377, 280, 303, 318, 1266, 550, 497, + 228, 462, 289, 252, 1284, 1286, 213, 247, 231, 258, + 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, + 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, + 1247, 1275, 372, 514, 515, 314, 392, 0, 0, 0, + 1304, 1289, 513, 0, 1232, 1307, 1201, 1220, 1317, 1223, + 1226, 1268, 1180, 1246, 411, 1217, 1173, 1205, 1175, 1212, + 1176, 1203, 1234, 269, 1200, 1291, 1250, 1306, 362, 266, + 1182, 1206, 425, 1222, 207, 1270, 482, 253, 373, 370, + 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, + 1313, 366, 1256, 0, 492, 396, 0, 0, 0, 1236, + 1295, 1244, 1282, 1231, 1269, 1190, 1255, 1308, 1218, 1265, + 1309, 321, 249, 323, 206, 408, 493, 285, 0, 0, + 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, + 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, + 1214, 1262, 1303, 1215, 1264, 264, 319, 271, 263, 518, + 1314, 1294, 1179, 1243, 1302, 0, 0, 230, 1305, 1238, + 0, 1267, 0, 1320, 1174, 1258, 0, 1177, 1181, 1316, + 1298, 1209, 274, 0, 0, 0, 0, 0, 0, 0, + 1235, 1245, 1279, 1283, 1229, 0, 0, 0, 0, 0, + 0, 0, 1207, 0, 1254, 0, 0, 0, 1186, 1178, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1233, 0, 0, 0, 0, 1189, 0, 1208, + 1280, 0, 1172, 296, 1183, 397, 256, 1326, 0, 449, + 1287, 1297, 1230, 561, 1301, 1228, 1227, 1274, 1187, 1293, + 1221, 361, 1185, 328, 202, 226, 0, 1219, 407, 457, + 469, 1292, 1204, 1213, 254, 1211, 467, 421, 538, 234, + 283, 454, 427, 465, 437, 286, 1253, 1272, 466, 368, + 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, + 587, 227, 259, 415, 500, 541, 489, 393, 519, 520, + 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, + 232, 525, 544, 288, 452, 431, 432, 570, 582, 571, + 573, 214, 502, 533, 240, 479, 0, 0, 589, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 589, - 229, 555, 221, 1181, 554, 403, 522, 531, 390, 379, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 590, + 229, 555, 221, 1184, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 590, 235, 236, 238, 1196, 278, + 210, 0, 494, 543, 591, 235, 236, 238, 1199, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 1285, 517, 536, 548, 560, 566, 567, 569, 573, - 574, 575, 576, 582, 580, 577, 578, 579, 572, 402, - 309, 490, 331, 369, 1274, 1316, 420, 468, 241, 540, - 491, 1319, 1320, 1321, 1322, 1191, 1195, 1189, 1256, 1190, - 1245, 1246, 1192, 1307, 1308, 1309, 591, 592, 593, 594, - 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 0, 1278, 1185, 0, 1193, 1194, - 1287, 1296, 1297, 609, 380, 481, 537, 333, 345, 348, + 448, 1288, 517, 536, 548, 560, 566, 567, 569, 574, + 575, 576, 577, 583, 581, 578, 579, 580, 572, 402, + 309, 490, 331, 369, 1277, 1319, 420, 468, 241, 540, + 491, 1322, 1323, 1324, 1325, 1194, 1198, 1192, 1259, 1193, + 1248, 1249, 1195, 1310, 1311, 1312, 592, 593, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 0, 1281, 1188, 0, 1196, 1197, + 1290, 1299, 1300, 610, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, - 330, 375, 446, 1249, 201, 222, 364, 1312, 450, 287, - 587, 551, 545, 208, 224, 1188, 261, 1199, 1207, 0, - 1213, 1221, 1222, 1234, 1236, 1237, 1238, 1239, 1257, 1258, - 1260, 1268, 1270, 1273, 1275, 1282, 1293, 1315, 203, 204, + 330, 375, 446, 1252, 201, 222, 364, 1315, 450, 287, + 588, 551, 545, 208, 224, 1191, 261, 1202, 1210, 0, + 1216, 1224, 1225, 1237, 1239, 1240, 1241, 1242, 1260, 1261, + 1263, 1271, 1273, 1276, 1278, 1285, 1296, 1318, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 299, 300, 441, 442, 312, 313, 584, 585, 298, 534, - 565, 532, 583, 559, 435, 374, 1248, 1318, 549, 1254, - 377, 280, 303, 318, 1263, 550, 497, 228, 462, 289, - 252, 1281, 1283, 213, 247, 231, 258, 273, 276, 322, + 299, 300, 441, 442, 312, 313, 585, 586, 298, 534, + 565, 532, 584, 559, 435, 374, 1251, 1321, 549, 1257, + 377, 280, 303, 318, 1266, 550, 497, 228, 462, 289, + 252, 1284, 1286, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, - 504, 505, 506, 508, 391, 265, 428, 1244, 1272, 372, - 514, 515, 314, 392, 0, 0, 0, 1301, 1286, 513, - 0, 1229, 1304, 1198, 1217, 1314, 1220, 1223, 1265, 1177, - 1243, 411, 1214, 1170, 1202, 1172, 1209, 1173, 1200, 1231, - 269, 1197, 1288, 1247, 1303, 362, 266, 1179, 1203, 425, - 1219, 207, 1267, 482, 253, 373, 370, 521, 281, 272, - 268, 251, 315, 381, 423, 503, 417, 1310, 366, 1253, - 0, 492, 396, 0, 0, 0, 1233, 1292, 1241, 1279, - 1228, 1266, 1187, 1252, 1305, 1215, 1262, 1306, 321, 249, + 504, 505, 506, 508, 391, 265, 428, 1247, 1275, 372, + 514, 515, 314, 392, 0, 0, 0, 1304, 1289, 513, + 0, 1232, 1307, 1201, 1220, 1317, 1223, 1226, 1268, 1180, + 1246, 411, 1217, 1173, 1205, 1175, 1212, 1176, 1203, 1234, + 269, 1200, 1291, 1250, 1306, 362, 266, 1182, 1206, 425, + 1222, 207, 1270, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 1313, 366, 1256, + 0, 492, 396, 0, 0, 0, 1236, 1295, 1244, 1282, + 1231, 1269, 1190, 1255, 1308, 1218, 1265, 1309, 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, - 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 843, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, - 336, 337, 339, 341, 346, 353, 359, 1211, 1259, 1300, - 1212, 1261, 264, 319, 271, 263, 518, 1311, 1291, 1176, - 1240, 1299, 0, 0, 230, 1302, 1235, 0, 1264, 0, - 1317, 1171, 1255, 0, 1174, 1178, 1313, 1295, 1206, 274, - 0, 0, 0, 0, 0, 0, 0, 1232, 1242, 1276, - 1280, 1226, 0, 0, 0, 0, 0, 0, 0, 1204, - 0, 1251, 0, 0, 0, 1183, 1175, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1230, - 0, 0, 0, 0, 1186, 0, 1205, 1277, 0, 1169, - 296, 1180, 397, 256, 1323, 0, 449, 1284, 1294, 1227, - 561, 1298, 1225, 1224, 1271, 1184, 1290, 1218, 361, 1182, - 328, 202, 226, 0, 1216, 407, 457, 469, 1289, 1201, - 1210, 254, 1208, 467, 421, 538, 234, 283, 454, 427, - 465, 437, 286, 1250, 1269, 466, 368, 523, 447, 535, - 562, 563, 262, 401, 547, 507, 556, 586, 227, 259, + 336, 337, 339, 341, 346, 353, 359, 1214, 1262, 1303, + 1215, 1264, 264, 319, 271, 263, 518, 1314, 1294, 1179, + 1243, 1302, 0, 0, 230, 1305, 1238, 0, 1267, 0, + 1320, 1174, 1258, 0, 1177, 1181, 1316, 1298, 1209, 274, + 0, 0, 0, 0, 0, 0, 0, 1235, 1245, 1279, + 1283, 1229, 0, 0, 0, 0, 0, 0, 0, 1207, + 0, 1254, 0, 0, 0, 1186, 1178, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1233, + 0, 0, 0, 0, 1189, 0, 1208, 1280, 0, 1172, + 296, 1183, 397, 256, 1326, 0, 449, 1287, 1297, 1230, + 561, 1301, 1228, 1227, 1274, 1187, 1293, 1221, 361, 1185, + 328, 202, 226, 0, 1219, 407, 457, 469, 1292, 1204, + 1213, 254, 1211, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 1253, 1272, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 587, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, - 288, 452, 431, 432, 570, 581, 571, 214, 502, 533, - 240, 479, 0, 0, 588, 248, 499, 216, 530, 498, - 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 527, 528, 255, 589, 229, 555, 221, 1181, - 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, - 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, - 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 590, 235, 236, 238, 1196, 278, 282, 290, 293, 301, - 302, 311, 363, 414, 443, 439, 448, 1285, 517, 536, - 548, 560, 566, 567, 569, 573, 574, 575, 576, 582, - 580, 577, 578, 579, 572, 402, 309, 490, 331, 369, - 1274, 1316, 420, 468, 241, 540, 491, 1319, 1320, 1321, - 1322, 1191, 1195, 1189, 1256, 1190, 1245, 1246, 1192, 1307, - 1308, 1309, 591, 592, 593, 594, 595, 596, 597, 598, + 288, 452, 431, 432, 570, 582, 571, 573, 214, 502, + 533, 240, 479, 0, 0, 589, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 590, 229, 555, 221, + 1184, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 591, 235, 236, 238, 1199, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 1288, 517, + 536, 548, 560, 566, 567, 569, 574, 575, 576, 577, + 583, 581, 578, 579, 580, 572, 402, 309, 490, 331, + 369, 1277, 1319, 420, 468, 241, 540, 491, 1322, 1323, + 1324, 1325, 1194, 1198, 1192, 1259, 1193, 1248, 1249, 1195, + 1310, 1311, 1312, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 0, 1278, 1185, 0, 1193, 1194, 1287, 1296, 1297, 609, - 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, - 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, - 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, - 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, - 291, 546, 307, 464, 463, 329, 330, 375, 446, 1249, - 201, 222, 364, 1312, 450, 287, 587, 551, 545, 208, - 224, 1188, 261, 1199, 1207, 0, 1213, 1221, 1222, 1234, - 1236, 1237, 1238, 1239, 1257, 1258, 1260, 1268, 1270, 1273, - 1275, 1282, 1293, 1315, 203, 204, 211, 223, 233, 237, - 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, - 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, - 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, - 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, - 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, - 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, - 312, 313, 584, 585, 298, 534, 565, 532, 583, 559, - 435, 374, 1248, 1318, 549, 1254, 377, 280, 303, 318, - 1263, 550, 497, 228, 462, 289, 252, 1281, 1283, 213, - 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, - 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, - 391, 265, 428, 1244, 1272, 372, 514, 515, 314, 392, - 0, 0, 0, 1301, 1286, 513, 0, 1229, 1304, 1198, - 1217, 1314, 1220, 1223, 1265, 1177, 1243, 411, 1214, 1170, - 1202, 1172, 1209, 1173, 1200, 1231, 269, 1197, 1288, 1247, - 1303, 362, 266, 1179, 1203, 425, 1219, 207, 1267, 482, - 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, - 423, 503, 417, 1310, 366, 1253, 0, 492, 396, 0, - 0, 0, 1233, 1292, 1241, 1279, 1228, 1266, 1187, 1252, - 1305, 1215, 1262, 1306, 321, 249, 323, 206, 408, 493, - 285, 0, 0, 0, 0, 0, 841, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, - 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, - 346, 353, 359, 1211, 1259, 1300, 1212, 1261, 264, 319, - 271, 263, 518, 1311, 1291, 1176, 1240, 1299, 0, 0, - 230, 1302, 1235, 0, 1264, 0, 1317, 1171, 1255, 0, - 1174, 1178, 1313, 1295, 1206, 274, 0, 0, 0, 0, - 0, 0, 0, 1232, 1242, 1276, 1280, 1226, 0, 0, - 0, 0, 0, 0, 0, 1204, 0, 1251, 0, 0, - 0, 1183, 1175, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1230, 0, 0, 0, 0, - 1186, 0, 1205, 1277, 0, 1169, 296, 1180, 397, 256, - 1323, 0, 449, 1284, 1294, 1227, 561, 1298, 1225, 1224, - 1271, 1184, 1290, 1218, 361, 1182, 328, 202, 226, 0, - 1216, 407, 457, 469, 1289, 1201, 1210, 254, 1208, 467, - 421, 538, 234, 283, 454, 427, 465, 437, 286, 1250, - 1269, 466, 368, 523, 447, 535, 562, 563, 262, 401, - 547, 507, 556, 586, 227, 259, 415, 500, 541, 489, - 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, - 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, - 570, 581, 571, 214, 502, 533, 240, 479, 0, 0, - 588, 248, 499, 216, 530, 498, 389, 324, 325, 215, - 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, - 255, 589, 229, 555, 221, 1181, 554, 403, 522, 531, - 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, + 609, 0, 1281, 1188, 0, 1196, 1197, 1290, 1299, 1300, + 610, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 1252, 201, 222, 364, 1315, 450, 287, 588, 551, 545, + 208, 224, 1191, 261, 1202, 1210, 0, 1216, 1224, 1225, + 1237, 1239, 1240, 1241, 1242, 1260, 1261, 1263, 1271, 1273, + 1276, 1278, 1285, 1296, 1318, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 585, 586, 298, 534, 565, 532, 584, + 559, 435, 374, 1251, 1321, 549, 1257, 377, 280, 303, + 318, 1266, 550, 497, 228, 462, 289, 252, 1284, 1286, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 1247, 1275, 372, 514, 515, 314, + 392, 0, 0, 0, 1304, 1289, 513, 0, 1232, 1307, + 1201, 1220, 1317, 1223, 1226, 1268, 1180, 1246, 411, 1217, + 1173, 1205, 1175, 1212, 1176, 1203, 1234, 269, 1200, 1291, + 1250, 1306, 362, 266, 1182, 1206, 425, 1222, 207, 1270, + 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, + 381, 423, 503, 417, 1313, 366, 1256, 0, 492, 396, + 0, 0, 0, 1236, 1295, 1244, 1282, 1231, 1269, 1190, + 1255, 1308, 1218, 1265, 1309, 321, 249, 323, 206, 408, + 493, 285, 0, 0, 0, 0, 0, 199, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, + 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, + 341, 346, 353, 359, 1214, 1262, 1303, 1215, 1264, 264, + 319, 271, 263, 518, 1314, 1294, 1179, 1243, 1302, 0, + 0, 230, 1305, 1238, 0, 1267, 0, 1320, 1174, 1258, + 0, 1177, 1181, 1316, 1298, 1209, 274, 0, 0, 0, + 0, 0, 0, 0, 1235, 1245, 1279, 1283, 1229, 0, + 0, 0, 0, 0, 0, 0, 1207, 0, 1254, 0, + 0, 0, 1186, 1178, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1233, 0, 0, 0, + 0, 1189, 0, 1208, 1280, 0, 1172, 296, 1183, 397, + 256, 1326, 0, 449, 1287, 1297, 1230, 561, 1301, 1228, + 1227, 1274, 1187, 1293, 1221, 361, 1185, 328, 202, 226, + 0, 1219, 407, 457, 469, 1292, 1204, 1213, 254, 1211, + 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, + 1253, 1272, 466, 368, 523, 447, 535, 562, 563, 262, + 401, 547, 507, 556, 587, 227, 259, 415, 500, 541, + 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, + 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, + 432, 570, 582, 571, 573, 214, 502, 533, 240, 479, + 0, 0, 589, 248, 499, 216, 530, 498, 389, 324, + 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, + 527, 528, 255, 590, 229, 555, 221, 1184, 554, 403, + 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, + 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, + 400, 209, 542, 0, 210, 0, 494, 543, 591, 235, + 236, 238, 1199, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 443, 439, 448, 1288, 517, 536, 548, 560, + 566, 567, 569, 574, 575, 576, 577, 583, 581, 578, + 579, 580, 572, 402, 309, 490, 331, 369, 1277, 1319, + 420, 468, 241, 540, 491, 1322, 1323, 1324, 1325, 1194, + 1198, 1192, 1259, 1193, 1248, 1249, 1195, 1310, 1311, 1312, + 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 0, 1281, + 1188, 0, 1196, 1197, 1290, 1299, 1300, 610, 380, 481, + 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, + 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, + 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, + 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, + 307, 464, 463, 329, 330, 375, 446, 1252, 201, 222, + 364, 1315, 450, 287, 588, 551, 545, 208, 224, 1191, + 261, 1202, 1210, 0, 1216, 1224, 1225, 1237, 1239, 1240, + 1241, 1242, 1260, 1261, 1263, 1271, 1273, 1276, 1278, 1285, + 1296, 1318, 203, 204, 211, 223, 233, 237, 244, 260, + 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, + 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, + 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, + 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, + 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, + 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, + 585, 586, 298, 534, 565, 532, 584, 559, 435, 374, + 1251, 1321, 549, 1257, 377, 280, 303, 318, 1266, 550, + 497, 228, 462, 289, 252, 1284, 1286, 213, 247, 231, + 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, + 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, + 428, 1247, 1275, 372, 514, 515, 314, 392, 0, 0, + 0, 0, 0, 513, 0, 722, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, + 709, 0, 0, 0, 269, 714, 0, 0, 0, 362, + 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, + 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, + 417, 721, 366, 0, 0, 492, 396, 0, 0, 0, + 0, 0, 717, 718, 0, 0, 0, 0, 0, 0, + 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, + 97, 0, 0, 859, 843, 809, 810, 847, 860, 861, + 862, 863, 848, 0, 239, 849, 850, 246, 851, 0, + 808, 749, 751, 750, 768, 769, 770, 771, 772, 773, + 774, 747, 856, 864, 865, 0, 264, 319, 271, 263, + 518, 0, 0, 2037, 2038, 2039, 0, 0, 230, 0, + 0, 0, 0, 0, 0, 0, 691, 706, 0, 720, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 703, + 704, 0, 0, 0, 0, 803, 0, 705, 0, 0, + 713, 866, 867, 868, 869, 870, 871, 872, 873, 874, + 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, + 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 716, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, + 449, 802, 0, 0, 561, 0, 0, 800, 0, 0, + 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, + 457, 469, 0, 0, 0, 853, 0, 467, 421, 538, + 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, + 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, + 556, 587, 227, 259, 415, 500, 541, 489, 393, 519, + 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, + 243, 232, 525, 544, 288, 452, 431, 432, 570, 582, + 571, 573, 214, 502, 533, 240, 479, 0, 0, 589, + 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, + 453, 267, 292, 0, 0, 257, 410, 854, 855, 255, + 590, 755, 555, 221, 0, 554, 403, 522, 531, 390, + 379, 220, 529, 388, 378, 332, 763, 764, 279, 305, + 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, + 0, 210, 0, 494, 543, 591, 235, 236, 238, 0, + 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, + 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, + 574, 575, 576, 577, 583, 581, 578, 579, 580, 572, + 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, + 540, 491, 0, 0, 0, 0, 813, 801, 726, 817, + 728, 814, 815, 723, 724, 727, 816, 592, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 0, 804, 712, 711, 0, + 719, 0, 745, 746, 748, 752, 753, 754, 765, 766, + 767, 775, 777, 778, 776, 779, 780, 781, 784, 785, + 786, 787, 782, 783, 788, 729, 733, 730, 731, 732, + 744, 734, 735, 736, 737, 738, 739, 740, 741, 742, + 743, 827, 828, 829, 830, 831, 832, 758, 762, 761, + 759, 760, 756, 757, 710, 201, 222, 364, 0, 450, + 287, 588, 551, 545, 208, 224, 818, 261, 819, 0, + 0, 823, 0, 0, 0, 825, 824, 0, 826, 792, + 791, 0, 0, 820, 821, 0, 822, 0, 0, 203, + 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, + 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, + 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, + 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, + 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, + 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, + 476, 833, 834, 835, 836, 837, 838, 839, 840, 298, + 534, 565, 532, 584, 559, 435, 374, 0, 0, 549, + 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, + 289, 252, 858, 0, 213, 247, 231, 258, 273, 276, + 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, + 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, + 372, 514, 515, 314, 513, 0, 722, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, + 0, 709, 0, 0, 0, 269, 714, 0, 0, 0, + 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, + 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, + 503, 417, 721, 366, 0, 0, 492, 396, 0, 0, + 0, 0, 0, 717, 718, 0, 0, 0, 0, 0, + 0, 2186, 0, 321, 249, 323, 206, 408, 493, 285, + 0, 97, 0, 0, 859, 843, 809, 810, 847, 860, + 861, 862, 863, 848, 0, 239, 849, 850, 246, 851, + 0, 808, 749, 751, 750, 768, 769, 770, 771, 772, + 773, 774, 747, 856, 864, 865, 2187, 264, 319, 271, + 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, + 0, 0, 0, 0, 0, 0, 0, 691, 706, 0, + 720, 0, 0, 0, 274, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 703, 704, 0, 0, 0, 0, 803, 0, 705, 0, + 0, 713, 866, 867, 868, 869, 870, 871, 872, 873, + 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, + 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, + 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, + 904, 905, 906, 907, 716, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, + 0, 449, 802, 0, 0, 561, 0, 0, 800, 0, + 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, + 407, 457, 469, 0, 0, 0, 853, 0, 467, 421, + 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, + 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, + 507, 556, 587, 227, 259, 415, 500, 541, 489, 393, + 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, + 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, + 582, 571, 573, 214, 502, 533, 240, 479, 0, 0, + 589, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 0, 453, 267, 292, 0, 0, 257, 410, 854, 855, + 255, 590, 755, 555, 221, 0, 554, 403, 522, 531, + 390, 379, 220, 529, 388, 378, 332, 763, 764, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 590, 235, 236, 238, - 1196, 278, 282, 290, 293, 301, 302, 311, 363, 414, - 443, 439, 448, 1285, 517, 536, 548, 560, 566, 567, - 569, 573, 574, 575, 576, 582, 580, 577, 578, 579, - 572, 402, 309, 490, 331, 369, 1274, 1316, 420, 468, - 241, 540, 491, 1319, 1320, 1321, 1322, 1191, 1195, 1189, - 1256, 1190, 1245, 1246, 1192, 1307, 1308, 1309, 591, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 0, 1278, 1185, 0, - 1193, 1194, 1287, 1296, 1297, 609, 380, 481, 537, 333, - 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, - 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, - 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, - 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, - 463, 329, 330, 375, 446, 1249, 201, 222, 364, 1312, - 450, 287, 587, 551, 545, 208, 224, 1188, 261, 1199, - 1207, 0, 1213, 1221, 1222, 1234, 1236, 1237, 1238, 1239, - 1257, 1258, 1260, 1268, 1270, 1273, 1275, 1282, 1293, 1315, + 542, 0, 210, 0, 494, 543, 591, 235, 236, 238, + 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, + 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, + 569, 574, 575, 576, 577, 583, 581, 578, 579, 580, + 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, + 241, 540, 491, 0, 0, 0, 0, 813, 801, 726, + 817, 728, 814, 815, 723, 724, 727, 816, 592, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 0, 804, 712, 711, + 0, 719, 0, 745, 746, 748, 752, 753, 754, 765, + 766, 767, 775, 777, 778, 776, 779, 780, 781, 784, + 785, 786, 787, 782, 783, 788, 729, 733, 730, 731, + 732, 744, 734, 735, 736, 737, 738, 739, 740, 741, + 742, 743, 827, 828, 829, 830, 831, 832, 758, 762, + 761, 759, 760, 756, 757, 710, 201, 222, 364, 0, + 450, 287, 588, 551, 545, 208, 224, 818, 261, 819, + 0, 0, 823, 0, 0, 0, 825, 824, 0, 826, + 792, 791, 0, 0, 820, 821, 0, 822, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, - 564, 476, 299, 300, 441, 442, 312, 313, 584, 585, - 298, 534, 565, 532, 583, 559, 435, 374, 1248, 1318, - 549, 1254, 377, 280, 303, 318, 1263, 550, 497, 228, - 462, 289, 252, 1281, 1283, 213, 247, 231, 258, 273, + 564, 476, 833, 834, 835, 836, 837, 838, 839, 840, + 298, 534, 565, 532, 584, 559, 435, 374, 0, 0, + 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, + 462, 289, 252, 858, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, - 242, 480, 504, 505, 506, 508, 391, 265, 428, 1244, - 1272, 372, 514, 515, 314, 392, 0, 0, 0, 1301, - 1286, 513, 0, 1229, 1304, 1198, 1217, 1314, 1220, 1223, - 1265, 1177, 1243, 411, 1214, 1170, 1202, 1172, 1209, 1173, - 1200, 1231, 269, 1197, 1288, 1247, 1303, 362, 266, 1179, - 1203, 425, 1219, 207, 1267, 482, 253, 373, 370, 521, - 281, 272, 268, 251, 315, 381, 423, 503, 417, 1310, - 366, 1253, 0, 492, 396, 0, 0, 0, 1233, 1292, - 1241, 1279, 1228, 1266, 1187, 1252, 1305, 1215, 1262, 1306, - 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, - 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, - 356, 355, 336, 337, 339, 341, 346, 353, 359, 1211, - 1259, 1300, 1212, 1261, 264, 319, 271, 263, 518, 1311, - 1291, 1176, 1240, 1299, 0, 0, 230, 1302, 1235, 0, - 1264, 0, 1317, 1171, 1255, 0, 1174, 1178, 1313, 1295, - 1206, 274, 0, 0, 0, 0, 0, 0, 0, 1232, - 1242, 1276, 1280, 1226, 0, 0, 0, 0, 0, 0, - 0, 1204, 0, 1251, 0, 0, 0, 1183, 1175, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1230, 0, 0, 0, 0, 1186, 0, 1205, 1277, - 0, 1169, 296, 1180, 397, 256, 1323, 0, 449, 1284, - 1294, 1227, 561, 1298, 1225, 1224, 1271, 1184, 1290, 1218, - 361, 1182, 328, 202, 226, 0, 1216, 407, 457, 469, - 1289, 1201, 1210, 254, 1208, 467, 421, 538, 234, 283, - 454, 427, 465, 437, 286, 1250, 1269, 466, 368, 523, - 447, 535, 562, 563, 262, 401, 547, 507, 556, 586, - 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, - 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, - 525, 544, 288, 452, 431, 432, 570, 581, 571, 214, - 502, 533, 240, 479, 0, 0, 588, 248, 499, 216, - 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, - 0, 0, 257, 410, 527, 528, 255, 589, 229, 555, - 221, 1181, 554, 403, 522, 531, 390, 379, 220, 529, - 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, - 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, - 494, 543, 590, 235, 236, 238, 1196, 278, 282, 290, - 293, 301, 302, 311, 363, 414, 443, 439, 448, 1285, - 517, 536, 548, 560, 566, 567, 569, 573, 574, 575, - 576, 582, 580, 577, 578, 579, 572, 402, 309, 490, - 331, 369, 1274, 1316, 420, 468, 241, 540, 491, 1319, - 1320, 1321, 1322, 1191, 1195, 1189, 1256, 1190, 1245, 1246, - 1192, 1307, 1308, 1309, 591, 592, 593, 594, 595, 596, - 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 608, 0, 1278, 1185, 0, 1193, 1194, 1287, 1296, - 1297, 609, 380, 481, 537, 333, 345, 348, 338, 357, - 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, - 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, - 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, - 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, - 446, 1249, 201, 222, 364, 1312, 450, 287, 587, 551, - 545, 208, 224, 1188, 261, 1199, 1207, 0, 1213, 1221, - 1222, 1234, 1236, 1237, 1238, 1239, 1257, 1258, 1260, 1268, - 1270, 1273, 1275, 1282, 1293, 1315, 203, 204, 211, 223, - 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, - 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, - 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, - 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, - 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, - 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, - 441, 442, 312, 313, 584, 585, 298, 534, 565, 532, - 583, 559, 435, 374, 1248, 1318, 549, 1254, 377, 280, - 303, 318, 1263, 550, 497, 228, 462, 289, 252, 1281, - 1283, 213, 247, 231, 258, 273, 276, 322, 387, 395, - 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, - 506, 508, 391, 265, 428, 1244, 1272, 372, 514, 515, - 314, 392, 0, 0, 0, 0, 0, 513, 0, 720, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, - 0, 0, 0, 0, 707, 0, 0, 0, 269, 712, - 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, - 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, - 315, 381, 423, 503, 417, 719, 366, 0, 0, 492, - 396, 0, 0, 0, 0, 0, 715, 716, 0, 0, - 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, - 408, 493, 285, 0, 97, 0, 0, 857, 841, 807, - 808, 845, 858, 859, 860, 861, 846, 0, 239, 847, - 848, 246, 849, 0, 806, 747, 749, 748, 766, 767, - 768, 769, 770, 771, 772, 745, 854, 862, 863, 0, - 264, 319, 271, 263, 518, 0, 0, 2033, 2034, 2035, - 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, - 689, 704, 0, 718, 0, 0, 0, 274, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 701, 702, 0, 0, 0, 0, 801, - 0, 703, 0, 0, 711, 864, 865, 866, 867, 868, - 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, - 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, - 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, - 899, 900, 901, 902, 903, 904, 905, 714, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, - 397, 256, 0, 0, 449, 800, 0, 0, 561, 0, - 0, 798, 0, 0, 0, 0, 361, 0, 328, 202, - 226, 0, 0, 407, 457, 469, 0, 0, 0, 851, - 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, - 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, - 262, 401, 547, 507, 556, 586, 227, 259, 415, 500, - 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, - 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, - 431, 432, 570, 581, 571, 214, 502, 533, 240, 479, - 0, 0, 588, 248, 499, 216, 530, 498, 389, 324, + 242, 480, 504, 505, 506, 508, 391, 265, 428, 0, + 392, 372, 514, 515, 314, 88, 513, 0, 722, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, + 0, 0, 0, 709, 0, 0, 0, 269, 714, 0, + 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, + 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, + 381, 423, 503, 417, 721, 366, 0, 0, 492, 396, + 0, 0, 0, 0, 0, 717, 718, 0, 0, 0, + 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, + 493, 285, 0, 97, 0, 0, 859, 843, 809, 810, + 847, 860, 861, 862, 863, 848, 0, 239, 849, 850, + 246, 851, 0, 808, 749, 751, 750, 768, 769, 770, + 771, 772, 773, 774, 747, 856, 864, 865, 0, 264, + 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, + 0, 230, 0, 0, 0, 0, 0, 0, 0, 691, + 706, 0, 720, 0, 0, 0, 274, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 703, 704, 0, 0, 0, 0, 803, 0, + 705, 0, 0, 713, 866, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, + 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, + 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, + 902, 903, 904, 905, 906, 907, 716, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, + 256, 0, 0, 449, 802, 0, 0, 561, 0, 0, + 800, 0, 0, 0, 0, 361, 0, 328, 202, 226, + 0, 0, 407, 457, 469, 0, 0, 0, 853, 0, + 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, + 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, + 401, 547, 507, 556, 587, 227, 259, 415, 500, 541, + 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, + 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, + 432, 570, 582, 571, 573, 214, 502, 533, 240, 479, + 0, 0, 589, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 852, 853, 255, 589, 753, 555, 221, 0, 554, 403, - 522, 531, 390, 379, 220, 529, 388, 378, 332, 761, - 762, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 590, 235, + 854, 855, 255, 590, 755, 555, 221, 0, 554, 403, + 522, 531, 390, 379, 220, 529, 388, 378, 332, 763, + 764, 279, 305, 444, 371, 445, 304, 306, 399, 398, + 400, 209, 542, 0, 210, 0, 494, 543, 591, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, - 566, 567, 569, 573, 574, 575, 576, 582, 580, 577, - 578, 579, 572, 402, 309, 490, 331, 369, 0, 0, - 420, 468, 241, 540, 491, 0, 0, 0, 0, 811, - 799, 724, 815, 726, 812, 813, 721, 722, 725, 814, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 0, 802, - 710, 709, 0, 717, 0, 743, 744, 746, 750, 751, - 752, 763, 764, 765, 773, 775, 776, 774, 777, 778, - 779, 782, 783, 784, 785, 780, 781, 786, 727, 731, - 728, 729, 730, 742, 732, 733, 734, 735, 736, 737, - 738, 739, 740, 741, 825, 826, 827, 828, 829, 830, - 756, 760, 759, 757, 758, 754, 755, 708, 201, 222, - 364, 0, 450, 287, 587, 551, 545, 208, 224, 816, - 261, 817, 0, 0, 821, 0, 0, 0, 823, 822, - 0, 824, 790, 789, 0, 0, 818, 819, 0, 820, + 566, 567, 569, 574, 575, 576, 577, 583, 581, 578, + 579, 580, 572, 402, 309, 490, 331, 369, 0, 0, + 420, 468, 241, 540, 491, 0, 0, 0, 0, 813, + 801, 726, 817, 728, 814, 815, 723, 724, 727, 816, + 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 0, 804, + 712, 711, 0, 719, 0, 745, 746, 748, 752, 753, + 754, 765, 766, 767, 775, 777, 778, 776, 779, 780, + 781, 784, 785, 786, 787, 782, 783, 788, 729, 733, + 730, 731, 732, 744, 734, 735, 736, 737, 738, 739, + 740, 741, 742, 743, 827, 828, 829, 830, 831, 832, + 758, 762, 761, 759, 760, 756, 757, 710, 201, 222, + 364, 96, 450, 287, 588, 551, 545, 208, 224, 818, + 261, 819, 0, 0, 823, 0, 0, 0, 825, 824, + 0, 826, 792, 791, 0, 0, 820, 821, 0, 822, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, - 539, 558, 564, 476, 831, 832, 833, 834, 835, 836, - 837, 838, 298, 534, 565, 532, 583, 559, 435, 374, + 539, 558, 564, 476, 833, 834, 835, 836, 837, 838, + 839, 840, 298, 534, 565, 532, 584, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, - 497, 228, 462, 289, 252, 856, 0, 213, 247, 231, + 497, 228, 462, 289, 252, 858, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, - 428, 392, 0, 372, 514, 515, 314, 513, 0, 720, + 428, 392, 0, 372, 514, 515, 314, 513, 0, 722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, - 0, 0, 0, 0, 707, 0, 0, 0, 269, 712, + 0, 0, 0, 0, 709, 0, 0, 0, 269, 714, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, - 315, 381, 423, 503, 417, 719, 366, 0, 0, 492, - 396, 0, 0, 0, 0, 0, 715, 716, 0, 0, - 0, 0, 0, 0, 2182, 0, 321, 249, 323, 206, - 408, 493, 285, 0, 97, 0, 0, 857, 841, 807, - 808, 845, 858, 859, 860, 861, 846, 0, 239, 847, - 848, 246, 849, 0, 806, 747, 749, 748, 766, 767, - 768, 769, 770, 771, 772, 745, 854, 862, 863, 2183, + 315, 381, 423, 503, 417, 721, 366, 0, 0, 492, + 396, 0, 0, 0, 0, 0, 717, 718, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, + 408, 493, 285, 0, 97, 0, 0, 859, 843, 809, + 810, 847, 860, 861, 862, 863, 848, 0, 239, 849, + 850, 246, 851, 0, 808, 749, 751, 750, 768, 769, + 770, 771, 772, 773, 774, 747, 856, 864, 865, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, - 689, 704, 0, 718, 0, 0, 0, 274, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 701, 702, 0, 0, 0, 0, 801, - 0, 703, 0, 0, 711, 864, 865, 866, 867, 868, - 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, - 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, - 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, - 899, 900, 901, 902, 903, 904, 905, 714, 0, 0, + 691, 706, 0, 720, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 703, 704, 0, 0, 0, 0, 803, + 0, 705, 0, 0, 713, 866, 867, 868, 869, 870, + 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, + 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, + 901, 902, 903, 904, 905, 906, 907, 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, - 397, 256, 0, 0, 449, 800, 0, 0, 561, 0, - 0, 798, 0, 0, 0, 0, 361, 0, 328, 202, - 226, 0, 0, 407, 457, 469, 0, 0, 0, 851, + 397, 256, 0, 0, 449, 802, 0, 0, 561, 0, + 0, 800, 0, 0, 0, 0, 361, 0, 328, 202, + 226, 0, 0, 407, 457, 469, 0, 0, 0, 853, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, - 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, - 262, 401, 547, 507, 556, 586, 227, 259, 415, 500, + 286, 3546, 0, 466, 368, 523, 447, 535, 562, 563, + 262, 401, 547, 507, 556, 587, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, - 431, 432, 570, 581, 571, 214, 502, 533, 240, 479, - 0, 0, 588, 248, 499, 216, 530, 498, 389, 324, - 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 852, 853, 255, 589, 753, 555, 221, 0, 554, 403, - 522, 531, 390, 379, 220, 529, 388, 378, 332, 761, - 762, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 590, 235, - 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, - 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, - 566, 567, 569, 573, 574, 575, 576, 582, 580, 577, - 578, 579, 572, 402, 309, 490, 331, 369, 0, 0, - 420, 468, 241, 540, 491, 0, 0, 0, 0, 811, - 799, 724, 815, 726, 812, 813, 721, 722, 725, 814, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 0, 802, - 710, 709, 0, 717, 0, 743, 744, 746, 750, 751, - 752, 763, 764, 765, 773, 775, 776, 774, 777, 778, - 779, 782, 783, 784, 785, 780, 781, 786, 727, 731, - 728, 729, 730, 742, 732, 733, 734, 735, 736, 737, - 738, 739, 740, 741, 825, 826, 827, 828, 829, 830, - 756, 760, 759, 757, 758, 754, 755, 708, 201, 222, - 364, 0, 450, 287, 587, 551, 545, 208, 224, 816, - 261, 817, 0, 0, 821, 0, 0, 0, 823, 822, - 0, 824, 790, 789, 0, 0, 818, 819, 0, 820, - 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, - 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, - 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, - 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, - 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, - 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, - 539, 558, 564, 476, 831, 832, 833, 834, 835, 836, - 837, 838, 298, 534, 565, 532, 583, 559, 435, 374, - 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, - 497, 228, 462, 289, 252, 856, 0, 213, 247, 231, - 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, - 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, - 428, 0, 392, 372, 514, 515, 314, 88, 513, 0, - 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 707, 0, 0, 0, 269, - 712, 0, 0, 0, 362, 266, 0, 0, 425, 0, - 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 719, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 715, 716, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 97, 0, 0, 857, 841, - 807, 808, 845, 858, 859, 860, 861, 846, 0, 239, - 847, 848, 246, 849, 0, 806, 747, 749, 748, 766, - 767, 768, 769, 770, 771, 772, 745, 854, 862, 863, - 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, - 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 689, 704, 0, 718, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 701, 702, 0, 0, 0, 0, - 801, 0, 703, 0, 0, 711, 864, 865, 866, 867, - 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, - 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, - 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, - 898, 899, 900, 901, 902, 903, 904, 905, 714, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 800, 0, 0, 561, - 0, 0, 798, 0, 0, 0, 0, 361, 0, 328, - 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, - 851, 0, 467, 421, 538, 234, 283, 454, 427, 465, - 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 586, 227, 259, 415, - 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, - 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 581, 571, 214, 502, 533, 240, - 479, 0, 0, 588, 248, 499, 216, 530, 498, 389, - 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 852, 853, 255, 589, 753, 555, 221, 0, 554, - 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 761, 762, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 590, - 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, - 560, 566, 567, 569, 573, 574, 575, 576, 582, 580, - 577, 578, 579, 572, 402, 309, 490, 331, 369, 0, - 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, - 811, 799, 724, 815, 726, 812, 813, 721, 722, 725, - 814, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 0, - 802, 710, 709, 0, 717, 0, 743, 744, 746, 750, - 751, 752, 763, 764, 765, 773, 775, 776, 774, 777, - 778, 779, 782, 783, 784, 785, 780, 781, 786, 727, - 731, 728, 729, 730, 742, 732, 733, 734, 735, 736, - 737, 738, 739, 740, 741, 825, 826, 827, 828, 829, - 830, 756, 760, 759, 757, 758, 754, 755, 708, 201, - 222, 364, 96, 450, 287, 587, 551, 545, 208, 224, - 816, 261, 817, 0, 0, 821, 0, 0, 0, 823, - 822, 0, 824, 790, 789, 0, 0, 818, 819, 0, - 820, 0, 0, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 831, 832, 833, 834, 835, - 836, 837, 838, 298, 534, 565, 532, 583, 559, 435, - 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 856, 0, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, - 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 707, 0, 0, 0, 269, - 712, 0, 0, 0, 362, 266, 0, 0, 425, 0, - 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 719, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 715, 716, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 97, 0, 0, 857, 841, - 807, 808, 845, 858, 859, 860, 861, 846, 0, 239, - 847, 848, 246, 849, 0, 806, 747, 749, 748, 766, - 767, 768, 769, 770, 771, 772, 745, 854, 862, 863, - 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, - 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 689, 704, 0, 718, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 701, 702, 0, 0, 0, 0, - 801, 0, 703, 0, 0, 711, 864, 865, 866, 867, - 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, - 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, - 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, - 898, 899, 900, 901, 902, 903, 904, 905, 714, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 800, 0, 0, 561, - 0, 0, 798, 0, 0, 0, 0, 361, 0, 328, - 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, - 851, 0, 467, 421, 538, 234, 283, 454, 427, 465, - 437, 286, 3542, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 586, 227, 259, 415, - 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, - 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 581, 571, 214, 502, 533, 240, - 479, 0, 0, 588, 248, 499, 216, 530, 498, 389, - 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 852, 853, 255, 589, 753, 555, 221, 0, 554, - 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 761, 762, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 590, - 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, - 560, 566, 567, 569, 573, 574, 575, 576, 582, 580, - 577, 578, 579, 572, 402, 309, 490, 331, 369, 0, - 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, - 811, 799, 724, 815, 726, 812, 813, 721, 722, 725, - 814, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 0, - 802, 710, 709, 0, 717, 0, 743, 744, 746, 750, - 751, 752, 763, 764, 765, 773, 775, 776, 774, 777, - 778, 779, 782, 783, 784, 785, 780, 781, 786, 727, - 731, 728, 729, 730, 742, 732, 733, 734, 735, 736, - 737, 738, 739, 740, 741, 825, 826, 827, 828, 829, - 830, 756, 760, 759, 757, 758, 754, 755, 708, 201, - 222, 364, 0, 450, 287, 587, 551, 545, 208, 224, - 816, 261, 817, 0, 0, 821, 0, 0, 0, 823, - 822, 0, 824, 790, 789, 0, 0, 818, 819, 0, - 820, 0, 0, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 831, 832, 833, 834, 835, - 836, 837, 838, 298, 534, 565, 532, 583, 559, 435, - 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 856, 0, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, - 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 707, 0, 0, 0, 269, - 712, 0, 0, 0, 362, 266, 0, 0, 425, 0, - 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 719, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 715, 716, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 97, 0, 1565, 857, 841, - 807, 808, 845, 858, 859, 860, 861, 846, 0, 239, - 847, 848, 246, 849, 0, 806, 747, 749, 748, 766, - 767, 768, 769, 770, 771, 772, 745, 854, 862, 863, - 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, - 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 689, 704, 0, 718, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 701, 702, 0, 0, 0, 0, - 801, 0, 703, 0, 0, 711, 864, 865, 866, 867, - 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, - 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, - 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, - 898, 899, 900, 901, 902, 903, 904, 905, 714, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 800, 0, 0, 561, - 0, 0, 798, 0, 0, 0, 0, 361, 0, 328, - 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, - 851, 0, 467, 421, 538, 234, 283, 454, 427, 465, - 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 586, 227, 259, 415, - 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, - 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 581, 571, 214, 502, 533, 240, - 479, 0, 0, 588, 248, 499, 216, 530, 498, 389, - 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 852, 853, 255, 589, 753, 555, 221, 0, 554, - 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 761, 762, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 590, - 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, - 560, 566, 567, 569, 573, 574, 575, 576, 582, 580, - 577, 578, 579, 572, 402, 309, 490, 331, 369, 0, - 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, - 811, 799, 724, 815, 726, 812, 813, 721, 722, 725, - 814, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 0, - 802, 710, 709, 0, 717, 0, 743, 744, 746, 750, - 751, 752, 763, 764, 765, 773, 775, 776, 774, 777, - 778, 779, 782, 783, 784, 785, 780, 781, 786, 727, - 731, 728, 729, 730, 742, 732, 733, 734, 735, 736, - 737, 738, 739, 740, 741, 825, 826, 827, 828, 829, - 830, 756, 760, 759, 757, 758, 754, 755, 708, 201, - 222, 364, 0, 450, 287, 587, 551, 545, 208, 224, - 816, 261, 817, 0, 0, 821, 0, 0, 0, 823, - 822, 0, 824, 790, 789, 0, 0, 818, 819, 0, - 820, 0, 0, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 831, 832, 833, 834, 835, - 836, 837, 838, 298, 534, 565, 532, 583, 559, 435, - 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 856, 0, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, - 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 707, 0, 0, 0, 269, - 712, 0, 0, 0, 362, 266, 0, 0, 425, 0, - 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 719, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 715, 716, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 97, 0, 0, 857, 841, - 807, 808, 845, 858, 859, 860, 861, 846, 0, 239, - 847, 848, 246, 849, 0, 806, 747, 749, 748, 766, - 767, 768, 769, 770, 771, 772, 745, 854, 862, 863, - 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, - 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 689, 704, 0, 718, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 701, 702, 945, 0, 0, 0, - 801, 0, 703, 0, 0, 711, 864, 865, 866, 867, - 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, - 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, - 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, - 898, 899, 900, 901, 902, 903, 904, 905, 714, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 800, 0, 0, 561, - 0, 0, 798, 0, 0, 0, 0, 361, 0, 328, - 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, - 851, 0, 467, 421, 538, 234, 283, 454, 427, 465, - 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 586, 227, 259, 415, - 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, - 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 581, 571, 214, 502, 533, 240, - 479, 0, 0, 588, 248, 499, 216, 530, 498, 389, - 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 852, 853, 255, 589, 753, 555, 221, 0, 554, - 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 761, 762, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 590, - 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, - 560, 566, 567, 569, 573, 574, 575, 576, 582, 580, - 577, 578, 579, 572, 402, 309, 490, 331, 369, 0, - 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, - 811, 799, 724, 815, 726, 812, 813, 721, 722, 725, - 814, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 0, - 802, 710, 709, 0, 717, 0, 743, 744, 746, 750, - 751, 752, 763, 764, 765, 773, 775, 776, 774, 777, - 778, 779, 782, 783, 784, 785, 780, 781, 786, 727, - 731, 728, 729, 730, 742, 732, 733, 734, 735, 736, - 737, 738, 739, 740, 741, 825, 826, 827, 828, 829, - 830, 756, 760, 759, 757, 758, 754, 755, 708, 201, - 222, 364, 0, 450, 287, 587, 551, 545, 208, 224, - 816, 261, 817, 0, 0, 821, 0, 0, 0, 823, - 822, 0, 824, 790, 789, 0, 0, 818, 819, 0, - 820, 0, 0, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 831, 832, 833, 834, 835, - 836, 837, 838, 298, 534, 565, 532, 583, 559, 435, - 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 856, 0, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, - 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 707, 0, 0, 0, 269, - 712, 0, 0, 0, 362, 266, 0, 0, 425, 0, - 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 719, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 715, 716, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 97, 0, 0, 857, 841, - 807, 808, 845, 858, 859, 860, 861, 846, 0, 239, - 847, 848, 246, 849, 0, 806, 747, 749, 748, 766, - 767, 768, 769, 770, 771, 772, 745, 854, 862, 863, - 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, - 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 689, 704, 0, 718, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 701, 702, 0, 0, 0, 0, - 801, 0, 703, 0, 0, 711, 864, 865, 866, 867, - 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, - 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, - 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, - 898, 899, 900, 901, 902, 903, 904, 905, 714, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 800, 0, 0, 561, - 0, 0, 798, 0, 0, 0, 0, 361, 0, 328, - 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, - 851, 0, 467, 421, 538, 234, 283, 454, 427, 465, - 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 586, 227, 259, 415, - 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, - 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 581, 571, 214, 502, 533, 240, - 479, 0, 0, 588, 248, 499, 216, 530, 498, 389, + 431, 432, 570, 582, 571, 573, 214, 502, 533, 240, + 479, 0, 0, 589, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 852, 853, 255, 589, 753, 555, 221, 0, 554, + 410, 854, 855, 255, 590, 755, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 761, 762, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 590, + 763, 764, 279, 305, 444, 371, 445, 304, 306, 399, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 591, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, - 560, 566, 567, 569, 573, 574, 575, 576, 582, 580, - 577, 578, 579, 572, 402, 309, 490, 331, 369, 0, + 560, 566, 567, 569, 574, 575, 576, 577, 583, 581, + 578, 579, 580, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, - 811, 799, 724, 815, 726, 812, 813, 721, 722, 725, - 814, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 0, - 802, 710, 709, 0, 717, 0, 743, 744, 746, 750, - 751, 752, 763, 764, 765, 773, 775, 776, 774, 777, - 778, 779, 782, 783, 784, 785, 780, 781, 786, 727, - 731, 728, 729, 730, 742, 732, 733, 734, 735, 736, - 737, 738, 739, 740, 741, 825, 826, 827, 828, 829, - 830, 756, 760, 759, 757, 758, 754, 755, 708, 201, - 222, 364, 0, 450, 287, 587, 551, 545, 208, 224, - 816, 261, 817, 0, 0, 821, 0, 0, 0, 823, - 822, 0, 824, 790, 789, 0, 0, 818, 819, 0, - 820, 0, 0, 203, 204, 211, 223, 233, 237, 244, + 813, 801, 726, 817, 728, 814, 815, 723, 724, 727, + 816, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 0, + 804, 712, 711, 0, 719, 0, 745, 746, 748, 752, + 753, 754, 765, 766, 767, 775, 777, 778, 776, 779, + 780, 781, 784, 785, 786, 787, 782, 783, 788, 729, + 733, 730, 731, 732, 744, 734, 735, 736, 737, 738, + 739, 740, 741, 742, 743, 827, 828, 829, 830, 831, + 832, 758, 762, 761, 759, 760, 756, 757, 710, 201, + 222, 364, 0, 450, 287, 588, 551, 545, 208, 224, + 818, 261, 819, 0, 0, 823, 0, 0, 0, 825, + 824, 0, 826, 792, 791, 0, 0, 820, 821, 0, + 822, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 831, 832, 833, 834, 835, - 836, 837, 838, 298, 534, 565, 532, 583, 559, 435, + 526, 539, 558, 564, 476, 833, 834, 835, 836, 837, + 838, 839, 840, 298, 534, 565, 532, 584, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 856, 0, 213, 247, + 550, 497, 228, 462, 289, 252, 858, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, - 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 707, 0, 0, 0, 269, - 712, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 722, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 709, 0, 0, 0, 269, + 714, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 719, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 715, 716, 0, + 251, 315, 381, 423, 503, 417, 721, 366, 0, 0, + 492, 396, 0, 0, 0, 0, 0, 717, 718, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 97, 0, 0, 857, 841, - 807, 808, 845, 858, 859, 860, 861, 846, 0, 239, - 847, 848, 246, 849, 0, 806, 747, 749, 748, 766, - 767, 768, 769, 770, 771, 772, 745, 854, 862, 863, + 206, 408, 493, 285, 0, 97, 0, 1568, 859, 843, + 809, 810, 847, 860, 861, 862, 863, 848, 0, 239, + 849, 850, 246, 851, 0, 808, 749, 751, 750, 768, + 769, 770, 771, 772, 773, 774, 747, 856, 864, 865, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 0, 704, 0, 718, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 701, 702, 0, 0, 0, 0, - 801, 0, 703, 0, 0, 711, 864, 865, 866, 867, - 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, - 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, - 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, - 898, 899, 900, 901, 902, 903, 904, 905, 714, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 800, 0, 0, 561, - 0, 0, 798, 0, 0, 0, 0, 361, 0, 328, - 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, - 851, 0, 467, 421, 538, 234, 283, 454, 427, 465, - 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 586, 227, 259, 415, - 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, - 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 581, 571, 214, 502, 533, 240, - 479, 0, 0, 588, 248, 499, 216, 530, 498, 389, - 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 852, 853, 255, 589, 753, 555, 221, 0, 554, - 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 761, 762, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 590, - 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, - 560, 566, 567, 569, 573, 574, 575, 576, 582, 580, - 577, 578, 579, 572, 402, 309, 490, 331, 369, 0, - 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, - 811, 799, 724, 815, 726, 812, 813, 721, 722, 725, - 814, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 0, - 802, 710, 709, 0, 717, 0, 743, 744, 746, 750, - 751, 752, 763, 764, 765, 773, 775, 776, 774, 777, - 778, 779, 782, 783, 784, 785, 780, 781, 786, 727, - 731, 728, 729, 730, 742, 732, 733, 734, 735, 736, - 737, 738, 739, 740, 741, 825, 826, 827, 828, 829, - 830, 756, 760, 759, 757, 758, 754, 755, 708, 201, - 222, 364, 0, 450, 287, 587, 551, 545, 208, 224, - 816, 261, 817, 0, 0, 821, 0, 0, 0, 823, - 822, 0, 824, 790, 789, 0, 0, 818, 819, 0, - 820, 0, 0, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 831, 832, 833, 834, 835, - 836, 837, 838, 298, 534, 565, 532, 583, 559, 435, - 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 856, 0, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, - 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, - 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 0, 0, 0, 0, 667, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, - 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, - 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, - 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, - 0, 0, 0, 230, 0, 0, 0, 0, 1381, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1390, 1389, - 1391, 1392, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 691, 706, 0, 720, 0, 0, 0, 274, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 703, 704, 0, 0, 0, 0, + 803, 0, 705, 0, 0, 713, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, + 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, + 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, + 900, 901, 902, 903, 904, 905, 906, 907, 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, - 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, + 0, 397, 256, 0, 0, 449, 802, 0, 0, 561, + 0, 0, 800, 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, - 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, - 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 586, 227, 259, 415, - 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, - 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 581, 571, 214, 502, 533, 240, - 479, 0, 0, 588, 248, 499, 216, 530, 498, 389, - 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 527, 528, 255, 589, 229, 555, 221, 0, 554, - 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 590, - 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, - 560, 566, 567, 569, 573, 574, 575, 576, 582, 580, - 577, 578, 579, 572, 402, 309, 490, 331, 369, 0, - 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 609, 380, - 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, - 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, - 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, - 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, - 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, - 222, 364, 0, 450, 287, 587, 551, 545, 208, 224, - 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 584, 585, 298, 534, 565, 532, 583, 559, 435, - 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, - 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, - 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 0, 0, 0, 0, 667, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, - 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, - 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, - 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, - 0, 0, 0, 230, 0, 1018, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 0, 0, 1017, 561, - 0, 0, 0, 0, 0, 1014, 1015, 361, 974, 328, - 202, 226, 1008, 1012, 407, 457, 469, 0, 0, 0, - 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, + 853, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 586, 227, 259, 415, + 563, 262, 401, 547, 507, 556, 587, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 581, 571, 214, 502, 533, 240, - 479, 0, 0, 588, 248, 499, 216, 530, 498, 389, - 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 527, 528, 255, 589, 229, 555, 221, 0, 554, - 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 590, - 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, - 560, 566, 567, 569, 573, 574, 575, 576, 582, 580, - 577, 578, 579, 572, 402, 309, 490, 331, 369, 0, - 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 609, 380, - 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, - 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, - 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, - 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, - 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, - 222, 364, 0, 450, 287, 587, 551, 545, 208, 224, - 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, + 452, 431, 432, 570, 582, 571, 573, 214, 502, 533, + 240, 479, 0, 0, 589, 248, 499, 216, 530, 498, + 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, + 257, 410, 854, 855, 255, 590, 755, 555, 221, 0, + 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, + 332, 763, 764, 279, 305, 444, 371, 445, 304, 306, + 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, + 591, 235, 236, 238, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, + 548, 560, 566, 567, 569, 574, 575, 576, 577, 583, + 581, 578, 579, 580, 572, 402, 309, 490, 331, 369, + 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, + 0, 813, 801, 726, 817, 728, 814, 815, 723, 724, + 727, 816, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 0, 804, 712, 711, 0, 719, 0, 745, 746, 748, + 752, 753, 754, 765, 766, 767, 775, 777, 778, 776, + 779, 780, 781, 784, 785, 786, 787, 782, 783, 788, + 729, 733, 730, 731, 732, 744, 734, 735, 736, 737, + 738, 739, 740, 741, 742, 743, 827, 828, 829, 830, + 831, 832, 758, 762, 761, 759, 760, 756, 757, 710, + 201, 222, 364, 0, 450, 287, 588, 551, 545, 208, + 224, 818, 261, 819, 0, 0, 823, 0, 0, 0, + 825, 824, 0, 826, 792, 791, 0, 0, 820, 821, + 0, 822, 0, 0, 203, 204, 211, 223, 233, 237, + 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, + 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, + 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, + 524, 526, 539, 558, 564, 476, 833, 834, 835, 836, + 837, 838, 839, 840, 298, 534, 565, 532, 584, 559, + 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, + 0, 550, 497, 228, 462, 289, 252, 858, 0, 213, + 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, + 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, + 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, + 0, 722, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 0, 0, 0, 709, 0, 0, 0, + 269, 714, 0, 0, 0, 362, 266, 0, 0, 425, + 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 721, 366, 0, + 0, 492, 396, 0, 0, 0, 0, 0, 717, 718, + 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, + 323, 206, 408, 493, 285, 0, 97, 0, 0, 859, + 843, 809, 810, 847, 860, 861, 862, 863, 848, 0, + 239, 849, 850, 246, 851, 0, 808, 749, 751, 750, + 768, 769, 770, 771, 772, 773, 774, 747, 856, 864, + 865, 0, 264, 319, 271, 263, 518, 0, 0, 0, + 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, + 0, 0, 691, 706, 0, 720, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 584, 585, 298, 534, 565, 532, 583, 559, 435, - 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, + 0, 0, 0, 0, 0, 703, 704, 947, 0, 0, + 0, 803, 0, 705, 0, 0, 713, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, + 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, + 899, 900, 901, 902, 903, 904, 905, 906, 907, 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, - 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, - 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 0, 0, 0, 1528, 841, - 0, 0, 1525, 0, 0, 0, 0, 1523, 0, 239, - 1524, 1522, 246, 1527, 0, 806, 347, 356, 355, 336, - 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, - 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, - 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, - 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, - 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, - 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, - 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 586, 227, 259, 415, - 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, - 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 581, 571, 214, 502, 533, 240, - 479, 0, 0, 588, 248, 499, 216, 530, 498, 389, - 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 527, 528, 255, 589, 229, 555, 221, 0, 554, - 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 590, - 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, - 560, 566, 567, 569, 573, 574, 575, 576, 582, 580, - 577, 578, 579, 572, 402, 309, 490, 331, 369, 0, - 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 609, 380, - 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, - 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, - 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, - 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, - 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, - 222, 364, 0, 450, 287, 587, 551, 545, 208, 224, - 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 584, 585, 298, 534, 565, 532, 583, 559, 435, - 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 0, 392, 372, 514, 515, 314, 88, 513, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, - 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, - 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, - 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, - 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, - 323, 206, 408, 493, 285, 0, 97, 0, 0, 0, - 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, - 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, - 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, - 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, - 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, - 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, - 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, - 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, - 562, 563, 262, 401, 547, 507, 556, 586, 227, 259, - 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, - 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, - 288, 452, 431, 432, 570, 581, 571, 214, 502, 533, - 240, 479, 0, 0, 588, 248, 499, 216, 530, 498, - 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 527, 528, 255, 589, 229, 555, 221, 0, - 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, - 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, - 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 590, 235, 236, 238, 0, 278, 282, 290, 293, 301, - 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, - 548, 560, 566, 567, 569, 573, 574, 575, 576, 582, - 580, 577, 578, 579, 572, 402, 309, 490, 331, 369, - 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 591, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, - 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, - 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, - 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, - 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, - 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, - 201, 222, 364, 96, 450, 287, 587, 551, 545, 208, - 224, 0, 261, 0, 0, 0, 0, 0, 0, 2169, - 0, 0, 2168, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, - 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, - 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, - 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, - 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, - 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, - 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, - 312, 313, 584, 585, 298, 534, 565, 532, 583, 559, - 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, - 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, - 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, - 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, - 391, 265, 428, 1584, 0, 372, 514, 515, 314, 513, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 411, 0, 0, 0, 1586, 0, 0, 0, 0, - 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, - 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, - 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, - 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, - 323, 206, 408, 493, 285, 0, 0, 0, 0, 1588, - 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, - 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, - 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, - 0, 0, 0, 0, 230, 0, 0, 0, 1362, 0, - 1363, 1364, 0, 0, 0, 0, 0, 0, 0, 274, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, - 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 296, 0, 397, 256, 0, 0, 449, 802, 0, 0, + 561, 0, 0, 800, 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, - 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, + 0, 853, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, - 562, 563, 262, 401, 547, 507, 556, 586, 227, 259, + 562, 563, 262, 401, 547, 507, 556, 587, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, - 288, 452, 431, 432, 570, 581, 571, 214, 502, 533, - 240, 479, 0, 0, 588, 248, 499, 216, 530, 498, - 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 527, 528, 255, 589, 229, 555, 221, 0, - 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, - 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, - 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 590, 235, 236, 238, 0, 278, 282, 290, 293, 301, - 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, - 548, 560, 566, 567, 569, 573, 574, 575, 576, 582, - 580, 577, 578, 579, 572, 402, 309, 490, 331, 369, - 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 591, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 609, - 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, - 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, - 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, - 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, - 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, - 201, 222, 364, 0, 450, 287, 587, 551, 545, 208, - 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, - 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, - 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, - 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, - 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, - 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, - 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, - 312, 313, 584, 585, 298, 534, 565, 532, 583, 559, - 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, - 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, - 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, - 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, - 391, 265, 428, 0, 392, 372, 514, 515, 314, 88, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 97, 0, 1565, - 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 96, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 97, 0, 0, - 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 288, 452, 431, 432, 570, 582, 571, 573, 214, 502, + 533, 240, 479, 0, 0, 589, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 257, 410, 854, 855, 255, 590, 755, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 2169, 0, 0, 2168, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 2120, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 1769, 199, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 2118, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 968, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 974, 328, 202, 226, 972, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 2120, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 1769, 199, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 1565, - 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 3452, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 1953, 667, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1954, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 2561, 667, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2562, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 667, 0, 0, 0, 0, 2546, 0, 0, 0, - 0, 239, 0, 0, 246, 2547, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 1607, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 1606, 667, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 669, 670, 671, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 3576, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 1769, 199, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 3452, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 97, 0, 0, - 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 2170, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 1588, 667, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 1908, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 1899, 667, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 1736, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 1734, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 1732, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 1730, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 1728, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 1724, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 378, 332, 763, 764, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 543, 591, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 536, 548, 560, 566, 567, 569, 574, 575, 576, 577, + 583, 581, 578, 579, 580, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 0, 0, 813, 801, 726, 817, 728, 814, 815, 723, + 724, 727, 816, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 0, 804, 712, 711, 0, 719, 0, 745, 746, + 748, 752, 753, 754, 765, 766, 767, 775, 777, 778, + 776, 779, 780, 781, 784, 785, 786, 787, 782, 783, + 788, 729, 733, 730, 731, 732, 744, 734, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 827, 828, 829, + 830, 831, 832, 758, 762, 761, 759, 760, 756, 757, + 710, 201, 222, 364, 0, 450, 287, 588, 551, 545, + 208, 224, 818, 261, 819, 0, 0, 823, 0, 0, + 0, 825, 824, 0, 826, 792, 791, 0, 0, 820, + 821, 0, 822, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 501, 524, 526, 539, 558, 564, 476, 833, 834, 835, + 836, 837, 838, 839, 840, 298, 534, 565, 532, 584, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 318, 0, 550, 497, 228, 462, 289, 252, 858, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 1722, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 513, 0, 722, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 709, 0, 0, + 0, 269, 714, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, + 272, 268, 251, 315, 381, 423, 503, 417, 721, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 717, + 718, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 97, 0, 0, + 859, 843, 809, 810, 847, 860, 861, 862, 863, 848, + 0, 239, 849, 850, 246, 851, 0, 808, 749, 751, + 750, 768, 769, 770, 771, 772, 773, 774, 747, 856, + 864, 865, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 691, 706, 0, 720, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 703, 704, 0, 0, + 0, 0, 803, 0, 705, 0, 0, 713, 866, 867, + 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, + 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, + 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, + 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 802, 0, + 0, 561, 0, 0, 800, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 853, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 587, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 582, 571, 573, 214, + 502, 533, 240, 479, 0, 0, 589, 248, 499, 216, + 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, + 0, 0, 257, 410, 854, 855, 255, 590, 755, 555, + 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, + 388, 378, 332, 763, 764, 279, 305, 444, 371, 445, + 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, + 494, 543, 591, 235, 236, 238, 0, 278, 282, 290, + 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, + 517, 536, 548, 560, 566, 567, 569, 574, 575, 576, + 577, 583, 581, 578, 579, 580, 572, 402, 309, 490, + 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, + 0, 0, 0, 813, 801, 726, 817, 728, 814, 815, + 723, 724, 727, 816, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 0, 804, 712, 711, 0, 719, 0, 745, + 746, 748, 752, 753, 754, 765, 766, 767, 775, 777, + 778, 776, 779, 780, 781, 784, 785, 786, 787, 782, + 783, 788, 729, 733, 730, 731, 732, 744, 734, 735, + 736, 737, 738, 739, 740, 741, 742, 743, 827, 828, + 829, 830, 831, 832, 758, 762, 761, 759, 760, 756, + 757, 710, 201, 222, 364, 0, 450, 287, 588, 551, + 545, 208, 224, 818, 261, 819, 0, 0, 823, 0, + 0, 0, 825, 824, 0, 826, 792, 791, 0, 0, + 820, 821, 0, 822, 0, 0, 203, 204, 211, 223, + 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, + 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, + 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, + 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, + 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, + 496, 501, 524, 526, 539, 558, 564, 476, 833, 834, + 835, 836, 837, 838, 839, 840, 298, 534, 565, 532, + 584, 559, 435, 374, 0, 0, 549, 0, 377, 280, + 303, 318, 0, 550, 497, 228, 462, 289, 252, 858, + 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, + 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, + 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, + 314, 513, 0, 722, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 411, 0, 0, 0, 0, 709, 0, + 0, 0, 269, 714, 0, 0, 0, 362, 266, 0, + 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, + 281, 272, 268, 251, 315, 381, 423, 503, 417, 721, + 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, + 717, 718, 0, 0, 0, 0, 0, 0, 0, 0, + 321, 249, 323, 206, 408, 493, 285, 0, 97, 0, + 0, 859, 843, 809, 810, 847, 860, 861, 862, 863, + 848, 0, 239, 849, 850, 246, 851, 0, 808, 749, + 751, 750, 768, 769, 770, 771, 772, 773, 774, 747, + 856, 864, 865, 0, 264, 319, 271, 263, 518, 0, + 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 706, 0, 720, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 703, 704, 0, + 0, 0, 0, 803, 0, 705, 0, 0, 713, 866, + 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, + 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, + 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, + 907, 716, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 296, 0, 397, 256, 0, 0, 449, 802, + 0, 0, 561, 0, 0, 800, 0, 0, 0, 0, + 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, + 0, 0, 0, 853, 0, 467, 421, 538, 234, 283, + 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, + 447, 535, 562, 563, 262, 401, 547, 507, 556, 587, + 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, + 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, + 525, 544, 288, 452, 431, 432, 570, 582, 571, 573, + 214, 502, 533, 240, 479, 0, 0, 589, 248, 499, + 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, + 292, 0, 0, 257, 410, 854, 855, 255, 590, 755, + 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, + 529, 388, 378, 332, 763, 764, 279, 305, 444, 371, + 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, + 0, 494, 543, 591, 235, 236, 238, 0, 278, 282, + 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, + 0, 517, 536, 548, 560, 566, 567, 569, 574, 575, + 576, 577, 583, 581, 578, 579, 580, 572, 402, 309, + 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, + 0, 0, 0, 0, 813, 801, 726, 817, 728, 814, + 815, 723, 724, 727, 816, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 608, 609, 0, 804, 712, 711, 0, 719, 0, + 745, 746, 748, 752, 753, 754, 765, 766, 767, 775, + 777, 778, 776, 779, 780, 781, 784, 785, 786, 787, + 782, 783, 788, 729, 733, 730, 731, 732, 744, 734, + 735, 736, 737, 738, 739, 740, 741, 742, 743, 827, + 828, 829, 830, 831, 832, 758, 762, 761, 759, 760, + 756, 757, 710, 201, 222, 364, 0, 450, 287, 588, + 551, 545, 208, 224, 818, 261, 819, 0, 0, 823, + 0, 0, 0, 825, 824, 0, 826, 792, 791, 0, + 0, 820, 821, 0, 822, 0, 0, 203, 204, 211, + 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, + 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, + 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, + 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, + 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, + 495, 496, 501, 524, 526, 539, 558, 564, 476, 833, + 834, 835, 836, 837, 838, 839, 840, 298, 534, 565, + 532, 584, 559, 435, 374, 0, 0, 549, 0, 377, + 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, + 858, 0, 213, 247, 231, 258, 273, 276, 322, 387, + 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, + 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, + 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, + 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, + 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, + 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, + 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, + 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, + 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, + 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, + 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, + 0, 0, 1384, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1385, 1386, 1387, 1388, 1389, + 1390, 1391, 1393, 1392, 1394, 1395, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, + 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, + 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, + 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, + 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, + 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, + 587, 227, 259, 415, 500, 541, 489, 393, 519, 520, + 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, + 232, 525, 544, 288, 452, 431, 432, 570, 582, 571, + 573, 214, 502, 533, 240, 479, 0, 0, 589, 248, + 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 590, + 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, + 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, + 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, + 210, 0, 494, 543, 591, 235, 236, 238, 0, 278, + 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, + 448, 0, 517, 536, 548, 560, 566, 567, 569, 574, + 575, 576, 577, 583, 581, 578, 579, 580, 572, 402, + 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, + 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 592, 593, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 610, 380, 481, 537, 333, 345, 348, + 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, + 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, + 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, + 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, + 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, + 588, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, + 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, + 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, + 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, + 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, + 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, + 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, + 299, 300, 441, 442, 312, 313, 585, 586, 298, 534, + 565, 532, 584, 559, 435, 374, 0, 0, 549, 0, + 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, + 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, + 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, + 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, + 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, + 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, + 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, + 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, + 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, + 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, + 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, + 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, + 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, + 1020, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 1720, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, + 449, 0, 0, 1019, 561, 0, 0, 0, 0, 0, + 1016, 1017, 361, 976, 328, 202, 226, 1010, 1014, 407, + 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, + 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, + 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, + 556, 587, 227, 259, 415, 500, 541, 489, 393, 519, + 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, + 243, 232, 525, 544, 288, 452, 431, 432, 570, 582, + 571, 573, 214, 502, 533, 240, 479, 0, 0, 589, + 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, + 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, + 590, 229, 555, 221, 0, 554, 403, 522, 531, 390, + 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, + 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, + 0, 210, 0, 494, 543, 591, 235, 236, 238, 0, + 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, + 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, + 574, 575, 576, 577, 583, 581, 578, 579, 580, 572, + 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, + 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 592, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 610, 380, 481, 537, 333, 345, + 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, + 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, + 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, + 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, + 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, + 287, 588, 551, 545, 208, 224, 0, 261, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, + 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, + 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, + 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, + 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, + 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, + 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, + 476, 299, 300, 441, 442, 312, 313, 585, 586, 298, + 534, 565, 532, 584, 559, 435, 374, 0, 0, 549, + 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, + 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, + 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, + 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, + 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, + 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, + 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, + 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, + 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, + 0, 0, 0, 0, 1531, 843, 0, 0, 1528, 0, + 0, 0, 0, 1526, 0, 239, 1527, 1525, 246, 1530, + 0, 808, 347, 356, 355, 336, 337, 339, 341, 346, + 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, + 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, + 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, + 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, + 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, + 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, + 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, + 507, 556, 587, 227, 259, 415, 500, 541, 489, 393, + 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, + 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, + 582, 571, 573, 214, 502, 533, 240, 479, 0, 0, + 589, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, + 255, 590, 229, 555, 221, 0, 554, 403, 522, 531, + 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, + 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, + 542, 0, 210, 0, 494, 543, 591, 235, 236, 238, + 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, + 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, + 569, 574, 575, 576, 577, 583, 581, 578, 579, 580, + 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, + 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 592, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 610, 380, 481, 537, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, + 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, + 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, + 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, + 450, 287, 588, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, + 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, + 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, + 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, + 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, + 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, + 564, 476, 299, 300, 441, 442, 312, 313, 585, 586, + 298, 534, 565, 532, 584, 559, 435, 374, 0, 0, + 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, + 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, + 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, + 242, 480, 504, 505, 506, 508, 391, 265, 428, 0, + 392, 372, 514, 515, 314, 88, 513, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, + 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, + 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, + 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, + 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, + 493, 285, 0, 97, 0, 0, 0, 199, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, + 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, + 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, + 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, + 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 1695, 0, 0, - 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, + 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, + 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, + 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, + 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, + 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, + 401, 547, 507, 556, 587, 227, 259, 415, 500, 541, + 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, + 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, + 432, 570, 582, 571, 573, 214, 502, 533, 240, 479, + 0, 0, 589, 248, 499, 216, 530, 498, 389, 324, + 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, + 527, 528, 255, 590, 229, 555, 221, 0, 554, 403, + 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, + 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, + 400, 209, 542, 0, 210, 0, 494, 543, 591, 235, + 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, + 566, 567, 569, 574, 575, 576, 577, 583, 581, 578, + 579, 580, 572, 402, 309, 490, 331, 369, 0, 0, + 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 610, 380, 481, + 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, + 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, + 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, + 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, + 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, + 364, 96, 450, 287, 588, 551, 545, 208, 224, 0, + 261, 0, 0, 0, 0, 0, 0, 2173, 0, 0, + 2172, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, + 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, + 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, + 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, + 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, + 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, + 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, + 585, 586, 298, 534, 565, 532, 584, 559, 435, 374, + 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, + 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, + 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, + 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, + 428, 1587, 0, 372, 514, 515, 314, 513, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, + 0, 0, 0, 1589, 0, 0, 0, 0, 269, 0, + 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, + 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, + 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, + 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, + 408, 493, 285, 0, 0, 0, 0, 1591, 669, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, + 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, + 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, + 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, + 0, 0, 230, 0, 0, 0, 1365, 0, 1366, 1367, + 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5734,36 +3840,104 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, + 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, + 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, + 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, + 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, + 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, + 262, 401, 547, 507, 556, 587, 227, 259, 415, 500, + 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, + 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, + 431, 432, 570, 582, 571, 573, 214, 502, 533, 240, + 479, 0, 0, 589, 248, 499, 216, 530, 498, 389, + 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, + 410, 527, 528, 255, 590, 229, 555, 221, 0, 554, + 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, + 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 591, + 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, + 560, 566, 567, 569, 574, 575, 576, 577, 583, 581, + 578, 579, 580, 572, 402, 309, 490, 331, 369, 0, + 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 610, 380, + 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, + 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, + 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, + 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, + 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, + 222, 364, 0, 450, 287, 588, 551, 545, 208, 224, + 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, + 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, + 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, + 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, + 313, 585, 586, 298, 534, 565, 532, 584, 559, 435, + 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, + 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, + 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, + 265, 428, 0, 392, 372, 514, 515, 314, 88, 513, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, + 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, + 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, + 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, + 323, 206, 408, 493, 285, 0, 97, 0, 1568, 0, + 669, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, + 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, + 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, + 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, + 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, + 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 587, 227, 259, + 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, + 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, + 288, 452, 431, 432, 570, 582, 571, 573, 214, 502, + 533, 240, 479, 0, 0, 589, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 257, 410, 527, 528, 255, 590, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 543, 591, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 536, 548, 560, 566, 567, 569, 574, 575, 576, 577, + 583, 581, 578, 579, 580, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 0, 0, 0, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 610, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 0, 201, 222, 364, 96, 450, 287, 588, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, @@ -5773,7 +3947,7 @@ var yyAct = [...]int{ 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 442, 312, 313, 585, 586, 298, 534, 565, 532, 584, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, @@ -5781,12 +3955,12 @@ var yyAct = [...]int{ 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 1592, 269, 0, 0, 0, 0, 362, 266, 0, 0, + 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 249, 323, 206, 408, 493, 285, 0, 97, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, @@ -5806,61 +3980,598 @@ var yyAct = [...]int{ 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 535, 562, 563, 262, 401, 547, 507, 556, 587, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 544, 288, 452, 431, 432, 570, 582, 571, 573, 214, + 502, 533, 240, 479, 0, 0, 589, 248, 499, 216, + 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, + 0, 0, 257, 410, 527, 528, 255, 590, 229, 555, + 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, + 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, + 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, + 494, 543, 591, 235, 236, 238, 0, 278, 282, 290, + 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, + 517, 536, 548, 560, 566, 567, 569, 574, 575, 576, + 577, 583, 581, 578, 579, 580, 572, 402, 309, 490, + 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 0, 0, 0, 0, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 608, 609, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 610, 380, 481, 537, 333, 345, 348, 338, 357, + 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, + 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, + 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, + 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, + 446, 0, 201, 222, 364, 0, 450, 287, 588, 551, + 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, + 0, 2173, 0, 0, 2172, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, + 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, + 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, + 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, + 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, + 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, + 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, + 441, 442, 312, 313, 585, 586, 298, 534, 565, 532, + 584, 559, 435, 374, 0, 0, 549, 0, 377, 280, + 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, + 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, + 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, + 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, + 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 411, 0, 0, 0, 2124, 0, 0, + 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, + 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, + 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, + 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 97, 0, 0, - 0, 841, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, + 0, 1772, 199, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, + 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, + 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, + 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, + 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, + 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, + 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, + 454, 427, 465, 437, 286, 0, 2122, 466, 368, 523, + 447, 535, 562, 563, 262, 401, 547, 507, 556, 587, + 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, + 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, + 525, 544, 288, 452, 431, 432, 570, 582, 571, 573, + 214, 502, 533, 240, 479, 0, 0, 589, 248, 499, + 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, + 292, 0, 0, 257, 410, 527, 528, 255, 590, 229, + 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, + 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, + 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, + 0, 494, 543, 591, 235, 236, 238, 0, 278, 282, + 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, + 0, 517, 536, 548, 560, 566, 567, 569, 574, 575, + 576, 577, 583, 581, 578, 579, 580, 572, 402, 309, + 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 608, 609, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 610, 380, 481, 537, 333, 345, 348, 338, + 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, + 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, + 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, + 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, + 375, 446, 0, 201, 222, 364, 0, 450, 287, 588, + 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, + 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, + 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, + 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, + 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, + 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, + 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, + 300, 441, 442, 312, 313, 585, 586, 298, 534, 565, + 532, 584, 559, 435, 374, 0, 0, 549, 0, 377, + 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, + 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, + 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, + 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, + 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, + 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, + 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, + 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, + 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, + 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, + 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, + 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, + 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, + 0, 970, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, + 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, + 0, 361, 976, 328, 202, 226, 974, 0, 407, 457, + 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, + 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, + 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, + 587, 227, 259, 415, 500, 541, 489, 393, 519, 520, + 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, + 232, 525, 544, 288, 452, 431, 432, 570, 582, 571, + 573, 214, 502, 533, 240, 479, 0, 0, 589, 248, + 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 590, + 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, + 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, + 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, + 210, 0, 494, 543, 591, 235, 236, 238, 0, 278, + 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, + 448, 0, 517, 536, 548, 560, 566, 567, 569, 574, + 575, 576, 577, 583, 581, 578, 579, 580, 572, 402, + 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, + 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 592, 593, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 610, 380, 481, 537, 333, 345, 348, + 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, + 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, + 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, + 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, + 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, + 588, 551, 545, 208, 224, 0, 261, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, + 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, + 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, + 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, + 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, + 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, + 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, + 299, 300, 441, 442, 312, 313, 585, 586, 298, 534, + 565, 532, 584, 559, 435, 374, 0, 0, 549, 0, + 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, + 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, + 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, + 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, + 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 0, 0, 2124, + 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, + 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, + 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, + 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, + 0, 0, 0, 1772, 199, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, + 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, + 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, + 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, + 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, + 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, + 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, + 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, + 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, + 556, 587, 227, 259, 415, 500, 541, 489, 393, 519, + 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, + 243, 232, 525, 544, 288, 452, 431, 432, 570, 582, + 571, 573, 214, 502, 533, 240, 479, 0, 0, 589, + 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, + 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, + 590, 229, 555, 221, 0, 554, 403, 522, 531, 390, + 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, + 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, + 0, 210, 0, 494, 543, 591, 235, 236, 238, 0, + 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, + 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, + 574, 575, 576, 577, 583, 581, 578, 579, 580, 572, + 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, + 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 592, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 610, 380, 481, 537, 333, 345, + 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, + 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, + 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, + 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, + 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, + 287, 588, 551, 545, 208, 224, 0, 261, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, + 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, + 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, + 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, + 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, + 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, + 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, + 476, 299, 300, 441, 442, 312, 313, 585, 586, 298, + 534, 565, 532, 584, 559, 435, 374, 0, 0, 549, + 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, + 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, + 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, + 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, + 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, + 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, + 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, + 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, + 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, + 0, 0, 0, 1568, 0, 669, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, + 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, + 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, + 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, + 0, 449, 0, 0, 0, 561, 0, 0, 0, 3456, + 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, + 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, + 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, + 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, + 507, 556, 587, 227, 259, 415, 500, 541, 489, 393, + 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, + 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, + 582, 571, 573, 214, 502, 533, 240, 479, 0, 0, + 589, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, + 255, 590, 229, 555, 221, 0, 554, 403, 522, 531, + 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, + 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, + 542, 0, 210, 0, 494, 543, 591, 235, 236, 238, + 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, + 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, + 569, 574, 575, 576, 577, 583, 581, 578, 579, 580, + 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, + 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 592, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 610, 380, 481, 537, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, + 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, + 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, + 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, + 450, 287, 588, 551, 545, 208, 224, 0, 261, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, + 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, + 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, + 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, + 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, + 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, + 564, 476, 299, 300, 441, 442, 312, 313, 585, 586, + 298, 534, 565, 532, 584, 559, 435, 374, 0, 0, + 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, + 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, + 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, + 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, + 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, + 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, + 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, + 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, + 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, + 285, 0, 0, 0, 0, 1957, 669, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, + 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, + 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, + 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1958, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, + 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, + 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, + 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, + 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, + 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, + 547, 507, 556, 587, 227, 259, 415, 500, 541, 489, + 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, + 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, + 570, 582, 571, 573, 214, 502, 533, 240, 479, 0, + 0, 589, 248, 499, 216, 530, 498, 389, 324, 325, + 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, + 528, 255, 590, 229, 555, 221, 0, 554, 403, 522, + 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, + 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, + 209, 542, 0, 210, 0, 494, 543, 591, 235, 236, + 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, + 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, + 567, 569, 574, 575, 576, 577, 583, 581, 578, 579, + 580, 572, 402, 309, 490, 331, 369, 0, 0, 420, + 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 610, 380, 481, 537, + 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, + 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, + 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, + 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, + 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, + 0, 450, 287, 588, 551, 545, 208, 224, 0, 261, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, + 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, + 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, + 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, + 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, + 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, + 558, 564, 476, 299, 300, 441, 442, 312, 313, 585, + 586, 298, 534, 565, 532, 584, 559, 435, 374, 0, + 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, + 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, + 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, + 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, + 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, + 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, + 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, + 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, + 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, + 493, 285, 0, 0, 0, 0, 2565, 669, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, + 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, + 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, + 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, + 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2566, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, + 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, + 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, + 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, + 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, + 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, + 401, 547, 507, 556, 587, 227, 259, 415, 500, 541, + 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, + 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, + 432, 570, 582, 571, 573, 214, 502, 533, 240, 479, + 0, 0, 589, 248, 499, 216, 530, 498, 389, 324, + 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, + 527, 528, 255, 590, 229, 555, 221, 0, 554, 403, + 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, + 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, + 400, 209, 542, 0, 210, 0, 494, 543, 591, 235, + 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, + 566, 567, 569, 574, 575, 576, 577, 583, 581, 578, + 579, 580, 572, 402, 309, 490, 331, 369, 0, 0, + 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 610, 380, 481, + 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, + 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, + 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, + 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, + 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, + 364, 0, 450, 287, 588, 551, 545, 208, 224, 0, + 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, + 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, + 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, + 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, + 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, + 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, + 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, + 585, 586, 298, 534, 565, 532, 584, 559, 435, 374, + 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, + 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, + 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, + 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, + 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, + 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, + 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, + 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, + 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, + 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, + 408, 493, 285, 0, 0, 0, 0, 0, 669, 0, + 0, 0, 0, 2550, 0, 0, 0, 0, 239, 0, + 0, 246, 2551, 0, 0, 347, 356, 355, 336, 337, + 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, + 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, + 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, + 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, + 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, + 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, + 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, + 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, + 262, 401, 547, 507, 556, 587, 227, 259, 415, 500, + 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, + 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, + 431, 432, 570, 582, 571, 573, 214, 502, 533, 240, + 479, 0, 0, 589, 248, 499, 216, 530, 498, 389, + 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, + 410, 527, 528, 255, 590, 229, 555, 221, 0, 554, + 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, + 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 591, + 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, + 560, 566, 567, 569, 574, 575, 576, 577, 583, 581, + 578, 579, 580, 572, 402, 309, 490, 331, 369, 0, + 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 610, 380, + 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, + 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, + 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, + 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, + 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, + 222, 364, 0, 450, 287, 588, 551, 545, 208, 224, + 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, + 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, + 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, + 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, + 313, 585, 586, 298, 534, 565, 532, 584, 559, 435, + 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, + 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, + 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, + 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, + 1610, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, + 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, + 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, + 206, 408, 493, 285, 0, 0, 0, 0, 1609, 669, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, + 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, + 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, + 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, + 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, + 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, + 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, + 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, + 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, + 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, + 563, 262, 401, 547, 507, 556, 587, 227, 259, 415, + 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, + 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, + 452, 431, 432, 570, 582, 571, 573, 214, 502, 533, + 240, 479, 0, 0, 589, 248, 499, 216, 530, 498, + 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, + 257, 410, 527, 528, 255, 590, 229, 555, 221, 0, + 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, + 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, + 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, + 591, 235, 236, 238, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, + 548, 560, 566, 567, 569, 574, 575, 576, 577, 583, + 581, 578, 579, 580, 572, 402, 309, 490, 331, 369, + 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, + 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, + 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, + 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, + 201, 222, 364, 0, 450, 287, 588, 551, 545, 208, + 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, + 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, + 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, + 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, + 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, + 312, 313, 585, 586, 298, 534, 565, 532, 584, 559, + 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, + 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, + 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, + 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, + 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, + 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, + 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, + 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, + 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, + 671, 672, 673, 0, 0, 0, 0, 0, 0, 0, + 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, + 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, + 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, + 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5868,36 +4579,36 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, + 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, + 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 587, 227, 259, + 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, + 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, + 288, 452, 431, 432, 570, 582, 571, 573, 214, 502, + 533, 240, 479, 0, 0, 589, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 257, 410, 527, 528, 255, 590, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 543, 591, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 536, 548, 560, 566, 567, 569, 574, 575, 576, 577, + 583, 581, 578, 579, 580, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 0, 0, 0, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 610, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 0, 201, 222, 364, 0, 450, 287, 588, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, @@ -5907,7 +4618,7 @@ var yyAct = [...]int{ 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 442, 312, 313, 585, 586, 298, 534, 565, 532, 584, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, @@ -5921,50 +4632,654 @@ var yyAct = [...]int{ 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 669, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, + 0, 561, 0, 0, 0, 3580, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 587, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 582, 571, 573, 214, + 502, 533, 240, 479, 0, 0, 589, 248, 499, 216, + 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, + 0, 0, 257, 410, 527, 528, 255, 590, 229, 555, + 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, + 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, + 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, + 494, 543, 591, 235, 236, 238, 0, 278, 282, 290, + 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, + 517, 536, 548, 560, 566, 567, 569, 574, 575, 576, + 577, 583, 581, 578, 579, 580, 572, 402, 309, 490, + 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 610, 380, 481, 537, 333, 345, 348, 338, 357, + 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, + 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, + 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, + 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, + 446, 0, 201, 222, 364, 0, 450, 287, 588, 551, + 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, + 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, + 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, + 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, + 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, + 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, + 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, + 441, 442, 312, 313, 585, 586, 298, 534, 565, 532, + 584, 559, 435, 374, 0, 0, 549, 0, 377, 280, + 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, + 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, + 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, + 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, + 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, + 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, + 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, + 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, + 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, + 0, 1772, 199, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, + 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, + 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, + 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, + 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, + 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, + 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, + 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, + 447, 535, 562, 563, 262, 401, 547, 507, 556, 587, + 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, + 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, + 525, 544, 288, 452, 431, 432, 570, 582, 571, 573, + 214, 502, 533, 240, 479, 0, 0, 589, 248, 499, + 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, + 292, 0, 0, 257, 410, 527, 528, 255, 590, 229, + 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, + 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, + 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, + 0, 494, 543, 591, 235, 236, 238, 0, 278, 282, + 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, + 0, 517, 536, 548, 560, 566, 567, 569, 574, 575, + 576, 577, 583, 581, 578, 579, 580, 572, 402, 309, + 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 608, 609, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 610, 380, 481, 537, 333, 345, 348, 338, + 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, + 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, + 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, + 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, + 375, 446, 0, 201, 222, 364, 0, 450, 287, 588, + 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, + 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, + 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, + 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, + 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, + 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, + 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, + 300, 441, 442, 312, 313, 585, 586, 298, 534, 565, + 532, 584, 559, 435, 374, 0, 0, 549, 0, 377, + 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, + 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, + 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, + 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, + 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, + 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, + 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, + 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, + 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, + 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, + 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, + 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, + 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, + 0, 0, 0, 561, 0, 0, 0, 3456, 0, 0, + 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, + 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, + 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, + 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, + 587, 227, 259, 415, 500, 541, 489, 393, 519, 520, + 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, + 232, 525, 544, 288, 452, 431, 432, 570, 582, 571, + 573, 214, 502, 533, 240, 479, 0, 0, 589, 248, + 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 590, + 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, + 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, + 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, + 210, 0, 494, 543, 591, 235, 236, 238, 0, 278, + 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, + 448, 0, 517, 536, 548, 560, 566, 567, 569, 574, + 575, 576, 577, 583, 581, 578, 579, 580, 572, 402, + 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, + 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 592, 593, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 610, 380, 481, 537, 333, 345, 348, + 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, + 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, + 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, + 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, + 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, + 588, 551, 545, 208, 224, 0, 261, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, + 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, + 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, + 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, + 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, + 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, + 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, + 299, 300, 441, 442, 312, 313, 585, 586, 298, 534, + 565, 532, 584, 559, 435, 374, 0, 0, 549, 0, + 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, + 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, + 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, + 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, + 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, + 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, + 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, + 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, + 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, + 97, 0, 0, 0, 669, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, + 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, + 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, + 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, + 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, + 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, + 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, + 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, + 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, + 556, 587, 227, 259, 415, 500, 541, 489, 393, 519, + 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, + 243, 232, 525, 544, 288, 452, 431, 432, 570, 582, + 571, 573, 214, 502, 533, 240, 479, 0, 0, 589, + 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, + 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, + 590, 229, 555, 221, 0, 554, 403, 522, 531, 390, + 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, + 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, + 0, 210, 0, 494, 543, 591, 235, 236, 238, 0, + 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, + 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, + 574, 575, 576, 577, 583, 581, 578, 579, 580, 572, + 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, + 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 592, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 610, 380, 481, 537, 333, 345, + 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, + 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, + 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, + 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, + 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, + 287, 588, 551, 545, 208, 224, 0, 261, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, + 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, + 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, + 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, + 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, + 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, + 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, + 476, 299, 300, 441, 442, 312, 313, 585, 586, 298, + 534, 565, 532, 584, 559, 435, 374, 0, 0, 549, + 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, + 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, + 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, + 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, + 372, 514, 515, 314, 513, 0, 0, 0, 0, 2174, + 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, + 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, + 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, + 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, + 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, + 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, + 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, + 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, + 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, + 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, + 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, + 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, + 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, + 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, + 507, 556, 587, 227, 259, 415, 500, 541, 489, 393, + 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, + 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, + 582, 571, 573, 214, 502, 533, 240, 479, 0, 0, + 589, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, + 255, 590, 229, 555, 221, 0, 554, 403, 522, 531, + 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, + 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, + 542, 0, 210, 0, 494, 543, 591, 235, 236, 238, + 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, + 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, + 569, 574, 575, 576, 577, 583, 581, 578, 579, 580, + 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, + 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 592, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 610, 380, 481, 537, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, + 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, + 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, + 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, + 450, 287, 588, 551, 545, 208, 224, 0, 261, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, + 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, + 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, + 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, + 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, + 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, + 564, 476, 299, 300, 441, 442, 312, 313, 585, 586, + 298, 534, 565, 532, 584, 559, 435, 374, 0, 0, + 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, + 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, + 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, + 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, + 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, + 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, + 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, + 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, + 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, + 285, 0, 0, 0, 0, 1591, 669, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, + 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, + 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, + 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, + 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, + 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, + 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, + 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, + 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, + 547, 507, 556, 587, 227, 259, 415, 500, 541, 489, + 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, + 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, + 570, 582, 571, 573, 214, 502, 533, 240, 479, 0, + 0, 589, 248, 499, 216, 530, 498, 389, 324, 325, + 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, + 528, 255, 590, 229, 555, 221, 0, 554, 403, 522, + 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, + 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, + 209, 542, 0, 210, 0, 494, 543, 591, 235, 236, + 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, + 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, + 567, 569, 574, 575, 576, 577, 583, 581, 578, 579, + 580, 572, 402, 309, 490, 331, 369, 0, 0, 420, + 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 610, 380, 481, 537, + 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, + 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, + 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, + 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, + 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, + 0, 450, 287, 588, 551, 545, 208, 224, 0, 261, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, + 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, + 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, + 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, + 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, + 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, + 558, 564, 476, 299, 300, 441, 442, 312, 313, 585, + 586, 298, 534, 565, 532, 584, 559, 435, 374, 0, + 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, + 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, + 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, + 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, + 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, + 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, + 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, + 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, + 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, + 493, 285, 0, 0, 0, 0, 0, 199, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, + 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, + 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, + 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, + 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, + 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, + 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, + 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, + 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, + 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, + 401, 547, 507, 556, 587, 227, 259, 415, 500, 541, + 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, + 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, + 432, 570, 582, 571, 573, 214, 502, 533, 240, 479, + 0, 0, 589, 248, 499, 216, 530, 498, 389, 324, + 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, + 527, 528, 255, 590, 229, 555, 221, 0, 554, 403, + 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, + 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, + 400, 209, 542, 0, 210, 0, 494, 543, 591, 235, + 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, + 566, 567, 569, 574, 575, 576, 577, 583, 581, 578, + 579, 580, 572, 402, 309, 490, 331, 369, 0, 0, + 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 610, 380, 481, + 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, + 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, + 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, + 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, + 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, + 364, 1912, 450, 287, 588, 551, 545, 208, 224, 0, + 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, + 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, + 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, + 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, + 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, + 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, + 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, + 585, 586, 298, 534, 565, 532, 584, 559, 435, 374, + 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, + 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, + 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, + 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, + 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, + 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, + 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, + 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, + 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, + 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, + 408, 493, 285, 0, 0, 0, 0, 1903, 669, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, + 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, + 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, + 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, + 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, + 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, + 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, + 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, + 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, + 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, + 262, 401, 547, 507, 556, 587, 227, 259, 415, 500, + 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, + 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, + 431, 432, 570, 582, 571, 573, 214, 502, 533, 240, + 479, 0, 0, 589, 248, 499, 216, 530, 498, 389, + 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, + 410, 527, 528, 255, 590, 229, 555, 221, 0, 554, + 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, + 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 591, + 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, + 560, 566, 567, 569, 574, 575, 576, 577, 583, 581, + 578, 579, 580, 572, 402, 309, 490, 331, 369, 0, + 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 610, 380, + 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, + 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, + 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, + 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, + 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, + 222, 364, 0, 450, 287, 588, 551, 545, 208, 224, + 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, + 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, + 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, + 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, + 313, 585, 586, 298, 534, 565, 532, 584, 559, 435, + 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, + 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, + 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, + 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 1739, 0, 0, 0, 0, 0, 0, 269, + 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, + 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, + 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, + 206, 408, 493, 285, 0, 0, 0, 0, 0, 669, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, + 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, + 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, + 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, + 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, + 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, + 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, + 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, + 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, + 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, + 563, 262, 401, 547, 507, 556, 587, 227, 259, 415, + 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, + 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, + 452, 431, 432, 570, 582, 571, 573, 214, 502, 533, + 240, 479, 0, 0, 589, 248, 499, 216, 530, 498, + 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, + 257, 410, 527, 528, 255, 590, 229, 555, 221, 0, + 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, + 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, + 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, + 591, 235, 236, 238, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, + 548, 560, 566, 567, 569, 574, 575, 576, 577, 583, + 581, 578, 579, 580, 572, 402, 309, 490, 331, 369, + 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, + 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, + 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, + 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, + 201, 222, 364, 0, 450, 287, 588, 551, 545, 208, + 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, + 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, + 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, + 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, + 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, + 312, 313, 585, 586, 298, 534, 565, 532, 584, 559, + 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, + 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, + 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, + 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, + 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 1737, 0, 0, 0, 0, 0, 0, + 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, + 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, + 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, + 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, + 669, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, + 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, + 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, + 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1340, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, + 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, + 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 587, 227, 259, + 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, + 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, + 288, 452, 431, 432, 570, 582, 571, 573, 214, 502, + 533, 240, 479, 0, 0, 589, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 257, 410, 527, 528, 255, 590, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 543, 591, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 536, 548, 560, 566, 567, 569, 574, 575, 576, 577, + 583, 581, 578, 579, 580, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 0, 0, 0, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 610, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 0, 201, 222, 364, 0, 450, 287, 588, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, @@ -5974,21 +5289,21 @@ var yyAct = [...]int{ 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 1339, 534, 565, 532, 583, + 442, 312, 313, 585, 586, 298, 534, 565, 532, 584, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 1735, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 669, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, @@ -6007,61 +5322,597 @@ var yyAct = [...]int{ 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 535, 562, 563, 262, 401, 547, 507, 556, 587, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 544, 288, 452, 431, 432, 570, 582, 571, 573, 214, + 502, 533, 240, 479, 0, 0, 589, 248, 499, 216, + 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, + 0, 0, 257, 410, 527, 528, 255, 590, 229, 555, + 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, + 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, + 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, + 494, 543, 591, 235, 236, 238, 0, 278, 282, 290, + 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, + 517, 536, 548, 560, 566, 567, 569, 574, 575, 576, + 577, 583, 581, 578, 579, 580, 572, 402, 309, 490, + 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 0, 0, 0, 0, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 608, 609, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 610, 380, 481, 537, 333, 345, 348, 338, 357, + 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, + 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, + 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, + 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, + 446, 0, 201, 222, 364, 0, 450, 287, 588, 551, + 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 926, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, + 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, + 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, + 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, + 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, + 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, + 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, + 441, 442, 312, 313, 585, 586, 298, 534, 565, 532, + 584, 559, 435, 374, 0, 0, 549, 0, 377, 280, + 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, + 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, + 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, + 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, + 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 411, 0, 1733, 0, 0, 0, 0, + 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, + 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, + 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, + 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, + 0, 0, 669, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, + 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, + 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, + 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, + 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, + 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, + 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, + 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, + 447, 535, 562, 563, 262, 401, 547, 507, 556, 587, + 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, + 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, + 525, 544, 288, 452, 431, 432, 570, 582, 571, 573, + 214, 502, 533, 240, 479, 0, 0, 589, 248, 499, + 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, + 292, 0, 0, 257, 410, 527, 528, 255, 590, 229, + 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, + 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, + 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, + 0, 494, 543, 591, 235, 236, 238, 0, 278, 282, + 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, + 0, 517, 536, 548, 560, 566, 567, 569, 574, 575, + 576, 577, 583, 581, 578, 579, 580, 572, 402, 309, + 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 608, 609, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 610, 380, 481, 537, 333, 345, 348, 338, + 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, + 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, + 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, + 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, + 375, 446, 0, 201, 222, 364, 0, 450, 287, 588, + 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, + 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, + 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, + 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, + 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, + 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, + 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, + 300, 441, 442, 312, 313, 585, 586, 298, 534, 565, + 532, 584, 559, 435, 374, 0, 0, 549, 0, 377, + 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, + 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, + 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, + 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, + 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 411, 0, 1731, 0, 0, 0, + 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, + 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, + 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, + 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, + 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, + 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, + 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, + 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, + 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, + 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, + 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, + 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, + 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, + 587, 227, 259, 415, 500, 541, 489, 393, 519, 520, + 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, + 232, 525, 544, 288, 452, 431, 432, 570, 582, 571, + 573, 214, 502, 533, 240, 479, 0, 0, 589, 248, + 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 590, + 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, + 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, + 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, + 210, 0, 494, 543, 591, 235, 236, 238, 0, 278, + 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, + 448, 0, 517, 536, 548, 560, 566, 567, 569, 574, + 575, 576, 577, 583, 581, 578, 579, 580, 572, 402, + 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, + 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 592, 593, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 610, 380, 481, 537, 333, 345, 348, + 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, + 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, + 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, + 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, + 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, + 588, 551, 545, 208, 224, 0, 261, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, + 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, + 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, + 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, + 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, + 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, + 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, + 299, 300, 441, 442, 312, 313, 585, 586, 298, 534, + 565, 532, 584, 559, 435, 374, 0, 0, 549, 0, + 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, + 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, + 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, + 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, + 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 1727, 0, 0, + 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, + 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, + 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, + 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, + 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, + 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, + 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, + 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, + 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, + 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, + 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, + 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, + 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, + 556, 587, 227, 259, 415, 500, 541, 489, 393, 519, + 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, + 243, 232, 525, 544, 288, 452, 431, 432, 570, 582, + 571, 573, 214, 502, 533, 240, 479, 0, 0, 589, + 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, + 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, + 590, 229, 555, 221, 0, 554, 403, 522, 531, 390, + 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, + 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, + 0, 210, 0, 494, 543, 591, 235, 236, 238, 0, + 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, + 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, + 574, 575, 576, 577, 583, 581, 578, 579, 580, 572, + 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, + 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 592, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 610, 380, 481, 537, 333, 345, + 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, + 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, + 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, + 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, + 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, + 287, 588, 551, 545, 208, 224, 0, 261, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, + 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, + 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, + 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, + 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, + 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, + 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, + 476, 299, 300, 441, 442, 312, 313, 585, 586, 298, + 534, 565, 532, 584, 559, 435, 374, 0, 0, 549, + 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, + 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, + 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, + 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, + 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 411, 0, 1725, 0, + 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, + 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, + 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, + 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, + 0, 0, 0, 0, 0, 669, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, + 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, + 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, + 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, + 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, + 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, + 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, + 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, + 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, + 507, 556, 587, 227, 259, 415, 500, 541, 489, 393, + 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, + 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, + 582, 571, 573, 214, 502, 533, 240, 479, 0, 0, + 589, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, + 255, 590, 229, 555, 221, 0, 554, 403, 522, 531, + 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, + 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, + 542, 0, 210, 0, 494, 543, 591, 235, 236, 238, + 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, + 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, + 569, 574, 575, 576, 577, 583, 581, 578, 579, 580, + 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, + 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 592, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 610, 380, 481, 537, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, + 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, + 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, + 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, + 450, 287, 588, 551, 545, 208, 224, 0, 261, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, + 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, + 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, + 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, + 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, + 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, + 564, 476, 299, 300, 441, 442, 312, 313, 585, 586, + 298, 534, 565, 532, 584, 559, 435, 374, 0, 0, + 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, + 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, + 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, + 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, + 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 411, 0, 1723, + 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, + 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, + 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, + 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, + 285, 0, 0, 0, 0, 0, 669, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, + 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, + 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, + 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, + 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, + 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, + 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, + 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, + 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, + 547, 507, 556, 587, 227, 259, 415, 500, 541, 489, + 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, + 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, + 570, 582, 571, 573, 214, 502, 533, 240, 479, 0, + 0, 589, 248, 499, 216, 530, 498, 389, 324, 325, + 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, + 528, 255, 590, 229, 555, 221, 0, 554, 403, 522, + 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, + 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, + 209, 542, 0, 210, 0, 494, 543, 591, 235, 236, + 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, + 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, + 567, 569, 574, 575, 576, 577, 583, 581, 578, 579, + 580, 572, 402, 309, 490, 331, 369, 0, 0, 420, + 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 610, 380, 481, 537, + 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, + 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, + 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, + 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, + 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, + 0, 450, 287, 588, 551, 545, 208, 224, 0, 261, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, + 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, + 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, + 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, + 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, + 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, + 558, 564, 476, 299, 300, 441, 442, 312, 313, 585, + 586, 298, 534, 565, 532, 584, 559, 435, 374, 0, + 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, + 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, + 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, + 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, + 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, + 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, + 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, + 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, + 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, + 493, 285, 0, 1698, 0, 0, 0, 669, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, + 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, + 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, + 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, + 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, + 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, + 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, + 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, + 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, + 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, + 401, 547, 507, 556, 587, 227, 259, 415, 500, 541, + 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, + 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, + 432, 570, 582, 571, 573, 214, 502, 533, 240, 479, + 0, 0, 589, 248, 499, 216, 530, 498, 389, 324, + 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, + 527, 528, 255, 590, 229, 555, 221, 0, 554, 403, + 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, + 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, + 400, 209, 542, 0, 210, 0, 494, 543, 591, 235, + 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, + 566, 567, 569, 574, 575, 576, 577, 583, 581, 578, + 579, 580, 572, 402, 309, 490, 331, 369, 0, 0, + 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 610, 380, 481, + 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, + 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, + 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, + 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, + 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, + 364, 0, 450, 287, 588, 551, 545, 208, 224, 0, + 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, + 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, + 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, + 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, + 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, + 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, + 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, + 585, 586, 298, 534, 565, 532, 584, 559, 435, 374, + 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, + 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, + 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, + 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, + 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, + 0, 0, 0, 0, 0, 0, 0, 1595, 269, 0, + 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, + 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, + 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, + 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, + 408, 493, 285, 0, 0, 0, 0, 0, 199, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, + 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, + 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, + 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, + 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, + 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, + 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, + 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, + 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, + 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, + 262, 401, 547, 507, 556, 587, 227, 259, 415, 500, + 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, + 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, + 431, 432, 570, 582, 571, 573, 214, 502, 533, 240, + 479, 0, 0, 589, 248, 499, 216, 530, 498, 389, + 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, + 410, 527, 528, 255, 590, 229, 555, 221, 0, 554, + 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, + 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 591, + 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, + 560, 566, 567, 569, 574, 575, 576, 577, 583, 581, + 578, 579, 580, 572, 402, 309, 490, 331, 369, 0, + 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 610, 380, + 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, + 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, + 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, + 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, + 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, + 222, 364, 0, 450, 287, 588, 551, 545, 208, 224, + 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, + 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, + 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, + 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, + 313, 585, 586, 298, 534, 565, 532, 584, 559, 435, + 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, + 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, + 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, + 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, + 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, + 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, + 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, + 206, 408, 493, 285, 0, 97, 0, 0, 0, 843, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, + 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, + 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, + 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, + 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, + 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, + 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, + 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, + 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, + 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, + 563, 262, 401, 547, 507, 556, 587, 227, 259, 415, + 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, + 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, + 452, 431, 432, 570, 582, 571, 573, 214, 502, 533, + 240, 479, 0, 0, 589, 248, 499, 216, 530, 498, + 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, + 257, 410, 527, 528, 255, 590, 229, 555, 221, 0, + 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, + 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, + 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, + 591, 235, 236, 238, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, + 548, 560, 566, 567, 569, 574, 575, 576, 577, 583, + 581, 578, 579, 580, 572, 402, 309, 490, 331, 369, + 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, + 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, + 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, + 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, + 201, 222, 364, 0, 450, 287, 588, 551, 545, 208, + 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, + 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, + 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, + 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, + 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, + 312, 313, 585, 586, 298, 534, 565, 532, 584, 559, + 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, + 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, + 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, + 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, + 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, + 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, + 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, + 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, + 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, + 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, + 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, + 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, + 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6069,36 +5920,37 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 612, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, + 0, 0, 0, 0, 0, 0, 0, 0, 1343, 0, + 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, + 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, + 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 587, 227, 259, + 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, + 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, + 288, 452, 431, 432, 570, 582, 571, 573, 214, 502, + 533, 240, 479, 0, 0, 589, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, + 0, 257, 410, 527, 528, 255, 590, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, + 543, 591, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, + 536, 548, 560, 566, 567, 569, 574, 575, 576, 577, + 583, 581, 578, 579, 580, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 0, 0, 0, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 610, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, + 0, 201, 222, 364, 0, 450, 287, 588, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, @@ -6108,7 +5960,7 @@ var yyAct = [...]int{ 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, + 442, 312, 313, 585, 586, 1342, 534, 565, 532, 584, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, @@ -6122,7 +5974,7 @@ var yyAct = [...]int{ 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, @@ -6141,271 +5993,405 @@ var yyAct = [...]int{ 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, + 535, 562, 563, 262, 401, 547, 507, 556, 587, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 544, 288, 452, 431, 432, 570, 582, 571, 573, 214, + 502, 533, 240, 479, 0, 0, 589, 248, 499, 216, + 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, + 0, 0, 257, 410, 527, 528, 255, 590, 229, 555, + 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, + 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, + 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, + 494, 543, 591, 235, 236, 238, 0, 278, 282, 290, + 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, + 517, 536, 548, 560, 566, 567, 569, 574, 575, 576, + 577, 583, 581, 578, 579, 580, 572, 402, 309, 490, + 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, + 0, 0, 0, 0, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 3584, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 608, 609, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 610, 380, 481, 537, 333, 345, 348, 338, 357, + 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, + 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, + 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, + 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, + 446, 0, 201, 222, 364, 0, 450, 287, 588, 551, + 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 928, 0, 0, 0, 203, 204, 211, 223, + 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, + 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, + 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, + 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, + 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, + 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, + 441, 442, 312, 313, 585, 586, 298, 534, 565, 532, + 584, 559, 435, 374, 0, 0, 549, 0, 377, 280, + 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, + 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, + 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, + 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, + 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, + 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, + 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, + 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, + 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, + 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, + 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, + 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, + 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 841, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, + 613, 0, 561, 0, 0, 0, 0, 0, 0, 0, + 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, + 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, + 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, + 447, 535, 562, 563, 262, 401, 547, 507, 556, 587, + 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, + 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, + 525, 544, 288, 452, 431, 432, 570, 582, 571, 573, + 214, 502, 533, 240, 479, 0, 0, 589, 248, 499, + 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, + 292, 0, 0, 257, 410, 527, 528, 255, 590, 229, + 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, + 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, + 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, + 0, 494, 543, 591, 235, 236, 238, 0, 278, 282, + 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, + 0, 517, 536, 548, 560, 566, 567, 569, 574, 575, + 576, 577, 583, 581, 578, 579, 580, 572, 402, 309, + 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 592, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 608, 609, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 610, 380, 481, 537, 333, 345, 348, 338, + 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, + 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, + 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, + 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, + 375, 446, 0, 201, 222, 364, 0, 450, 287, 588, + 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, + 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, + 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, + 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, + 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, + 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, + 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, + 300, 441, 442, 312, 313, 585, 586, 298, 534, 565, + 532, 584, 559, 435, 374, 0, 0, 549, 0, 377, + 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, + 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, + 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, + 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, + 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, + 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, + 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, + 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, + 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, + 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, + 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, + 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, + 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, + 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, + 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, + 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, + 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, + 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, + 587, 227, 259, 415, 500, 541, 489, 393, 519, 520, + 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, + 232, 525, 544, 288, 452, 431, 432, 570, 582, 571, + 573, 214, 502, 533, 240, 479, 0, 0, 589, 248, + 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 590, + 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, + 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, + 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, + 210, 0, 494, 543, 591, 235, 236, 238, 0, 278, + 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, + 448, 0, 517, 536, 548, 560, 566, 567, 569, 574, + 575, 576, 577, 583, 581, 578, 579, 580, 572, 402, + 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, + 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 592, 593, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 610, 380, 481, 537, 333, 345, 348, + 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, + 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, + 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, + 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, + 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, + 588, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, + 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, + 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, + 3588, 405, 406, 409, 412, 413, 416, 418, 419, 422, + 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, + 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, + 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, + 299, 300, 441, 442, 312, 313, 585, 586, 298, 534, + 565, 532, 584, 559, 435, 374, 0, 0, 549, 0, + 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, + 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, + 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, + 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, + 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, + 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, + 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, + 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, + 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, + 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, + 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, + 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, + 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, + 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, + 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, + 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, + 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, + 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, + 556, 587, 227, 259, 415, 500, 541, 489, 393, 519, + 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, + 243, 232, 525, 544, 288, 452, 431, 432, 570, 582, + 571, 573, 214, 502, 533, 240, 479, 0, 0, 589, + 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, + 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, + 590, 229, 555, 221, 0, 554, 403, 522, 531, 390, + 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, + 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, + 0, 210, 0, 494, 543, 591, 235, 236, 238, 0, + 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, + 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, + 574, 575, 576, 577, 583, 581, 578, 579, 580, 572, + 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, + 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 592, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 610, 380, 481, 537, 333, 345, + 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, + 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, + 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, + 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, + 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, + 287, 588, 551, 545, 208, 224, 0, 261, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, + 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, + 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, + 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, + 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, + 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, + 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, + 476, 299, 300, 441, 442, 312, 313, 585, 586, 298, + 534, 565, 532, 584, 559, 435, 374, 0, 0, 549, + 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, + 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, + 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, + 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, + 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, + 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, + 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, + 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, + 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, + 0, 0, 0, 0, 0, 843, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, + 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, + 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, + 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, + 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, + 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, + 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, + 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, + 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, + 507, 556, 587, 227, 259, 415, 500, 541, 489, 393, + 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, + 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, + 582, 571, 573, 214, 502, 533, 240, 479, 0, 0, + 589, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, + 255, 590, 229, 555, 221, 0, 554, 403, 522, 531, + 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, + 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, + 542, 0, 210, 0, 494, 543, 591, 235, 236, 238, + 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, + 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, + 569, 574, 575, 576, 577, 583, 581, 578, 579, 580, + 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, + 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 592, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 610, 380, 481, 537, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, + 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, + 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, + 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, + 450, 287, 588, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 586, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 581, 571, 214, 502, - 533, 240, 479, 0, 0, 588, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 589, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 590, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 573, 574, 575, 576, - 582, 580, 577, 578, 579, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 609, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 587, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, + 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, + 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, + 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, + 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, + 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, + 564, 476, 299, 300, 441, 442, 312, 313, 585, 586, + 298, 534, 565, 532, 584, 559, 435, 374, 0, 0, + 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, + 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, + 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, + 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, + 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, + 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, + 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, + 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, + 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 584, 585, 298, 534, 565, 532, 583, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 0, 0, 372, 514, 515, 314, + 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, + 285, 0, 0, 0, 0, 0, 199, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, + 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, + 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, + 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, + 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, + 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, + 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, + 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, + 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, + 547, 507, 556, 587, 227, 259, 415, 500, 541, 489, + 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, + 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, + 570, 582, 571, 573, 214, 502, 533, 240, 479, 0, + 0, 589, 248, 499, 216, 530, 498, 389, 324, 325, + 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, + 528, 255, 590, 229, 555, 221, 0, 554, 403, 522, + 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, + 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, + 209, 542, 0, 210, 0, 494, 543, 591, 235, 236, + 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, + 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, + 567, 569, 574, 575, 576, 577, 583, 581, 578, 579, + 580, 572, 402, 309, 490, 331, 369, 0, 0, 420, + 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 610, 380, 481, 537, + 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, + 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, + 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, + 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, + 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, + 0, 450, 287, 588, 551, 545, 208, 224, 0, 261, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, + 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, + 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, + 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, + 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, + 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, + 558, 564, 476, 299, 300, 441, 442, 312, 313, 585, + 586, 298, 534, 565, 532, 584, 559, 435, 374, 0, + 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, + 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, + 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, + 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, + 0, 0, 372, 514, 515, 314, } var yyPact = [...]int{ - -1000, -1000, 5362, -1000, -464, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 3813, -1000, -467, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 2265, 2282, -1000, -1000, -1000, -1000, 2519, -1000, - 1237, 1934, -1000, 2249, 4184, -1000, 47520, 606, -1000, 44840, - 601, 600, 145, -78, 134, 30100, -1000, 253, -1000, 246, - 46180, 249, -1000, -1000, -1000, -1000, -322, 18708, 2180, 103, - 100, 47520, -1000, -1000, -1000, -1000, 2487, 1918, -1000, 406, - -1000, -1000, -1000, -1000, -1000, -1000, 44170, -1000, 984, -1000, - -1000, 2263, 2240, 2536, 766, 2192, -1000, 2428, 1918, -1000, - 18708, 2474, 2348, 18038, 18038, 530, -1000, -1000, 335, -1000, - -1000, -1000, 2546, 25410, 47520, -1000, 32780, 382, -1000, 2249, - -1000, -1000, -1000, 127, -1000, 417, 1840, -1000, 1836, -1000, - 857, 637, 461, 552, 547, 457, 441, 440, 438, 437, - 434, 433, 432, 470, -1000, 792, 792, -125, -129, 702, - 529, 512, 512, 1048, 574, 2214, 2212, -1000, -1000, 792, - 792, 792, 488, 792, 792, 792, 792, 389, 385, 792, - 792, 792, 792, 792, 792, 792, 792, 792, 792, 792, - 792, 792, 792, 792, 792, 792, 506, 2249, 367, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 2266, 2426, -1000, -1000, -1000, -1000, 2512, -1000, + 1116, 1983, -1000, 2282, 4544, -1000, 47365, 608, -1000, 44681, + 604, 592, 137, -85, 5057, 29919, -1000, 235, -1000, 226, + 46023, 234, -1000, -1000, -1000, -1000, -324, 18510, 2202, 113, + 109, 47365, -1000, -1000, -1000, -1000, 2469, 1969, -1000, 412, + -1000, -1000, -1000, -1000, -1000, -1000, 44010, -1000, 1006, -1000, + -1000, 2293, 2267, 2522, 768, 2248, -1000, 2409, 1969, -1000, + 18510, 2464, 2342, 17839, 17839, 507, -1000, -1000, 225, -1000, + -1000, -1000, 2532, 25222, 47365, -1000, 32603, 354, -1000, 2282, + -1000, -1000, -1000, 97, -1000, 405, 1891, -1000, 1889, -1000, + 1008, 1057, 443, 559, 540, 440, 437, 435, 433, 432, + 431, 420, 418, 451, -1000, 799, 799, -116, -121, 3210, + 499, 497, 497, 875, 533, 2249, 2231, -1000, -1000, 799, + 799, 799, 458, 799, 799, 799, 799, 353, 350, 799, + 799, 799, 799, 799, 799, 799, 799, 799, 799, 799, + 799, 799, 799, 799, 799, 799, 402, 2282, 337, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -6446,62 +6432,63 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 47520, 254, 47520, -1000, 683, 47520, 47520, -1000, 1193, 1186, - -1000, -1000, 930, -1000, -1000, 930, 112, 930, 930, 930, - 930, 245, 806, 88, -1000, 228, 345, 219, 360, 940, - 410, -1000, -1000, 355, 940, 993, 940, 1646, -1000, 777, - 357, 215, -1000, 930, 930, -1000, -1000, 11983, 173, 11983, - 11983, -1000, 2220, -1000, -1000, -1000, -1000, -1000, 1252, -1000, - -1000, -1000, -1000, -12, 572, -1000, -1000, -1000, -1000, 46180, - 43500, 323, -1000, -1000, 59, -1000, -1000, 1716, 1282, 18708, - 1331, -1000, 1647, 730, -1000, -1000, -1000, -1000, -1000, 666, - -1000, 19378, 19378, 19378, 19378, -1000, -1000, 1361, 42830, 1361, - 1361, 19378, 1361, -1000, 19378, 1361, 1361, 1361, 18708, 1361, - 1361, 1361, 1361, -1000, 1361, 1361, 1361, 1361, 1361, 1361, - 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, - 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, - 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, - 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, - 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, - 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, - 1361, 1361, -1000, -1000, -1000, -1000, 1361, 681, 1361, 1361, - 1361, 1361, 1361, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 1361, 1361, 1361, 1361, 1361, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 1361, 1361, 1361, 1361, 1361, - 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 21388, 1433, 1431, 1429, -1000, 16028, 1361, -1000, -1000, -1000, + -1000, 47365, 248, 47365, -1000, 684, 47365, 47365, -1000, 1289, + 1287, -1000, -1000, 963, -1000, -1000, 963, 125, 963, 963, + 963, 963, 245, 718, 107, -1000, 240, 324, 232, 331, + 923, 257, -1000, -1000, 309, 923, 919, 923, 1749, 1747, + -1000, 773, 329, 230, -1000, 963, 963, -1000, -1000, 11775, + 165, 11775, 11775, -1000, 2279, -1000, -1000, -1000, -1000, -1000, + 1265, -1000, -1000, -1000, -1000, 5, 521, -1000, -1000, -1000, + -1000, 46023, 43339, 295, -1000, -1000, 58, -1000, -1000, 1645, + 1174, 18510, 1261, -1000, 1766, 735, -1000, -1000, -1000, -1000, + -1000, 658, -1000, 19181, 19181, 19181, 19181, -1000, -1000, 1596, + 42668, 1596, 1596, 19181, 1596, -1000, 19181, 1596, 1596, 1596, + 18510, 1596, 1596, 1596, 1596, -1000, 1596, 1596, 1596, 1596, + 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, + 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, + 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, + 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, + 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, + 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, + 1596, 1596, 1596, 1596, -1000, -1000, -1000, -1000, 1596, 681, + 1596, 1596, 1596, 1596, 1596, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 1596, 1596, 1596, 1596, 1596, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1596, 1596, 1596, + 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, + 1596, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 21194, 1487, 1480, 1450, -1000, 15826, 1596, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 47520, -1000, 1361, - 276, 46180, 46180, 409, 2428, 1918, -1000, 2487, 2477, 406, - 3030, 1634, 1443, 1387, 1918, 1825, 47520, -1000, 1846, -1000, - -1000, -1000, -1000, 2065, 1355, 1642, -1000, -1000, -1000, -1000, - 1157, 18708, -1000, -1000, 2516, -1000, 22729, 679, 2515, 42160, - -1000, 530, 530, 1834, 498, 79, -1000, -1000, -1000, -1000, - 822, 29430, -1000, -1000, -1000, -1000, -1000, 1733, 47520, -1000, - -1000, 3807, 1272, -1000, 1933, -1000, 3022, 1711, -1000, 1888, - 18708, 1942, 597, 1272, 586, 585, 580, -1000, -21, -1000, - -1000, -1000, -1000, -1000, -1000, 792, 792, 792, -1000, 469, - 2471, 4184, 4860, -1000, -1000, -1000, 41490, 1932, 1272, -1000, - 1931, -1000, 911, 631, 687, 687, 1272, -1000, -1000, 46850, - 1272, 910, 907, 1272, 1272, 46180, 46180, -1000, 40820, -1000, - 40150, 39480, 1181, 46180, 38810, 38140, 37470, 36800, 36130, -1000, - 2225, -1000, 2051, -1000, -1000, -1000, 46850, 1272, 1272, 46850, - 46180, 46850, 47520, 1272, -1000, -1000, 421, -1000, -1000, 1176, - 1162, 1156, 792, 792, 1151, 1625, 1619, 1611, 792, 792, - 1148, 1609, 31440, 1580, 326, 1147, 1144, 1143, 1310, 1578, - 203, 1573, 1161, 1154, 1127, 46180, 1924, 47520, -1000, 334, - 871, 811, 970, 710, 810, 2249, 2177, 1831, 571, 596, - 1272, 516, 516, 46180, -1000, 14011, -1000, 466, -1000, -1000, - -1000, -1000, 1570, 18708, -1000, 960, 940, 940, -1000, -1000, - -1000, -1000, -1000, -1000, 930, 47520, 960, -1000, -1000, -1000, - 940, 930, 47520, 930, 930, 930, 930, 940, 940, 940, - 930, 47520, 47520, 47520, 47520, 47520, 47520, 47520, 47520, 47520, - 11983, 777, 930, 930, -328, 930, -330, -1000, 1567, -1000, - -1000, 2060, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 47365, + -1000, 1596, 259, 46023, 46023, 384, 2409, 1969, -1000, 2469, + 2457, 412, 2903, 1799, 1462, 1401, 1969, 1873, 47365, -1000, + 1897, -1000, -1000, -1000, -1000, 2143, 1418, 1729, -1000, -1000, + -1000, -1000, 1745, 18510, -1000, -1000, 2506, -1000, 22537, 678, + 2503, 41997, -1000, 507, 507, 1887, 470, 63, -1000, -1000, + -1000, -1000, 824, 29248, -1000, -1000, -1000, -1000, -1000, 1760, + 47365, -1000, -1000, 6857, 1190, -1000, 1976, -1000, 2509, 1743, + -1000, 1934, 18510, 2002, 575, 1190, 561, 553, 552, -1000, + -18, -1000, -1000, -1000, -1000, -1000, -1000, 799, 799, 799, + -1000, 450, 2455, 4544, 4097, -1000, -1000, -1000, 41326, 1975, + 1190, -1000, 1973, -1000, 921, 594, 657, 657, 1190, -1000, + -1000, 46694, 1190, 916, 915, 1190, 1190, 46023, 46023, -1000, + 40655, -1000, 39984, 39313, 1286, 46023, 38642, 37971, 37300, 36629, + 35958, -1000, 2162, -1000, 1990, -1000, -1000, -1000, 46694, 1190, + 1190, 46694, 46023, 46694, 47365, 1190, -1000, -1000, 414, -1000, + -1000, 1285, 1246, 1238, 799, 799, 1237, 1724, 1712, 1696, + 799, 799, 1233, 1688, 31261, 1684, 381, 1231, 1228, 1221, + 1218, 1681, 205, 1657, 1172, 1109, 1214, 46023, 1965, 47365, + -1000, 307, 798, 600, 769, 531, 823, 2282, 2199, 1885, + 520, 573, 1190, 500, 500, 46023, -1000, 13806, -1000, 572, + -1000, -1000, -1000, -1000, 1614, 18510, -1000, 925, 923, 923, + -1000, -1000, -1000, -1000, -1000, -1000, 963, 47365, 925, -1000, + -1000, -1000, 923, 963, 47365, 963, 963, 963, 963, 923, + 923, 923, 963, 47365, 47365, 47365, 47365, 47365, 47365, 47365, + 47365, 47365, 11775, 773, 963, 963, -332, 963, 236, -335, + -1000, 1609, -1000, -1000, 2103, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -6517,292 +6504,292 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 11983, 11983, -1000, -1000, -1000, -1000, - -1000, 1830, -1000, 242, 50, 247, -1000, 35460, 423, 807, - -1000, 423, -1000, -1000, -1000, 1829, 34790, -1000, -333, -335, - -363, -377, -1000, -1000, -1000, -1000, -379, -380, -1000, -1000, - -1000, 18708, 18708, 18708, 18708, -156, -1000, 1284, 19378, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 230, 1009, 19378, 19378, - 19378, 19378, 19378, 19378, 19378, 19378, 19378, 19378, 19378, 19378, - 19378, 19378, 19378, -1000, -1000, 27420, 8111, 8111, 730, 730, - 730, 730, -1000, -87, 1828, 46850, -1000, -1000, -1000, 678, - 18708, 18708, 730, -1000, 1272, 16028, 20048, 18038, 18038, 18708, - 845, 1282, 46850, 18708, -1000, 1387, -1000, -1000, -1000, 1115, - -1000, 951, 2227, 2227, 2227, 2227, 18708, 18708, 18708, 18708, - 18708, 18708, 18708, 18708, 18708, 18708, 2227, 46180, 46180, 929, - 18708, 18708, 18708, 18708, 18708, 18708, 14687, 18708, 18708, 19378, - 18708, 18708, 18708, 1387, 18708, 18708, 18708, 18708, 18708, 18708, - 18708, 18708, 18708, 18708, 18708, 18708, 18708, 18708, 18708, 18708, - 18708, 18708, 18708, 18708, 18708, 18708, 18708, 18708, 18708, 18708, - 18708, 1387, 18708, 1159, 18708, 18708, 18038, 13335, 18038, 18038, - 18038, 18038, 18038, -1000, -1000, -1000, -1000, -1000, 18708, 18708, - 18708, 18708, 18708, 18708, 18708, 18708, 1387, 18708, 18708, 18708, - 18708, 18708, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 1501, 1484, 1386, 18708, -1000, 1827, -1000, -98, - 24740, 18708, 1542, 1539, 2512, 1961, 46180, -1000, -1000, -1000, - 2428, -1000, 2428, 1501, 2105, 18038, -1000, -1000, 3022, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1618, -1000, 47520, - 1825, 2329, 46180, 2100, 1534, 388, -1000, 18708, 18708, 1823, - -1000, 1476, 47520, -1000, -156, -1000, 34120, -1000, -1000, 11307, - 47520, 416, 47520, -1000, 24070, 33450, 368, -1000, 79, 1779, - -1000, 56, 40, 15357, 729, -1000, -1000, -1000, 702, 20718, - 1670, 729, 179, -1000, -1000, -1000, 1888, -1000, 1888, 1888, - 1888, 1888, 388, 388, 388, 388, -1000, -1000, -1000, -1000, - -1000, 1923, 1920, -1000, 1888, 1888, 1888, 1888, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 11775, 11775, -1000, + -1000, -1000, -1000, -1000, 1884, -1000, 221, 77, 233, -1000, + 35287, 416, 821, -1000, 416, -1000, -1000, -1000, 1881, 34616, + -1000, -336, -341, -376, -377, -1000, -1000, -1000, -1000, -378, + -381, -1000, -1000, -1000, 18510, 18510, 18510, 18510, -146, -1000, + 1185, 19181, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 162, + 1011, 19181, 19181, 19181, 19181, 19181, 19181, 19181, 19181, 19181, + 19181, 19181, 19181, 19181, 19181, 19181, -1000, -1000, 27235, 8189, + 8189, 735, 735, 735, 735, -1000, -84, 1878, 46694, -1000, + -1000, -1000, 677, 18510, 18510, 735, -1000, 1190, 15826, 19852, + 17839, 17839, 18510, 838, 1174, 46694, 18510, -1000, 1401, -1000, + -1000, -1000, 1189, -1000, 945, 2245, 2245, 2245, 2245, 18510, + 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, 2245, + 46023, 46023, 772, 18510, 18510, 18510, 18510, 18510, 18510, 14483, + 18510, 18510, 19181, 18510, 18510, 18510, 1401, 18510, 18510, 18510, + 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, + 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, + 18510, 18510, 18510, 18510, 1401, 18510, 1161, 18510, 18510, 17839, + 13129, 17839, 17839, 17839, 17839, 17839, -1000, -1000, -1000, -1000, + -1000, 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, 1401, + 18510, 18510, 18510, 18510, 18510, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 1483, 1501, 1421, 18510, -1000, + 1874, -1000, -67, 24551, 18510, 1600, 1595, 2502, 2032, 46023, + -1000, -1000, -1000, 2409, -1000, 2409, 1483, 2057, 17839, -1000, + -1000, 2509, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 1720, -1000, 47365, 1873, 2328, 46023, 2145, 1588, 408, -1000, + 18510, 18510, 1870, -1000, 1427, 47365, -1000, -146, -1000, 33945, + -1000, -1000, 11098, 47365, 413, 47365, -1000, 23880, 33274, 229, + -1000, 63, 1820, -1000, 81, 28, 15154, 732, -1000, -1000, + -1000, 3210, 20523, 1579, 732, 153, -1000, -1000, -1000, 1934, + -1000, 1934, 1934, 1934, 1934, 408, 408, 408, 408, -1000, + -1000, -1000, -1000, -1000, 1960, 1956, -1000, 1934, 1934, 1934, + 1934, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1955, 1955, + 1955, 1952, 1952, 1936, 1936, 490, -1000, 18510, -1000, -1000, + 323, 32603, 2310, 1213, 1209, 307, 502, 2030, 1190, 1190, + 1190, 502, -1000, 1387, 1385, 1361, -1000, -456, 1867, -1000, + -1000, 2452, -1000, -1000, 1099, 962, 959, 889, 46023, 263, + 383, -1000, 481, -1000, 32603, 1190, 909, 657, 1190, -1000, + 1190, -1000, -1000, -1000, -1000, -1000, 1190, -1000, -1000, 1854, + -1000, 1868, 1032, 957, 1000, 947, 1854, -1000, -1000, -89, + 1854, -1000, 1854, -1000, 1854, -1000, 1854, -1000, 1854, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 818, 252, + -225, 46023, 263, 519, -1000, 518, 27235, -1000, -1000, -1000, + 27235, 27235, -1000, -1000, -1000, -1000, 1586, 1583, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 1903, 1903, 1903, 1902, 1902, - 1892, 1892, 500, -1000, 18708, -1000, -1000, 317, 32780, 2280, - 1125, 1749, 334, 526, 1948, 1272, 1272, 1272, 526, -1000, - 1302, 1275, 1260, -1000, -448, 1804, -1000, -1000, 2469, -1000, - -1000, 948, 932, 924, 832, 46180, 277, 405, -1000, 509, - -1000, 32780, 1272, 906, 687, 1272, -1000, 1272, -1000, -1000, - -1000, -1000, -1000, 1272, -1000, -1000, 1797, -1000, 1771, 1007, - 894, 973, 891, 1797, -1000, -1000, -101, 1797, -1000, 1797, - -1000, 1797, -1000, 1797, -1000, 1797, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 823, 244, -227, 46180, 277, - 546, -1000, 545, 27420, -1000, -1000, -1000, 27420, 27420, -1000, - -1000, -1000, -1000, 1524, 1511, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -441, 47365, -1000, + 306, 814, 372, 422, 344, 47365, 364, 2403, 2399, 2391, + 2390, 2389, 2387, 2385, 419, 2372, 2366, 2364, 2362, 2360, + 2359, 299, 2358, 2353, 2351, 2347, 2346, 2345, 2320, 289, + 348, 47365, 47365, 500, 2096, 47365, 2308, 47365, -1000, -1000, + -1000, -1000, 491, 47365, -1000, 333, -1000, -1000, -1000, -1000, + -1000, -1000, 1174, 47365, -1000, -1000, 963, 963, -1000, -1000, + 47365, 963, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 963, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -437, 47520, -1000, 302, 805, 395, - 454, 377, 47520, 697, 2422, 2418, 2406, 2405, 2404, 2399, - 2397, 344, 2396, 2393, 2390, 2388, 2386, 2385, 331, 2383, - 2373, 2350, 2344, 2341, 2335, 2332, 372, 383, 47520, 47520, - 516, 2049, 47520, 2305, 47520, -1000, -1000, -1000, -1000, 429, - 47520, -1000, 362, -1000, -1000, -1000, -1000, -1000, -1000, 1282, - 47520, -1000, -1000, 930, 930, -1000, -1000, 47520, 930, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 930, -1000, -1000, + 47365, -1000, -1000, -1000, -1000, 5, 219, -1000, -1000, 46023, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -39, + -1000, 130, 73, 399, -1000, -1000, -1000, -1000, -1000, 2405, + -1000, 1174, 907, 868, -1000, 1596, -1000, -1000, 1055, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 162, 19181, 19181, 19181, + 1780, 562, 1074, 1227, 849, 932, 932, 899, 899, 746, + 746, 746, 746, 746, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 1573, -1000, 1596, 46694, 1728, 13129, 1467, 1503, + 1401, 2953, -1000, 1723, -1000, 1723, 1322, 834, -1000, 18510, + 1401, 2939, -1000, -1000, 1401, 1401, 1401, 18510, -1000, -1000, + 18510, 18510, 18510, 18510, 1209, 1209, 1209, 1209, 1209, 1209, + 1209, 1209, 1209, 1209, 18510, 1835, 1831, 2501, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 47520, -1000, -1000, -1000, - -1000, -12, 209, -1000, -1000, 46180, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -42, -1000, 82, 48, 397, - -1000, -1000, -1000, -1000, -1000, 2382, -1000, 1282, 884, 873, - -1000, 1361, -1000, -1000, 1110, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 230, 19378, 19378, 19378, 1736, 567, 1774, 1289, - 1165, 1243, 1243, 1133, 1133, 734, 734, 734, 734, 734, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1509, -1000, - 1361, 46850, 1693, 13335, 2375, 1832, 1387, 2889, -1000, 1679, - -1000, 1679, 1754, 844, -1000, 18708, 1387, 2885, -1000, -1000, - 1387, 1387, 1387, 18708, -1000, -1000, 18708, 18708, 18708, 18708, - 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, - 18708, 1796, 1795, 2510, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1282, + 1209, 1209, 1209, 1209, 1209, 18510, 1561, -1000, -1000, -1000, + 1409, 2913, 1391, 2898, 1209, 1209, -1000, 1209, 2891, 2887, + 1401, 1645, 1401, 1828, -1000, 2876, 1209, 2871, 2867, 2841, + 2086, 2805, 2769, 2759, 1209, 1209, 1209, 2081, 2755, 2740, + 2735, 2719, 2608, 2587, 2520, 2418, 2398, 1209, -149, 1209, + 1401, -1000, -1000, -1000, -1000, -1000, 2381, 2065, 1401, 1827, + 1596, 673, -1000, -1000, 1723, 1401, 1401, 1723, 1723, 2356, + 2341, 2329, 2322, 2318, 2307, 1209, 1209, -1000, 1209, 2301, + 2277, 2054, 2050, 1401, -1000, 1421, 47365, -1000, -319, -1000, + 33, 672, 1596, -1000, 31261, 1401, -1000, -1000, 7203, -1000, + 1015, -1000, -1000, -1000, 28577, 1785, 2509, -1000, -1000, 1596, + 1717, -1000, -1000, 408, 131, 27906, 716, 716, 163, 1174, + 1174, 18510, -1000, -1000, -1000, -1000, -1000, -1000, 670, 2483, + 424, 1596, -1000, 1866, 2288, -1000, -1000, -1000, 2326, 21866, + -1000, -1000, 1596, 1596, 47365, 1784, 1680, -1000, 669, -1000, + 1232, 1820, 63, 69, -1000, -1000, -1000, -1000, 1174, -1000, + 1359, 417, 719, -1000, 487, -1000, -1000, -1000, -1000, 2218, + 140, -1000, -1000, -1000, 276, 408, -1000, -1000, -1000, -1000, + -1000, -1000, 1567, 1567, -1000, -1000, -1000, -1000, -1000, 1199, + -1000, -1000, -1000, -1000, 1195, -1000, -1000, 1194, -1000, -1000, + 2111, 2043, 323, -1000, -1000, 799, 1558, -1000, -1000, 2223, + 799, 799, 46023, -1000, -1000, 1536, 2310, 306, 47365, 845, + 2090, -1000, 2030, 2030, 2030, 47365, -1000, -1000, -1000, -1000, + -1000, -1000, -443, 78, 442, -1000, -1000, -1000, 338, 46023, + 1709, -1000, 258, -1000, 1531, -1000, 46023, -1000, 1707, 1949, + 1190, 1190, -1000, -1000, -1000, 46023, 1596, -1000, -1000, -1000, + -1000, 571, 2278, 320, -1000, -1000, -174, -1000, -1000, 263, + 258, 46694, 1190, 732, -1000, -1000, -1000, -1000, -1000, -444, + 1703, 541, 282, 359, 47365, 47365, 47365, 47365, 47365, 647, + -1000, -1000, 98, -1000, -1000, -1000, -1000, 249, -1000, -1000, + -1000, -1000, -1000, -1000, 249, -1000, -1000, -1000, -1000, -1000, + 249, -1000, -1000, -1000, -1000, -1000, 249, -1000, -1000, -1000, + 96, -1000, -1000, -1000, -1000, 249, -1000, -1000, -1000, -1000, + -1000, -1000, 249, -1000, -1000, -1000, -1000, 340, 511, -1000, + 47365, 47365, 699, -1000, -1000, -1000, -1000, -1000, -1000, 923, + -1000, -1000, 923, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 2269, 47365, 70, -402, -1000, + -399, 18510, -1000, -1000, -1000, -1000, 1196, 558, 1074, 19181, + 19181, 19181, -1000, -1000, -1000, 480, 480, 27235, -1000, 18510, + 17839, -1000, -1000, 18510, 18510, 830, -1000, 18510, 1128, -1000, + 18510, -1000, -1000, -1000, 1421, 1209, 1209, 1209, 1209, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1826, + 18510, 18510, 18510, 1401, 363, -1000, -1000, -1000, -1000, -1000, + 2499, -1000, 18510, -1000, 27235, 18510, 18510, 18510, -1000, -1000, + -1000, 18510, 18510, -1000, -1000, 18510, 18510, -1000, 18510, 18510, + 18510, -1000, 18510, 18510, 18510, 18510, -1000, -1000, -1000, -1000, + 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, + -1000, -1000, 32603, 110, -149, 1161, 110, 1161, -1000, 17839, + 12452, -1000, -1000, -1000, -1000, -1000, 18510, 18510, 18510, 18510, + 18510, 18510, -1000, -1000, -1000, 18510, 18510, -1000, 18510, -1000, + 18510, -1000, -1000, -1000, -1000, -1000, 672, -1000, 657, 657, + 657, 46023, -1000, -1000, -1000, -1000, 1819, -1000, 2349, -1000, + 2160, 2158, 2489, 2483, -1000, 23880, 2509, -1000, -1000, 46023, + -297, -1000, 2193, 2216, 716, 716, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 10421, 2409, 18510, 2089, 46694, 157, -1000, + 23209, 46023, 46694, 23880, 23880, 23880, 23880, 23880, -1000, 2130, + 2123, -1000, 2142, 2131, 2117, 47365, -1000, 1483, 1701, -1000, + 18510, 25893, 1807, 23880, -1000, -1000, 23880, 47365, 9744, -1000, + -1000, 38, 20, -1000, -1000, -1000, -1000, 3210, -1000, -1000, + 1781, 2325, 2204, -1000, -1000, -1000, -1000, -1000, 1672, -1000, + 1668, 1817, 1648, 1623, 252, -1000, 2000, 2268, 799, 799, + -1000, 1192, -1000, 1190, 1538, 1527, -1000, -1000, -1000, 536, + -1000, 2303, 47365, 2084, 2083, 2079, -1000, -455, 1183, 1942, + 1997, 18510, 1941, 2446, 1801, 46023, -1000, -1000, 46694, -1000, + 305, -1000, 323, 46023, -1000, -1000, -1000, 383, 47365, -1000, + 8018, -1000, -1000, -1000, 258, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 47365, 279, -1000, 1937, 1120, -1000, -1000, 2008, + -1000, -1000, -1000, -1000, 254, 358, 1515, 241, 1509, 241, + 241, 241, 1499, 241, 241, -1000, 47365, 599, 2043, 47365, + -1000, -1000, -1000, 963, 963, -1000, -1000, 2253, -1000, 1190, + 1209, 19181, 19181, -1000, 735, 304, -127, 1934, 1934, -1000, + 1934, 1936, -1000, 1934, 208, 1934, 207, 1934, -1000, -1000, + 1401, 1401, 1421, -1000, 2040, 1318, -1000, 1174, 18510, 2262, + -1000, -1000, -1000, -1000, -1000, -25, 2252, 2167, 1209, -1000, + 1932, 1931, 18510, 1209, 1401, 2016, 1209, 1209, 1209, 1209, + -1000, 1174, 1421, 2141, 1421, 1209, 1209, 2136, 339, 1209, + 1621, 1621, 1621, 1621, 1621, 1421, 1421, 1421, 1421, 46023, + -1000, -149, -1000, -1000, -194, -195, -1000, 1401, -149, 1803, + 1401, -1000, 2005, 1961, 2097, 1875, 1209, 2023, 1209, 1209, + 1209, 1871, -1000, 2382, 2382, 2382, 1572, 1015, 47365, -1000, + -1000, -1000, -1000, 2483, 2479, 1802, -1000, -1000, 131, 476, + -1000, 2201, 2216, -1000, 2438, 2187, 2435, -1000, -1000, -1000, + -1000, -1000, 1174, -1000, 2285, 1806, -1000, 809, 1674, -1000, + -1000, 17168, 1578, 2153, 665, 1572, 1853, 2288, 2045, 2075, + 3031, -1000, -1000, -1000, -1000, 2121, -1000, 2053, -1000, -1000, + 1897, -1000, 1643, 413, 23880, 1777, 1777, -1000, 663, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 972, 7607, 2518, -1000, + 1497, -1000, 1357, 202, 1168, -1000, -1000, 799, 799, -1000, + 895, 892, -1000, 47365, 1928, -1000, 408, 1489, 408, 1165, + -1000, -1000, 1163, -1000, -1000, -1000, -1000, 1908, 2055, -1000, + -1000, -1000, -1000, 47365, -1000, -1000, 47365, 47365, 47365, 1924, + 2433, -1000, 18510, 1920, 802, 2060, 46023, 46023, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 504, + 799, -420, 346, 343, 799, 799, 799, -461, -1000, -1000, + 1563, 1552, -1000, -113, -1000, 18510, -1000, -1000, -1000, 1223, + 1223, 1487, 1480, 1450, -1000, 1897, -1000, -1000, -1000, 1504, + -1000, -1000, -94, 46023, 46023, 46023, 46023, -1000, -1000, 1013, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 1537, 1749, 1749, 1749, 1749, - 1749, 18708, 1654, -1000, -1000, -1000, 1329, 2872, 1388, 2865, - 1749, 1749, -1000, 1749, 2833, 2757, 1387, 1716, 1387, 1787, - -1000, 2753, 1749, 2746, 2736, 2726, 2097, 2697, 2587, 2583, - 1749, 1749, 1749, 2078, 2557, 2520, 2472, 2457, 2432, 2411, - 2395, 2387, 2380, 1749, -158, 1749, 1387, -1000, -1000, -1000, - -1000, -1000, 2363, 2054, 1387, 1786, 1361, 677, -1000, -1000, - 1679, 1387, 1387, 1679, 1679, 2339, 2325, 2318, 2314, 2306, - 2283, 1749, 1749, -1000, 1749, 2247, 2236, 2036, 2030, 1387, - -1000, 1386, 47520, -1000, -320, -1000, 26, 707, 1361, -1000, - 31440, 1387, -1000, -1000, 7683, -1000, 1203, -1000, -1000, -1000, - 28760, 1518, 3022, -1000, -1000, 1361, 1674, -1000, -1000, 388, - 124, 28090, 675, 675, 187, 1282, 1282, 18708, -1000, -1000, - -1000, -1000, -1000, -1000, 663, 2495, 396, 1361, -1000, 1738, - 2370, -1000, -1000, -1000, 2328, 22059, -1000, -1000, 1361, 1361, - 47520, 1768, 1677, -1000, 659, -1000, 1276, 1779, 79, 44, - -1000, -1000, -1000, -1000, 1282, -1000, 1257, 420, 329, -1000, - 492, -1000, -1000, -1000, -1000, 2204, 126, -1000, -1000, -1000, - 259, 388, -1000, -1000, -1000, -1000, -1000, -1000, 1504, 1504, - -1000, -1000, -1000, -1000, -1000, 1120, -1000, -1000, -1000, -1000, - 1114, -1000, -1000, 1109, -1000, -1000, 2251, 2022, 317, -1000, - -1000, 792, 1496, -1000, -1000, 2206, 792, 792, 46180, -1000, - -1000, 1663, 2280, 302, 47520, 814, 2040, -1000, 1948, 1948, - 1948, 47520, -1000, -1000, -1000, -1000, -1000, -1000, -449, 78, - 428, -1000, -1000, -1000, 4339, 46180, 1659, -1000, 280, -1000, - 1655, -1000, 46180, -1000, 1629, 1901, 1272, 1272, -1000, -1000, - -1000, 46180, 1361, -1000, -1000, -1000, -1000, 594, 2245, 303, - -1000, -1000, -177, -1000, -1000, 277, 280, 46850, 1272, 729, - -1000, -1000, -1000, -1000, -1000, -441, 1617, 578, 294, 352, - 47520, 47520, 47520, 47520, 47520, 619, -1000, -1000, 75, -1000, - -1000, -1000, -1000, 269, -1000, -1000, -1000, -1000, -1000, -1000, - 269, -1000, -1000, -1000, -1000, -1000, 269, -1000, -1000, -1000, - -1000, -1000, 269, -1000, -1000, -1000, 72, -1000, -1000, -1000, - -1000, 269, -1000, -1000, -1000, -1000, -1000, -1000, 269, -1000, - -1000, -1000, -1000, 375, 538, -1000, 47520, 47520, 680, -1000, - -1000, -1000, -1000, -1000, -1000, 940, -1000, -1000, 940, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 2239, 47520, 43, -404, -1000, -401, 18708, -1000, -1000, - -1000, -1000, 1145, 565, 1774, 19378, 19378, 19378, -1000, -1000, - -1000, 881, 881, 27420, -1000, 18708, 18038, -1000, -1000, 18708, - 18708, 824, -1000, 18708, 1360, -1000, 18708, -1000, -1000, -1000, - 1386, 1749, 1749, 1749, 1749, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 1770, 18708, 18708, 18708, 1387, - 386, -1000, -1000, -1000, -1000, -1000, 2508, -1000, 18708, -1000, - 27420, 18708, 18708, 18708, -1000, -1000, -1000, 18708, 18708, -1000, - -1000, 18708, 18708, -1000, 18708, 18708, 18708, -1000, 18708, 18708, - 18708, 18708, -1000, -1000, -1000, -1000, 18708, 18708, 18708, 18708, - 18708, 18708, 18708, 18708, 18708, 18708, -1000, -1000, 32780, 107, - -158, 1159, 107, 1159, -1000, 18038, 12659, -1000, -1000, -1000, - -1000, -1000, 18708, 18708, 18708, 18708, 18708, 18708, -1000, -1000, - -1000, 18708, 18708, -1000, 18708, -1000, 18708, -1000, -1000, -1000, - -1000, -1000, 707, -1000, 687, 687, 687, 46180, -1000, -1000, - -1000, -1000, 1769, -1000, 2381, -1000, 2123, 2121, 2503, 2495, - -1000, 24070, 3022, -1000, -1000, 46180, -283, -1000, 2147, 2185, - 675, 675, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 10631, - 2428, 18708, 2039, 46850, 160, -1000, 23400, 46180, 46850, 24070, - 24070, 24070, 24070, 24070, -1000, 2088, 2079, -1000, 2086, 2080, - 2161, 47520, -1000, 1501, 1602, -1000, 18708, 26080, 1706, 24070, - -1000, -1000, 24070, 47520, 9955, -1000, -1000, 32, 21, -1000, - -1000, -1000, -1000, 702, -1000, -1000, 1793, 2324, 2190, -1000, - -1000, -1000, -1000, -1000, 1585, -1000, 1577, 1766, 1563, 1555, - 244, -1000, 1941, 2231, 792, 792, -1000, 1104, -1000, 1272, - 1488, 1486, -1000, -1000, -1000, 531, -1000, 2294, 47520, 2023, - 2013, 2001, -1000, -456, 1096, 1900, 1780, 18708, 1898, 2468, - 1746, 46180, -1000, -1000, 46850, -1000, 174, -1000, 317, 46180, - -1000, -1000, -1000, 405, 47520, -1000, 7037, -1000, -1000, -1000, - 280, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 47520, 327, - -1000, 1893, 1227, -1000, -1000, 1874, -1000, -1000, -1000, -1000, - 235, 394, 1472, 264, 1454, 264, 264, 264, 1450, 264, - 264, -1000, 47520, 673, 2022, 47520, -1000, -1000, -1000, 930, - 930, -1000, -1000, 2226, -1000, 1272, 1749, 19378, 19378, -1000, - 730, 435, -138, 1888, 1888, -1000, 1888, 1892, -1000, 1888, - 234, 1888, 231, 1888, -1000, -1000, 1387, 1387, 1386, -1000, - 2018, 1204, -1000, 1282, 18708, 2219, -1000, -1000, -1000, -1000, - -1000, -27, 2210, 2203, 1749, -1000, 1878, 1871, 18708, 1749, - 1387, 2009, 1749, 1749, 1749, 1749, -1000, 1282, 1386, 2197, - 1386, 1749, 1749, 2141, 349, 1749, 1548, 1548, 1548, 1548, - 1548, 1386, 1386, 1386, 1386, 46180, -1000, -158, -1000, -1000, - -197, -199, -1000, 1387, -158, 1753, 1387, -1000, 1999, 1928, - 2128, 1873, 1749, 2117, 1749, 1749, 1749, 1784, -1000, 2340, - 2340, 2340, 1522, 1203, 47520, -1000, -1000, -1000, -1000, 2495, - 2491, 1751, -1000, -1000, 124, 481, -1000, 2142, 2185, -1000, - 2464, 2149, 2459, -1000, -1000, -1000, -1000, -1000, 1282, -1000, - 2248, 1687, -1000, 794, 1735, -1000, -1000, 17368, 1531, 2118, - 651, 1522, 1775, 2370, 1958, 1996, 2965, -1000, -1000, -1000, - -1000, 2064, -1000, 2032, -1000, -1000, 1846, -1000, 2061, 416, - 24070, 1741, 1741, -1000, 634, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 962, 6027, 2531, -1000, 1437, -1000, 1235, 208, - 1091, -1000, -1000, 792, 792, -1000, 890, 876, -1000, 47520, - 1870, -1000, 388, 1435, 388, 1077, -1000, -1000, 1041, -1000, - -1000, -1000, -1000, 1865, 2000, -1000, -1000, -1000, -1000, 47520, - -1000, -1000, 47520, 47520, 47520, 1866, 2454, -1000, 18708, 1864, - 793, 2085, 46180, 46180, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 522, 792, -421, 378, 373, - 792, 792, 792, -457, -1000, -1000, 1494, 1481, -1000, -126, - -1000, 18708, -1000, -1000, -1000, 1225, 1225, 1433, 1431, 1429, - -1000, 1846, -1000, -1000, -1000, 1635, -1000, -1000, -112, 46180, - 46180, 46180, 46180, -1000, -1000, 1101, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 730, 1387, 351, -117, 1387, -1000, -1000, - 388, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 18708, -1000, 18708, -1000, 1282, 18708, 2428, 1421, 18708, - 18708, -1000, 1035, 1031, 1749, -1000, -1000, -1000, 18708, -1000, - -1000, -1000, -1000, -1000, 18708, -1000, -1000, -1000, 18708, 281, - 881, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 1387, 411, -1000, -1000, -1000, -1000, 2500, -1000, 1387, - 18708, -1000, -1000, 18708, -1000, 18708, 18708, -1000, 18708, -1000, - 18708, -1000, -1000, -1000, -1000, 18708, 1361, 2137, 1361, 1361, - 26080, -1000, -1000, 2491, 2485, 2453, 2134, 2144, 2144, 2142, - -1000, 2452, 2450, -1000, 1416, 2449, 1379, 862, -1000, 46850, - 18708, 160, -1000, 393, 46180, 160, 46180, -1000, 2433, -1000, - -1000, 18708, 1848, -1000, 18708, -1000, -1000, -1000, -1000, 8111, - 2495, 1741, -1000, -1000, 743, -1000, 18708, -1000, -1000, -1000, - 7479, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1377, - 1375, -1000, -1000, 1847, 18708, -1000, -1000, -1000, 1593, 1556, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1846, -1000, - -1000, -1000, -1000, 405, -451, 2050, 46180, 1014, -1000, 1478, - 1746, 399, 160, 1359, 792, 792, 792, 1003, 995, 31440, - 1458, -1000, 46180, 446, -1000, 405, -1000, -131, -132, 1749, - -1000, -1000, 2321, -1000, -1000, 12659, -1000, -1000, 1844, 1882, - -1000, -1000, -1000, -1000, 2099, -99, -120, -1000, -1000, 1749, - 1749, 1972, 1387, -1000, 1749, 1749, 1495, 1485, -1000, 1749, - 1386, 1631, -1000, 281, 1387, 1991, -1000, -1000, 8111, -1000, - -1000, 2433, 2442, 107, -1000, -1000, 290, 107, 1282, 1600, - 1749, 1596, 1592, 1749, 1749, 26750, -1000, 2434, 2391, 32110, - 32110, 707, 2485, -165, 18708, 18708, 2132, 1090, -1000, -1000, - -1000, -1000, 1354, 1338, -1000, 1330, -1000, 2526, -1000, 1282, - -1000, 160, -1000, 626, 1735, -1000, 2428, 1282, 46180, 1282, - 120, 2433, -1000, 1749, -1000, 1361, 1361, 1361, 1361, 1361, - 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, - 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, - 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, - 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, - 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, - 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, - 1361, 1361, 1361, 1361, 1361, -1000, -1000, 46180, 2041, -1000, - -1000, 2320, 1448, 77, -1000, 1482, 1746, -1000, -1000, 157, - -1000, 18708, -1000, 31440, 1312, 1307, -1000, -1000, -1000, -1000, - -457, -1000, -1000, -1000, -1000, -1000, -1000, 406, 1742, -1000, - 789, 46180, 47520, -1000, 2098, -1000, -1000, -1000, 18708, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 18708, -1000, 1387, - 1982, -1000, -290, -1000, -420, 18708, -158, -1000, -1000, -158, - -1000, 18708, -1000, -1000, 18708, -1000, 18708, -1000, -1000, 1425, - -1000, -1000, -1000, -1000, -1000, 1425, 1425, -1000, -165, -1000, - 1739, -1000, 46180, 1282, 1716, -1000, 1056, -1000, -1000, -1000, - -1000, -1000, 46850, 1735, 46180, -1000, 1409, 1387, 1361, 2428, - -1000, 1405, -1000, 406, -1000, 1794, 1780, -1000, -1000, -1000, - 16698, -1000, -1000, -1000, -1000, -1000, 205, -108, 12659, 9279, - 1402, -1000, -103, 1749, 1386, -1000, -386, -1000, -1000, -1000, - -1000, 224, -1000, -1000, 1716, -1000, -1000, 1561, 1520, 1499, - 30770, -1000, -1000, -1000, -1000, -165, -1000, -1000, 2315, -1000, - -1000, 1709, -1000, -1000, 26080, 45510, -1000, -82, 338, -108, - 18708, 1737, 1387, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 41, -1000, -1000, -1000, -1000, -1000, 1874, -118, -1000, - -1000, -1000, 266, -411, -206, -211, -1000, -1000, 19378, -1000, - 18708, -1000, 18708, -1000, 18708, -1000, -1000, -1000, 46180, 1361, - -1000, 1383, -1000, 4700, -216, 1971, -1000, -34, -1000, -1000, - -1000, 961, 1305, -1000, -1000, -1000, -1000, -1000, -1000, 1867, - 46180, -1000, 499, -1000, -1000, -112, -122, 870, -1000, -1000, - -1000, -1000, -1000, 1492, 1126, 1749, -1000, 46180, -1000, 45510, - -209, 729, 8111, -1000, 1969, 1966, 2499, -1000, -1000, -1000, - -1000, -1000, -1000, -460, 1358, 305, -1000, -1000, 266, -1000, - 18708, -1000, 18708, -1000, 1387, -1000, -1000, 2275, 120, -1000, - 2525, -1000, 2521, 815, 815, -1000, 974, -460, -1000, -1000, - 1749, 1749, -1000, -223, -1000, -1000, -1000, -1000, -1000, 496, - 1037, -1000, -1000, -1000, -1000, -1000, 8111, -1000, -1000, -1000, - 265, 265, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 735, 1401, 366, + -100, 1401, -1000, -1000, 408, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 18510, -1000, 18510, -1000, 1174, + 18510, 2409, 1435, 18510, 18510, -1000, 1112, 1106, 1209, -1000, + -1000, -1000, 18510, -1000, -1000, -1000, -1000, -1000, 18510, -1000, + -1000, -1000, 18510, 215, 480, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 1401, 404, -1000, -1000, -1000, + -1000, 2485, -1000, 1401, 18510, -1000, -1000, 18510, -1000, 18510, + 18510, -1000, 18510, -1000, 18510, -1000, -1000, -1000, -1000, 18510, + 1596, 2159, 1596, 1596, 25893, -1000, -1000, 2479, 2472, 2432, + 2180, 2182, 2182, 2201, -1000, 2431, 2430, -1000, 1433, 2421, + 1424, 890, -1000, 46694, 18510, 157, -1000, 421, 46023, 157, + 46023, -1000, 2470, -1000, -1000, 18510, 1919, -1000, 18510, -1000, + -1000, -1000, -1000, 8189, 2483, 1777, -1000, -1000, 760, -1000, + 18510, -1000, -1000, -1000, 7015, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 1411, 1404, -1000, -1000, 1907, 18510, -1000, + -1000, -1000, 1496, 1461, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 1897, -1000, -1000, -1000, -1000, 383, -451, 1762, + 46023, 1105, -1000, 1550, 1801, 376, 157, 1396, 799, 799, + 799, 1094, 1092, 31261, 1535, -1000, 46023, 467, -1000, 383, + -1000, -122, -124, 1209, -1000, -1000, 2323, -1000, -1000, 12452, + -1000, -1000, 1895, 2014, -1000, -1000, -1000, -1000, 2100, -87, + -108, -1000, -1000, 1209, 1209, 1631, 1401, -1000, 1209, 1209, + 1456, 1441, -1000, 1209, 1421, 1771, -1000, 215, 1401, 2074, + -1000, -1000, 8189, -1000, -1000, 2470, 2413, 110, -1000, -1000, + 273, 110, 1174, 1603, 1209, 1593, 1530, 1209, 1209, 26564, + -1000, 2412, 2411, 31932, 31932, 672, 2472, -157, 18510, 18510, + 2176, 1063, -1000, -1000, -1000, -1000, 1390, 1376, -1000, 1368, + -1000, 2517, -1000, 1174, -1000, 157, -1000, 662, 1674, -1000, + 2409, 1174, 46023, 1174, 139, 2470, -1000, 1209, -1000, 1596, + 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, + 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, + 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, + 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, + 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, + 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, + 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, -1000, + -1000, 46023, 1739, -1000, -1000, 2321, 1485, 75, -1000, 1428, + 1801, -1000, -1000, 155, -1000, 18510, -1000, 31261, 1340, 1337, + -1000, -1000, -1000, -1000, -461, -1000, -1000, -1000, -1000, -1000, + -1000, 412, 1783, -1000, 797, 46023, 47365, -1000, 2068, -1000, + -1000, -1000, 18510, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 18510, -1000, 1401, 2073, -1000, -272, -1000, -423, 18510, + -149, -1000, -1000, -149, -1000, 18510, -1000, -1000, 18510, -1000, + 18510, -1000, -1000, 1460, -1000, -1000, -1000, -1000, -1000, 1460, + 1460, -1000, -157, -1000, 1782, -1000, 46023, 1174, 1645, -1000, + 1035, -1000, -1000, -1000, -1000, -1000, 46694, 1674, 46023, -1000, + 1455, 1401, 1596, 2409, -1000, 1440, -1000, 412, -1000, 1893, + 1997, -1000, -1000, -1000, 16497, -1000, -1000, -1000, -1000, -1000, + 214, -91, 12452, 9067, 1423, -1000, -90, 1209, 1421, -1000, + -385, -1000, -1000, -1000, -1000, 239, -1000, -1000, 1645, -1000, + -1000, 1523, 1514, 1495, 30590, -1000, -1000, -1000, -1000, -157, + -1000, -1000, 2317, -1000, -1000, 1625, -1000, -1000, 25893, 45352, + -1000, -80, 260, -91, 18510, 1767, 1401, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 22, -1000, -1000, -1000, -1000, + -1000, 2008, -103, -1000, -1000, -1000, 142, -406, -198, -199, + -1000, -1000, 19181, -1000, 18510, -1000, 18510, -1000, 18510, -1000, + -1000, -1000, 46023, 1596, -1000, 1417, -1000, 5912, -215, 2064, + -1000, -9, -1000, -1000, -1000, 940, 1335, -1000, -1000, -1000, + -1000, -1000, -1000, 1331, 46023, -1000, 439, -1000, -1000, -94, + -110, 858, -1000, -1000, -1000, -1000, -1000, 1380, 1267, 1209, + -1000, 46023, -1000, 45352, -200, 732, 8189, -1000, 2056, 2047, + 2496, -1000, -1000, -1000, -1000, -1000, -1000, -463, 1400, 308, + -1000, -1000, 142, -1000, 18510, -1000, 18510, -1000, 1401, -1000, + -1000, 2302, 139, -1000, 2515, -1000, 2513, 689, 689, -1000, + 1073, -463, -1000, -1000, 1209, 1209, -1000, -218, -1000, -1000, + -1000, -1000, -1000, 474, 1130, -1000, -1000, -1000, -1000, -1000, + 8189, -1000, -1000, -1000, 261, 261, -1000, -1000, } var yyPgo = [...]int{ - 0, 3102, 3101, 25, 1, 35, 33, 3100, 52, 110, - 217, 58, 248, 112, 3099, 189, 3097, 3093, 3092, 3089, - 3085, 3084, 2590, 2575, 2556, 3083, 3082, 3081, 3079, 3078, - 3077, 3076, 3075, 3074, 3073, 203, 180, 213, 3071, 3070, - 3068, 135, 199, 101, 103, 207, 3067, 3066, 93, 3065, - 3063, 3062, 204, 201, 196, 925, 3056, 195, 130, 54, - 3052, 3051, 3050, 3048, 3044, 3041, 3040, 3037, 3029, 3025, - 3023, 3022, 3021, 3020, 3019, 3017, 3012, 3010, 3009, 3008, - 293, 3005, 3003, 16, 3002, 97, 2999, 2998, 2997, 2996, - 2991, 7, 2990, 2989, 20, 42, 2988, 2987, 48, 2986, - 2984, 2982, 2979, 2978, 14, 2976, 22, 2969, 38, 2967, - 2965, 143, 2964, 2963, 2962, 39, 2961, 2952, 2951, 2950, - 2949, 2948, 2943, 158, 2942, 2941, 2940, 192, 208, 2939, - 2930, 184, 121, 124, 2929, 2928, 116, 209, 2927, 136, - 2926, 2925, 2923, 172, 2922, 2212, 2920, 2919, 77, 122, - 2917, 50, 2916, 2915, 9, 90, 76, 4, 81, 83, - 2913, 2911, 72, 94, 2907, 119, 2906, 2904, 117, 78, - 2903, 114, 111, 2901, 2900, 17, 21, 2897, 36, 29, - 34, 80, 2891, 2890, 125, 2886, 2884, 2882, 109, 2881, - 2880, 2237, 2879, 104, 148, 115, 87, 2874, 56, 75, - 2873, 2872, 2871, 2870, 2866, 57, 2864, 2863, 2861, 163, - 71, 188, 2860, 46, 45, 63, 153, 2857, 89, 88, - 211, 185, 2856, 2855, 155, 152, 2852, 2851, 65, 41, - 44, 2849, 123, 144, 133, 26, 113, 154, 2846, 2844, - 66, 79, 2843, 2842, 2832, 2829, 186, 2800, 2797, 85, - 2796, 64, 2784, 191, 2780, 12, 67, 2778, 49, 177, - 2766, 86, 2764, 2763, 74, 145, 82, 37, 2762, 178, - 183, 146, 181, 2760, 2759, 60, 2758, 2756, 2755, 210, - 333, 2746, 2745, 100, 187, 170, 169, 102, 2744, 351, - 2743, 2742, 107, 2, 5242, 2741, 40, 179, 2739, 2738, - 5973, 156, 43, 24, 2737, 131, 2734, 2721, 2720, 2716, - 222, 190, 128, 182, 69, 2714, 2713, 2706, 13, 2705, - 2704, 2703, 2702, 2690, 2688, 91, 32, 31, 30, 251, - 70, 11, 118, 194, 173, 92, 2686, 2685, 2684, 138, - 106, 2676, 176, 175, 139, 174, 2674, 193, 159, 141, - 2673, 96, 28, 2670, 2665, 2660, 2658, 105, 2657, 2656, - 2654, 2653, 171, 164, 137, 108, 2650, 98, 132, 168, - 165, 53, 2649, 47, 2647, 2646, 27, 205, 23, 2644, - 6, 120, 150, 2643, 4169, 197, 2637, 15, 358, 166, - 2631, 2628, 5, 8, 10, 2619, 2618, 2617, 2615, 151, - 2612, 2609, 2603, 2601, 19, 51, 18, 3, 134, 95, - 2588, 2570, 160, 162, 2569, 2568, 2563, 2562, 3191, 0, - 147, 2557, 212, + 0, 3116, 3115, 25, 1, 38, 37, 3114, 60, 128, + 211, 58, 250, 109, 3112, 188, 3111, 3110, 3106, 3103, + 3097, 3096, 2561, 2543, 2542, 3093, 3091, 3090, 3089, 3088, + 3087, 3086, 3085, 3083, 3082, 194, 180, 195, 3079, 3077, + 3075, 131, 196, 98, 101, 206, 3074, 3073, 96, 3071, + 3070, 3069, 203, 202, 198, 878, 3067, 201, 124, 52, + 3066, 3065, 3063, 3059, 3058, 3057, 3051, 3050, 3048, 3045, + 3044, 3043, 3042, 3038, 3036, 3035, 3034, 3031, 3025, 3024, + 292, 3023, 3021, 16, 3020, 92, 3016, 3014, 3011, 3002, + 3000, 7, 2995, 2989, 20, 33, 2988, 2981, 48, 2978, + 2977, 2976, 2966, 2965, 14, 2962, 22, 2960, 27, 2958, + 2938, 140, 2937, 2933, 2931, 39, 2930, 2926, 2925, 2922, + 2920, 2919, 2918, 160, 2915, 2909, 2907, 193, 213, 2906, + 2904, 192, 118, 111, 2903, 2892, 117, 209, 2890, 133, + 2889, 2888, 2886, 171, 2885, 2213, 2884, 2883, 75, 89, + 2878, 50, 2873, 2872, 9, 91, 76, 4, 81, 83, + 2870, 2869, 72, 93, 2868, 115, 2867, 2865, 110, 78, + 2864, 107, 116, 2859, 2854, 17, 21, 2849, 35, 29, + 36, 85, 2840, 2837, 122, 2836, 2834, 2833, 104, 2830, + 2829, 675, 2826, 106, 151, 119, 87, 2818, 54, 65, + 2812, 2806, 2805, 2804, 2803, 53, 2801, 2800, 2789, 154, + 71, 184, 2788, 44, 46, 55, 146, 2784, 74, 97, + 207, 185, 2772, 2768, 152, 147, 2766, 2765, 69, 45, + 42, 2764, 123, 143, 121, 26, 113, 156, 2762, 2761, + 66, 82, 2760, 2758, 2754, 2748, 186, 2746, 2745, 80, + 2742, 57, 2741, 191, 2733, 6, 67, 2730, 49, 177, + 2727, 86, 2725, 2724, 77, 158, 79, 41, 2720, 178, + 183, 142, 176, 2718, 2717, 56, 2716, 2715, 2713, 210, + 327, 2710, 2708, 550, 190, 155, 170, 102, 2703, 354, + 2698, 2697, 103, 2, 4478, 2693, 40, 179, 2692, 2689, + 5757, 153, 43, 24, 2688, 132, 2687, 2686, 2684, 2683, + 222, 187, 135, 181, 70, 2679, 2673, 2672, 13, 2670, + 2669, 2666, 2665, 2660, 2658, 100, 34, 32, 31, 248, + 88, 11, 112, 182, 173, 90, 2654, 2653, 2651, 134, + 105, 2650, 175, 174, 139, 166, 2649, 189, 168, 144, + 2643, 95, 30, 2642, 2640, 2639, 2638, 114, 2637, 2636, + 2635, 2627, 172, 161, 130, 108, 2622, 94, 125, 165, + 164, 64, 2620, 47, 2618, 2617, 28, 205, 23, 2615, + 12, 120, 137, 2613, 3463, 204, 2607, 15, 358, 163, + 2605, 2603, 5, 8, 10, 2602, 2594, 2593, 2592, 145, + 2582, 2579, 2578, 2572, 19, 51, 18, 3, 138, 141, + 2567, 2565, 159, 162, 2563, 2556, 2554, 2549, 3192, 0, + 136, 2547, 208, } -//line sql.y:8390 +//line sql.y:8399 type yySymType struct { union any empty struct{} @@ -7573,45 +7560,45 @@ var yyR1 = [...]int{ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 65, 281, 281, - 290, 290, 280, 280, 305, 305, 305, 283, 283, 283, - 284, 284, 401, 401, 401, 277, 277, 66, 66, 66, - 306, 306, 306, 306, 70, 70, 410, 410, 411, 411, - 412, 412, 412, 71, 72, 72, 308, 308, 309, 309, - 73, 74, 86, 86, 86, 86, 86, 86, 86, 87, - 87, 87, 87, 110, 110, 110, 15, 15, 15, 15, - 82, 82, 82, 14, 14, 17, 67, 67, 76, 398, - 398, 399, 400, 400, 400, 400, 77, 79, 79, 32, - 32, 32, 32, 32, 32, 135, 135, 123, 123, 123, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 281, 281, 290, 290, 280, 280, 305, 305, 305, 283, + 283, 283, 284, 284, 401, 401, 401, 277, 277, 66, + 66, 66, 306, 306, 306, 306, 70, 70, 410, 410, + 411, 411, 412, 412, 412, 71, 72, 72, 308, 308, + 309, 309, 73, 74, 86, 86, 86, 86, 86, 86, + 86, 87, 87, 87, 87, 110, 110, 110, 15, 15, + 15, 15, 82, 82, 82, 14, 14, 17, 67, 67, + 76, 398, 398, 399, 400, 400, 400, 400, 77, 79, + 79, 32, 32, 32, 32, 32, 32, 135, 135, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, - 130, 130, 130, 124, 124, 421, 80, 81, 81, 128, - 128, 128, 121, 121, 121, 127, 127, 127, 16, 16, - 18, 263, 263, 19, 19, 132, 132, 134, 134, 134, - 134, 134, 136, 136, 136, 136, 136, 136, 136, 131, - 131, 133, 133, 133, 133, 298, 298, 298, 297, 297, - 168, 168, 170, 169, 169, 171, 171, 172, 172, 172, - 172, 217, 217, 194, 194, 256, 256, 257, 257, 255, - 255, 262, 262, 258, 258, 258, 258, 265, 265, 173, - 173, 173, 173, 181, 181, 182, 182, 183, 183, 307, - 307, 303, 303, 303, 302, 302, 187, 187, 187, 189, - 188, 188, 188, 188, 190, 190, 192, 192, 191, 191, - 193, 198, 198, 197, 197, 195, 195, 195, 195, 196, - 196, 196, 196, 199, 199, 145, 145, 145, 145, 145, - 145, 145, 160, 160, 160, 160, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 246, 246, 151, - 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 155, 155, 155, 155, 155, 155, 155, 155, + 123, 123, 130, 130, 130, 124, 124, 421, 80, 81, + 81, 128, 128, 128, 121, 121, 121, 127, 127, 127, + 16, 16, 18, 263, 263, 19, 19, 132, 132, 134, + 134, 134, 134, 134, 136, 136, 136, 136, 136, 136, + 136, 131, 131, 133, 133, 133, 133, 298, 298, 298, + 297, 297, 168, 168, 170, 169, 169, 171, 171, 172, + 172, 172, 172, 217, 217, 194, 194, 256, 256, 257, + 257, 255, 255, 262, 262, 258, 258, 258, 258, 265, + 265, 173, 173, 173, 173, 181, 181, 182, 182, 183, + 183, 307, 307, 303, 303, 303, 302, 302, 187, 187, + 187, 189, 188, 188, 188, 188, 190, 190, 192, 192, + 191, 191, 193, 198, 198, 197, 197, 195, 195, 195, + 195, 196, 196, 196, 196, 199, 199, 145, 145, 145, + 145, 145, 145, 145, 160, 160, 160, 160, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 246, + 246, 151, 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 154, 222, 222, - 221, 221, 88, 88, 88, 89, 89, 90, 90, 90, - 90, 90, 91, 91, 91, 91, 91, 146, 146, 93, - 93, 92, 92, 212, 212, 295, 295, 94, 95, 95, - 98, 98, 97, 96, 96, 102, 102, 99, 99, 101, - 101, 100, 103, 103, 104, 105, 105, 278, 278, 200, - 200, 208, 208, 208, 208, 201, 201, 201, 201, 201, - 201, 201, 209, 209, 209, 216, 210, 210, 206, 206, - 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, + 222, 222, 221, 221, 88, 88, 88, 89, 89, 90, + 90, 90, 90, 90, 91, 91, 91, 91, 91, 146, + 146, 93, 93, 92, 92, 212, 212, 295, 295, 94, + 95, 95, 98, 98, 97, 96, 96, 102, 102, 99, + 99, 101, 101, 100, 103, 103, 104, 105, 105, 278, + 278, 200, 200, 208, 208, 208, 208, 201, 201, 201, + 201, 201, 201, 201, 209, 209, 209, 216, 210, 210, + 206, 206, 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, @@ -7619,34 +7606,34 @@ var yyR1 = [...]int{ 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 165, 165, 165, 165, - 227, 227, 152, 152, 152, 152, 152, 152, 152, 152, - 152, 152, 152, 152, 152, 152, 152, 153, 153, 166, - 166, 166, 166, 167, 167, 167, 167, 167, 167, 167, - 315, 315, 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 422, 422, 329, 329, 329, 329, 207, - 207, 207, 207, 207, 126, 126, 126, 126, 126, 312, - 312, 312, 316, 316, 316, 314, 314, 314, 314, 314, + 205, 205, 205, 205, 205, 205, 205, 205, 165, 165, + 165, 165, 227, 227, 152, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, 152, 153, + 153, 166, 166, 166, 166, 167, 167, 167, 167, 167, + 167, 167, 315, 315, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 422, 422, 329, 329, 329, + 329, 207, 207, 207, 207, 207, 126, 126, 126, 126, + 126, 312, 312, 312, 316, 316, 316, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, - 317, 317, 225, 225, 122, 122, 223, 223, 224, 226, - 226, 218, 218, 218, 218, 220, 220, 203, 203, 203, - 228, 228, 229, 229, 106, 107, 107, 108, 108, 230, - 230, 232, 231, 231, 233, 234, 234, 234, 235, 235, - 236, 236, 236, 48, 48, 48, 48, 48, 43, 43, - 43, 43, 44, 44, 44, 44, 137, 137, 137, 137, - 139, 139, 138, 138, 83, 83, 84, 84, 84, 414, - 414, 414, 413, 413, 413, 413, 413, 413, 143, 143, - 144, 144, 144, 141, 141, 142, 142, 253, 253, 237, - 237, 237, 244, 244, 244, 240, 240, 242, 242, 242, - 243, 243, 243, 241, 250, 250, 252, 252, 251, 251, - 247, 247, 248, 248, 249, 249, 249, 245, 245, 202, - 202, 202, 202, 202, 254, 254, 254, 254, 266, 266, - 213, 213, 215, 215, 214, 214, 164, 267, 267, 275, - 272, 272, 273, 273, 299, 299, 299, 276, 276, 289, - 289, 285, 285, 286, 286, 279, 279, 291, 291, 291, - 78, 211, 211, 368, 368, 365, 294, 294, 296, 296, - 300, 300, 304, 304, 301, 301, 292, 292, 292, 292, + 314, 314, 317, 317, 225, 225, 122, 122, 223, 223, + 224, 226, 226, 218, 218, 218, 218, 220, 220, 203, + 203, 203, 228, 228, 229, 229, 106, 107, 107, 108, + 108, 230, 230, 232, 231, 231, 233, 234, 234, 234, + 235, 235, 236, 236, 236, 48, 48, 48, 48, 48, + 43, 43, 43, 43, 44, 44, 44, 44, 137, 137, + 137, 137, 139, 139, 138, 138, 83, 83, 84, 84, + 84, 414, 414, 414, 413, 413, 413, 413, 413, 413, + 143, 143, 144, 144, 144, 141, 141, 142, 142, 253, + 253, 237, 237, 237, 244, 244, 244, 240, 240, 242, + 242, 242, 243, 243, 243, 241, 250, 250, 252, 252, + 251, 251, 247, 247, 248, 248, 249, 249, 249, 245, + 245, 202, 202, 202, 202, 202, 254, 254, 254, 254, + 266, 266, 213, 213, 215, 215, 214, 214, 164, 267, + 267, 275, 272, 272, 273, 273, 299, 299, 299, 276, + 276, 289, 289, 285, 285, 286, 286, 279, 279, 291, + 291, 291, 78, 211, 211, 368, 368, 365, 294, 294, + 296, 296, 300, 300, 304, 304, 301, 301, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, @@ -7662,7 +7649,7 @@ var yyR1 = [...]int{ 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 293, 293, 293, 293, 293, 293, 293, 293, 293, + 292, 292, 292, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, @@ -7703,7 +7690,7 @@ var yyR1 = [...]int{ 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 418, 419, 310, 311, 311, 311, + 293, 293, 293, 418, 419, 310, 311, 311, 311, } var yyR2 = [...]int{ @@ -7786,82 +7773,82 @@ var yyR2 = [...]int{ 3, 2, 2, 3, 7, 3, 3, 3, 3, 4, 7, 5, 2, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, - 4, 4, 4, 4, 4, 4, 4, 4, 2, 3, - 3, 3, 3, 5, 2, 3, 3, 2, 2, 3, - 4, 4, 4, 3, 4, 4, 5, 3, 0, 1, - 0, 1, 1, 1, 0, 2, 2, 0, 2, 2, - 0, 2, 0, 1, 1, 1, 1, 2, 1, 3, - 1, 1, 1, 1, 1, 3, 0, 1, 1, 3, - 3, 2, 2, 1, 1, 5, 0, 1, 0, 1, - 2, 3, 0, 3, 3, 3, 3, 3, 1, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 1, 1, 4, 4, 4, 2, 2, 3, 1, - 3, 2, 1, 2, 1, 2, 2, 4, 4, 3, - 3, 6, 4, 7, 6, 1, 3, 2, 2, 2, - 2, 1, 1, 1, 1, 3, 2, 1, 1, 1, - 0, 1, 1, 0, 3, 0, 2, 0, 2, 1, - 2, 2, 0, 1, 1, 0, 1, 1, 5, 5, - 4, 0, 2, 4, 4, 0, 1, 0, 1, 2, - 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, - 3, 1, 2, 3, 5, 0, 1, 2, 1, 1, - 0, 1, 2, 1, 3, 1, 1, 1, 4, 3, - 1, 1, 2, 3, 7, 0, 3, 0, 1, 1, - 3, 1, 3, 1, 1, 3, 3, 1, 3, 4, - 4, 4, 3, 2, 4, 0, 1, 0, 2, 0, - 1, 0, 1, 2, 1, 1, 1, 2, 2, 1, - 2, 3, 2, 3, 2, 2, 2, 1, 1, 3, - 3, 0, 1, 1, 2, 6, 5, 6, 6, 0, - 2, 3, 3, 0, 2, 3, 3, 3, 2, 3, - 1, 6, 3, 4, 3, 1, 3, 4, 5, 6, - 3, 4, 5, 6, 3, 4, 1, 1, 1, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, - 2, 2, 2, 2, 1, 1, 2, 7, 7, 6, - 6, 2, 2, 1, 6, 3, 3, 3, 1, 3, - 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 1, 1, 0, - 1, 2, 5, 0, 3, 0, 1, 4, 4, 2, - 0, 1, 1, 2, 2, 1, 1, 2, 2, 0, - 1, 1, 1, 1, 5, 1, 3, 0, 3, 1, - 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 3, 4, 6, - 4, 4, 8, 6, 8, 6, 5, 4, 10, 2, - 2, 1, 2, 2, 2, 4, 5, 5, 5, 5, - 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 8, 8, 8, 6, 5, 4, 4, 4, 4, - 4, 7, 4, 4, 6, 6, 6, 8, 6, 6, - 4, 4, 3, 4, 6, 6, 4, 4, 4, 6, - 8, 6, 4, 6, 6, 8, 10, 7, 8, 8, - 9, 4, 4, 4, 4, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 4, 4, 6, 5, 9, - 6, 9, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 2, 6, 8, 10, 12, 14, 6, 8, 8, - 10, 12, 14, 6, 8, 10, 12, 6, 8, 4, - 4, 3, 4, 6, 6, 4, 6, 4, 6, 8, - 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, + 2, 3, 3, 3, 3, 5, 2, 3, 3, 2, + 2, 3, 4, 4, 4, 3, 4, 4, 5, 3, + 0, 1, 0, 1, 1, 1, 0, 2, 2, 0, + 2, 2, 0, 2, 0, 1, 1, 1, 1, 2, + 1, 3, 1, 1, 1, 1, 1, 3, 0, 1, + 1, 3, 3, 2, 2, 1, 1, 5, 0, 1, + 0, 1, 2, 3, 0, 3, 3, 3, 3, 3, + 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 1, 1, 4, 4, 4, 2, 2, + 3, 1, 3, 2, 1, 2, 1, 2, 2, 4, + 4, 3, 3, 6, 4, 7, 6, 1, 3, 2, + 2, 2, 2, 1, 1, 1, 1, 3, 2, 1, + 1, 1, 0, 1, 1, 0, 3, 0, 2, 0, + 2, 1, 2, 2, 0, 1, 1, 0, 1, 1, + 5, 5, 4, 0, 2, 4, 4, 0, 1, 0, + 1, 2, 3, 4, 1, 1, 1, 1, 1, 1, + 1, 1, 3, 1, 2, 3, 5, 0, 1, 2, + 1, 1, 0, 1, 2, 1, 3, 1, 1, 1, + 4, 3, 1, 1, 2, 3, 7, 0, 3, 0, + 1, 1, 3, 1, 3, 1, 1, 3, 3, 1, + 3, 4, 4, 4, 3, 2, 4, 0, 1, 0, + 2, 0, 1, 0, 1, 2, 1, 1, 1, 2, + 2, 1, 2, 3, 2, 3, 2, 2, 2, 1, + 1, 3, 3, 0, 1, 1, 2, 6, 5, 6, + 6, 0, 2, 3, 3, 0, 2, 3, 3, 3, + 2, 3, 1, 6, 3, 4, 3, 1, 3, 4, + 5, 6, 3, 4, 5, 6, 3, 4, 1, 1, + 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 1, 1, 1, 1, 1, 3, 1, + 1, 1, 2, 2, 2, 2, 1, 1, 2, 7, + 7, 6, 6, 2, 2, 1, 6, 3, 3, 3, + 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, + 1, 0, 1, 2, 5, 0, 3, 0, 1, 4, + 4, 2, 0, 1, 1, 2, 2, 1, 1, 2, + 2, 0, 1, 1, 1, 1, 5, 1, 3, 0, + 3, 1, 1, 1, 2, 1, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 4, 6, 4, 4, 8, 6, 8, 6, 5, 4, + 10, 2, 2, 1, 2, 2, 2, 4, 5, 5, + 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 8, 8, 8, 6, 5, 4, 4, + 4, 4, 4, 7, 4, 4, 6, 6, 6, 8, + 6, 6, 4, 4, 3, 4, 6, 6, 4, 4, + 4, 6, 8, 6, 4, 6, 6, 8, 10, 7, + 8, 8, 9, 4, 4, 4, 4, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 4, 4, 6, + 5, 9, 6, 9, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 2, 6, 8, 10, 12, 14, 6, + 8, 8, 10, 12, 14, 6, 8, 10, 12, 6, + 8, 4, 4, 3, 4, 6, 6, 4, 6, 4, + 6, 8, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 2, 0, 2, 3, 3, 4, - 4, 4, 4, 4, 0, 3, 4, 7, 3, 1, - 1, 1, 0, 5, 5, 2, 3, 1, 2, 2, - 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, - 0, 1, 0, 1, 0, 2, 1, 2, 4, 0, - 2, 1, 1, 3, 5, 1, 1, 1, 2, 2, - 0, 3, 0, 2, 2, 1, 3, 0, 1, 0, - 1, 3, 1, 3, 2, 0, 1, 1, 0, 1, - 2, 4, 4, 0, 2, 2, 1, 1, 3, 3, - 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, - 0, 3, 1, 1, 0, 4, 0, 1, 1, 0, - 1, 2, 2, 1, 1, 1, 1, 1, 0, 3, - 1, 3, 2, 1, 1, 0, 1, 2, 4, 9, - 3, 5, 0, 3, 3, 0, 1, 0, 2, 2, - 0, 2, 2, 2, 0, 2, 1, 2, 3, 3, - 0, 2, 1, 2, 3, 4, 3, 0, 1, 2, - 1, 5, 4, 4, 1, 3, 3, 5, 0, 5, - 1, 3, 1, 2, 3, 4, 1, 1, 3, 3, - 1, 2, 1, 1, 1, 1, 1, 1, 1, 0, - 1, 0, 2, 0, 3, 0, 1, 0, 1, 1, - 5, 0, 1, 0, 1, 2, 1, 1, 1, 1, - 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 0, 2, 0, 2, 3, + 3, 4, 4, 4, 4, 4, 0, 3, 4, 7, + 3, 1, 1, 1, 0, 5, 5, 2, 3, 1, + 2, 2, 1, 2, 1, 2, 2, 1, 2, 2, + 1, 1, 0, 1, 0, 1, 0, 2, 1, 2, + 4, 0, 2, 1, 1, 3, 5, 1, 1, 1, + 2, 2, 0, 3, 0, 2, 2, 1, 3, 0, + 1, 0, 1, 3, 1, 3, 2, 0, 1, 1, + 0, 1, 2, 4, 4, 0, 2, 2, 1, 1, + 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, + 3, 3, 0, 3, 1, 1, 0, 4, 0, 1, + 1, 0, 1, 2, 2, 1, 1, 1, 1, 1, + 0, 3, 1, 3, 2, 1, 1, 0, 1, 2, + 4, 9, 3, 5, 0, 3, 3, 0, 1, 0, + 2, 2, 0, 2, 2, 2, 0, 2, 1, 2, + 3, 3, 0, 2, 1, 2, 3, 4, 3, 0, + 1, 2, 1, 5, 4, 4, 1, 3, 3, 5, + 0, 5, 1, 3, 1, 2, 3, 4, 1, 1, + 3, 3, 1, 2, 1, 1, 1, 1, 1, 1, + 1, 0, 1, 0, 2, 0, 3, 0, 1, 0, + 1, 1, 5, 0, 1, 0, 1, 2, 1, 1, + 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -7918,7 +7905,7 @@ var yyR2 = [...]int{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 0, 0, 1, 1, } var yyChk = [...]int{ @@ -7928,741 +7915,741 @@ var yyChk = [...]int{ -17, -67, -32, -33, -75, -76, -77, -78, -79, -16, -18, -19, -9, -8, -13, 10, 11, -109, -34, 33, -39, -49, 225, -50, -40, 226, -51, 228, 227, 266, - 229, 250, 634, 235, 259, 75, 318, 319, 321, 322, - 323, 324, -110, 630, 264, 265, 231, 37, 46, 34, + 229, 250, 635, 235, 259, 75, 319, 320, 322, 323, + 324, 325, -110, 631, 264, 265, 231, 37, 46, 34, 35, 38, 236, 272, 273, 234, -10, -35, 9, -418, - 12, 462, 261, 260, 29, -12, 524, 87, -81, -417, - 680, -253, -237, 23, 34, 30, -236, -232, -128, -237, + 12, 463, 261, 260, 29, -12, 525, 87, -81, -417, + 681, -253, -237, 23, 34, 30, -236, -232, -128, -237, 21, 19, 8, -80, -80, -80, 13, 14, -80, -353, -355, -12, 26, 87, 159, 9, 87, -80, -56, -55, -53, -52, -54, -57, 32, -46, -47, -377, -45, -42, 230, 227, 276, 123, 124, 266, 267, 268, 229, 250, - 265, 269, 264, 285, -41, 82, 34, 524, 527, -360, - 226, 232, 233, 228, 463, 126, 125, 76, -357, 377, - 557, 650, -57, 652, 101, 104, 651, 45, 240, 653, - 654, 655, 564, 656, 249, 657, 658, 659, 660, 666, - 605, 667, 668, 669, 127, 8, -80, -304, -300, 91, - -293, 521, 252, 555, 556, 301, 82, 42, 530, 374, - 377, 557, 492, 650, 318, 334, 328, 497, 498, 499, - 357, 349, 522, 558, 531, 304, 253, 289, 644, 347, - 135, 652, 308, 559, 267, 382, 383, 560, 384, 101, - 321, 425, 665, 307, 561, 663, 104, 651, 326, 80, - 491, 52, 647, 45, 262, 345, 234, 341, 653, 290, - 562, 533, 283, 126, 123, 672, 37, 337, 51, 31, - 662, 125, 50, 654, 150, 563, 655, 564, 386, 364, - 638, 49, 387, 268, 565, 85, 273, 526, 311, 646, - 388, 511, 338, 389, 300, 661, 231, 566, 625, 617, - 618, 390, 391, 639, 369, 365, 370, 513, 567, 417, - 496, 392, 621, 622, 679, 53, 568, 569, 640, 124, - 570, 79, 656, 81, 332, 333, 571, 298, 251, 516, - 517, 419, 361, 474, 481, 482, 111, 112, 477, 113, - 483, 114, 484, 485, 486, 475, 115, 108, 476, 487, - 488, 362, 363, 116, 489, 110, 109, 478, 480, 117, - 490, 249, 36, 393, 523, 302, 59, 306, 277, 420, - 47, 367, 676, 46, 632, 518, 572, 637, 360, 356, - 471, 54, 573, 574, 575, 576, 493, 657, 359, 331, - 355, 671, 4, 295, 494, 658, 63, 233, 372, 371, - 373, 284, 416, 352, 577, 578, 579, 256, 83, 580, - 342, 22, 581, 582, 394, 291, 583, 57, 584, 585, - 423, 265, 586, 55, 659, 40, 587, 270, 673, 660, - 588, 313, 314, 589, 590, 631, 591, 272, 592, 396, - 593, 619, 620, 395, 366, 368, 519, 279, 397, 237, - 525, 594, 312, 336, 269, 664, 595, 257, 507, 508, - 509, 510, 645, 515, 514, 271, 276, 264, 424, 258, - 596, 597, 598, 599, 600, 305, 616, 601, 602, 322, - 666, 472, 44, 603, 604, 605, 606, 607, 299, 294, - 418, 427, 62, 84, 379, 608, 609, 643, 330, 327, - 292, 610, 319, 56, 667, 668, 669, 286, 670, 500, - 501, 502, 503, 10, 677, 678, 495, 399, 127, 296, - 297, 48, 353, 278, 611, 309, 612, 343, 344, 358, - 329, 354, 628, 320, 626, 280, 400, 473, 266, 613, - 426, 293, 375, 380, 310, 529, 512, 285, 401, 635, - 642, 528, 504, 505, 351, 348, 287, 506, 614, 630, - 402, 241, 281, 282, 615, 627, 403, 404, 303, 405, - 315, 317, 415, 406, 407, 408, 409, 412, 413, 414, - 411, 316, 410, 629, 623, 624, 288, 527, 325, 346, - 381, 443, 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 455, 456, 457, 458, 459, 460, 470, - 239, -80, 239, -191, -300, 239, 239, 96, 525, 651, - 635, 396, -272, 413, 414, 383, -290, 385, 398, 393, - 403, 391, -281, 394, 396, 279, -401, 417, 239, 400, - 225, 386, 395, 404, 405, 315, 415, 303, 411, 406, - 316, 410, 288, 407, 408, 409, 412, -384, 177, 655, - 670, 135, 350, 390, 388, 418, 632, 91, -306, 91, - 92, 93, -293, 320, -308, 325, -294, -384, -293, 323, - -80, -80, -310, -310, -130, 632, 636, -210, -145, 143, - -160, -163, -151, -155, -204, -205, -206, -207, -161, -220, - -259, 166, 167, 174, 144, -216, -164, 27, 520, 464, - 463, 177, 32, -154, 220, 69, 70, 466, 146, 58, - 12, 439, 440, -162, 434, 441, 436, 491, 493, 494, - 495, 492, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 506, 496, 468, 469, 118, 470, 108, 110, 109, - 471, 472, 473, 347, 518, 519, 513, 516, 517, 515, - 514, 362, 363, 474, 475, 476, 111, 112, 113, 114, - 115, 116, 117, 477, 480, 478, 479, 481, 482, 483, - 488, 489, 484, 485, 486, 487, 490, -90, -102, 546, - 545, -103, -152, -153, -166, -167, -294, -300, 244, 433, - 238, 172, 462, -156, -149, -218, 107, 92, 93, -8, - -214, 432, 437, 438, 442, 435, 532, 534, 549, 550, - 552, 537, 542, 541, 544, 507, 508, 509, 510, 511, - 512, 617, 618, 619, 620, 621, 622, 623, 624, -384, - -293, 91, -158, -157, -200, 94, 99, 102, 103, 105, - -407, 262, 343, 344, 119, -418, 648, 90, 95, 96, - 97, 98, 120, 121, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, - 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, - 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, - 214, 215, 216, 217, 218, 219, 45, 399, 399, -191, - -80, -80, -80, -80, -230, -128, -232, -10, -8, -418, - -80, -8, -9, -13, -35, -37, 551, -36, -300, 100, - -237, -253, 13, 162, 43, 51, -235, -236, -12, -8, - -145, 20, 24, 25, -133, 168, -145, -300, -133, -279, - 243, -80, -80, -268, -313, 320, -270, 418, 632, 417, - -260, -273, 91, -259, -272, 416, -12, -354, 159, -340, - -344, -294, 254, -370, 250, -191, -80, -363, -362, -294, - -418, -129, -289, 240, 248, 247, 136, -388, 139, 296, - 433, 238, -52, -53, -54, -272, 176, 654, -111, 271, - 275, 88, 88, -344, -343, -342, -389, 275, 254, -369, - -361, 246, 255, -350, 247, 248, -345, 240, 137, -389, - -345, 245, 255, 250, 254, 275, 275, 127, 275, 127, - 275, 275, 275, 275, 275, 275, 275, 275, 275, 270, - -351, 151, -351, 528, 528, -357, -389, 250, 240, -389, - -389, 246, -291, -345, 242, 26, 242, 36, 36, -351, - -351, -351, -272, 176, -351, -351, -351, -351, 283, 283, - -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, - -351, -351, -351, -351, -351, -351, -351, 239, -388, -137, - 410, 303, 317, 315, 82, -55, 285, -38, -191, -289, - 240, 241, -388, 272, -191, 221, -191, -415, -191, 96, - 96, -283, 159, 16, -283, -280, 399, 397, 384, 389, - -283, -283, -283, -283, 286, 382, -346, 240, 36, 251, - 399, 286, 382, 286, 287, 286, 287, 392, 402, 286, - -305, 15, 162, 433, 387, 391, 279, 239, 280, 241, - 401, 287, -305, -305, 90, -305, 90, -284, 159, 286, - 399, 282, -283, -283, -311, -418, -296, -294, -292, 230, - 24, 142, 26, 28, 145, 177, 130, 20, 146, 38, - 232, 350, 250, 176, 246, 463, 225, 73, 532, 434, - 436, 432, 439, 465, 466, 433, 385, 32, 14, 534, - 29, 260, 25, 39, 170, 227, 149, 535, 263, 27, - 261, 118, 121, 537, 23, 76, 255, 15, 248, 41, - 17, 538, 539, 18, 244, 243, 162, 240, 71, 12, - 220, 30, 158, 67, 540, 137, 541, 542, 543, 544, - 131, 69, 159, 21, 674, 437, 438, 34, 633, 520, - 274, 172, 74, 60, 636, 143, 435, 545, 546, 119, - 547, 122, 77, 641, 139, 19, 72, 43, 548, 275, - 549, 245, 675, 550, 421, 551, 160, 228, 462, 70, - 161, 648, 552, 649, 238, 398, 9, 467, 33, 259, - 247, 129, 68, 553, 239, 148, 468, 469, 242, 132, - 120, 8, 136, 35, 13, 75, 78, 440, 441, 442, - 58, 128, 524, 147, 16, 554, 422, 141, 634, 428, - 429, 430, 431, 235, -384, 637, -311, -311, 33, 92, - -410, -411, -412, 524, 421, 242, -294, -191, -86, 625, - 229, -87, 631, 24, 237, -135, 399, -123, 177, 655, - 638, 639, 640, 637, 396, 635, 645, 643, 641, 286, - 642, 88, 139, 141, 142, 4, -145, 158, -201, 151, - 152, 153, 154, 155, 156, 157, 162, 143, 145, 159, - -246, 140, 163, 164, 165, 166, 167, 168, 169, 171, - 170, 172, 173, 160, 161, 176, 223, 224, -155, -155, - -155, -155, -216, -222, -221, -418, -218, -384, -293, -300, - -418, -418, -155, -278, -418, -418, -151, -418, -418, -418, - -225, -145, -418, -418, -422, -418, -422, -422, -329, -418, - -329, -418, -418, -418, -418, -418, -418, -418, -418, -418, + 265, 269, 264, 285, -41, 82, 34, 525, 528, -360, + 226, 232, 233, 228, 464, 126, 125, 76, -357, 378, + 558, 651, -57, 653, 101, 104, 652, 45, 240, 654, + 655, 656, 565, 657, 249, 658, 659, 660, 661, 667, + 606, 668, 669, 670, 127, 8, -80, -304, -300, 91, + -293, 522, 252, 556, 557, 301, 82, 42, 531, 375, + 378, 558, 493, 651, 319, 335, 329, 498, 499, 500, + 358, 350, 523, 559, 532, 304, 253, 289, 645, 348, + 135, 653, 308, 560, 267, 383, 384, 561, 385, 101, + 322, 426, 666, 307, 562, 664, 104, 652, 327, 80, + 492, 52, 648, 45, 262, 346, 234, 342, 654, 290, + 563, 534, 283, 126, 123, 673, 37, 338, 51, 31, + 663, 125, 50, 655, 150, 564, 656, 565, 387, 365, + 639, 49, 388, 268, 566, 85, 273, 527, 311, 647, + 389, 512, 339, 390, 300, 662, 231, 567, 626, 618, + 619, 391, 392, 640, 370, 366, 371, 514, 568, 418, + 497, 393, 622, 623, 680, 53, 569, 570, 641, 124, + 571, 79, 657, 81, 333, 334, 572, 298, 251, 517, + 518, 420, 362, 475, 482, 483, 111, 112, 478, 113, + 484, 114, 485, 486, 487, 476, 115, 108, 477, 488, + 489, 363, 364, 116, 490, 110, 109, 479, 481, 117, + 491, 249, 36, 394, 524, 302, 59, 306, 277, 421, + 47, 368, 677, 46, 633, 519, 573, 638, 361, 357, + 472, 54, 574, 575, 576, 577, 494, 658, 360, 332, + 356, 672, 4, 295, 495, 659, 63, 233, 373, 372, + 374, 284, 417, 353, 578, 579, 580, 256, 83, 581, + 343, 22, 582, 583, 395, 291, 584, 57, 585, 586, + 424, 265, 587, 55, 660, 40, 588, 270, 674, 661, + 589, 313, 314, 590, 591, 632, 592, 272, 593, 397, + 594, 620, 621, 396, 367, 369, 520, 279, 398, 237, + 526, 595, 312, 337, 269, 665, 596, 257, 508, 509, + 510, 511, 646, 516, 515, 271, 276, 264, 425, 258, + 597, 598, 599, 600, 601, 305, 617, 602, 603, 323, + 667, 473, 44, 604, 605, 606, 607, 608, 299, 294, + 419, 428, 62, 84, 380, 609, 610, 644, 331, 328, + 292, 611, 320, 56, 668, 669, 670, 286, 671, 501, + 502, 503, 504, 10, 678, 679, 496, 400, 127, 296, + 297, 48, 354, 278, 612, 309, 613, 344, 345, 359, + 330, 355, 629, 321, 627, 280, 401, 474, 266, 614, + 427, 293, 376, 381, 310, 530, 513, 285, 402, 636, + 643, 529, 505, 506, 352, 349, 287, 507, 615, 631, + 403, 241, 281, 282, 616, 628, 404, 405, 303, 406, + 315, 317, 416, 318, 407, 408, 409, 410, 413, 414, + 415, 412, 316, 411, 630, 624, 625, 288, 528, 326, + 347, 382, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, + 471, 239, -80, 239, -191, -300, 239, 239, 96, 526, + 652, 636, 397, -272, 414, 415, 384, -290, 386, 399, + 394, 404, 392, -281, 395, 397, 279, -401, 418, 239, + 401, 225, 387, 396, 405, 406, 315, 416, 317, 303, + 412, 407, 316, 411, 288, 408, 409, 410, 413, -384, + 177, 656, 671, 135, 351, 391, 389, 419, 633, 91, + -306, 91, 92, 93, -293, 321, -308, 326, -294, -384, + -293, 324, -80, -80, -310, -310, -130, 633, 637, -210, + -145, 143, -160, -163, -151, -155, -204, -205, -206, -207, + -161, -220, -259, 166, 167, 174, 144, -216, -164, 27, + 521, 465, 464, 177, 32, -154, 220, 69, 70, 467, + 146, 58, 12, 440, 441, -162, 435, 442, 437, 492, + 494, 495, 496, 493, 498, 499, 500, 501, 502, 503, + 504, 505, 506, 507, 497, 469, 470, 118, 471, 108, + 110, 109, 472, 473, 474, 348, 519, 520, 514, 517, + 518, 516, 515, 363, 364, 475, 476, 477, 111, 112, + 113, 114, 115, 116, 117, 478, 481, 479, 480, 482, + 483, 484, 489, 490, 485, 486, 487, 488, 491, -90, + -102, 547, 546, -103, -152, -153, -166, -167, -294, -300, + 244, 434, 238, 172, 463, -156, -149, -218, 107, 92, + 93, -8, -214, 433, 438, 439, 443, 436, 533, 535, + 550, 551, 553, 538, 543, 542, 545, 508, 509, 510, + 511, 512, 513, 618, 619, 620, 621, 622, 623, 624, + 625, -384, -293, 91, -158, -157, -200, 94, 99, 102, + 103, 105, -407, 262, 344, 345, 119, -418, 649, 90, + 95, 96, 97, 98, 120, 121, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 217, 218, 219, 45, 400, + 400, -191, -80, -80, -80, -80, -230, -128, -232, -10, + -8, -418, -80, -8, -9, -13, -35, -37, 552, -36, + -300, 100, -237, -253, 13, 162, 43, 51, -235, -236, + -12, -8, -145, 20, 24, 25, -133, 168, -145, -300, + -133, -279, 243, -80, -80, -268, -313, 321, -270, 419, + 633, 418, -260, -273, 91, -259, -272, 417, -12, -354, + 159, -340, -344, -294, 254, -370, 250, -191, -80, -363, + -362, -294, -418, -129, -289, 240, 248, 247, 136, -388, + 139, 296, 434, 238, -52, -53, -54, -272, 176, 655, + -111, 271, 275, 88, 88, -344, -343, -342, -389, 275, + 254, -369, -361, 246, 255, -350, 247, 248, -345, 240, + 137, -389, -345, 245, 255, 250, 254, 275, 275, 127, + 275, 127, 275, 275, 275, 275, 275, 275, 275, 275, + 275, 270, -351, 151, -351, 529, 529, -357, -389, 250, + 240, -389, -389, 246, -291, -345, 242, 26, 242, 36, + 36, -351, -351, -351, -272, 176, -351, -351, -351, -351, + 283, 283, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, 239, + -388, -137, 411, 303, 317, 315, 82, -55, 285, -38, + -191, -289, 240, 241, -388, 272, -191, 221, -191, -415, + -191, 96, 96, -283, 159, 16, -283, -280, 400, 398, + 385, 390, -283, -283, -283, -283, 286, 383, -346, 240, + 36, 251, 400, 286, 383, 286, 287, 286, 287, 393, + 403, 286, -305, 15, 162, 434, 388, 392, 279, 239, + 280, 241, 402, 287, -305, -305, 90, -305, 90, 90, + -284, 159, 286, 400, 282, -283, -283, -311, -418, -296, + -294, -292, 230, 24, 142, 26, 28, 145, 177, 130, + 20, 146, 38, 232, 351, 250, 176, 246, 464, 225, + 73, 533, 435, 437, 433, 440, 466, 467, 434, 386, + 32, 14, 535, 29, 260, 25, 39, 170, 227, 149, + 536, 263, 27, 261, 118, 121, 538, 23, 76, 255, + 15, 248, 41, 17, 539, 540, 18, 244, 243, 162, + 240, 71, 12, 220, 30, 158, 67, 541, 137, 542, + 543, 544, 545, 131, 69, 159, 21, 675, 438, 439, + 34, 634, 521, 274, 172, 74, 60, 637, 143, 436, + 546, 547, 119, 548, 122, 77, 642, 139, 19, 72, + 43, 549, 275, 550, 245, 676, 551, 422, 552, 160, + 228, 463, 70, 161, 649, 553, 650, 238, 399, 9, + 468, 33, 259, 247, 129, 68, 554, 239, 148, 469, + 470, 242, 132, 120, 8, 136, 35, 13, 75, 78, + 441, 442, 443, 58, 128, 525, 147, 16, 555, 423, + 141, 635, 429, 430, 431, 432, 235, -384, 638, -311, + -311, 33, 92, -410, -411, -412, 525, 422, 242, -294, + -191, -86, 626, 229, -87, 632, 24, 237, -135, 400, + -123, 177, 656, 639, 640, 641, 638, 397, 636, 646, + 644, 642, 286, 643, 88, 139, 141, 142, 4, -145, + 158, -201, 151, 152, 153, 154, 155, 156, 157, 162, + 143, 145, 159, -246, 140, 163, 164, 165, 166, 167, + 168, 169, 171, 170, 172, 173, 160, 161, 176, 223, + 224, -155, -155, -155, -155, -216, -222, -221, -418, -218, + -384, -293, -300, -418, -418, -155, -278, -418, -418, -151, + -418, -418, -418, -225, -145, -418, -418, -422, -418, -422, + -422, -329, -418, -329, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, - -418, -418, -418, -418, -418, -418, -418, 221, -418, -418, - -418, -418, -418, -329, -329, -329, -329, -329, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, - -418, -418, 103, 99, 102, 94, -220, 105, 90, 90, - 90, 90, -8, -9, -210, -418, -310, -398, -399, -194, - -191, -418, 303, 315, -294, -294, 272, -235, -12, -8, - -230, -236, -232, -8, -121, -134, 64, 65, -136, 25, - 39, 68, 66, 24, -419, 89, -419, -253, -419, 88, - -37, -256, 87, 62, 44, 90, 90, 88, 22, -231, - -233, -145, 15, -298, 4, -297, 26, -294, 90, 221, - 15, -192, 30, -191, -279, -279, 88, 91, 320, -269, - -271, 419, 421, 151, -299, -294, 90, 32, 89, 88, - -191, -318, -321, -323, -322, -324, -319, -320, 347, 348, - 177, 351, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 364, 33, 262, 343, 344, 345, 346, 365, 366, - 367, 368, 370, 371, 372, 373, 328, 349, 522, 329, - 330, 331, 332, 333, 334, 336, 337, 340, 338, 339, - 341, 342, -385, -384, 87, 64, 65, 89, 88, -325, - 87, -145, -137, 239, -384, 240, 240, 240, -80, 462, - -351, -351, -351, 270, 20, -45, -42, -377, 19, -41, - -42, 230, 123, 124, 227, 87, -340, 87, -349, -385, - -384, 87, 137, 245, 136, -348, -345, -348, -349, -384, - -218, -384, 137, 137, -384, -384, -265, -294, -265, -265, - 24, -265, 24, -265, 24, 96, -294, -265, 24, -265, - 24, -265, 24, -265, 24, -265, 24, 32, 79, 80, - 81, 32, 83, 84, 85, -218, -384, -384, -218, -340, - -218, -191, -384, -272, 96, 96, 96, -351, -351, 96, - 90, 90, 90, -351, -351, 96, 90, -302, -300, 90, - 90, -390, 256, 300, 302, 96, 96, 96, 96, 32, - 90, -391, 32, 662, 661, 663, 664, 665, 90, 96, - 32, 96, 32, 96, -294, 87, -191, -143, 290, 225, - 227, 230, 77, 90, 306, 307, 304, 313, 314, 309, - 310, 90, 306, 304, 313, 314, 309, 310, 90, 306, - 307, 304, 313, 314, 309, 310, 151, 45, 88, 242, - 239, -384, -285, 244, -285, -294, -301, -300, -292, -414, - 88, -413, 23, 428, 429, 431, 388, 430, 90, -145, - -347, 15, 162, -305, -305, -283, -191, -347, -305, -283, - -191, -283, -283, -283, -283, -305, -305, -305, -283, -300, - -300, -191, -191, -191, -191, -191, -191, -191, -311, -284, - -283, -283, 637, -283, 637, 90, -277, 15, 77, -311, - -311, 88, 326, 422, 423, -309, 323, -82, -294, 90, - -15, -11, -23, -22, -24, 151, -15, 88, 524, -184, - -191, 637, 637, 637, 637, 637, 637, -145, -145, -145, - -145, 547, -208, 119, 143, 120, 121, -163, -209, -214, - -216, 106, 162, 145, 159, -246, -151, -155, -151, -151, - -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, - -151, -312, -294, 90, 177, -159, -158, 105, -407, -159, - 521, 88, -221, 221, -145, -145, -384, -145, -294, -131, - -133, -131, -145, -223, -224, 147, -218, -145, -419, -419, - 96, 105, 168, -127, 25, 39, -127, -127, -127, -127, - -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, - -127, -294, -294, -120, -119, 444, 445, 446, 447, 449, - 450, 451, 454, 455, 459, 460, 443, 461, 448, 453, - 456, 457, 458, 452, 346, -145, -145, -145, -145, -145, - -145, -88, -145, 130, 131, 132, -210, -145, -151, -145, - -145, -145, -419, -145, -145, -145, -211, -210, -383, -382, - -381, -145, -145, -145, -145, -145, -145, -145, -145, -145, + 221, -418, -418, -418, -418, -418, -329, -329, -329, -329, + -329, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, 103, 99, 102, 94, -220, + 105, 90, 90, 90, 90, -8, -9, -210, -418, -310, + -398, -399, -194, -191, -418, 303, 315, -294, -294, 272, + -235, -12, -8, -230, -236, -232, -8, -121, -134, 64, + 65, -136, 25, 39, 68, 66, 24, -419, 89, -419, + -253, -419, 88, -37, -256, 87, 62, 44, 90, 90, + 88, 22, -231, -233, -145, 15, -298, 4, -297, 26, + -294, 90, 221, 15, -192, 30, -191, -279, -279, 88, + 91, 321, -269, -271, 420, 422, 151, -299, -294, 90, + 32, 89, 88, -191, -318, -321, -323, -322, -324, -319, + -320, 348, 349, 177, 352, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 365, 33, 262, 344, 345, 346, + 347, 366, 367, 368, 369, 371, 372, 373, 374, 329, + 350, 523, 330, 331, 332, 333, 334, 335, 337, 338, + 341, 339, 340, 342, 343, -385, -384, 87, 64, 65, + 89, 88, -325, 87, -145, -137, 239, -384, 240, 240, + 240, -80, 463, -351, -351, -351, 270, 20, -45, -42, + -377, 19, -41, -42, 230, 123, 124, 227, 87, -340, + 87, -349, -385, -384, 87, 137, 245, 136, -348, -345, + -348, -349, -384, -218, -384, 137, 137, -384, -384, -265, + -294, -265, -265, 24, -265, 24, -265, 24, 96, -294, + -265, 24, -265, 24, -265, 24, -265, 24, -265, 24, + 32, 79, 80, 81, 32, 83, 84, 85, -218, -384, + -384, -218, -340, -218, -191, -384, -272, 96, 96, 96, + -351, -351, 96, 90, 90, 90, -351, -351, 96, 90, + -302, -300, 90, 90, -390, 256, 300, 302, 96, 96, + 96, 96, 32, 90, -391, 32, 663, 662, 664, 665, + 666, 90, 96, 32, 96, 32, 96, -294, 87, -191, + -143, 290, 225, 227, 230, 77, 90, 306, 307, 304, + 313, 314, 309, 310, 90, 306, 304, 313, 314, 309, + 310, 90, 306, 307, 304, 313, 314, 309, 310, 151, + 45, 88, 242, 239, -384, -285, 244, -285, -294, -301, + -300, -292, -414, 88, -413, 23, 429, 430, 432, 389, + 431, 90, -145, -347, 15, 162, -305, -305, -283, -191, + -347, -305, -283, -191, -283, -283, -283, -283, -305, -305, + -305, -283, -300, -300, -191, -191, -191, -191, -191, -191, + -191, -311, -284, -283, -283, 638, -283, 318, 638, 90, + -277, 15, 77, -311, -311, 88, 327, 423, 424, -309, + 324, -82, -294, 90, -15, -11, -23, -22, -24, 151, + -15, 88, 525, -184, -191, 638, 638, 638, 638, 638, + 638, -145, -145, -145, -145, 548, -208, 119, 143, 120, + 121, -163, -209, -214, -216, 106, 162, 145, 159, -246, + -151, -155, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -312, -294, 90, 177, -159, + -158, 105, -407, -159, 522, 88, -221, 221, -145, -145, + -384, -145, -294, -131, -133, -131, -145, -223, -224, 147, + -218, -145, -419, -419, 96, 105, 168, -127, 25, 39, + -127, -127, -127, -127, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -127, -294, -294, -120, -119, 445, + 446, 447, 448, 450, 451, 452, 455, 456, 460, 461, + 444, 462, 449, 454, 457, 458, 459, 453, 347, -145, + -145, -145, -145, -145, -145, -88, -145, 130, 131, 132, + -210, -145, -151, -145, -145, -145, -419, -145, -145, -145, + -211, -210, -383, -382, -381, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, - -145, -145, -145, -145, -419, -145, -165, -149, 96, -261, - 105, 92, -145, -145, -132, -131, -296, -301, -292, -293, - -131, -132, -132, -131, -131, -145, -145, -145, -145, -145, - -145, -145, -145, -419, -145, -145, -145, -145, -145, -253, - -419, -210, 88, -400, 421, 422, 633, -303, 275, -302, - 26, -211, 90, 90, 15, -263, 78, -294, -235, -235, - 60, -131, -136, -419, -36, 26, -255, -294, 63, 90, - -330, -272, 374, 375, 177, -145, -145, 88, -234, 28, - 29, -191, -297, 168, -301, -191, -264, 275, -191, -169, - -171, -172, -173, -194, -217, -418, -174, -8, 543, 540, - 15, -184, -185, -193, -300, -270, -313, -269, 88, 420, - 422, 423, 77, 122, -145, -331, 176, -359, -358, -357, - -340, -342, -343, -344, 89, -331, -336, 380, 379, -325, - -325, -325, -325, -325, -330, -330, -330, -330, 87, 87, - -325, -325, -325, -325, -333, 87, -333, -333, -334, -333, - 87, -334, -335, 87, -335, -370, -145, -367, -366, -364, - -365, 249, 101, 615, 571, 524, 564, 605, 78, -362, - -234, 96, -419, -143, -286, 244, -368, -365, -384, -384, - -384, -286, 91, 90, 91, 90, 91, 90, -112, -59, - -1, 674, 675, 676, 88, 20, -341, -340, -58, 300, - -373, -374, 275, -369, -363, -349, 137, -348, -349, -349, - -384, 88, 30, 127, 127, 127, 127, 524, 227, 33, - -287, 563, 143, 615, 571, -340, -58, 242, 242, -312, - -312, -312, 90, 90, -282, 670, -184, -139, 292, 151, - 281, 281, 239, 239, 294, -191, 305, 308, 306, 307, - 304, 313, 314, 309, 310, 24, 24, 24, 24, 24, - 24, 24, 306, 304, 313, 314, 309, 310, 24, 24, - 24, 24, 24, 24, 305, 308, 306, 307, 304, 313, - 314, 309, 310, 24, 24, 24, 24, 24, 24, 24, - 293, 295, 297, 283, -191, -191, -285, 77, -186, -191, - 27, -300, -413, -191, 285, -191, -283, -283, -191, -283, - -283, -191, -412, 327, -294, 361, 626, 627, 629, 628, - -123, 421, 88, 524, 23, -124, 23, -418, 119, 120, - 121, -209, -151, -155, -151, 142, 263, -418, -218, -419, - -296, 26, 88, 78, -419, 88, 88, -419, -419, 88, - 15, -226, -224, 149, -145, -419, 88, -419, -419, -419, - -210, -145, -145, -145, -145, -419, -419, -419, -419, -419, - -419, -419, -419, -419, -419, -210, 88, 88, 15, -316, - 26, -419, -419, -419, -419, -419, -225, -419, 15, -419, - 78, 88, 162, 88, -419, -419, -419, 88, 88, -419, - -419, 88, 88, -419, 88, 88, 88, -419, 88, 88, - 88, 88, -419, -419, -419, -419, 88, 88, 88, 88, - 88, 88, 88, 88, 88, 88, -419, -95, 548, -419, - -419, 88, -419, 88, -419, -418, 221, -419, -419, -419, - -419, -419, 88, 88, 88, 88, 88, 88, -419, -419, - -419, 88, 88, -419, 88, -419, 88, -419, -399, 632, - 422, -198, -197, -195, 75, 243, 76, -418, -302, -419, - -159, -261, -262, -261, -203, -294, 96, 105, -237, -168, - -170, 15, -136, -216, 89, 88, -330, -241, -247, -280, - -294, 90, 177, -332, 177, -332, 374, 375, -233, 221, - -199, 16, -202, 33, 58, -11, -418, -418, 33, 88, - -187, -189, -188, -190, 67, 71, 73, 68, 69, 70, - 74, -307, 26, -8, -169, -8, -418, -191, -184, -420, - 15, 78, -420, 88, 221, -271, -274, 424, 421, 427, - -384, 90, -111, 88, -357, -344, -238, -140, 41, -337, - 381, -330, 531, -330, -339, 90, -339, 96, 96, 96, - 89, -48, -43, -44, 34, 82, -364, -351, 90, 40, - -351, -351, -294, 89, -234, -139, -191, 143, 77, -368, - -368, -368, -300, -2, 673, 679, 137, 87, 384, 19, - -255, 88, 89, -219, 301, 89, -113, -294, 89, 87, - -349, -349, -294, -418, 239, 32, 32, 615, 571, 563, - -58, -219, -218, -384, -331, 672, 671, 89, 241, 299, - -144, 439, -141, 90, 91, -191, -191, -191, -191, -191, - 230, 227, 407, -408, 311, -408, -408, -408, 407, -408, - -408, 284, 242, -184, -191, 88, -85, 258, 253, -305, - -305, 34, -191, 421, 646, 644, -145, 142, 263, -163, - -155, -151, -314, 177, 347, 262, 345, 341, 361, 352, - 379, 343, 380, 338, 337, 336, -314, -312, -210, -133, - -145, -145, 150, -145, 148, -145, -419, -419, -419, -419, - -419, -230, -145, -145, -145, -419, 177, 347, 15, -145, - -312, -145, -145, -145, -145, -145, -381, -145, -210, -145, - -210, -145, -145, -145, -145, -145, -382, -382, -382, -382, - -382, -210, -210, -210, -210, -418, -294, -98, -97, -96, - 598, 243, -95, -165, -98, -165, -132, -296, -145, -145, - -145, -145, -145, -145, -145, -145, -145, -145, -195, -345, - -345, -345, -265, 88, -276, 23, 15, 58, 58, -168, - -199, -169, -136, -294, -244, 625, -250, 47, -248, -249, - 48, -245, 49, 57, -332, -332, 168, -235, -145, -266, - 77, -267, -275, -218, -213, -215, -214, -418, -254, -419, - -294, -265, -267, -171, -172, -172, -171, -172, 67, 67, - 67, 72, 67, 72, 67, -188, -300, -419, -145, -303, - 78, -169, -169, -193, -300, 168, 421, 425, 426, -357, - -406, 119, 143, 32, 77, 377, 101, -404, 176, 560, - 610, 615, 571, 564, 605, -405, 245, 136, 137, 257, - 26, 42, 89, 88, 89, 88, 89, 89, 88, -288, - -287, -44, -43, -351, -351, 96, -384, 90, 90, 241, - 27, -191, 77, 77, 77, -114, 677, 96, 87, -3, - 82, -145, 87, 20, -340, -218, -375, -326, -376, -327, - -328, -5, -6, -352, -117, 58, 101, -62, 45, 240, - 657, 658, 127, -418, 670, -367, -255, -371, -373, -191, - -148, -418, -147, -149, -156, 166, 167, 262, 343, 344, - -219, -191, -138, 290, 298, 87, -142, 92, -387, 78, - 281, 377, 281, 90, -409, 312, 90, -409, -409, -409, - 90, -409, -409, -191, -85, -48, -191, -283, -283, 34, - -384, -419, -163, -155, -126, 162, 524, -317, 530, -325, - -325, -325, -335, -325, 333, -325, 333, -325, -419, -419, - -419, 88, -419, 23, -419, -145, 88, -122, 467, 88, - 88, -419, 87, 87, -145, -419, -419, -419, 88, -419, - -419, -419, -419, -419, 88, -419, -419, -419, 88, -315, - 616, -419, -419, -419, -419, -419, -419, -419, -419, -419, - -419, -94, -295, -294, -95, 580, 580, -419, -95, -227, - 88, -419, -419, 88, -419, 88, 88, -419, 88, -419, - 88, -419, -419, -419, -419, 88, -196, 23, -196, -196, - -419, -261, -191, -199, -228, 17, -241, 52, 353, -252, - -251, 56, 48, -249, 20, 50, 20, 31, -266, 88, - 151, 88, -419, -419, 88, 58, 221, -419, -199, -182, - -181, 77, 78, -183, 77, -181, 67, 67, -256, 88, - -264, -169, -199, -199, 221, 119, -418, -150, -162, -148, - 13, 90, 90, -384, -403, 661, 662, 32, 96, -351, - -351, 137, 137, -191, 87, -330, 90, -330, 96, 96, - 32, 83, 84, 85, 32, 79, 80, 81, -191, -191, - -191, -191, -372, 87, 20, -145, 87, 151, 89, -255, - -255, 277, 162, -351, 655, 283, 283, -351, -351, -351, - -116, -115, 677, 89, -419, 88, -338, 524, 527, -145, - -157, -157, -256, 89, -380, 524, -386, -294, -294, -294, - -294, 96, 98, -419, 522, 74, 525, -419, -330, -145, - -145, -145, -235, 90, -145, -145, 96, 96, -419, -145, - -210, -145, -419, -179, -178, -180, 638, 119, 32, -314, - -419, -212, 275, -101, -100, -99, 15, -419, -145, -145, - -145, -145, -145, -145, -145, -418, 67, 19, 17, -418, - -418, -303, -228, -229, 18, 20, -242, 54, -240, 53, - -240, -251, 20, 20, 90, 20, 90, 137, -275, -145, - -215, 58, -11, -294, -213, -294, -230, -145, 87, -145, - -159, -199, -199, -145, -205, 491, 493, 494, 495, 492, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, - 496, 470, 108, 110, 109, 471, 472, 473, 347, 518, - 519, 513, 516, 517, 515, 514, 362, 363, 474, 475, - 476, 111, 112, 113, 114, 115, 116, 117, 477, 480, - 478, 481, 482, 483, 488, 489, 484, 485, 486, 487, - 490, 507, 508, 509, 510, 511, 512, 617, 618, 619, - 620, 621, 622, 623, 624, 90, 90, 87, -145, 89, - 89, -256, -371, -59, 89, -257, -255, 96, 89, 278, - -214, -418, 90, -351, -351, -351, 96, 96, -302, -419, - 88, -294, -405, -373, 528, 528, -419, 26, -379, -378, - -296, 87, 78, 63, 523, 526, -419, -419, 88, -419, - -419, -419, 89, 89, -419, -419, -419, 88, -419, -178, - -180, -419, 77, -159, -230, 20, -98, 300, 302, -98, - -419, 88, -419, -419, 88, -419, 88, -419, -419, -258, - -419, -294, 245, 20, 20, -258, -258, -198, -229, -108, - -107, -106, 554, -145, -210, -243, 55, 77, 122, 90, - 90, 90, 13, -213, 221, -235, -255, -176, 384, -230, - -419, -255, 89, 26, 89, 679, 137, 89, -214, -125, - -418, 274, -302, 90, 90, -115, -118, -11, 88, 151, - -255, -191, 63, -145, -210, -419, 77, 535, 638, -93, - -92, -89, 649, 675, -210, -95, -95, -145, -145, -145, - 88, -419, -419, -419, -108, 88, -105, -104, -294, 77, - 122, -267, -294, 89, -419, -418, -235, 89, -239, -11, - 87, -3, 274, -326, -376, -327, -328, -5, -6, -352, - -83, 524, -378, -356, -296, 90, 96, 89, 524, -419, - -419, -91, 145, 647, 613, -146, -157, -154, 220, -419, - 88, -419, 88, -419, 88, -294, 245, -106, 88, 26, - -303, -177, -175, -294, 577, -396, -395, 520, -406, -402, - 119, 143, 101, -404, 615, 571, 128, 129, -83, -145, - 87, -419, -84, 289, 632, -387, 525, -91, 648, 591, - 566, 591, 566, -145, -145, -145, -104, -418, -419, 88, - 23, -318, -61, 588, -393, -394, 77, -397, 390, 587, - 608, 119, 90, 89, -255, 250, -380, 526, 142, -419, - 88, -419, 88, -419, -94, -175, 584, -331, -159, -394, - 77, -393, 77, 14, 13, -4, 678, 89, 291, -91, - -145, -145, -419, -60, 27, -176, -392, 258, 253, 256, - 33, -392, 96, -4, -419, -419, 588, 252, 32, 119, - -159, -179, -178, -178, + -145, -145, -145, -145, -145, -145, -145, -145, -419, -145, + -165, -149, 96, -261, 105, 92, -145, -145, -132, -131, + -296, -301, -292, -293, -131, -132, -132, -131, -131, -145, + -145, -145, -145, -145, -145, -145, -145, -419, -145, -145, + -145, -145, -145, -253, -419, -210, 88, -400, 422, 423, + 634, -303, 275, -302, 26, -211, 90, 90, 15, -263, + 78, -294, -235, -235, 60, -131, -136, -419, -36, 26, + -255, -294, 63, 90, -330, -272, 375, 376, 177, -145, + -145, 88, -234, 28, 29, -191, -297, 168, -301, -191, + -264, 275, -191, -169, -171, -172, -173, -194, -217, -418, + -174, -8, 544, 541, 15, -184, -185, -193, -300, -270, + -313, -269, 88, 421, 423, 424, 77, 122, -145, -331, + 176, -359, -358, -357, -340, -342, -343, -344, 89, -331, + -336, 381, 380, -325, -325, -325, -325, -325, -330, -330, + -330, -330, 87, 87, -325, -325, -325, -325, -333, 87, + -333, -333, -334, -333, 87, -334, -335, 87, -335, -370, + -145, -367, -366, -364, -365, 249, 101, 616, 572, 525, + 565, 606, 78, -362, -234, 96, -419, -143, -286, 244, + -368, -365, -384, -384, -384, -286, 91, 90, 91, 90, + 91, 90, -112, -59, -1, 675, 676, 677, 88, 20, + -341, -340, -58, 300, -373, -374, 275, -369, -363, -349, + 137, -348, -349, -349, -384, 88, 30, 127, 127, 127, + 127, 525, 227, 33, -287, 564, 143, 616, 572, -340, + -58, 242, 242, -312, -312, -312, 90, 90, -282, 671, + -184, -139, 292, 151, 281, 281, 239, 239, 294, -191, + 305, 308, 306, 307, 304, 313, 314, 309, 310, 24, + 24, 24, 24, 24, 24, 24, 306, 304, 313, 314, + 309, 310, 24, 24, 24, 24, 24, 24, 305, 308, + 306, 307, 304, 313, 314, 309, 310, 24, 24, 24, + 24, 24, 24, 24, 293, 295, 297, 283, -191, -191, + -285, 77, -186, -191, 27, -300, -413, -191, 285, -191, + -283, -283, -191, -283, -283, -191, -412, 328, -294, 362, + 627, 628, 630, 629, -123, 422, 88, 525, 23, -124, + 23, -418, 119, 120, 121, -209, -151, -155, -151, 142, + 263, -418, -218, -419, -296, 26, 88, 78, -419, 88, + 88, -419, -419, 88, 15, -226, -224, 149, -145, -419, + 88, -419, -419, -419, -210, -145, -145, -145, -145, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -210, + 88, 88, 15, -316, 26, -419, -419, -419, -419, -419, + -225, -419, 15, -419, 78, 88, 162, 88, -419, -419, + -419, 88, 88, -419, -419, 88, 88, -419, 88, 88, + 88, -419, 88, 88, 88, 88, -419, -419, -419, -419, + 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, + -419, -95, 549, -419, -419, 88, -419, 88, -419, -418, + 221, -419, -419, -419, -419, -419, 88, 88, 88, 88, + 88, 88, -419, -419, -419, 88, 88, -419, 88, -419, + 88, -419, -399, 633, 423, -198, -197, -195, 75, 243, + 76, -418, -302, -419, -159, -261, -262, -261, -203, -294, + 96, 105, -237, -168, -170, 15, -136, -216, 89, 88, + -330, -241, -247, -280, -294, 90, 177, -332, 177, -332, + 375, 376, -233, 221, -199, 16, -202, 33, 58, -11, + -418, -418, 33, 88, -187, -189, -188, -190, 67, 71, + 73, 68, 69, 70, 74, -307, 26, -8, -169, -8, + -418, -191, -184, -420, 15, 78, -420, 88, 221, -271, + -274, 425, 422, 428, -384, 90, -111, 88, -357, -344, + -238, -140, 41, -337, 382, -330, 532, -330, -339, 90, + -339, 96, 96, 96, 89, -48, -43, -44, 34, 82, + -364, -351, 90, 40, -351, -351, -294, 89, -234, -139, + -191, 143, 77, -368, -368, -368, -300, -2, 674, 680, + 137, 87, 385, 19, -255, 88, 89, -219, 301, 89, + -113, -294, 89, 87, -349, -349, -294, -418, 239, 32, + 32, 616, 572, 564, -58, -219, -218, -384, -331, 673, + 672, 89, 241, 299, -144, 440, -141, 90, 91, -191, + -191, -191, -191, -191, 230, 227, 408, -408, 311, -408, + -408, -408, 408, -408, -408, 284, 242, -184, -191, 88, + -85, 258, 253, -305, -305, 34, -191, 422, 647, 645, + -145, 142, 263, -163, -155, -151, -314, 177, 348, 262, + 346, 342, 362, 353, 380, 344, 381, 339, 338, 337, + -314, -312, -210, -133, -145, -145, 150, -145, 148, -145, + -419, -419, -419, -419, -419, -230, -145, -145, -145, -419, + 177, 348, 15, -145, -312, -145, -145, -145, -145, -145, + -381, -145, -210, -145, -210, -145, -145, -145, -145, -145, + -382, -382, -382, -382, -382, -210, -210, -210, -210, -418, + -294, -98, -97, -96, 599, 243, -95, -165, -98, -165, + -132, -296, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -195, -345, -345, -345, -265, 88, -276, 23, + 15, 58, 58, -168, -199, -169, -136, -294, -244, 626, + -250, 47, -248, -249, 48, -245, 49, 57, -332, -332, + 168, -235, -145, -266, 77, -267, -275, -218, -213, -215, + -214, -418, -254, -419, -294, -265, -267, -171, -172, -172, + -171, -172, 67, 67, 67, 72, 67, 72, 67, -188, + -300, -419, -145, -303, 78, -169, -169, -193, -300, 168, + 422, 426, 427, -357, -406, 119, 143, 32, 77, 378, + 101, -404, 176, 561, 611, 616, 572, 565, 606, -405, + 245, 136, 137, 257, 26, 42, 89, 88, 89, 88, + 89, 89, 88, -288, -287, -44, -43, -351, -351, 96, + -384, 90, 90, 241, 27, -191, 77, 77, 77, -114, + 678, 96, 87, -3, 82, -145, 87, 20, -340, -218, + -375, -326, -376, -327, -328, -5, -6, -352, -117, 58, + 101, -62, 45, 240, 658, 659, 127, -418, 671, -367, + -255, -371, -373, -191, -148, -418, -147, -149, -156, 166, + 167, 262, 344, 345, -219, -191, -138, 290, 298, 87, + -142, 92, -387, 78, 281, 378, 281, 90, -409, 312, + 90, -409, -409, -409, 90, -409, -409, -191, -85, -48, + -191, -283, -283, 34, -384, -419, -163, -155, -126, 162, + 525, -317, 531, -325, -325, -325, -335, -325, 334, -325, + 334, -325, -419, -419, -419, 88, -419, 23, -419, -145, + 88, -122, 468, 88, 88, -419, 87, 87, -145, -419, + -419, -419, 88, -419, -419, -419, -419, -419, 88, -419, + -419, -419, 88, -315, 617, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -94, -295, -294, -95, 581, + 581, -419, -95, -227, 88, -419, -419, 88, -419, 88, + 88, -419, 88, -419, 88, -419, -419, -419, -419, 88, + -196, 23, -196, -196, -419, -261, -191, -199, -228, 17, + -241, 52, 354, -252, -251, 56, 48, -249, 20, 50, + 20, 31, -266, 88, 151, 88, -419, -419, 88, 58, + 221, -419, -199, -182, -181, 77, 78, -183, 77, -181, + 67, 67, -256, 88, -264, -169, -199, -199, 221, 119, + -418, -150, -162, -148, 13, 90, 90, -384, -403, 662, + 663, 32, 96, -351, -351, 137, 137, -191, 87, -330, + 90, -330, 96, 96, 32, 83, 84, 85, 32, 79, + 80, 81, -191, -191, -191, -191, -372, 87, 20, -145, + 87, 151, 89, -255, -255, 277, 162, -351, 656, 283, + 283, -351, -351, -351, -116, -115, 678, 89, -419, 88, + -338, 525, 528, -145, -157, -157, -256, 89, -380, 525, + -386, -294, -294, -294, -294, 96, 98, -419, 523, 74, + 526, -419, -330, -145, -145, -145, -235, 90, -145, -145, + 96, 96, -419, -145, -210, -145, -419, -179, -178, -180, + 639, 119, 32, -314, -419, -212, 275, -101, -100, -99, + 15, -419, -145, -145, -145, -145, -145, -145, -145, -418, + 67, 19, 17, -418, -418, -303, -228, -229, 18, 20, + -242, 54, -240, 53, -240, -251, 20, 20, 90, 20, + 90, 137, -275, -145, -215, 58, -11, -294, -213, -294, + -230, -145, 87, -145, -159, -199, -199, -145, -205, 492, + 494, 495, 496, 493, 498, 499, 500, 501, 502, 503, + 504, 505, 506, 507, 497, 471, 108, 110, 109, 472, + 473, 474, 348, 519, 520, 514, 517, 518, 516, 515, + 363, 364, 475, 476, 477, 111, 112, 113, 114, 115, + 116, 117, 478, 481, 479, 482, 483, 484, 489, 490, + 485, 486, 487, 488, 491, 508, 509, 510, 511, 512, + 513, 618, 619, 620, 621, 622, 623, 624, 625, 90, + 90, 87, -145, 89, 89, -256, -371, -59, 89, -257, + -255, 96, 89, 278, -214, -418, 90, -351, -351, -351, + 96, 96, -302, -419, 88, -294, -405, -373, 529, 529, + -419, 26, -379, -378, -296, 87, 78, 63, 524, 527, + -419, -419, 88, -419, -419, -419, 89, 89, -419, -419, + -419, 88, -419, -178, -180, -419, 77, -159, -230, 20, + -98, 300, 302, -98, -419, 88, -419, -419, 88, -419, + 88, -419, -419, -258, -419, -294, 245, 20, 20, -258, + -258, -198, -229, -108, -107, -106, 555, -145, -210, -243, + 55, 77, 122, 90, 90, 90, 13, -213, 221, -235, + -255, -176, 385, -230, -419, -255, 89, 26, 89, 680, + 137, 89, -214, -125, -418, 274, -302, 90, 90, -115, + -118, -11, 88, 151, -255, -191, 63, -145, -210, -419, + 77, 536, 639, -93, -92, -89, 650, 676, -210, -95, + -95, -145, -145, -145, 88, -419, -419, -419, -108, 88, + -105, -104, -294, 77, 122, -267, -294, 89, -419, -418, + -235, 89, -239, -11, 87, -3, 274, -326, -376, -327, + -328, -5, -6, -352, -83, 525, -378, -356, -296, 90, + 96, 89, 525, -419, -419, -91, 145, 648, 614, -146, + -157, -154, 220, -419, 88, -419, 88, -419, 88, -294, + 245, -106, 88, 26, -303, -177, -175, -294, 578, -396, + -395, 521, -406, -402, 119, 143, 101, -404, 616, 572, + 128, 129, -83, -145, 87, -419, -84, 289, 633, -387, + 526, -91, 649, 592, 567, 592, 567, -145, -145, -145, + -104, -418, -419, 88, 23, -318, -61, 589, -393, -394, + 77, -397, 391, 588, 609, 119, 90, 89, -255, 250, + -380, 527, 142, -419, 88, -419, 88, -419, -94, -175, + 585, -331, -159, -394, 77, -393, 77, 14, 13, -4, + 679, 89, 291, -91, -145, -145, -419, -60, 27, -176, + -392, 258, 253, 256, 33, -392, 96, -4, -419, -419, + 589, 252, 32, 119, -159, -179, -178, -178, } var yyDef = [...]int{ - 925, -2, -2, 927, 2, 4, 5, 6, 7, 8, + 927, -2, -2, 929, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 73, 75, 76, 925, 925, 925, 0, 925, - 0, 0, 925, -2, -2, 925, 1542, 0, 925, 0, - 0, 0, 0, 0, -2, 838, 844, 0, 853, -2, - 0, 0, 925, 925, 2112, 2112, 920, 0, 0, 0, - 0, 0, 925, 925, 925, 925, 1399, 53, 925, 0, - 88, 89, 873, 874, 875, 68, 0, 2110, 926, 1, - 3, 74, 78, 0, 0, 0, 61, 1408, 0, 81, - 0, 0, 929, 0, 0, 1525, 925, 925, 0, 129, - 130, 131, 0, 0, 0, 925, 0, -2, 135, -2, + 39, 40, 73, 75, 76, 927, 927, 927, 0, 927, + 0, 0, 927, -2, -2, 927, 1544, 0, 927, 0, + 0, 0, 0, 0, -2, 840, 846, 0, 855, -2, + 0, 0, 927, 927, 2115, 2115, 922, 0, 0, 0, + 0, 0, 927, 927, 927, 927, 1401, 53, 927, 0, + 88, 89, 875, 876, 877, 68, 0, 2113, 928, 1, + 3, 74, 78, 0, 0, 0, 61, 1410, 0, 81, + 0, 0, 931, 0, 0, 1527, 927, 927, 0, 129, + 130, 131, 0, 0, 0, 927, 0, -2, 135, -2, 164, 165, 166, 0, 171, 637, 527, 579, 525, 564, -2, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 403, 403, 0, 0, -2, - 513, 513, 513, 1527, 0, 0, 0, 561, 465, 403, + 513, 513, 513, 1529, 0, 0, 0, 561, 465, 403, 403, 403, 0, 403, 403, 403, 403, 0, 0, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, - 403, 403, 403, 403, 403, 403, 1426, 170, 1543, 1540, - 1541, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, - 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, - 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, - 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, - 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, - 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, - 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, - 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, - 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, - 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, - 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, - 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, - 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, - 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, - 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, - 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, - 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, - 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, - 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, - 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, - 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, - 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, - 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, - 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, - 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, - 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, - 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, - 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, - 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, - 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, - 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, - 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, - 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, - 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, - 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, - 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, - 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, - 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, - 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, - 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, - 0, 1519, 0, 750, 1028, 0, 0, 755, 0, 0, - 758, 759, 827, 761, 762, 827, 0, 827, 827, 827, - 827, 0, 0, 0, 772, 0, 0, 0, 0, 824, - 0, 788, 789, 0, 824, 824, 824, 0, 798, 830, - 0, 0, 804, 827, 827, 807, 808, 2113, 0, 2113, - 2113, 1510, 0, 821, 819, 833, 834, 43, 837, 840, - 841, 842, 843, 846, 0, 857, 860, 1536, 1537, 0, - 862, 869, 886, 887, 0, 921, 922, 48, 1176, 0, - 1050, 1055, 1066, 1081, 1082, 1083, 1084, 1085, 1087, 1088, - 1089, 0, 0, 0, 0, 1094, 1095, 0, 0, 0, - 0, 0, 1157, 1103, 0, 0, 0, 0, 1372, 0, - 0, 1333, 1333, 1191, 1333, 1335, 1335, 1750, 1886, 1894, - 2016, 1712, 1717, 1718, 1719, 2009, 2010, 2011, 2012, 2052, - 2053, 2057, 1810, 0, 0, 0, 2109, 1847, 1855, 1856, - 1880, 1981, 2037, 1729, 1875, 1946, 1807, 1829, 1830, 1963, - 1964, 1851, 1852, 1833, 1845, 1848, 1836, 1837, 1839, 1841, - 1846, 1853, 1859, 1838, 1858, 1857, 0, 1834, 1835, 1840, - 1850, 1854, 1842, 1843, 1844, 1849, 1860, 0, 0, 0, - 0, 0, 1272, 1273, 1274, 1275, 0, 0, 0, 0, - 0, 0, 0, 295, 296, 1385, 1386, 46, 47, 1175, - 1506, 1335, 1335, 1335, 1335, 1335, 1117, 1118, 1119, 1120, - 1121, 1145, 1146, 1152, 1153, 1958, 1959, 1960, 1961, 1791, - 2046, 1799, 1800, 1941, 1942, 1812, 1813, 2084, 2085, -2, - -2, -2, 236, 237, 238, 239, 240, 241, 242, 243, - 0, 1754, 2027, 2028, 232, 0, 0, 300, 301, 297, - 298, 299, 1159, 1160, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 2112, 0, 896, 0, - 0, 0, 0, 0, 1408, 0, 1400, 1399, 66, 0, - -2, 0, 0, 0, 0, 50, 0, 55, 985, 928, - 80, 79, 1457, 0, 0, 0, 62, 1409, 70, 72, - 1410, 0, 930, 931, 0, 961, 965, 0, 0, 0, - 1526, 1525, 1525, 105, 0, 0, 106, 126, 127, 128, - 0, 0, 112, 113, 1512, 1513, 132, 0, 0, 182, - 183, 0, 44, 430, 0, 178, 947, 0, 423, 362, - 0, 1426, 0, 0, 0, 0, 0, 925, 0, 1520, - 159, 160, 167, 168, 169, 403, 403, 403, 576, 0, - 0, 170, 170, 534, 535, 536, 0, 0, -2, 428, - 0, 514, 0, 0, 417, 417, 421, 419, 420, 0, - 0, 0, 0, 0, 0, 0, 0, 553, 0, 554, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 698, - 0, 404, 0, 574, 575, 466, 0, 0, 0, 0, - 0, 0, 0, 0, 1528, 1529, 0, 551, 552, 0, - 0, 0, 403, 403, 0, 0, 0, 0, 403, 403, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 158, 1448, - 0, 0, 0, 0, 0, -2, 0, 742, 0, 0, - 0, 1521, 1521, 0, 749, 0, 751, 1439, 753, 756, - 757, 760, 0, 0, 763, 0, 824, 824, 822, 823, - 765, 766, 767, 768, 827, 0, 0, 412, 413, 414, - 824, 827, 0, 827, 827, 827, 827, 824, 824, 824, - 827, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2113, 830, 827, 827, 0, 827, 0, 799, 0, 800, - 801, 802, 805, 806, 809, 2114, 2115, 1538, 1539, 1546, - 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, - 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, - 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, - 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, - 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, - 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, - 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, - 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, - 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, - 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, - 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, - 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, - 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, - 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, - 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, - 1697, 1698, 1699, 1700, 2113, 2113, 813, 817, 1511, 839, - 845, 847, 848, 0, 0, 858, 861, 880, 52, 1798, - 868, 52, 870, 871, 872, 899, 900, 905, 0, 0, - 0, 0, 911, 912, 913, 914, 0, 0, 917, 918, - 919, 0, 0, 0, 0, 0, 1048, 0, 0, 1165, - 1166, 1167, 1168, 1169, 1170, 1171, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1067, 1068, 0, 0, 0, 1090, 1091, - 1092, 1093, 1096, 0, 1108, 0, 1110, 1381, -2, 0, - 0, 0, 1101, 1102, 0, 0, 0, 0, 0, 0, - 0, 1373, 0, 0, 1189, 0, 1190, 1192, 1193, 0, - 1194, 935, 935, 935, 935, 935, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 935, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1531, 146, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 945, 0, 0, 945, - 945, 0, 0, 225, 226, 227, 228, 229, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 244, 245, 246, 247, 248, 249, 302, 250, - 251, 252, 1175, 0, 0, 0, 49, 888, 889, 0, - 1011, 1531, 0, 0, 0, 941, 0, 60, 69, 71, - 1408, 64, 1408, 0, 0, 0, -2, -2, 948, 954, - 955, 956, 957, 958, 57, 2111, 58, 0, 77, 0, - 51, 0, 0, 0, 0, 376, 1460, 0, 0, 1401, - 1402, 1405, 0, 962, 1892, 966, 0, 968, 969, 0, - 0, 103, 0, 1027, 0, 0, 0, 114, 0, 116, - 117, 0, 0, 0, 387, 1514, 1515, 1516, -2, 410, - 0, 387, 371, 310, 311, 312, 362, 314, 362, 362, - 362, 362, 376, 376, 376, 376, 345, 346, 347, 348, - 349, 0, 0, 331, 362, 362, 362, 362, 352, 353, - 354, 355, 356, 357, 358, 359, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 364, 364, 364, 364, 364, - 368, 368, 0, 45, 0, 952, 953, 391, 0, 1405, - 0, 0, 1448, 1523, 1533, 0, 0, 0, 1523, 137, - 0, 0, 0, 577, 648, 528, 565, 578, 0, 531, - 532, -2, 0, 0, 513, 0, 515, 0, 411, 0, - -2, 0, 421, 0, 417, 421, 418, 421, 409, 422, - 555, 556, 557, 0, 559, 560, 678, 997, 0, 0, - 0, 0, 0, 684, 685, 686, 0, 688, 689, 690, - 691, 692, 693, 694, 695, 696, 697, 566, 567, 568, - 569, 570, 571, 572, 573, 0, 0, 0, 0, 515, - 0, 562, 0, 0, 467, 468, 469, 0, 0, 472, - 473, 474, 475, 0, 0, 478, 479, 480, 1014, 1015, - 481, 482, 507, 508, 509, 483, 484, 485, 486, 487, - 488, 489, 501, 502, 503, 504, 505, 506, 490, 491, - 492, 493, 494, 495, 498, 0, 152, 1430, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1521, 0, 0, 0, 0, 944, 1029, 1544, 1545, 752, - 0, 1440, 0, 1443, 1444, 1445, 1446, 1447, 828, 829, - 0, 415, 416, 827, 827, 769, 814, 0, 827, 773, - 815, 774, 776, 775, 777, 790, 791, 827, 780, 825, - 826, 781, 782, 783, 784, 785, 786, 787, 810, 792, - 793, 794, 797, 795, 796, 831, 0, 835, 836, 811, - 812, 0, 0, 851, 852, 0, 859, 883, 881, 882, - 884, 876, 877, 878, 879, 0, 885, 0, 0, 902, - 99, 907, 908, 909, 910, 923, 916, 1177, 1045, 1046, - 1047, 0, 1049, 1052, 0, 1161, 1163, 1054, 1056, 1172, - 1173, 1174, 0, 0, 0, 0, 0, 1060, 1064, 1069, - 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, - 1080, 1086, 1349, 1350, 1351, 1105, 303, 304, 0, 1106, - 0, 0, 0, 0, 0, 0, 0, 1176, 1107, 0, - 959, 0, 0, 1379, 1376, 0, 0, 0, 1334, 1336, - 0, 0, 0, 0, 936, 937, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1312, 1313, 1314, 1315, 1316, 1317, - 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, - 1328, 1329, 1330, 1331, 1332, 1352, 0, 0, 0, 0, - 0, 1372, 0, 1112, 1113, 1114, 0, 0, 0, 0, - 0, 0, 1232, 0, 0, 0, 0, 1532, 0, 147, - 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1276, 1277, 1278, - 1279, 42, 0, 0, 0, 946, 1383, 0, -2, -2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1301, 0, 0, 0, 0, 0, 0, - 1504, 0, 0, 891, 892, 894, 0, 1031, 0, 1012, - 0, 0, 897, 898, 0, 940, 0, 943, 63, 65, - 0, 970, 949, 59, 54, 0, 0, 989, 1458, 376, - 1480, 0, 385, 385, 382, 1411, 1412, 0, 1404, 1406, - 1407, 82, 967, 963, 0, 1043, 0, 0, 1026, 0, - 973, 975, 976, 977, 1009, 0, 980, 981, 0, 0, - 0, 0, 0, 101, 1028, 107, 0, 115, 0, 0, - 120, 121, 108, 109, 110, 111, 0, 637, -2, 462, - 184, 186, 187, 188, 179, -2, 374, 372, 373, 313, - 376, 376, 339, 340, 341, 342, 343, 344, 0, 0, - 332, 333, 334, 335, 324, 0, 325, 326, 327, 366, - 0, 328, 329, 0, 330, 429, 0, 1413, 392, 393, - 395, 403, 0, 398, 399, 0, 403, 403, 0, 424, - 425, 0, 1405, 1430, 0, 0, 0, 1534, 1533, 1533, - 1533, 0, 172, 173, 174, 175, 176, 177, 673, 0, - 0, 649, 671, 672, 170, 0, 0, 180, 517, 516, - 0, 705, 0, 427, 0, 0, 421, 421, 406, 407, - 558, 0, 0, 680, 681, 682, 683, 0, 0, 0, - 544, 456, 0, 545, 546, 515, 517, 0, 0, 387, - 470, 471, 476, 477, 496, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 591, 592, 593, 596, - 598, 599, 600, 519, 606, 595, 597, 601, 602, 603, - 519, 607, 608, 610, 611, 612, 519, 618, 609, 613, - 614, 615, 519, 619, 620, 621, 622, 625, 627, 628, - 629, 519, 635, 624, 626, 630, 631, 632, 519, 636, - 1427, 1428, 1429, 0, 0, 743, 0, 0, 453, 97, - 1522, 748, 1441, 754, 1442, 824, 779, 816, 824, 771, - 778, 803, 849, 850, 855, 863, 864, 865, 866, 867, - 906, 0, 0, 0, 0, 915, 0, 0, 1053, 1162, - 1164, 1057, 0, 1061, 1065, 0, 0, 0, 1111, 1109, - 1383, 0, 0, 0, 1158, 0, 0, 1180, 1181, 0, - 0, 0, 1377, 0, 0, 1187, 0, 1337, 1338, 1195, - 0, 0, 0, 0, 0, 1201, 1202, 1203, 1204, 1205, - 1206, 1207, 1208, 1209, 1210, 1399, 0, 0, 0, 0, - 0, 1216, 1217, 1218, 1219, 1220, 0, 1222, 0, 1223, - 0, 0, 0, 0, 1230, 1231, 1233, 0, 0, 1236, - 1237, 0, 0, 1238, 0, 0, 0, 1242, 0, 0, - 0, 0, 1251, 1252, 1253, 1254, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1265, 1266, 0, 1140, - 0, 0, 1140, 0, 1178, 945, 0, 1339, 1340, 1341, - 1342, 1343, 0, 0, 0, 0, 0, 0, 1299, 1300, - 1302, 0, 0, 1305, 0, 1307, 0, 1505, 890, 893, - 895, 983, 1032, 1033, 0, 0, 0, 0, 1013, 1530, - 938, 939, 942, 991, 0, 1387, 0, 0, 970, 1043, - 971, 0, 950, 56, 986, 0, 1462, 1461, 1474, 1487, - 385, 385, 379, 380, 386, 381, 383, 384, 1403, 0, - 1408, 0, 1498, 0, 0, 1490, 0, 0, 0, 0, - 0, 0, 0, 0, 1016, 0, 0, 1019, 0, 0, - 0, 0, 1010, 981, 0, 982, 0, -2, 0, 0, - 95, 96, 0, 0, 0, 118, 119, 0, 0, 125, - 388, 389, 161, 170, 464, 185, 437, 0, 0, 309, - 375, 336, 337, 338, 0, 360, 0, 0, 0, 0, - 458, 133, 1417, 1416, 403, 403, 394, 0, 397, 0, - 0, 0, 1535, 363, 426, 0, 151, 0, 0, 0, - 0, 0, 157, 643, 0, 0, 650, 0, 0, 0, - 526, 0, 537, 538, 0, 677, -2, 739, 391, 0, - 405, 408, 998, 0, 0, 539, 0, 542, 543, 457, - 517, 548, 549, 563, 550, 499, 500, 497, 0, 0, - 1449, 1450, 1455, 1453, 1454, 138, 584, 586, 585, 589, - 0, 0, 0, 521, 0, 521, 521, 521, 0, 521, - 521, 582, 0, 453, 1413, 0, 747, 454, 455, 827, - 827, 901, 100, 0, 904, 0, 0, 0, 0, 1058, - 1062, 1344, 1370, 362, 362, 1357, 362, 368, 1360, 362, - 1362, 362, 1365, 362, 1368, 1369, 0, 0, 0, 960, - 0, 0, 1186, 1380, 0, 0, 1196, 1197, 1198, 1199, - 1200, 1374, 0, 0, 0, 1215, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 149, 150, 0, 0, - 0, 0, 0, 0, 1310, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1135, 1139, 0, 1141, 1142, - 0, 0, 1268, 0, 0, 1280, 0, 1384, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1034, 1039, - 1039, 1039, 0, 0, 0, 1517, 1518, 1388, 1389, 1043, - 1390, 972, 951, 990, 1480, 0, 1473, 0, -2, 1482, - 0, 0, 0, 1488, 377, 378, 964, 83, 1044, 86, - 0, 1498, 1507, 0, 1489, 1500, 1502, 0, 0, 0, - 1494, 0, 1043, 974, 1005, 1007, 0, 1002, 1017, 1018, - 1020, 0, 1022, 0, 1024, 1025, 985, 979, 0, 103, - 0, 1043, 1043, 102, 0, 1030, 122, 123, 124, 463, - 189, 194, 0, 0, 0, 199, 0, 201, 0, 0, - 0, 206, 207, 403, 403, 438, 0, 306, 308, 0, - 0, 192, 376, 0, 376, 0, 367, 369, 0, 439, - 459, 1414, 1415, 0, 0, 396, 400, 401, 402, 0, - 1524, 153, 0, 0, 0, 646, 0, 674, 0, 0, - 0, 0, 0, 0, 181, 518, 706, 707, 708, 709, - 710, 711, 712, 713, 714, 0, 403, 0, 0, 0, - 403, 403, 403, 0, 731, 390, 0, 0, 702, 699, - 540, 0, 230, 231, 233, 0, 0, 0, 0, 0, - 547, 985, 1431, 1432, 1433, 0, 1452, 1456, 141, 0, - 0, 0, 0, 594, 604, 0, 520, 605, 616, 617, - 623, 633, 634, 744, 745, 746, 98, 764, 770, 903, - 924, 1051, 1059, 1063, 0, 0, 0, 0, 1371, 1355, - 376, 1358, 1359, 1361, 1363, 1364, 1366, 1367, 1099, 1100, - 1104, 0, 1183, 0, 1185, 1378, 0, 1408, 0, 0, - 0, 1214, 0, 0, 0, 1225, 1224, 1226, 0, 1228, - 1229, 1234, 1235, 1239, 0, 1241, 1243, 1244, 0, 0, - 0, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, - 1264, 0, 1133, 1136, 1267, 1143, 1144, 1149, 1270, 0, - 0, 1179, 1282, 0, 1287, 0, 0, 1293, 0, 1297, - 0, 1303, 1304, 1306, 1308, 0, 0, 0, 0, 0, - 1011, 992, 67, 1390, 1392, 0, 1467, 1465, 1465, 1475, - 1476, 0, 0, 1483, 0, 0, 0, 0, 87, 0, - 0, 0, 1503, 0, 0, 0, 0, 104, 1399, 999, - 1006, 0, 0, 1000, 0, 1001, 1021, 1023, 978, 0, - 1043, 1043, 93, 94, 0, 195, 0, 197, 223, 224, - 0, 200, 202, 203, 204, 210, 211, 212, 205, 0, - 0, 305, 307, 0, 0, 350, 361, 351, 0, 0, - 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 985, 154, - 155, 156, 638, 0, 648, 0, 987, 0, 641, 0, - 529, 0, 0, 0, 403, 403, 403, 0, 0, 0, - 0, 716, 0, 0, 679, 0, 687, 0, 0, 0, - 234, 235, 0, 1451, 583, 0, 139, 140, 0, 0, - 588, 522, 523, 1097, 0, 0, 0, 1098, 1356, 0, - 0, 0, 0, 1375, 0, 0, 0, 0, 1221, 0, - 0, 0, 1247, 0, 0, 0, 668, 669, 0, 1311, - 1138, 1399, 0, 1140, 1150, 1151, 0, 1140, 1281, 0, - 0, 0, 0, 0, 0, 0, 1040, 0, 0, 0, - 0, 1031, 1392, 1397, 0, 0, 1470, 0, 1463, 1466, - 1464, 1477, 0, 0, 1484, 0, 1486, 0, 1508, 1509, - 1501, 0, 1493, 1496, 1492, 1495, 1408, 1003, 0, 1008, - 0, 1399, 92, 0, 198, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 208, 209, 0, 0, 365, - 370, 0, 0, 0, 639, 0, 988, 651, 642, 0, - 729, 0, 733, 0, 0, 0, 736, 737, 738, 715, - 0, 719, 431, 703, 700, 701, 541, 0, 142, 143, - 0, 0, 0, 1345, 0, 1348, 1182, 1184, 0, 1211, - 1212, 1213, 1353, 1354, 1227, 1240, 1245, 0, 1248, 0, - 0, 1249, 0, 670, 1129, 0, 0, 1147, 1148, 0, - 1283, 0, 1288, 1289, 0, 1294, 0, 1298, 1309, 0, - 1036, 993, 994, 1041, 1042, 0, 0, 984, 1397, 85, - 1398, 1395, 0, 1393, 1391, 1459, 0, 1468, 1469, 1478, - 1479, 1485, 0, 1491, 0, 90, 0, 0, 0, 1408, - 196, 0, 215, 0, 647, 0, 650, 640, 727, 728, - 0, 740, 732, 734, 735, 717, -2, 1434, 0, 0, - 0, 590, 1346, 0, 0, 1250, 0, 666, 667, 1137, - 1130, 0, 1115, 1116, 1134, 1269, 1271, 0, 0, 0, - 0, 1035, 1037, 1038, 84, 0, 1394, 1155, 0, 1471, - 1472, 1499, 1497, 1004, 1011, 0, 91, 444, 437, 1434, - 0, 0, 0, 720, 721, 722, 723, 724, 725, 726, - 580, 1436, 144, 145, 510, 511, 512, 138, 0, 1188, - 1246, 1131, 0, 0, 0, 0, 1127, 1128, 0, 1284, - 0, 1290, 0, 1295, 0, 995, 996, 1396, 0, 0, - 652, 0, 654, 0, -2, 432, 445, 0, 190, 216, - 217, 0, 0, 220, 221, 222, 213, 214, 134, 0, - 0, 741, 0, 1437, 1438, 141, 0, 0, 1122, 1123, - 1124, 1125, 1126, 0, 0, 0, 1156, 1135, 653, 0, - 0, 387, 0, 663, 433, 434, 0, 440, 441, 442, - 443, 218, 219, 675, 0, 0, 587, 1347, 0, 1285, - 0, 1291, 0, 1296, 0, 655, 656, 664, 0, 435, - 0, 436, 0, 0, 0, 644, 0, 675, 1435, 1132, - 0, 0, 1154, 0, 665, 661, 446, 448, 449, 0, - 0, 447, 676, 645, 1286, 1292, 0, 450, 451, 452, - 657, 658, 659, 660, + 403, 403, 403, 403, 403, 403, 1428, 170, 1545, 1542, + 1543, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, + 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, + 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, + 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, + 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, + 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, + 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, + 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, + 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, + 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, + 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, + 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, + 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, + 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, + 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, + 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, + 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, + 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, + 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, + 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, + 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, + 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, + 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, + 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, + 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, + 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, + 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, + 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, + 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, + 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, + 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, + 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, + 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, + 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, + 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, + 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, + 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, + 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, + 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, + 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, + 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, + 2112, 0, 1521, 0, 750, 1030, 0, 0, 755, 0, + 0, 758, 759, 829, 761, 762, 829, 0, 829, 829, + 829, 829, 0, 0, 0, 772, 0, 0, 0, 0, + 826, 0, 788, 789, 0, 826, 826, 826, 0, 0, + 800, 832, 0, 0, 806, 829, 829, 809, 810, 2116, + 0, 2116, 2116, 1512, 0, 823, 821, 835, 836, 43, + 839, 842, 843, 844, 845, 848, 0, 859, 862, 1538, + 1539, 0, 864, 871, 888, 889, 0, 923, 924, 48, + 1178, 0, 1052, 1057, 1068, 1083, 1084, 1085, 1086, 1087, + 1089, 1090, 1091, 0, 0, 0, 0, 1096, 1097, 0, + 0, 0, 0, 0, 1159, 1105, 0, 0, 0, 0, + 1374, 0, 0, 1335, 1335, 1193, 1335, 1337, 1337, 1752, + 1888, 1896, 2018, 1714, 1719, 1720, 1721, 2011, 2012, 2013, + 2014, 2054, 2055, 2059, 1812, 0, 0, 0, 2112, 1849, + 1857, 1858, 1882, 1983, 2039, 1731, 1877, 1948, 1809, 1831, + 1832, 1965, 1966, 1853, 1854, 1835, 1847, 1850, 1838, 1839, + 1841, 1843, 1848, 1855, 1861, 1840, 1860, 1859, 0, 1836, + 1837, 1842, 1852, 1856, 1844, 1845, 1846, 1851, 1862, 0, + 0, 0, 0, 0, 1274, 1275, 1276, 1277, 0, 0, + 0, 0, 0, 0, 0, 295, 296, 1387, 1388, 46, + 47, 1177, 1508, 1337, 1337, 1337, 1337, 1337, 1119, 1120, + 1121, 1122, 1123, 1147, 1148, 1154, 1155, 1960, 1961, 1962, + 1963, 1793, 2048, 1801, 1802, 1943, 1944, 1814, 1815, 2087, + 2088, -2, -2, -2, 236, 237, 238, 239, 240, 241, + 242, 243, 0, 1756, 2029, 2030, 232, 0, 0, 300, + 301, 297, 298, 299, 1161, 1162, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 2115, 0, + 898, 0, 0, 0, 0, 0, 1410, 0, 1402, 1401, + 66, 0, -2, 0, 0, 0, 0, 50, 0, 55, + 987, 930, 80, 79, 1459, 0, 0, 0, 62, 1411, + 70, 72, 1412, 0, 932, 933, 0, 963, 967, 0, + 0, 0, 1528, 1527, 1527, 105, 0, 0, 106, 126, + 127, 128, 0, 0, 112, 113, 1514, 1515, 132, 0, + 0, 182, 183, 0, 44, 430, 0, 178, 949, 0, + 423, 362, 0, 1428, 0, 0, 0, 0, 0, 927, + 0, 1522, 159, 160, 167, 168, 169, 403, 403, 403, + 576, 0, 0, 170, 170, 534, 535, 536, 0, 0, + -2, 428, 0, 514, 0, 0, 417, 417, 421, 419, + 420, 0, 0, 0, 0, 0, 0, 0, 0, 553, + 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 698, 0, 404, 0, 574, 575, 466, 0, 0, + 0, 0, 0, 0, 0, 0, 1530, 1531, 0, 551, + 552, 0, 0, 0, 403, 403, 0, 0, 0, 0, + 403, 403, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 158, 1450, 0, 0, 0, 0, 0, -2, 0, 742, + 0, 0, 0, 1523, 1523, 0, 749, 0, 751, 1441, + 753, 756, 757, 760, 0, 0, 763, 0, 826, 826, + 824, 825, 765, 766, 767, 768, 829, 0, 0, 412, + 413, 414, 826, 829, 0, 829, 829, 829, 829, 826, + 826, 826, 829, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2116, 832, 829, 829, 0, 829, 796, 0, + 801, 0, 802, 803, 804, 807, 808, 811, 2117, 2118, + 1540, 1541, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, + 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, + 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, + 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, + 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, + 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, + 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, + 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, + 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, + 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, + 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, + 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, + 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, + 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, + 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, + 1696, 1697, 1698, 1699, 1700, 1701, 1702, 2116, 2116, 815, + 819, 1513, 841, 847, 849, 850, 0, 0, 860, 863, + 882, 52, 1800, 870, 52, 872, 873, 874, 901, 902, + 907, 0, 0, 0, 0, 913, 914, 915, 916, 0, + 0, 919, 920, 921, 0, 0, 0, 0, 0, 1050, + 0, 0, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1069, 1070, 0, 0, + 0, 1092, 1093, 1094, 1095, 1098, 0, 1110, 0, 1112, + 1383, -2, 0, 0, 0, 1103, 1104, 0, 0, 0, + 0, 0, 0, 0, 1375, 0, 0, 1191, 0, 1192, + 1194, 1195, 0, 1196, 937, 937, 937, 937, 937, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 937, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1533, 146, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 947, + 0, 0, 947, 947, 0, 0, 225, 226, 227, 228, + 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 244, 245, 246, 247, 248, + 249, 302, 250, 251, 252, 1177, 0, 0, 0, 49, + 890, 891, 0, 1013, 1533, 0, 0, 0, 943, 0, + 60, 69, 71, 1410, 64, 1410, 0, 0, 0, -2, + -2, 950, 956, 957, 958, 959, 960, 57, 2114, 58, + 0, 77, 0, 51, 0, 0, 0, 0, 376, 1462, + 0, 0, 1403, 1404, 1407, 0, 964, 1894, 968, 0, + 970, 971, 0, 0, 103, 0, 1029, 0, 0, 0, + 114, 0, 116, 117, 0, 0, 0, 387, 1516, 1517, + 1518, -2, 410, 0, 387, 371, 310, 311, 312, 362, + 314, 362, 362, 362, 362, 376, 376, 376, 376, 345, + 346, 347, 348, 349, 0, 0, 331, 362, 362, 362, + 362, 352, 353, 354, 355, 356, 357, 358, 359, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 364, 364, + 364, 364, 364, 368, 368, 0, 45, 0, 954, 955, + 391, 0, 1407, 0, 0, 1450, 1525, 1535, 0, 0, + 0, 1525, 137, 0, 0, 0, 577, 648, 528, 565, + 578, 0, 531, 532, -2, 0, 0, 513, 0, 515, + 0, 411, 0, -2, 0, 421, 0, 417, 421, 418, + 421, 409, 422, 555, 556, 557, 0, 559, 560, 678, + 999, 0, 0, 0, 0, 0, 684, 685, 686, 0, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, + 566, 567, 568, 569, 570, 571, 572, 573, 0, 0, + 0, 0, 515, 0, 562, 0, 0, 467, 468, 469, + 0, 0, 472, 473, 474, 475, 0, 0, 478, 479, + 480, 1016, 1017, 481, 482, 507, 508, 509, 483, 484, + 485, 486, 487, 488, 489, 501, 502, 503, 504, 505, + 506, 490, 491, 492, 493, 494, 495, 498, 0, 152, + 1432, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1523, 0, 0, 0, 0, 946, 1031, + 1546, 1547, 752, 0, 1442, 0, 1445, 1446, 1447, 1448, + 1449, 830, 831, 0, 415, 416, 829, 829, 769, 816, + 0, 829, 773, 817, 774, 776, 775, 777, 790, 791, + 829, 780, 827, 828, 781, 782, 783, 784, 785, 786, + 787, 812, 792, 793, 794, 799, 795, 797, 798, 833, + 0, 837, 838, 813, 814, 0, 0, 853, 854, 0, + 861, 885, 883, 884, 886, 878, 879, 880, 881, 0, + 887, 0, 0, 904, 99, 909, 910, 911, 912, 925, + 918, 1179, 1047, 1048, 1049, 0, 1051, 1054, 0, 1163, + 1165, 1056, 1058, 1174, 1175, 1176, 0, 0, 0, 0, + 0, 1062, 1066, 1071, 1072, 1073, 1074, 1075, 1076, 1077, + 1078, 1079, 1080, 1081, 1082, 1088, 1351, 1352, 1353, 1107, + 303, 304, 0, 1108, 0, 0, 0, 0, 0, 0, + 0, 1178, 1109, 0, 961, 0, 0, 1381, 1378, 0, + 0, 0, 1336, 1338, 0, 0, 0, 0, 938, 939, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1314, 1315, + 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, + 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1354, + 0, 0, 0, 0, 0, 1374, 0, 1114, 1115, 1116, + 0, 0, 0, 0, 0, 0, 1234, 0, 0, 0, + 0, 1534, 0, 147, 148, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1278, 1279, 1280, 1281, 42, 0, 0, 0, 948, + 1385, 0, -2, -2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1303, 0, 0, + 0, 0, 0, 0, 1506, 0, 0, 893, 894, 896, + 0, 1033, 0, 1014, 0, 0, 899, 900, 0, 942, + 0, 945, 63, 65, 0, 972, 951, 59, 54, 0, + 0, 991, 1460, 376, 1482, 0, 385, 385, 382, 1413, + 1414, 0, 1406, 1408, 1409, 82, 969, 965, 0, 1045, + 0, 0, 1028, 0, 975, 977, 978, 979, 1011, 0, + 982, 983, 0, 0, 0, 0, 0, 101, 1030, 107, + 0, 115, 0, 0, 120, 121, 108, 109, 110, 111, + 0, 637, -2, 462, 184, 186, 187, 188, 179, -2, + 374, 372, 373, 313, 376, 376, 339, 340, 341, 342, + 343, 344, 0, 0, 332, 333, 334, 335, 324, 0, + 325, 326, 327, 366, 0, 328, 329, 0, 330, 429, + 0, 1415, 392, 393, 395, 403, 0, 398, 399, 0, + 403, 403, 0, 424, 425, 0, 1407, 1432, 0, 0, + 0, 1536, 1535, 1535, 1535, 0, 172, 173, 174, 175, + 176, 177, 673, 0, 0, 649, 671, 672, 170, 0, + 0, 180, 517, 516, 0, 705, 0, 427, 0, 0, + 421, 421, 406, 407, 558, 0, 0, 680, 681, 682, + 683, 0, 0, 0, 544, 456, 0, 545, 546, 515, + 517, 0, 0, 387, 470, 471, 476, 477, 496, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 591, 592, 593, 596, 598, 599, 600, 519, 606, 595, + 597, 601, 602, 603, 519, 607, 608, 610, 611, 612, + 519, 618, 609, 613, 614, 615, 519, 619, 620, 621, + 622, 625, 627, 628, 629, 519, 635, 624, 626, 630, + 631, 632, 519, 636, 1429, 1430, 1431, 0, 0, 743, + 0, 0, 453, 97, 1524, 748, 1443, 754, 1444, 826, + 779, 818, 826, 771, 778, 805, 851, 852, 857, 865, + 866, 867, 868, 869, 908, 0, 0, 0, 0, 917, + 0, 0, 1055, 1164, 1166, 1059, 0, 1063, 1067, 0, + 0, 0, 1113, 1111, 1385, 0, 0, 0, 1160, 0, + 0, 1182, 1183, 0, 0, 0, 1379, 0, 0, 1189, + 0, 1339, 1340, 1197, 0, 0, 0, 0, 0, 1203, + 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1401, + 0, 0, 0, 0, 0, 1218, 1219, 1220, 1221, 1222, + 0, 1224, 0, 1225, 0, 0, 0, 0, 1232, 1233, + 1235, 0, 0, 1238, 1239, 0, 0, 1240, 0, 0, + 0, 1244, 0, 0, 0, 0, 1253, 1254, 1255, 1256, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1267, 1268, 0, 1142, 0, 0, 1142, 0, 1180, 947, + 0, 1341, 1342, 1343, 1344, 1345, 0, 0, 0, 0, + 0, 0, 1301, 1302, 1304, 0, 0, 1307, 0, 1309, + 0, 1507, 892, 895, 897, 985, 1034, 1035, 0, 0, + 0, 0, 1015, 1532, 940, 941, 944, 993, 0, 1389, + 0, 0, 972, 1045, 973, 0, 952, 56, 988, 0, + 1464, 1463, 1476, 1489, 385, 385, 379, 380, 386, 381, + 383, 384, 1405, 0, 1410, 0, 1500, 0, 0, 1492, + 0, 0, 0, 0, 0, 0, 0, 0, 1018, 0, + 0, 1021, 0, 0, 0, 0, 1012, 983, 0, 984, + 0, -2, 0, 0, 95, 96, 0, 0, 0, 118, + 119, 0, 0, 125, 388, 389, 161, 170, 464, 185, + 437, 0, 0, 309, 375, 336, 337, 338, 0, 360, + 0, 0, 0, 0, 458, 133, 1419, 1418, 403, 403, + 394, 0, 397, 0, 0, 0, 1537, 363, 426, 0, + 151, 0, 0, 0, 0, 0, 157, 643, 0, 0, + 650, 0, 0, 0, 526, 0, 537, 538, 0, 677, + -2, 739, 391, 0, 405, 408, 1000, 0, 0, 539, + 0, 542, 543, 457, 517, 548, 549, 563, 550, 499, + 500, 497, 0, 0, 1451, 1452, 1457, 1455, 1456, 138, + 584, 586, 585, 589, 0, 0, 0, 521, 0, 521, + 521, 521, 0, 521, 521, 582, 0, 453, 1415, 0, + 747, 454, 455, 829, 829, 903, 100, 0, 906, 0, + 0, 0, 0, 1060, 1064, 1346, 1372, 362, 362, 1359, + 362, 368, 1362, 362, 1364, 362, 1367, 362, 1370, 1371, + 0, 0, 0, 962, 0, 0, 1188, 1382, 0, 0, + 1198, 1199, 1200, 1201, 1202, 1376, 0, 0, 0, 1217, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 149, 150, 0, 0, 0, 0, 0, 0, 1312, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1137, + 1141, 0, 1143, 1144, 0, 0, 1270, 0, 0, 1282, + 0, 1386, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1036, 1041, 1041, 1041, 0, 0, 0, 1519, + 1520, 1390, 1391, 1045, 1392, 974, 953, 992, 1482, 0, + 1475, 0, -2, 1484, 0, 0, 0, 1490, 377, 378, + 966, 83, 1046, 86, 0, 1500, 1509, 0, 1491, 1502, + 1504, 0, 0, 0, 1496, 0, 1045, 976, 1007, 1009, + 0, 1004, 1019, 1020, 1022, 0, 1024, 0, 1026, 1027, + 987, 981, 0, 103, 0, 1045, 1045, 102, 0, 1032, + 122, 123, 124, 463, 189, 194, 0, 0, 0, 199, + 0, 201, 0, 0, 0, 206, 207, 403, 403, 438, + 0, 306, 308, 0, 0, 192, 376, 0, 376, 0, + 367, 369, 0, 439, 459, 1416, 1417, 0, 0, 396, + 400, 401, 402, 0, 1526, 153, 0, 0, 0, 646, + 0, 674, 0, 0, 0, 0, 0, 0, 181, 518, + 706, 707, 708, 709, 710, 711, 712, 713, 714, 0, + 403, 0, 0, 0, 403, 403, 403, 0, 731, 390, + 0, 0, 702, 699, 540, 0, 230, 231, 233, 0, + 0, 0, 0, 0, 547, 987, 1433, 1434, 1435, 0, + 1454, 1458, 141, 0, 0, 0, 0, 594, 604, 0, + 520, 605, 616, 617, 623, 633, 634, 744, 745, 746, + 98, 764, 770, 905, 926, 1053, 1061, 1065, 0, 0, + 0, 0, 1373, 1357, 376, 1360, 1361, 1363, 1365, 1366, + 1368, 1369, 1101, 1102, 1106, 0, 1185, 0, 1187, 1380, + 0, 1410, 0, 0, 0, 1216, 0, 0, 0, 1227, + 1226, 1228, 0, 1230, 1231, 1236, 1237, 1241, 0, 1243, + 1245, 1246, 0, 0, 0, 1257, 1258, 1259, 1260, 1261, + 1262, 1263, 1264, 1265, 1266, 0, 1135, 1138, 1269, 1145, + 1146, 1151, 1272, 0, 0, 1181, 1284, 0, 1289, 0, + 0, 1295, 0, 1299, 0, 1305, 1306, 1308, 1310, 0, + 0, 0, 0, 0, 1013, 994, 67, 1392, 1394, 0, + 1469, 1467, 1467, 1477, 1478, 0, 0, 1485, 0, 0, + 0, 0, 87, 0, 0, 0, 1505, 0, 0, 0, + 0, 104, 1401, 1001, 1008, 0, 0, 1002, 0, 1003, + 1023, 1025, 980, 0, 1045, 1045, 93, 94, 0, 195, + 0, 197, 223, 224, 0, 200, 202, 203, 204, 210, + 211, 212, 205, 0, 0, 305, 307, 0, 0, 350, + 361, 351, 0, 0, 1420, 1421, 1422, 1423, 1424, 1425, + 1426, 1427, 987, 154, 155, 156, 638, 0, 648, 0, + 989, 0, 641, 0, 529, 0, 0, 0, 403, 403, + 403, 0, 0, 0, 0, 716, 0, 0, 679, 0, + 687, 0, 0, 0, 234, 235, 0, 1453, 583, 0, + 139, 140, 0, 0, 588, 522, 523, 1099, 0, 0, + 0, 1100, 1358, 0, 0, 0, 0, 1377, 0, 0, + 0, 0, 1223, 0, 0, 0, 1249, 0, 0, 0, + 668, 669, 0, 1313, 1140, 1401, 0, 1142, 1152, 1153, + 0, 1142, 1283, 0, 0, 0, 0, 0, 0, 0, + 1042, 0, 0, 0, 0, 1033, 1394, 1399, 0, 0, + 1472, 0, 1465, 1468, 1466, 1479, 0, 0, 1486, 0, + 1488, 0, 1510, 1511, 1503, 0, 1495, 1498, 1494, 1497, + 1410, 1005, 0, 1010, 0, 1401, 92, 0, 198, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, + 209, 0, 0, 365, 370, 0, 0, 0, 639, 0, + 990, 651, 642, 0, 729, 0, 733, 0, 0, 0, + 736, 737, 738, 715, 0, 719, 431, 703, 700, 701, + 541, 0, 142, 143, 0, 0, 0, 1347, 0, 1350, + 1184, 1186, 0, 1213, 1214, 1215, 1355, 1356, 1229, 1242, + 1247, 0, 1250, 0, 0, 1251, 0, 670, 1131, 0, + 0, 1149, 1150, 0, 1285, 0, 1290, 1291, 0, 1296, + 0, 1300, 1311, 0, 1038, 995, 996, 1043, 1044, 0, + 0, 986, 1399, 85, 1400, 1397, 0, 1395, 1393, 1461, + 0, 1470, 1471, 1480, 1481, 1487, 0, 1493, 0, 90, + 0, 0, 0, 1410, 196, 0, 215, 0, 647, 0, + 650, 640, 727, 728, 0, 740, 732, 734, 735, 717, + -2, 1436, 0, 0, 0, 590, 1348, 0, 0, 1252, + 0, 666, 667, 1139, 1132, 0, 1117, 1118, 1136, 1271, + 1273, 0, 0, 0, 0, 1037, 1039, 1040, 84, 0, + 1396, 1157, 0, 1473, 1474, 1501, 1499, 1006, 1013, 0, + 91, 444, 437, 1436, 0, 0, 0, 720, 721, 722, + 723, 724, 725, 726, 580, 1438, 144, 145, 510, 511, + 512, 138, 0, 1190, 1248, 1133, 0, 0, 0, 0, + 1129, 1130, 0, 1286, 0, 1292, 0, 1297, 0, 997, + 998, 1398, 0, 0, 652, 0, 654, 0, -2, 432, + 445, 0, 190, 216, 217, 0, 0, 220, 221, 222, + 213, 214, 134, 0, 0, 741, 0, 1439, 1440, 141, + 0, 0, 1124, 1125, 1126, 1127, 1128, 0, 0, 0, + 1158, 1137, 653, 0, 0, 387, 0, 663, 433, 434, + 0, 440, 441, 442, 443, 218, 219, 675, 0, 0, + 587, 1349, 0, 1287, 0, 1293, 0, 1298, 0, 655, + 656, 664, 0, 435, 0, 436, 0, 0, 0, 644, + 0, 675, 1437, 1134, 0, 0, 1156, 0, 665, 661, + 446, 448, 449, 0, 0, 447, 676, 645, 1288, 1294, + 0, 450, 451, 452, 657, 658, 659, 660, } var yyTok1 = [...]int{ @@ -8671,7 +8658,7 @@ var yyTok1 = [...]int{ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 144, 3, 3, 3, 171, 163, 3, 87, 89, 168, 166, 88, 167, 221, 169, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 680, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 681, 152, 151, 153, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -8792,7 +8779,7 @@ var yyTok3 = [...]int{ 57990, 665, 57991, 666, 57992, 667, 57993, 668, 57994, 669, 57995, 670, 57996, 671, 57997, 672, 57998, 673, 57999, 674, 58000, 675, 58001, 676, 58002, 677, 58003, 678, 58004, 679, - 0, + 58005, 680, 0, } var yyErrorMessages = [...]struct { @@ -15064,11 +15051,11 @@ yydefault: } yyVAL.union = yyLOCAL case 796: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4418 { - yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)} + yyLOCAL = &Show{&ShowDMLJob{UUID: yyDollar[3].str, Detail: false}} } yyVAL.union = yyLOCAL case 797: @@ -15076,31 +15063,31 @@ yydefault: var yyLOCAL Statement //line sql.y:4422 { - yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)} + yyLOCAL = &Show{&ShowDMLJob{UUID: yyDollar[3].str, Detail: true}} } yyVAL.union = yyLOCAL case 798: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement //line sql.y:4426 { - yyLOCAL = &ShowThrottledApps{} + yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL case 799: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement //line sql.y:4430 { - yyLOCAL = &Show{&ShowBasic{Command: VitessReplicationStatus, Filter: yyDollar[3].showFilterUnion()}} + yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL case 800: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement //line sql.y:4434 { - yyLOCAL = &ShowThrottlerStatus{} + yyLOCAL = &ShowThrottledApps{} } yyVAL.union = yyLOCAL case 801: @@ -15108,7 +15095,7 @@ yydefault: var yyLOCAL Statement //line sql.y:4438 { - yyLOCAL = &Show{&ShowBasic{Command: VschemaTables}} + yyLOCAL = &Show{&ShowBasic{Command: VitessReplicationStatus, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL case 802: @@ -15116,79 +15103,79 @@ yydefault: var yyLOCAL Statement //line sql.y:4442 { - yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes}} + yyLOCAL = &ShowThrottlerStatus{} } yyVAL.union = yyLOCAL case 803: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4446 { - yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes, Tbl: yyDollar[5].tableName}} + yyLOCAL = &Show{&ShowBasic{Command: VschemaTables}} } yyVAL.union = yyLOCAL case 804: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4450 { - yyLOCAL = &Show{&ShowBasic{Command: Warnings}} + yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes}} } yyVAL.union = yyLOCAL case 805: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement //line sql.y:4454 { - yyLOCAL = &Show{&ShowBasic{Command: VitessShards, Filter: yyDollar[3].showFilterUnion()}} + yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes, Tbl: yyDollar[5].tableName}} } yyVAL.union = yyLOCAL case 806: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement //line sql.y:4458 { - yyLOCAL = &Show{&ShowBasic{Command: VitessTablets, Filter: yyDollar[3].showFilterUnion()}} + yyLOCAL = &Show{&ShowBasic{Command: Warnings}} } yyVAL.union = yyLOCAL case 807: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4462 { - yyLOCAL = &Show{&ShowBasic{Command: VitessTarget}} + yyLOCAL = &Show{&ShowBasic{Command: VitessShards, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL case 808: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4466 { - yyLOCAL = &Show{&ShowBasic{Command: Workload}} + yyLOCAL = &Show{&ShowBasic{Command: VitessTablets, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL case 809: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4473 +//line sql.y:4470 { - yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].identifierCI.String())}} + yyLOCAL = &Show{&ShowBasic{Command: VitessTarget}} } yyVAL.union = yyLOCAL case 810: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4477 +//line sql.y:4474 { - yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} + yyLOCAL = &Show{&ShowBasic{Command: Workload}} } yyVAL.union = yyLOCAL case 811: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4481 { - yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String()}} + yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].identifierCI.String())}} } yyVAL.union = yyLOCAL case 812: @@ -15200,11 +15187,11 @@ yydefault: } yyVAL.union = yyLOCAL case 813: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement //line sql.y:4489 { - yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}} + yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String()}} } yyVAL.union = yyLOCAL case 814: @@ -15212,699 +15199,703 @@ yydefault: var yyLOCAL Statement //line sql.y:4493 { - yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}} + yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL case 815: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4497 { - yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}} + yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}} } yyVAL.union = yyLOCAL case 816: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement //line sql.y:4501 { - yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[3].str)}} + yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}} } yyVAL.union = yyLOCAL case 817: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement //line sql.y:4505 { - yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}} + yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}} } yyVAL.union = yyLOCAL case 818: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Statement +//line sql.y:4509 + { + yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[3].str)}} + } + yyVAL.union = yyLOCAL + case 819: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Statement +//line sql.y:4513 + { + yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}} + } + yyVAL.union = yyLOCAL + case 820: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4511 +//line sql.y:4519 { yyVAL.str = "" } - case 819: + case 821: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4515 +//line sql.y:4523 { yyVAL.str = "extended " } - case 820: + case 822: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4521 +//line sql.y:4529 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 821: + case 823: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4525 +//line sql.y:4533 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 822: + case 824: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4531 +//line sql.y:4539 { yyVAL.str = string(yyDollar[1].str) } - case 823: + case 825: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4535 +//line sql.y:4543 { yyVAL.str = string(yyDollar[1].str) } - case 824: + case 826: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4541 +//line sql.y:4549 { yyVAL.identifierCS = NewIdentifierCS("") } - case 825: + case 827: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4545 +//line sql.y:4553 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 826: + case 828: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4549 +//line sql.y:4557 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 827: + case 829: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4555 +//line sql.y:4563 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 828: + case 830: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4559 +//line sql.y:4567 { yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 829: + case 831: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4563 +//line sql.y:4571 { yyLOCAL = &ShowFilter{Filter: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 830: + case 832: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4569 +//line sql.y:4577 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 831: + case 833: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4573 +//line sql.y:4581 { yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 832: + case 834: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4579 +//line sql.y:4587 { yyVAL.empty = struct{}{} } - case 833: + case 835: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4583 +//line sql.y:4591 { yyVAL.empty = struct{}{} } - case 834: + case 836: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4587 +//line sql.y:4595 { yyVAL.empty = struct{}{} } - case 835: + case 837: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4593 +//line sql.y:4601 { yyVAL.str = string(yyDollar[1].str) } - case 836: + case 838: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4597 +//line sql.y:4605 { yyVAL.str = string(yyDollar[1].str) } - case 837: + case 839: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4603 +//line sql.y:4611 { yyLOCAL = &Use{DBName: yyDollar[2].identifierCS} } yyVAL.union = yyLOCAL - case 838: + case 840: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4607 +//line sql.y:4615 { yyLOCAL = &Use{DBName: IdentifierCS{v: ""}} } yyVAL.union = yyLOCAL - case 839: + case 841: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4611 +//line sql.y:4619 { yyLOCAL = &Use{DBName: NewIdentifierCS(yyDollar[2].identifierCS.String() + "@" + string(yyDollar[3].str))} } yyVAL.union = yyLOCAL - case 840: + case 842: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4618 +//line sql.y:4626 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 841: + case 843: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4622 +//line sql.y:4630 { yyVAL.identifierCS = NewIdentifierCS("@" + string(yyDollar[1].str)) } - case 842: + case 844: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4626 +//line sql.y:4634 { yyVAL.identifierCS = NewIdentifierCS("@@" + string(yyDollar[1].str)) } - case 843: + case 845: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4630 +//line sql.y:4638 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 844: + case 846: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4637 +//line sql.y:4645 { yyLOCAL = &Begin{} } yyVAL.union = yyLOCAL - case 845: + case 847: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4641 +//line sql.y:4649 { yyLOCAL = &Begin{TxAccessModes: yyDollar[3].txAccessModesUnion()} } yyVAL.union = yyLOCAL - case 846: + case 848: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4646 +//line sql.y:4654 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 847: + case 849: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4650 +//line sql.y:4658 { yyLOCAL = yyDollar[1].txAccessModesUnion() } yyVAL.union = yyLOCAL - case 848: + case 850: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4656 +//line sql.y:4664 { yyLOCAL = []TxAccessMode{yyDollar[1].txAccessModeUnion()} } yyVAL.union = yyLOCAL - case 849: + case 851: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4660 +//line sql.y:4668 { yySLICE := (*[]TxAccessMode)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].txAccessModeUnion()) } - case 850: + case 852: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4666 +//line sql.y:4674 { yyLOCAL = WithConsistentSnapshot } yyVAL.union = yyLOCAL - case 851: + case 853: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4670 +//line sql.y:4678 { yyLOCAL = ReadWrite } yyVAL.union = yyLOCAL - case 852: + case 854: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4674 +//line sql.y:4682 { yyLOCAL = ReadOnly } yyVAL.union = yyLOCAL - case 853: + case 855: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4681 +//line sql.y:4689 { yyLOCAL = &Commit{} } yyVAL.union = yyLOCAL - case 854: + case 856: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4687 +//line sql.y:4695 { yyLOCAL = &Rollback{} } yyVAL.union = yyLOCAL - case 855: + case 857: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4691 +//line sql.y:4699 { yyLOCAL = &SRollback{Name: yyDollar[5].identifierCI} } yyVAL.union = yyLOCAL - case 856: + case 858: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4696 +//line sql.y:4704 { yyVAL.empty = struct{}{} } - case 857: + case 859: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4698 +//line sql.y:4706 { yyVAL.empty = struct{}{} } - case 858: + case 860: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4701 +//line sql.y:4709 { yyVAL.empty = struct{}{} } - case 859: + case 861: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4703 +//line sql.y:4711 { yyVAL.empty = struct{}{} } - case 860: + case 862: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4707 +//line sql.y:4715 { yyLOCAL = &Savepoint{Name: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 861: + case 863: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4713 +//line sql.y:4721 { yyLOCAL = &Release{Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 862: + case 864: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4718 +//line sql.y:4726 { yyLOCAL = EmptyType } yyVAL.union = yyLOCAL - case 863: + case 865: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4722 +//line sql.y:4730 { yyLOCAL = JSONType } yyVAL.union = yyLOCAL - case 864: + case 866: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4726 +//line sql.y:4734 { yyLOCAL = TreeType } yyVAL.union = yyLOCAL - case 865: + case 867: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4730 +//line sql.y:4738 { yyLOCAL = VitessType } yyVAL.union = yyLOCAL - case 866: + case 868: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4734 +//line sql.y:4742 { yyLOCAL = VTExplainType } yyVAL.union = yyLOCAL - case 867: + case 869: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4738 +//line sql.y:4746 { yyLOCAL = TraditionalType } yyVAL.union = yyLOCAL - case 868: + case 870: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4742 +//line sql.y:4750 { yyLOCAL = AnalyzeType } yyVAL.union = yyLOCAL - case 869: + case 871: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4747 +//line sql.y:4755 { yyLOCAL = PlanVExplainType } yyVAL.union = yyLOCAL - case 870: + case 872: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4751 +//line sql.y:4759 { yyLOCAL = PlanVExplainType } yyVAL.union = yyLOCAL - case 871: + case 873: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4755 +//line sql.y:4763 { yyLOCAL = AllVExplainType } yyVAL.union = yyLOCAL - case 872: + case 874: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4759 +//line sql.y:4767 { yyLOCAL = QueriesVExplainType } yyVAL.union = yyLOCAL - case 873: + case 875: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4765 +//line sql.y:4773 { yyVAL.str = yyDollar[1].str } - case 874: + case 876: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4769 +//line sql.y:4777 { yyVAL.str = yyDollar[1].str } - case 875: + case 877: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4773 +//line sql.y:4781 { yyVAL.str = yyDollar[1].str } - case 876: + case 878: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4779 +//line sql.y:4787 { yyLOCAL = yyDollar[1].selStmtUnion() } yyVAL.union = yyLOCAL - case 877: + case 879: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4783 +//line sql.y:4791 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 878: + case 880: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4787 +//line sql.y:4795 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 879: + case 881: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4791 +//line sql.y:4799 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 880: + case 882: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4796 +//line sql.y:4804 { yyVAL.str = "" } - case 881: + case 883: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4800 +//line sql.y:4808 { yyVAL.str = yyDollar[1].identifierCI.val } - case 882: + case 884: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4804 +//line sql.y:4812 { yyVAL.str = encodeSQLString(yyDollar[1].str) } - case 883: + case 885: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4810 +//line sql.y:4818 { yyLOCAL = &ExplainTab{Table: yyDollar[3].tableName, Wild: yyDollar[4].str} } yyVAL.union = yyLOCAL - case 884: + case 886: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4814 +//line sql.y:4822 { yyLOCAL = &ExplainStmt{Type: yyDollar[3].explainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()} } yyVAL.union = yyLOCAL - case 885: + case 887: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4820 +//line sql.y:4828 { yyLOCAL = &VExplainStmt{Type: yyDollar[3].vexplainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()} } yyVAL.union = yyLOCAL - case 886: + case 888: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4826 +//line sql.y:4834 { yyLOCAL = &OtherAdmin{} } yyVAL.union = yyLOCAL - case 887: + case 889: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4830 +//line sql.y:4838 { yyLOCAL = &OtherAdmin{} } yyVAL.union = yyLOCAL - case 888: + case 890: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4836 +//line sql.y:4844 { yyLOCAL = &LockTables{Tables: yyDollar[3].tableAndLockTypesUnion()} } yyVAL.union = yyLOCAL - case 889: + case 891: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableAndLockTypes -//line sql.y:4842 +//line sql.y:4850 { yyLOCAL = TableAndLockTypes{yyDollar[1].tableAndLockTypeUnion()} } yyVAL.union = yyLOCAL - case 890: + case 892: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4846 +//line sql.y:4854 { yySLICE := (*TableAndLockTypes)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableAndLockTypeUnion()) } - case 891: + case 893: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *TableAndLockType -//line sql.y:4852 +//line sql.y:4860 { yyLOCAL = &TableAndLockType{Table: yyDollar[1].aliasedTableNameUnion(), Lock: yyDollar[2].lockTypeUnion()} } yyVAL.union = yyLOCAL - case 892: + case 894: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LockType -//line sql.y:4858 +//line sql.y:4866 { yyLOCAL = Read } yyVAL.union = yyLOCAL - case 893: + case 895: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL LockType -//line sql.y:4862 +//line sql.y:4870 { yyLOCAL = ReadLocal } yyVAL.union = yyLOCAL - case 894: + case 896: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LockType -//line sql.y:4866 +//line sql.y:4874 { yyLOCAL = Write } yyVAL.union = yyLOCAL - case 895: + case 897: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL LockType -//line sql.y:4870 +//line sql.y:4878 { yyLOCAL = LowPriorityWrite } yyVAL.union = yyLOCAL - case 896: + case 898: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4876 +//line sql.y:4884 { yyLOCAL = &UnlockTables{} } yyVAL.union = yyLOCAL - case 897: + case 899: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4882 +//line sql.y:4890 { yyLOCAL = &RevertMigration{Comments: Comments(yyDollar[2].strs).Parsed(), UUID: string(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 898: + case 900: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4886 +//line sql.y:4894 { yyLOCAL = &RevertMigration{Comments: Comments(yyDollar[2].strs).Parsed(), UUID: string(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 899: + case 901: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4892 +//line sql.y:4900 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), FlushOptions: yyDollar[3].strs} } yyVAL.union = yyLOCAL - case 900: + case 902: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4896 +//line sql.y:4904 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion()} } yyVAL.union = yyLOCAL - case 901: + case 903: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:4900 +//line sql.y:4908 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), WithLock: true} } yyVAL.union = yyLOCAL - case 902: + case 904: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4904 +//line sql.y:4912 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion()} } yyVAL.union = yyLOCAL - case 903: + case 905: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4908 +//line sql.y:4916 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), WithLock: true} } yyVAL.union = yyLOCAL - case 904: + case 906: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:4912 +//line sql.y:4920 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), ForExport: true} } yyVAL.union = yyLOCAL - case 905: + case 907: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4918 +//line sql.y:4926 { yyVAL.strs = []string{yyDollar[1].str} } - case 906: + case 908: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4922 +//line sql.y:4930 { yyVAL.strs = append(yyDollar[1].strs, yyDollar[3].str) } - case 907: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4928 - { - yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) - } - case 908: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4932 - { - yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) - } case 909: yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:4936 @@ -15918,16 +15909,16 @@ yydefault: yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 911: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:4944 { - yyVAL.str = string(yyDollar[1].str) + yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 912: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:4948 { - yyVAL.str = string(yyDollar[1].str) + yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 913: yyDollar = yyS[yypt-1 : yypt+1] @@ -15942,28 +15933,28 @@ yydefault: yyVAL.str = string(yyDollar[1].str) } case 915: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:4960 { - yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) + yyDollar[3].str + yyVAL.str = string(yyDollar[1].str) } case 916: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:4964 { - yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) + yyVAL.str = string(yyDollar[1].str) } case 917: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:4968 { - yyVAL.str = string(yyDollar[1].str) + yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) + yyDollar[3].str } case 918: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:4972 { - yyVAL.str = string(yyDollar[1].str) + yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 919: yyDollar = yyS[yypt-1 : yypt+1] @@ -15972,144 +15963,156 @@ yydefault: yyVAL.str = string(yyDollar[1].str) } case 920: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:4980 + { + yyVAL.str = string(yyDollar[1].str) + } + case 921: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:4984 + { + yyVAL.str = string(yyDollar[1].str) + } + case 922: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4981 +//line sql.y:4989 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 921: + case 923: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4985 +//line sql.y:4993 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 922: + case 924: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4989 +//line sql.y:4997 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 923: + case 925: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4994 +//line sql.y:5002 { yyVAL.str = "" } - case 924: + case 926: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4998 +//line sql.y:5006 { yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String() } - case 925: + case 927: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5003 +//line sql.y:5011 { setAllowComments(yylex, true) } - case 926: + case 928: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5007 +//line sql.y:5015 { yyVAL.strs = yyDollar[2].strs setAllowComments(yylex, false) } - case 927: + case 929: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5013 +//line sql.y:5021 { yyVAL.strs = nil } - case 928: + case 930: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5017 +//line sql.y:5025 { yyVAL.strs = append(yyDollar[1].strs, yyDollar[2].str) } - case 929: + case 931: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:5023 +//line sql.y:5031 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 930: + case 932: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:5027 +//line sql.y:5035 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 931: + case 933: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:5031 +//line sql.y:5039 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 932: + case 934: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5036 +//line sql.y:5044 { yyVAL.str = "" } - case 933: + case 935: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5040 +//line sql.y:5048 { yyVAL.str = SQLNoCacheStr } - case 934: + case 936: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5044 +//line sql.y:5052 { yyVAL.str = SQLCacheStr } - case 935: + case 937: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:5049 +//line sql.y:5057 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 936: + case 938: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:5053 +//line sql.y:5061 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 937: + case 939: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:5057 +//line sql.y:5065 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 938: + case 940: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:5063 +//line sql.y:5071 { yyLOCAL = &PrepareStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Statement: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 939: + case 941: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:5067 +//line sql.y:5075 { yyLOCAL = &PrepareStmt{ Name: yyDollar[3].identifierCI, @@ -16118,595 +16121,595 @@ yydefault: } } yyVAL.union = yyLOCAL - case 940: + case 942: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:5077 +//line sql.y:5085 { yyLOCAL = &ExecuteStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Arguments: yyDollar[4].variablesUnion()} } yyVAL.union = yyLOCAL - case 941: + case 943: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*Variable -//line sql.y:5082 +//line sql.y:5090 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 942: + case 944: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []*Variable -//line sql.y:5086 +//line sql.y:5094 { yyLOCAL = yyDollar[2].variablesUnion() } yyVAL.union = yyLOCAL - case 943: + case 945: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:5092 +//line sql.y:5100 { yyLOCAL = &DeallocateStmt{Type: DeallocateType, Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI} } yyVAL.union = yyLOCAL - case 944: + case 946: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:5096 +//line sql.y:5104 { yyLOCAL = &DeallocateStmt{Type: DropType, Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI} } yyVAL.union = yyLOCAL - case 945: + case 947: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL SelectExprs -//line sql.y:5101 +//line sql.y:5109 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 946: + case 948: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExprs -//line sql.y:5105 +//line sql.y:5113 { yyLOCAL = yyDollar[1].selectExprsUnion() } yyVAL.union = yyLOCAL - case 947: + case 949: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5110 +//line sql.y:5118 { yyVAL.strs = nil } - case 948: + case 950: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5114 +//line sql.y:5122 { yyVAL.strs = []string{yyDollar[1].str} } - case 949: + case 951: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5118 +//line sql.y:5126 { // TODO: This is a hack since I couldn't get it to work in a nicer way. I got 'conflicts: 8 shift/reduce' yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str} } - case 950: + case 952: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5122 +//line sql.y:5130 { yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str} } - case 951: + case 953: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:5126 +//line sql.y:5134 { yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str, yyDollar[4].str} } - case 952: + case 954: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5132 +//line sql.y:5140 { yyVAL.str = SQLNoCacheStr } - case 953: + case 955: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5136 +//line sql.y:5144 { yyVAL.str = SQLCacheStr } - case 954: + case 956: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5140 +//line sql.y:5148 { yyVAL.str = DistinctStr } - case 955: + case 957: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5144 +//line sql.y:5152 { yyVAL.str = DistinctStr } - case 956: + case 958: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5148 +//line sql.y:5156 { yyVAL.str = StraightJoinHint } - case 957: + case 959: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5152 +//line sql.y:5160 { yyVAL.str = SQLCalcFoundRowsStr } - case 958: + case 960: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5156 +//line sql.y:5164 { yyVAL.str = AllStr // These are not picked up by NewSelect, and so ALL will be dropped. But this is OK, since it's redundant anyway } - case 959: + case 961: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExprs -//line sql.y:5162 +//line sql.y:5170 { yyLOCAL = SelectExprs{yyDollar[1].selectExprUnion()} } yyVAL.union = yyLOCAL - case 960: + case 962: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5166 +//line sql.y:5174 { yySLICE := (*SelectExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].selectExprUnion()) } - case 961: + case 963: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5172 +//line sql.y:5180 { yyLOCAL = &StarExpr{} } yyVAL.union = yyLOCAL - case 962: + case 964: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5176 +//line sql.y:5184 { yyLOCAL = &AliasedExpr{Expr: yyDollar[1].exprUnion(), As: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 963: + case 965: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5180 +//line sql.y:5188 { yyLOCAL = &StarExpr{TableName: TableName{Name: yyDollar[1].identifierCS}} } yyVAL.union = yyLOCAL - case 964: + case 966: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5184 +//line sql.y:5192 { yyLOCAL = &StarExpr{TableName: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL - case 965: + case 967: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5189 +//line sql.y:5197 { yyVAL.identifierCI = IdentifierCI{} } - case 966: + case 968: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5193 +//line sql.y:5201 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 967: + case 969: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5197 +//line sql.y:5205 { yyVAL.identifierCI = yyDollar[2].identifierCI } - case 969: + case 971: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5204 +//line sql.y:5212 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 970: + case 972: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5209 +//line sql.y:5217 { yyLOCAL = TableExprs{&AliasedTableExpr{Expr: TableName{Name: NewIdentifierCS("dual")}}} } yyVAL.union = yyLOCAL - case 971: + case 973: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5213 +//line sql.y:5221 { yyLOCAL = yyDollar[1].tableExprsUnion() } yyVAL.union = yyLOCAL - case 972: + case 974: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5219 +//line sql.y:5227 { yyLOCAL = yyDollar[2].tableExprsUnion() } yyVAL.union = yyLOCAL - case 973: + case 975: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5225 +//line sql.y:5233 { yyLOCAL = TableExprs{yyDollar[1].tableExprUnion()} } yyVAL.union = yyLOCAL - case 974: + case 976: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5229 +//line sql.y:5237 { yySLICE := (*TableExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableExprUnion()) } - case 977: + case 979: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5239 +//line sql.y:5247 { yyLOCAL = yyDollar[1].aliasedTableNameUnion() } yyVAL.union = yyLOCAL - case 978: + case 980: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5243 +//line sql.y:5251 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].derivedTableUnion(), As: yyDollar[3].identifierCS, Columns: yyDollar[4].columnsUnion()} } yyVAL.union = yyLOCAL - case 979: + case 981: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5247 +//line sql.y:5255 { yyLOCAL = &ParenTableExpr{Exprs: yyDollar[2].tableExprsUnion()} } yyVAL.union = yyLOCAL - case 980: + case 982: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5251 +//line sql.y:5259 { yyLOCAL = yyDollar[1].tableExprUnion() } yyVAL.union = yyLOCAL - case 981: + case 983: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *DerivedTable -//line sql.y:5257 +//line sql.y:5265 { yyLOCAL = &DerivedTable{Lateral: false, Select: yyDollar[1].selStmtUnion()} } yyVAL.union = yyLOCAL - case 982: + case 984: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *DerivedTable -//line sql.y:5261 +//line sql.y:5269 { yyLOCAL = &DerivedTable{Lateral: true, Select: yyDollar[2].selStmtUnion()} } yyVAL.union = yyLOCAL - case 983: + case 985: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *AliasedTableExpr -//line sql.y:5267 +//line sql.y:5275 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, As: yyDollar[2].identifierCS, Hints: yyDollar[3].indexHintsUnion()} } yyVAL.union = yyLOCAL - case 984: + case 986: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *AliasedTableExpr -//line sql.y:5271 +//line sql.y:5279 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, Partitions: yyDollar[4].partitionsUnion(), As: yyDollar[6].identifierCS, Hints: yyDollar[7].indexHintsUnion()} } yyVAL.union = yyLOCAL - case 985: + case 987: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Columns -//line sql.y:5276 +//line sql.y:5284 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 986: + case 988: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Columns -//line sql.y:5280 +//line sql.y:5288 { yyLOCAL = yyDollar[2].columnsUnion() } yyVAL.union = yyLOCAL - case 987: + case 989: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Columns -//line sql.y:5285 +//line sql.y:5293 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 988: + case 990: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5289 +//line sql.y:5297 { yyLOCAL = yyDollar[1].columnsUnion() } yyVAL.union = yyLOCAL - case 989: + case 991: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5295 +//line sql.y:5303 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 990: + case 992: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5299 +//line sql.y:5307 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 991: + case 993: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*Variable -//line sql.y:5305 +//line sql.y:5313 { yyLOCAL = []*Variable{yyDollar[1].variableUnion()} } yyVAL.union = yyLOCAL - case 992: + case 994: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5309 +//line sql.y:5317 { yySLICE := (*[]*Variable)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].variableUnion()) } - case 993: + case 995: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5315 +//line sql.y:5323 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 994: + case 996: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5319 +//line sql.y:5327 { yyLOCAL = Columns{NewIdentifierCI(string(yyDollar[1].str))} } yyVAL.union = yyLOCAL - case 995: + case 997: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5323 +//line sql.y:5331 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 996: + case 998: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5327 +//line sql.y:5335 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, NewIdentifierCI(string(yyDollar[3].str))) } - case 997: + case 999: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Partitions -//line sql.y:5333 +//line sql.y:5341 { yyLOCAL = Partitions{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 998: + case 1000: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5337 +//line sql.y:5345 { yySLICE := (*Partitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 999: + case 1001: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5350 +//line sql.y:5358 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 1000: + case 1002: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5354 +//line sql.y:5362 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 1001: + case 1003: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5358 +//line sql.y:5366 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 1002: + case 1004: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5362 +//line sql.y:5370 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion()} } yyVAL.union = yyLOCAL - case 1003: + case 1005: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5368 +//line sql.y:5376 { yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()} } - case 1004: + case 1006: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:5370 +//line sql.y:5378 { yyVAL.joinCondition = &JoinCondition{Using: yyDollar[3].columnsUnion()} } - case 1005: + case 1007: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5374 +//line sql.y:5382 { yyVAL.joinCondition = &JoinCondition{} } - case 1006: + case 1008: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5376 +//line sql.y:5384 { yyVAL.joinCondition = yyDollar[1].joinCondition } - case 1007: + case 1009: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5380 +//line sql.y:5388 { yyVAL.joinCondition = &JoinCondition{} } - case 1008: + case 1010: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5382 +//line sql.y:5390 { yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()} } - case 1009: + case 1011: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5385 +//line sql.y:5393 { yyVAL.empty = struct{}{} } - case 1010: + case 1012: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5387 +//line sql.y:5395 { yyVAL.empty = struct{}{} } - case 1011: + case 1013: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5390 +//line sql.y:5398 { yyVAL.identifierCS = NewIdentifierCS("") } - case 1012: + case 1014: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5394 +//line sql.y:5402 { yyVAL.identifierCS = yyDollar[1].identifierCS } - case 1013: + case 1015: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5398 +//line sql.y:5406 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 1015: + case 1017: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5405 +//line sql.y:5413 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1016: + case 1018: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL JoinType -//line sql.y:5411 +//line sql.y:5419 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 1017: + case 1019: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5415 +//line sql.y:5423 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 1018: + case 1020: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5419 +//line sql.y:5427 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 1019: + case 1021: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL JoinType -//line sql.y:5425 +//line sql.y:5433 { yyLOCAL = StraightJoinType } yyVAL.union = yyLOCAL - case 1020: + case 1022: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5431 +//line sql.y:5439 { yyLOCAL = LeftJoinType } yyVAL.union = yyLOCAL - case 1021: + case 1023: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL JoinType -//line sql.y:5435 +//line sql.y:5443 { yyLOCAL = LeftJoinType } yyVAL.union = yyLOCAL - case 1022: + case 1024: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5439 +//line sql.y:5447 { yyLOCAL = RightJoinType } yyVAL.union = yyLOCAL - case 1023: + case 1025: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL JoinType -//line sql.y:5443 +//line sql.y:5451 { yyLOCAL = RightJoinType } yyVAL.union = yyLOCAL - case 1024: + case 1026: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5449 +//line sql.y:5457 { yyLOCAL = NaturalJoinType } yyVAL.union = yyLOCAL - case 1025: + case 1027: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5453 +//line sql.y:5461 { if yyDollar[2].joinTypeUnion() == LeftJoinType { yyLOCAL = NaturalLeftJoinType @@ -16715,177 +16718,161 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1026: + case 1028: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5463 +//line sql.y:5471 { yyVAL.tableName = yyDollar[2].tableName } - case 1027: + case 1029: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5467 +//line sql.y:5475 { yyVAL.tableName = yyDollar[1].tableName } - case 1028: + case 1030: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5473 +//line sql.y:5481 { yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS} } - case 1029: + case 1031: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5477 +//line sql.y:5485 { yyVAL.tableName = TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS} } - case 1030: + case 1032: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5483 +//line sql.y:5491 { yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS} } - case 1031: + case 1033: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5488 +//line sql.y:5496 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1032: + case 1034: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5492 +//line sql.y:5500 { yyLOCAL = yyDollar[1].indexHintsUnion() } yyVAL.union = yyLOCAL - case 1033: + case 1035: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5498 +//line sql.y:5506 { yyLOCAL = IndexHints{yyDollar[1].indexHintUnion()} } yyVAL.union = yyLOCAL - case 1034: + case 1036: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5502 +//line sql.y:5510 { yySLICE := (*IndexHints)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].indexHintUnion()) } - case 1035: + case 1037: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5508 +//line sql.y:5516 { yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 1036: + case 1038: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5512 +//line sql.y:5520 { yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion()} } yyVAL.union = yyLOCAL - case 1037: + case 1039: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5516 +//line sql.y:5524 { yyLOCAL = &IndexHint{Type: IgnoreOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 1038: + case 1040: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5520 +//line sql.y:5528 { yyLOCAL = &IndexHint{Type: ForceOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 1039: + case 1041: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5525 +//line sql.y:5533 { yyLOCAL = NoForType } yyVAL.union = yyLOCAL - case 1040: + case 1042: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5529 +//line sql.y:5537 { yyLOCAL = JoinForType } yyVAL.union = yyLOCAL - case 1041: + case 1043: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5533 +//line sql.y:5541 { yyLOCAL = OrderByForType } yyVAL.union = yyLOCAL - case 1042: + case 1044: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5537 +//line sql.y:5545 { yyLOCAL = GroupByForType } yyVAL.union = yyLOCAL - case 1043: + case 1045: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:5543 +//line sql.y:5551 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1044: + case 1046: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5547 +//line sql.y:5555 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1045: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Expr -//line sql.y:5554 - { - yyLOCAL = &OrExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1046: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Expr -//line sql.y:5558 - { - yyLOCAL = &XorExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} - } - yyVAL.union = yyLOCAL case 1047: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr //line sql.y:5562 { - yyLOCAL = &AndExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} + yyLOCAL = &OrExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1048: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr //line sql.y:5566 { - yyLOCAL = &NotExpr{Expr: yyDollar[2].exprUnion()} + yyLOCAL = &XorExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1049: @@ -16893,39 +16880,39 @@ yydefault: var yyLOCAL Expr //line sql.y:5570 { - yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].isExprOperatorUnion()} + yyLOCAL = &AndExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1050: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr //line sql.y:5574 { - yyLOCAL = yyDollar[1].exprUnion() + yyLOCAL = &NotExpr{Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL case 1051: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr //line sql.y:5578 { - yyLOCAL = &MemberOfExpr{Value: yyDollar[1].exprUnion(), JSONArr: yyDollar[5].exprUnion()} + yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].isExprOperatorUnion()} } yyVAL.union = yyLOCAL case 1052: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5584 +//line sql.y:5582 { - yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNullOp} + yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL case 1053: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5588 +//line sql.y:5586 { - yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNotNullOp} + yyLOCAL = &MemberOfExpr{Value: yyDollar[1].exprUnion(), JSONArr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL case 1054: @@ -16933,137 +16920,137 @@ yydefault: var yyLOCAL Expr //line sql.y:5592 { - yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Right: yyDollar[3].exprUnion()} + yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNullOp} } yyVAL.union = yyLOCAL case 1055: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:5596 { - yyLOCAL = yyDollar[1].exprUnion() + yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNotNullOp} } yyVAL.union = yyLOCAL case 1056: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5602 +//line sql.y:5600 { - yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: InOp, Right: yyDollar[3].colTupleUnion()} + yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1057: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5606 +//line sql.y:5604 { - yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotInOp, Right: yyDollar[4].colTupleUnion()} + yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL case 1058: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr //line sql.y:5610 { - yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: true, From: yyDollar[3].exprUnion(), To: yyDollar[5].exprUnion()} + yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: InOp, Right: yyDollar[3].colTupleUnion()} } yyVAL.union = yyLOCAL case 1059: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:5614 { - yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: false, From: yyDollar[4].exprUnion(), To: yyDollar[6].exprUnion()} + yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotInOp, Right: yyDollar[4].colTupleUnion()} } yyVAL.union = yyLOCAL case 1060: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr //line sql.y:5618 { - yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: true, From: yyDollar[3].exprUnion(), To: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL case 1061: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:5622 { - yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion()} + yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: false, From: yyDollar[4].exprUnion(), To: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL case 1062: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr //line sql.y:5626 { - yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion(), Escape: yyDollar[5].exprUnion()} + yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1063: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:5630 { - yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion(), Escape: yyDollar[6].exprUnion()} + yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL case 1064: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr //line sql.y:5634 { - yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: RegexpOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion(), Escape: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL case 1065: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:5638 { - yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotRegexpOp, Right: yyDollar[4].exprUnion()} + yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion(), Escape: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL case 1066: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr //line sql.y:5642 { - yyLOCAL = yyDollar[1].exprUnion() + yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: RegexpOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1067: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5648 + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:5646 { + yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotRegexpOp, Right: yyDollar[4].exprUnion()} } + yyVAL.union = yyLOCAL case 1068: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5651 + var yyLOCAL Expr +//line sql.y:5650 { + yyLOCAL = yyDollar[1].exprUnion() } + yyVAL.union = yyLOCAL case 1069: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Expr -//line sql.y:5657 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:5656 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitOrOp, Right: yyDollar[3].exprUnion()} } - yyVAL.union = yyLOCAL case 1070: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Expr -//line sql.y:5661 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:5659 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitAndOp, Right: yyDollar[3].exprUnion()} } - yyVAL.union = yyLOCAL case 1071: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr //line sql.y:5665 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftLeftOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitOrOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1072: @@ -17071,7 +17058,7 @@ yydefault: var yyLOCAL Expr //line sql.y:5669 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftRightOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitAndOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1073: @@ -17079,7 +17066,7 @@ yydefault: var yyLOCAL Expr //line sql.y:5673 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: PlusOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftLeftOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1074: @@ -17087,7 +17074,7 @@ yydefault: var yyLOCAL Expr //line sql.y:5677 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MinusOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftRightOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1075: @@ -17095,7 +17082,7 @@ yydefault: var yyLOCAL Expr //line sql.y:5681 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MultOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: PlusOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1076: @@ -17103,7 +17090,7 @@ yydefault: var yyLOCAL Expr //line sql.y:5685 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: DivOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MinusOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1077: @@ -17111,7 +17098,7 @@ yydefault: var yyLOCAL Expr //line sql.y:5689 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MultOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1078: @@ -17119,7 +17106,7 @@ yydefault: var yyLOCAL Expr //line sql.y:5693 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: IntDivOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: DivOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1079: @@ -17135,29 +17122,29 @@ yydefault: var yyLOCAL Expr //line sql.y:5701 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitXorOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: IntDivOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1081: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr //line sql.y:5705 { - yyLOCAL = yyDollar[1].exprUnion() + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1082: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5711 +//line sql.y:5709 { - yyLOCAL = yyDollar[1].exprUnion() + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitXorOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1083: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5715 +//line sql.y:5713 { yyLOCAL = yyDollar[1].exprUnion() } @@ -17179,11 +17166,11 @@ yydefault: } yyVAL.union = yyLOCAL case 1086: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr //line sql.y:5727 { - yyLOCAL = &CollateExpr{Expr: yyDollar[1].exprUnion(), Collation: yyDollar[3].str} + yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL case 1087: @@ -17195,11 +17182,11 @@ yydefault: } yyVAL.union = yyLOCAL case 1088: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr //line sql.y:5735 { - yyLOCAL = yyDollar[1].exprUnion() + yyLOCAL = &CollateExpr{Expr: yyDollar[1].exprUnion(), Collation: yyDollar[3].str} } yyVAL.union = yyLOCAL case 1089: @@ -17207,23 +17194,23 @@ yydefault: var yyLOCAL Expr //line sql.y:5739 { - yyLOCAL = yyDollar[1].variableUnion() + yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL case 1090: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr //line sql.y:5743 { - yyLOCAL = yyDollar[2].exprUnion() // TODO: do we really want to ignore unary '+' before any kind of literals? + yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL case 1091: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr //line sql.y:5747 { - yyLOCAL = &UnaryExpr{Operator: UMinusOp, Expr: yyDollar[2].exprUnion()} + yyLOCAL = yyDollar[1].variableUnion() } yyVAL.union = yyLOCAL case 1092: @@ -17231,7 +17218,7 @@ yydefault: var yyLOCAL Expr //line sql.y:5751 { - yyLOCAL = &UnaryExpr{Operator: TildaOp, Expr: yyDollar[2].exprUnion()} + yyLOCAL = yyDollar[2].exprUnion() // TODO: do we really want to ignore unary '+' before any kind of literals? } yyVAL.union = yyLOCAL case 1093: @@ -17239,69 +17226,85 @@ yydefault: var yyLOCAL Expr //line sql.y:5755 { - yyLOCAL = &UnaryExpr{Operator: BangOp, Expr: yyDollar[2].exprUnion()} + yyLOCAL = &UnaryExpr{Operator: UMinusOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL case 1094: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr //line sql.y:5759 { - yyLOCAL = yyDollar[1].subqueryUnion() + yyLOCAL = &UnaryExpr{Operator: TildaOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL case 1095: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr //line sql.y:5763 { - yyLOCAL = yyDollar[1].exprUnion() + yyLOCAL = &UnaryExpr{Operator: BangOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL case 1096: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr //line sql.y:5767 { - yyLOCAL = &ExistsExpr{Subquery: yyDollar[2].subqueryUnion()} + yyLOCAL = yyDollar[1].subqueryUnion() } yyVAL.union = yyLOCAL case 1097: - yyDollar = yyS[yypt-7 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr //line sql.y:5771 { - yyLOCAL = &MatchExpr{Columns: yyDollar[2].colNamesUnion(), Expr: yyDollar[5].exprUnion(), Option: yyDollar[6].matchExprOptionUnion()} + yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL case 1098: - yyDollar = yyS[yypt-7 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr //line sql.y:5775 { - yyLOCAL = &CastExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion(), Array: yyDollar[6].booleanUnion()} + yyLOCAL = &ExistsExpr{Subquery: yyDollar[2].subqueryUnion()} } yyVAL.union = yyLOCAL case 1099: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr //line sql.y:5779 { - yyLOCAL = &ConvertExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion()} + yyLOCAL = &MatchExpr{Columns: yyDollar[2].colNamesUnion(), Expr: yyDollar[5].exprUnion(), Option: yyDollar[6].matchExprOptionUnion()} } yyVAL.union = yyLOCAL case 1100: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr //line sql.y:5783 { - yyLOCAL = &ConvertUsingExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].str} + yyLOCAL = &CastExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion(), Array: yyDollar[6].booleanUnion()} } yyVAL.union = yyLOCAL case 1101: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:5787 + { + yyLOCAL = &ConvertExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion()} + } + yyVAL.union = yyLOCAL + case 1102: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:5791 + { + yyLOCAL = &ConvertUsingExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].str} + } + yyVAL.union = yyLOCAL + case 1103: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Expr +//line sql.y:5795 { // From: https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#operator_binary // To convert a string expression to a binary string, these constructs are equivalent: @@ -17310,18 +17313,18 @@ yydefault: yyLOCAL = &ConvertExpr{Expr: yyDollar[2].exprUnion(), Type: &ConvertType{Type: yyDollar[1].str}} } yyVAL.union = yyLOCAL - case 1102: + case 1104: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5795 +//line sql.y:5803 { yyLOCAL = &Default{ColName: yyDollar[2].str} } yyVAL.union = yyLOCAL - case 1103: + case 1105: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5799 +//line sql.y:5807 { // INTERVAL can trigger a shift / reduce conflict. We want // to shift here for the interval rule. In case we do have @@ -17330,617 +17333,601 @@ yydefault: yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1104: + case 1106: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5807 +//line sql.y:5815 { yyLOCAL = &IntervalFuncExpr{Expr: yyDollar[3].exprUnion(), Exprs: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1105: + case 1107: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5811 +//line sql.y:5819 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: JSONExtractOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1106: + case 1108: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5815 +//line sql.y:5823 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: JSONUnquoteExtractOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1107: + case 1109: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5821 +//line sql.y:5829 { yyLOCAL = &IntervalExpr{Expr: yyDollar[2].exprUnion(), Unit: yyDollar[3].identifierCI.String()} } yyVAL.union = yyLOCAL - case 1108: + case 1110: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5827 +//line sql.y:5835 { yyLOCAL = yyDollar[1].colNamesUnion() } yyVAL.union = yyLOCAL - case 1109: + case 1111: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5831 +//line sql.y:5839 { yyLOCAL = yyDollar[2].colNamesUnion() } yyVAL.union = yyLOCAL - case 1110: + case 1112: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5837 +//line sql.y:5845 { yyLOCAL = []*ColName{yyDollar[1].colNameUnion()} } yyVAL.union = yyLOCAL - case 1111: + case 1113: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5841 +//line sql.y:5849 { yySLICE := (*[]*ColName)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].colNameUnion()) } - case 1112: + case 1114: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:5847 +//line sql.y:5855 { yyLOCAL = BothTrimType } yyVAL.union = yyLOCAL - case 1113: + case 1115: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:5851 +//line sql.y:5859 { yyLOCAL = LeadingTrimType } yyVAL.union = yyLOCAL - case 1114: + case 1116: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:5855 +//line sql.y:5863 { yyLOCAL = TrailingTrimType } yyVAL.union = yyLOCAL - case 1115: + case 1117: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FrameUnitType -//line sql.y:5861 +//line sql.y:5869 { yyLOCAL = FrameRowsType } yyVAL.union = yyLOCAL - case 1116: + case 1118: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FrameUnitType -//line sql.y:5865 +//line sql.y:5873 { yyLOCAL = FrameRangeType } yyVAL.union = yyLOCAL - case 1117: + case 1119: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5872 +//line sql.y:5880 { yyLOCAL = CumeDistExprType } yyVAL.union = yyLOCAL - case 1118: + case 1120: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5876 +//line sql.y:5884 { yyLOCAL = DenseRankExprType } yyVAL.union = yyLOCAL - case 1119: + case 1121: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5880 +//line sql.y:5888 { yyLOCAL = PercentRankExprType } yyVAL.union = yyLOCAL - case 1120: + case 1122: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5884 +//line sql.y:5892 { yyLOCAL = RankExprType } yyVAL.union = yyLOCAL - case 1121: + case 1123: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5888 +//line sql.y:5896 { yyLOCAL = RowNumberExprType } yyVAL.union = yyLOCAL - case 1122: + case 1124: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5894 +//line sql.y:5902 { yyLOCAL = &FramePoint{Type: CurrentRowType} } yyVAL.union = yyLOCAL - case 1123: + case 1125: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5898 +//line sql.y:5906 { yyLOCAL = &FramePoint{Type: UnboundedPrecedingType} } yyVAL.union = yyLOCAL - case 1124: + case 1126: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5902 +//line sql.y:5910 { yyLOCAL = &FramePoint{Type: UnboundedFollowingType} } yyVAL.union = yyLOCAL - case 1125: + case 1127: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5906 +//line sql.y:5914 { yyLOCAL = &FramePoint{Type: ExprPrecedingType, Expr: yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1126: + case 1128: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5910 +//line sql.y:5918 { yyLOCAL = &FramePoint{Type: ExprFollowingType, Expr: yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1127: + case 1129: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5916 +//line sql.y:5924 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1128: + case 1130: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5920 +//line sql.y:5928 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1129: + case 1131: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5925 +//line sql.y:5933 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1130: + case 1132: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5929 +//line sql.y:5937 { yyLOCAL = yyDollar[1].frameClauseUnion() } yyVAL.union = yyLOCAL - case 1131: + case 1133: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5935 +//line sql.y:5943 { yyLOCAL = &FrameClause{Unit: yyDollar[1].frameUnitTypeUnion(), Start: yyDollar[2].framePointUnion()} } yyVAL.union = yyLOCAL - case 1132: + case 1134: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5939 +//line sql.y:5947 { yyLOCAL = &FrameClause{Unit: yyDollar[1].frameUnitTypeUnion(), Start: yyDollar[3].framePointUnion(), End: yyDollar[5].framePointUnion()} } yyVAL.union = yyLOCAL - case 1133: + case 1135: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Exprs -//line sql.y:5944 +//line sql.y:5952 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1134: + case 1136: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Exprs -//line sql.y:5948 +//line sql.y:5956 { yyLOCAL = yyDollar[3].exprsUnion() } yyVAL.union = yyLOCAL - case 1135: + case 1137: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5953 +//line sql.y:5961 { } - case 1136: + case 1138: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5956 +//line sql.y:5964 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 1137: + case 1139: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *WindowSpecification -//line sql.y:5962 +//line sql.y:5970 { yyLOCAL = &WindowSpecification{Name: yyDollar[1].identifierCI, PartitionClause: yyDollar[2].exprsUnion(), OrderClause: yyDollar[3].orderByUnion(), FrameClause: yyDollar[4].frameClauseUnion()} } yyVAL.union = yyLOCAL - case 1138: + case 1140: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *OverClause -//line sql.y:5968 +//line sql.y:5976 { yyLOCAL = &OverClause{WindowSpec: yyDollar[3].windowSpecificationUnion()} } yyVAL.union = yyLOCAL - case 1139: + case 1141: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *OverClause -//line sql.y:5972 +//line sql.y:5980 { yyLOCAL = &OverClause{WindowName: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 1140: + case 1142: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *NullTreatmentClause -//line sql.y:5977 +//line sql.y:5985 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1142: + case 1144: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *NullTreatmentClause -//line sql.y:5984 +//line sql.y:5992 { yyLOCAL = &NullTreatmentClause{yyDollar[1].nullTreatmentTypeUnion()} } yyVAL.union = yyLOCAL - case 1143: + case 1145: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL NullTreatmentType -//line sql.y:5990 +//line sql.y:5998 { yyLOCAL = RespectNullsType } yyVAL.union = yyLOCAL - case 1144: + case 1146: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL NullTreatmentType -//line sql.y:5994 +//line sql.y:6002 { yyLOCAL = IgnoreNullsType } yyVAL.union = yyLOCAL - case 1145: + case 1147: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FirstOrLastValueExprType -//line sql.y:6000 +//line sql.y:6008 { yyLOCAL = FirstValueExprType } yyVAL.union = yyLOCAL - case 1146: + case 1148: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FirstOrLastValueExprType -//line sql.y:6004 +//line sql.y:6012 { yyLOCAL = LastValueExprType } yyVAL.union = yyLOCAL - case 1147: + case 1149: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL FromFirstLastType -//line sql.y:6010 +//line sql.y:6018 { yyLOCAL = FromFirstType } yyVAL.union = yyLOCAL - case 1148: + case 1150: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL FromFirstLastType -//line sql.y:6014 +//line sql.y:6022 { yyLOCAL = FromLastType } yyVAL.union = yyLOCAL - case 1149: + case 1151: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *FromFirstLastClause -//line sql.y:6019 +//line sql.y:6027 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1151: + case 1153: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *FromFirstLastClause -//line sql.y:6026 +//line sql.y:6034 { yyLOCAL = &FromFirstLastClause{yyDollar[1].fromFirstLastTypeUnion()} } yyVAL.union = yyLOCAL - case 1152: + case 1154: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LagLeadExprType -//line sql.y:6032 +//line sql.y:6040 { yyLOCAL = LagExprType } yyVAL.union = yyLOCAL - case 1153: + case 1155: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LagLeadExprType -//line sql.y:6036 +//line sql.y:6044 { yyLOCAL = LeadExprType } yyVAL.union = yyLOCAL - case 1154: + case 1156: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *WindowDefinition -//line sql.y:6042 +//line sql.y:6050 { yyLOCAL = &WindowDefinition{Name: yyDollar[1].identifierCI, WindowSpec: yyDollar[4].windowSpecificationUnion()} } yyVAL.union = yyLOCAL - case 1155: + case 1157: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL WindowDefinitions -//line sql.y:6048 +//line sql.y:6056 { yyLOCAL = WindowDefinitions{yyDollar[1].windowDefinitionUnion()} } yyVAL.union = yyLOCAL - case 1156: + case 1158: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:6052 +//line sql.y:6060 { yySLICE := (*WindowDefinitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].windowDefinitionUnion()) } - case 1157: + case 1159: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:6058 +//line sql.y:6066 { yyVAL.str = "" } - case 1158: + case 1160: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:6062 +//line sql.y:6070 { yyVAL.str = string(yyDollar[2].identifierCI.String()) } - case 1159: + case 1161: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL BoolVal -//line sql.y:6068 +//line sql.y:6076 { yyLOCAL = BoolVal(true) } yyVAL.union = yyLOCAL - case 1160: + case 1162: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL BoolVal -//line sql.y:6072 +//line sql.y:6080 { yyLOCAL = BoolVal(false) } yyVAL.union = yyLOCAL - case 1161: + case 1163: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:6079 +//line sql.y:6087 { yyLOCAL = IsTrueOp } yyVAL.union = yyLOCAL - case 1162: + case 1164: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:6083 +//line sql.y:6091 { yyLOCAL = IsNotTrueOp } yyVAL.union = yyLOCAL - case 1163: + case 1165: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:6087 +//line sql.y:6095 { yyLOCAL = IsFalseOp } yyVAL.union = yyLOCAL - case 1164: + case 1166: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:6091 +//line sql.y:6099 { yyLOCAL = IsNotFalseOp } yyVAL.union = yyLOCAL - case 1165: + case 1167: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6097 +//line sql.y:6105 { yyLOCAL = EqualOp } yyVAL.union = yyLOCAL - case 1166: + case 1168: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6101 +//line sql.y:6109 { yyLOCAL = LessThanOp } yyVAL.union = yyLOCAL - case 1167: + case 1169: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6105 +//line sql.y:6113 { yyLOCAL = GreaterThanOp } yyVAL.union = yyLOCAL - case 1168: + case 1170: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6109 +//line sql.y:6117 { yyLOCAL = LessEqualOp } yyVAL.union = yyLOCAL - case 1169: + case 1171: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6113 +//line sql.y:6121 { yyLOCAL = GreaterEqualOp } yyVAL.union = yyLOCAL - case 1170: + case 1172: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6117 +//line sql.y:6125 { yyLOCAL = NotEqualOp } yyVAL.union = yyLOCAL - case 1171: + case 1173: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6121 +//line sql.y:6129 { yyLOCAL = NullSafeEqualOp } yyVAL.union = yyLOCAL - case 1172: + case 1174: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:6127 +//line sql.y:6135 { yyLOCAL = yyDollar[1].valTupleUnion() } yyVAL.union = yyLOCAL - case 1173: + case 1175: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:6131 +//line sql.y:6139 { yyLOCAL = yyDollar[1].subqueryUnion() } yyVAL.union = yyLOCAL - case 1174: + case 1176: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:6135 +//line sql.y:6143 { yyLOCAL = ListArg(yyDollar[1].str[2:]) bindVariable(yylex, yyDollar[1].str[2:]) } yyVAL.union = yyLOCAL - case 1175: + case 1177: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Subquery -//line sql.y:6142 +//line sql.y:6150 { yyLOCAL = &Subquery{yyDollar[1].selStmtUnion()} } yyVAL.union = yyLOCAL - case 1176: + case 1178: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Exprs -//line sql.y:6148 +//line sql.y:6156 { yyLOCAL = Exprs{yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1177: + case 1179: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:6152 +//line sql.y:6160 { yySLICE := (*Exprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].exprUnion()) } - case 1178: + case 1180: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6162 +//line sql.y:6170 { yyLOCAL = &FuncExpr{Name: yyDollar[1].identifierCI, Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1179: + case 1181: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6166 +//line sql.y:6174 { yyLOCAL = &FuncExpr{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCI, Exprs: yyDollar[5].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1180: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6176 - { - yyLOCAL = &FuncExpr{Name: NewIdentifierCI("left"), Exprs: yyDollar[3].selectExprsUnion()} - } - yyVAL.union = yyLOCAL - case 1181: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6180 - { - yyLOCAL = &FuncExpr{Name: NewIdentifierCI("right"), Exprs: yyDollar[3].selectExprsUnion()} - } - yyVAL.union = yyLOCAL case 1182: - yyDollar = yyS[yypt-8 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6184 { - yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} + yyLOCAL = &FuncExpr{Name: NewIdentifierCI("left"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL case 1183: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6188 { - yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()} + yyLOCAL = &FuncExpr{Name: NewIdentifierCI("right"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL case 1184: @@ -17960,99 +17947,99 @@ yydefault: } yyVAL.union = yyLOCAL case 1186: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr //line sql.y:6200 { - yyLOCAL = &CaseExpr{Expr: yyDollar[2].exprUnion(), Whens: yyDollar[3].whensUnion(), Else: yyDollar[4].exprUnion()} + yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL case 1187: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6204 { - yyLOCAL = &ValuesFuncExpr{Name: yyDollar[3].colNameUnion()} + yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL case 1188: - yyDollar = yyS[yypt-10 : yypt+1] + yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr //line sql.y:6208 { - yyLOCAL = &InsertExpr{Str: yyDollar[3].exprUnion(), Pos: yyDollar[5].exprUnion(), Len: yyDollar[7].exprUnion(), NewStr: yyDollar[9].exprUnion()} + yyLOCAL = &CaseExpr{Expr: yyDollar[2].exprUnion(), Whens: yyDollar[3].whensUnion(), Else: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL case 1189: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6212 { - yyLOCAL = &FuncExpr{Name: NewIdentifierCI(yyDollar[1].str)} + yyLOCAL = &ValuesFuncExpr{Name: yyDollar[3].colNameUnion()} } yyVAL.union = yyLOCAL case 1190: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6223 +//line sql.y:6216 { - yyLOCAL = &FuncExpr{Name: NewIdentifierCI("utc_date")} + yyLOCAL = &InsertExpr{Str: yyDollar[3].exprUnion(), Pos: yyDollar[5].exprUnion(), Len: yyDollar[7].exprUnion(), NewStr: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL case 1191: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6227 +//line sql.y:6220 { - yyLOCAL = yyDollar[1].exprUnion() + yyLOCAL = &FuncExpr{Name: NewIdentifierCI(yyDollar[1].str)} } yyVAL.union = yyLOCAL case 1192: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6233 +//line sql.y:6231 { - yyLOCAL = &FuncExpr{Name: NewIdentifierCI("current_date")} + yyLOCAL = &FuncExpr{Name: NewIdentifierCI("utc_date")} } yyVAL.union = yyLOCAL case 1193: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6237 +//line sql.y:6235 { - yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("utc_time"), Fsp: yyDollar[2].exprUnion()} + yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL case 1194: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6242 +//line sql.y:6241 { - yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("current_time"), Fsp: yyDollar[2].exprUnion()} + yyLOCAL = &FuncExpr{Name: NewIdentifierCI("current_date")} } yyVAL.union = yyLOCAL case 1195: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6246 +//line sql.y:6245 { - yyLOCAL = &CountStar{} + yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("utc_time"), Fsp: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL case 1196: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr //line sql.y:6250 { - yyLOCAL = &Count{Distinct: yyDollar[3].booleanUnion(), Args: yyDollar[4].exprsUnion()} + yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("current_time"), Fsp: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL case 1197: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6254 { - yyLOCAL = &Max{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} + yyLOCAL = &CountStar{} } yyVAL.union = yyLOCAL case 1198: @@ -18060,7 +18047,7 @@ yydefault: var yyLOCAL Expr //line sql.y:6258 { - yyLOCAL = &Min{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} + yyLOCAL = &Count{Distinct: yyDollar[3].booleanUnion(), Args: yyDollar[4].exprsUnion()} } yyVAL.union = yyLOCAL case 1199: @@ -18068,7 +18055,7 @@ yydefault: var yyLOCAL Expr //line sql.y:6262 { - yyLOCAL = &Sum{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} + yyLOCAL = &Max{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL case 1200: @@ -18076,23 +18063,23 @@ yydefault: var yyLOCAL Expr //line sql.y:6266 { - yyLOCAL = &Avg{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} + yyLOCAL = &Min{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL case 1201: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr //line sql.y:6270 { - yyLOCAL = &BitAnd{Arg: yyDollar[3].exprUnion()} + yyLOCAL = &Sum{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL case 1202: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr //line sql.y:6274 { - yyLOCAL = &BitOr{Arg: yyDollar[3].exprUnion()} + yyLOCAL = &Avg{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL case 1203: @@ -18100,7 +18087,7 @@ yydefault: var yyLOCAL Expr //line sql.y:6278 { - yyLOCAL = &BitXor{Arg: yyDollar[3].exprUnion()} + yyLOCAL = &BitAnd{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1204: @@ -18108,7 +18095,7 @@ yydefault: var yyLOCAL Expr //line sql.y:6282 { - yyLOCAL = &Std{Arg: yyDollar[3].exprUnion()} + yyLOCAL = &BitOr{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1205: @@ -18116,7 +18103,7 @@ yydefault: var yyLOCAL Expr //line sql.y:6286 { - yyLOCAL = &StdDev{Arg: yyDollar[3].exprUnion()} + yyLOCAL = &BitXor{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1206: @@ -18124,7 +18111,7 @@ yydefault: var yyLOCAL Expr //line sql.y:6290 { - yyLOCAL = &StdPop{Arg: yyDollar[3].exprUnion()} + yyLOCAL = &Std{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1207: @@ -18132,7 +18119,7 @@ yydefault: var yyLOCAL Expr //line sql.y:6294 { - yyLOCAL = &StdSamp{Arg: yyDollar[3].exprUnion()} + yyLOCAL = &StdDev{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1208: @@ -18140,7 +18127,7 @@ yydefault: var yyLOCAL Expr //line sql.y:6298 { - yyLOCAL = &VarPop{Arg: yyDollar[3].exprUnion()} + yyLOCAL = &StdPop{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1209: @@ -18148,7 +18135,7 @@ yydefault: var yyLOCAL Expr //line sql.y:6302 { - yyLOCAL = &VarSamp{Arg: yyDollar[3].exprUnion()} + yyLOCAL = &StdSamp{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1210: @@ -18156,23 +18143,23 @@ yydefault: var yyLOCAL Expr //line sql.y:6306 { - yyLOCAL = &Variance{Arg: yyDollar[3].exprUnion()} + yyLOCAL = &VarPop{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1211: - yyDollar = yyS[yypt-8 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6310 { - yyLOCAL = &GroupConcatExpr{Distinct: yyDollar[3].booleanUnion(), Exprs: yyDollar[4].exprsUnion(), OrderBy: yyDollar[5].orderByUnion(), Separator: yyDollar[6].str, Limit: yyDollar[7].limitUnion()} + yyLOCAL = &VarSamp{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1212: - yyDollar = yyS[yypt-8 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6314 { - yyLOCAL = &TimestampFuncExpr{Name: string("timestampadd"), Unit: yyDollar[3].identifierCI.String(), Expr1: yyDollar[5].exprUnion(), Expr2: yyDollar[7].exprUnion()} + yyLOCAL = &Variance{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1213: @@ -18180,39 +18167,39 @@ yydefault: var yyLOCAL Expr //line sql.y:6318 { - yyLOCAL = &TimestampFuncExpr{Name: string("timestampdiff"), Unit: yyDollar[3].identifierCI.String(), Expr1: yyDollar[5].exprUnion(), Expr2: yyDollar[7].exprUnion()} + yyLOCAL = &GroupConcatExpr{Distinct: yyDollar[3].booleanUnion(), Exprs: yyDollar[4].exprsUnion(), OrderBy: yyDollar[5].orderByUnion(), Separator: yyDollar[6].str, Limit: yyDollar[7].limitUnion()} } yyVAL.union = yyLOCAL case 1214: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr //line sql.y:6322 { - yyLOCAL = &ExtractFuncExpr{IntervalTypes: yyDollar[3].intervalTypeUnion(), Expr: yyDollar[5].exprUnion()} + yyLOCAL = &TimestampFuncExpr{Name: string("timestampadd"), Unit: yyDollar[3].identifierCI.String(), Expr1: yyDollar[5].exprUnion(), Expr2: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL case 1215: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr //line sql.y:6326 { - yyLOCAL = &WeightStringFuncExpr{Expr: yyDollar[3].exprUnion(), As: yyDollar[4].convertTypeUnion()} + yyLOCAL = &TimestampFuncExpr{Name: string("timestampdiff"), Unit: yyDollar[3].identifierCI.String(), Expr1: yyDollar[5].exprUnion(), Expr2: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL case 1216: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6330 { - yyLOCAL = &JSONPrettyExpr{JSONVal: yyDollar[3].exprUnion()} + yyLOCAL = &ExtractFuncExpr{IntervalTypes: yyDollar[3].intervalTypeUnion(), Expr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL case 1217: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr //line sql.y:6334 { - yyLOCAL = &JSONStorageFreeExpr{JSONVal: yyDollar[3].exprUnion()} + yyLOCAL = &WeightStringFuncExpr{Expr: yyDollar[3].exprUnion(), As: yyDollar[4].convertTypeUnion()} } yyVAL.union = yyLOCAL case 1218: @@ -18220,7 +18207,7 @@ yydefault: var yyLOCAL Expr //line sql.y:6338 { - yyLOCAL = &JSONStorageSizeExpr{JSONVal: yyDollar[3].exprUnion()} + yyLOCAL = &JSONPrettyExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1219: @@ -18228,7 +18215,7 @@ yydefault: var yyLOCAL Expr //line sql.y:6342 { - yyLOCAL = &TrimFuncExpr{TrimFuncType: LTrimType, StringArg: yyDollar[3].exprUnion()} + yyLOCAL = &JSONStorageFreeExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1220: @@ -18236,15 +18223,15 @@ yydefault: var yyLOCAL Expr //line sql.y:6346 { - yyLOCAL = &TrimFuncExpr{TrimFuncType: RTrimType, StringArg: yyDollar[3].exprUnion()} + yyLOCAL = &JSONStorageSizeExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1221: - yyDollar = yyS[yypt-7 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6350 { - yyLOCAL = &TrimFuncExpr{Type: yyDollar[3].trimTypeUnion(), TrimArg: yyDollar[4].exprUnion(), StringArg: yyDollar[6].exprUnion()} + yyLOCAL = &TrimFuncExpr{TrimFuncType: LTrimType, StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1222: @@ -18252,31 +18239,31 @@ yydefault: var yyLOCAL Expr //line sql.y:6354 { - yyLOCAL = &TrimFuncExpr{StringArg: yyDollar[3].exprUnion()} + yyLOCAL = &TrimFuncExpr{TrimFuncType: RTrimType, StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1223: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr //line sql.y:6358 { - yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion()} + yyLOCAL = &TrimFuncExpr{Type: yyDollar[3].trimTypeUnion(), TrimArg: yyDollar[4].exprUnion(), StringArg: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL case 1224: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6362 { - yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion(), Charset: yyDollar[5].str} + yyLOCAL = &TrimFuncExpr{StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1225: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6366 { - yyLOCAL = &TrimFuncExpr{TrimArg: yyDollar[3].exprUnion(), StringArg: yyDollar[5].exprUnion()} + yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL case 1226: @@ -18284,15 +18271,15 @@ yydefault: var yyLOCAL Expr //line sql.y:6370 { - yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()} + yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion(), Charset: yyDollar[5].str} } yyVAL.union = yyLOCAL case 1227: - yyDollar = yyS[yypt-8 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6374 { - yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion(), Pos: yyDollar[7].exprUnion()} + yyLOCAL = &TrimFuncExpr{TrimArg: yyDollar[3].exprUnion(), StringArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL case 1228: @@ -18304,35 +18291,35 @@ yydefault: } yyVAL.union = yyLOCAL case 1229: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr //line sql.y:6382 { - yyLOCAL = &LockingFunc{Type: GetLock, Name: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} + yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion(), Pos: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL case 1230: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6386 { - yyLOCAL = &LockingFunc{Type: IsFreeLock, Name: yyDollar[3].exprUnion()} + yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL case 1231: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6390 { - yyLOCAL = &LockingFunc{Type: IsUsedLock, Name: yyDollar[3].exprUnion()} + yyLOCAL = &LockingFunc{Type: GetLock, Name: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL case 1232: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6394 { - yyLOCAL = &LockingFunc{Type: ReleaseAllLocks} + yyLOCAL = &LockingFunc{Type: IsFreeLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1233: @@ -18340,39 +18327,39 @@ yydefault: var yyLOCAL Expr //line sql.y:6398 { - yyLOCAL = &LockingFunc{Type: ReleaseLock, Name: yyDollar[3].exprUnion()} + yyLOCAL = &LockingFunc{Type: IsUsedLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1234: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr //line sql.y:6402 { - yyLOCAL = &JSONSchemaValidFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} + yyLOCAL = &LockingFunc{Type: ReleaseAllLocks} } yyVAL.union = yyLOCAL case 1235: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6406 { - yyLOCAL = &JSONSchemaValidationReportFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} + yyLOCAL = &LockingFunc{Type: ReleaseLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1236: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6410 { - yyLOCAL = &JSONArrayExpr{Params: yyDollar[3].exprsUnion()} + yyLOCAL = &JSONSchemaValidFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL case 1237: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6414 { - yyLOCAL = &JSONObjectExpr{Params: yyDollar[3].jsonObjectParamsUnion()} + yyLOCAL = &JSONSchemaValidationReportFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL case 1238: @@ -18380,23 +18367,23 @@ yydefault: var yyLOCAL Expr //line sql.y:6418 { - yyLOCAL = &JSONQuoteExpr{StringArg: yyDollar[3].exprUnion()} + yyLOCAL = &JSONArrayExpr{Params: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL case 1239: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6422 { - yyLOCAL = &JSONContainsExpr{Target: yyDollar[3].exprUnion(), Candidate: yyDollar[5].exprsUnion()[0], PathList: yyDollar[5].exprsUnion()[1:]} + yyLOCAL = &JSONObjectExpr{Params: yyDollar[3].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL case 1240: - yyDollar = yyS[yypt-8 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6426 { - yyLOCAL = &JSONContainsPathExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), PathList: yyDollar[7].exprsUnion()} + yyLOCAL = &JSONQuoteExpr{StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1241: @@ -18404,15 +18391,15 @@ yydefault: var yyLOCAL Expr //line sql.y:6430 { - yyLOCAL = &JSONExtractExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()} + yyLOCAL = &JSONContainsExpr{Target: yyDollar[3].exprUnion(), Candidate: yyDollar[5].exprsUnion()[0], PathList: yyDollar[5].exprsUnion()[1:]} } yyVAL.union = yyLOCAL case 1242: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr //line sql.y:6434 { - yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion()} + yyLOCAL = &JSONContainsPathExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), PathList: yyDollar[7].exprsUnion()} } yyVAL.union = yyLOCAL case 1243: @@ -18420,79 +18407,79 @@ yydefault: var yyLOCAL Expr //line sql.y:6438 { - yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} + yyLOCAL = &JSONExtractExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL case 1244: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6442 { - yyLOCAL = &JSONOverlapsExpr{JSONDoc1: yyDollar[3].exprUnion(), JSONDoc2: yyDollar[5].exprUnion()} + yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1245: - yyDollar = yyS[yypt-8 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6446 { - yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion()} + yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL case 1246: - yyDollar = yyS[yypt-10 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6450 { - yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion(), EscapeChar: yyDollar[9].exprsUnion()[0], PathList: yyDollar[9].exprsUnion()[1:]} + yyLOCAL = &JSONOverlapsExpr{JSONDoc1: yyDollar[3].exprUnion(), JSONDoc2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL case 1247: - yyDollar = yyS[yypt-7 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr //line sql.y:6454 { - yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion()} + yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL case 1248: - yyDollar = yyS[yypt-8 : yypt+1] + yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr //line sql.y:6458 { - yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()} + yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion(), EscapeChar: yyDollar[9].exprsUnion()[0], PathList: yyDollar[9].exprsUnion()[1:]} } yyVAL.union = yyLOCAL case 1249: - yyDollar = yyS[yypt-8 : yypt+1] + yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr //line sql.y:6462 { - yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()} + yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion()} } yyVAL.union = yyLOCAL case 1250: - yyDollar = yyS[yypt-9 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr //line sql.y:6466 { - yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()} + yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()} } yyVAL.union = yyLOCAL case 1251: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr //line sql.y:6470 { - yyLOCAL = &JSONAttributesExpr{Type: DepthAttributeType, JSONDoc: yyDollar[3].exprUnion()} + yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()} } yyVAL.union = yyLOCAL case 1252: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr //line sql.y:6474 { - yyLOCAL = &JSONAttributesExpr{Type: ValidAttributeType, JSONDoc: yyDollar[3].exprUnion()} + yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()} } yyVAL.union = yyLOCAL case 1253: @@ -18500,7 +18487,7 @@ yydefault: var yyLOCAL Expr //line sql.y:6478 { - yyLOCAL = &JSONAttributesExpr{Type: TypeAttributeType, JSONDoc: yyDollar[3].exprUnion()} + yyLOCAL = &JSONAttributesExpr{Type: DepthAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1254: @@ -18508,23 +18495,23 @@ yydefault: var yyLOCAL Expr //line sql.y:6482 { - yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion()} + yyLOCAL = &JSONAttributesExpr{Type: ValidAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1255: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6486 { - yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} + yyLOCAL = &JSONAttributesExpr{Type: TypeAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1256: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6490 { - yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayAppendType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} + yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1257: @@ -18532,7 +18519,7 @@ yydefault: var yyLOCAL Expr //line sql.y:6494 { - yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} + yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL case 1258: @@ -18540,7 +18527,7 @@ yydefault: var yyLOCAL Expr //line sql.y:6498 { - yyLOCAL = &JSONValueModifierExpr{Type: JSONInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} + yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayAppendType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL case 1259: @@ -18548,7 +18535,7 @@ yydefault: var yyLOCAL Expr //line sql.y:6502 { - yyLOCAL = &JSONValueModifierExpr{Type: JSONReplaceType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} + yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL case 1260: @@ -18556,7 +18543,7 @@ yydefault: var yyLOCAL Expr //line sql.y:6506 { - yyLOCAL = &JSONValueModifierExpr{Type: JSONSetType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} + yyLOCAL = &JSONValueModifierExpr{Type: JSONInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL case 1261: @@ -18564,7 +18551,7 @@ yydefault: var yyLOCAL Expr //line sql.y:6510 { - yyLOCAL = &JSONValueMergeExpr{Type: JSONMergeType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} + yyLOCAL = &JSONValueModifierExpr{Type: JSONReplaceType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL case 1262: @@ -18572,7 +18559,7 @@ yydefault: var yyLOCAL Expr //line sql.y:6514 { - yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePatchType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} + yyLOCAL = &JSONValueModifierExpr{Type: JSONSetType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL case 1263: @@ -18580,7 +18567,7 @@ yydefault: var yyLOCAL Expr //line sql.y:6518 { - yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePreserveType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} + yyLOCAL = &JSONValueMergeExpr{Type: JSONMergeType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL case 1264: @@ -18588,384 +18575,384 @@ yydefault: var yyLOCAL Expr //line sql.y:6522 { - yyLOCAL = &JSONRemoveExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()} + yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePatchType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL case 1265: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6526 { - yyLOCAL = &JSONUnquoteExpr{JSONValue: yyDollar[3].exprUnion()} + yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePreserveType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL case 1266: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6530 { - yyLOCAL = &ArgumentLessWindowExpr{Type: yyDollar[1].argumentLessWindowExprTypeUnion(), OverClause: yyDollar[4].overClauseUnion()} + yyLOCAL = &JSONRemoveExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL case 1267: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6534 { - yyLOCAL = &FirstOrLastValueExpr{Type: yyDollar[1].firstOrLastValueExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()} + yyLOCAL = &JSONUnquoteExpr{JSONValue: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1268: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6538 { - yyLOCAL = &NtileExpr{N: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} + yyLOCAL = &ArgumentLessWindowExpr{Type: yyDollar[1].argumentLessWindowExprTypeUnion(), OverClause: yyDollar[4].overClauseUnion()} } yyVAL.union = yyLOCAL case 1269: - yyDollar = yyS[yypt-9 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6542 { - yyLOCAL = &NTHValueExpr{Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), FromFirstLastClause: yyDollar[7].fromFirstLastClauseUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()} + yyLOCAL = &FirstOrLastValueExpr{Type: yyDollar[1].firstOrLastValueExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL case 1270: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr //line sql.y:6546 { - yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()} + yyLOCAL = &NtileExpr{N: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL case 1271: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr //line sql.y:6550 + { + yyLOCAL = &NTHValueExpr{Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), FromFirstLastClause: yyDollar[7].fromFirstLastClauseUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()} + } + yyVAL.union = yyLOCAL + case 1272: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6554 + { + yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()} + } + yyVAL.union = yyLOCAL + case 1273: + yyDollar = yyS[yypt-9 : yypt+1] + var yyLOCAL Expr +//line sql.y:6558 { yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), Default: yyDollar[6].exprUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1276: + case 1278: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6560 +//line sql.y:6568 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1277: + case 1279: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6564 +//line sql.y:6572 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1278: + case 1280: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6568 +//line sql.y:6576 { yyLOCAL = yyDollar[1].variableUnion() } yyVAL.union = yyLOCAL - case 1279: + case 1281: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6572 +//line sql.y:6580 { yyLOCAL = NewArgument(yyDollar[1].str[1:]) bindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL - case 1280: + case 1282: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:6578 +//line sql.y:6586 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1281: + case 1283: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6582 +//line sql.y:6590 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1282: + case 1284: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6588 +//line sql.y:6596 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1283: + case 1285: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6592 +//line sql.y:6600 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1284: + case 1286: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6596 +//line sql.y:6604 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1285: + case 1287: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6600 +//line sql.y:6608 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1286: + case 1288: yyDollar = yyS[yypt-14 : yypt+1] var yyLOCAL Expr -//line sql.y:6604 +//line sql.y:6612 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()} } yyVAL.union = yyLOCAL - case 1287: + case 1289: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6609 +//line sql.y:6617 { yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1288: + case 1290: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6613 +//line sql.y:6621 { yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), MatchType: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1289: + case 1291: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6617 +//line sql.y:6625 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1290: + case 1292: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6621 +//line sql.y:6629 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1291: + case 1293: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6625 +//line sql.y:6633 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1292: + case 1294: yyDollar = yyS[yypt-14 : yypt+1] var yyLOCAL Expr -//line sql.y:6629 +//line sql.y:6637 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()} } yyVAL.union = yyLOCAL - case 1293: + case 1295: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6634 +//line sql.y:6642 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1294: + case 1296: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6638 +//line sql.y:6646 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1295: + case 1297: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6642 +//line sql.y:6650 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1296: + case 1298: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6646 +//line sql.y:6654 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), MatchType: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1297: + case 1299: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6653 +//line sql.y:6661 { yyLOCAL = &ExtractValueExpr{Fragment: yyDollar[3].exprUnion(), XPathExpr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1298: + case 1300: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6657 +//line sql.y:6665 { yyLOCAL = &UpdateXMLExpr{Target: yyDollar[3].exprUnion(), XPathExpr: yyDollar[5].exprUnion(), NewXML: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1299: + case 1301: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6663 +//line sql.y:6671 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatBytesType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1300: + case 1302: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6667 +//line sql.y:6675 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatPicoTimeType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1301: + case 1303: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6671 +//line sql.y:6679 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsCurrentThreadIDType} } yyVAL.union = yyLOCAL - case 1302: + case 1304: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6675 +//line sql.y:6683 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsThreadIDType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1303: + case 1305: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6681 +//line sql.y:6689 { yyLOCAL = >IDFuncExpr{Type: GTIDSubsetType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1304: + case 1306: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6685 +//line sql.y:6693 { yyLOCAL = >IDFuncExpr{Type: GTIDSubtractType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1305: + case 1307: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6689 +//line sql.y:6697 { yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1306: + case 1308: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6693 +//line sql.y:6701 { yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1307: + case 1309: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6697 +//line sql.y:6705 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1308: + case 1310: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6701 +//line sql.y:6709 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1309: + case 1311: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6705 +//line sql.y:6713 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion(), Channel: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1310: + case 1312: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6710 +//line sql.y:6718 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1311: + case 1313: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6714 - { - yyLOCAL = yyDollar[2].convertTypeUnion() - } - yyVAL.union = yyLOCAL - case 1312: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6720 - { - } - case 1313: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL IntervalTypes //line sql.y:6722 { - yyLOCAL = IntervalDayHour + yyLOCAL = yyDollar[2].convertTypeUnion() } yyVAL.union = yyLOCAL case 1314: yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL IntervalTypes -//line sql.y:6726 +//line sql.y:6728 { - yyLOCAL = IntervalDayMicrosecond } - yyVAL.union = yyLOCAL case 1315: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes //line sql.y:6730 { - yyLOCAL = IntervalDayMinute + yyLOCAL = IntervalDayHour } yyVAL.union = yyLOCAL case 1316: @@ -18973,7 +18960,7 @@ yydefault: var yyLOCAL IntervalTypes //line sql.y:6734 { - yyLOCAL = IntervalDaySecond + yyLOCAL = IntervalDayMicrosecond } yyVAL.union = yyLOCAL case 1317: @@ -18981,7 +18968,7 @@ yydefault: var yyLOCAL IntervalTypes //line sql.y:6738 { - yyLOCAL = IntervalHourMicrosecond + yyLOCAL = IntervalDayMinute } yyVAL.union = yyLOCAL case 1318: @@ -18989,7 +18976,7 @@ yydefault: var yyLOCAL IntervalTypes //line sql.y:6742 { - yyLOCAL = IntervalHourMinute + yyLOCAL = IntervalDaySecond } yyVAL.union = yyLOCAL case 1319: @@ -18997,7 +18984,7 @@ yydefault: var yyLOCAL IntervalTypes //line sql.y:6746 { - yyLOCAL = IntervalHourSecond + yyLOCAL = IntervalHourMicrosecond } yyVAL.union = yyLOCAL case 1320: @@ -19005,7 +18992,7 @@ yydefault: var yyLOCAL IntervalTypes //line sql.y:6750 { - yyLOCAL = IntervalMinuteMicrosecond + yyLOCAL = IntervalHourMinute } yyVAL.union = yyLOCAL case 1321: @@ -19013,7 +19000,7 @@ yydefault: var yyLOCAL IntervalTypes //line sql.y:6754 { - yyLOCAL = IntervalMinuteSecond + yyLOCAL = IntervalHourSecond } yyVAL.union = yyLOCAL case 1322: @@ -19021,7 +19008,7 @@ yydefault: var yyLOCAL IntervalTypes //line sql.y:6758 { - yyLOCAL = IntervalSecondMicrosecond + yyLOCAL = IntervalMinuteMicrosecond } yyVAL.union = yyLOCAL case 1323: @@ -19029,23 +19016,23 @@ yydefault: var yyLOCAL IntervalTypes //line sql.y:6762 { - yyLOCAL = IntervalYearMonth + yyLOCAL = IntervalMinuteSecond } yyVAL.union = yyLOCAL case 1324: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6768 +//line sql.y:6766 { - yyLOCAL = IntervalDay + yyLOCAL = IntervalSecondMicrosecond } yyVAL.union = yyLOCAL case 1325: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6772 +//line sql.y:6770 { - yyLOCAL = IntervalWeek + yyLOCAL = IntervalYearMonth } yyVAL.union = yyLOCAL case 1326: @@ -19053,7 +19040,7 @@ yydefault: var yyLOCAL IntervalTypes //line sql.y:6776 { - yyLOCAL = IntervalHour + yyLOCAL = IntervalDay } yyVAL.union = yyLOCAL case 1327: @@ -19061,7 +19048,7 @@ yydefault: var yyLOCAL IntervalTypes //line sql.y:6780 { - yyLOCAL = IntervalMinute + yyLOCAL = IntervalWeek } yyVAL.union = yyLOCAL case 1328: @@ -19069,7 +19056,7 @@ yydefault: var yyLOCAL IntervalTypes //line sql.y:6784 { - yyLOCAL = IntervalMonth + yyLOCAL = IntervalHour } yyVAL.union = yyLOCAL case 1329: @@ -19077,7 +19064,7 @@ yydefault: var yyLOCAL IntervalTypes //line sql.y:6788 { - yyLOCAL = IntervalQuarter + yyLOCAL = IntervalMinute } yyVAL.union = yyLOCAL case 1330: @@ -19085,7 +19072,7 @@ yydefault: var yyLOCAL IntervalTypes //line sql.y:6792 { - yyLOCAL = IntervalSecond + yyLOCAL = IntervalMonth } yyVAL.union = yyLOCAL case 1331: @@ -19093,429 +19080,445 @@ yydefault: var yyLOCAL IntervalTypes //line sql.y:6796 { - yyLOCAL = IntervalMicrosecond + yyLOCAL = IntervalQuarter } yyVAL.union = yyLOCAL case 1332: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes //line sql.y:6800 + { + yyLOCAL = IntervalSecond + } + yyVAL.union = yyLOCAL + case 1333: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL IntervalTypes +//line sql.y:6804 + { + yyLOCAL = IntervalMicrosecond + } + yyVAL.union = yyLOCAL + case 1334: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL IntervalTypes +//line sql.y:6808 { yyLOCAL = IntervalYear } yyVAL.union = yyLOCAL - case 1335: + case 1337: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:6810 +//line sql.y:6818 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1336: + case 1338: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6814 +//line sql.y:6822 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1337: + case 1339: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6818 +//line sql.y:6826 { yyLOCAL = NewIntLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 1338: + case 1340: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6822 +//line sql.y:6830 { yyLOCAL = NewArgument(yyDollar[2].str[1:]) bindVariable(yylex, yyDollar[2].str[1:]) } yyVAL.union = yyLOCAL - case 1339: + case 1341: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6833 +//line sql.y:6841 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("if"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1340: + case 1342: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6837 +//line sql.y:6845 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("database"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1341: + case 1343: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6841 +//line sql.y:6849 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("schema"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1342: + case 1344: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6845 +//line sql.y:6853 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("mod"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1343: + case 1345: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6849 +//line sql.y:6857 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("replace"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1344: + case 1346: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6855 +//line sql.y:6863 { yyLOCAL = NoOption } yyVAL.union = yyLOCAL - case 1345: + case 1347: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6859 +//line sql.y:6867 { yyLOCAL = BooleanModeOpt } yyVAL.union = yyLOCAL - case 1346: + case 1348: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6863 +//line sql.y:6871 { yyLOCAL = NaturalLanguageModeOpt } yyVAL.union = yyLOCAL - case 1347: + case 1349: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6867 +//line sql.y:6875 { yyLOCAL = NaturalLanguageModeWithQueryExpansionOpt } yyVAL.union = yyLOCAL - case 1348: + case 1350: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6871 +//line sql.y:6879 { yyLOCAL = QueryExpansionOpt } yyVAL.union = yyLOCAL - case 1349: + case 1351: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6877 +//line sql.y:6885 { yyVAL.str = string(yyDollar[1].identifierCI.String()) } - case 1350: + case 1352: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6881 +//line sql.y:6889 { yyVAL.str = string(yyDollar[1].str) } - case 1351: + case 1353: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6885 +//line sql.y:6893 { yyVAL.str = string(yyDollar[1].str) } - case 1352: + case 1354: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6891 +//line sql.y:6899 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1353: + case 1355: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6895 +//line sql.y:6903 { yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: NewIntLiteral(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 1354: + case 1356: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6899 +//line sql.y:6907 { yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: NewIntLiteral(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 1355: + case 1357: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6905 +//line sql.y:6913 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1356: + case 1358: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6909 +//line sql.y:6917 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion(), Charset: yyDollar[3].columnCharset} } yyVAL.union = yyLOCAL - case 1357: + case 1359: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6913 +//line sql.y:6921 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1358: + case 1360: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6917 +//line sql.y:6925 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1359: + case 1361: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6921 +//line sql.y:6929 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} yyLOCAL.Length = yyDollar[2].LengthScaleOption.Length yyLOCAL.Scale = yyDollar[2].LengthScaleOption.Scale } yyVAL.union = yyLOCAL - case 1360: + case 1362: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6927 +//line sql.y:6935 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1361: + case 1363: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6931 +//line sql.y:6939 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1362: + case 1364: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6935 +//line sql.y:6943 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1363: + case 1365: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6939 +//line sql.y:6947 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1364: + case 1366: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6943 +//line sql.y:6951 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1365: + case 1367: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6947 +//line sql.y:6955 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1366: + case 1368: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6951 +//line sql.y:6959 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1367: + case 1369: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6955 +//line sql.y:6963 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1368: + case 1370: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6959 +//line sql.y:6967 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1369: + case 1371: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6963 +//line sql.y:6971 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1370: + case 1372: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:6969 +//line sql.y:6977 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1371: + case 1373: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:6973 +//line sql.y:6981 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1372: + case 1374: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:6978 +//line sql.y:6986 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1373: + case 1375: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6982 +//line sql.y:6990 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1374: + case 1376: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:6987 +//line sql.y:6995 { yyVAL.str = string("") } - case 1375: + case 1377: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:6991 +//line sql.y:6999 { yyVAL.str = " separator " + encodeSQLString(yyDollar[2].str) } - case 1376: + case 1378: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*When -//line sql.y:6997 +//line sql.y:7005 { yyLOCAL = []*When{yyDollar[1].whenUnion()} } yyVAL.union = yyLOCAL - case 1377: + case 1379: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7001 +//line sql.y:7009 { yySLICE := (*[]*When)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].whenUnion()) } - case 1378: + case 1380: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *When -//line sql.y:7007 +//line sql.y:7015 { yyLOCAL = &When{Cond: yyDollar[2].exprUnion(), Val: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1379: + case 1381: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:7012 +//line sql.y:7020 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1380: + case 1382: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7016 +//line sql.y:7024 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1381: + case 1383: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ColName -//line sql.y:7022 +//line sql.y:7030 { yyLOCAL = &ColName{Name: yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 1382: + case 1384: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ColName -//line sql.y:7026 +//line sql.y:7034 { yyLOCAL = &ColName{Name: NewIdentifierCI(string(yyDollar[1].str))} } yyVAL.union = yyLOCAL - case 1383: + case 1385: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColName -//line sql.y:7030 +//line sql.y:7038 { yyLOCAL = &ColName{Qualifier: TableName{Name: yyDollar[1].identifierCS}, Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 1384: + case 1386: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ColName -//line sql.y:7034 +//line sql.y:7042 { yyLOCAL = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}, Name: yyDollar[5].identifierCI} } yyVAL.union = yyLOCAL - case 1385: + case 1387: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7040 +//line sql.y:7048 { yyLOCAL = yyDollar[1].colNameUnion() } yyVAL.union = yyLOCAL - case 1386: + case 1388: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7044 +//line sql.y:7052 { yyLOCAL = &Offset{V: convertStringToInt(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1387: + case 1389: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7050 +//line sql.y:7058 { // TODO(sougou): Deprecate this construct. if yyDollar[1].identifierCI.Lowered() != "value" { @@ -19525,498 +19528,498 @@ yydefault: yyLOCAL = NewIntLiteral("1") } yyVAL.union = yyLOCAL - case 1388: + case 1390: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7059 +//line sql.y:7067 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1389: + case 1391: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7063 +//line sql.y:7071 { yyLOCAL = NewArgument(yyDollar[1].str[1:]) bindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL - case 1390: + case 1392: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Exprs -//line sql.y:7069 +//line sql.y:7077 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1391: + case 1393: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Exprs -//line sql.y:7073 +//line sql.y:7081 { yyLOCAL = yyDollar[3].exprsUnion() } yyVAL.union = yyLOCAL - case 1392: + case 1394: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:7078 +//line sql.y:7086 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1393: + case 1395: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7082 +//line sql.y:7090 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1394: + case 1396: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *NamedWindow -//line sql.y:7088 +//line sql.y:7096 { yyLOCAL = &NamedWindow{yyDollar[2].windowDefinitionsUnion()} } yyVAL.union = yyLOCAL - case 1395: + case 1397: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7094 +//line sql.y:7102 { yyLOCAL = NamedWindows{yyDollar[1].namedWindowUnion()} } yyVAL.union = yyLOCAL - case 1396: + case 1398: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7098 +//line sql.y:7106 { yySLICE := (*NamedWindows)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].namedWindowUnion()) } - case 1397: + case 1399: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7103 +//line sql.y:7111 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1398: + case 1400: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7107 +//line sql.y:7115 { yyLOCAL = yyDollar[1].namedWindowsUnion() } yyVAL.union = yyLOCAL - case 1399: + case 1401: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7112 +//line sql.y:7120 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1400: + case 1402: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7116 +//line sql.y:7124 { yyLOCAL = yyDollar[1].orderByUnion() } yyVAL.union = yyLOCAL - case 1401: + case 1403: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7122 +//line sql.y:7130 { yyLOCAL = yyDollar[3].orderByUnion() } yyVAL.union = yyLOCAL - case 1402: + case 1404: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7128 +//line sql.y:7136 { yyLOCAL = OrderBy{yyDollar[1].orderUnion()} } yyVAL.union = yyLOCAL - case 1403: + case 1405: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7132 +//line sql.y:7140 { yySLICE := (*OrderBy)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].orderUnion()) } - case 1404: + case 1406: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Order -//line sql.y:7138 +//line sql.y:7146 { yyLOCAL = &Order{Expr: yyDollar[1].exprUnion(), Direction: yyDollar[2].orderDirectionUnion()} } yyVAL.union = yyLOCAL - case 1405: + case 1407: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7143 +//line sql.y:7151 { yyLOCAL = AscOrder } yyVAL.union = yyLOCAL - case 1406: + case 1408: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7147 +//line sql.y:7155 { yyLOCAL = AscOrder } yyVAL.union = yyLOCAL - case 1407: + case 1409: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7151 +//line sql.y:7159 { yyLOCAL = DescOrder } yyVAL.union = yyLOCAL - case 1408: + case 1410: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Limit -//line sql.y:7156 +//line sql.y:7164 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1409: + case 1411: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Limit -//line sql.y:7160 +//line sql.y:7168 { yyLOCAL = yyDollar[1].limitUnion() } yyVAL.union = yyLOCAL - case 1410: + case 1412: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Limit -//line sql.y:7166 +//line sql.y:7174 { yyLOCAL = &Limit{Rowcount: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1411: + case 1413: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Limit -//line sql.y:7170 +//line sql.y:7178 { yyLOCAL = &Limit{Offset: yyDollar[2].exprUnion(), Rowcount: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1412: + case 1414: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Limit -//line sql.y:7174 +//line sql.y:7182 { yyLOCAL = &Limit{Offset: yyDollar[4].exprUnion(), Rowcount: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1413: + case 1415: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7179 +//line sql.y:7187 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1414: + case 1416: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7183 +//line sql.y:7191 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1415: + case 1417: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7187 +//line sql.y:7195 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1416: + case 1418: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7191 +//line sql.y:7199 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1417: + case 1419: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7195 +//line sql.y:7203 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1418: + case 1420: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7205 +//line sql.y:7213 { yyLOCAL = &LockOption{Type: DefaultType} } yyVAL.union = yyLOCAL - case 1419: + case 1421: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7209 +//line sql.y:7217 { yyLOCAL = &LockOption{Type: NoneType} } yyVAL.union = yyLOCAL - case 1420: + case 1422: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7213 +//line sql.y:7221 { yyLOCAL = &LockOption{Type: SharedType} } yyVAL.union = yyLOCAL - case 1421: + case 1423: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7217 +//line sql.y:7225 { yyLOCAL = &LockOption{Type: ExclusiveType} } yyVAL.union = yyLOCAL - case 1422: + case 1424: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7223 +//line sql.y:7231 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1423: + case 1425: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7227 +//line sql.y:7235 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1424: + case 1426: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7231 +//line sql.y:7239 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1425: + case 1427: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7235 +//line sql.y:7243 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1426: + case 1428: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7240 +//line sql.y:7248 { yyVAL.str = "" } - case 1427: + case 1429: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7244 +//line sql.y:7252 { yyVAL.str = string(yyDollar[3].str) } - case 1428: + case 1430: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7248 +//line sql.y:7256 { yyVAL.str = string(yyDollar[3].str) } - case 1429: + case 1431: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7252 +//line sql.y:7260 { yyVAL.str = string(yyDollar[3].str) } - case 1430: + case 1432: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7257 +//line sql.y:7265 { yyVAL.str = "" } - case 1431: + case 1433: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7261 +//line sql.y:7269 { yyVAL.str = yyDollar[3].str } - case 1432: + case 1434: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7267 +//line sql.y:7275 { yyVAL.str = string(yyDollar[1].str) } - case 1433: + case 1435: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7271 +//line sql.y:7279 { yyVAL.str = string(yyDollar[1].str) } - case 1434: + case 1436: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7276 +//line sql.y:7284 { yyVAL.str = "" } - case 1435: + case 1437: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:7280 +//line sql.y:7288 { yyVAL.str = yyDollar[2].str } - case 1436: + case 1438: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7285 +//line sql.y:7293 { yyVAL.str = "cascaded" } - case 1437: + case 1439: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7289 +//line sql.y:7297 { yyVAL.str = string(yyDollar[1].str) } - case 1438: + case 1440: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7293 +//line sql.y:7301 { yyVAL.str = string(yyDollar[1].str) } - case 1439: + case 1441: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL CheckOptions -//line sql.y:7298 +//line sql.y:7306 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1440: + case 1442: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckOptions -//line sql.y:7302 +//line sql.y:7310 { yyLOCAL = CheckOptions{yyDollar[1].checkTypeUnion()} } yyVAL.union = yyLOCAL - case 1441: + case 1443: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7306 +//line sql.y:7314 { yySLICE := (*CheckOptions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].checkTypeUnion()) } - case 1442: + case 1444: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL CheckType -//line sql.y:7312 +//line sql.y:7320 { yyLOCAL = Forupgrade } yyVAL.union = yyLOCAL - case 1443: + case 1445: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType -//line sql.y:7316 +//line sql.y:7324 { yyLOCAL = Fast } yyVAL.union = yyLOCAL - case 1444: + case 1446: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType -//line sql.y:7320 +//line sql.y:7328 { yyLOCAL = Quick } yyVAL.union = yyLOCAL - case 1445: + case 1447: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType -//line sql.y:7324 +//line sql.y:7332 { yyLOCAL = Medium } yyVAL.union = yyLOCAL - case 1446: + case 1448: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType -//line sql.y:7328 +//line sql.y:7336 { yyLOCAL = Extended } yyVAL.union = yyLOCAL - case 1447: + case 1449: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType -//line sql.y:7332 +//line sql.y:7340 { yyLOCAL = CHanged } yyVAL.union = yyLOCAL - case 1448: + case 1450: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Definer -//line sql.y:7338 +//line sql.y:7346 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1449: + case 1451: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Definer -//line sql.y:7342 +//line sql.y:7350 { yyLOCAL = yyDollar[3].definerUnion() } yyVAL.union = yyLOCAL - case 1450: + case 1452: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Definer -//line sql.y:7348 +//line sql.y:7356 { yyLOCAL = &Definer{ Name: string(yyDollar[1].str), } } yyVAL.union = yyLOCAL - case 1451: + case 1453: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Definer -//line sql.y:7354 +//line sql.y:7362 { yyLOCAL = &Definer{ Name: string(yyDollar[1].str), } } yyVAL.union = yyLOCAL - case 1452: + case 1454: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Definer -//line sql.y:7360 +//line sql.y:7368 { yyLOCAL = &Definer{ Name: yyDollar[1].str, @@ -20024,369 +20027,369 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1453: + case 1455: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7369 +//line sql.y:7377 { yyVAL.str = encodeSQLString(yyDollar[1].str) } - case 1454: + case 1456: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7373 +//line sql.y:7381 { yyVAL.str = formatIdentifier(yyDollar[1].str) } - case 1455: + case 1457: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7378 +//line sql.y:7386 { yyVAL.str = "" } - case 1456: + case 1458: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7382 +//line sql.y:7390 { yyVAL.str = formatAddress(yyDollar[1].str) } - case 1457: + case 1459: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Lock -//line sql.y:7388 +//line sql.y:7396 { yyLOCAL = ForUpdateLock } yyVAL.union = yyLOCAL - case 1458: + case 1460: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Lock -//line sql.y:7392 +//line sql.y:7400 { yyLOCAL = ShareModeLock } yyVAL.union = yyLOCAL - case 1459: + case 1461: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7398 +//line sql.y:7406 { yyLOCAL = &SelectInto{Type: IntoOutfileS3, FileName: encodeSQLString(yyDollar[4].str), Charset: yyDollar[5].columnCharset, FormatOption: yyDollar[6].str, ExportOption: yyDollar[7].str, Manifest: yyDollar[8].str, Overwrite: yyDollar[9].str} } yyVAL.union = yyLOCAL - case 1460: + case 1462: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7402 +//line sql.y:7410 { yyLOCAL = &SelectInto{Type: IntoDumpfile, FileName: encodeSQLString(yyDollar[3].str), Charset: ColumnCharset{}, FormatOption: "", ExportOption: "", Manifest: "", Overwrite: ""} } yyVAL.union = yyLOCAL - case 1461: + case 1463: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7406 +//line sql.y:7414 { yyLOCAL = &SelectInto{Type: IntoOutfile, FileName: encodeSQLString(yyDollar[3].str), Charset: yyDollar[4].columnCharset, FormatOption: "", ExportOption: yyDollar[5].str, Manifest: "", Overwrite: ""} } yyVAL.union = yyLOCAL - case 1462: + case 1464: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7411 +//line sql.y:7419 { yyVAL.str = "" } - case 1463: + case 1465: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7415 +//line sql.y:7423 { yyVAL.str = " format csv" + yyDollar[3].str } - case 1464: + case 1466: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7419 +//line sql.y:7427 { yyVAL.str = " format text" + yyDollar[3].str } - case 1465: + case 1467: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7424 +//line sql.y:7432 { yyVAL.str = "" } - case 1466: + case 1468: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7428 +//line sql.y:7436 { yyVAL.str = " header" } - case 1467: + case 1469: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7433 +//line sql.y:7441 { yyVAL.str = "" } - case 1468: + case 1470: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7437 +//line sql.y:7445 { yyVAL.str = " manifest on" } - case 1469: + case 1471: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7441 +//line sql.y:7449 { yyVAL.str = " manifest off" } - case 1470: + case 1472: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7446 +//line sql.y:7454 { yyVAL.str = "" } - case 1471: + case 1473: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7450 +//line sql.y:7458 { yyVAL.str = " overwrite on" } - case 1472: + case 1474: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7454 +//line sql.y:7462 { yyVAL.str = " overwrite off" } - case 1473: + case 1475: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7460 +//line sql.y:7468 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1474: + case 1476: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7465 +//line sql.y:7473 { yyVAL.str = "" } - case 1475: + case 1477: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7469 +//line sql.y:7477 { yyVAL.str = " lines" + yyDollar[2].str } - case 1476: + case 1478: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7475 +//line sql.y:7483 { yyVAL.str = yyDollar[1].str } - case 1477: + case 1479: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7479 +//line sql.y:7487 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1478: + case 1480: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7485 +//line sql.y:7493 { yyVAL.str = " starting by " + encodeSQLString(yyDollar[3].str) } - case 1479: + case 1481: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7489 +//line sql.y:7497 { yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str) } - case 1480: + case 1482: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7494 +//line sql.y:7502 { yyVAL.str = "" } - case 1481: + case 1483: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7498 +//line sql.y:7506 { yyVAL.str = " " + yyDollar[1].str + yyDollar[2].str } - case 1482: + case 1484: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7504 +//line sql.y:7512 { yyVAL.str = yyDollar[1].str } - case 1483: + case 1485: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7508 +//line sql.y:7516 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1484: + case 1486: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7514 +//line sql.y:7522 { yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str) } - case 1485: + case 1487: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:7518 +//line sql.y:7526 { yyVAL.str = yyDollar[1].str + " enclosed by " + encodeSQLString(yyDollar[4].str) } - case 1486: + case 1488: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7522 +//line sql.y:7530 { yyVAL.str = " escaped by " + encodeSQLString(yyDollar[3].str) } - case 1487: + case 1489: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7527 +//line sql.y:7535 { yyVAL.str = "" } - case 1488: + case 1490: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7531 +//line sql.y:7539 { yyVAL.str = " optionally" } - case 1489: + case 1491: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Insert -//line sql.y:7544 +//line sql.y:7552 { yyLOCAL = &Insert{Rows: yyDollar[2].valuesUnion()} } yyVAL.union = yyLOCAL - case 1490: + case 1492: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Insert -//line sql.y:7548 +//line sql.y:7556 { yyLOCAL = &Insert{Rows: yyDollar[1].selStmtUnion()} } yyVAL.union = yyLOCAL - case 1491: + case 1493: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *Insert -//line sql.y:7552 +//line sql.y:7560 { yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[5].valuesUnion()} } yyVAL.union = yyLOCAL - case 1492: + case 1494: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Insert -//line sql.y:7556 +//line sql.y:7564 { yyLOCAL = &Insert{Columns: []IdentifierCI{}, Rows: yyDollar[4].valuesUnion()} } yyVAL.union = yyLOCAL - case 1493: + case 1495: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Insert -//line sql.y:7560 +//line sql.y:7568 { yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[4].selStmtUnion()} } yyVAL.union = yyLOCAL - case 1494: + case 1496: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:7566 +//line sql.y:7574 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 1495: + case 1497: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Columns -//line sql.y:7570 +//line sql.y:7578 { yyLOCAL = Columns{yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 1496: + case 1498: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7574 +//line sql.y:7582 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 1497: + case 1499: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:7578 +//line sql.y:7586 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[5].identifierCI) } - case 1498: + case 1500: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7583 +//line sql.y:7591 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1499: + case 1501: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7587 +//line sql.y:7595 { yyLOCAL = yyDollar[5].updateExprsUnion() } yyVAL.union = yyLOCAL - case 1500: + case 1502: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Values -//line sql.y:7593 +//line sql.y:7601 { yyLOCAL = Values{yyDollar[1].valTupleUnion()} } yyVAL.union = yyLOCAL - case 1501: + case 1503: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7597 +//line sql.y:7605 { yySLICE := (*Values)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].valTupleUnion()) } - case 1502: + case 1504: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7603 +//line sql.y:7611 { yyLOCAL = yyDollar[1].valTupleUnion() } yyVAL.union = yyLOCAL - case 1503: + case 1505: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7607 +//line sql.y:7615 { yyLOCAL = ValTuple{} } yyVAL.union = yyLOCAL - case 1504: + case 1506: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7613 +//line sql.y:7621 { yyLOCAL = ValTuple(yyDollar[2].exprsUnion()) } yyVAL.union = yyLOCAL - case 1505: + case 1507: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7617 +//line sql.y:7625 { yyLOCAL = ValTuple(yyDollar[3].exprsUnion()) } yyVAL.union = yyLOCAL - case 1506: + case 1508: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7622 +//line sql.y:7630 { if len(yyDollar[1].valTupleUnion()) == 1 { yyLOCAL = yyDollar[1].valTupleUnion()[0] @@ -20395,273 +20398,273 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1507: + case 1509: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7632 +//line sql.y:7640 { yyLOCAL = UpdateExprs{yyDollar[1].updateExprUnion()} } yyVAL.union = yyLOCAL - case 1508: + case 1510: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7636 +//line sql.y:7644 { yySLICE := (*UpdateExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].updateExprUnion()) } - case 1509: + case 1511: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *UpdateExpr -//line sql.y:7642 +//line sql.y:7650 { yyLOCAL = &UpdateExpr{Name: yyDollar[1].colNameUnion(), Expr: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1511: + case 1513: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7649 +//line sql.y:7657 { yyVAL.str = "charset" } - case 1514: + case 1516: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7659 +//line sql.y:7667 { yyLOCAL = NewStrLiteral(yyDollar[1].identifierCI.String()) } yyVAL.union = yyLOCAL - case 1515: + case 1517: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7663 +//line sql.y:7671 { yyLOCAL = NewStrLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1516: + case 1518: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7667 +//line sql.y:7675 { yyLOCAL = &Default{} } yyVAL.union = yyLOCAL - case 1519: + case 1521: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7676 +//line sql.y:7684 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1520: + case 1522: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:7678 +//line sql.y:7686 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1521: + case 1523: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7681 +//line sql.y:7689 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1522: + case 1524: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:7683 +//line sql.y:7691 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1523: + case 1525: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7686 +//line sql.y:7694 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1524: + case 1526: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL bool -//line sql.y:7688 +//line sql.y:7696 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1525: + case 1527: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Ignore -//line sql.y:7691 +//line sql.y:7699 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1526: + case 1528: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Ignore -//line sql.y:7693 +//line sql.y:7701 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1527: + case 1529: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7696 +//line sql.y:7704 { yyVAL.empty = struct{}{} } - case 1528: + case 1530: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7698 +//line sql.y:7706 { yyVAL.empty = struct{}{} } - case 1529: + case 1531: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7700 +//line sql.y:7708 { yyVAL.empty = struct{}{} } - case 1530: + case 1532: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:7704 +//line sql.y:7712 { yyLOCAL = &CallProc{Name: yyDollar[2].tableName, Params: yyDollar[4].exprsUnion()} } yyVAL.union = yyLOCAL - case 1531: + case 1533: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Exprs -//line sql.y:7709 +//line sql.y:7717 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1532: + case 1534: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Exprs -//line sql.y:7713 +//line sql.y:7721 { yyLOCAL = yyDollar[1].exprsUnion() } yyVAL.union = yyLOCAL - case 1533: + case 1535: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:7718 +//line sql.y:7726 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1534: + case 1536: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:7720 +//line sql.y:7728 { yyLOCAL = []*IndexOption{yyDollar[1].indexOptionUnion()} } yyVAL.union = yyLOCAL - case 1535: + case 1537: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:7724 +//line sql.y:7732 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), String: string(yyDollar[2].identifierCI.String())} } yyVAL.union = yyLOCAL - case 1536: + case 1538: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7730 +//line sql.y:7738 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 1537: + case 1539: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7734 +//line sql.y:7742 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 1539: + case 1541: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7741 +//line sql.y:7749 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 1540: + case 1542: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7747 +//line sql.y:7755 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1541: + case 1543: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7751 +//line sql.y:7759 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1542: + case 1544: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7757 +//line sql.y:7765 { yyVAL.identifierCS = NewIdentifierCS("") } - case 1543: + case 1545: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7761 +//line sql.y:7769 { yyVAL.identifierCS = yyDollar[1].identifierCS } - case 1545: + case 1547: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7768 +//line sql.y:7776 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 2110: + case 2113: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8360 +//line sql.y:8369 { if incNesting(yylex) { yylex.Error("max nesting level reached") return 1 } } - case 2111: + case 2114: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8369 +//line sql.y:8378 { decNesting(yylex) } - case 2112: + case 2115: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8374 +//line sql.y:8383 { skipToEnd(yylex) } - case 2113: + case 2116: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8379 +//line sql.y:8388 { skipToEnd(yylex) } - case 2114: + case 2117: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8383 +//line sql.y:8392 { skipToEnd(yylex) } - case 2115: + case 2118: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8387 +//line sql.y:8396 { skipToEnd(yylex) } diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index a83a35637b..ad00e4734b 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -326,7 +326,7 @@ func bindVariable(yylex yyLexer, bvar string) { // Throttler tokens %token VITESS_THROTTLER // DML JOB tokens -%token DML_JOB +%token DML_JOB DETAILS // Transaction Tokens %token BEGIN START TRANSACTION COMMIT ROLLBACK SAVEPOINT RELEASE WORK @@ -4414,6 +4414,14 @@ show_statement: { $$ = &Show{&ShowBasic{Command: DMLJobs, Filter: $4, DbName: $3}} } +| SHOW DML_JOB STRING + { + $$ = &Show{&ShowDMLJob{UUID:$3, Detail:false}} + } +| SHOW DML_JOB STRING DETAILS +{ + $$ = &Show{&ShowDMLJob{UUID:$3, Detail:true}} +} | SHOW VITESS_MIGRATION STRING LOGS { $$ = &ShowMigrationLogs{UUID: string($3)} @@ -8315,6 +8323,7 @@ non_reserved_keyword: | SCHEMA_MIGRATION | DML_JOB | DML_JOBS +| DETAILS | VITESS_REPLICATION_STATUS | VITESS_SHARDS | VITESS_TABLETS diff --git a/go/vt/vtgate/planbuilder/show.go b/go/vt/vtgate/planbuilder/show.go index 4ca60ce67c..d2586be01c 100644 --- a/go/vt/vtgate/planbuilder/show.go +++ b/go/vt/vtgate/planbuilder/show.go @@ -65,6 +65,11 @@ func buildShowPlan(sql string, stmt *sqlparser.Show, _ *sqlparser.ReservedVars, if prim == nil { return buildByPassDDLPlan(sql, vschema) } + case *sqlparser.ShowDMLJob: + prim, err = buildShowDMLJobPlan(show, vschema) + if err != nil { + return nil, err + } default: return buildByPassDDLPlan(sql, vschema) } @@ -174,6 +179,42 @@ func buildShowVitessPlan(show *sqlparser.ShowBasic, vschema plancontext.VSchema) } } +func buildShowDMLJobPlan(show *sqlparser.ShowDMLJob, vschema plancontext.VSchema) (engine.Primitive, error) { + dest, ks, tabletType, err := vschema.TargetDestination("") + if err != nil { + return nil, err + } + if ks == nil { + return nil, vterrors.VT09005() + } + + if tabletType != topodatapb.TabletType_PRIMARY { + return nil, vterrors.VT09006("SHOW") + } + + if dest == nil { + dest = key.DestinationAllShards{} + } + + var sql string + if !show.Detail { + sql, err = sqlparser.ParseAndBind("SELECT * FROM mysql.big_dml_jobs_table where job_uuid = %a", + sqltypes.StringBindVariable(show.UUID)) + if err != nil { + return nil, err + } + } else { + UUID := strings.Replace(show.UUID, "-", "_", -1) + sql = fmt.Sprintf("SELECT * FROM job_batch_table_%s", UUID) + } + + return &engine.Send{ + Keyspace: ks, + TargetDestination: dest, + Query: sql, + }, nil +} + func buildShowTargetPlan(vschema plancontext.VSchema) (engine.Primitive, error) { rows := [][]sqltypes.Value{buildVarCharRow(vschema.TargetString())} return engine.NewRowsPrimitive(rows, From 3ae1947d55b35bf222ad830ecd9f0256c97e8270 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Mon, 25 Dec 2023 11:53:45 +0800 Subject: [PATCH 17/54] feat: add time period code in jobsheduler and jobrunner Signed-off-by: newborn22 <953950914@qq.com> --- .../schema/job/big_dml_jobs_table.sql | 2 + go/vt/vttablet/jobcontroller/controller.go | 163 ++++++++++++++---- 2 files changed, 130 insertions(+), 35 deletions(-) diff --git a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql index 7319542552..d8fb0e1c14 100644 --- a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql +++ b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql @@ -33,5 +33,7 @@ CREATE TABLE IF NOT EXISTS mysql.big_dml_jobs_table `throttle_ratio` double NULL DEFAULT NULL, `throttle_expire_time` varchar(256) NULL DEFAULT NULL, `dealing_batch_id` varchar(256) NULL DEFAULT NULL, + `running_time_period_start` varchar(256) NULL DEFAULT NULL, + `running_time_period_end` varchar(256) NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE = InnoDB diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 3788bd24f9..45aef1df5c 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -41,19 +41,20 @@ const ( ) const ( - SubmitJob = "submit_job" - ShowJobs = "show_jobs" - LaunchJob = "launch" - LaunchAllJobs = "launch_all" - PauseJob = "pause" - PauseAllJobs = "pause_all" - ResumeJob = "resume" - ResumeAllJobs = "resume_all" - ThrottleJob = "throttle" - ThrottleAllJobs = "throttle_all" - UnthrottleJob = "unthrottle" - UnthrottleAllJobs = "unthrottle_all" - CancelJob = "cancel" + SubmitJob = "submit_job" + ShowJobs = "show_jobs" + LaunchJob = "launch" + LaunchAllJobs = "launch_all" + PauseJob = "pause" + PauseAllJobs = "pause_all" + ResumeJob = "resume" + ResumeAllJobs = "resume_all" + ThrottleJob = "throttle" + ThrottleAllJobs = "throttle_all" + UnthrottleJob = "unthrottle" + UnthrottleAllJobs = "unthrottle_all" + CancelJob = "cancel" + SetRunningTimePeriod = "set_running_time_period" ) const ( @@ -63,14 +64,15 @@ const ( ) const ( - postponeLaunchStatus = "postpone-launch" - queuedStatus = "queued" - blockedStatus = "blocked" // todo,被正在运行或者paused的任务阻塞时发条消息? - runningStatus = "running" - pausedStatus = "paused" - canceledStatus = "canceled" - failedStatus = "failed" - completedStatus = "completed" + postponeLaunchStatus = "postpone-launch" + queuedStatus = "queued" + blockedStatus = "blocked" // todo,被正在运行或者paused的任务阻塞时发条消息? + runningStatus = "running" + pausedStatus = "paused" + canceledStatus = "canceled" + failedStatus = "failed" + completedStatus = "completed" + notInTimePeriodStatus = "not-in-time-period" ) const ( @@ -84,7 +86,9 @@ const ( timegap_in_ms, batch_size, job_status, - status_set_time) values(%a,%a,%a,%a,%a,%a,%a,%a,%a)` + status_set_time, + running_time_period_start, + running_time_period_end) values(%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a)` sqlDMLJobUpdateMessage = `update mysql.big_dml_jobs_table set message = %a @@ -197,12 +201,12 @@ func NewJobController(tableName string, tabletTypeFunc func() topodatapb.TabletT } // todo newborn22 , 能否改写得更有通用性? 这样改写是否好? -func (jc *JobController) HandleRequest(command, sql, jobUUID, tableSchema, expireString string, ratioLiteral *sqlparser.Literal, timeGapInMs, usrBatchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (jc *JobController) HandleRequest(command, sql, jobUUID, tableSchema, expireString, runningTimePeriodStart, runningTimePeriodEnd string, ratioLiteral *sqlparser.Literal, timeGapInMs, usrBatchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { // todo newborn22, if 可以删掉 if jc.tabletTypeFunc() == topodatapb.TabletType_PRIMARY { switch command { case SubmitJob: - return jc.SubmitJob(sql, tableSchema, timeGapInMs, usrBatchSize, postponeLaunch, autoRetry) + return jc.SubmitJob(sql, tableSchema, runningTimePeriodStart, runningTimePeriodEnd, timeGapInMs, usrBatchSize, postponeLaunch, autoRetry) case ShowJobs: return jc.ShowJobs() case PauseJob: @@ -225,7 +229,7 @@ func (jc *JobController) HandleRequest(command, sql, jobUUID, tableSchema, expir // todo newboen22 函数的可见性,封装性上的改进? // todo 传timegap和table_name -func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, userBatchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, runningTimePeriodEnd string, timeGapInMs, userBatchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { jc.tableMutex.Lock() defer jc.tableMutex.Unlock() @@ -261,6 +265,19 @@ func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, userBat } statusSetTime := time.Now().Format(time.RFC3339) + // 对runningTimePeriodStart, runningTimePeriodEnd进行有效性检查,需要能够转换成time + // 当用户没有提交该信息时,默认两个值都为"" + if runningTimePeriodStart != "" || runningTimePeriodEnd != "" { + _, err = time.Parse(time.TimeOnly, runningTimePeriodStart) + if err != nil { + return &sqltypes.Result{}, err + } + _, err = time.Parse(time.TimeOnly, runningTimePeriodEnd) + if err != nil { + return &sqltypes.Result{}, err + } + } + submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobSubmit, sqltypes.StringBindVariable(jobUUID), sqltypes.StringBindVariable(sql), @@ -270,7 +287,9 @@ func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, userBat sqltypes.Int64BindVariable(timeGapInMs), sqltypes.Int64BindVariable(batchSize), sqltypes.StringBindVariable(jobStatus), - sqltypes.StringBindVariable(statusSetTime)) + sqltypes.StringBindVariable(statusSetTime), + sqltypes.StringBindVariable(runningTimePeriodStart), + sqltypes.StringBindVariable(runningTimePeriodEnd)) if err != nil { return nil, err } @@ -279,7 +298,6 @@ func (jc *JobController) SubmitJob(sql, tableSchema string, timeGapInMs, userBat if err != nil { return &sqltypes.Result{}, err } - // todo 增加 recursive-split,递归拆分batch的选项 return jc.buildJobSubmitResult(jobUUID, jobBatchTable, timeGapInMs, userBatchSize, postponeLaunch, autoRetry), nil } @@ -359,19 +377,47 @@ func (jc *JobController) ResumeJob(uuid string) (*sqltypes.Result, error) { jobBatchTable := row["job_batch_table"].ToString() timegap, _ := row["timegap_in_ms"].ToInt64() batchSize, _ := row["batch_szie"].ToInt64() + runningTimePeriodStart := row["running_time_period_start"].ToString() + runningTimePeriodEnd := row["running_time_period_end"].ToString() + periodStartTimePtr, periodEndTimePtr := getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd) // 拉起runner协程,协程内会将状态改为running - go jc.dmlJobBatchRunner(uuid, table, tableSchema, jobBatchTable, timegap, batchSize) + go jc.dmlJobBatchRunner(uuid, table, tableSchema, jobBatchTable, timegap, batchSize, periodStartTimePtr, periodEndTimePtr) emptyResult.RowsAffected = 1 return emptyResult, nil } +func (jc *JobController) SetRunningTimePeriod(uuid, startTime, endTime string) (*sqltypes.Result, error) { + var emptyResult = &sqltypes.Result{} + ctx := context.Background() + status, err := jc.GetStrJobInfo(ctx, uuid, "job_status") + if err != nil { + return emptyResult, err + } + if status == runningStatus { + return emptyResult, errors.New("the job is running now, pause it first") + } + // 提交的时间段必须满足特定的格式,可以成功转换成time对象 + _, errStartTime := time.Parse(time.TimeOnly, startTime) + if errStartTime != nil { + return emptyResult, errors.New("the start time is in error format, it should be like HH:MM:SS") + } + _, errEndTime := time.Parse(time.TimeOnly, endTime) + if errEndTime != nil { + return emptyResult, errors.New("the start time is in error format, it should be like HH:MM:SS") + } + + // 往表中插入 + + return nil, nil +} + func (jc *JobController) LaunchJob(uuid string) (*sqltypes.Result, error) { var emptyResult = &sqltypes.Result{} ctx := context.Background() status, err := jc.GetStrJobInfo(ctx, uuid, "job_status") if err != nil { - return emptyResult, nil + return emptyResult, err } if status != postponeLaunchStatus { emptyResult.Info = " The job status is not postpone-launch and don't need launch" @@ -556,10 +602,16 @@ func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { jobBatchTable := row["job_batch_table"].ToString() timegap, _ := row["timegap_in_ms"].ToInt64() batchSize, _ := row["batch_size"].ToInt64() - if jc.checkDmlJobRunnable(status, table) { + runningTimePeriodStart := row["running_time_period_start"].ToString() + runningTimePeriodEnd := row["running_time_period_end"].ToString() + + // 由于提交时已经对时间格式进行检查,因此这里不再处理错误,todo 之后可针对错误情况给job改一个Message + periodStartTimePtr, periodEndTimePtr := getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd) + + if jc.checkDmlJobRunnable(uuid, status, table, periodStartTimePtr, periodEndTimePtr) { // todo 这里之后改成休眠的方式后要删掉, 由于外面拿锁,必须在这里就加上,不然后面的循环可能:已经启动go runner的但是还未加入到working table,导致多个表的同时启动 jc.initDMLJobRunningMeta(uuid, table) - go jc.dmlJobBatchRunner(uuid, table, schema, jobBatchTable, timegap, batchSize) + go jc.dmlJobBatchRunner(uuid, table, schema, jobBatchTable, timegap, batchSize, periodStartTimePtr, periodEndTimePtr) } } @@ -570,15 +622,41 @@ func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { } } +func getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd string) (*time.Time, *time.Time) { + if runningTimePeriodStart != "" && runningTimePeriodEnd != "" { + periodStartTime, _ := time.Parse(time.TimeOnly, runningTimePeriodStart) + periodEndTime, _ := time.Parse(time.TimeOnly, runningTimePeriodEnd) + // 由于用户只提供了时间部分,因此需要将日期部分用当天的时间补齐。 + currentTime := time.Now() + periodStartTime = time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), periodStartTime.Hour(), periodStartTime.Minute(), periodStartTime.Second(), periodStartTime.Nanosecond(), currentTime.Location()) + periodEndTime = time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), periodEndTime.Hour(), periodEndTime.Minute(), periodEndTime.Second(), periodEndTime.Nanosecond(), currentTime.Location()) + // 如果EndTime早于startTime的时间,则EndTime的日期部分用明天的日期补齐 + if periodEndTime.Before(periodStartTime) { + periodEndTime = periodEndTime.Add(24 * time.Hour) + } + return &periodStartTime, &periodEndTime + } + return nil, nil +} + // 外部需要加锁 // todo,并发数的限制 -func (jc *JobController) checkDmlJobRunnable(status, table string) bool { - if status != queuedStatus { +func (jc *JobController) checkDmlJobRunnable(jobUUID, status, table string, periodStartTime, periodEndTime *time.Time) bool { + if status != queuedStatus && status != notInTimePeriodStatus { return false } if _, exit := jc.workingTables[table]; exit { return false } + if periodStartTime != nil && periodEndTime != nil { + timeNow := time.Now() + if !(timeNow.After(*periodStartTime) && timeNow.Before(*periodEndTime)) { + // 更新状态 + _, _ = jc.updateJobStatus(context.Background(), jobUUID, notInTimePeriodStatus, timeNow.Format(time.RFC3339)) + return false + } + } + return true } @@ -894,7 +972,7 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta return nextBatchID, nil } -func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTable string, timeGap, batchSize int64) { +func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTable string, timeGap, batchSize int64, timePeriodStart, timePeriodEnd *time.Time) { // timeGap 单位ms,duration输入ns,应该乘上1000000 timer := time.NewTicker(time.Duration(timeGap * 1e6)) @@ -953,6 +1031,18 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTabl return } + // 检查是否在运维窗口内 + if timePeriodStart != nil && timePeriodEnd != nil { + currentTime := time.Now() + if !(currentTime.After(*timePeriodStart) && currentTime.Before(*timePeriodEnd)) { + _, err = jc.updateJobStatus(ctx, uuid, notInTimePeriodStatus, currentTime.Format(time.RFC3339)) + if err != nil { + jc.FailJob(ctx, uuid, err.Error(), table) + } + return + } + } + // 先请求throttle,若被throttle阻塞,则等待下一次timer事件 if !jc.requestThrottle(uuid) { continue @@ -1269,10 +1359,13 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { uuid := row["job_uuid"].ToString() timegap, _ := row["timegap_in_ms"].ToInt64() batchSize, _ := row["batch_size"].ToInt64() + runningTimePeriodStart := row["running_time_period_start"].ToString() + runningTimePeriodEnd := row["running_time_period_end"].ToString() + periodStartTimePtr, periodEndTimePtr := getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd) if status == runningStatus { jc.initDMLJobRunningMeta(uuid, table) - go jc.dmlJobBatchRunner(uuid, table, tableSchema, jobBatchTable, timegap, batchSize) + go jc.dmlJobBatchRunner(uuid, table, tableSchema, jobBatchTable, timegap, batchSize, periodStartTimePtr, periodEndTimePtr) } // 对于暂停的,不启动协程,只需要恢复内存元数据 From 7a0abb88a210885ba178d34f65b98f0dcd16cb1c Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Tue, 26 Dec 2023 00:18:40 +0800 Subject: [PATCH 18/54] feat: support time period Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/proto/query/query.pb.go | 193 +- go/vt/proto/query/query_vtproto.pb.go | 86 + go/vt/sqlparser/ast.go | 10 +- go/vt/sqlparser/ast_equals.go | 2 + go/vt/sqlparser/cached_size.go | 6 +- go/vt/sqlparser/comments.go | 23 +- go/vt/sqlparser/constants.go | 1 + go/vt/sqlparser/keywords.go | 1 + go/vt/sqlparser/sql.go | 14034 ++++++++-------- go/vt/sqlparser/sql.y | 12 +- go/vt/vtgate/executor.go | 4 +- go/vt/vtgate/plan_execute.go | 4 +- go/vt/vtgate/vcursor_impl.go | 2 +- go/vt/vttablet/grpcqueryservice/server.go | 2 +- go/vt/vttablet/grpctabletconn/conn.go | 20 +- go/vt/vttablet/jobcontroller/controller.go | 46 +- go/vt/vttablet/queryservice/queryservice.go | 2 +- go/vt/vttablet/queryservice/wrapped.go | 4 +- go/vt/vttablet/sandboxconn/sandboxconn.go | 2 +- .../tabletconntest/fakequeryservice.go | 2 +- go/vt/vttablet/tabletserver/query_executor.go | 14 +- go/vt/vttablet/tabletserver/tabletserver.go | 4 +- proto/query.proto | 2 + 23 files changed, 7350 insertions(+), 7126 deletions(-) diff --git a/go/vt/proto/query/query.pb.go b/go/vt/proto/query/query.pb.go index 2acba68bc7..2b3eb02a37 100644 --- a/go/vt/proto/query/query.pb.go +++ b/go/vt/proto/query/query.pb.go @@ -6133,14 +6133,16 @@ type SubmitDMLJobRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Cmd string `protobuf:"bytes,1,opt,name=cmd,proto3" json:"cmd,omitempty"` - JobUuid string `protobuf:"bytes,2,opt,name=job_uuid,json=jobUuid,proto3" json:"job_uuid,omitempty"` - Sql string `protobuf:"bytes,3,opt,name=sql,proto3" json:"sql,omitempty"` - RelatedSchema string `protobuf:"bytes,4,opt,name=related_schema,json=relatedSchema,proto3" json:"related_schema,omitempty"` - Timegap int64 `protobuf:"varint,6,opt,name=timegap,proto3" json:"timegap,omitempty"` - BatchSize int64 `protobuf:"varint,7,opt,name=batch_size,json=batchSize,proto3" json:"batch_size,omitempty"` - AutoRetry bool `protobuf:"varint,8,opt,name=auto_retry,json=autoRetry,proto3" json:"auto_retry,omitempty"` - PostponeLaunch bool `protobuf:"varint,9,opt,name=postpone_launch,json=postponeLaunch,proto3" json:"postpone_launch,omitempty"` + Cmd string `protobuf:"bytes,1,opt,name=cmd,proto3" json:"cmd,omitempty"` + JobUuid string `protobuf:"bytes,2,opt,name=job_uuid,json=jobUuid,proto3" json:"job_uuid,omitempty"` + Sql string `protobuf:"bytes,3,opt,name=sql,proto3" json:"sql,omitempty"` + RelatedSchema string `protobuf:"bytes,4,opt,name=related_schema,json=relatedSchema,proto3" json:"related_schema,omitempty"` + Timegap int64 `protobuf:"varint,6,opt,name=timegap,proto3" json:"timegap,omitempty"` + BatchSize int64 `protobuf:"varint,7,opt,name=batch_size,json=batchSize,proto3" json:"batch_size,omitempty"` + AutoRetry bool `protobuf:"varint,8,opt,name=auto_retry,json=autoRetry,proto3" json:"auto_retry,omitempty"` + PostponeLaunch bool `protobuf:"varint,9,opt,name=postpone_launch,json=postponeLaunch,proto3" json:"postpone_launch,omitempty"` + TimePeriodStart string `protobuf:"bytes,10,opt,name=time_period_start,json=timePeriodStart,proto3" json:"time_period_start,omitempty"` + TimePeriodEnd string `protobuf:"bytes,11,opt,name=time_period_end,json=timePeriodEnd,proto3" json:"time_period_end,omitempty"` } func (x *SubmitDMLJobRequest) Reset() { @@ -6231,6 +6233,20 @@ func (x *SubmitDMLJobRequest) GetPostponeLaunch() bool { return false } +func (x *SubmitDMLJobRequest) GetTimePeriodStart() string { + if x != nil { + return x.TimePeriodStart + } + return "" +} + +func (x *SubmitDMLJobRequest) GetTimePeriodEnd() string { + if x != nil { + return x.TimePeriodEnd + } + return "" +} + type SubmitDMLJobResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -7297,7 +7313,7 @@ var file_query_proto_rawDesc = []byte{ 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xfc, 0x01, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x44, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd0, 0x02, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x44, 0x4d, 0x4c, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, @@ -7313,83 +7329,88 @@ var file_query_proto_rawDesc = []byte{ 0x09, 0x61, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x6f, 0x73, 0x74, 0x70, 0x6f, 0x6e, 0x65, 0x5f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x70, 0x6f, 0x73, 0x74, 0x70, 0x6f, 0x6e, 0x65, 0x4c, 0x61, 0x75, - 0x6e, 0x63, 0x68, 0x22, 0x42, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x44, 0x4d, 0x4c, - 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, - 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x92, 0x03, 0x0a, 0x09, 0x4d, 0x79, 0x53, 0x71, - 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x10, 0x00, - 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x46, 0x4c, 0x41, - 0x47, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x52, 0x49, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, - 0x4c, 0x41, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x4e, 0x49, 0x51, 0x55, 0x45, 0x5f, - 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x55, - 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, - 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x10, - 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, 0x5f, 0x46, 0x4c, 0x41, - 0x47, 0x10, 0x20, 0x12, 0x11, 0x0a, 0x0d, 0x5a, 0x45, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x4c, 0x5f, - 0x46, 0x4c, 0x41, 0x47, 0x10, 0x40, 0x12, 0x10, 0x0a, 0x0b, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, - 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x45, 0x4e, 0x55, 0x4d, - 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x02, 0x12, 0x18, 0x0a, 0x13, 0x41, 0x55, 0x54, 0x4f, - 0x5f, 0x49, 0x4e, 0x43, 0x52, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, - 0x80, 0x04, 0x12, 0x13, 0x0a, 0x0e, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x5f, - 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x53, 0x45, 0x54, 0x5f, 0x46, - 0x4c, 0x41, 0x47, 0x10, 0x80, 0x10, 0x12, 0x1a, 0x0a, 0x15, 0x4e, 0x4f, 0x5f, 0x44, 0x45, 0x46, - 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, - 0x80, 0x20, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, - 0x4e, 0x4f, 0x57, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x40, 0x12, 0x0e, 0x0a, 0x08, 0x4e, - 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x02, 0x12, 0x13, 0x0a, 0x0d, 0x50, - 0x41, 0x52, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x01, - 0x12, 0x10, 0x0a, 0x0a, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, - 0x80, 0x02, 0x12, 0x11, 0x0a, 0x0b, 0x55, 0x4e, 0x49, 0x51, 0x55, 0x45, 0x5f, 0x46, 0x4c, 0x41, - 0x47, 0x10, 0x80, 0x80, 0x04, 0x12, 0x11, 0x0a, 0x0b, 0x42, 0x49, 0x4e, 0x43, 0x4d, 0x50, 0x5f, - 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x08, 0x1a, 0x02, 0x10, 0x01, 0x2a, 0x6b, 0x0a, 0x04, - 0x46, 0x6c, 0x61, 0x67, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0f, - 0x0a, 0x0a, 0x49, 0x53, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x4c, 0x10, 0x80, 0x02, 0x12, - 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, 0x10, 0x80, 0x04, - 0x12, 0x0c, 0x0a, 0x07, 0x49, 0x53, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x80, 0x08, 0x12, 0x0d, - 0x0a, 0x08, 0x49, 0x53, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x44, 0x10, 0x80, 0x10, 0x12, 0x0b, 0x0a, - 0x06, 0x49, 0x53, 0x54, 0x45, 0x58, 0x54, 0x10, 0x80, 0x20, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x53, - 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x80, 0x40, 0x2a, 0xc0, 0x03, 0x0a, 0x04, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, - 0x00, 0x12, 0x09, 0x0a, 0x04, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x81, 0x02, 0x12, 0x0a, 0x0a, 0x05, - 0x55, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x82, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x31, - 0x36, 0x10, 0x83, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x31, 0x36, 0x10, 0x84, - 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x85, 0x02, 0x12, 0x0b, 0x0a, - 0x06, 0x55, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x86, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, - 0x54, 0x33, 0x32, 0x10, 0x87, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x33, 0x32, - 0x10, 0x88, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x89, 0x02, 0x12, - 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x8a, 0x06, 0x12, 0x0c, 0x0a, 0x07, - 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x33, 0x32, 0x10, 0x8b, 0x08, 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x4c, - 0x4f, 0x41, 0x54, 0x36, 0x34, 0x10, 0x8c, 0x08, 0x12, 0x0e, 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, - 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x8d, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x44, 0x41, 0x54, 0x45, - 0x10, 0x8e, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x8f, 0x10, 0x12, 0x0d, - 0x0a, 0x08, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x90, 0x10, 0x12, 0x09, 0x0a, - 0x04, 0x59, 0x45, 0x41, 0x52, 0x10, 0x91, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x43, 0x49, - 0x4d, 0x41, 0x4c, 0x10, 0x12, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x45, 0x58, 0x54, 0x10, 0x93, 0x30, - 0x12, 0x09, 0x0a, 0x04, 0x42, 0x4c, 0x4f, 0x42, 0x10, 0x94, 0x50, 0x12, 0x0c, 0x0a, 0x07, 0x56, - 0x41, 0x52, 0x43, 0x48, 0x41, 0x52, 0x10, 0x95, 0x30, 0x12, 0x0e, 0x0a, 0x09, 0x56, 0x41, 0x52, - 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x96, 0x50, 0x12, 0x09, 0x0a, 0x04, 0x43, 0x48, 0x41, - 0x52, 0x10, 0x97, 0x30, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x98, - 0x50, 0x12, 0x08, 0x0a, 0x03, 0x42, 0x49, 0x54, 0x10, 0x99, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x45, - 0x4e, 0x55, 0x4d, 0x10, 0x9a, 0x10, 0x12, 0x08, 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, 0x9b, 0x10, - 0x12, 0x09, 0x0a, 0x05, 0x54, 0x55, 0x50, 0x4c, 0x45, 0x10, 0x1c, 0x12, 0x0d, 0x0a, 0x08, 0x47, - 0x45, 0x4f, 0x4d, 0x45, 0x54, 0x52, 0x59, 0x10, 0x9d, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x4a, 0x53, - 0x4f, 0x4e, 0x10, 0x9e, 0x10, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x58, 0x50, 0x52, 0x45, 0x53, 0x53, - 0x49, 0x4f, 0x4e, 0x10, 0x1f, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45, 0x58, 0x4e, 0x55, 0x4d, 0x10, - 0xa0, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45, 0x58, 0x56, 0x41, 0x4c, 0x10, 0xa1, 0x20, 0x12, - 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x54, 0x4e, 0x55, 0x4d, 0x10, 0xa2, 0x20, 0x2a, 0x46, 0x0a, 0x10, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, - 0x07, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, - 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x4f, 0x4c, 0x4c, 0x42, 0x41, - 0x43, 0x4b, 0x10, 0x03, 0x2a, 0x31, 0x0a, 0x0f, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x56, 0x49, 0x45, 0x57, 0x53, - 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x53, 0x10, 0x01, 0x12, 0x07, - 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x02, 0x42, 0x35, 0x0a, 0x0f, 0x69, 0x6f, 0x2e, 0x76, 0x69, - 0x74, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x22, 0x76, 0x69, 0x74, 0x65, - 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, - 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x63, 0x68, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, + 0x74, 0x69, 0x6d, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, + 0x26, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x65, + 0x6e, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x65, + 0x72, 0x69, 0x6f, 0x64, 0x45, 0x6e, 0x64, 0x22, 0x42, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x6d, 0x69, + 0x74, 0x44, 0x4d, 0x4c, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x92, 0x03, 0x0a, 0x09, + 0x4d, 0x79, 0x53, 0x71, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x4d, 0x50, + 0x54, 0x59, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, + 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x52, 0x49, 0x5f, 0x4b, + 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x4e, 0x49, + 0x51, 0x55, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x04, 0x12, 0x15, + 0x0a, 0x11, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, + 0x4c, 0x41, 0x47, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x46, 0x4c, + 0x41, 0x47, 0x10, 0x10, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, + 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x20, 0x12, 0x11, 0x0a, 0x0d, 0x5a, 0x45, 0x52, 0x4f, 0x46, + 0x49, 0x4c, 0x4c, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x40, 0x12, 0x10, 0x0a, 0x0b, 0x42, 0x49, + 0x4e, 0x41, 0x52, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x01, 0x12, 0x0e, 0x0a, 0x09, + 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x02, 0x12, 0x18, 0x0a, 0x13, + 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x49, 0x4e, 0x43, 0x52, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x46, + 0x4c, 0x41, 0x47, 0x10, 0x80, 0x04, 0x12, 0x13, 0x0a, 0x0e, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, + 0x41, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x53, + 0x45, 0x54, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x10, 0x12, 0x1a, 0x0a, 0x15, 0x4e, 0x4f, + 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x46, + 0x4c, 0x41, 0x47, 0x10, 0x80, 0x20, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, + 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x57, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x40, 0x12, + 0x0e, 0x0a, 0x08, 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x02, 0x12, + 0x13, 0x0a, 0x0d, 0x50, 0x41, 0x52, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, + 0x10, 0x80, 0x80, 0x01, 0x12, 0x10, 0x0a, 0x0a, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x46, 0x4c, + 0x41, 0x47, 0x10, 0x80, 0x80, 0x02, 0x12, 0x11, 0x0a, 0x0b, 0x55, 0x4e, 0x49, 0x51, 0x55, 0x45, + 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x04, 0x12, 0x11, 0x0a, 0x0b, 0x42, 0x49, 0x4e, + 0x43, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x08, 0x1a, 0x02, 0x10, 0x01, + 0x2a, 0x6b, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, + 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x4c, + 0x10, 0x80, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, 0x45, + 0x44, 0x10, 0x80, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x49, 0x53, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, + 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x53, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x44, 0x10, 0x80, + 0x10, 0x12, 0x0b, 0x0a, 0x06, 0x49, 0x53, 0x54, 0x45, 0x58, 0x54, 0x10, 0x80, 0x20, 0x12, 0x0d, + 0x0a, 0x08, 0x49, 0x53, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x80, 0x40, 0x2a, 0xc0, 0x03, + 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x04, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x81, 0x02, + 0x12, 0x0a, 0x0a, 0x05, 0x55, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x82, 0x06, 0x12, 0x0a, 0x0a, 0x05, + 0x49, 0x4e, 0x54, 0x31, 0x36, 0x10, 0x83, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, + 0x31, 0x36, 0x10, 0x84, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x85, + 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x86, 0x06, 0x12, 0x0a, + 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x87, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, + 0x4e, 0x54, 0x33, 0x32, 0x10, 0x88, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x36, 0x34, + 0x10, 0x89, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x8a, 0x06, + 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x33, 0x32, 0x10, 0x8b, 0x08, 0x12, 0x0c, + 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x36, 0x34, 0x10, 0x8c, 0x08, 0x12, 0x0e, 0x0a, 0x09, + 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x8d, 0x10, 0x12, 0x09, 0x0a, 0x04, + 0x44, 0x41, 0x54, 0x45, 0x10, 0x8e, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x49, 0x4d, 0x45, 0x10, + 0x8f, 0x10, 0x12, 0x0d, 0x0a, 0x08, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x90, + 0x10, 0x12, 0x09, 0x0a, 0x04, 0x59, 0x45, 0x41, 0x52, 0x10, 0x91, 0x06, 0x12, 0x0b, 0x0a, 0x07, + 0x44, 0x45, 0x43, 0x49, 0x4d, 0x41, 0x4c, 0x10, 0x12, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x45, 0x58, + 0x54, 0x10, 0x93, 0x30, 0x12, 0x09, 0x0a, 0x04, 0x42, 0x4c, 0x4f, 0x42, 0x10, 0x94, 0x50, 0x12, + 0x0c, 0x0a, 0x07, 0x56, 0x41, 0x52, 0x43, 0x48, 0x41, 0x52, 0x10, 0x95, 0x30, 0x12, 0x0e, 0x0a, + 0x09, 0x56, 0x41, 0x52, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x96, 0x50, 0x12, 0x09, 0x0a, + 0x04, 0x43, 0x48, 0x41, 0x52, 0x10, 0x97, 0x30, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x4e, 0x41, + 0x52, 0x59, 0x10, 0x98, 0x50, 0x12, 0x08, 0x0a, 0x03, 0x42, 0x49, 0x54, 0x10, 0x99, 0x10, 0x12, + 0x09, 0x0a, 0x04, 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x9a, 0x10, 0x12, 0x08, 0x0a, 0x03, 0x53, 0x45, + 0x54, 0x10, 0x9b, 0x10, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x55, 0x50, 0x4c, 0x45, 0x10, 0x1c, 0x12, + 0x0d, 0x0a, 0x08, 0x47, 0x45, 0x4f, 0x4d, 0x45, 0x54, 0x52, 0x59, 0x10, 0x9d, 0x10, 0x12, 0x09, + 0x0a, 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x9e, 0x10, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x58, 0x50, + 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x1f, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45, 0x58, + 0x4e, 0x55, 0x4d, 0x10, 0xa0, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45, 0x58, 0x56, 0x41, 0x4c, + 0x10, 0xa1, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x54, 0x4e, 0x55, 0x4d, 0x10, 0xa2, 0x20, + 0x2a, 0x46, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, + 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x45, 0x10, 0x01, 0x12, 0x0a, + 0x0a, 0x06, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x4f, + 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x03, 0x2a, 0x31, 0x0a, 0x0f, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x56, + 0x49, 0x45, 0x57, 0x53, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x53, + 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x02, 0x42, 0x35, 0x0a, 0x0f, 0x69, + 0x6f, 0x2e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x22, + 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, + 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/go/vt/proto/query/query_vtproto.pb.go b/go/vt/proto/query/query_vtproto.pb.go index cd16cc9a62..fa24b7b160 100644 --- a/go/vt/proto/query/query_vtproto.pb.go +++ b/go/vt/proto/query/query_vtproto.pb.go @@ -4707,6 +4707,20 @@ func (m *SubmitDMLJobRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } + if len(m.TimePeriodEnd) > 0 { + i -= len(m.TimePeriodEnd) + copy(dAtA[i:], m.TimePeriodEnd) + i = encodeVarint(dAtA, i, uint64(len(m.TimePeriodEnd))) + i-- + dAtA[i] = 0x5a + } + if len(m.TimePeriodStart) > 0 { + i -= len(m.TimePeriodStart) + copy(dAtA[i:], m.TimePeriodStart) + i = encodeVarint(dAtA, i, uint64(len(m.TimePeriodStart))) + i-- + dAtA[i] = 0x52 + } if m.PostponeLaunch { i-- if m.PostponeLaunch { @@ -6661,6 +6675,14 @@ func (m *SubmitDMLJobRequest) SizeVT() (n int) { if m.PostponeLaunch { n += 2 } + l = len(m.TimePeriodStart) + if l > 0 { + n += 1 + l + sov(uint64(l)) + } + l = len(m.TimePeriodEnd) + if l > 0 { + n += 1 + l + sov(uint64(l)) + } n += len(m.unknownFields) return n } @@ -18940,6 +18962,70 @@ func (m *SubmitDMLJobRequest) UnmarshalVT(dAtA []byte) error { } } m.PostponeLaunch = bool(v != 0) + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TimePeriodStart", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TimePeriodStart = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TimePeriodEnd", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TimePeriodEnd = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skip(dAtA[iNdEx:]) diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go index d7443ee872..d6c40f333c 100644 --- a/go/vt/sqlparser/ast.go +++ b/go/vt/sqlparser/ast.go @@ -485,10 +485,12 @@ type ( AlterDMLJobType int8 AlterDMLJob struct { - Type AlterDMLJobType - UUID string - Expire string - Ratio *Literal + Type AlterDMLJobType + UUID string + Expire string + Ratio *Literal + TimePeriodStart string + TimePeriodEnd string } // AlterTable represents a ALTER TABLE statement. diff --git a/go/vt/sqlparser/ast_equals.go b/go/vt/sqlparser/ast_equals.go index dc3052482a..2919896c27 100644 --- a/go/vt/sqlparser/ast_equals.go +++ b/go/vt/sqlparser/ast_equals.go @@ -1636,6 +1636,8 @@ func (cmp *Comparator) RefOfAlterDMLJob(a, b *AlterDMLJob) bool { } return a.UUID == b.UUID && a.Expire == b.Expire && + a.TimePeriodStart == b.TimePeriodStart && + a.TimePeriodEnd == b.TimePeriodEnd && a.Type == b.Type && cmp.RefOfLiteral(a.Ratio, b.Ratio) } diff --git a/go/vt/sqlparser/cached_size.go b/go/vt/sqlparser/cached_size.go index 959b6c1dd5..a60b1a72cb 100644 --- a/go/vt/sqlparser/cached_size.go +++ b/go/vt/sqlparser/cached_size.go @@ -175,7 +175,7 @@ func (cached *AlterDMLJob) CachedSize(alloc bool) int64 { } size := int64(0) if alloc { - size += int64(48) + size += int64(80) } // field UUID string size += hack.RuntimeAllocSize(int64(len(cached.UUID))) @@ -183,6 +183,10 @@ func (cached *AlterDMLJob) CachedSize(alloc bool) int64 { size += hack.RuntimeAllocSize(int64(len(cached.Expire))) // field Ratio *vitess.io/vitess/go/vt/sqlparser.Literal size += cached.Ratio.CachedSize(true) + // field TimePeriodStart string + size += hack.RuntimeAllocSize(int64(len(cached.TimePeriodStart))) + // field TimePeriodEnd string + size += hack.RuntimeAllocSize(int64(len(cached.TimePeriodEnd))) return size } func (cached *AlterDatabase) CachedSize(alloc bool) int64 { diff --git a/go/vt/sqlparser/comments.go b/go/vt/sqlparser/comments.go index 0766ff3ef9..dd5a02672e 100644 --- a/go/vt/sqlparser/comments.go +++ b/go/vt/sqlparser/comments.go @@ -58,11 +58,13 @@ const ( // DirectiveRole specifies the node type for the query. possible values are: PRIMARY/REPLICA/RDONLY DirectiveRole = "ROLE" - DirectiveDMLCMD = "DML_CMD" - DirectiveDMLTimeGap = "DML_TIME_GAP" - DirectiveBATCHSIZE = "DML_BATCH_SIZE" - DirectiveDMLPostponeLaunch = "DML_POSTPONE_LAUNCH" - DirectiveDMLAutoRetry = "DML_AUTO_RETRY" + DirectiveDMLCMD = "DML_CMD" + DirectiveDMLTimeGap = "DML_TIME_GAP" + DirectiveBATCHSIZE = "DML_BATCH_SIZE" + DirectiveDMLPostponeLaunch = "DML_POSTPONE_LAUNCH" + DirectiveDMLAutoRetry = "DML_AUTO_RETRY" + DirectiveDMLTimePeriodStart = "DML_TIME_PERIOD_START" + DirectiveDMLTimePeriodEnd = "DML_TIME_PERIOD_END" ) func isNonSpace(r rune) bool { @@ -463,16 +465,17 @@ func GetDMLJobCmd(stmt Statement) string { return str } -func GetDMLJobArgs(stmt Statement) (timeGapInMs int64, batchSize int64, postponeLaunch bool, autoRetry bool) { +func GetDMLJobArgs(stmt Statement) (timeGapInMs int64, batchSize int64, postponeLaunch bool, autoRetry bool, timePeriodStart, timePeriodEnd string) { var comments *ParsedComments switch stmt := stmt.(type) { + // todo newborn22 支持insert select case *Update: comments = stmt.Comments case *Delete: comments = stmt.Comments } if comments == nil { - return timeGapInMs, batchSize, postponeLaunch, autoRetry + return timeGapInMs, batchSize, postponeLaunch, autoRetry, timePeriodStart, timePeriodEnd } var err error @@ -510,5 +513,9 @@ func GetDMLJobArgs(stmt Statement) (timeGapInMs int64, batchSize int64, postpone } } - return timeGapInMs, batchSize, postponeLaunch, autoRetry + timePeriodStart, _ = directives.GetString(DirectiveDMLTimePeriodStart, "") + + timePeriodEnd, _ = directives.GetString(DirectiveDMLTimePeriodEnd, "") + + return timeGapInMs, batchSize, postponeLaunch, autoRetry, timePeriodStart, timePeriodEnd } diff --git a/go/vt/sqlparser/constants.go b/go/vt/sqlparser/constants.go index 2508250541..a8728bc9b1 100644 --- a/go/vt/sqlparser/constants.go +++ b/go/vt/sqlparser/constants.go @@ -908,6 +908,7 @@ const ( ResumeDMLJobType PauseAllDMLJobType ResumeAllDMLJobType + SetRunningTimePeriodType ) // ColumnStorage constants diff --git a/go/vt/sqlparser/keywords.go b/go/vt/sqlparser/keywords.go index e690fa6c7a..adcc4af311 100644 --- a/go/vt/sqlparser/keywords.go +++ b/go/vt/sqlparser/keywords.go @@ -682,6 +682,7 @@ var keywords = []keyword{ {"dml_job", DML_JOB}, {"dml_jobs", DML_JOBS}, {"details", DETAILS}, + {"time_period", TIME_PERIOD}, {"vitess_replication_status", VITESS_REPLICATION_STATUS}, {"vitess_shards", VITESS_SHARDS}, {"vitess_tablets", VITESS_TABLETS}, diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index fda1bf95dd..5706e8c199 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -343,368 +343,369 @@ const SCHEMA_MIGRATION = 57640 const VITESS_THROTTLER = 57641 const DML_JOB = 57642 const DETAILS = 57643 -const BEGIN = 57644 -const START = 57645 -const TRANSACTION = 57646 -const COMMIT = 57647 -const ROLLBACK = 57648 -const SAVEPOINT = 57649 -const RELEASE = 57650 -const WORK = 57651 -const CONSISTENT = 57652 -const SNAPSHOT = 57653 -const BIT = 57654 -const TINYINT = 57655 -const SMALLINT = 57656 -const MEDIUMINT = 57657 -const INT = 57658 -const INTEGER = 57659 -const BIGINT = 57660 -const INTNUM = 57661 -const REAL = 57662 -const DOUBLE = 57663 -const FLOAT_TYPE = 57664 -const FLOAT4_TYPE = 57665 -const FLOAT8_TYPE = 57666 -const DECIMAL_TYPE = 57667 -const NUMERIC = 57668 -const TIME = 57669 -const TIMESTAMP = 57670 -const DATETIME = 57671 -const YEAR = 57672 -const CHAR = 57673 -const VARCHAR = 57674 -const BOOL = 57675 -const CHARACTER = 57676 -const VARBINARY = 57677 -const NCHAR = 57678 -const TEXT = 57679 -const TINYTEXT = 57680 -const MEDIUMTEXT = 57681 -const LONGTEXT = 57682 -const BLOB = 57683 -const TINYBLOB = 57684 -const MEDIUMBLOB = 57685 -const LONGBLOB = 57686 -const JSON = 57687 -const JSON_SCHEMA_VALID = 57688 -const JSON_SCHEMA_VALIDATION_REPORT = 57689 -const ENUM = 57690 -const GEOMETRY = 57691 -const POINT = 57692 -const LINESTRING = 57693 -const POLYGON = 57694 -const GEOMCOLLECTION = 57695 -const GEOMETRYCOLLECTION = 57696 -const MULTIPOINT = 57697 -const MULTILINESTRING = 57698 -const MULTIPOLYGON = 57699 -const ASCII = 57700 -const UNICODE = 57701 -const NULLX = 57702 -const AUTO_INCREMENT = 57703 -const APPROXNUM = 57704 -const SIGNED = 57705 -const UNSIGNED = 57706 -const ZEROFILL = 57707 -const CODE = 57708 -const COLLATION = 57709 -const COLUMNS = 57710 -const DATABASES = 57711 -const ENGINES = 57712 -const EVENT = 57713 -const EXTENDED = 57714 -const FIELDS = 57715 -const FULL = 57716 -const FUNCTION = 57717 -const GTID_EXECUTED = 57718 -const KEYSPACES = 57719 -const OPEN = 57720 -const PLUGINS = 57721 -const PRIVILEGES = 57722 -const PROCESSLIST = 57723 -const SCHEMAS = 57724 -const TABLES = 57725 -const TRIGGERS = 57726 -const USER = 57727 -const VGTID_EXECUTED = 57728 -const VITESS_KEYSPACES = 57729 -const VITESS_METADATA = 57730 -const VITESS_MIGRATIONS = 57731 -const VITESS_REPLICATION_STATUS = 57732 -const VITESS_SHARDS = 57733 -const VITESS_TABLETS = 57734 -const VITESS_TARGET = 57735 -const VSCHEMA = 57736 -const VITESS_THROTTLED_APPS = 57737 -const WORKLOAD = 57738 -const LASTSEENGTID = 57739 -const FAILPOINTS = 57740 -const DML_JOBS = 57741 -const NAMES = 57742 -const GLOBAL = 57743 -const SESSION = 57744 -const ISOLATION = 57745 -const LEVEL = 57746 -const READ = 57747 -const WRITE = 57748 -const ONLY = 57749 -const REPEATABLE = 57750 -const COMMITTED = 57751 -const UNCOMMITTED = 57752 -const SERIALIZABLE = 57753 -const FAST = 57754 -const QUICK = 57755 -const CHANGED = 57756 -const MEDIUM = 57757 -const CURRENT_TIMESTAMP = 57758 -const DATABASE = 57759 -const CURRENT_DATE = 57760 -const NOW = 57761 -const CURRENT_TIME = 57762 -const LOCALTIME = 57763 -const LOCALTIMESTAMP = 57764 -const CURRENT_USER = 57765 -const UTC_DATE = 57766 -const UTC_TIME = 57767 -const UTC_TIMESTAMP = 57768 -const DAY = 57769 -const DAY_HOUR = 57770 -const DAY_MICROSECOND = 57771 -const DAY_MINUTE = 57772 -const DAY_SECOND = 57773 -const HOUR = 57774 -const HOUR_MICROSECOND = 57775 -const HOUR_MINUTE = 57776 -const HOUR_SECOND = 57777 -const MICROSECOND = 57778 -const MINUTE = 57779 -const MINUTE_MICROSECOND = 57780 -const MINUTE_SECOND = 57781 -const MONTH = 57782 -const QUARTER = 57783 -const SECOND = 57784 -const SECOND_MICROSECOND = 57785 -const YEAR_MONTH = 57786 -const WEEK = 57787 -const REPLACE = 57788 -const CONVERT = 57789 -const CAST = 57790 -const SUBSTR = 57791 -const SUBSTRING = 57792 -const SEPARATOR = 57793 -const TIMESTAMPADD = 57794 -const TIMESTAMPDIFF = 57795 -const WEIGHT_STRING = 57796 -const LTRIM = 57797 -const RTRIM = 57798 -const TRIM = 57799 -const JSON_ARRAY = 57800 -const JSON_OBJECT = 57801 -const JSON_QUOTE = 57802 -const JSON_DEPTH = 57803 -const JSON_TYPE = 57804 -const JSON_LENGTH = 57805 -const JSON_VALID = 57806 -const JSON_ARRAY_APPEND = 57807 -const JSON_ARRAY_INSERT = 57808 -const JSON_INSERT = 57809 -const JSON_MERGE = 57810 -const JSON_MERGE_PATCH = 57811 -const JSON_MERGE_PRESERVE = 57812 -const JSON_REMOVE = 57813 -const JSON_REPLACE = 57814 -const JSON_SET = 57815 -const JSON_UNQUOTE = 57816 -const COUNT = 57817 -const AVG = 57818 -const MAX = 57819 -const MIN = 57820 -const SUM = 57821 -const GROUP_CONCAT = 57822 -const BIT_AND = 57823 -const BIT_OR = 57824 -const BIT_XOR = 57825 -const STD = 57826 -const STDDEV = 57827 -const STDDEV_POP = 57828 -const STDDEV_SAMP = 57829 -const VAR_POP = 57830 -const VAR_SAMP = 57831 -const VARIANCE = 57832 -const REGEXP_INSTR = 57833 -const REGEXP_LIKE = 57834 -const REGEXP_REPLACE = 57835 -const REGEXP_SUBSTR = 57836 -const ExtractValue = 57837 -const UpdateXML = 57838 -const GET_LOCK = 57839 -const RELEASE_LOCK = 57840 -const RELEASE_ALL_LOCKS = 57841 -const IS_FREE_LOCK = 57842 -const IS_USED_LOCK = 57843 -const LOCATE = 57844 -const POSITION = 57845 -const MATCH = 57846 -const AGAINST = 57847 -const BOOLEAN = 57848 -const LANGUAGE = 57849 -const WITH = 57850 -const QUERY = 57851 -const EXPANSION = 57852 -const WITHOUT = 57853 -const VALIDATION = 57854 -const UNUSED = 57855 -const ARRAY = 57856 -const BYTE = 57857 -const CUME_DIST = 57858 -const DESCRIPTION = 57859 -const DENSE_RANK = 57860 -const EMPTY = 57861 -const EXCEPT = 57862 -const FIRST_VALUE = 57863 -const GROUPING = 57864 -const GROUPS = 57865 -const JSON_TABLE = 57866 -const LAG = 57867 -const LAST_VALUE = 57868 -const LATERAL = 57869 -const LEAD = 57870 -const NTH_VALUE = 57871 -const NTILE = 57872 -const OF = 57873 -const OVER = 57874 -const PERCENT_RANK = 57875 -const RANK = 57876 -const RECURSIVE = 57877 -const ROW_NUMBER = 57878 -const SYSTEM = 57879 -const WINDOW = 57880 -const ACTIVE = 57881 -const ADMIN = 57882 -const AUTOEXTEND_SIZE = 57883 -const BUCKETS = 57884 -const CLONE = 57885 -const COLUMN_FORMAT = 57886 -const COMPONENT = 57887 -const DEFINITION = 57888 -const ENFORCED = 57889 -const ENGINE_ATTRIBUTE = 57890 -const EXCLUDE = 57891 -const FOLLOWING = 57892 -const GET_MASTER_PUBLIC_KEY = 57893 -const HISTOGRAM = 57894 -const HISTORY = 57895 -const INACTIVE = 57896 -const INVISIBLE = 57897 -const LOCKED = 57898 -const MASTER_COMPRESSION_ALGORITHMS = 57899 -const MASTER_PUBLIC_KEY_PATH = 57900 -const MASTER_TLS_CIPHERSUITES = 57901 -const MASTER_ZSTD_COMPRESSION_LEVEL = 57902 -const NESTED = 57903 -const NETWORK_NAMESPACE = 57904 -const NOWAIT = 57905 -const NULLS = 57906 -const OJ = 57907 -const OLD = 57908 -const OPTIONAL = 57909 -const ORDINALITY = 57910 -const ORGANIZATION = 57911 -const OTHERS = 57912 -const PARTIAL = 57913 -const PATH = 57914 -const PERSIST = 57915 -const PERSIST_ONLY = 57916 -const PRECEDING = 57917 -const PRIVILEGE_CHECKS_USER = 57918 -const PROCESS = 57919 -const RANDOM = 57920 -const REFERENCE = 57921 -const REQUIRE_ROW_FORMAT = 57922 -const RESOURCE = 57923 -const RESPECT = 57924 -const RESTART = 57925 -const RETAIN = 57926 -const REUSE = 57927 -const ROLE = 57928 -const SECONDARY = 57929 -const SECONDARY_ENGINE = 57930 -const SECONDARY_ENGINE_ATTRIBUTE = 57931 -const SECONDARY_LOAD = 57932 -const SECONDARY_UNLOAD = 57933 -const SIMPLE = 57934 -const SKIP = 57935 -const SRID = 57936 -const THREAD_PRIORITY = 57937 -const TIES = 57938 -const UNBOUNDED = 57939 -const VCPU = 57940 -const VISIBLE = 57941 -const RETURNING = 57942 -const FORMAT_BYTES = 57943 -const FORMAT_PICO_TIME = 57944 -const PS_CURRENT_THREAD_ID = 57945 -const PS_THREAD_ID = 57946 -const GTID_SUBSET = 57947 -const GTID_SUBTRACT = 57948 -const WAIT_FOR_EXECUTED_GTID_SET = 57949 -const WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 57950 -const FORMAT = 57951 -const TREE = 57952 -const VITESS = 57953 -const TRADITIONAL = 57954 -const VTEXPLAIN = 57955 -const VEXPLAIN = 57956 -const PLAN = 57957 -const LOCAL = 57958 -const LOW_PRIORITY = 57959 -const KILL = 57960 -const USERS = 57961 -const NO_WRITE_TO_BINLOG = 57962 -const LOGS = 57963 -const ERROR = 57964 -const GENERAL = 57965 -const HOSTS = 57966 -const OPTIMIZER_COSTS = 57967 -const USER_RESOURCES = 57968 -const SLOW = 57969 -const CHANNEL = 57970 -const RELAY = 57971 -const EXPORT = 57972 -const CURRENT = 57973 -const ROW = 57974 -const ROWS = 57975 -const AVG_ROW_LENGTH = 57976 -const CONNECTION = 57977 -const CHECKSUM = 57978 -const DELAY_KEY_WRITE = 57979 -const ENCRYPTION = 57980 -const ENGINE = 57981 -const INSERT_METHOD = 57982 -const MAX_ROWS = 57983 -const MIN_ROWS = 57984 -const PACK_KEYS = 57985 -const PASSWORD = 57986 -const FIXED = 57987 -const DYNAMIC = 57988 -const COMPRESSED = 57989 -const REDUNDANT = 57990 -const COMPACT = 57991 -const ROW_FORMAT = 57992 -const STATS_AUTO_RECALC = 57993 -const STATS_PERSISTENT = 57994 -const STATS_SAMPLE_PAGES = 57995 -const STORAGE = 57996 -const MEMORY = 57997 -const DISK = 57998 -const PARTITIONS = 57999 -const LINEAR = 58000 -const RANGE = 58001 -const LIST = 58002 -const SUBPARTITION = 58003 -const SUBPARTITIONS = 58004 -const HASH = 58005 +const TIME_PERIOD = 57644 +const BEGIN = 57645 +const START = 57646 +const TRANSACTION = 57647 +const COMMIT = 57648 +const ROLLBACK = 57649 +const SAVEPOINT = 57650 +const RELEASE = 57651 +const WORK = 57652 +const CONSISTENT = 57653 +const SNAPSHOT = 57654 +const BIT = 57655 +const TINYINT = 57656 +const SMALLINT = 57657 +const MEDIUMINT = 57658 +const INT = 57659 +const INTEGER = 57660 +const BIGINT = 57661 +const INTNUM = 57662 +const REAL = 57663 +const DOUBLE = 57664 +const FLOAT_TYPE = 57665 +const FLOAT4_TYPE = 57666 +const FLOAT8_TYPE = 57667 +const DECIMAL_TYPE = 57668 +const NUMERIC = 57669 +const TIME = 57670 +const TIMESTAMP = 57671 +const DATETIME = 57672 +const YEAR = 57673 +const CHAR = 57674 +const VARCHAR = 57675 +const BOOL = 57676 +const CHARACTER = 57677 +const VARBINARY = 57678 +const NCHAR = 57679 +const TEXT = 57680 +const TINYTEXT = 57681 +const MEDIUMTEXT = 57682 +const LONGTEXT = 57683 +const BLOB = 57684 +const TINYBLOB = 57685 +const MEDIUMBLOB = 57686 +const LONGBLOB = 57687 +const JSON = 57688 +const JSON_SCHEMA_VALID = 57689 +const JSON_SCHEMA_VALIDATION_REPORT = 57690 +const ENUM = 57691 +const GEOMETRY = 57692 +const POINT = 57693 +const LINESTRING = 57694 +const POLYGON = 57695 +const GEOMCOLLECTION = 57696 +const GEOMETRYCOLLECTION = 57697 +const MULTIPOINT = 57698 +const MULTILINESTRING = 57699 +const MULTIPOLYGON = 57700 +const ASCII = 57701 +const UNICODE = 57702 +const NULLX = 57703 +const AUTO_INCREMENT = 57704 +const APPROXNUM = 57705 +const SIGNED = 57706 +const UNSIGNED = 57707 +const ZEROFILL = 57708 +const CODE = 57709 +const COLLATION = 57710 +const COLUMNS = 57711 +const DATABASES = 57712 +const ENGINES = 57713 +const EVENT = 57714 +const EXTENDED = 57715 +const FIELDS = 57716 +const FULL = 57717 +const FUNCTION = 57718 +const GTID_EXECUTED = 57719 +const KEYSPACES = 57720 +const OPEN = 57721 +const PLUGINS = 57722 +const PRIVILEGES = 57723 +const PROCESSLIST = 57724 +const SCHEMAS = 57725 +const TABLES = 57726 +const TRIGGERS = 57727 +const USER = 57728 +const VGTID_EXECUTED = 57729 +const VITESS_KEYSPACES = 57730 +const VITESS_METADATA = 57731 +const VITESS_MIGRATIONS = 57732 +const VITESS_REPLICATION_STATUS = 57733 +const VITESS_SHARDS = 57734 +const VITESS_TABLETS = 57735 +const VITESS_TARGET = 57736 +const VSCHEMA = 57737 +const VITESS_THROTTLED_APPS = 57738 +const WORKLOAD = 57739 +const LASTSEENGTID = 57740 +const FAILPOINTS = 57741 +const DML_JOBS = 57742 +const NAMES = 57743 +const GLOBAL = 57744 +const SESSION = 57745 +const ISOLATION = 57746 +const LEVEL = 57747 +const READ = 57748 +const WRITE = 57749 +const ONLY = 57750 +const REPEATABLE = 57751 +const COMMITTED = 57752 +const UNCOMMITTED = 57753 +const SERIALIZABLE = 57754 +const FAST = 57755 +const QUICK = 57756 +const CHANGED = 57757 +const MEDIUM = 57758 +const CURRENT_TIMESTAMP = 57759 +const DATABASE = 57760 +const CURRENT_DATE = 57761 +const NOW = 57762 +const CURRENT_TIME = 57763 +const LOCALTIME = 57764 +const LOCALTIMESTAMP = 57765 +const CURRENT_USER = 57766 +const UTC_DATE = 57767 +const UTC_TIME = 57768 +const UTC_TIMESTAMP = 57769 +const DAY = 57770 +const DAY_HOUR = 57771 +const DAY_MICROSECOND = 57772 +const DAY_MINUTE = 57773 +const DAY_SECOND = 57774 +const HOUR = 57775 +const HOUR_MICROSECOND = 57776 +const HOUR_MINUTE = 57777 +const HOUR_SECOND = 57778 +const MICROSECOND = 57779 +const MINUTE = 57780 +const MINUTE_MICROSECOND = 57781 +const MINUTE_SECOND = 57782 +const MONTH = 57783 +const QUARTER = 57784 +const SECOND = 57785 +const SECOND_MICROSECOND = 57786 +const YEAR_MONTH = 57787 +const WEEK = 57788 +const REPLACE = 57789 +const CONVERT = 57790 +const CAST = 57791 +const SUBSTR = 57792 +const SUBSTRING = 57793 +const SEPARATOR = 57794 +const TIMESTAMPADD = 57795 +const TIMESTAMPDIFF = 57796 +const WEIGHT_STRING = 57797 +const LTRIM = 57798 +const RTRIM = 57799 +const TRIM = 57800 +const JSON_ARRAY = 57801 +const JSON_OBJECT = 57802 +const JSON_QUOTE = 57803 +const JSON_DEPTH = 57804 +const JSON_TYPE = 57805 +const JSON_LENGTH = 57806 +const JSON_VALID = 57807 +const JSON_ARRAY_APPEND = 57808 +const JSON_ARRAY_INSERT = 57809 +const JSON_INSERT = 57810 +const JSON_MERGE = 57811 +const JSON_MERGE_PATCH = 57812 +const JSON_MERGE_PRESERVE = 57813 +const JSON_REMOVE = 57814 +const JSON_REPLACE = 57815 +const JSON_SET = 57816 +const JSON_UNQUOTE = 57817 +const COUNT = 57818 +const AVG = 57819 +const MAX = 57820 +const MIN = 57821 +const SUM = 57822 +const GROUP_CONCAT = 57823 +const BIT_AND = 57824 +const BIT_OR = 57825 +const BIT_XOR = 57826 +const STD = 57827 +const STDDEV = 57828 +const STDDEV_POP = 57829 +const STDDEV_SAMP = 57830 +const VAR_POP = 57831 +const VAR_SAMP = 57832 +const VARIANCE = 57833 +const REGEXP_INSTR = 57834 +const REGEXP_LIKE = 57835 +const REGEXP_REPLACE = 57836 +const REGEXP_SUBSTR = 57837 +const ExtractValue = 57838 +const UpdateXML = 57839 +const GET_LOCK = 57840 +const RELEASE_LOCK = 57841 +const RELEASE_ALL_LOCKS = 57842 +const IS_FREE_LOCK = 57843 +const IS_USED_LOCK = 57844 +const LOCATE = 57845 +const POSITION = 57846 +const MATCH = 57847 +const AGAINST = 57848 +const BOOLEAN = 57849 +const LANGUAGE = 57850 +const WITH = 57851 +const QUERY = 57852 +const EXPANSION = 57853 +const WITHOUT = 57854 +const VALIDATION = 57855 +const UNUSED = 57856 +const ARRAY = 57857 +const BYTE = 57858 +const CUME_DIST = 57859 +const DESCRIPTION = 57860 +const DENSE_RANK = 57861 +const EMPTY = 57862 +const EXCEPT = 57863 +const FIRST_VALUE = 57864 +const GROUPING = 57865 +const GROUPS = 57866 +const JSON_TABLE = 57867 +const LAG = 57868 +const LAST_VALUE = 57869 +const LATERAL = 57870 +const LEAD = 57871 +const NTH_VALUE = 57872 +const NTILE = 57873 +const OF = 57874 +const OVER = 57875 +const PERCENT_RANK = 57876 +const RANK = 57877 +const RECURSIVE = 57878 +const ROW_NUMBER = 57879 +const SYSTEM = 57880 +const WINDOW = 57881 +const ACTIVE = 57882 +const ADMIN = 57883 +const AUTOEXTEND_SIZE = 57884 +const BUCKETS = 57885 +const CLONE = 57886 +const COLUMN_FORMAT = 57887 +const COMPONENT = 57888 +const DEFINITION = 57889 +const ENFORCED = 57890 +const ENGINE_ATTRIBUTE = 57891 +const EXCLUDE = 57892 +const FOLLOWING = 57893 +const GET_MASTER_PUBLIC_KEY = 57894 +const HISTOGRAM = 57895 +const HISTORY = 57896 +const INACTIVE = 57897 +const INVISIBLE = 57898 +const LOCKED = 57899 +const MASTER_COMPRESSION_ALGORITHMS = 57900 +const MASTER_PUBLIC_KEY_PATH = 57901 +const MASTER_TLS_CIPHERSUITES = 57902 +const MASTER_ZSTD_COMPRESSION_LEVEL = 57903 +const NESTED = 57904 +const NETWORK_NAMESPACE = 57905 +const NOWAIT = 57906 +const NULLS = 57907 +const OJ = 57908 +const OLD = 57909 +const OPTIONAL = 57910 +const ORDINALITY = 57911 +const ORGANIZATION = 57912 +const OTHERS = 57913 +const PARTIAL = 57914 +const PATH = 57915 +const PERSIST = 57916 +const PERSIST_ONLY = 57917 +const PRECEDING = 57918 +const PRIVILEGE_CHECKS_USER = 57919 +const PROCESS = 57920 +const RANDOM = 57921 +const REFERENCE = 57922 +const REQUIRE_ROW_FORMAT = 57923 +const RESOURCE = 57924 +const RESPECT = 57925 +const RESTART = 57926 +const RETAIN = 57927 +const REUSE = 57928 +const ROLE = 57929 +const SECONDARY = 57930 +const SECONDARY_ENGINE = 57931 +const SECONDARY_ENGINE_ATTRIBUTE = 57932 +const SECONDARY_LOAD = 57933 +const SECONDARY_UNLOAD = 57934 +const SIMPLE = 57935 +const SKIP = 57936 +const SRID = 57937 +const THREAD_PRIORITY = 57938 +const TIES = 57939 +const UNBOUNDED = 57940 +const VCPU = 57941 +const VISIBLE = 57942 +const RETURNING = 57943 +const FORMAT_BYTES = 57944 +const FORMAT_PICO_TIME = 57945 +const PS_CURRENT_THREAD_ID = 57946 +const PS_THREAD_ID = 57947 +const GTID_SUBSET = 57948 +const GTID_SUBTRACT = 57949 +const WAIT_FOR_EXECUTED_GTID_SET = 57950 +const WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 57951 +const FORMAT = 57952 +const TREE = 57953 +const VITESS = 57954 +const TRADITIONAL = 57955 +const VTEXPLAIN = 57956 +const VEXPLAIN = 57957 +const PLAN = 57958 +const LOCAL = 57959 +const LOW_PRIORITY = 57960 +const KILL = 57961 +const USERS = 57962 +const NO_WRITE_TO_BINLOG = 57963 +const LOGS = 57964 +const ERROR = 57965 +const GENERAL = 57966 +const HOSTS = 57967 +const OPTIMIZER_COSTS = 57968 +const USER_RESOURCES = 57969 +const SLOW = 57970 +const CHANNEL = 57971 +const RELAY = 57972 +const EXPORT = 57973 +const CURRENT = 57974 +const ROW = 57975 +const ROWS = 57976 +const AVG_ROW_LENGTH = 57977 +const CONNECTION = 57978 +const CHECKSUM = 57979 +const DELAY_KEY_WRITE = 57980 +const ENCRYPTION = 57981 +const ENGINE = 57982 +const INSERT_METHOD = 57983 +const MAX_ROWS = 57984 +const MIN_ROWS = 57985 +const PACK_KEYS = 57986 +const PASSWORD = 57987 +const FIXED = 57988 +const DYNAMIC = 57989 +const COMPRESSED = 57990 +const REDUNDANT = 57991 +const COMPACT = 57992 +const ROW_FORMAT = 57993 +const STATS_AUTO_RECALC = 57994 +const STATS_PERSISTENT = 57995 +const STATS_SAMPLE_PAGES = 57996 +const STORAGE = 57997 +const MEMORY = 57998 +const DISK = 57999 +const PARTITIONS = 58000 +const LINEAR = 58001 +const RANGE = 58002 +const LIST = 58003 +const SUBPARTITION = 58004 +const SUBPARTITIONS = 58005 +const HASH = 58006 var yyToknames = [...]string{ "$end", @@ -1025,6 +1026,7 @@ var yyToknames = [...]string{ "VITESS_THROTTLER", "DML_JOB", "DETAILS", + "TIME_PERIOD", "BEGIN", "START", "TRANSACTION", @@ -1407,29 +1409,29 @@ var yyExca = [...]int{ -2, 41, -1, 53, 1, 162, - 681, 162, + 682, 162, -2, 170, -1, 54, 135, 170, 176, 170, - 351, 170, + 352, 170, -2, 524, -1, 64, - 36, 820, - 240, 820, - 251, 820, - 286, 834, - 287, 834, - -2, 822, + 36, 821, + 240, 821, + 251, 821, + 286, 835, + 287, 835, + -2, 823, -1, 69, - 242, 858, - -2, 856, + 242, 859, + -2, 857, -1, 127, - 239, 1521, + 239, 1522, -2, 136, -1, 129, 1, 163, - 681, 163, + 682, 163, -2, 170, -1, 140, 136, 410, @@ -1438,1007 +1440,1028 @@ var yyExca = [...]int{ -1, 159, 135, 170, 176, 170, - 351, 170, + 352, 170, -2, 533, - -1, 841, - 87, 1538, - -2, 1383, -1, 842, 87, 1539, - 221, 1543, -2, 1384, -1, 843, - 221, 1542, + 87, 1540, + 221, 1544, + -2, 1385, + -1, 844, + 221, 1543, -2, 43, - -1, 922, - 60, 934, - -2, 949, - -1, 1010, + -1, 923, + 60, 935, + -2, 950, + -1, 1011, 250, 44, 255, 44, -2, 421, - -1, 1097, + -1, 1098, 1, 581, - 681, 581, + 682, 581, -2, 170, - -1, 1411, - 221, 1543, - -2, 1384, - -1, 1559, - 60, 935, - -2, 954, + -1, 1412, + 221, 1544, + -2, 1385, -1, 1560, 60, 936, -2, 955, - -1, 1611, + -1, 1561, + 60, 937, + -2, 956, + -1, 1612, 135, 170, 176, 170, - 351, 170, + 352, 170, -2, 460, - -1, 1694, + -1, 1695, 136, 410, 245, 410, -2, 513, - -1, 1703, + -1, 1704, 250, 45, 255, 45, -2, 422, - -1, 2092, - 221, 1547, - -2, 1541, -1, 2093, - 221, 1543, - -2, 1539, - -1, 2192, + 221, 1548, + -2, 1542, + -1, 2094, + 221, 1544, + -2, 1540, + -1, 2193, 135, 170, 176, 170, - 351, 170, + 352, 170, -2, 461, - -1, 2199, + -1, 2200, 26, 191, -2, 193, - -1, 2601, + -1, 2603, 78, 99, 88, 99, - -2, 1013, - -1, 2670, - 656, 730, - -2, 704, - -1, 2842, - 50, 1489, - -2, 1483, - -1, 3500, - 656, 730, - -2, 718, - -1, 3588, - 90, 662, - 95, 662, - 105, 662, - 178, 662, - 179, 662, - 180, 662, - 181, 662, - 182, 662, - 183, 662, - 184, 662, - 185, 662, - 186, 662, - 187, 662, - 188, 662, - 189, 662, - 190, 662, - 191, 662, - 192, 662, - 193, 662, - 194, 662, - 195, 662, - 196, 662, - 197, 662, - 198, 662, - 199, 662, - 200, 662, - 201, 662, - 202, 662, - 203, 662, - 204, 662, - 205, 662, - 206, 662, - 207, 662, - 208, 662, - 209, 662, - 210, 662, - 211, 662, - 212, 662, - 213, 662, - 214, 662, - 215, 662, - 216, 662, - 217, 662, - 218, 662, - 219, 662, - -2, 1906, + -2, 1014, + -1, 2672, + 657, 731, + -2, 705, + -1, 2845, + 50, 1490, + -2, 1484, + -1, 3504, + 657, 731, + -2, 719, + -1, 3592, + 90, 663, + 95, 663, + 105, 663, + 178, 663, + 179, 663, + 180, 663, + 181, 663, + 182, 663, + 183, 663, + 184, 663, + 185, 663, + 186, 663, + 187, 663, + 188, 663, + 189, 663, + 190, 663, + 191, 663, + 192, 663, + 193, 663, + 194, 663, + 195, 663, + 196, 663, + 197, 663, + 198, 663, + 199, 663, + 200, 663, + 201, 663, + 202, 663, + 203, 663, + 204, 663, + 205, 663, + 206, 663, + 207, 663, + 208, 663, + 209, 663, + 210, 663, + 211, 663, + 212, 663, + 213, 663, + 214, 663, + 215, 663, + 216, 663, + 217, 663, + 218, 663, + 219, 663, + -2, 1907, } const yyPrivate = 57344 -const yyLast = 48046 +const yyLast = 48365 var yyAct = [...]int{ - 1567, 3659, 842, 852, 845, 3670, 2140, 3565, 3628, 715, - 3629, 2189, 3218, 1614, 3531, 2992, 3554, 3586, 2894, 2901, - 3075, 3481, 3465, 3413, 2121, 2943, 938, 3463, 2952, 3247, - 2957, 2954, 2953, 2501, 2951, 3248, 3249, 2956, 2955, 3205, - 1169, 2855, 916, 2123, 2858, 3277, 812, 2972, 2801, 3453, - 694, 2909, 2263, 697, 2535, 2859, 2856, 3114, 1905, 200, - 811, 5, 200, 43, 2971, 2574, 3282, 1574, 674, 3108, - 2736, 1537, 725, 680, 807, 2974, 805, 2160, 2163, 2853, - 2843, 844, 2561, 1959, 200, 3134, 2083, 3100, 2144, 806, - 2226, 695, 2720, 693, 2231, 1042, 2635, 2667, 2636, 200, - 1672, 2637, 2294, 1171, 2586, 971, 2177, 2164, 2251, 44, - 2553, 1974, 2567, 939, 168, 2080, 2165, 1561, 2088, 2537, - 2054, 2152, 1913, 918, 2272, 2250, 680, 200, 42, 680, - 2233, 154, 1142, 2311, 2628, 1955, 2603, 2053, 2707, 1005, - 1000, 2998, 1603, 1583, 1701, 1541, 707, 1423, 920, 689, - 923, 2167, 1978, 1839, 1932, 1835, 102, 106, 1719, 1335, - 1350, 979, 1844, 1008, 975, 1011, 1018, 107, 1708, 941, - 2248, 1800, 980, 2222, 1006, 1007, 2145, 702, 1602, 1588, - 929, 956, 2223, 958, 2050, 1407, 1383, 1167, 1904, 1853, - 1160, 101, 2089, 1987, 926, 927, 1693, 87, 132, 925, - 109, 172, 130, 131, 1665, 137, 138, 701, 1427, 1091, - 951, 86, 3490, 108, 100, 2660, 3660, 3206, 924, 2265, - 2266, 2267, 684, 2940, 2265, 946, 950, 3516, 2690, 2689, - 2309, 2658, 663, 618, 3161, 1351, 3198, 1785, 861, 862, - 863, 623, 97, 3612, 97, 2728, 2729, 3252, 1431, 97, - 95, 139, 1044, 3517, 3512, 133, 669, 1920, 932, 2962, - 1919, 1918, 1917, 972, 3511, 1061, 1062, 1063, 1935, 1066, - 1067, 1068, 1069, 998, 1047, 1072, 1073, 1074, 1075, 1076, - 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, - 1087, 1088, 2, 3252, 933, 966, 965, 1916, 685, 919, - 917, 121, 1915, 1888, 1568, 1021, 1885, 1351, 1022, 687, - 997, 3607, 622, 688, 2533, 2960, 964, 809, 810, 1346, - 964, 809, 810, 2389, 1048, 1051, 1052, 2563, 996, 2839, - 1055, 133, 995, 994, 3251, 861, 862, 863, 113, 114, - 115, 2966, 118, 1368, 1362, 127, 195, 2298, 196, 1064, - 2962, 612, 2680, 2805, 984, 2118, 2119, 2663, 989, 940, - 663, 3596, 3572, 2959, 663, 682, 683, 3512, 3616, 3614, - 134, 3680, 156, 968, 3627, 912, 913, 914, 915, 3594, - 3251, 922, 3632, 177, 3566, 3650, 3080, 3079, 3600, 3601, - 2683, 2297, 97, 3615, 3613, 2296, 2911, 2912, 3466, 133, - 2502, 2242, 1925, 3595, 3022, 3409, 2960, 3408, 1046, 953, - 954, 663, 3211, 1045, 167, 3212, 1362, 3641, 978, 3419, - 155, 88, 2398, 3610, 2236, 88, 3230, 1337, 90, 3495, - 88, 3219, 2966, 88, 3555, 3562, 2291, 3418, 1964, 174, - 3229, 3591, 175, 3042, 1384, 1682, 2891, 2892, 664, 2697, - 2698, 2184, 2185, 2148, 2963, 1357, 2534, 2577, 1349, 3572, - 2890, 1695, 1696, 166, 165, 194, 3019, 1385, 1386, 1387, - 1388, 1389, 1390, 1391, 1393, 1392, 1394, 1395, 1365, 3295, - 1366, 1367, 2578, 1604, 1096, 1605, 993, 2396, 1102, 1103, - 988, 2612, 2727, 990, 2611, 2395, 1149, 2613, 1151, 97, - 1897, 1898, 2183, 97, 2712, 2910, 2706, 1132, 97, 910, - 1120, 97, 1164, 909, 1845, 1121, 1120, 2913, 1137, 1138, - 1105, 1121, 2624, 1119, 3482, 1118, 1133, 1357, 3111, 2661, - 1336, 1126, 1347, 2202, 2201, 2994, 1148, 1150, 2570, 2571, - 2770, 3030, 3028, 663, 991, 2963, 957, 2387, 1896, 663, - 1113, 621, 677, 2999, 1887, 1090, 675, 1900, 681, 2668, - 2708, 1600, 1545, 2273, 160, 1697, 163, 2120, 1694, 2987, - 161, 162, 2235, 3441, 1546, 3442, 664, 2988, 178, 3633, - 664, 2693, 2364, 2317, 2365, 2148, 2366, 184, 2390, 2391, - 2393, 2392, 993, 663, 985, 1845, 1153, 1801, 2312, 3662, - 3634, 987, 986, 2352, 2348, 2350, 2351, 2349, 2355, 2356, - 1135, 1136, 2353, 2354, 200, 1162, 200, 1141, 2378, 200, - 200, 1821, 1098, 1134, 2715, 1139, 3200, 664, 1127, 3199, - 1163, 2367, 2995, 1071, 1065, 1140, 1070, 1775, 2318, 2996, - 993, 1089, 967, 961, 959, 1146, 967, 961, 959, 1147, - 991, 2146, 2147, 2314, 3393, 3608, 1549, 2737, 2276, 1152, - 1843, 2316, 680, 619, 680, 680, 3196, 1031, 2324, 2320, - 2322, 2323, 2321, 2327, 2328, 1543, 1001, 2325, 2326, 3256, - 1002, 1776, 992, 1777, 680, 200, 1029, 2396, 2161, 3639, - 1806, 1145, 1002, 1040, 1358, 1039, 1356, 1353, 1354, 1355, - 1361, 1363, 1360, 2315, 1359, 1093, 1038, 1037, 1036, 2804, - 1035, 2771, 1034, 1411, 1352, 1033, 169, 1095, 1028, 1094, - 1686, 1041, 3674, 2337, 2913, 2336, 3681, 195, 2340, 2341, - 1707, 976, 2338, 2339, 1398, 614, 1014, 976, 1398, 1050, - 976, 974, 2739, 1013, 1836, 1013, 2249, 2538, 2540, 1049, - 952, 134, 999, 2716, 1130, 3489, 3568, 911, 2659, 664, - 2302, 2301, 1832, 1338, 177, 664, 1358, 1419, 1356, 1353, - 1354, 1355, 1361, 1363, 1360, 1058, 1359, 2933, 1154, 1155, - 1157, 3195, 2692, 2146, 2147, 1409, 1352, 2719, 992, 620, - 3567, 1601, 1680, 1679, 1020, 1401, 1402, 1403, 1404, 2695, - 977, 1678, 164, 1328, 858, 1415, 858, 2617, 2626, 664, - 2678, 858, 1833, 1092, 1676, 1032, 2295, 2749, 2748, 2747, - 174, 2732, 2741, 175, 2745, 2410, 2740, 2662, 2738, 3020, - 3112, 617, 3599, 2743, 1030, 1824, 992, 1822, 1823, 1706, - 1827, 1828, 2742, 616, 1825, 1826, 194, 611, 2239, 1329, - 1330, 2293, 2722, 3568, 3250, 1411, 1405, 2721, 960, 1814, - 2744, 2746, 960, 157, 3159, 3160, 158, 1787, 1786, 1788, - 1789, 1790, 2964, 2965, 2705, 1805, 3598, 2704, 129, 91, - 1849, 1399, 1400, 3478, 3148, 2968, 3130, 3567, 2240, 3228, - 2608, 2573, 2682, 2568, 2510, 2238, 170, 1019, 1967, 1592, - 3250, 1057, 1500, 182, 1809, 1107, 1807, 1808, 2190, 1812, - 1813, 1398, 200, 1810, 1811, 2539, 680, 680, 1535, 1395, - 1846, 1847, 1850, 1848, 2397, 1569, 1571, 1345, 2889, 2241, - 935, 200, 1161, 1429, 1143, 1430, 2681, 96, 1143, 2237, - 1854, 96, 3672, 1550, 190, 3673, 96, 3671, 3503, 96, - 1043, 680, 2722, 3191, 200, 1117, 3064, 2721, 1129, 178, - 3124, 1849, 1553, 2964, 2965, 2313, 680, 1101, 184, 1131, - 1988, 1104, 1909, 200, 1829, 1606, 2968, 1433, 1552, 1115, - 2756, 1979, 1556, 2427, 1989, 1979, 1536, 920, 2651, 171, - 176, 173, 179, 180, 181, 183, 185, 186, 187, 188, - 3642, 1846, 1847, 1850, 1848, 189, 191, 192, 193, 1156, - 1367, 680, 1020, 1386, 1387, 1388, 1389, 1390, 1391, 1393, - 1392, 1394, 1395, 1802, 1411, 1803, 1020, 3291, 1804, 3166, - 680, 680, 3165, 680, 1554, 680, 680, 106, 680, 680, - 680, 680, 680, 680, 1555, 2292, 2280, 107, 1366, 1367, - 1536, 1411, 1716, 1715, 1411, 680, 1411, 200, 1705, 3635, - 1529, 1542, 1506, 1507, 1508, 1509, 1510, 1390, 1391, 1393, - 1392, 1394, 1395, 1816, 2290, 1815, 1097, 200, 1819, 1820, - 109, 1144, 1817, 1818, 2288, 1144, 1031, 1855, 2285, 1029, - 680, 3149, 200, 1683, 1684, 1685, 1713, 169, 1388, 1389, - 1390, 1391, 1393, 1392, 1394, 1395, 931, 2085, 680, 3225, - 200, 3226, 3533, 1986, 1699, 1019, 1570, 1056, 1770, 2028, - 2285, 1053, 1114, 1748, 1573, 125, 1751, 2289, 1753, 1019, - 200, 1539, 1368, 917, 1023, 1013, 1692, 200, 919, 1025, - 3471, 1795, 122, 1026, 1024, 1020, 200, 200, 200, 200, - 200, 200, 200, 200, 200, 680, 1937, 3534, 1752, 2287, - 1760, 1761, 3682, 1711, 1597, 1598, 1766, 1767, 1551, 3676, - 1938, 1396, 1397, 1936, 2402, 2403, 2404, 1116, 1368, 1122, - 1123, 1124, 1125, 1709, 1709, 3472, 1710, 1721, 3401, 1722, - 3400, 1724, 1726, 1675, 1020, 1730, 1732, 1734, 1736, 1738, - 1689, 3391, 3241, 123, 1793, 1794, 1165, 1166, 3240, 1690, - 1688, 1841, 2991, 1368, 1384, 1702, 2020, 2009, 2010, 2011, - 2012, 2022, 2013, 2014, 2015, 2027, 2023, 2016, 2017, 2024, - 2025, 2026, 2018, 2019, 2021, 1756, 1020, 1385, 1386, 1387, - 1388, 1389, 1390, 1391, 1393, 1392, 1394, 1395, 1019, 3683, - 1782, 1856, 1857, 2085, 1013, 1016, 1017, 2082, 976, 3173, - 1837, 3172, 1010, 1014, 3162, 1861, 2084, 1365, 1792, 1366, - 1367, 1368, 1868, 1869, 1870, 124, 2758, 170, 1568, 2941, - 856, 669, 1681, 1009, 182, 1984, 1368, 1100, 2929, 1106, - 2633, 2632, 1108, 1110, 1985, 2631, 996, 1019, 1568, 133, - 995, 994, 1023, 1013, 1927, 1929, 1930, 1025, 2454, 2245, - 1796, 1026, 1024, 1365, 1781, 1366, 1367, 1780, 1860, 861, - 862, 863, 1368, 1600, 1779, 190, 1368, 1778, 1928, 1768, - 680, 680, 1027, 1762, 1759, 1368, 1384, 2424, 2731, 1019, - 1881, 3037, 1758, 680, 1882, 1013, 1016, 1017, 1365, 976, - 1366, 1367, 200, 1010, 1014, 3646, 1568, 1332, 1340, 1385, - 1386, 1387, 1388, 1389, 1390, 1391, 1393, 1392, 1394, 1395, + 1568, 3663, 843, 853, 846, 3674, 2141, 3569, 3632, 716, + 3633, 2190, 3222, 1615, 3535, 2995, 3558, 3590, 2897, 2904, + 3079, 3485, 3469, 3417, 2122, 2946, 939, 2955, 2960, 3251, + 2957, 2956, 2954, 2959, 2958, 3252, 3253, 2858, 3467, 3209, + 1170, 2861, 2503, 2124, 917, 3281, 813, 2975, 2804, 3457, + 695, 2912, 812, 2974, 2537, 43, 698, 2862, 1906, 200, + 2859, 5, 200, 2739, 2264, 3118, 3112, 1575, 675, 3286, + 806, 1538, 726, 681, 808, 2977, 2145, 2161, 2576, 2846, + 3138, 845, 2856, 1960, 200, 2563, 2164, 2084, 807, 2723, + 696, 1673, 3104, 2637, 2252, 1043, 2227, 2669, 2232, 200, + 2638, 1114, 694, 2639, 2295, 1172, 972, 2178, 168, 2588, + 42, 2166, 2569, 940, 2165, 1562, 2555, 2539, 2089, 44, + 1975, 2081, 1914, 919, 2055, 2709, 681, 200, 1956, 681, + 2273, 3001, 2251, 154, 1143, 2234, 2153, 2630, 1702, 1006, + 921, 2312, 924, 1720, 1584, 1604, 1001, 2605, 2168, 690, + 708, 2054, 1542, 1424, 1840, 102, 1979, 106, 1351, 1336, + 1836, 942, 1845, 1933, 980, 976, 1009, 107, 1019, 1709, + 1012, 2249, 1801, 981, 2223, 1007, 1008, 2146, 1603, 703, + 1589, 957, 2224, 959, 930, 1408, 2090, 1384, 2051, 1905, + 1161, 101, 1988, 1854, 927, 1168, 172, 87, 1666, 109, + 925, 132, 137, 130, 131, 1092, 1694, 138, 952, 926, + 928, 702, 108, 86, 1428, 100, 3494, 2662, 3664, 2266, + 2267, 2268, 3520, 3210, 685, 2943, 2266, 2692, 2691, 2310, + 2660, 3165, 1352, 664, 947, 951, 3202, 1786, 97, 2965, + 3616, 97, 624, 619, 2731, 97, 95, 2732, 3521, 3256, + 133, 1432, 1045, 3515, 3516, 1921, 1920, 933, 1352, 1919, + 1936, 139, 670, 973, 1918, 1062, 1063, 1064, 1048, 1067, + 1068, 1069, 1070, 3256, 999, 1073, 1074, 1075, 1076, 1077, + 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, + 1088, 1089, 2, 1917, 934, 2963, 967, 121, 966, 918, + 686, 920, 862, 863, 864, 1916, 1569, 2965, 1022, 1889, + 1023, 998, 862, 863, 864, 1886, 623, 3611, 688, 1347, + 2962, 2969, 689, 2119, 2120, 2391, 133, 1049, 1052, 1053, + 2535, 997, 1056, 996, 995, 2565, 3255, 2842, 113, 114, + 115, 1363, 118, 1369, 2299, 127, 195, 990, 196, 97, + 1065, 613, 965, 810, 811, 941, 3516, 3636, 2682, 985, + 3255, 3570, 2808, 2963, 3600, 683, 684, 1363, 3620, 969, + 134, 3684, 156, 3618, 3631, 913, 914, 915, 916, 3654, + 3084, 923, 3598, 177, 3083, 2685, 3470, 2297, 2298, 2969, + 2243, 3604, 3605, 3619, 133, 2504, 664, 1926, 3617, 2914, + 2915, 664, 3026, 3413, 3412, 3215, 3599, 1047, 3216, 954, + 955, 1046, 3645, 2237, 167, 965, 810, 811, 979, 88, + 155, 88, 90, 3423, 3614, 3499, 3576, 2400, 3234, 3223, + 1338, 3559, 3566, 88, 2966, 2292, 3576, 88, 3422, 174, + 3233, 3595, 175, 2149, 1385, 1965, 3046, 1683, 2894, 2895, + 665, 2699, 2700, 1358, 2185, 2186, 1350, 2579, 1605, 664, + 1606, 143, 144, 166, 165, 194, 3023, 1386, 1387, 1388, + 1389, 1390, 1391, 1392, 1394, 1393, 1395, 1396, 1366, 1358, + 1367, 1368, 2580, 2536, 1846, 2893, 3299, 1150, 2730, 1152, + 2397, 994, 2398, 1103, 1104, 2614, 2184, 97, 2613, 97, + 2715, 2615, 2966, 2708, 1138, 1139, 1898, 1899, 2913, 1121, + 1165, 97, 1133, 911, 1122, 97, 910, 2663, 1121, 3486, + 2916, 1134, 1120, 1122, 1119, 1106, 1127, 1149, 1151, 2626, + 2203, 2202, 1348, 1337, 3115, 2121, 2997, 3034, 664, 2572, + 2573, 2773, 3032, 989, 1091, 1901, 991, 1897, 664, 992, + 664, 2389, 1097, 678, 3637, 622, 682, 1601, 676, 3002, + 1888, 2236, 1546, 2710, 160, 141, 163, 148, 140, 2670, + 161, 162, 2274, 2990, 1547, 3638, 2695, 2313, 178, 1846, + 2149, 2991, 3666, 958, 1776, 2318, 1802, 184, 149, 1066, + 2392, 2393, 2395, 2394, 3445, 2366, 3446, 2367, 1154, 2368, + 1136, 1137, 152, 150, 145, 146, 147, 151, 1163, 1142, + 2380, 2718, 1140, 665, 142, 200, 1099, 200, 665, 1135, + 200, 200, 1141, 153, 1128, 1815, 3204, 3203, 1777, 1164, + 1778, 2369, 1072, 1071, 2998, 2317, 2999, 1147, 2315, 1550, + 2319, 1148, 2147, 2148, 1844, 994, 3397, 986, 3200, 1002, + 2277, 1153, 3260, 1003, 988, 987, 2162, 1003, 1032, 1041, + 1040, 1039, 3612, 681, 1030, 681, 681, 1038, 1037, 1036, + 1035, 1687, 1034, 1029, 620, 1042, 665, 2316, 3678, 968, + 962, 960, 1399, 1146, 1399, 681, 200, 977, 993, 2916, + 3685, 975, 1359, 1014, 1357, 1354, 1355, 1356, 1362, 1364, + 1361, 977, 1360, 992, 3643, 1131, 1015, 977, 994, 1090, + 1708, 1837, 1353, 2774, 1412, 1021, 2250, 169, 1359, 2807, + 1357, 1354, 1355, 1356, 1362, 1364, 1361, 195, 1360, 1117, + 1051, 1123, 1124, 1125, 1126, 953, 1014, 2398, 1353, 2719, + 1050, 2303, 968, 962, 960, 2722, 2302, 2338, 2936, 2337, + 2694, 134, 2341, 2342, 1000, 665, 2339, 2340, 1166, 1167, + 3493, 2661, 2343, 3199, 177, 665, 1833, 665, 1420, 2735, + 1339, 2412, 1059, 1094, 1021, 3482, 1681, 2570, 1680, 2147, + 2148, 1155, 1156, 1158, 1679, 1096, 1410, 1095, 1602, 2680, + 1834, 1677, 2540, 2542, 618, 1402, 1403, 1404, 1405, 2628, + 621, 859, 2697, 164, 859, 1416, 1033, 2619, 859, 2296, + 1329, 617, 1031, 3152, 612, 3134, 2664, 2294, 1020, 1707, + 174, 3572, 2610, 175, 1014, 1017, 1018, 2575, 977, 1806, + 3024, 3572, 1011, 1015, 1400, 1401, 3603, 3116, 2240, 1817, + 2707, 1816, 993, 2706, 1820, 1821, 194, 2512, 1818, 1819, + 1968, 1850, 1593, 2967, 2968, 3571, 1412, 3254, 1330, 1331, + 1501, 1406, 3163, 3164, 157, 3571, 2971, 158, 1788, 1787, + 1789, 1790, 1791, 1108, 91, 2191, 129, 1020, 2241, 1399, + 3602, 3254, 1093, 1396, 2892, 2239, 1989, 936, 1162, 3507, + 3232, 1847, 1848, 1851, 1849, 961, 1044, 170, 3676, 2684, + 1990, 3677, 2725, 3675, 182, 993, 3195, 2724, 1116, 1130, + 2725, 1536, 3128, 200, 2314, 2724, 1058, 681, 681, 2242, + 1132, 2967, 2968, 1910, 1144, 1855, 1570, 1572, 1346, 2238, + 2399, 1830, 200, 1607, 2971, 2759, 96, 1980, 96, 2429, + 1430, 1980, 1431, 2683, 1551, 190, 1850, 2653, 3646, 1369, + 96, 1368, 681, 3295, 96, 200, 3170, 3068, 961, 178, + 2541, 1105, 1367, 1368, 1118, 1554, 3169, 681, 184, 1537, + 2281, 1553, 1021, 1102, 200, 1557, 1717, 1803, 1144, 1804, + 921, 1434, 1805, 1716, 1706, 2286, 1847, 1848, 1851, 1849, 171, 176, 173, 179, 180, 181, 183, 185, 186, 187, - 188, 1757, 1728, 1112, 1368, 1111, 189, 191, 192, 193, - 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1393, 1392, 1394, - 1395, 680, 43, 1962, 1962, 43, 1365, 1568, 1366, 1367, - 2423, 1411, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1370, - 3637, 1365, 680, 1366, 1367, 3636, 1933, 3498, 1411, 1982, - 3497, 1368, 1940, 1983, 1942, 1943, 1944, 1945, 1946, 1947, - 1948, 1949, 1950, 1951, 1952, 1953, 1954, 3156, 669, 2615, - 669, 2261, 2260, 680, 680, 2153, 2154, 1365, 3475, 1366, - 1367, 1365, 1577, 1366, 1367, 1931, 3474, 2046, 3644, 1568, - 1365, 1368, 1366, 1367, 1941, 2259, 2258, 2257, 2256, 1535, - 3473, 1960, 1960, 1409, 1963, 103, 3396, 2464, 2559, 3661, - 1568, 112, 105, 2415, 3380, 2078, 104, 1364, 1568, 1368, - 1980, 3379, 111, 2093, 110, 3623, 1568, 1368, 1578, 1364, - 1568, 2559, 3561, 2042, 3290, 1893, 1894, 3491, 1368, 1365, - 2107, 1366, 1367, 3288, 103, 3237, 1934, 1368, 2559, 3541, - 3427, 1384, 2040, 1910, 1368, 104, 87, 1569, 2114, 87, - 1534, 2090, 2051, 2559, 3537, 3426, 200, 1536, 3524, 1568, - 3384, 1568, 680, 2466, 1385, 1386, 1387, 1388, 1389, 1390, - 1391, 1393, 1392, 1394, 1395, 1368, 1365, 1939, 1366, 1367, - 1533, 2137, 1568, 3209, 3488, 200, 2462, 1532, 680, 3170, - 2132, 2417, 2133, 3578, 1568, 3383, 2081, 3155, 200, 3004, - 1568, 2416, 680, 3217, 1966, 2093, 200, 1368, 200, 3000, - 200, 200, 3576, 1568, 2092, 2997, 1365, 1368, 1366, 1367, - 2115, 3574, 1568, 1973, 1975, 680, 2051, 2932, 3450, 1568, - 2669, 2095, 2096, 3404, 1568, 2647, 2199, 1596, 2931, 1990, - 1991, 1992, 1993, 2090, 1365, 1368, 1366, 1367, 2559, 3392, - 3209, 1568, 1365, 2004, 1366, 1367, 1613, 1368, 2642, 106, - 1568, 2559, 3207, 1365, 2091, 1366, 1367, 2629, 2171, 107, - 2285, 1568, 1365, 1531, 1366, 1367, 3128, 1568, 2198, 1365, - 106, 1366, 1367, 2307, 680, 2246, 2306, 1858, 2143, 2136, - 107, 3448, 1568, 97, 1862, 2127, 1864, 1865, 1866, 1867, - 2126, 3445, 1568, 1871, 2094, 2604, 2092, 2097, 2098, 1889, - 1365, 680, 1366, 1367, 1851, 1883, 1884, 680, 1886, 2475, - 1568, 2922, 2921, 3123, 2208, 2209, 2210, 2211, 2194, 3422, - 2203, 2175, 2204, 2205, 2206, 2207, 2193, 932, 2113, 2125, - 1754, 3143, 1365, 1364, 1366, 1367, 2919, 2920, 2214, 2215, - 2216, 2217, 1365, 1368, 1366, 1367, 2158, 1791, 2274, 1368, - 105, 2135, 2197, 2138, 680, 2228, 2917, 2918, 2605, 680, - 2917, 2916, 3125, 680, 680, 1799, 1368, 1581, 2607, 2156, - 1365, 1783, 1366, 1367, 1773, 1368, 966, 965, 1769, 2234, - 2181, 2180, 1365, 2179, 1366, 1367, 1765, 2196, 2195, 2583, - 1568, 2396, 2691, 2575, 2244, 1671, 2672, 2665, 2666, 2604, - 2555, 200, 1764, 1859, 2271, 2559, 2558, 112, 200, 1568, - 1863, 2420, 1568, 2897, 1763, 105, 1965, 1568, 111, 1579, - 110, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 3486, 105, - 2229, 1671, 1670, 1580, 200, 200, 2225, 1159, 200, 1158, - 200, 2218, 2220, 2221, 2243, 111, 200, 2247, 1612, 1611, - 2279, 3388, 2255, 2282, 3604, 2283, 200, 2299, 2898, 3431, - 1568, 1021, 2605, 200, 1022, 2583, 2278, 2229, 2277, 2575, - 3529, 3502, 2396, 2420, 1709, 1368, 2281, 2300, 1365, 1368, - 1366, 1367, 2900, 2854, 1365, 2884, 1366, 1367, 1568, 2559, - 2583, 3084, 2303, 200, 3123, 2396, 2304, 2305, 2286, 2582, - 2895, 1365, 680, 1366, 1367, 2919, 1384, 2827, 2182, 1380, - 1365, 1381, 1366, 1367, 1364, 2420, 2475, 2911, 2912, 2451, - 1384, 2310, 2409, 2450, 2896, 1382, 1396, 1397, 1379, 1385, - 1386, 1387, 1388, 1389, 1390, 1391, 1393, 1392, 1394, 1395, - 3174, 3123, 2285, 1385, 1386, 1387, 1388, 1389, 1390, 1391, - 1393, 1392, 1394, 1395, 2583, 2268, 2285, 2902, 2151, 3099, - 1568, 1572, 2116, 3092, 1568, 1368, 1965, 2413, 1411, 1911, - 2093, 2418, 1895, 1831, 2421, 1599, 2422, 1004, 125, 1003, - 3544, 2429, 3415, 1933, 1575, 2431, 2432, 2433, 2406, 2370, - 2408, 3175, 3176, 3177, 3381, 2439, 2440, 2441, 2442, 2443, - 2444, 2445, 2446, 2447, 2448, 2376, 3302, 3190, 2414, 1368, - 1365, 3187, 1366, 1367, 1365, 3168, 1366, 1367, 3047, 3046, - 1368, 1673, 1744, 2227, 2989, 1914, 2910, 1368, 2946, 2942, - 2407, 2455, 2456, 2457, 2458, 2459, 2673, 2461, 2913, 2224, - 2412, 2463, 2219, 2213, 1368, 2468, 2469, 2212, 2470, 3089, - 1568, 2473, 1798, 2474, 1368, 2386, 97, 2477, 1368, 2434, - 1704, 2481, 1700, 1667, 1368, 2486, 2487, 2488, 2489, 1368, - 126, 2092, 2394, 1745, 1746, 1747, 2449, 2638, 2500, 2944, - 2503, 2504, 2639, 1934, 1096, 1368, 2993, 3178, 2506, 2508, - 1368, 2405, 3416, 3087, 1568, 2511, 2512, 2513, 2514, 2515, - 1365, 1368, 1366, 1367, 3052, 1568, 2522, 2523, 2242, 2524, - 2130, 3094, 2527, 2529, 2137, 1368, 2531, 2134, 1891, 200, - 3141, 2091, 3135, 3136, 3656, 2639, 2543, 200, 3035, 1568, - 2426, 3506, 1962, 3654, 3179, 3180, 3181, 680, 2530, 1568, - 1368, 3630, 2528, 1568, 1365, 1368, 1366, 1367, 680, 3192, - 3510, 3436, 3138, 2507, 1568, 1365, 2938, 1366, 1367, 2899, - 2937, 2936, 1365, 3417, 1366, 1367, 2854, 2652, 2542, 2490, - 1568, 1368, 200, 2371, 2482, 1568, 3272, 200, 3271, 1365, - 1892, 1366, 1367, 2460, 2878, 3090, 2592, 2593, 3140, 1365, - 2873, 1366, 1367, 1365, 1740, 1366, 1367, 2872, 2876, 1365, - 2634, 1366, 1367, 2877, 1365, 1576, 1366, 1367, 2142, 2874, - 1960, 3129, 2544, 690, 2875, 2545, 2832, 2547, 2831, 2579, - 1365, 43, 1366, 1367, 3062, 1365, 3270, 1366, 1367, 3058, - 2597, 3470, 2560, 2599, 3281, 3283, 1365, 3119, 1366, 1367, - 2841, 1741, 1742, 1743, 1830, 680, 2915, 908, 2598, 3116, - 1365, 200, 1366, 1367, 2556, 3044, 1368, 3115, 200, 2622, - 2569, 2155, 2532, 2643, 2844, 2846, 1368, 1060, 1542, 2159, - 1988, 2162, 680, 2847, 1914, 1365, 2664, 1366, 1367, 680, - 1365, 1368, 1366, 1367, 1989, 1059, 2557, 3013, 680, 103, - 103, 936, 2552, 2625, 2627, 2572, 105, 2602, 1536, 937, - 104, 104, 2638, 2725, 1411, 1368, 1365, 2618, 1366, 1367, - 2679, 1368, 1331, 2606, 134, 2688, 3121, 200, 200, 200, - 200, 200, 1368, 105, 942, 2609, 1368, 948, 948, 3668, - 2934, 2641, 2616, 1368, 2619, 2374, 2644, 2645, 2153, 2154, - 3043, 2234, 2903, 3583, 2363, 1368, 2907, 3487, 2630, 3411, - 3040, 2914, 2596, 2906, 2139, 2588, 2591, 2592, 2593, 2589, - 1368, 2590, 2594, 2640, 2830, 2526, 944, 945, 2648, 2362, - 2361, 2360, 2829, 200, 200, 2359, 2686, 2358, 2653, 2654, - 2655, 2649, 2357, 2347, 2346, 1368, 2345, 2908, 2344, 2525, - 2343, 1365, 2904, 1366, 1367, 2521, 2342, 2905, 2685, 200, - 1692, 1365, 1368, 1366, 1367, 3101, 2520, 2380, 2381, 2335, - 2519, 2334, 2383, 2333, 2332, 2331, 1365, 2518, 1366, 1367, - 680, 2384, 1368, 2330, 2684, 2674, 2675, 2329, 2400, 2517, - 110, 3458, 3457, 3439, 112, 2760, 2761, 2762, 2763, 2764, - 1365, 3289, 1366, 1367, 2516, 111, 1365, 110, 1366, 1367, - 3287, 3286, 3279, 3188, 2769, 3120, 105, 1365, 3118, 1366, - 1367, 1365, 2735, 1366, 1367, 112, 2947, 680, 1365, 2505, - 1366, 1367, 2269, 2709, 1914, 1687, 111, 112, 110, 2710, - 1365, 2319, 1366, 1367, 943, 2711, 2499, 2750, 111, 111, - 3278, 2752, 2765, 2717, 2713, 1365, 3109, 1366, 1367, 2575, - 3260, 2714, 2734, 2733, 2555, 680, 2498, 2368, 2369, 3658, - 3657, 2373, 2723, 680, 2772, 2724, 2452, 2128, 1593, 2377, - 1365, 1585, 1366, 1367, 1368, 116, 117, 3657, 3658, 2379, - 3476, 3154, 2753, 1566, 1562, 934, 2382, 1365, 2806, 1366, - 1367, 125, 1908, 1906, 680, 10, 9, 3, 1563, 99, - 2782, 2811, 2784, 2751, 1, 2808, 1109, 1365, 200, 1366, - 1367, 1907, 680, 1842, 8, 1334, 2385, 1333, 2795, 2796, - 2797, 2798, 3158, 1668, 1669, 1565, 680, 1564, 3593, 637, - 1411, 2863, 2117, 680, 680, 1411, 200, 200, 200, 200, - 200, 1368, 1540, 3631, 3589, 2081, 2780, 2081, 200, 2881, - 2774, 2851, 3590, 1784, 200, 1774, 200, 3220, 2497, 200, - 200, 200, 1368, 2052, 2811, 3412, 2171, 2950, 2275, 2834, - 3186, 2807, 2232, 2809, 2866, 2860, 2883, 1012, 2810, 2790, - 2791, 2792, 2793, 2794, 2835, 159, 2191, 2192, 3557, 120, - 969, 923, 119, 1015, 2171, 2171, 2171, 2171, 2171, 1128, - 2270, 3210, 2857, 2623, 2200, 200, 2822, 2857, 1618, 1365, - 1616, 1366, 1367, 2833, 2171, 1617, 1615, 2171, 680, 1620, - 1619, 1411, 3021, 2453, 2836, 2496, 680, 2848, 2849, 3063, - 2970, 200, 2885, 1899, 676, 2886, 2595, 670, 197, 1607, - 925, 2867, 1586, 3076, 2870, 200, 2495, 1054, 627, 2879, - 2826, 2868, 2869, 2923, 2871, 2823, 2824, 2825, 2308, 924, - 633, 106, 1841, 1416, 2887, 1890, 2828, 2610, 963, 200, - 955, 107, 200, 1368, 2129, 2546, 1365, 962, 1366, 1367, - 3389, 3015, 2893, 2862, 2927, 2928, 2926, 2924, 2925, 1368, - 2865, 3113, 2840, 2949, 1368, 2842, 2562, 1365, 2845, 1366, - 1367, 3032, 3033, 3034, 2838, 3036, 3038, 2978, 3469, 1368, - 3280, 3542, 2620, 1368, 1582, 3083, 2425, 2969, 1977, 3045, - 2977, 2948, 1406, 1368, 3049, 3050, 3051, 3053, 3054, 3055, - 3056, 2234, 2984, 3057, 2168, 3059, 3060, 3061, 3255, 1926, - 3065, 3066, 3067, 3068, 3069, 3070, 3071, 3072, 3073, 3074, - 699, 698, 680, 696, 2548, 2576, 1371, 2494, 3081, 1368, - 3008, 3085, 846, 3086, 3088, 3009, 3091, 3093, 2536, 3095, - 3096, 3097, 3098, 2493, 3017, 3016, 1594, 3104, 2492, 2587, - 2585, 200, 3026, 2584, 2372, 3078, 2176, 3137, 3023, 3024, - 3133, 3025, 3082, 2491, 3027, 1368, 3029, 2485, 3031, 3585, - 2601, 3001, 3002, 3003, 2170, 3005, 3006, 2484, 1365, 2166, - 1366, 1367, 3126, 3127, 2554, 797, 3131, 796, 708, 700, - 692, 1368, 795, 794, 1365, 1368, 1366, 1367, 3151, 1365, - 1368, 1366, 1367, 2976, 3569, 2694, 2990, 200, 2696, 2621, - 2986, 1368, 1348, 2483, 1365, 1368, 1366, 1367, 1365, 3107, - 1366, 1367, 1368, 1558, 686, 1369, 983, 3018, 1365, 3493, - 1366, 1367, 3102, 3103, 3105, 2399, 200, 1368, 3041, 1557, - 2007, 3110, 2008, 3117, 2650, 3500, 2958, 1566, 1562, 2480, - 3204, 2939, 3132, 2670, 1424, 3122, 200, 2262, 72, 200, - 200, 200, 1563, 1368, 1365, 2171, 1366, 1367, 3142, 680, - 680, 3146, 3147, 3193, 3194, 2479, 3139, 1368, 47, 2478, - 3464, 3144, 3530, 3145, 2476, 793, 790, 1559, 1560, 1565, - 3152, 1564, 3208, 3153, 2978, 2472, 3257, 3258, 3259, 2471, - 1365, 2802, 1366, 1367, 3214, 3215, 2467, 2977, 2803, 3513, - 2699, 2700, 2701, 2702, 2703, 3514, 680, 680, 680, 680, - 789, 2465, 3515, 3163, 3164, 3169, 1365, 3171, 1366, 1367, - 1365, 2035, 1366, 1367, 1344, 1365, 1341, 1366, 1367, 3227, - 3606, 1901, 3231, 98, 38, 37, 1365, 2430, 1366, 1367, - 1365, 36, 1366, 1367, 35, 34, 28, 1365, 27, 1366, - 1367, 2419, 26, 25, 24, 21, 1914, 2718, 20, 3242, - 31, 23, 1365, 3216, 1366, 1367, 3197, 22, 19, 18, - 3201, 3202, 3203, 2961, 3246, 3626, 3667, 128, 3236, 56, - 53, 51, 2726, 136, 135, 54, 3254, 50, 1365, 1099, - 1366, 1367, 48, 33, 3261, 32, 17, 16, 15, 14, - 13, 12, 1365, 11, 1366, 1367, 7, 6, 2588, 2591, - 2592, 2593, 2589, 41, 2590, 2594, 40, 200, 3135, 3136, - 30, 39, 29, 3232, 4, 2657, 2264, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1411, 0, 0, 3275, - 3244, 680, 0, 680, 0, 3253, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1962, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1584, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3285, 2860, 0, 3298, 3300, 2860, 3276, 0, 3284, - 3292, 3294, 0, 0, 0, 0, 3296, 0, 43, 0, - 0, 0, 857, 680, 0, 89, 1674, 3390, 2857, 0, - 0, 0, 0, 0, 0, 3403, 200, 0, 3308, 680, - 3305, 3306, 0, 0, 3410, 0, 0, 0, 195, 0, - 0, 0, 680, 0, 0, 1960, 0, 3304, 0, 0, - 0, 0, 0, 0, 3420, 3421, 0, 3423, 0, 3424, - 3425, 3387, 134, 3394, 3428, 3429, 3430, 3402, 3432, 3435, - 3385, 0, 3386, 0, 0, 177, 1962, 3407, 0, 3406, - 3414, 0, 0, 0, 3444, 3446, 3447, 3449, 3451, 3452, - 3454, 0, 680, 0, 3011, 3012, 680, 680, 0, 0, - 921, 0, 89, 3433, 3434, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3397, 3398, 3399, 0, 3438, 0, - 0, 921, 0, 0, 0, 680, 3440, 0, 3484, 3480, - 3443, 174, 0, 0, 175, 0, 0, 0, 0, 982, - 0, 0, 3462, 3459, 3460, 0, 0, 3479, 2935, 1852, - 3461, 0, 0, 0, 1960, 0, 3437, 194, 0, 0, - 3477, 0, 2860, 0, 0, 0, 0, 0, 3483, 0, - 0, 3468, 0, 0, 2973, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2985, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 680, 0, 0, 0, 3485, 0, - 0, 0, 3007, 0, 0, 3010, 0, 0, 0, 0, - 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 680, 200, - 0, 0, 3504, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3509, 0, 0, 0, 0, 0, - 3492, 3496, 0, 0, 3499, 0, 0, 0, 0, 0, - 178, 0, 0, 0, 3525, 0, 0, 0, 0, 184, - 3526, 3527, 0, 841, 0, 0, 0, 0, 0, 680, - 3501, 0, 43, 0, 3519, 0, 0, 3520, 0, 1411, - 0, 680, 3538, 0, 0, 0, 0, 0, 0, 0, - 3528, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3508, 3106, 680, 680, 0, 3563, 3564, - 3540, 3518, 0, 0, 0, 0, 3545, 0, 3535, 0, - 3570, 0, 3573, 3575, 3577, 3571, 3556, 680, 659, 3548, - 0, 3553, 3550, 3549, 679, 3547, 0, 0, 3552, 3551, - 0, 200, 680, 3414, 3558, 0, 3543, 3605, 43, 0, - 0, 2857, 3581, 0, 0, 0, 0, 0, 0, 0, - 3602, 3592, 3597, 3584, 0, 0, 0, 0, 0, 0, - 0, 3570, 0, 0, 3611, 0, 3571, 3609, 1921, 1922, - 1923, 1924, 0, 0, 0, 680, 3622, 679, 169, 3167, - 679, 0, 0, 0, 0, 0, 0, 3620, 0, 0, - 0, 3625, 0, 0, 0, 0, 0, 680, 0, 3182, - 0, 3638, 3183, 3184, 3185, 0, 0, 0, 3643, 3645, - 3647, 0, 3640, 1419, 680, 0, 680, 1968, 1969, 0, - 1962, 0, 1971, 0, 948, 948, 1976, 3651, 3655, 3653, - 1981, 3649, 3648, 0, 0, 0, 0, 3570, 0, 3666, - 3663, 0, 3571, 1994, 1995, 1996, 1997, 1998, 1999, 2000, - 2001, 2002, 2003, 3677, 3675, 3678, 3679, 2029, 2030, 2031, - 2032, 2033, 2034, 2036, 3669, 2041, 0, 2043, 2044, 2045, - 0, 2047, 2048, 2049, 1962, 2055, 2056, 2057, 2058, 2059, - 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, - 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 1960, 2079, - 3652, 2086, 2087, 948, 3685, 948, 948, 948, 948, 948, - 3686, 3687, 3434, 0, 0, 2099, 2100, 2101, 2102, 2103, - 2104, 2105, 2106, 0, 2108, 2109, 2110, 2111, 2112, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1960, 0, 3684, 0, 0, 0, 170, 0, - 0, 0, 948, 0, 0, 182, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2149, 2150, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, - 2188, 0, 88, 45, 46, 90, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 94, 0, 0, 0, 49, 79, 80, 0, - 77, 81, 1168, 0, 1168, 1168, 0, 0, 0, 78, - 0, 171, 176, 173, 179, 180, 181, 183, 185, 186, - 187, 188, 0, 0, 0, 0, 0, 189, 191, 192, - 193, 2230, 0, 0, 0, 0, 0, 0, 65, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 97, 0, 921, 1408, 1413, 1414, 0, 1417, 0, 1418, - 1420, 1421, 1422, 0, 1425, 1426, 1428, 1428, 0, 1428, - 1432, 1432, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, - 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, - 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, - 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, - 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, - 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, - 1492, 1493, 1494, 1495, 1496, 1497, 1498, 0, 0, 0, - 0, 1499, 0, 1501, 1502, 1503, 1504, 1505, 0, 0, - 0, 0, 0, 0, 0, 0, 1432, 1432, 1432, 1432, - 1432, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, - 1521, 1522, 1523, 1524, 0, 0, 0, 0, 52, 55, - 58, 57, 60, 0, 76, 0, 0, 85, 63, 82, - 0, 1538, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, - 0, 0, 64, 93, 92, 0, 0, 74, 75, 59, - 0, 0, 0, 0, 0, 83, 84, 0, 0, 0, - 0, 0, 3505, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1544, 195, 0, 0, 0, 0, - 921, 0, 0, 0, 921, 0, 1691, 0, 0, 921, - 0, 0, 0, 679, 1327, 679, 679, 0, 0, 134, - 0, 156, 66, 67, 0, 68, 69, 70, 71, 0, - 0, 0, 177, 0, 0, 679, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 167, 1410, 0, 0, 0, 0, 155, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2428, 0, 0, 0, 0, 174, 0, - 0, 175, 0, 0, 2435, 2436, 2437, 2438, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1695, 1696, 166, 165, 194, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1424, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1410, 0, 0, 0, - 0, 0, 0, 160, 1697, 163, 0, 1694, 0, 161, - 162, 0, 0, 0, 0, 0, 0, 178, 96, 0, - 0, 0, 0, 0, 0, 1168, 184, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1584, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 679, 679, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1666, 0, - 0, 0, 0, 0, 73, 0, 0, 0, 62, 1677, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 679, 0, 1703, 169, 0, 0, 798, 0, - 0, 0, 1712, 0, 0, 1410, 1714, 0, 0, 1717, - 1718, 679, 679, 0, 679, 0, 679, 679, 0, 679, - 679, 679, 679, 679, 679, 0, 0, 0, 0, 0, - 0, 0, 1410, 1749, 1750, 1410, 679, 1410, 0, 1755, - 1168, 1168, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 89, 0, 0, 89, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 678, - 0, 679, 195, 0, 0, 0, 0, 0, 0, 0, - 0, 164, 0, 0, 0, 0, 1834, 0, 0, 679, - 0, 0, 0, 0, 0, 0, 134, 0, 156, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 973, 0, 0, 981, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2730, 679, 0, 0, 0, - 167, 0, 157, 0, 0, 158, 155, 0, 0, 0, - 0, 0, 0, 0, 948, 0, 0, 2754, 2755, 0, - 0, 2757, 0, 0, 2759, 174, 0, 0, 175, 0, - 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, - 0, 0, 182, 0, 2766, 2767, 2768, 143, 144, 166, - 165, 194, 0, 0, 0, 0, 2773, 0, 0, 2775, - 2776, 2777, 0, 0, 0, 2778, 2779, 0, 0, 2055, - 2781, 0, 0, 2783, 0, 0, 2785, 2786, 2787, 2788, - 0, 0, 0, 190, 2789, 2055, 2055, 2055, 2055, 2055, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 948, 0, 0, 0, 0, 0, 0, - 2812, 2813, 2814, 2815, 2816, 2817, 0, 0, 0, 2818, - 2819, 0, 2820, 0, 2821, 0, 0, 0, 171, 176, + 188, 1822, 1928, 1930, 1931, 1021, 189, 191, 192, 193, + 2286, 2293, 681, 2354, 2350, 2352, 2353, 2351, 2357, 2358, + 2291, 2289, 2355, 2356, 2290, 1412, 1929, 1021, 3686, 1987, + 1032, 681, 681, 1537, 681, 1555, 681, 681, 106, 681, + 681, 681, 681, 681, 681, 1556, 1938, 1030, 107, 2288, + 3639, 1115, 1412, 1157, 3153, 1412, 681, 1412, 200, 1543, + 1939, 1397, 1398, 1937, 932, 1530, 1507, 1508, 1509, 1510, + 1511, 1145, 1856, 1807, 1098, 1020, 3537, 3229, 200, 3230, + 109, 1014, 1017, 1018, 1366, 977, 1367, 1368, 3680, 1011, + 1015, 681, 3475, 200, 1684, 1685, 1686, 1714, 169, 1389, + 1390, 1391, 1392, 1394, 1393, 1395, 1396, 3405, 1020, 681, + 1010, 200, 1796, 1024, 1014, 3687, 1700, 1571, 1026, 1771, + 3404, 3538, 1027, 1025, 1749, 1145, 1369, 1752, 3395, 1754, + 1020, 200, 1057, 918, 1540, 1794, 1054, 3476, 200, 1693, + 1574, 920, 3245, 1028, 2404, 2405, 2406, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 681, 2086, 1712, 3244, + 1753, 1761, 1762, 1598, 1599, 1552, 3177, 1767, 1768, 862, + 863, 864, 3176, 1722, 3166, 1723, 1795, 1725, 1727, 1783, + 2740, 1731, 1733, 1735, 1737, 1739, 1710, 1710, 1711, 2944, + 1676, 2325, 2321, 2323, 2324, 2322, 2328, 2329, 1021, 1793, + 2326, 2327, 1369, 2932, 2635, 2634, 125, 1691, 2633, 2246, + 1703, 1690, 1689, 2426, 1842, 1825, 1797, 1823, 1824, 1781, + 1828, 1829, 1780, 122, 1826, 1827, 1779, 1769, 1763, 1859, + 1391, 1392, 1394, 1393, 1395, 1396, 1863, 1757, 1865, 1866, + 1867, 1868, 1760, 1782, 1759, 1872, 1373, 1374, 1375, 1376, + 1377, 1378, 1379, 1371, 1857, 1858, 1758, 1884, 1885, 1729, + 1887, 1366, 1369, 1367, 1368, 2742, 1838, 195, 1862, 1113, + 2761, 1112, 1569, 1369, 2994, 1869, 1870, 1871, 170, 1985, + 1333, 3041, 670, 1682, 123, 182, 2425, 1810, 1986, 1808, + 1809, 134, 1813, 1814, 1601, 133, 1811, 1812, 3160, 670, + 997, 1020, 996, 995, 177, 3640, 1024, 1014, 2086, 2617, + 670, 1026, 2083, 2262, 2261, 1027, 1025, 2260, 2259, 2258, + 2257, 2085, 1578, 1861, 3502, 112, 190, 2561, 3665, 3627, + 1569, 681, 681, 1365, 1569, 857, 111, 1366, 110, 1367, + 1368, 2752, 2751, 2750, 681, 1883, 2744, 1569, 2748, 1882, + 2743, 2466, 2741, 200, 2561, 3565, 124, 2746, 1569, 103, + 174, 1365, 1569, 175, 3501, 1369, 2745, 3479, 1579, 3478, + 104, 171, 176, 173, 179, 180, 181, 183, 185, 186, + 187, 188, 2561, 3545, 2747, 2749, 194, 189, 191, 192, + 193, 2561, 3541, 3528, 1569, 43, 3477, 1366, 43, 1367, + 1368, 3400, 681, 3384, 1963, 1963, 1569, 1569, 1366, 3383, + 1367, 1368, 1412, 1387, 1388, 1389, 1390, 1391, 1392, 1394, + 1393, 1395, 1396, 681, 3294, 1569, 3495, 1934, 3292, 1412, + 1983, 3213, 3492, 1941, 1984, 1943, 1944, 1945, 1946, 1947, + 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 3241, 3650, + 1569, 3408, 1569, 3431, 681, 681, 1386, 1387, 1388, 1389, + 1390, 1391, 1392, 1394, 1393, 1395, 1396, 112, 2047, 1535, + 103, 1534, 1536, 1533, 1942, 1932, 3174, 105, 111, 3159, + 110, 104, 1961, 1961, 1410, 1964, 2561, 3396, 3430, 105, + 3213, 1569, 2561, 3211, 2286, 1569, 2079, 3008, 1369, 178, + 1366, 1981, 1367, 1368, 2094, 3132, 1569, 1369, 184, 2477, + 1569, 97, 3006, 3003, 2043, 3000, 2935, 2934, 2925, 2924, + 1369, 2108, 2154, 2155, 1894, 1895, 2922, 2923, 1369, 2713, + 1537, 1935, 1385, 2041, 2734, 1911, 1569, 87, 1570, 2115, + 87, 2644, 2091, 2052, 2631, 1369, 1532, 200, 1569, 2920, + 2921, 2920, 2919, 681, 2308, 1386, 1387, 1388, 1389, 1390, + 1391, 1392, 1394, 1393, 1395, 1396, 2307, 2456, 2144, 1940, + 2585, 1569, 2138, 2398, 2693, 2557, 200, 1672, 2674, 681, + 2128, 2133, 105, 2134, 2667, 2668, 2082, 2127, 1369, 200, + 105, 3648, 1569, 681, 1890, 1967, 2094, 200, 1852, 200, + 1369, 200, 200, 1792, 3582, 1569, 1369, 2093, 1974, 1976, + 1784, 2116, 3580, 1569, 2606, 1774, 681, 2052, 2561, 2560, + 2422, 1569, 2096, 2097, 1966, 1569, 3388, 2200, 1770, 1991, + 1992, 1993, 1994, 1366, 2091, 1367, 1368, 2606, 169, 1369, + 1766, 1569, 1366, 2005, 1367, 1368, 1765, 1764, 2422, 1580, + 106, 2172, 1672, 1671, 3387, 1366, 2092, 1367, 1368, 1160, + 107, 1613, 1612, 1366, 1159, 1367, 1368, 2577, 3221, 2671, + 1369, 106, 3578, 1569, 2649, 681, 2247, 2607, 2137, 1369, + 1366, 107, 1367, 1368, 3454, 1569, 2199, 2609, 1582, 2095, + 3452, 1569, 2098, 2099, 2287, 3127, 2857, 2577, 1365, 2093, + 2607, 2887, 681, 2209, 2210, 2211, 2212, 3127, 681, 3129, + 2398, 2398, 2204, 3533, 2205, 2206, 2207, 2208, 1369, 3506, + 2195, 2194, 2176, 1366, 3641, 1367, 1368, 933, 2584, 2114, + 2215, 2216, 2217, 2218, 2126, 1366, 2561, 1367, 1368, 2585, + 2585, 1366, 111, 1367, 1368, 1369, 2136, 3088, 2159, 2275, + 1369, 2922, 2286, 2198, 1581, 681, 2830, 2183, 2139, 2422, + 681, 2477, 2229, 3426, 681, 681, 2235, 1369, 1385, 3127, + 2411, 2157, 2417, 2453, 1366, 3178, 1367, 1368, 967, 2452, + 966, 2182, 2181, 2585, 2180, 2286, 2269, 2152, 1369, 2197, + 2196, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1394, 1393, + 1395, 1396, 200, 3490, 1573, 1366, 2272, 1367, 1368, 200, + 2245, 1365, 2117, 1966, 1366, 1369, 1367, 1368, 170, 1912, + 1896, 1832, 1600, 125, 1005, 182, 3179, 3180, 3181, 3449, + 1569, 3608, 2230, 1004, 2029, 200, 200, 3548, 2226, 200, + 3419, 200, 2219, 2221, 2222, 2280, 2244, 200, 2283, 2248, + 2284, 3435, 1569, 1366, 2256, 1367, 1368, 200, 1576, 2300, + 3385, 3306, 3194, 3191, 200, 1022, 190, 1023, 3172, 2230, + 2279, 2996, 3103, 1569, 2278, 3051, 3050, 1710, 2282, 1674, + 1366, 2228, 1367, 1368, 2301, 1366, 2304, 1367, 1368, 2992, + 2305, 2306, 2949, 2945, 200, 2675, 2225, 2220, 2947, 3096, + 1569, 97, 1366, 681, 1367, 1368, 2214, 2213, 1799, 1705, + 1745, 171, 176, 173, 179, 180, 181, 183, 185, 186, + 187, 188, 2311, 1366, 1701, 1367, 1368, 189, 191, 192, + 193, 2021, 2010, 2011, 2012, 2013, 2023, 2014, 2015, 2016, + 2028, 2024, 2017, 2018, 2025, 2026, 2027, 2019, 2020, 2022, + 1366, 1668, 1367, 1368, 126, 2641, 1097, 3139, 3140, 2382, + 2383, 1746, 1747, 1748, 2385, 3420, 2243, 2131, 2415, 1412, + 3660, 2094, 2420, 2386, 1369, 2423, 2640, 2424, 3182, 3658, + 3634, 1369, 2431, 3514, 1934, 2464, 2433, 2434, 2435, 2408, + 1385, 2410, 3440, 3142, 2941, 2372, 2441, 2442, 2443, 2444, + 2445, 2446, 2447, 2448, 2449, 2450, 2378, 1369, 1892, 2416, + 2940, 2939, 2468, 1386, 1387, 1388, 1389, 1390, 1391, 1392, + 1394, 1393, 1395, 1396, 2641, 3183, 3184, 3185, 2857, 2654, + 2409, 2373, 2457, 2458, 2459, 2460, 2461, 1369, 2463, 2879, + 3145, 2414, 2465, 2877, 2880, 1369, 2470, 2471, 2878, 2472, + 3144, 2876, 2475, 2875, 2476, 2419, 2388, 1741, 2479, 1569, + 2436, 2881, 2483, 2594, 2595, 2418, 2488, 2489, 2490, 2491, + 1893, 2396, 3510, 3421, 2093, 2143, 3276, 2451, 3275, 2502, + 1577, 2505, 2506, 2135, 2847, 2849, 3474, 3133, 1935, 2508, + 2510, 3093, 1569, 2850, 1369, 2835, 2513, 2514, 2515, 2516, + 2517, 2407, 1369, 2834, 1742, 1743, 1744, 2524, 2525, 1366, + 2526, 1367, 1368, 2529, 2531, 2138, 1366, 2533, 1367, 1368, + 200, 3091, 1569, 2092, 3120, 1369, 3274, 2545, 200, 3056, + 1569, 1385, 3119, 1963, 1381, 2428, 1382, 1369, 681, 3285, + 3287, 1369, 1366, 3123, 1367, 1368, 2844, 1831, 909, 681, + 1383, 1397, 1398, 1380, 1386, 1387, 1388, 1389, 1390, 1391, + 1392, 1394, 1393, 1395, 1396, 2918, 1369, 2624, 1385, 2544, + 2645, 1369, 1366, 200, 1367, 1368, 1061, 937, 200, 3392, + 1366, 1060, 1367, 1368, 3017, 938, 3039, 1569, 1989, 2640, + 2462, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1394, 1393, + 1395, 1396, 1990, 2728, 103, 1332, 3672, 2681, 134, 2532, + 1569, 1961, 1369, 2546, 43, 104, 691, 2547, 3125, 2549, + 2581, 2562, 3196, 2599, 105, 3147, 2601, 1369, 2937, 1366, + 2376, 1367, 1368, 1369, 2154, 2155, 3587, 1366, 3491, 1367, + 1368, 2590, 2593, 2594, 2595, 2591, 681, 2592, 2596, 2365, + 2530, 1569, 200, 2558, 3415, 2509, 1569, 2600, 1369, 200, + 1366, 2571, 1367, 1368, 2917, 2598, 1543, 1369, 2140, 2364, + 2534, 1369, 1366, 681, 1367, 1368, 1366, 2666, 1367, 1368, + 681, 1537, 2627, 2629, 945, 946, 2833, 3105, 1369, 681, + 2363, 2559, 2554, 2362, 2832, 1369, 3098, 2574, 2604, 2361, + 2360, 1366, 2620, 1367, 1368, 1412, 1366, 1369, 1367, 1368, + 2359, 2492, 1569, 1369, 2349, 2402, 2690, 3094, 200, 200, + 200, 200, 200, 2348, 2347, 2608, 2346, 943, 2235, 2611, + 949, 949, 2643, 1369, 103, 2621, 2345, 2646, 2647, 2618, + 1369, 105, 2484, 1569, 2344, 104, 2336, 1366, 2335, 1367, + 1368, 3066, 2632, 2577, 2334, 3062, 2333, 2332, 2331, 2330, + 110, 3462, 1366, 1369, 1367, 1368, 3461, 3443, 1366, 2642, + 1367, 1368, 3048, 1369, 3293, 200, 200, 2688, 3291, 3047, + 3290, 112, 3283, 3192, 2650, 3124, 2655, 2656, 2657, 1369, + 2651, 3044, 111, 1366, 110, 1367, 1368, 1369, 2636, 2687, + 3122, 200, 1366, 1693, 1367, 1368, 1366, 1369, 1367, 1368, + 2950, 2270, 1688, 3282, 944, 111, 112, 2528, 3113, 3264, + 2676, 2677, 681, 1366, 2527, 1367, 1368, 111, 1369, 2557, + 1366, 2686, 1367, 1368, 3662, 3661, 3661, 2763, 2764, 2765, + 2766, 2767, 1366, 2775, 1367, 1368, 2454, 2523, 1366, 2129, + 1367, 1368, 1594, 1586, 116, 117, 2772, 2522, 3662, 3480, + 3158, 2711, 935, 125, 2738, 3, 99, 2712, 1366, 681, + 1367, 1368, 1, 2521, 2714, 1366, 1909, 1367, 1368, 10, + 1110, 2520, 2753, 2716, 1907, 1908, 1843, 9, 8, 1335, + 2717, 2519, 1334, 2755, 3162, 2720, 2768, 3597, 1366, 638, + 1367, 1368, 2118, 2737, 1541, 3635, 3593, 681, 1366, 112, + 1367, 1368, 2518, 3594, 2736, 681, 2726, 1785, 1775, 2727, + 111, 3224, 110, 2053, 1366, 1369, 1367, 1368, 3416, 2953, + 1369, 105, 1366, 2276, 1367, 1368, 3190, 2233, 1013, 159, + 2192, 2193, 1366, 2756, 1367, 1368, 681, 3561, 2754, 2809, + 120, 970, 2785, 2814, 2787, 119, 1016, 2811, 1129, 2271, + 200, 3214, 2625, 1366, 681, 1367, 1368, 2201, 1619, 1617, + 2798, 2799, 2800, 2801, 1618, 1616, 1621, 1620, 681, 1567, + 1563, 3025, 1412, 2866, 2455, 681, 681, 1412, 200, 200, + 200, 200, 200, 3067, 1564, 2777, 2082, 1900, 2082, 677, + 200, 2884, 2783, 2854, 2597, 671, 200, 197, 200, 2507, + 2172, 200, 200, 200, 2501, 1608, 2814, 1587, 3080, 1669, + 1670, 1566, 2869, 1565, 1055, 628, 2926, 2863, 2886, 2810, + 2813, 2812, 2309, 634, 2837, 924, 1417, 1891, 2172, 2172, + 2172, 2172, 2172, 2831, 2838, 2793, 2794, 2795, 2796, 2797, + 2612, 964, 956, 2130, 2860, 2548, 2825, 200, 2172, 2860, + 1366, 2172, 1367, 1368, 963, 1366, 3393, 1367, 1368, 2865, + 681, 2836, 3117, 1412, 2839, 2843, 2845, 2564, 681, 2851, + 2852, 2848, 2973, 200, 2841, 3473, 3284, 2829, 3546, 1567, + 1563, 2622, 2888, 925, 1583, 2889, 3087, 200, 2871, 2872, + 2870, 2874, 926, 2873, 1564, 2427, 2882, 1978, 1407, 2826, + 2827, 2828, 2169, 106, 3259, 1927, 1842, 2890, 700, 699, + 1369, 697, 200, 107, 1369, 200, 2550, 2868, 2896, 1560, + 1561, 1566, 2578, 1565, 3019, 1372, 2930, 2931, 847, 2538, + 2929, 2927, 2928, 1595, 2589, 2952, 2587, 1369, 2586, 2374, + 2177, 3141, 3137, 2981, 3036, 3037, 3038, 3589, 3040, 3042, + 2171, 2167, 2556, 798, 797, 709, 1369, 701, 693, 2235, + 796, 2980, 3049, 2972, 2951, 795, 3155, 3053, 3054, 3055, + 3057, 3058, 3059, 3060, 2987, 2979, 3061, 3573, 3063, 3064, + 3065, 2900, 2696, 3069, 3070, 3071, 3072, 3073, 3074, 3075, + 3076, 3077, 3078, 2993, 2500, 681, 2698, 2623, 2499, 2989, + 3012, 3085, 1349, 1559, 3089, 3013, 3090, 3092, 687, 3095, + 3097, 984, 3099, 3100, 3101, 3102, 3021, 3022, 3015, 3016, + 3108, 2498, 3027, 3028, 200, 3029, 2901, 3020, 3031, 3497, + 3033, 3030, 3035, 3004, 3005, 1369, 3007, 3082, 3009, 3010, + 2497, 2401, 3045, 1558, 3086, 1366, 2008, 1367, 1368, 1366, + 2903, 1367, 1368, 2009, 3504, 3130, 3131, 2961, 3208, 3135, + 2942, 2672, 2263, 72, 1369, 47, 3468, 3534, 2898, 794, + 791, 3261, 1366, 3262, 1367, 1368, 3263, 2805, 2806, 3517, + 200, 3518, 790, 1369, 3519, 2914, 2915, 1369, 2036, 1345, + 1342, 1366, 2899, 1367, 1368, 3610, 1369, 1902, 98, 1370, + 1369, 38, 37, 36, 35, 3111, 34, 28, 3109, 200, + 3106, 3107, 27, 26, 25, 3121, 24, 3114, 21, 2496, + 20, 31, 23, 22, 19, 2905, 1369, 18, 1425, 200, + 2172, 3126, 200, 200, 200, 2964, 3630, 3671, 3136, 1369, + 128, 3146, 681, 681, 3143, 1369, 3197, 3198, 2495, 56, + 53, 51, 1369, 136, 3148, 135, 1369, 3150, 3151, 54, + 50, 2981, 1100, 3156, 3149, 3212, 3157, 2494, 1369, 48, + 1366, 2493, 1367, 1368, 33, 1369, 32, 3218, 3219, 2980, + 2487, 1369, 17, 16, 2486, 15, 3173, 14, 3175, 681, + 681, 681, 681, 13, 2913, 1369, 3167, 3168, 12, 1366, + 1369, 1367, 1368, 11, 7, 6, 2916, 41, 1369, 40, + 2485, 30, 39, 3231, 29, 4, 3235, 2659, 1366, 2265, + 1367, 1368, 1366, 2482, 1367, 1368, 0, 0, 0, 2481, + 0, 1366, 0, 1367, 1368, 1366, 2480, 1367, 1368, 0, + 2478, 0, 0, 3246, 0, 0, 3220, 0, 0, 3201, + 0, 0, 2474, 3205, 3206, 3207, 0, 0, 3250, 2473, + 0, 1366, 3240, 1367, 1368, 2469, 0, 0, 0, 0, + 3258, 0, 0, 0, 1366, 0, 1367, 1368, 3265, 2467, + 1366, 0, 1367, 1368, 2432, 0, 0, 1366, 0, 1367, + 1368, 1366, 2421, 1367, 1368, 3236, 0, 0, 0, 0, + 0, 200, 0, 1366, 0, 1367, 1368, 0, 0, 0, + 1366, 0, 1367, 1368, 0, 0, 1366, 0, 1367, 1368, + 1412, 0, 3257, 3279, 3248, 681, 0, 681, 2902, 0, + 1366, 0, 1367, 1368, 0, 1366, 0, 1367, 1368, 0, + 0, 1963, 0, 1366, 0, 1367, 1368, 0, 0, 0, + 0, 1585, 0, 0, 1544, 0, 0, 0, 858, 0, + 0, 89, 0, 0, 0, 3302, 2863, 0, 3280, 0, + 2863, 3304, 0, 3289, 43, 0, 3288, 3298, 3296, 0, + 3300, 0, 0, 0, 0, 0, 0, 681, 0, 0, + 1675, 3394, 2860, 0, 0, 0, 0, 0, 0, 3407, + 200, 0, 0, 681, 0, 3312, 0, 0, 3414, 0, + 0, 0, 0, 0, 615, 0, 681, 3309, 3310, 1961, + 0, 3308, 0, 0, 0, 0, 0, 0, 3424, 3425, + 0, 3427, 0, 3428, 3429, 3390, 912, 3398, 3432, 3433, + 3434, 3406, 3436, 3439, 3389, 0, 922, 3391, 89, 0, + 1963, 3411, 0, 3410, 3418, 0, 0, 0, 3448, 3450, + 3451, 3453, 3455, 3456, 3458, 0, 681, 922, 0, 0, + 681, 681, 0, 0, 0, 0, 0, 3437, 3438, 978, + 0, 0, 0, 0, 0, 983, 0, 0, 3401, 3402, + 3403, 0, 0, 0, 3442, 0, 0, 0, 0, 681, + 3444, 0, 3488, 3484, 3447, 0, 0, 0, 0, 0, + 0, 2906, 0, 0, 0, 2910, 3466, 3463, 3464, 0, + 0, 3483, 2909, 1853, 3465, 0, 0, 0, 1961, 0, + 3441, 3481, 0, 0, 0, 0, 2863, 0, 0, 0, + 0, 0, 0, 0, 3487, 3472, 0, 2590, 2593, 2594, + 2595, 2591, 0, 2592, 2596, 0, 2911, 3139, 3140, 0, + 0, 2907, 0, 0, 0, 0, 2908, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 681, 0, + 0, 0, 3489, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 681, 200, 0, 0, 3508, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3513, 0, + 0, 0, 0, 0, 3496, 3500, 0, 0, 3503, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3529, 0, + 0, 0, 0, 0, 3530, 3531, 0, 0, 43, 0, + 0, 0, 0, 681, 3505, 0, 0, 0, 0, 0, + 0, 0, 0, 1412, 0, 681, 3542, 3523, 0, 0, + 3524, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3532, 0, 3512, 0, 681, + 681, 0, 3567, 3568, 3544, 3522, 0, 0, 3539, 0, + 3549, 0, 0, 0, 3574, 0, 3577, 3579, 3581, 3575, + 3560, 681, 3552, 3557, 0, 3554, 3553, 3551, 3556, 3555, + 0, 0, 0, 0, 43, 200, 681, 3418, 3562, 0, + 3547, 3609, 0, 0, 0, 2860, 3585, 0, 0, 0, + 0, 0, 0, 0, 3606, 3596, 3601, 3588, 0, 0, + 0, 0, 0, 0, 0, 3574, 0, 0, 3615, 0, + 3575, 3613, 1922, 1923, 1924, 1925, 0, 0, 0, 681, + 3626, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3624, 0, 0, 0, 3629, 0, 0, 0, 0, + 0, 681, 0, 0, 0, 3642, 0, 0, 0, 0, + 0, 0, 3647, 3649, 3651, 0, 3644, 1420, 681, 0, + 681, 1969, 1970, 0, 1963, 0, 1972, 0, 949, 949, + 1977, 3655, 3659, 3657, 1982, 3653, 3652, 0, 0, 0, + 0, 3574, 0, 3670, 3667, 0, 3575, 1995, 1996, 1997, + 1998, 1999, 2000, 2001, 2002, 2003, 2004, 3681, 3679, 3682, + 3683, 2030, 2031, 2032, 2033, 2034, 2035, 2037, 3673, 2042, + 0, 2044, 2045, 2046, 0, 2048, 2049, 2050, 1963, 2056, + 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, + 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, + 2077, 2078, 1961, 2080, 3656, 2087, 2088, 949, 3689, 949, + 949, 949, 949, 949, 3690, 3691, 3438, 0, 0, 2100, + 2101, 2102, 2103, 2104, 2105, 2106, 2107, 0, 2109, 2110, + 2111, 2112, 2113, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1961, 0, 3688, 0, + 0, 0, 0, 0, 0, 0, 949, 1101, 0, 1107, + 0, 0, 1109, 1111, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2150, 2151, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2189, 0, 0, 0, 0, 1169, + 0, 1169, 1169, 0, 3628, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1636, 0, 0, 0, 1341, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 922, + 1409, 1414, 1415, 0, 1418, 2231, 1419, 1421, 1422, 1423, + 0, 1426, 1427, 1429, 1429, 0, 1429, 1433, 1433, 1435, + 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, + 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, + 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, + 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, + 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, + 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, + 1496, 1497, 1498, 1499, 0, 0, 0, 0, 1500, 0, + 1502, 1503, 1504, 1505, 1506, 0, 0, 0, 0, 0, + 0, 0, 0, 1433, 1433, 1433, 1433, 1433, 1624, 0, + 0, 0, 0, 0, 0, 0, 0, 1512, 1513, 1514, + 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, + 1525, 3330, 3332, 3331, 3349, 3350, 3351, 3352, 3353, 3354, + 3355, 748, 0, 0, 0, 0, 0, 0, 1539, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1637, 0, 0, 0, 0, 0, 0, + 0, 1545, 0, 0, 0, 0, 0, 922, 0, 0, + 0, 922, 0, 0, 0, 0, 922, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1597, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1614, 0, 0, 0, + 0, 1650, 1653, 1654, 1655, 1656, 1657, 1658, 842, 1659, + 1660, 1662, 1663, 1661, 1664, 1665, 1638, 1639, 1640, 1641, + 1622, 1623, 1651, 0, 1625, 0, 1626, 1627, 1628, 1629, + 1630, 1631, 1632, 1633, 1634, 0, 0, 1635, 1642, 1643, + 1644, 1645, 0, 1646, 1647, 1648, 1649, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2430, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2437, 2438, + 2439, 2440, 0, 660, 0, 0, 0, 0, 0, 680, + 1755, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3336, 1425, 0, 1800, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3344, 3345, 0, + 0, 0, 680, 0, 0, 680, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1860, 0, 0, 0, 0, 0, 0, + 1864, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 0, 0, + 0, 0, 1169, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1652, 0, 814, 0, 727, + 818, 729, 815, 816, 0, 725, 728, 817, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1585, + 0, 0, 0, 746, 747, 3329, 3333, 3334, 3335, 3346, + 3347, 3348, 3356, 3358, 779, 3357, 3359, 3360, 3361, 3364, + 3365, 3366, 3367, 3362, 3363, 3368, 3313, 3317, 3314, 3315, + 3316, 3328, 3318, 3319, 3320, 3321, 3322, 3323, 3324, 3325, + 3326, 3327, 3369, 3370, 3371, 3372, 3373, 3374, 3339, 3343, + 3342, 3340, 3341, 3337, 3338, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 819, 0, 820, + 0, 0, 824, 0, 0, 0, 826, 825, 0, 827, + 793, 792, 0, 0, 821, 822, 0, 823, 97, 0, + 0, 860, 0, 0, 0, 848, 861, 862, 863, 864, + 849, 0, 0, 850, 851, 0, 852, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 857, 865, 866, 0, 0, 0, 0, 1169, 1169, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 89, 0, 0, 89, 1915, 0, 0, 0, 0, + 0, 0, 3375, 3376, 3377, 3378, 3379, 3380, 3381, 3382, + 0, 0, 0, 0, 0, 0, 0, 2982, 2983, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 867, + 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, + 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, + 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, + 908, 0, 0, 0, 0, 0, 0, 0, 88, 45, + 46, 90, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, + 2733, 0, 49, 79, 80, 0, 77, 81, 0, 0, + 0, 0, 0, 2984, 0, 78, 0, 0, 0, 949, + 0, 0, 2757, 2758, 0, 0, 2760, 0, 0, 2762, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 65, 0, 0, 0, 0, 2769, + 2770, 2771, 0, 0, 0, 0, 97, 0, 0, 0, + 0, 2776, 0, 0, 2778, 2779, 2780, 0, 0, 0, + 2781, 2782, 0, 0, 2056, 2784, 0, 0, 2786, 0, + 0, 2788, 2789, 2790, 2791, 0, 0, 0, 0, 2792, + 2056, 2056, 2056, 2056, 2056, 0, 2985, 2986, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 949, 0, + 0, 0, 0, 0, 0, 2815, 2816, 2817, 2818, 2819, + 2820, 0, 0, 0, 2821, 2822, 0, 2823, 0, 2824, + 0, 2156, 0, 0, 0, 0, 0, 0, 0, 2160, + 0, 2163, 0, 0, 1915, 0, 0, 2170, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2855, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, + 1328, 680, 680, 0, 52, 55, 58, 57, 60, 2885, + 76, 0, 0, 85, 63, 82, 0, 0, 0, 0, + 0, 680, 0, 0, 0, 0, 0, 0, 0, 61, + 0, 983, 0, 0, 0, 0, 0, 0, 64, 93, + 92, 0, 0, 74, 75, 59, 0, 0, 0, 0, + 1411, 83, 84, 0, 195, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 983, 2665, 0, 0, 0, 0, + 2948, 0, 0, 0, 0, 0, 0, 0, 134, 0, + 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 177, 0, 0, 0, 0, 0, 0, 0, 66, + 67, 0, 68, 69, 70, 71, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 167, 0, 0, 0, 0, 0, 155, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, + 175, 0, 0, 0, 1915, 0, 0, 0, 0, 0, + 0, 2320, 0, 0, 0, 0, 0, 0, 3043, 1696, + 1697, 166, 165, 194, 0, 0, 0, 0, 0, 0, + 0, 0, 3052, 0, 0, 0, 0, 2370, 2371, 0, + 0, 2375, 1411, 0, 0, 0, 0, 0, 0, 2379, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2381, + 0, 0, 0, 0, 0, 0, 2384, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 91, 0, 0, 2387, 0, 0, 0, + 0, 0, 0, 680, 680, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 160, 1698, 163, 0, 1695, 0, 161, 162, + 0, 0, 0, 0, 0, 2403, 178, 0, 680, 0, + 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, + 0, 0, 0, 680, 0, 96, 0, 0, 0, 0, + 0, 0, 0, 0, 1667, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2413, 1678, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, + 1704, 0, 3193, 0, 0, 0, 0, 0, 1713, 0, + 0, 1411, 1715, 0, 0, 1718, 1719, 680, 680, 0, + 680, 0, 680, 680, 0, 680, 680, 680, 680, 680, + 680, 0, 0, 0, 0, 3217, 0, 0, 1411, 1750, + 1751, 1411, 680, 1411, 0, 1756, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 73, 0, 0, 0, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 169, 0, 680, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1835, 0, 0, 680, 3237, 0, 3238, 0, + 2511, 3239, 0, 0, 3242, 3243, 0, 0, 0, 0, + 0, 0, 0, 3247, 0, 0, 0, 0, 0, 0, + 0, 0, 799, 3249, 0, 0, 0, 0, 0, 0, + 0, 0, 2543, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 680, 0, 0, 3266, 0, 0, 3267, 922, + 3268, 3269, 0, 3270, 0, 3271, 0, 0, 0, 0, + 3272, 164, 0, 0, 0, 195, 0, 0, 0, 0, + 2582, 2583, 0, 0, 0, 0, 1692, 0, 0, 2170, + 2603, 0, 922, 2602, 0, 3297, 0, 0, 0, 134, + 0, 156, 0, 679, 0, 0, 3305, 0, 0, 3307, + 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, + 0, 3311, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 157, 0, 0, 158, 670, 0, 0, 3386, + 0, 0, 0, 167, 0, 0, 0, 0, 0, 155, + 0, 0, 0, 0, 0, 0, 974, 0, 0, 982, + 0, 0, 0, 0, 2652, 170, 0, 0, 174, 0, + 0, 175, 182, 0, 0, 0, 0, 0, 0, 0, + 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1696, 1697, 166, 165, 194, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2679, 0, 0, 0, + 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, + 0, 0, 661, 0, 0, 0, 0, 680, 680, 0, + 2701, 2702, 2703, 2704, 2705, 0, 0, 0, 0, 0, + 680, 0, 0, 0, 0, 0, 0, 0, 0, 3471, + 0, 0, 0, 0, 0, 0, 0, 0, 171, 176, 173, 179, 180, 181, 183, 185, 186, 187, 188, 0, - 0, 0, 0, 0, 189, 191, 192, 193, 0, 0, - 160, 141, 163, 148, 140, 0, 161, 162, 0, 0, - 0, 0, 0, 0, 178, 0, 0, 0, 0, 2852, - 2169, 679, 679, 184, 149, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 679, 0, 0, 0, 152, 150, - 145, 146, 147, 151, 2882, 0, 0, 0, 0, 0, - 142, 0, 0, 0, 0, 0, 0, 0, 0, 153, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 679, 0, 982, 0, 0, 0, 0, 0, - 0, 0, 1410, 0, 0, 2945, 0, 0, 0, 0, - 0, 1970, 0, 679, 0, 0, 0, 0, 0, 1410, - 0, 0, 0, 0, 0, 0, 0, 982, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 679, 679, 0, 0, 0, 0, - 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, - 0, 0, 3039, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3048, 0, 0, 0, + 642, 0, 0, 0, 189, 191, 192, 193, 0, 0, + 0, 0, 0, 0, 640, 0, 0, 1915, 2721, 0, + 0, 0, 0, 160, 1698, 163, 0, 1695, 680, 161, + 162, 0, 0, 0, 0, 0, 0, 178, 1411, 0, + 0, 0, 0, 2729, 0, 0, 184, 1971, 0, 680, + 0, 0, 0, 0, 637, 1411, 0, 0, 0, 0, + 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 650, 0, + 680, 680, 0, 0, 0, 0, 0, 0, 0, 0, + 647, 653, 649, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3511, 0, 0, 0, 665, 0, 0, + 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3525, 0, 0, 3526, + 0, 3527, 0, 2802, 0, 0, 0, 0, 0, 0, + 627, 0, 629, 643, 0, 667, 0, 666, 633, 0, + 631, 635, 644, 636, 0, 630, 169, 641, 0, 680, + 632, 645, 646, 652, 656, 657, 658, 654, 651, 659, + 625, 626, 648, 0, 639, 668, 0, 0, 1636, 0, + 0, 0, 0, 0, 0, 680, 2170, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, + 0, 0, 680, 0, 0, 0, 0, 0, 0, 2864, + 0, 89, 0, 0, 2170, 2170, 2170, 2170, 2170, 0, + 0, 0, 680, 0, 0, 3607, 0, 0, 0, 0, + 0, 0, 0, 0, 2170, 0, 0, 2170, 0, 0, + 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3621, 0, 3622, 0, 3623, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2938, + 0, 680, 0, 0, 0, 0, 0, 0, 2253, 2254, + 2255, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2970, 0, 157, 0, 2976, 158, 0, 680, 0, + 0, 2978, 0, 0, 680, 1713, 0, 0, 1713, 2988, + 1713, 0, 1624, 0, 0, 3668, 2285, 3669, 0, 0, + 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, + 0, 0, 0, 182, 3011, 0, 0, 3014, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 680, 0, 0, 0, 0, 680, 0, 0, 0, + 680, 680, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 190, 0, 0, 0, 0, 669, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1171, 0, 1171, 1171, 1637, 0, 0, + 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1340, 0, 663, 0, 171, + 176, 173, 179, 180, 181, 183, 185, 186, 187, 188, + 0, 0, 0, 0, 0, 189, 191, 192, 193, 0, + 0, 0, 0, 0, 0, 0, 3110, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 800, 1650, 1653, 1654, 1655, 1656, + 1657, 1658, 0, 1659, 1660, 1662, 1663, 1661, 1664, 1665, + 1638, 1639, 1640, 1641, 1622, 1623, 1651, 0, 1625, 0, + 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 680, + 0, 1635, 1642, 1643, 1644, 1645, 2170, 1646, 1647, 1648, + 1649, 860, 0, 2086, 0, 0, 861, 0, 0, 3154, + 0, 198, 0, 0, 616, 0, 1962, 0, 0, 0, + 0, 3171, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, + 0, 3186, 0, 0, 3187, 3188, 3189, 0, 0, 0, + 0, 931, 0, 0, 0, 1411, 0, 680, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 950, 950, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 867, + 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, + 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, + 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, + 908, 0, 0, 0, 0, 0, 0, 1548, 1549, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 164, 0, - 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, + 0, 0, 1591, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1609, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 679, 0, 0, 679, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, - 0, 0, 158, 0, 0, 0, 679, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 170, 0, 0, 0, 0, 0, 0, 182, - 0, 0, 0, 0, 0, 0, 0, 0, 2401, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 679, 0, 0, 1170, 0, - 1170, 1170, 2252, 2253, 2254, 0, 0, 0, 669, 0, - 190, 0, 0, 0, 0, 0, 3189, 2411, 0, 0, - 1339, 0, 679, 0, 0, 0, 0, 0, 679, 1712, - 0, 0, 1712, 0, 1712, 0, 0, 0, 0, 0, - 2284, 0, 0, 0, 0, 0, 0, 0, 0, 3213, - 0, 0, 663, 0, 0, 171, 176, 173, 179, 180, - 181, 183, 185, 186, 187, 188, 0, 0, 0, 0, - 0, 189, 191, 192, 193, 679, 0, 0, 0, 0, - 679, 0, 0, 0, 679, 679, 0, 0, 0, 0, - 0, 0, 0, 0, 660, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3233, - 0, 3234, 0, 0, 3235, 0, 0, 3238, 3239, 0, - 0, 0, 0, 0, 0, 0, 3243, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3245, 0, 0, 0, - 0, 0, 641, 2509, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 639, 0, 3262, 0, - 0, 3263, 0, 3264, 3265, 0, 3266, 0, 3267, 0, - 0, 0, 0, 3268, 0, 2541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 921, 0, 0, 0, 636, 0, 3293, 0, - 0, 0, 0, 0, 0, 654, 0, 0, 0, 3301, - 0, 0, 3303, 2580, 2581, 0, 0, 0, 0, 0, - 649, 0, 2169, 679, 3307, 921, 2600, 0, 0, 0, - 0, 0, 646, 652, 648, 0, 0, 0, 0, 0, - 0, 0, 3382, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1547, 1548, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 664, 0, + 0, 0, 0, 3273, 0, 3277, 3278, 0, 0, 0, + 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, + 0, 0, 974, 0, 0, 680, 0, 0, 2864, 0, + 89, 0, 2864, 0, 0, 0, 0, 0, 0, 0, + 0, 1721, 1721, 0, 1721, 0, 1721, 1721, 0, 1730, + 1721, 1721, 1721, 1721, 1721, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 974, 0, 0, 0, + 2616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1590, 0, 1410, - 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 626, 1608, 628, 642, 0, 666, 0, 665, 632, - 0, 630, 634, 643, 635, 0, 629, 0, 640, 0, - 0, 631, 644, 645, 651, 655, 656, 657, 653, 650, - 658, 624, 625, 647, 0, 638, 667, 0, 0, 2677, - 0, 0, 0, 0, 0, 0, 0, 973, 0, 0, - 0, 0, 3467, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1720, 1720, 0, 1720, - 0, 1720, 1720, 0, 1729, 1720, 1720, 1720, 1720, 1720, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3399, + 0, 1798, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1839, + 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 973, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, + 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, + 1713, 1713, 0, 0, 0, 680, 1171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1411, 2689, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2864, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1797, 0, 0, 0, + 0, 0, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, + 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1454, 1455, + 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, + 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, + 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1485, 1486, + 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1512, 1513, + 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, + 1524, 1525, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3498, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1838, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 679, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, + 0, 0, 0, 0, 89, 3509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1170, 0, 0, 0, 0, 3507, 0, 0, 0, + 0, 1171, 1171, 0, 0, 680, 0, 0, 0, 0, + 0, 0, 0, 0, 1903, 0, 0, 616, 0, 616, + 0, 0, 616, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2614, 0, 0, 0, 0, 3521, - 0, 0, 3522, 0, 3523, 0, 0, 0, 0, 0, + 0, 0, 0, 680, 0, 3543, 0, 0, 0, 0, + 89, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1957, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 680, 0, 0, 0, 0, 0, 616, 0, + 0, 0, 0, 1973, 0, 0, 0, 0, 0, 0, + 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 680, 0, 1413, 0, 1411, 0, + 0, 680, 680, 1411, 2006, 2007, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 668, 0, 0, 0, 0, 2799, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, - 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, - 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, - 679, 0, 0, 0, 1712, 1712, 0, 0, 2169, 679, - 0, 0, 0, 0, 0, 0, 0, 799, 3603, 0, - 0, 0, 0, 0, 0, 1410, 2687, 0, 0, 0, - 0, 2861, 0, 89, 0, 0, 2169, 2169, 2169, 2169, - 2169, 0, 0, 0, 0, 0, 0, 0, 3617, 0, - 3618, 0, 3619, 0, 0, 0, 2169, 0, 0, 2169, - 0, 0, 0, 0, 0, 0, 1170, 1170, 0, 0, - 0, 0, 0, 0, 198, 0, 0, 615, 0, 1902, + 0, 0, 0, 0, 0, 0, 3625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 930, 0, 0, 0, 3664, 0, - 3665, 0, 0, 2967, 0, 0, 0, 0, 0, 0, - 0, 949, 949, 2975, 0, 0, 0, 1956, 0, 0, - 0, 679, 615, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1972, 0, + 0, 0, 0, 0, 1171, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2933, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 680, 0, 0, 1411, + 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, + 0, 0, 0, 2132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 679, 2005, - 2006, 0, 0, 0, 0, 3624, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1635, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2142, + 0, 0, 0, 0, 0, 0, 0, 0, 1413, 0, + 0, 0, 0, 1591, 0, 0, 1171, 0, 0, 0, + 0, 3018, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 974, 0, 0, 0, + 0, 860, 0, 0, 0, 0, 861, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1962, 0, 0, 0, + 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, - 0, 0, 0, 0, 679, 0, 0, 0, 0, 1170, + 0, 0, 0, 0, 931, 0, 0, 0, 0, 0, + 0, 680, 0, 0, 0, 982, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 974, 0, 0, 0, 616, 0, 982, 867, + 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, + 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, + 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, + 908, 0, 0, 0, 0, 974, 0, 1413, 0, 0, + 1957, 0, 0, 0, 1957, 1957, 0, 0, 0, 0, + 0, 0, 0, 0, 3161, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1413, 0, 0, 1413, 0, 1413, + 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 679, 0, 0, 0, 0, + 1772, 0, 0, 0, 0, 0, 0, 0, 680, 680, + 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 679, 0, 0, 0, 0, 2131, 0, - 0, 0, 0, 0, 0, 0, 0, 679, 0, 0, - 0, 1410, 0, 0, 679, 679, 1410, 0, 0, 0, - 0, 0, 0, 0, 2141, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1590, 0, - 0, 1170, 0, 0, 0, 0, 0, 2169, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1623, - 3150, 973, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2930, 0, 0, + 0, 0, 0, 1841, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, - 0, 0, 1410, 0, 0, 0, 0, 679, 0, 0, + 0, 0, 0, 616, 0, 680, 680, 680, 680, 0, + 616, 0, 0, 0, 0, 0, 0, 0, 0, 1873, + 1874, 616, 616, 616, 616, 616, 616, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 981, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2390, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 97, 0, 0, 860, 0, 0, 0, + 848, 861, 862, 863, 864, 849, 0, 0, 850, 851, + 0, 852, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 857, 865, 866, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1636, 0, 0, 973, 0, 0, - 0, 0, 0, 981, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3014, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2982, 2983, 0, 0, 1411, 0, 0, 0, + 0, 680, 0, 680, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, + 903, 904, 905, 906, 907, 908, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 973, 0, 0, 0, 0, 1956, 0, 0, 0, 1956, - 1956, 1649, 1652, 1653, 1654, 1655, 1656, 1657, 0, 1658, - 1659, 1661, 1662, 1660, 1663, 1664, 1637, 1638, 1639, 1640, - 1621, 1622, 1650, 679, 1624, 0, 1625, 1626, 1627, 1628, - 1629, 1630, 1631, 1632, 1633, 0, 0, 1634, 1641, 1642, - 1643, 1644, 0, 1645, 1646, 1647, 1648, 0, 0, 0, - 0, 0, 0, 3269, 0, 3273, 3274, 0, 0, 0, + 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, + 0, 0, 0, 0, 0, 616, 0, 0, 2984, 0, + 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2861, 0, - 89, 0, 2861, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2551, 0, + 0, 0, 680, 0, 1413, 0, 680, 680, 0, 2566, + 0, 0, 0, 0, 0, 0, 950, 950, 0, 0, + 0, 1413, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2985, 2986, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3157, 0, 0, 615, - 0, 615, 0, 0, 615, 615, 0, 0, 2388, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 679, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1651, 0, 0, 0, 0, - 615, 0, 0, 0, 0, 0, 1170, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 679, 679, 679, - 679, 0, 0, 0, 0, 0, 0, 0, 1412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2861, 0, + 0, 0, 0, 0, 0, 950, 1841, 950, 950, 950, + 950, 950, 0, 0, 0, 0, 2648, 0, 0, 0, + 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, + 814, 0, 0, 818, 0, 815, 816, 0, 0, 0, + 817, 0, 0, 2142, 0, 0, 0, 0, 0, 1772, + 2673, 0, 0, 0, 0, 0, 0, 0, 680, 2678, + 0, 0, 0, 0, 950, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 931, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, - 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1453, 1454, - 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, - 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, - 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1484, 1485, - 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1511, 1512, - 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, - 1523, 1524, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3494, 1410, 0, 0, - 0, 0, 679, 0, 679, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, - 1412, 0, 0, 2549, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2564, 0, 0, 0, 0, 0, + 0, 616, 0, 0, 0, 0, 0, 0, 1841, 616, + 0, 616, 0, 616, 2179, 0, 0, 0, 0, 680, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1411, + 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 680, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 679, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, - 679, 0, 0, 0, 0, 3539, 0, 0, 0, 0, - 89, 0, 0, 679, 0, 0, 930, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, + 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1957, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2646, 0, 0, 0, 0, 0, 0, 615, 0, - 0, 0, 0, 679, 0, 0, 0, 679, 679, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2141, 0, - 0, 0, 0, 0, 0, 2671, 0, 0, 0, 0, - 0, 0, 0, 0, 2676, 0, 679, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3621, 0, 0, 1412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1957, + 0, 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1412, 0, 0, 1412, - 0, 1412, 615, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 680, 0, 680, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2803, 0, 0, + 0, 0, 0, 0, 0, 1171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1771, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 679, 0, 615, 0, 0, + 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, + 0, 616, 0, 0, 0, 0, 1721, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1840, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 679, - 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, - 1635, 0, 615, 0, 0, 0, 1956, 0, 0, 0, - 0, 1872, 1873, 615, 615, 615, 615, 615, 615, 615, + 0, 0, 0, 0, 2840, 0, 0, 616, 616, 0, + 0, 616, 0, 2377, 0, 0, 0, 0, 1171, 616, + 0, 0, 0, 0, 0, 2867, 1721, 0, 0, 616, + 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1410, 0, 679, 1956, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 679, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2800, 0, 0, 0, 0, 0, 0, 679, 1170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1720, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1623, 0, 0, 0, 2837, 0, - 0, 0, 0, 0, 0, 0, 679, 0, 0, 0, - 0, 0, 1170, 0, 0, 0, 0, 0, 0, 2864, - 1720, 0, 0, 0, 0, 0, 0, 0, 679, 0, + 974, 0, 0, 0, 0, 0, 0, 0, 2142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 679, 0, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1636, - 0, 0, 0, 3326, 3328, 3327, 3345, 3346, 3347, 3348, - 3349, 3350, 3351, 747, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 973, 0, 0, 0, 0, 0, - 0, 0, 2141, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1412, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 949, 949, - 0, 0, 0, 1412, 0, 0, 1649, 1652, 1653, 1654, - 1655, 1656, 1657, 0, 1658, 1659, 1661, 1662, 1660, 1663, - 1664, 1637, 1638, 1639, 1640, 1621, 1622, 1650, 0, 1624, - 0, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, - 0, 0, 1634, 1641, 1642, 1643, 1644, 0, 1645, 1646, - 1647, 1648, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1413, 0, 1841, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 949, 1840, 949, - 949, 949, 949, 949, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3077, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 859, 0, 2085, 0, 0, 860, 0, - 0, 1771, 0, 0, 0, 0, 0, 0, 1961, 0, - 0, 0, 0, 0, 0, 0, 949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 930, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, - 1840, 615, 0, 615, 0, 615, 2178, 0, 0, 0, - 0, 0, 0, 3332, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3340, 3341, - 1651, 866, 867, 868, 869, 870, 871, 872, 873, 874, - 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, - 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, - 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, - 905, 906, 907, 0, 0, 2141, 2141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 813, 0, - 726, 817, 728, 814, 815, 0, 724, 727, 816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3221, 3222, 3223, 3224, 0, 0, 0, 0, - 0, 0, 0, 0, 745, 746, 3325, 3329, 3330, 3331, - 3342, 3343, 3344, 3352, 3354, 778, 3353, 3355, 3356, 3357, - 3360, 3361, 3362, 3363, 3358, 3359, 3364, 3309, 3313, 3310, - 3311, 3312, 3324, 3314, 3315, 3316, 3317, 3318, 3319, 3320, - 3321, 3322, 3323, 3365, 3366, 3367, 3368, 3369, 3370, 3335, - 3339, 3338, 3336, 3337, 3333, 3334, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 818, 0, - 819, 0, 0, 823, 0, 0, 615, 825, 824, 0, - 826, 792, 791, 615, 0, 820, 821, 0, 822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, - 615, 0, 0, 615, 0, 2375, 0, 0, 0, 0, - 0, 615, 0, 0, 0, 0, 0, 3297, 0, 3299, - 0, 615, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3371, 3372, 3373, 3374, 3375, 3376, 3377, - 3378, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3405, 0, 0, 0, 0, - 0, 0, 0, 0, 97, 0, 0, 859, 1170, 0, - 0, 847, 860, 861, 862, 863, 848, 0, 0, 849, - 850, 0, 851, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1412, 0, 1840, 856, 864, 865, 0, + 0, 0, 0, 0, 0, 3081, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3455, 0, - 0, 0, 3455, 3455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2979, 2980, 0, 0, 0, 0, 0, - 0, 2141, 0, 0, 0, 866, 867, 868, 869, 870, - 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, - 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, - 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, - 901, 902, 903, 904, 905, 906, 907, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, + 1772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2141, 0, 0, 0, 0, 0, 0, 0, 0, 2981, - 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, - 0, 0, 1771, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, - 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3532, 0, 0, 0, 0, - 0, 2982, 2983, 0, 0, 0, 0, 3536, 0, 0, + 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, + 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1170, 1170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3579, 0, 0, 615, 0, 0, 0, - 0, 0, 0, 2656, 0, 0, 0, 0, 3587, 0, + 0, 0, 2142, 2142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 813, 0, 0, 817, 0, 814, 815, 0, 0, 0, - 816, 0, 0, 0, 0, 0, 0, 0, 0, 1412, - 0, 3532, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 615, 615, 615, 615, 615, 0, 0, 0, - 0, 0, 0, 2141, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, + 0, 2658, 0, 0, 0, 0, 0, 0, 0, 3225, + 3226, 3227, 3228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3077, 0, 3587, 0, 0, 97, 0, 0, 859, 0, - 0, 0, 847, 860, 861, 862, 863, 848, 0, 0, - 849, 850, 0, 851, 0, 0, 0, 0, 615, 615, - 0, 0, 0, 0, 0, 0, 0, 856, 864, 865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 949, 0, - 0, 0, 0, 0, 2979, 2980, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 866, 867, 868, 869, - 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, - 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, - 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, - 900, 901, 902, 903, 904, 905, 906, 907, 0, 0, + 616, 616, 616, 616, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 949, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 859, - 2981, 0, 0, 0, 860, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1961, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1412, 0, 0, 0, 0, - 1412, 615, 615, 615, 615, 615, 0, 0, 0, 0, - 0, 0, 0, 2880, 0, 0, 0, 0, 0, 1771, - 0, 615, 2982, 2983, 615, 2888, 1840, 866, 867, 868, - 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, - 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, - 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, - 899, 900, 901, 902, 903, 904, 905, 906, 907, 0, - 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1412, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 616, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 615, 0, 0, 615, 0, 0, + 0, 0, 0, 616, 0, 3301, 0, 3303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 950, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3409, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 950, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3459, 0, 0, 0, + 3459, 3459, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2142, + 0, 0, 0, 0, 1413, 0, 0, 0, 0, 1413, + 616, 616, 616, 616, 616, 0, 0, 0, 0, 0, + 0, 0, 2883, 0, 0, 0, 0, 0, 1772, 0, + 616, 0, 0, 616, 2891, 1841, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2142, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1413, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, + 0, 0, 2142, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 616, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3536, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1171, + 1171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3583, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 615, 0, 0, 615, 615, 615, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2142, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 616, 0, 0, 0, 0, 0, 3081, 0, + 3591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 616, 0, 0, 616, 616, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2450,1159 +2473,2510 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1771, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 392, 0, 0, 0, 1304, 1289, 513, 0, 1232, - 1307, 1201, 1220, 1317, 1223, 1226, 1268, 1180, 1246, 411, - 1217, 1173, 1205, 1175, 1212, 1176, 1203, 1234, 269, 1200, - 1291, 1250, 1306, 362, 266, 1182, 1206, 425, 1222, 207, - 1270, 482, 253, 373, 370, 521, 281, 272, 268, 251, - 315, 381, 423, 503, 417, 1313, 366, 1256, 0, 492, - 396, 0, 0, 0, 1236, 1295, 1244, 1282, 1231, 1269, - 1190, 1255, 1308, 1218, 1265, 1309, 321, 249, 323, 206, - 408, 493, 285, 0, 0, 1771, 0, 3559, 669, 0, - 0, 0, 0, 3560, 0, 0, 0, 0, 239, 0, - 0, 246, 0, 0, 615, 347, 356, 355, 336, 337, - 339, 341, 346, 353, 359, 1214, 1262, 1303, 1215, 1264, - 264, 319, 271, 263, 518, 1314, 1294, 1179, 1243, 1302, - 0, 0, 230, 1305, 1238, 0, 1267, 0, 1320, 1174, - 1258, 0, 1177, 1181, 1316, 1298, 1209, 274, 0, 0, - 0, 0, 0, 0, 0, 1235, 1245, 1279, 1283, 1229, - 0, 0, 0, 0, 1412, 0, 0, 1207, 0, 1254, - 0, 0, 0, 1186, 1178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1233, 0, 0, - 0, 0, 1189, 0, 1208, 1280, 1771, 1172, 296, 1183, - 397, 256, 1326, 0, 449, 1287, 1297, 1230, 561, 1301, - 1228, 1227, 1274, 1187, 1293, 1221, 361, 1185, 328, 202, - 226, 0, 1219, 407, 457, 469, 1292, 1204, 1213, 254, - 1211, 467, 421, 538, 234, 283, 454, 427, 465, 437, - 286, 1253, 1272, 466, 368, 523, 447, 535, 562, 563, - 262, 401, 547, 507, 556, 587, 227, 259, 415, 500, - 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, - 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, - 431, 432, 570, 582, 571, 573, 214, 502, 533, 240, - 479, 0, 0, 589, 248, 499, 216, 530, 498, 389, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 392, 0, 0, 0, 1305, 1290, 513, 0, + 1233, 1308, 1202, 1221, 1318, 1224, 1227, 1269, 1181, 1247, + 411, 1218, 1174, 1206, 1176, 1213, 1177, 1204, 1235, 269, + 1201, 1292, 1251, 1307, 362, 266, 1183, 1207, 425, 1223, + 207, 1271, 482, 253, 373, 370, 521, 281, 272, 268, + 251, 315, 381, 423, 503, 417, 1314, 366, 1257, 0, + 492, 396, 0, 0, 0, 1237, 1296, 1245, 1283, 1232, + 1270, 1191, 1256, 1309, 1219, 1266, 1310, 321, 249, 323, + 206, 408, 493, 285, 0, 0, 1772, 0, 3563, 670, + 0, 0, 0, 0, 3564, 0, 0, 0, 0, 239, + 0, 0, 246, 0, 0, 616, 347, 356, 355, 336, + 337, 339, 341, 346, 353, 359, 1215, 1263, 1304, 1216, + 1265, 264, 319, 271, 263, 518, 1315, 1295, 1180, 1244, + 1303, 0, 0, 230, 1306, 1239, 0, 1268, 0, 1321, + 1175, 1259, 0, 1178, 1182, 1317, 1299, 1210, 274, 0, + 0, 0, 0, 0, 0, 0, 1236, 1246, 1280, 1284, + 1230, 0, 0, 0, 0, 1413, 0, 0, 1208, 0, + 1255, 0, 0, 0, 1187, 1179, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1234, 0, + 0, 0, 0, 1190, 0, 1209, 1281, 1772, 1173, 296, + 1184, 397, 256, 1327, 0, 449, 1288, 1298, 1231, 561, + 1302, 1229, 1228, 1275, 1188, 1294, 1222, 361, 1186, 328, + 202, 226, 0, 1220, 407, 457, 469, 1293, 1205, 1214, + 254, 1212, 467, 421, 538, 234, 283, 454, 427, 465, + 437, 286, 1254, 1273, 466, 368, 523, 447, 535, 562, + 563, 262, 401, 547, 507, 556, 588, 227, 259, 415, + 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, + 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, + 452, 431, 432, 570, 583, 571, 573, 574, 214, 502, + 533, 240, 479, 0, 0, 590, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 591, 229, 555, 221, + 1185, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 592, 235, 236, 238, 1200, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 1289, 517, + 536, 548, 560, 566, 567, 569, 575, 576, 577, 578, + 584, 582, 579, 580, 581, 572, 402, 309, 490, 331, + 369, 1278, 1320, 420, 468, 241, 540, 491, 1323, 1324, + 1325, 1326, 1195, 1199, 1193, 1260, 1194, 1249, 1250, 1196, + 1311, 1312, 1313, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 0, 1282, 1189, 0, 1197, 1198, 1291, 1300, 1301, + 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 1253, 201, 222, 364, 1316, 450, 287, 589, 551, 545, + 208, 224, 1192, 261, 1203, 1211, 0, 1217, 1225, 1226, + 1238, 1240, 1241, 1242, 1243, 1261, 1262, 1264, 1272, 1274, + 1277, 1279, 1286, 1297, 1319, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 586, 587, 298, 534, 565, 532, 585, + 559, 435, 374, 1252, 1322, 549, 1258, 377, 280, 303, + 318, 1267, 550, 497, 228, 462, 289, 252, 1285, 1287, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 1248, 1276, 372, 514, 515, 314, + 392, 0, 0, 0, 1305, 1290, 513, 0, 1233, 1308, + 1202, 1221, 1318, 1224, 1227, 1269, 1181, 1247, 411, 1218, + 1174, 1206, 1176, 1213, 1177, 1204, 1235, 269, 1201, 1292, + 1251, 1307, 362, 266, 1183, 1207, 425, 1223, 207, 1271, + 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, + 381, 423, 503, 417, 1314, 366, 1257, 0, 492, 396, + 0, 0, 0, 1237, 1296, 1245, 1283, 1232, 1270, 1191, + 1256, 1309, 1219, 1266, 1310, 321, 249, 323, 206, 408, + 493, 285, 0, 0, 0, 0, 0, 199, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, + 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, + 341, 346, 353, 359, 1215, 1263, 1304, 1216, 1265, 264, + 319, 271, 263, 518, 1315, 1295, 1180, 1244, 1303, 0, + 0, 230, 1306, 1239, 0, 1268, 0, 1321, 1175, 1259, + 0, 1178, 1182, 1317, 1299, 1210, 274, 0, 0, 0, + 0, 0, 0, 0, 1236, 1246, 1280, 1284, 1230, 0, + 0, 0, 0, 0, 2892, 0, 1208, 0, 1255, 0, + 0, 0, 1187, 1179, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1234, 0, 0, 0, + 0, 1190, 0, 1209, 1281, 0, 1173, 296, 1184, 397, + 256, 1327, 0, 449, 1288, 1298, 1231, 561, 1302, 1229, + 1228, 1275, 1188, 1294, 1222, 361, 1186, 328, 202, 226, + 0, 1220, 407, 457, 469, 1293, 1205, 1214, 254, 1212, + 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, + 1254, 1273, 466, 368, 523, 447, 535, 562, 563, 262, + 401, 547, 507, 556, 588, 227, 259, 415, 500, 541, + 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, + 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, + 432, 570, 583, 571, 573, 574, 214, 502, 533, 240, + 479, 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 527, 528, 255, 590, 229, 555, 221, 1184, 554, + 410, 527, 528, 255, 591, 229, 555, 221, 1185, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 591, - 235, 236, 238, 1199, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 1288, 517, 536, 548, - 560, 566, 567, 569, 574, 575, 576, 577, 583, 581, - 578, 579, 580, 572, 402, 309, 490, 331, 369, 1277, - 1319, 420, 468, 241, 540, 491, 1322, 1323, 1324, 1325, - 1194, 1198, 1192, 1259, 1193, 1248, 1249, 1195, 1310, 1311, - 1312, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 609, 0, - 1281, 1188, 0, 1196, 1197, 1290, 1299, 1300, 610, 380, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 592, + 235, 236, 238, 1200, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 1289, 517, 536, 548, + 560, 566, 567, 569, 575, 576, 577, 578, 584, 582, + 579, 580, 581, 572, 402, 309, 490, 331, 369, 1278, + 1320, 420, 468, 241, 540, 491, 1323, 1324, 1325, 1326, + 1195, 1199, 1193, 1260, 1194, 1249, 1250, 1196, 1311, 1312, + 1313, 593, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 1282, 1189, 0, 1197, 1198, 1291, 1300, 1301, 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, - 546, 307, 464, 463, 329, 330, 375, 446, 1252, 201, - 222, 364, 1315, 450, 287, 588, 551, 545, 208, 224, - 1191, 261, 1202, 1210, 0, 1216, 1224, 1225, 1237, 1239, - 1240, 1241, 1242, 1260, 1261, 1263, 1271, 1273, 1276, 1278, - 1285, 1296, 1318, 203, 204, 211, 223, 233, 237, 244, + 546, 307, 464, 463, 329, 330, 375, 446, 1253, 201, + 222, 364, 1316, 450, 287, 589, 551, 545, 208, 224, + 1192, 261, 1203, 1211, 0, 1217, 1225, 1226, 1238, 1240, + 1241, 1242, 1243, 1261, 1262, 1264, 1272, 1274, 1277, 1279, + 1286, 1297, 1319, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 585, 586, 298, 534, 565, 532, 584, 559, 435, - 374, 1251, 1321, 549, 1257, 377, 280, 303, 318, 1266, - 550, 497, 228, 462, 289, 252, 1284, 1286, 213, 247, + 313, 586, 587, 298, 534, 565, 532, 585, 559, 435, + 374, 1252, 1322, 549, 1258, 377, 280, 303, 318, 1267, + 550, 497, 228, 462, 289, 252, 1285, 1287, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 1247, 1275, 372, 514, 515, 314, 392, 0, - 0, 0, 1304, 1289, 513, 0, 1232, 1307, 1201, 1220, - 1317, 1223, 1226, 1268, 1180, 1246, 411, 1217, 1173, 1205, - 1175, 1212, 1176, 1203, 1234, 269, 1200, 1291, 1250, 1306, - 362, 266, 1182, 1206, 425, 1222, 207, 1270, 482, 253, + 265, 428, 1248, 1276, 372, 514, 515, 314, 392, 0, + 0, 0, 1305, 1290, 513, 0, 1233, 1308, 1202, 1221, + 1318, 1224, 1227, 1269, 1181, 1247, 411, 1218, 1174, 1206, + 1176, 1213, 1177, 1204, 1235, 269, 1201, 1292, 1251, 1307, + 362, 266, 1183, 1207, 425, 1223, 207, 1271, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 1313, 366, 1256, 0, 492, 396, 0, 0, - 0, 1236, 1295, 1244, 1282, 1231, 1269, 1190, 1255, 1308, - 1218, 1265, 1309, 321, 249, 323, 206, 408, 493, 285, - 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, + 503, 417, 1314, 366, 1257, 0, 492, 396, 0, 0, + 0, 1237, 1296, 1245, 1283, 1232, 1270, 1191, 1256, 1309, + 1219, 1266, 1310, 321, 249, 323, 206, 408, 493, 285, + 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, - 353, 359, 1214, 1262, 1303, 1215, 1264, 264, 319, 271, - 263, 518, 1314, 1294, 1179, 1243, 1302, 0, 0, 230, - 1305, 1238, 0, 1267, 0, 1320, 1174, 1258, 0, 1177, - 1181, 1316, 1298, 1209, 274, 0, 0, 0, 0, 0, - 0, 0, 1235, 1245, 1279, 1283, 1229, 0, 0, 0, - 0, 0, 2889, 0, 1207, 0, 1254, 0, 0, 0, - 1186, 1178, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1233, 0, 0, 0, 0, 1189, - 0, 1208, 1280, 0, 1172, 296, 1183, 397, 256, 1326, - 0, 449, 1287, 1297, 1230, 561, 1301, 1228, 1227, 1274, - 1187, 1293, 1221, 361, 1185, 328, 202, 226, 0, 1219, - 407, 457, 469, 1292, 1204, 1213, 254, 1211, 467, 421, - 538, 234, 283, 454, 427, 465, 437, 286, 1253, 1272, + 353, 359, 1215, 1263, 1304, 1216, 1265, 264, 319, 271, + 263, 518, 1315, 1295, 1180, 1244, 1303, 0, 0, 230, + 1306, 1239, 0, 1268, 0, 1321, 1175, 1259, 0, 1178, + 1182, 1317, 1299, 1210, 274, 0, 0, 0, 0, 0, + 0, 0, 1236, 1246, 1280, 1284, 1230, 0, 0, 0, + 0, 0, 2853, 0, 1208, 0, 1255, 0, 0, 0, + 1187, 1179, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1234, 0, 0, 0, 0, 1190, + 0, 1209, 1281, 0, 1173, 296, 1184, 397, 256, 1327, + 0, 449, 1288, 1298, 1231, 561, 1302, 1229, 1228, 1275, + 1188, 1294, 1222, 361, 1186, 328, 202, 226, 0, 1220, + 407, 457, 469, 1293, 1205, 1214, 254, 1212, 467, 421, + 538, 234, 283, 454, 427, 465, 437, 286, 1254, 1273, 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 587, 227, 259, 415, 500, 541, 489, 393, + 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 582, 571, 573, 214, 502, 533, 240, 479, 0, 0, - 589, 248, 499, 216, 530, 498, 389, 324, 325, 215, - 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, - 255, 590, 229, 555, 221, 1184, 554, 403, 522, 531, - 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, - 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 591, 235, 236, 238, - 1199, 278, 282, 290, 293, 301, 302, 311, 363, 414, - 443, 439, 448, 1288, 517, 536, 548, 560, 566, 567, - 569, 574, 575, 576, 577, 583, 581, 578, 579, 580, - 572, 402, 309, 490, 331, 369, 1277, 1319, 420, 468, - 241, 540, 491, 1322, 1323, 1324, 1325, 1194, 1198, 1192, - 1259, 1193, 1248, 1249, 1195, 1310, 1311, 1312, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 0, 1281, 1188, 0, - 1196, 1197, 1290, 1299, 1300, 610, 380, 481, 537, 333, - 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, - 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, - 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, - 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, - 463, 329, 330, 375, 446, 1252, 201, 222, 364, 1315, - 450, 287, 588, 551, 545, 208, 224, 1191, 261, 1202, - 1210, 0, 1216, 1224, 1225, 1237, 1239, 1240, 1241, 1242, - 1260, 1261, 1263, 1271, 1273, 1276, 1278, 1285, 1296, 1318, - 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, - 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, - 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, - 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, - 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, - 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, - 564, 476, 299, 300, 441, 442, 312, 313, 585, 586, - 298, 534, 565, 532, 584, 559, 435, 374, 1251, 1321, - 549, 1257, 377, 280, 303, 318, 1266, 550, 497, 228, - 462, 289, 252, 1284, 1286, 213, 247, 231, 258, 273, - 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, - 242, 480, 504, 505, 506, 508, 391, 265, 428, 1247, - 1275, 372, 514, 515, 314, 392, 0, 0, 0, 1304, - 1289, 513, 0, 1232, 1307, 1201, 1220, 1317, 1223, 1226, - 1268, 1180, 1246, 411, 1217, 1173, 1205, 1175, 1212, 1176, - 1203, 1234, 269, 1200, 1291, 1250, 1306, 362, 266, 1182, - 1206, 425, 1222, 207, 1270, 482, 253, 373, 370, 521, - 281, 272, 268, 251, 315, 381, 423, 503, 417, 1313, - 366, 1256, 0, 492, 396, 0, 0, 0, 1236, 1295, - 1244, 1282, 1231, 1269, 1190, 1255, 1308, 1218, 1265, 1309, - 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, - 0, 0, 669, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, - 356, 355, 336, 337, 339, 341, 346, 353, 359, 1214, - 1262, 1303, 1215, 1264, 264, 319, 271, 263, 518, 1314, - 1294, 1179, 1243, 1302, 0, 0, 230, 1305, 1238, 0, - 1267, 0, 1320, 1174, 1258, 0, 1177, 1181, 1316, 1298, - 1209, 274, 0, 0, 0, 0, 0, 0, 0, 1235, - 1245, 1279, 1283, 1229, 0, 0, 0, 0, 0, 2850, - 0, 1207, 0, 1254, 0, 0, 0, 1186, 1178, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1233, 0, 0, 0, 0, 1189, 0, 1208, 1280, - 0, 1172, 296, 1183, 397, 256, 1326, 0, 449, 1287, - 1297, 1230, 561, 1301, 1228, 1227, 1274, 1187, 1293, 1221, - 361, 1185, 328, 202, 226, 0, 1219, 407, 457, 469, - 1292, 1204, 1213, 254, 1211, 467, 421, 538, 234, 283, - 454, 427, 465, 437, 286, 1253, 1272, 466, 368, 523, - 447, 535, 562, 563, 262, 401, 547, 507, 556, 587, - 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, - 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, - 525, 544, 288, 452, 431, 432, 570, 582, 571, 573, - 214, 502, 533, 240, 479, 0, 0, 589, 248, 499, - 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, - 292, 0, 0, 257, 410, 527, 528, 255, 590, 229, - 555, 221, 1184, 554, 403, 522, 531, 390, 379, 220, - 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, - 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, - 0, 494, 543, 591, 235, 236, 238, 1199, 278, 282, - 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, - 1288, 517, 536, 548, 560, 566, 567, 569, 574, 575, - 576, 577, 583, 581, 578, 579, 580, 572, 402, 309, - 490, 331, 369, 1277, 1319, 420, 468, 241, 540, 491, - 1322, 1323, 1324, 1325, 1194, 1198, 1192, 1259, 1193, 1248, - 1249, 1195, 1310, 1311, 1312, 592, 593, 594, 595, 596, - 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 608, 609, 0, 1281, 1188, 0, 1196, 1197, 1290, - 1299, 1300, 610, 380, 481, 537, 333, 345, 348, 338, - 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, - 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, - 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, - 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, - 375, 446, 1252, 201, 222, 364, 1315, 450, 287, 588, - 551, 545, 208, 224, 1191, 261, 1202, 1210, 0, 1216, - 1224, 1225, 1237, 1239, 1240, 1241, 1242, 1260, 1261, 1263, - 1271, 1273, 1276, 1278, 1285, 1296, 1318, 203, 204, 211, - 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, - 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, - 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, - 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, - 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, - 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, - 300, 441, 442, 312, 313, 585, 586, 298, 534, 565, - 532, 584, 559, 435, 374, 1251, 1321, 549, 1257, 377, - 280, 303, 318, 1266, 550, 497, 228, 462, 289, 252, - 1284, 1286, 213, 247, 231, 258, 273, 276, 322, 387, - 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, - 505, 506, 508, 391, 265, 428, 1247, 1275, 372, 514, - 515, 314, 392, 0, 0, 0, 1304, 1289, 513, 0, - 1232, 1307, 1201, 1220, 1317, 1223, 1226, 1268, 1180, 1246, - 411, 1217, 1173, 1205, 1175, 1212, 1176, 1203, 1234, 269, - 1200, 1291, 1250, 1306, 362, 266, 1182, 1206, 425, 1222, - 207, 1270, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 1313, 366, 1256, 0, - 492, 396, 0, 0, 0, 1236, 1295, 1244, 1282, 1231, - 1269, 1190, 1255, 1308, 1218, 1265, 1309, 321, 249, 323, - 206, 408, 493, 285, 0, 0, 0, 0, 0, 843, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, - 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, - 337, 339, 341, 346, 353, 359, 1214, 1262, 1303, 1215, - 1264, 264, 319, 271, 263, 518, 1314, 1294, 1179, 1243, - 1302, 0, 0, 230, 1305, 1238, 0, 1267, 0, 1320, - 1174, 1258, 0, 1177, 1181, 1316, 1298, 1209, 274, 0, - 0, 0, 0, 0, 0, 0, 1235, 1245, 1279, 1283, - 1229, 0, 0, 0, 0, 0, 2157, 0, 1207, 0, - 1254, 0, 0, 0, 1186, 1178, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1233, 0, - 0, 0, 0, 1189, 0, 1208, 1280, 0, 1172, 296, - 1183, 397, 256, 1326, 0, 449, 1287, 1297, 1230, 561, - 1301, 1228, 1227, 1274, 1187, 1293, 1221, 361, 1185, 328, - 202, 226, 0, 1219, 407, 457, 469, 1292, 1204, 1213, - 254, 1211, 467, 421, 538, 234, 283, 454, 427, 465, - 437, 286, 1253, 1272, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 587, 227, 259, 415, - 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, - 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 582, 571, 573, 214, 502, 533, - 240, 479, 0, 0, 589, 248, 499, 216, 530, 498, - 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 527, 528, 255, 590, 229, 555, 221, 1184, - 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, - 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, - 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 591, 235, 236, 238, 1199, 278, 282, 290, 293, 301, - 302, 311, 363, 414, 443, 439, 448, 1288, 517, 536, - 548, 560, 566, 567, 569, 574, 575, 576, 577, 583, - 581, 578, 579, 580, 572, 402, 309, 490, 331, 369, - 1277, 1319, 420, 468, 241, 540, 491, 1322, 1323, 1324, - 1325, 1194, 1198, 1192, 1259, 1193, 1248, 1249, 1195, 1310, - 1311, 1312, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, - 0, 1281, 1188, 0, 1196, 1197, 1290, 1299, 1300, 610, - 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, - 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, - 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, - 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, - 291, 546, 307, 464, 463, 329, 330, 375, 446, 1252, - 201, 222, 364, 1315, 450, 287, 588, 551, 545, 208, - 224, 1191, 261, 1202, 1210, 0, 1216, 1224, 1225, 1237, - 1239, 1240, 1241, 1242, 1260, 1261, 1263, 1271, 1273, 1276, - 1278, 1285, 1296, 1318, 203, 204, 211, 223, 233, 237, - 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, - 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, - 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, - 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, - 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, - 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, - 312, 313, 585, 586, 298, 534, 565, 532, 584, 559, - 435, 374, 1251, 1321, 549, 1257, 377, 280, 303, 318, - 1266, 550, 497, 228, 462, 289, 252, 1284, 1286, 213, - 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, - 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, - 391, 265, 428, 1247, 1275, 372, 514, 515, 314, 392, - 0, 0, 0, 1304, 1289, 513, 0, 1232, 1307, 1201, - 1220, 1317, 1223, 1226, 1268, 1180, 1246, 411, 1217, 1173, - 1205, 1175, 1212, 1176, 1203, 1234, 269, 1200, 1291, 1250, - 1306, 362, 266, 1182, 1206, 425, 1222, 207, 1270, 482, - 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, - 423, 503, 417, 1313, 366, 1256, 0, 492, 396, 0, - 0, 0, 1236, 1295, 1244, 1282, 1231, 1269, 1190, 1255, - 1308, 1218, 1265, 1309, 321, 249, 323, 206, 408, 493, - 285, 0, 97, 0, 0, 0, 669, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, - 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, - 346, 353, 359, 1214, 1262, 1303, 1215, 1264, 264, 319, - 271, 263, 518, 1314, 1294, 1179, 1243, 1302, 0, 0, - 230, 1305, 1238, 0, 1267, 0, 1320, 1174, 1258, 0, - 1177, 1181, 1316, 1298, 1209, 274, 0, 0, 0, 0, - 0, 0, 0, 1235, 1245, 1279, 1283, 1229, 0, 0, - 0, 0, 0, 0, 0, 1207, 0, 1254, 0, 0, - 0, 1186, 1178, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1233, 0, 0, 0, 0, - 1189, 0, 1208, 1280, 0, 1172, 296, 1183, 397, 256, - 1326, 0, 449, 1287, 1297, 1230, 561, 1301, 1228, 1227, - 1274, 1187, 1293, 1221, 361, 1185, 328, 202, 226, 0, - 1219, 407, 457, 469, 1292, 1204, 1213, 254, 1211, 467, - 421, 538, 234, 283, 454, 427, 465, 437, 286, 1253, - 1272, 466, 368, 523, 447, 535, 562, 563, 262, 401, - 547, 507, 556, 587, 227, 259, 415, 500, 541, 489, - 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, - 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, - 570, 582, 571, 573, 214, 502, 533, 240, 479, 0, - 0, 589, 248, 499, 216, 530, 498, 389, 324, 325, + 583, 571, 573, 574, 214, 502, 533, 240, 479, 0, + 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, - 528, 255, 590, 229, 555, 221, 1184, 554, 403, 522, + 528, 255, 591, 229, 555, 221, 1185, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, - 209, 542, 0, 210, 0, 494, 543, 591, 235, 236, - 238, 1199, 278, 282, 290, 293, 301, 302, 311, 363, - 414, 443, 439, 448, 1288, 517, 536, 548, 560, 566, - 567, 569, 574, 575, 576, 577, 583, 581, 578, 579, - 580, 572, 402, 309, 490, 331, 369, 1277, 1319, 420, - 468, 241, 540, 491, 1322, 1323, 1324, 1325, 1194, 1198, - 1192, 1259, 1193, 1248, 1249, 1195, 1310, 1311, 1312, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 609, 0, 1281, 1188, - 0, 1196, 1197, 1290, 1299, 1300, 610, 380, 481, 537, + 209, 542, 0, 210, 0, 494, 543, 592, 235, 236, + 238, 1200, 278, 282, 290, 293, 301, 302, 311, 363, + 414, 443, 439, 448, 1289, 517, 536, 548, 560, 566, + 567, 569, 575, 576, 577, 578, 584, 582, 579, 580, + 581, 572, 402, 309, 490, 331, 369, 1278, 1320, 420, + 468, 241, 540, 491, 1323, 1324, 1325, 1326, 1195, 1199, + 1193, 1260, 1194, 1249, 1250, 1196, 1311, 1312, 1313, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 1282, 1189, + 0, 1197, 1198, 1291, 1300, 1301, 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, - 464, 463, 329, 330, 375, 446, 1252, 201, 222, 364, - 1315, 450, 287, 588, 551, 545, 208, 224, 1191, 261, - 1202, 1210, 0, 1216, 1224, 1225, 1237, 1239, 1240, 1241, - 1242, 1260, 1261, 1263, 1271, 1273, 1276, 1278, 1285, 1296, - 1318, 203, 204, 211, 223, 233, 237, 244, 260, 275, + 464, 463, 329, 330, 375, 446, 1253, 201, 222, 364, + 1316, 450, 287, 589, 551, 545, 208, 224, 1192, 261, + 1203, 1211, 0, 1217, 1225, 1226, 1238, 1240, 1241, 1242, + 1243, 1261, 1262, 1264, 1272, 1274, 1277, 1279, 1286, 1297, + 1319, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, - 558, 564, 476, 299, 300, 441, 442, 312, 313, 585, - 586, 298, 534, 565, 532, 584, 559, 435, 374, 1251, - 1321, 549, 1257, 377, 280, 303, 318, 1266, 550, 497, - 228, 462, 289, 252, 1284, 1286, 213, 247, 231, 258, + 558, 564, 476, 299, 300, 441, 442, 312, 313, 586, + 587, 298, 534, 565, 532, 585, 559, 435, 374, 1252, + 1322, 549, 1258, 377, 280, 303, 318, 1267, 550, 497, + 228, 462, 289, 252, 1285, 1287, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, - 1247, 1275, 372, 514, 515, 314, 392, 0, 0, 0, - 1304, 1289, 513, 0, 1232, 1307, 1201, 1220, 1317, 1223, - 1226, 1268, 1180, 1246, 411, 1217, 1173, 1205, 1175, 1212, - 1176, 1203, 1234, 269, 1200, 1291, 1250, 1306, 362, 266, - 1182, 1206, 425, 1222, 207, 1270, 482, 253, 373, 370, + 1248, 1276, 372, 514, 515, 314, 392, 0, 0, 0, + 1305, 1290, 513, 0, 1233, 1308, 1202, 1221, 1318, 1224, + 1227, 1269, 1181, 1247, 411, 1218, 1174, 1206, 1176, 1213, + 1177, 1204, 1235, 269, 1201, 1292, 1251, 1307, 362, 266, + 1183, 1207, 425, 1223, 207, 1271, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, - 1313, 366, 1256, 0, 492, 396, 0, 0, 0, 1236, - 1295, 1244, 1282, 1231, 1269, 1190, 1255, 1308, 1218, 1265, - 1309, 321, 249, 323, 206, 408, 493, 285, 0, 0, - 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, + 1314, 366, 1257, 0, 492, 396, 0, 0, 0, 1237, + 1296, 1245, 1283, 1232, 1270, 1191, 1256, 1309, 1219, 1266, + 1310, 321, 249, 323, 206, 408, 493, 285, 0, 0, + 0, 0, 0, 844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, - 1214, 1262, 1303, 1215, 1264, 264, 319, 271, 263, 518, - 1314, 1294, 1179, 1243, 1302, 0, 0, 230, 1305, 1238, - 0, 1267, 0, 1320, 1174, 1258, 0, 1177, 1181, 1316, - 1298, 1209, 274, 0, 0, 0, 0, 0, 0, 0, - 1235, 1245, 1279, 1283, 1229, 0, 0, 0, 0, 0, - 0, 0, 1207, 0, 1254, 0, 0, 0, 1186, 1178, + 1215, 1263, 1304, 1216, 1265, 264, 319, 271, 263, 518, + 1315, 1295, 1180, 1244, 1303, 0, 0, 230, 1306, 1239, + 0, 1268, 0, 1321, 1175, 1259, 0, 1178, 1182, 1317, + 1299, 1210, 274, 0, 0, 0, 0, 0, 0, 0, + 1236, 1246, 1280, 1284, 1230, 0, 0, 0, 0, 0, + 2158, 0, 1208, 0, 1255, 0, 0, 0, 1187, 1179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1233, 0, 0, 0, 0, 1189, 0, 1208, - 1280, 0, 1172, 296, 1183, 397, 256, 1326, 0, 449, - 1287, 1297, 1230, 561, 1301, 1228, 1227, 1274, 1187, 1293, - 1221, 361, 1185, 328, 202, 226, 0, 1219, 407, 457, - 469, 1292, 1204, 1213, 254, 1211, 467, 421, 538, 234, - 283, 454, 427, 465, 437, 286, 1253, 1272, 466, 368, + 0, 0, 1234, 0, 0, 0, 0, 1190, 0, 1209, + 1281, 0, 1173, 296, 1184, 397, 256, 1327, 0, 449, + 1288, 1298, 1231, 561, 1302, 1229, 1228, 1275, 1188, 1294, + 1222, 361, 1186, 328, 202, 226, 0, 1220, 407, 457, + 469, 1293, 1205, 1214, 254, 1212, 467, 421, 538, 234, + 283, 454, 427, 465, 437, 286, 1254, 1273, 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, - 587, 227, 259, 415, 500, 541, 489, 393, 519, 520, + 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, - 232, 525, 544, 288, 452, 431, 432, 570, 582, 571, - 573, 214, 502, 533, 240, 479, 0, 0, 589, 248, - 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 590, - 229, 555, 221, 1184, 554, 403, 522, 531, 390, 379, - 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, - 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 591, 235, 236, 238, 1199, 278, - 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 1288, 517, 536, 548, 560, 566, 567, 569, 574, - 575, 576, 577, 583, 581, 578, 579, 580, 572, 402, - 309, 490, 331, 369, 1277, 1319, 420, 468, 241, 540, - 491, 1322, 1323, 1324, 1325, 1194, 1198, 1192, 1259, 1193, - 1248, 1249, 1195, 1310, 1311, 1312, 592, 593, 594, 595, + 232, 525, 544, 288, 452, 431, 432, 570, 583, 571, + 573, 574, 214, 502, 533, 240, 479, 0, 0, 590, + 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, + 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, + 591, 229, 555, 221, 1185, 554, 403, 522, 531, 390, + 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, + 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, + 0, 210, 0, 494, 543, 592, 235, 236, 238, 1200, + 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, + 439, 448, 1289, 517, 536, 548, 560, 566, 567, 569, + 575, 576, 577, 578, 584, 582, 579, 580, 581, 572, + 402, 309, 490, 331, 369, 1278, 1320, 420, 468, 241, + 540, 491, 1323, 1324, 1325, 1326, 1195, 1199, 1193, 1260, + 1194, 1249, 1250, 1196, 1311, 1312, 1313, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 0, 1281, 1188, 0, 1196, 1197, - 1290, 1299, 1300, 610, 380, 481, 537, 333, 345, 348, - 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, - 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, - 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, - 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, - 330, 375, 446, 1252, 201, 222, 364, 1315, 450, 287, - 588, 551, 545, 208, 224, 1191, 261, 1202, 1210, 0, - 1216, 1224, 1225, 1237, 1239, 1240, 1241, 1242, 1260, 1261, - 1263, 1271, 1273, 1276, 1278, 1285, 1296, 1318, 203, 204, - 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, - 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, - 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, - 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, - 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, - 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 299, 300, 441, 442, 312, 313, 585, 586, 298, 534, - 565, 532, 584, 559, 435, 374, 1251, 1321, 549, 1257, - 377, 280, 303, 318, 1266, 550, 497, 228, 462, 289, - 252, 1284, 1286, 213, 247, 231, 258, 273, 276, 322, - 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, - 504, 505, 506, 508, 391, 265, 428, 1247, 1275, 372, - 514, 515, 314, 392, 0, 0, 0, 1304, 1289, 513, - 0, 1232, 1307, 1201, 1220, 1317, 1223, 1226, 1268, 1180, - 1246, 411, 1217, 1173, 1205, 1175, 1212, 1176, 1203, 1234, - 269, 1200, 1291, 1250, 1306, 362, 266, 1182, 1206, 425, - 1222, 207, 1270, 482, 253, 373, 370, 521, 281, 272, - 268, 251, 315, 381, 423, 503, 417, 1313, 366, 1256, - 0, 492, 396, 0, 0, 0, 1236, 1295, 1244, 1282, - 1231, 1269, 1190, 1255, 1308, 1218, 1265, 1309, 321, 249, - 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, - 843, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, - 336, 337, 339, 341, 346, 353, 359, 1214, 1262, 1303, - 1215, 1264, 264, 319, 271, 263, 518, 1314, 1294, 1179, - 1243, 1302, 0, 0, 230, 1305, 1238, 0, 1267, 0, - 1320, 1174, 1258, 0, 1177, 1181, 1316, 1298, 1209, 274, - 0, 0, 0, 0, 0, 0, 0, 1235, 1245, 1279, - 1283, 1229, 0, 0, 0, 0, 0, 0, 0, 1207, - 0, 1254, 0, 0, 0, 1186, 1178, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1233, - 0, 0, 0, 0, 1189, 0, 1208, 1280, 0, 1172, - 296, 1183, 397, 256, 1326, 0, 449, 1287, 1297, 1230, - 561, 1301, 1228, 1227, 1274, 1187, 1293, 1221, 361, 1185, - 328, 202, 226, 0, 1219, 407, 457, 469, 1292, 1204, - 1213, 254, 1211, 467, 421, 538, 234, 283, 454, 427, - 465, 437, 286, 1253, 1272, 466, 368, 523, 447, 535, - 562, 563, 262, 401, 547, 507, 556, 587, 227, 259, - 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, - 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, - 288, 452, 431, 432, 570, 582, 571, 573, 214, 502, - 533, 240, 479, 0, 0, 589, 248, 499, 216, 530, + 606, 607, 608, 609, 610, 0, 1282, 1189, 0, 1197, + 1198, 1291, 1300, 1301, 611, 380, 481, 537, 333, 345, + 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, + 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, + 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, + 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, + 329, 330, 375, 446, 1253, 201, 222, 364, 1316, 450, + 287, 589, 551, 545, 208, 224, 1192, 261, 1203, 1211, + 0, 1217, 1225, 1226, 1238, 1240, 1241, 1242, 1243, 1261, + 1262, 1264, 1272, 1274, 1277, 1279, 1286, 1297, 1319, 203, + 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, + 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, + 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, + 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, + 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, + 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, + 476, 299, 300, 441, 442, 312, 313, 586, 587, 298, + 534, 565, 532, 585, 559, 435, 374, 1252, 1322, 549, + 1258, 377, 280, 303, 318, 1267, 550, 497, 228, 462, + 289, 252, 1285, 1287, 213, 247, 231, 258, 273, 276, + 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, + 480, 504, 505, 506, 508, 391, 265, 428, 1248, 1276, + 372, 514, 515, 314, 392, 0, 0, 0, 1305, 1290, + 513, 0, 1233, 1308, 1202, 1221, 1318, 1224, 1227, 1269, + 1181, 1247, 411, 1218, 1174, 1206, 1176, 1213, 1177, 1204, + 1235, 269, 1201, 1292, 1251, 1307, 362, 266, 1183, 1207, + 425, 1223, 207, 1271, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 1314, 366, + 1257, 0, 492, 396, 0, 0, 0, 1237, 1296, 1245, + 1283, 1232, 1270, 1191, 1256, 1309, 1219, 1266, 1310, 321, + 249, 323, 206, 408, 493, 285, 0, 97, 0, 0, + 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 1215, 1263, + 1304, 1216, 1265, 264, 319, 271, 263, 518, 1315, 1295, + 1180, 1244, 1303, 0, 0, 230, 1306, 1239, 0, 1268, + 0, 1321, 1175, 1259, 0, 1178, 1182, 1317, 1299, 1210, + 274, 0, 0, 0, 0, 0, 0, 0, 1236, 1246, + 1280, 1284, 1230, 0, 0, 0, 0, 0, 0, 0, + 1208, 0, 1255, 0, 0, 0, 1187, 1179, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1234, 0, 0, 0, 0, 1190, 0, 1209, 1281, 0, + 1173, 296, 1184, 397, 256, 1327, 0, 449, 1288, 1298, + 1231, 561, 1302, 1229, 1228, 1275, 1188, 1294, 1222, 361, + 1186, 328, 202, 226, 0, 1220, 407, 457, 469, 1293, + 1205, 1214, 254, 1212, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 1254, 1273, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 588, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 583, 571, 573, 574, + 214, 502, 533, 240, 479, 0, 0, 590, 248, 499, + 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, + 292, 0, 0, 257, 410, 527, 528, 255, 591, 229, + 555, 221, 1185, 554, 403, 522, 531, 390, 379, 220, + 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, + 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, + 0, 494, 543, 592, 235, 236, 238, 1200, 278, 282, + 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, + 1289, 517, 536, 548, 560, 566, 567, 569, 575, 576, + 577, 578, 584, 582, 579, 580, 581, 572, 402, 309, + 490, 331, 369, 1278, 1320, 420, 468, 241, 540, 491, + 1323, 1324, 1325, 1326, 1195, 1199, 1193, 1260, 1194, 1249, + 1250, 1196, 1311, 1312, 1313, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 0, 1282, 1189, 0, 1197, 1198, 1291, + 1300, 1301, 611, 380, 481, 537, 333, 345, 348, 338, + 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, + 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, + 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, + 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, + 375, 446, 1253, 201, 222, 364, 1316, 450, 287, 589, + 551, 545, 208, 224, 1192, 261, 1203, 1211, 0, 1217, + 1225, 1226, 1238, 1240, 1241, 1242, 1243, 1261, 1262, 1264, + 1272, 1274, 1277, 1279, 1286, 1297, 1319, 203, 204, 211, + 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, + 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, + 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, + 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, + 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, + 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, + 300, 441, 442, 312, 313, 586, 587, 298, 534, 565, + 532, 585, 559, 435, 374, 1252, 1322, 549, 1258, 377, + 280, 303, 318, 1267, 550, 497, 228, 462, 289, 252, + 1285, 1287, 213, 247, 231, 258, 273, 276, 322, 387, + 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, + 505, 506, 508, 391, 265, 428, 1248, 1276, 372, 514, + 515, 314, 392, 0, 0, 0, 1305, 1290, 513, 0, + 1233, 1308, 1202, 1221, 1318, 1224, 1227, 1269, 1181, 1247, + 411, 1218, 1174, 1206, 1176, 1213, 1177, 1204, 1235, 269, + 1201, 1292, 1251, 1307, 362, 266, 1183, 1207, 425, 1223, + 207, 1271, 482, 253, 373, 370, 521, 281, 272, 268, + 251, 315, 381, 423, 503, 417, 1314, 366, 1257, 0, + 492, 396, 0, 0, 0, 1237, 1296, 1245, 1283, 1232, + 1270, 1191, 1256, 1309, 1219, 1266, 1310, 321, 249, 323, + 206, 408, 493, 285, 0, 0, 0, 0, 0, 670, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, + 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, + 337, 339, 341, 346, 353, 359, 1215, 1263, 1304, 1216, + 1265, 264, 319, 271, 263, 518, 1315, 1295, 1180, 1244, + 1303, 0, 0, 230, 1306, 1239, 0, 1268, 0, 1321, + 1175, 1259, 0, 1178, 1182, 1317, 1299, 1210, 274, 0, + 0, 0, 0, 0, 0, 0, 1236, 1246, 1280, 1284, + 1230, 0, 0, 0, 0, 0, 0, 0, 1208, 0, + 1255, 0, 0, 0, 1187, 1179, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1234, 0, + 0, 0, 0, 1190, 0, 1209, 1281, 0, 1173, 296, + 1184, 397, 256, 1327, 0, 449, 1288, 1298, 1231, 561, + 1302, 1229, 1228, 1275, 1188, 1294, 1222, 361, 1186, 328, + 202, 226, 0, 1220, 407, 457, 469, 1293, 1205, 1214, + 254, 1212, 467, 421, 538, 234, 283, 454, 427, 465, + 437, 286, 1254, 1273, 466, 368, 523, 447, 535, 562, + 563, 262, 401, 547, 507, 556, 588, 227, 259, 415, + 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, + 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, + 452, 431, 432, 570, 583, 571, 573, 574, 214, 502, + 533, 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 590, 229, 555, 221, - 1184, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 0, 257, 410, 527, 528, 255, 591, 229, 555, 221, + 1185, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 591, 235, 236, 238, 1199, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 1288, 517, - 536, 548, 560, 566, 567, 569, 574, 575, 576, 577, - 583, 581, 578, 579, 580, 572, 402, 309, 490, 331, - 369, 1277, 1319, 420, 468, 241, 540, 491, 1322, 1323, - 1324, 1325, 1194, 1198, 1192, 1259, 1193, 1248, 1249, 1195, - 1310, 1311, 1312, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 0, 1281, 1188, 0, 1196, 1197, 1290, 1299, 1300, - 610, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 543, 592, 235, 236, 238, 1200, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 1289, 517, + 536, 548, 560, 566, 567, 569, 575, 576, 577, 578, + 584, 582, 579, 580, 581, 572, 402, 309, 490, 331, + 369, 1278, 1320, 420, 468, 241, 540, 491, 1323, 1324, + 1325, 1326, 1195, 1199, 1193, 1260, 1194, 1249, 1250, 1196, + 1311, 1312, 1313, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 0, 1282, 1189, 0, 1197, 1198, 1291, 1300, 1301, + 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 1252, 201, 222, 364, 1315, 450, 287, 588, 551, 545, - 208, 224, 1191, 261, 1202, 1210, 0, 1216, 1224, 1225, - 1237, 1239, 1240, 1241, 1242, 1260, 1261, 1263, 1271, 1273, - 1276, 1278, 1285, 1296, 1318, 203, 204, 211, 223, 233, + 1253, 201, 222, 364, 1316, 450, 287, 589, 551, 545, + 208, 224, 1192, 261, 1203, 1211, 0, 1217, 1225, 1226, + 1238, 1240, 1241, 1242, 1243, 1261, 1262, 1264, 1272, 1274, + 1277, 1279, 1286, 1297, 1319, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 585, 586, 298, 534, 565, 532, 584, - 559, 435, 374, 1251, 1321, 549, 1257, 377, 280, 303, - 318, 1266, 550, 497, 228, 462, 289, 252, 1284, 1286, + 442, 312, 313, 586, 587, 298, 534, 565, 532, 585, + 559, 435, 374, 1252, 1322, 549, 1258, 377, 280, 303, + 318, 1267, 550, 497, 228, 462, 289, 252, 1285, 1287, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 1247, 1275, 372, 514, 515, 314, - 392, 0, 0, 0, 1304, 1289, 513, 0, 1232, 1307, - 1201, 1220, 1317, 1223, 1226, 1268, 1180, 1246, 411, 1217, - 1173, 1205, 1175, 1212, 1176, 1203, 1234, 269, 1200, 1291, - 1250, 1306, 362, 266, 1182, 1206, 425, 1222, 207, 1270, + 508, 391, 265, 428, 1248, 1276, 372, 514, 515, 314, + 392, 0, 0, 0, 1305, 1290, 513, 0, 1233, 1308, + 1202, 1221, 1318, 1224, 1227, 1269, 1181, 1247, 411, 1218, + 1174, 1206, 1176, 1213, 1177, 1204, 1235, 269, 1201, 1292, + 1251, 1307, 362, 266, 1183, 1207, 425, 1223, 207, 1271, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, - 381, 423, 503, 417, 1313, 366, 1256, 0, 492, 396, - 0, 0, 0, 1236, 1295, 1244, 1282, 1231, 1269, 1190, - 1255, 1308, 1218, 1265, 1309, 321, 249, 323, 206, 408, - 493, 285, 0, 0, 0, 0, 0, 199, 0, 0, + 381, 423, 503, 417, 1314, 366, 1257, 0, 492, 396, + 0, 0, 0, 1237, 1296, 1245, 1283, 1232, 1270, 1191, + 1256, 1309, 1219, 1266, 1310, 321, 249, 323, 206, 408, + 493, 285, 0, 0, 0, 0, 0, 844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, - 341, 346, 353, 359, 1214, 1262, 1303, 1215, 1264, 264, - 319, 271, 263, 518, 1314, 1294, 1179, 1243, 1302, 0, - 0, 230, 1305, 1238, 0, 1267, 0, 1320, 1174, 1258, - 0, 1177, 1181, 1316, 1298, 1209, 274, 0, 0, 0, - 0, 0, 0, 0, 1235, 1245, 1279, 1283, 1229, 0, - 0, 0, 0, 0, 0, 0, 1207, 0, 1254, 0, - 0, 0, 1186, 1178, 0, 0, 0, 0, 0, 0, + 341, 346, 353, 359, 1215, 1263, 1304, 1216, 1265, 264, + 319, 271, 263, 518, 1315, 1295, 1180, 1244, 1303, 0, + 0, 230, 1306, 1239, 0, 1268, 0, 1321, 1175, 1259, + 0, 1178, 1182, 1317, 1299, 1210, 274, 0, 0, 0, + 0, 0, 0, 0, 1236, 1246, 1280, 1284, 1230, 0, + 0, 0, 0, 0, 0, 0, 1208, 0, 1255, 0, + 0, 0, 1187, 1179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1233, 0, 0, 0, - 0, 1189, 0, 1208, 1280, 0, 1172, 296, 1183, 397, - 256, 1326, 0, 449, 1287, 1297, 1230, 561, 1301, 1228, - 1227, 1274, 1187, 1293, 1221, 361, 1185, 328, 202, 226, - 0, 1219, 407, 457, 469, 1292, 1204, 1213, 254, 1211, + 0, 0, 0, 0, 0, 0, 1234, 0, 0, 0, + 0, 1190, 0, 1209, 1281, 0, 1173, 296, 1184, 397, + 256, 1327, 0, 449, 1288, 1298, 1231, 561, 1302, 1229, + 1228, 1275, 1188, 1294, 1222, 361, 1186, 328, 202, 226, + 0, 1220, 407, 457, 469, 1293, 1205, 1214, 254, 1212, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, - 1253, 1272, 466, 368, 523, 447, 535, 562, 563, 262, - 401, 547, 507, 556, 587, 227, 259, 415, 500, 541, + 1254, 1273, 466, 368, 523, 447, 535, 562, 563, 262, + 401, 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, - 432, 570, 582, 571, 573, 214, 502, 533, 240, 479, - 0, 0, 589, 248, 499, 216, 530, 498, 389, 324, - 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 527, 528, 255, 590, 229, 555, 221, 1184, 554, 403, - 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, - 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 591, 235, - 236, 238, 1199, 278, 282, 290, 293, 301, 302, 311, - 363, 414, 443, 439, 448, 1288, 517, 536, 548, 560, - 566, 567, 569, 574, 575, 576, 577, 583, 581, 578, - 579, 580, 572, 402, 309, 490, 331, 369, 1277, 1319, - 420, 468, 241, 540, 491, 1322, 1323, 1324, 1325, 1194, - 1198, 1192, 1259, 1193, 1248, 1249, 1195, 1310, 1311, 1312, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 608, 609, 0, 1281, - 1188, 0, 1196, 1197, 1290, 1299, 1300, 610, 380, 481, - 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, - 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, - 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, - 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, - 307, 464, 463, 329, 330, 375, 446, 1252, 201, 222, - 364, 1315, 450, 287, 588, 551, 545, 208, 224, 1191, - 261, 1202, 1210, 0, 1216, 1224, 1225, 1237, 1239, 1240, - 1241, 1242, 1260, 1261, 1263, 1271, 1273, 1276, 1278, 1285, - 1296, 1318, 203, 204, 211, 223, 233, 237, 244, 260, - 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, - 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, - 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, - 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, - 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, - 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, - 585, 586, 298, 534, 565, 532, 584, 559, 435, 374, - 1251, 1321, 549, 1257, 377, 280, 303, 318, 1266, 550, - 497, 228, 462, 289, 252, 1284, 1286, 213, 247, 231, - 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, - 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, - 428, 1247, 1275, 372, 514, 515, 314, 392, 0, 0, - 0, 0, 0, 513, 0, 722, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, - 709, 0, 0, 0, 269, 714, 0, 0, 0, 362, - 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, - 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, - 417, 721, 366, 0, 0, 492, 396, 0, 0, 0, - 0, 0, 717, 718, 0, 0, 0, 0, 0, 0, - 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, - 97, 0, 0, 859, 843, 809, 810, 847, 860, 861, - 862, 863, 848, 0, 239, 849, 850, 246, 851, 0, - 808, 749, 751, 750, 768, 769, 770, 771, 772, 773, - 774, 747, 856, 864, 865, 0, 264, 319, 271, 263, - 518, 0, 0, 2037, 2038, 2039, 0, 0, 230, 0, - 0, 0, 0, 0, 0, 0, 691, 706, 0, 720, - 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 703, - 704, 0, 0, 0, 0, 803, 0, 705, 0, 0, - 713, 866, 867, 868, 869, 870, 871, 872, 873, 874, - 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, - 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, - 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, - 905, 906, 907, 716, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, - 449, 802, 0, 0, 561, 0, 0, 800, 0, 0, - 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, - 457, 469, 0, 0, 0, 853, 0, 467, 421, 538, - 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, - 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, - 556, 587, 227, 259, 415, 500, 541, 489, 393, 519, - 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, - 243, 232, 525, 544, 288, 452, 431, 432, 570, 582, - 571, 573, 214, 502, 533, 240, 479, 0, 0, 589, - 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, - 453, 267, 292, 0, 0, 257, 410, 854, 855, 255, - 590, 755, 555, 221, 0, 554, 403, 522, 531, 390, - 379, 220, 529, 388, 378, 332, 763, 764, 279, 305, - 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, - 0, 210, 0, 494, 543, 591, 235, 236, 238, 0, - 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, - 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, - 574, 575, 576, 577, 583, 581, 578, 579, 580, 572, - 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, - 540, 491, 0, 0, 0, 0, 813, 801, 726, 817, - 728, 814, 815, 723, 724, 727, 816, 592, 593, 594, - 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 0, 804, 712, 711, 0, - 719, 0, 745, 746, 748, 752, 753, 754, 765, 766, - 767, 775, 777, 778, 776, 779, 780, 781, 784, 785, - 786, 787, 782, 783, 788, 729, 733, 730, 731, 732, - 744, 734, 735, 736, 737, 738, 739, 740, 741, 742, - 743, 827, 828, 829, 830, 831, 832, 758, 762, 761, - 759, 760, 756, 757, 710, 201, 222, 364, 0, 450, - 287, 588, 551, 545, 208, 224, 818, 261, 819, 0, - 0, 823, 0, 0, 0, 825, 824, 0, 826, 792, - 791, 0, 0, 820, 821, 0, 822, 0, 0, 203, - 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, - 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, - 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, - 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, - 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, - 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, - 476, 833, 834, 835, 836, 837, 838, 839, 840, 298, - 534, 565, 532, 584, 559, 435, 374, 0, 0, 549, - 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, - 289, 252, 858, 0, 213, 247, 231, 258, 273, 276, - 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, - 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, - 372, 514, 515, 314, 513, 0, 722, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, - 0, 709, 0, 0, 0, 269, 714, 0, 0, 0, - 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, - 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 721, 366, 0, 0, 492, 396, 0, 0, - 0, 0, 0, 717, 718, 0, 0, 0, 0, 0, - 0, 2186, 0, 321, 249, 323, 206, 408, 493, 285, - 0, 97, 0, 0, 859, 843, 809, 810, 847, 860, - 861, 862, 863, 848, 0, 239, 849, 850, 246, 851, - 0, 808, 749, 751, 750, 768, 769, 770, 771, 772, - 773, 774, 747, 856, 864, 865, 2187, 264, 319, 271, - 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 691, 706, 0, - 720, 0, 0, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 703, 704, 0, 0, 0, 0, 803, 0, 705, 0, - 0, 713, 866, 867, 868, 869, 870, 871, 872, 873, - 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, - 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, - 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, - 904, 905, 906, 907, 716, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, - 0, 449, 802, 0, 0, 561, 0, 0, 800, 0, - 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, - 407, 457, 469, 0, 0, 0, 853, 0, 467, 421, - 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, - 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 587, 227, 259, 415, 500, 541, 489, 393, - 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, + 432, 570, 583, 571, 573, 574, 214, 502, 533, 240, + 479, 0, 0, 590, 248, 499, 216, 530, 498, 389, + 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, + 410, 527, 528, 255, 591, 229, 555, 221, 1185, 554, + 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, + 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 592, + 235, 236, 238, 1200, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 1289, 517, 536, 548, + 560, 566, 567, 569, 575, 576, 577, 578, 584, 582, + 579, 580, 581, 572, 402, 309, 490, 331, 369, 1278, + 1320, 420, 468, 241, 540, 491, 1323, 1324, 1325, 1326, + 1195, 1199, 1193, 1260, 1194, 1249, 1250, 1196, 1311, 1312, + 1313, 593, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 1282, 1189, 0, 1197, 1198, 1291, 1300, 1301, 611, 380, + 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, + 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, + 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, + 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, + 546, 307, 464, 463, 329, 330, 375, 446, 1253, 201, + 222, 364, 1316, 450, 287, 589, 551, 545, 208, 224, + 1192, 261, 1203, 1211, 0, 1217, 1225, 1226, 1238, 1240, + 1241, 1242, 1243, 1261, 1262, 1264, 1272, 1274, 1277, 1279, + 1286, 1297, 1319, 203, 204, 211, 223, 233, 237, 244, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, + 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, + 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, + 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, + 313, 586, 587, 298, 534, 565, 532, 585, 559, 435, + 374, 1252, 1322, 549, 1258, 377, 280, 303, 318, 1267, + 550, 497, 228, 462, 289, 252, 1285, 1287, 213, 247, + 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, + 265, 428, 1248, 1276, 372, 514, 515, 314, 392, 0, + 0, 0, 1305, 1290, 513, 0, 1233, 1308, 1202, 1221, + 1318, 1224, 1227, 1269, 1181, 1247, 411, 1218, 1174, 1206, + 1176, 1213, 1177, 1204, 1235, 269, 1201, 1292, 1251, 1307, + 362, 266, 1183, 1207, 425, 1223, 207, 1271, 482, 253, + 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, + 503, 417, 1314, 366, 1257, 0, 492, 396, 0, 0, + 0, 1237, 1296, 1245, 1283, 1232, 1270, 1191, 1256, 1309, + 1219, 1266, 1310, 321, 249, 323, 206, 408, 493, 285, + 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, + 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, + 353, 359, 1215, 1263, 1304, 1216, 1265, 264, 319, 271, + 263, 518, 1315, 1295, 1180, 1244, 1303, 0, 0, 230, + 1306, 1239, 0, 1268, 0, 1321, 1175, 1259, 0, 1178, + 1182, 1317, 1299, 1210, 274, 0, 0, 0, 0, 0, + 0, 0, 1236, 1246, 1280, 1284, 1230, 0, 0, 0, + 0, 0, 0, 0, 1208, 0, 1255, 0, 0, 0, + 1187, 1179, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1234, 0, 0, 0, 0, 1190, + 0, 1209, 1281, 0, 1173, 296, 1184, 397, 256, 1327, + 0, 449, 1288, 1298, 1231, 561, 1302, 1229, 1228, 1275, + 1188, 1294, 1222, 361, 1186, 328, 202, 226, 0, 1220, + 407, 457, 469, 1293, 1205, 1214, 254, 1212, 467, 421, + 538, 234, 283, 454, 427, 465, 437, 286, 1254, 1273, + 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, + 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, + 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, + 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, + 583, 571, 573, 574, 214, 502, 533, 240, 479, 0, + 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, + 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, + 528, 255, 591, 229, 555, 221, 1185, 554, 403, 522, + 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, + 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, + 209, 542, 0, 210, 0, 494, 543, 592, 235, 236, + 238, 1200, 278, 282, 290, 293, 301, 302, 311, 363, + 414, 443, 439, 448, 1289, 517, 536, 548, 560, 566, + 567, 569, 575, 576, 577, 578, 584, 582, 579, 580, + 581, 572, 402, 309, 490, 331, 369, 1278, 1320, 420, + 468, 241, 540, 491, 1323, 1324, 1325, 1326, 1195, 1199, + 1193, 1260, 1194, 1249, 1250, 1196, 1311, 1312, 1313, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 1282, 1189, + 0, 1197, 1198, 1291, 1300, 1301, 611, 380, 481, 537, + 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, + 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, + 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, + 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, + 464, 463, 329, 330, 375, 446, 1253, 201, 222, 364, + 1316, 450, 287, 589, 551, 545, 208, 224, 1192, 261, + 1203, 1211, 0, 1217, 1225, 1226, 1238, 1240, 1241, 1242, + 1243, 1261, 1262, 1264, 1272, 1274, 1277, 1279, 1286, 1297, + 1319, 203, 204, 211, 223, 233, 237, 244, 260, 275, + 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, + 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, + 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, + 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, + 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, + 558, 564, 476, 299, 300, 441, 442, 312, 313, 586, + 587, 298, 534, 565, 532, 585, 559, 435, 374, 1252, + 1322, 549, 1258, 377, 280, 303, 318, 1267, 550, 497, + 228, 462, 289, 252, 1285, 1287, 213, 247, 231, 258, + 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, + 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, + 1248, 1276, 372, 514, 515, 314, 392, 0, 0, 0, + 0, 0, 513, 0, 723, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 411, 0, 0, 0, 0, 710, + 0, 0, 0, 269, 715, 0, 0, 0, 362, 266, + 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, + 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, + 722, 366, 0, 0, 492, 396, 0, 0, 0, 0, + 0, 718, 719, 0, 0, 0, 0, 0, 0, 0, + 0, 321, 249, 323, 206, 408, 493, 285, 0, 97, + 0, 0, 860, 844, 810, 811, 848, 861, 862, 863, + 864, 849, 0, 239, 850, 851, 246, 852, 0, 809, + 750, 752, 751, 769, 770, 771, 772, 773, 774, 775, + 748, 857, 865, 866, 0, 264, 319, 271, 263, 518, + 0, 0, 2038, 2039, 2040, 0, 0, 230, 0, 0, + 0, 0, 0, 0, 0, 692, 707, 0, 721, 0, + 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 704, 705, + 0, 0, 0, 0, 804, 0, 706, 0, 0, 714, + 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, + 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, + 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, + 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, + 907, 908, 717, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, + 803, 0, 0, 561, 0, 0, 801, 0, 0, 0, + 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, + 469, 0, 0, 0, 854, 0, 467, 421, 538, 234, + 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, + 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, + 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, + 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, + 232, 525, 544, 288, 452, 431, 432, 570, 583, 571, + 573, 574, 214, 502, 533, 240, 479, 0, 0, 590, + 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, + 453, 267, 292, 0, 0, 257, 410, 855, 856, 255, + 591, 756, 555, 221, 0, 554, 403, 522, 531, 390, + 379, 220, 529, 388, 378, 332, 764, 765, 279, 305, + 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, + 0, 210, 0, 494, 543, 592, 235, 236, 238, 0, + 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, + 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, + 575, 576, 577, 578, 584, 582, 579, 580, 581, 572, + 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, + 540, 491, 0, 0, 0, 0, 814, 802, 727, 818, + 729, 815, 816, 724, 725, 728, 817, 593, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 0, 805, 713, 712, 0, + 720, 0, 746, 747, 749, 753, 754, 755, 766, 767, + 768, 776, 778, 779, 777, 780, 781, 782, 785, 786, + 787, 788, 783, 784, 789, 730, 734, 731, 732, 733, + 745, 735, 736, 737, 738, 739, 740, 741, 742, 743, + 744, 828, 829, 830, 831, 832, 833, 759, 763, 762, + 760, 761, 757, 758, 711, 201, 222, 364, 0, 450, + 287, 589, 551, 545, 208, 224, 819, 261, 820, 0, + 0, 824, 0, 0, 0, 826, 825, 0, 827, 793, + 792, 0, 0, 821, 822, 0, 823, 0, 0, 203, + 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, + 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, + 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, + 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, + 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, + 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, + 476, 834, 835, 836, 837, 838, 839, 840, 841, 298, + 534, 565, 532, 585, 559, 435, 374, 0, 0, 549, + 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, + 289, 252, 859, 0, 213, 247, 231, 258, 273, 276, + 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, + 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, + 372, 514, 515, 314, 513, 0, 723, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, + 0, 710, 0, 0, 0, 269, 715, 0, 0, 0, + 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, + 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, + 503, 417, 722, 366, 0, 0, 492, 396, 0, 0, + 0, 0, 0, 718, 719, 0, 0, 0, 0, 0, + 0, 2187, 0, 321, 249, 323, 206, 408, 493, 285, + 0, 97, 0, 0, 860, 844, 810, 811, 848, 861, + 862, 863, 864, 849, 0, 239, 850, 851, 246, 852, + 0, 809, 750, 752, 751, 769, 770, 771, 772, 773, + 774, 775, 748, 857, 865, 866, 2188, 264, 319, 271, + 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, + 0, 0, 0, 0, 0, 0, 0, 692, 707, 0, + 721, 0, 0, 0, 274, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 704, 705, 0, 0, 0, 0, 804, 0, 706, 0, + 0, 714, 867, 868, 869, 870, 871, 872, 873, 874, + 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, + 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 717, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, + 0, 449, 803, 0, 0, 561, 0, 0, 801, 0, + 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, + 407, 457, 469, 0, 0, 0, 854, 0, 467, 421, + 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, + 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, + 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, + 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 582, 571, 573, 214, 502, 533, 240, 479, 0, 0, - 589, 248, 499, 216, 530, 498, 389, 324, 325, 215, - 0, 453, 267, 292, 0, 0, 257, 410, 854, 855, - 255, 590, 755, 555, 221, 0, 554, 403, 522, 531, - 390, 379, 220, 529, 388, 378, 332, 763, 764, 279, + 583, 571, 573, 574, 214, 502, 533, 240, 479, 0, + 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, + 215, 0, 453, 267, 292, 0, 0, 257, 410, 855, + 856, 255, 591, 756, 555, 221, 0, 554, 403, 522, + 531, 390, 379, 220, 529, 388, 378, 332, 764, 765, + 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, + 209, 542, 0, 210, 0, 494, 543, 592, 235, 236, + 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, + 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, + 567, 569, 575, 576, 577, 578, 584, 582, 579, 580, + 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, + 468, 241, 540, 491, 0, 0, 0, 0, 814, 802, + 727, 818, 729, 815, 816, 724, 725, 728, 817, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 805, 713, + 712, 0, 720, 0, 746, 747, 749, 753, 754, 755, + 766, 767, 768, 776, 778, 779, 777, 780, 781, 782, + 785, 786, 787, 788, 783, 784, 789, 730, 734, 731, + 732, 733, 745, 735, 736, 737, 738, 739, 740, 741, + 742, 743, 744, 828, 829, 830, 831, 832, 833, 759, + 763, 762, 760, 761, 757, 758, 711, 201, 222, 364, + 0, 450, 287, 589, 551, 545, 208, 224, 819, 261, + 820, 0, 0, 824, 0, 0, 0, 826, 825, 0, + 827, 793, 792, 0, 0, 821, 822, 0, 823, 0, + 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, + 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, + 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, + 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, + 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, + 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, + 558, 564, 476, 834, 835, 836, 837, 838, 839, 840, + 841, 298, 534, 565, 532, 585, 559, 435, 374, 0, + 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, + 228, 462, 289, 252, 859, 0, 213, 247, 231, 258, + 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, + 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, + 0, 392, 372, 514, 515, 314, 88, 513, 0, 723, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, + 0, 0, 0, 0, 710, 0, 0, 0, 269, 715, + 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, + 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, + 315, 381, 423, 503, 417, 722, 366, 0, 0, 492, + 396, 0, 0, 0, 0, 0, 718, 719, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, + 408, 493, 285, 0, 97, 0, 0, 860, 844, 810, + 811, 848, 861, 862, 863, 864, 849, 0, 239, 850, + 851, 246, 852, 0, 809, 750, 752, 751, 769, 770, + 771, 772, 773, 774, 775, 748, 857, 865, 866, 0, + 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, + 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, + 692, 707, 0, 721, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 704, 705, 0, 0, 0, 0, 804, + 0, 706, 0, 0, 714, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, + 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, + 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, + 902, 903, 904, 905, 906, 907, 908, 717, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, + 397, 256, 0, 0, 449, 803, 0, 0, 561, 0, + 0, 801, 0, 0, 0, 0, 361, 0, 328, 202, + 226, 0, 0, 407, 457, 469, 0, 0, 0, 854, + 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, + 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, + 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, + 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, + 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, + 431, 432, 570, 583, 571, 573, 574, 214, 502, 533, + 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, + 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, + 257, 410, 855, 856, 255, 591, 756, 555, 221, 0, + 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, + 332, 764, 765, 279, 305, 444, 371, 445, 304, 306, + 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, + 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, + 548, 560, 566, 567, 569, 575, 576, 577, 578, 584, + 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, + 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, + 0, 814, 802, 727, 818, 729, 815, 816, 724, 725, + 728, 817, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 0, 805, 713, 712, 0, 720, 0, 746, 747, 749, + 753, 754, 755, 766, 767, 768, 776, 778, 779, 777, + 780, 781, 782, 785, 786, 787, 788, 783, 784, 789, + 730, 734, 731, 732, 733, 745, 735, 736, 737, 738, + 739, 740, 741, 742, 743, 744, 828, 829, 830, 831, + 832, 833, 759, 763, 762, 760, 761, 757, 758, 711, + 201, 222, 364, 96, 450, 287, 589, 551, 545, 208, + 224, 819, 261, 820, 0, 0, 824, 0, 0, 0, + 826, 825, 0, 827, 793, 792, 0, 0, 821, 822, + 0, 823, 0, 0, 203, 204, 211, 223, 233, 237, + 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, + 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, + 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, + 524, 526, 539, 558, 564, 476, 834, 835, 836, 837, + 838, 839, 840, 841, 298, 534, 565, 532, 585, 559, + 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, + 0, 550, 497, 228, 462, 289, 252, 859, 0, 213, + 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, + 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, + 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, + 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 0, 0, 0, 710, 0, 0, 0, + 269, 715, 0, 0, 0, 362, 266, 0, 0, 425, + 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 722, 366, 0, + 0, 492, 396, 0, 0, 0, 0, 0, 718, 719, + 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, + 323, 206, 408, 493, 285, 0, 97, 0, 0, 860, + 844, 810, 811, 848, 861, 862, 863, 864, 849, 0, + 239, 850, 851, 246, 852, 0, 809, 750, 752, 751, + 769, 770, 771, 772, 773, 774, 775, 748, 857, 865, + 866, 0, 264, 319, 271, 263, 518, 0, 0, 0, + 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, + 0, 0, 692, 707, 0, 721, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 704, 705, 0, 0, 0, + 0, 804, 0, 706, 0, 0, 714, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, + 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, + 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, + 900, 901, 902, 903, 904, 905, 906, 907, 908, 717, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 296, 0, 397, 256, 0, 0, 449, 803, 0, 0, + 561, 0, 0, 801, 0, 0, 0, 0, 361, 0, + 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, + 0, 854, 0, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 3550, 0, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 588, 227, 259, + 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, + 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, + 288, 452, 431, 432, 570, 583, 571, 573, 574, 214, + 502, 533, 240, 479, 0, 0, 590, 248, 499, 216, + 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, + 0, 0, 257, 410, 855, 856, 255, 591, 756, 555, + 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, + 388, 378, 332, 764, 765, 279, 305, 444, 371, 445, + 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, + 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, + 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, + 517, 536, 548, 560, 566, 567, 569, 575, 576, 577, + 578, 584, 582, 579, 580, 581, 572, 402, 309, 490, + 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, + 0, 0, 0, 814, 802, 727, 818, 729, 815, 816, + 724, 725, 728, 817, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 805, 713, 712, 0, 720, 0, 746, + 747, 749, 753, 754, 755, 766, 767, 768, 776, 778, + 779, 777, 780, 781, 782, 785, 786, 787, 788, 783, + 784, 789, 730, 734, 731, 732, 733, 745, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 828, 829, + 830, 831, 832, 833, 759, 763, 762, 760, 761, 757, + 758, 711, 201, 222, 364, 0, 450, 287, 589, 551, + 545, 208, 224, 819, 261, 820, 0, 0, 824, 0, + 0, 0, 826, 825, 0, 827, 793, 792, 0, 0, + 821, 822, 0, 823, 0, 0, 203, 204, 211, 223, + 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, + 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, + 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, + 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, + 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, + 496, 501, 524, 526, 539, 558, 564, 476, 834, 835, + 836, 837, 838, 839, 840, 841, 298, 534, 565, 532, + 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, + 303, 318, 0, 550, 497, 228, 462, 289, 252, 859, + 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, + 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, + 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, + 314, 513, 0, 723, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 411, 0, 0, 0, 0, 710, 0, + 0, 0, 269, 715, 0, 0, 0, 362, 266, 0, + 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, + 281, 272, 268, 251, 315, 381, 423, 503, 417, 722, + 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, + 718, 719, 0, 0, 0, 0, 0, 0, 0, 0, + 321, 249, 323, 206, 408, 493, 285, 0, 97, 0, + 1569, 860, 844, 810, 811, 848, 861, 862, 863, 864, + 849, 0, 239, 850, 851, 246, 852, 0, 809, 750, + 752, 751, 769, 770, 771, 772, 773, 774, 775, 748, + 857, 865, 866, 0, 264, 319, 271, 263, 518, 0, + 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, + 0, 0, 0, 0, 692, 707, 0, 721, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 704, 705, 0, + 0, 0, 0, 804, 0, 706, 0, 0, 714, 867, + 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, + 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, + 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, + 908, 717, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 296, 0, 397, 256, 0, 0, 449, 803, + 0, 0, 561, 0, 0, 801, 0, 0, 0, 0, + 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, + 0, 0, 0, 854, 0, 467, 421, 538, 234, 283, + 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, + 447, 535, 562, 563, 262, 401, 547, 507, 556, 588, + 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, + 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, + 525, 544, 288, 452, 431, 432, 570, 583, 571, 573, + 574, 214, 502, 533, 240, 479, 0, 0, 590, 248, + 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, + 267, 292, 0, 0, 257, 410, 855, 856, 255, 591, + 756, 555, 221, 0, 554, 403, 522, 531, 390, 379, + 220, 529, 388, 378, 332, 764, 765, 279, 305, 444, + 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, + 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, + 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, + 448, 0, 517, 536, 548, 560, 566, 567, 569, 575, + 576, 577, 578, 584, 582, 579, 580, 581, 572, 402, + 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, + 491, 0, 0, 0, 0, 814, 802, 727, 818, 729, + 815, 816, 724, 725, 728, 817, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 805, 713, 712, 0, 720, + 0, 746, 747, 749, 753, 754, 755, 766, 767, 768, + 776, 778, 779, 777, 780, 781, 782, 785, 786, 787, + 788, 783, 784, 789, 730, 734, 731, 732, 733, 745, + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, + 828, 829, 830, 831, 832, 833, 759, 763, 762, 760, + 761, 757, 758, 711, 201, 222, 364, 0, 450, 287, + 589, 551, 545, 208, 224, 819, 261, 820, 0, 0, + 824, 0, 0, 0, 826, 825, 0, 827, 793, 792, + 0, 0, 821, 822, 0, 823, 0, 0, 203, 204, + 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, + 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, + 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, + 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, + 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, + 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, + 834, 835, 836, 837, 838, 839, 840, 841, 298, 534, + 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, + 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, + 252, 859, 0, 213, 247, 231, 258, 273, 276, 322, + 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, + 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, + 514, 515, 314, 513, 0, 723, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, + 710, 0, 0, 0, 269, 715, 0, 0, 0, 362, + 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, + 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, + 417, 722, 366, 0, 0, 492, 396, 0, 0, 0, + 0, 0, 718, 719, 0, 0, 0, 0, 0, 0, + 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, + 97, 0, 0, 860, 844, 810, 811, 848, 861, 862, + 863, 864, 849, 0, 239, 850, 851, 246, 852, 0, + 809, 750, 752, 751, 769, 770, 771, 772, 773, 774, + 775, 748, 857, 865, 866, 0, 264, 319, 271, 263, + 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, + 0, 0, 0, 0, 0, 0, 692, 707, 0, 721, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 704, + 705, 948, 0, 0, 0, 804, 0, 706, 0, 0, + 714, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, + 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, + 906, 907, 908, 717, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, + 449, 803, 0, 0, 561, 0, 0, 801, 0, 0, + 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, + 457, 469, 0, 0, 0, 854, 0, 467, 421, 538, + 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, + 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, + 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, + 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, + 243, 232, 525, 544, 288, 452, 431, 432, 570, 583, + 571, 573, 574, 214, 502, 533, 240, 479, 0, 0, + 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 0, 453, 267, 292, 0, 0, 257, 410, 855, 856, + 255, 591, 756, 555, 221, 0, 554, 403, 522, 531, + 390, 379, 220, 529, 388, 378, 332, 764, 765, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 591, 235, 236, 238, + 542, 0, 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, - 569, 574, 575, 576, 577, 583, 581, 578, 579, 580, + 569, 575, 576, 577, 578, 584, 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, - 241, 540, 491, 0, 0, 0, 0, 813, 801, 726, - 817, 728, 814, 815, 723, 724, 727, 816, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 0, 804, 712, 711, - 0, 719, 0, 745, 746, 748, 752, 753, 754, 765, - 766, 767, 775, 777, 778, 776, 779, 780, 781, 784, - 785, 786, 787, 782, 783, 788, 729, 733, 730, 731, - 732, 744, 734, 735, 736, 737, 738, 739, 740, 741, - 742, 743, 827, 828, 829, 830, 831, 832, 758, 762, - 761, 759, 760, 756, 757, 710, 201, 222, 364, 0, - 450, 287, 588, 551, 545, 208, 224, 818, 261, 819, - 0, 0, 823, 0, 0, 0, 825, 824, 0, 826, - 792, 791, 0, 0, 820, 821, 0, 822, 0, 0, + 241, 540, 491, 0, 0, 0, 0, 814, 802, 727, + 818, 729, 815, 816, 724, 725, 728, 817, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 805, 713, 712, + 0, 720, 0, 746, 747, 749, 753, 754, 755, 766, + 767, 768, 776, 778, 779, 777, 780, 781, 782, 785, + 786, 787, 788, 783, 784, 789, 730, 734, 731, 732, + 733, 745, 735, 736, 737, 738, 739, 740, 741, 742, + 743, 744, 828, 829, 830, 831, 832, 833, 759, 763, + 762, 760, 761, 757, 758, 711, 201, 222, 364, 0, + 450, 287, 589, 551, 545, 208, 224, 819, 261, 820, + 0, 0, 824, 0, 0, 0, 826, 825, 0, 827, + 793, 792, 0, 0, 821, 822, 0, 823, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, - 564, 476, 833, 834, 835, 836, 837, 838, 839, 840, - 298, 534, 565, 532, 584, 559, 435, 374, 0, 0, + 564, 476, 834, 835, 836, 837, 838, 839, 840, 841, + 298, 534, 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, - 462, 289, 252, 858, 0, 213, 247, 231, 258, 273, + 462, 289, 252, 859, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, - 242, 480, 504, 505, 506, 508, 391, 265, 428, 0, - 392, 372, 514, 515, 314, 88, 513, 0, 722, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, - 0, 0, 0, 709, 0, 0, 0, 269, 714, 0, - 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, - 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, - 381, 423, 503, 417, 721, 366, 0, 0, 492, 396, - 0, 0, 0, 0, 0, 717, 718, 0, 0, 0, - 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, - 493, 285, 0, 97, 0, 0, 859, 843, 809, 810, - 847, 860, 861, 862, 863, 848, 0, 239, 849, 850, - 246, 851, 0, 808, 749, 751, 750, 768, 769, 770, - 771, 772, 773, 774, 747, 856, 864, 865, 0, 264, - 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 691, - 706, 0, 720, 0, 0, 0, 274, 0, 0, 0, + 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, + 0, 372, 514, 515, 314, 513, 0, 723, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, + 0, 0, 710, 0, 0, 0, 269, 715, 0, 0, + 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, + 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, + 423, 503, 417, 722, 366, 0, 0, 492, 396, 0, + 0, 0, 0, 0, 718, 719, 0, 0, 0, 0, + 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, + 285, 0, 97, 0, 0, 860, 844, 810, 811, 848, + 861, 862, 863, 864, 849, 0, 239, 850, 851, 246, + 852, 0, 809, 750, 752, 751, 769, 770, 771, 772, + 773, 774, 775, 748, 857, 865, 866, 0, 264, 319, + 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, + 230, 0, 0, 0, 0, 0, 0, 0, 692, 707, + 0, 721, 0, 0, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 704, 705, 0, 0, 0, 0, 804, 0, 706, + 0, 0, 714, 867, 868, 869, 870, 871, 872, 873, + 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, + 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, + 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, + 904, 905, 906, 907, 908, 717, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, + 0, 0, 449, 803, 0, 0, 561, 0, 0, 801, + 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, + 0, 407, 457, 469, 0, 0, 0, 854, 0, 467, + 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, + 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, + 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, + 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, + 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, + 570, 583, 571, 573, 574, 214, 502, 533, 240, 479, + 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, + 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, + 855, 856, 255, 591, 756, 555, 221, 0, 554, 403, + 522, 531, 390, 379, 220, 529, 388, 378, 332, 764, + 765, 279, 305, 444, 371, 445, 304, 306, 399, 398, + 400, 209, 542, 0, 210, 0, 494, 543, 592, 235, + 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, + 566, 567, 569, 575, 576, 577, 578, 584, 582, 579, + 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, + 420, 468, 241, 540, 491, 0, 0, 0, 0, 814, + 802, 727, 818, 729, 815, 816, 724, 725, 728, 817, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 805, + 713, 712, 0, 720, 0, 746, 747, 749, 753, 754, + 755, 766, 767, 768, 776, 778, 779, 777, 780, 781, + 782, 785, 786, 787, 788, 783, 784, 789, 730, 734, + 731, 732, 733, 745, 735, 736, 737, 738, 739, 740, + 741, 742, 743, 744, 828, 829, 830, 831, 832, 833, + 759, 763, 762, 760, 761, 757, 758, 711, 201, 222, + 364, 0, 450, 287, 589, 551, 545, 208, 224, 819, + 261, 820, 0, 0, 824, 0, 0, 0, 826, 825, + 0, 827, 793, 792, 0, 0, 821, 822, 0, 823, + 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, + 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, + 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, + 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, + 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, + 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, + 539, 558, 564, 476, 834, 835, 836, 837, 838, 839, + 840, 841, 298, 534, 565, 532, 585, 559, 435, 374, + 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, + 497, 228, 462, 289, 252, 859, 0, 213, 247, 231, + 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, + 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, + 428, 392, 0, 372, 514, 515, 314, 513, 0, 723, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, + 0, 0, 0, 0, 710, 0, 0, 0, 269, 715, + 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, + 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, + 315, 381, 423, 503, 417, 722, 366, 0, 0, 492, + 396, 0, 0, 0, 0, 0, 718, 719, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, + 408, 493, 285, 0, 97, 0, 0, 860, 844, 810, + 811, 848, 861, 862, 863, 864, 849, 0, 239, 850, + 851, 246, 852, 0, 809, 750, 752, 751, 769, 770, + 771, 772, 773, 774, 775, 748, 857, 865, 866, 0, + 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, + 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, + 0, 707, 0, 721, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 704, 705, 0, 0, 0, 0, 804, + 0, 706, 0, 0, 714, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, + 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, + 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, + 902, 903, 904, 905, 906, 907, 908, 717, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, + 397, 256, 0, 0, 449, 803, 0, 0, 561, 0, + 0, 801, 0, 0, 0, 0, 361, 0, 328, 202, + 226, 0, 0, 407, 457, 469, 0, 0, 0, 854, + 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, + 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, + 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, + 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, + 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, + 431, 432, 570, 583, 571, 573, 574, 214, 502, 533, + 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, + 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, + 257, 410, 855, 856, 255, 591, 756, 555, 221, 0, + 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, + 332, 764, 765, 279, 305, 444, 371, 445, 304, 306, + 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, + 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, + 548, 560, 566, 567, 569, 575, 576, 577, 578, 584, + 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, + 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, + 0, 814, 802, 727, 818, 729, 815, 816, 724, 725, + 728, 817, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 0, 805, 713, 712, 0, 720, 0, 746, 747, 749, + 753, 754, 755, 766, 767, 768, 776, 778, 779, 777, + 780, 781, 782, 785, 786, 787, 788, 783, 784, 789, + 730, 734, 731, 732, 733, 745, 735, 736, 737, 738, + 739, 740, 741, 742, 743, 744, 828, 829, 830, 831, + 832, 833, 759, 763, 762, 760, 761, 757, 758, 711, + 201, 222, 364, 0, 450, 287, 589, 551, 545, 208, + 224, 819, 261, 820, 0, 0, 824, 0, 0, 0, + 826, 825, 0, 827, 793, 792, 0, 0, 821, 822, + 0, 823, 0, 0, 203, 204, 211, 223, 233, 237, + 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, + 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, + 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, + 524, 526, 539, 558, 564, 476, 834, 835, 836, 837, + 838, 839, 840, 841, 298, 534, 565, 532, 585, 559, + 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, + 0, 550, 497, 228, 462, 289, 252, 859, 0, 213, + 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, + 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, + 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, + 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, + 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, + 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, + 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, + 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, + 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, + 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, + 0, 0, 0, 0, 230, 0, 0, 0, 0, 1385, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1394, + 1393, 1395, 1396, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, + 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, + 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 588, 227, 259, + 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, + 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, + 288, 452, 431, 432, 570, 583, 571, 573, 574, 214, + 502, 533, 240, 479, 0, 0, 590, 248, 499, 216, + 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, + 0, 0, 257, 410, 527, 528, 255, 591, 229, 555, + 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, + 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, + 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, + 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, + 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, + 517, 536, 548, 560, 566, 567, 569, 575, 576, 577, + 578, 584, 582, 579, 580, 581, 572, 402, 309, 490, + 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, + 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, + 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, + 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, + 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, + 446, 0, 201, 222, 364, 0, 450, 287, 589, 551, + 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, + 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, + 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, + 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, + 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, + 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, + 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, + 441, 442, 312, 313, 586, 587, 298, 534, 565, 532, + 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, + 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, + 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, + 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, + 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, + 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, + 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, + 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, + 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, + 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, + 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, + 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, + 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, + 0, 0, 0, 0, 0, 0, 230, 0, 1021, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, + 0, 1020, 561, 0, 0, 0, 0, 0, 1017, 1018, + 361, 977, 328, 202, 226, 1011, 1015, 407, 457, 469, + 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, + 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, + 447, 535, 562, 563, 262, 401, 547, 507, 556, 588, + 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, + 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, + 525, 544, 288, 452, 431, 432, 570, 583, 571, 573, + 574, 214, 502, 533, 240, 479, 0, 0, 590, 248, + 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 591, + 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, + 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, + 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, + 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, + 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, + 448, 0, 517, 536, 548, 560, 566, 567, 569, 575, + 576, 577, 578, 584, 582, 579, 580, 581, 572, 402, + 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, + 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 611, 380, 481, 537, 333, 345, 348, + 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, + 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, + 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, + 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, + 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, + 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, + 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, + 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, + 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, + 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, + 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, + 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, + 299, 300, 441, 442, 312, 313, 586, 587, 298, 534, + 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, + 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, + 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, + 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, + 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, + 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, + 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, + 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, + 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, + 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, + 0, 0, 0, 1532, 844, 0, 0, 1529, 0, 0, + 0, 0, 1527, 0, 239, 1528, 1526, 246, 1531, 0, + 809, 347, 356, 355, 336, 337, 339, 341, 346, 353, + 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, + 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, + 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, + 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, + 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, + 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, + 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, + 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, + 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, + 243, 232, 525, 544, 288, 452, 431, 432, 570, 583, + 571, 573, 574, 214, 502, 533, 240, 479, 0, 0, + 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, + 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, + 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, + 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, + 542, 0, 210, 0, 494, 543, 592, 235, 236, 238, + 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, + 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, + 569, 575, 576, 577, 578, 584, 582, 579, 580, 581, + 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, + 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 611, 380, 481, 537, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, + 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, + 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, + 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, + 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, + 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, + 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, + 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, + 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, + 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, + 564, 476, 299, 300, 441, 442, 312, 313, 586, 587, + 298, 534, 565, 532, 585, 559, 435, 374, 0, 0, + 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, + 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, + 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, + 242, 480, 504, 505, 506, 508, 391, 265, 428, 0, + 392, 372, 514, 515, 314, 88, 513, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, + 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, + 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, + 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, + 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, + 493, 285, 0, 97, 0, 0, 0, 199, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, + 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, + 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, + 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, + 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, + 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, + 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, + 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, + 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, + 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, + 401, 547, 507, 556, 588, 227, 259, 415, 500, 541, + 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, + 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, + 432, 570, 583, 571, 573, 574, 214, 502, 533, 240, + 479, 0, 0, 590, 248, 499, 216, 530, 498, 389, + 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, + 410, 527, 528, 255, 591, 229, 555, 221, 0, 554, + 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, + 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, + 398, 400, 209, 542, 0, 210, 0, 494, 543, 592, + 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, + 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, + 560, 566, 567, 569, 575, 576, 577, 578, 584, 582, + 579, 580, 581, 572, 402, 309, 490, 331, 369, 0, + 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 593, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 611, 380, + 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, + 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, + 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, + 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, + 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, + 222, 364, 96, 450, 287, 589, 551, 545, 208, 224, + 0, 261, 0, 0, 0, 0, 0, 0, 2174, 0, + 0, 2173, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, + 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, + 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, + 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, + 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, + 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, + 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, + 313, 586, 587, 298, 534, 565, 532, 585, 559, 435, + 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, + 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, + 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, + 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, + 265, 428, 1588, 0, 372, 514, 515, 314, 513, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 1590, 0, 0, 0, 0, 269, + 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, + 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, + 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, + 206, 408, 493, 285, 0, 0, 0, 0, 1592, 670, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, + 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, + 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, + 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, + 0, 0, 0, 230, 0, 0, 0, 1366, 0, 1367, + 1368, 0, 0, 0, 0, 0, 0, 0, 274, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, + 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, + 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, + 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, + 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, + 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, + 563, 262, 401, 547, 507, 556, 588, 227, 259, 415, + 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, + 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, + 452, 431, 432, 570, 583, 571, 573, 574, 214, 502, + 533, 240, 479, 0, 0, 590, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 527, 528, 255, 591, 229, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 575, 576, 577, 578, + 584, 582, 579, 580, 581, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, + 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, + 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, + 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, + 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, + 0, 201, 222, 364, 0, 450, 287, 589, 551, 545, + 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, + 442, 312, 313, 586, 587, 298, 534, 565, 532, 585, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 0, 392, 372, 514, 515, 314, + 88, 513, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, + 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, + 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, + 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, + 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 321, 249, 323, 206, 408, 493, 285, 0, 97, 0, + 1569, 0, 670, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, + 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, + 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, + 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, + 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, + 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, + 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, + 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, + 447, 535, 562, 563, 262, 401, 547, 507, 556, 588, + 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, + 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, + 525, 544, 288, 452, 431, 432, 570, 583, 571, 573, + 574, 214, 502, 533, 240, 479, 0, 0, 590, 248, + 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 591, + 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, + 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, + 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, + 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, + 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, + 448, 0, 517, 536, 548, 560, 566, 567, 569, 575, + 576, 577, 578, 584, 582, 579, 580, 581, 572, 402, + 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, + 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 611, 380, 481, 537, 333, 345, 348, + 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, + 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, + 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, + 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, + 330, 375, 446, 0, 201, 222, 364, 96, 450, 287, + 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, + 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, + 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, + 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, + 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, + 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, + 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, + 299, 300, 441, 442, 312, 313, 586, 587, 298, 534, + 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, + 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, + 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, + 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, + 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, + 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, + 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, + 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, + 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, + 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, + 97, 0, 0, 0, 199, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, + 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, + 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, + 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, + 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, + 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, + 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, + 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, + 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, + 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, + 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, + 243, 232, 525, 544, 288, 452, 431, 432, 570, 583, + 571, 573, 574, 214, 502, 533, 240, 479, 0, 0, + 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, + 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, + 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, + 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, + 542, 0, 210, 0, 494, 543, 592, 235, 236, 238, + 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, + 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, + 569, 575, 576, 577, 578, 584, 582, 579, 580, 581, + 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, + 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 611, 380, 481, 537, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, + 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, + 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, + 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, + 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, + 0, 0, 0, 0, 0, 2174, 0, 0, 2173, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, + 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, + 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, + 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, + 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, + 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, + 564, 476, 299, 300, 441, 442, 312, 313, 586, 587, + 298, 534, 565, 532, 585, 559, 435, 374, 0, 0, + 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, + 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, + 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, + 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, + 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, + 0, 2125, 0, 0, 0, 0, 269, 0, 0, 0, + 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, + 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, + 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, + 285, 0, 0, 0, 0, 1773, 199, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, + 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, + 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, + 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, + 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, + 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, + 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, + 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, + 2123, 466, 368, 523, 447, 535, 562, 563, 262, 401, + 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, + 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, + 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, + 570, 583, 571, 573, 574, 214, 502, 533, 240, 479, + 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, + 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, + 527, 528, 255, 591, 229, 555, 221, 0, 554, 403, + 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, + 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, + 400, 209, 542, 0, 210, 0, 494, 543, 592, 235, + 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, + 566, 567, 569, 575, 576, 577, 578, 584, 582, 579, + 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, + 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 611, 380, 481, + 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, + 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, + 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, + 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, + 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, + 364, 0, 450, 287, 589, 551, 545, 208, 224, 0, + 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, + 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, + 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, + 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, + 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, + 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, + 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, + 586, 587, 298, 534, 565, 532, 585, 559, 435, 374, + 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, + 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, + 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, + 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, + 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, + 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, + 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, + 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, + 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, + 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, + 408, 493, 285, 0, 0, 0, 0, 0, 670, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, + 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, + 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, + 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, + 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 971, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, + 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, + 0, 0, 0, 0, 0, 0, 361, 977, 328, 202, + 226, 975, 0, 407, 457, 469, 0, 0, 0, 254, + 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, + 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, + 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, + 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, + 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, + 431, 432, 570, 583, 571, 573, 574, 214, 502, 533, + 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, + 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, + 257, 410, 527, 528, 255, 591, 229, 555, 221, 0, + 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, + 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, + 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, + 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, + 548, 560, 566, 567, 569, 575, 576, 577, 578, 584, + 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, + 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, + 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, + 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, + 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, + 201, 222, 364, 0, 450, 287, 589, 551, 545, 208, + 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, + 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, + 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, + 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, + 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, + 312, 313, 586, 587, 298, 534, 565, 532, 585, 559, + 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, + 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, + 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, + 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, + 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 0, 0, 2125, 0, 0, 0, 0, + 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, + 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, + 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, + 323, 206, 408, 493, 285, 0, 0, 0, 0, 1773, + 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, + 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, + 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, + 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, + 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, + 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 588, 227, 259, + 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, + 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, + 288, 452, 431, 432, 570, 583, 571, 573, 574, 214, + 502, 533, 240, 479, 0, 0, 590, 248, 499, 216, + 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, + 0, 0, 257, 410, 527, 528, 255, 591, 229, 555, + 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, + 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, + 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, + 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, + 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, + 517, 536, 548, 560, 566, 567, 569, 575, 576, 577, + 578, 584, 582, 579, 580, 581, 572, 402, 309, 490, + 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, + 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, + 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, + 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, + 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, + 446, 0, 201, 222, 364, 0, 450, 287, 589, 551, + 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, + 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, + 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, + 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, + 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, + 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, + 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, + 441, 442, 312, 313, 586, 587, 298, 534, 565, 532, + 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, + 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, + 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, + 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, + 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, + 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, + 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, + 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, + 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, + 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, + 1569, 0, 670, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, + 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, + 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, + 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, + 0, 0, 561, 0, 0, 0, 3460, 0, 0, 0, + 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, + 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, + 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, + 447, 535, 562, 563, 262, 401, 547, 507, 556, 588, + 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, + 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, + 525, 544, 288, 452, 431, 432, 570, 583, 571, 573, + 574, 214, 502, 533, 240, 479, 0, 0, 590, 248, + 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 591, + 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, + 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, + 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, + 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, + 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, + 448, 0, 517, 536, 548, 560, 566, 567, 569, 575, + 576, 577, 578, 584, 582, 579, 580, 581, 572, 402, + 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, + 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 611, 380, 481, 537, 333, 345, 348, + 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, + 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, + 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, + 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, + 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, + 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, + 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, + 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, + 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, + 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, + 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, + 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, + 299, 300, 441, 442, 312, 313, 586, 587, 298, 534, + 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, + 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, + 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, + 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, + 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, + 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, + 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, + 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, + 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, + 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, + 0, 0, 0, 1958, 670, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, + 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, + 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, + 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1959, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, + 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, + 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, + 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, + 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, + 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, + 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, + 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, + 243, 232, 525, 544, 288, 452, 431, 432, 570, 583, + 571, 573, 574, 214, 502, 533, 240, 479, 0, 0, + 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, + 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, + 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, + 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, + 542, 0, 210, 0, 494, 543, 592, 235, 236, 238, + 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, + 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, + 569, 575, 576, 577, 578, 584, 582, 579, 580, 581, + 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, + 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 611, 380, 481, 537, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, + 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, + 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, + 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, + 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, + 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, + 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, + 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, + 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, + 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, + 564, 476, 299, 300, 441, 442, 312, 313, 586, 587, + 298, 534, 565, 532, 585, 559, 435, 374, 0, 0, + 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, + 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, + 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, + 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, + 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, + 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, + 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, + 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, + 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, + 285, 0, 0, 0, 0, 2567, 670, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, + 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, + 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, + 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2568, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, + 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, + 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, + 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, + 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, + 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, + 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, + 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, + 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, + 570, 583, 571, 573, 574, 214, 502, 533, 240, 479, + 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, + 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, + 527, 528, 255, 591, 229, 555, 221, 0, 554, 403, + 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, + 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, + 400, 209, 542, 0, 210, 0, 494, 543, 592, 235, + 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, + 566, 567, 569, 575, 576, 577, 578, 584, 582, 579, + 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, + 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 611, 380, 481, + 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, + 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, + 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, + 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, + 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, + 364, 0, 450, 287, 589, 551, 545, 208, 224, 0, + 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, + 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, + 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, + 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, + 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, + 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, + 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, + 586, 587, 298, 534, 565, 532, 585, 559, 435, 374, + 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, + 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, + 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, + 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, + 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, + 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, + 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, + 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, + 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, + 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, + 408, 493, 285, 0, 0, 0, 0, 0, 670, 0, + 0, 0, 0, 2552, 0, 0, 0, 0, 239, 0, + 0, 246, 2553, 0, 0, 347, 356, 355, 336, 337, + 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, + 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, + 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, + 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, + 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, + 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, + 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, + 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, + 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, + 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, + 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, + 431, 432, 570, 583, 571, 573, 574, 214, 502, 533, + 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, + 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, + 257, 410, 527, 528, 255, 591, 229, 555, 221, 0, + 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, + 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, + 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, + 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, + 548, 560, 566, 567, 569, 575, 576, 577, 578, 584, + 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, + 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, + 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, + 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, + 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, + 201, 222, 364, 0, 450, 287, 589, 551, 545, 208, + 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, + 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, + 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, + 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, + 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, + 312, 313, 586, 587, 298, 534, 565, 532, 585, 559, + 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, + 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, + 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, + 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, + 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, + 269, 1611, 0, 0, 0, 362, 266, 0, 0, 425, + 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, + 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, + 323, 206, 408, 493, 285, 0, 0, 0, 0, 1610, + 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, + 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, + 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, + 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, + 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, + 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 588, 227, 259, + 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, + 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, + 288, 452, 431, 432, 570, 583, 571, 573, 574, 214, + 502, 533, 240, 479, 0, 0, 590, 248, 499, 216, + 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, + 0, 0, 257, 410, 527, 528, 255, 591, 229, 555, + 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, + 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, + 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, + 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, + 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, + 517, 536, 548, 560, 566, 567, 569, 575, 576, 577, + 578, 584, 582, 579, 580, 581, 572, 402, 309, 490, + 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, + 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, + 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, + 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, + 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, + 446, 0, 201, 222, 364, 0, 450, 287, 589, 551, + 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, + 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, + 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, + 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, + 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, + 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, + 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, + 441, 442, 312, 313, 586, 587, 298, 534, 565, 532, + 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, + 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, + 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, + 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, + 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, + 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, + 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, + 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, + 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, + 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, + 0, 0, 672, 673, 674, 0, 0, 0, 0, 0, + 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, + 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, + 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, + 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, + 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, + 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, + 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, + 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, + 447, 535, 562, 563, 262, 401, 547, 507, 556, 588, + 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, + 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, + 525, 544, 288, 452, 431, 432, 570, 583, 571, 573, + 574, 214, 502, 533, 240, 479, 0, 0, 590, 248, + 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 591, + 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, + 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, + 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, + 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, + 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, + 448, 0, 517, 536, 548, 560, 566, 567, 569, 575, + 576, 577, 578, 584, 582, 579, 580, 581, 572, 402, + 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, + 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 611, 380, 481, 537, 333, 345, 348, + 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, + 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, + 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, + 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, + 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, + 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, + 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, + 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, + 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, + 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, + 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, + 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, + 299, 300, 441, 442, 312, 313, 586, 587, 298, 534, + 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, + 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, + 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, + 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, + 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, + 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, + 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, + 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, + 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, + 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, + 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, + 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, + 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, + 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, + 449, 0, 0, 0, 561, 0, 0, 0, 3584, 0, + 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, + 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, + 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, + 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, + 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, + 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, + 243, 232, 525, 544, 288, 452, 431, 432, 570, 583, + 571, 573, 574, 214, 502, 533, 240, 479, 0, 0, + 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, + 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, + 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, + 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, + 542, 0, 210, 0, 494, 543, 592, 235, 236, 238, + 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, + 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, + 569, 575, 576, 577, 578, 584, 582, 579, 580, 581, + 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, + 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 611, 380, 481, 537, 333, + 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, + 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, + 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, + 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, + 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, + 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, + 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, + 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, + 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, + 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, + 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, + 564, 476, 299, 300, 441, 442, 312, 313, 586, 587, + 298, 534, 565, 532, 585, 559, 435, 374, 0, 0, + 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, + 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, + 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, + 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, + 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, + 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, + 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, + 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, + 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, + 285, 0, 0, 0, 0, 1773, 199, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, + 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, + 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, + 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 703, 704, 0, 0, 0, 0, 803, 0, - 705, 0, 0, 713, 866, 867, 868, 869, 870, 871, - 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, - 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, - 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, - 902, 903, 904, 905, 906, 907, 716, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, - 256, 0, 0, 449, 802, 0, 0, 561, 0, 0, - 800, 0, 0, 0, 0, 361, 0, 328, 202, 226, - 0, 0, 407, 457, 469, 0, 0, 0, 853, 0, - 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, - 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, - 401, 547, 507, 556, 587, 227, 259, 415, 500, 541, - 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, - 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, - 432, 570, 582, 571, 573, 214, 502, 533, 240, 479, - 0, 0, 589, 248, 499, 216, 530, 498, 389, 324, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, + 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, + 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, + 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, + 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, + 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, + 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, + 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, + 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, + 570, 583, 571, 573, 574, 214, 502, 533, 240, 479, + 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 854, 855, 255, 590, 755, 555, 221, 0, 554, 403, - 522, 531, 390, 379, 220, 529, 388, 378, 332, 763, - 764, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 591, 235, + 527, 528, 255, 591, 229, 555, 221, 0, 554, 403, + 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, + 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, + 400, 209, 542, 0, 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, - 566, 567, 569, 574, 575, 576, 577, 583, 581, 578, - 579, 580, 572, 402, 309, 490, 331, 369, 0, 0, - 420, 468, 241, 540, 491, 0, 0, 0, 0, 813, - 801, 726, 817, 728, 814, 815, 723, 724, 727, 816, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 608, 609, 0, 804, - 712, 711, 0, 719, 0, 745, 746, 748, 752, 753, - 754, 765, 766, 767, 775, 777, 778, 776, 779, 780, - 781, 784, 785, 786, 787, 782, 783, 788, 729, 733, - 730, 731, 732, 744, 734, 735, 736, 737, 738, 739, - 740, 741, 742, 743, 827, 828, 829, 830, 831, 832, - 758, 762, 761, 759, 760, 756, 757, 710, 201, 222, - 364, 96, 450, 287, 588, 551, 545, 208, 224, 818, - 261, 819, 0, 0, 823, 0, 0, 0, 825, 824, - 0, 826, 792, 791, 0, 0, 820, 821, 0, 822, + 566, 567, 569, 575, 576, 577, 578, 584, 582, 579, + 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, + 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 611, 380, 481, + 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, + 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, + 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, + 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, + 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, + 364, 0, 450, 287, 589, 551, 545, 208, 224, 0, + 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, - 539, 558, 564, 476, 833, 834, 835, 836, 837, 838, - 839, 840, 298, 534, 565, 532, 584, 559, 435, 374, + 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, + 586, 587, 298, 534, 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, - 497, 228, 462, 289, 252, 858, 0, 213, 247, 231, + 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, - 428, 392, 0, 372, 514, 515, 314, 513, 0, 722, + 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, - 0, 0, 0, 0, 709, 0, 0, 0, 269, 714, + 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, - 315, 381, 423, 503, 417, 721, 366, 0, 0, 492, - 396, 0, 0, 0, 0, 0, 717, 718, 0, 0, + 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, + 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, - 408, 493, 285, 0, 97, 0, 0, 859, 843, 809, - 810, 847, 860, 861, 862, 863, 848, 0, 239, 849, - 850, 246, 851, 0, 808, 749, 751, 750, 768, 769, - 770, 771, 772, 773, 774, 747, 856, 864, 865, 0, + 408, 493, 285, 0, 0, 0, 0, 0, 670, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, + 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, + 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, - 691, 706, 0, 720, 0, 0, 0, 274, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 703, 704, 0, 0, 0, 0, 803, - 0, 705, 0, 0, 713, 866, 867, 868, 869, 870, - 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, - 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, - 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, - 901, 902, 903, 904, 905, 906, 907, 716, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, - 397, 256, 0, 0, 449, 802, 0, 0, 561, 0, - 0, 800, 0, 0, 0, 0, 361, 0, 328, 202, - 226, 0, 0, 407, 457, 469, 0, 0, 0, 853, + 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, + 0, 0, 3460, 0, 0, 0, 361, 0, 328, 202, + 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, - 286, 3546, 0, 466, 368, 523, 447, 535, 562, 563, - 262, 401, 547, 507, 556, 587, 227, 259, 415, 500, + 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, + 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, - 431, 432, 570, 582, 571, 573, 214, 502, 533, 240, - 479, 0, 0, 589, 248, 499, 216, 530, 498, 389, - 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 854, 855, 255, 590, 755, 555, 221, 0, 554, - 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 763, 764, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 591, - 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, - 560, 566, 567, 569, 574, 575, 576, 577, 583, 581, - 578, 579, 580, 572, 402, 309, 490, 331, 369, 0, - 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, - 813, 801, 726, 817, 728, 814, 815, 723, 724, 727, - 816, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 609, 0, - 804, 712, 711, 0, 719, 0, 745, 746, 748, 752, - 753, 754, 765, 766, 767, 775, 777, 778, 776, 779, - 780, 781, 784, 785, 786, 787, 782, 783, 788, 729, - 733, 730, 731, 732, 744, 734, 735, 736, 737, 738, - 739, 740, 741, 742, 743, 827, 828, 829, 830, 831, - 832, 758, 762, 761, 759, 760, 756, 757, 710, 201, - 222, 364, 0, 450, 287, 588, 551, 545, 208, 224, - 818, 261, 819, 0, 0, 823, 0, 0, 0, 825, - 824, 0, 826, 792, 791, 0, 0, 820, 821, 0, - 822, 0, 0, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 833, 834, 835, 836, 837, - 838, 839, 840, 298, 534, 565, 532, 584, 559, 435, - 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 858, 0, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, - 722, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 709, 0, 0, 0, 269, - 714, 0, 0, 0, 362, 266, 0, 0, 425, 0, - 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 721, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 717, 718, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 97, 0, 1568, 859, 843, - 809, 810, 847, 860, 861, 862, 863, 848, 0, 239, - 849, 850, 246, 851, 0, 808, 749, 751, 750, 768, - 769, 770, 771, 772, 773, 774, 747, 856, 864, 865, - 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, - 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 691, 706, 0, 720, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 703, 704, 0, 0, 0, 0, - 803, 0, 705, 0, 0, 713, 866, 867, 868, 869, - 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, - 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, - 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, - 900, 901, 902, 903, 904, 905, 906, 907, 716, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 802, 0, 0, 561, - 0, 0, 800, 0, 0, 0, 0, 361, 0, 328, - 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, - 853, 0, 467, 421, 538, 234, 283, 454, 427, 465, - 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 587, 227, 259, 415, - 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, - 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 582, 571, 573, 214, 502, 533, - 240, 479, 0, 0, 589, 248, 499, 216, 530, 498, + 431, 432, 570, 583, 571, 573, 574, 214, 502, 533, + 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 854, 855, 255, 590, 755, 555, 221, 0, + 257, 410, 527, 528, 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, - 332, 763, 764, 279, 305, 444, 371, 445, 304, 306, + 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 591, 235, 236, 238, 0, 278, 282, 290, 293, 301, + 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, - 548, 560, 566, 567, 569, 574, 575, 576, 577, 583, - 581, 578, 579, 580, 572, 402, 309, 490, 331, 369, + 548, 560, 566, 567, 569, 575, 576, 577, 578, 584, + 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, - 0, 813, 801, 726, 817, 728, 814, 815, 723, 724, - 727, 816, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, - 0, 804, 712, 711, 0, 719, 0, 745, 746, 748, - 752, 753, 754, 765, 766, 767, 775, 777, 778, 776, - 779, 780, 781, 784, 785, 786, 787, 782, 783, 788, - 729, 733, 730, 731, 732, 744, 734, 735, 736, 737, - 738, 739, 740, 741, 742, 743, 827, 828, 829, 830, - 831, 832, 758, 762, 761, 759, 760, 756, 757, 710, - 201, 222, 364, 0, 450, 287, 588, 551, 545, 208, - 224, 818, 261, 819, 0, 0, 823, 0, 0, 0, - 825, 824, 0, 826, 792, 791, 0, 0, 820, 821, - 0, 822, 0, 0, 203, 204, 211, 223, 233, 237, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, + 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, + 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, + 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, + 201, 222, 364, 0, 450, 287, 589, 551, 545, 208, + 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, - 524, 526, 539, 558, 564, 476, 833, 834, 835, 836, - 837, 838, 839, 840, 298, 534, 565, 532, 584, 559, + 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, + 312, 313, 586, 587, 298, 534, 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, - 0, 550, 497, 228, 462, 289, 252, 858, 0, 213, + 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, - 0, 722, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 411, 0, 0, 0, 0, 709, 0, 0, 0, - 269, 714, 0, 0, 0, 362, 266, 0, 0, 425, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, + 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, - 268, 251, 315, 381, 423, 503, 417, 721, 366, 0, - 0, 492, 396, 0, 0, 0, 0, 0, 717, 718, + 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, + 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, - 323, 206, 408, 493, 285, 0, 97, 0, 0, 859, - 843, 809, 810, 847, 860, 861, 862, 863, 848, 0, - 239, 849, 850, 246, 851, 0, 808, 749, 751, 750, - 768, 769, 770, 771, 772, 773, 774, 747, 856, 864, - 865, 0, 264, 319, 271, 263, 518, 0, 0, 0, + 323, 206, 408, 493, 285, 0, 97, 0, 0, 0, + 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, + 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, + 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, - 0, 0, 691, 706, 0, 720, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 703, 704, 947, 0, 0, - 0, 803, 0, 705, 0, 0, 713, 866, 867, 868, - 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, - 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, - 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, - 899, 900, 901, 902, 903, 904, 905, 906, 907, 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 296, 0, 397, 256, 0, 0, 449, 802, 0, 0, - 561, 0, 0, 800, 0, 0, 0, 0, 361, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, + 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, - 0, 853, 0, 467, 421, 538, 234, 283, 454, 427, + 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, - 562, 563, 262, 401, 547, 507, 556, 587, 227, 259, + 562, 563, 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, - 288, 452, 431, 432, 570, 582, 571, 573, 214, 502, - 533, 240, 479, 0, 0, 589, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 854, 855, 255, 590, 755, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 763, 764, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 591, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 574, 575, 576, 577, - 583, 581, 578, 579, 580, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 813, 801, 726, 817, 728, 814, 815, 723, - 724, 727, 816, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 0, 804, 712, 711, 0, 719, 0, 745, 746, - 748, 752, 753, 754, 765, 766, 767, 775, 777, 778, - 776, 779, 780, 781, 784, 785, 786, 787, 782, 783, - 788, 729, 733, 730, 731, 732, 744, 734, 735, 736, - 737, 738, 739, 740, 741, 742, 743, 827, 828, 829, - 830, 831, 832, 758, 762, 761, 759, 760, 756, 757, - 710, 201, 222, 364, 0, 450, 287, 588, 551, 545, - 208, 224, 818, 261, 819, 0, 0, 823, 0, 0, - 0, 825, 824, 0, 826, 792, 791, 0, 0, 820, - 821, 0, 822, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 833, 834, 835, - 836, 837, 838, 839, 840, 298, 534, 565, 532, 584, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 858, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 722, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 709, 0, 0, - 0, 269, 714, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 721, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 717, - 718, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 97, 0, 0, - 859, 843, 809, 810, 847, 860, 861, 862, 863, 848, - 0, 239, 849, 850, 246, 851, 0, 808, 749, 751, - 750, 768, 769, 770, 771, 772, 773, 774, 747, 856, - 864, 865, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 691, 706, 0, 720, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 703, 704, 0, 0, - 0, 0, 803, 0, 705, 0, 0, 713, 866, 867, - 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, - 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, - 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, - 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, - 716, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 802, 0, - 0, 561, 0, 0, 800, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 853, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 587, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 582, 571, 573, 214, - 502, 533, 240, 479, 0, 0, 589, 248, 499, 216, + 288, 452, 431, 432, 570, 583, 571, 573, 574, 214, + 502, 533, 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, - 0, 0, 257, 410, 854, 855, 255, 590, 755, 555, + 0, 0, 257, 410, 527, 528, 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, - 388, 378, 332, 763, 764, 279, 305, 444, 371, 445, + 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, - 494, 543, 591, 235, 236, 238, 0, 278, 282, 290, + 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, - 517, 536, 548, 560, 566, 567, 569, 574, 575, 576, - 577, 583, 581, 578, 579, 580, 572, 402, 309, 490, + 517, 536, 548, 560, 566, 567, 569, 575, 576, 577, + 578, 584, 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, - 0, 0, 0, 813, 801, 726, 817, 728, 814, 815, - 723, 724, 727, 816, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 609, 0, 804, 712, 711, 0, 719, 0, 745, - 746, 748, 752, 753, 754, 765, 766, 767, 775, 777, - 778, 776, 779, 780, 781, 784, 785, 786, 787, 782, - 783, 788, 729, 733, 730, 731, 732, 744, 734, 735, - 736, 737, 738, 739, 740, 741, 742, 743, 827, 828, - 829, 830, 831, 832, 758, 762, 761, 759, 760, 756, - 757, 710, 201, 222, 364, 0, 450, 287, 588, 551, - 545, 208, 224, 818, 261, 819, 0, 0, 823, 0, - 0, 0, 825, 824, 0, 826, 792, 791, 0, 0, - 820, 821, 0, 822, 0, 0, 203, 204, 211, 223, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, + 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, + 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, + 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, + 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, + 446, 0, 201, 222, 364, 0, 450, 287, 589, 551, + 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, - 496, 501, 524, 526, 539, 558, 564, 476, 833, 834, - 835, 836, 837, 838, 839, 840, 298, 534, 565, 532, - 584, 559, 435, 374, 0, 0, 549, 0, 377, 280, - 303, 318, 0, 550, 497, 228, 462, 289, 252, 858, + 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, + 441, 442, 312, 313, 586, 587, 298, 534, 565, 532, + 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, + 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, - 314, 513, 0, 722, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 411, 0, 0, 0, 0, 709, 0, - 0, 0, 269, 714, 0, 0, 0, 362, 266, 0, + 314, 513, 0, 0, 0, 0, 2175, 0, 0, 0, + 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, + 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, - 281, 272, 268, 251, 315, 381, 423, 503, 417, 721, + 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, - 717, 718, 0, 0, 0, 0, 0, 0, 0, 0, - 321, 249, 323, 206, 408, 493, 285, 0, 97, 0, - 0, 859, 843, 809, 810, 847, 860, 861, 862, 863, - 848, 0, 239, 849, 850, 246, 851, 0, 808, 749, - 751, 750, 768, 769, 770, 771, 772, 773, 774, 747, - 856, 864, 865, 0, 264, 319, 271, 263, 518, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, + 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, + 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, + 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, - 0, 0, 0, 0, 0, 706, 0, 720, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 703, 704, 0, - 0, 0, 0, 803, 0, 705, 0, 0, 713, 866, - 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, - 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, - 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, - 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, - 907, 716, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 296, 0, 397, 256, 0, 0, 449, 802, - 0, 0, 561, 0, 0, 800, 0, 0, 0, 0, - 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, - 0, 0, 0, 853, 0, 467, 421, 538, 234, 283, - 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, - 447, 535, 562, 563, 262, 401, 547, 507, 556, 587, - 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, - 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, - 525, 544, 288, 452, 431, 432, 570, 582, 571, 573, - 214, 502, 533, 240, 479, 0, 0, 589, 248, 499, - 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, - 292, 0, 0, 257, 410, 854, 855, 255, 590, 755, - 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, - 529, 388, 378, 332, 763, 764, 279, 305, 444, 371, - 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, - 0, 494, 543, 591, 235, 236, 238, 0, 278, 282, - 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, - 0, 517, 536, 548, 560, 566, 567, 569, 574, 575, - 576, 577, 583, 581, 578, 579, 580, 572, 402, 309, - 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, - 0, 0, 0, 0, 813, 801, 726, 817, 728, 814, - 815, 723, 724, 727, 816, 592, 593, 594, 595, 596, - 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 608, 609, 0, 804, 712, 711, 0, 719, 0, - 745, 746, 748, 752, 753, 754, 765, 766, 767, 775, - 777, 778, 776, 779, 780, 781, 784, 785, 786, 787, - 782, 783, 788, 729, 733, 730, 731, 732, 744, 734, - 735, 736, 737, 738, 739, 740, 741, 742, 743, 827, - 828, 829, 830, 831, 832, 758, 762, 761, 759, 760, - 756, 757, 710, 201, 222, 364, 0, 450, 287, 588, - 551, 545, 208, 224, 818, 261, 819, 0, 0, 823, - 0, 0, 0, 825, 824, 0, 826, 792, 791, 0, - 0, 820, 821, 0, 822, 0, 0, 203, 204, 211, - 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, - 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, - 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, - 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, - 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, - 495, 496, 501, 524, 526, 539, 558, 564, 476, 833, - 834, 835, 836, 837, 838, 839, 840, 298, 534, 565, - 532, 584, 559, 435, 374, 0, 0, 549, 0, 377, - 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, - 858, 0, 213, 247, 231, 258, 273, 276, 322, 387, - 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, - 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, - 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, - 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, - 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, - 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, - 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, - 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, - 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, - 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, - 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, - 0, 0, 1384, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1385, 1386, 1387, 1388, 1389, - 1390, 1391, 1393, 1392, 1394, 1395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, - 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, - 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, - 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, - 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, - 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, - 587, 227, 259, 415, 500, 541, 489, 393, 519, 520, - 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, - 232, 525, 544, 288, 452, 431, 432, 570, 582, 571, - 573, 214, 502, 533, 240, 479, 0, 0, 589, 248, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, + 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, + 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, + 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, + 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, + 447, 535, 562, 563, 262, 401, 547, 507, 556, 588, + 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, + 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, + 525, 544, 288, 452, 431, 432, 570, 583, 571, 573, + 574, 214, 502, 533, 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 590, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 591, 235, 236, 238, 0, 278, + 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 0, 517, 536, 548, 560, 566, 567, 569, 574, - 575, 576, 577, 583, 581, 578, 579, 580, 572, 402, + 448, 0, 517, 536, 548, 560, 566, 567, 569, 575, + 576, 577, 578, 584, 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 610, 380, 481, 537, 333, 345, 348, + 0, 0, 0, 0, 0, 0, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, - 588, 551, 545, 208, 224, 0, 261, 0, 0, 0, + 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, @@ -3611,8 +4985,8 @@ var yyAct = [...]int{ 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 299, 300, 441, 442, 312, 313, 585, 586, 298, 534, - 565, 532, 584, 559, 435, 374, 0, 0, 549, 0, + 299, 300, 441, 442, 312, 313, 586, 587, 298, 534, + 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, @@ -3625,12 +4999,12 @@ var yyAct = [...]int{ 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, - 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, + 0, 0, 0, 1592, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, - 1020, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3640,103 +5014,36 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, - 449, 0, 0, 1019, 561, 0, 0, 0, 0, 0, - 1016, 1017, 361, 976, 328, 202, 226, 1010, 1014, 407, + 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, + 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, - 556, 587, 227, 259, 415, 500, 541, 489, 393, 519, + 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, - 243, 232, 525, 544, 288, 452, 431, 432, 570, 582, - 571, 573, 214, 502, 533, 240, 479, 0, 0, 589, - 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, - 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, - 590, 229, 555, 221, 0, 554, 403, 522, 531, 390, - 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, - 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, - 0, 210, 0, 494, 543, 591, 235, 236, 238, 0, - 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, - 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, - 574, 575, 576, 577, 583, 581, 578, 579, 580, 572, - 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, - 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 592, 593, 594, - 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 610, 380, 481, 537, 333, 345, - 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, - 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, - 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, - 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, - 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, - 287, 588, 551, 545, 208, 224, 0, 261, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, - 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, - 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, - 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, - 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, - 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, - 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, - 476, 299, 300, 441, 442, 312, 313, 585, 586, 298, - 534, 565, 532, 584, 559, 435, 374, 0, 0, 549, - 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, - 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, - 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, - 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, - 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, - 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, - 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, - 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, - 0, 0, 0, 0, 1531, 843, 0, 0, 1528, 0, - 0, 0, 0, 1526, 0, 239, 1527, 1525, 246, 1530, - 0, 808, 347, 356, 355, 336, 337, 339, 341, 346, - 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, - 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, - 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, - 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, - 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, - 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, - 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 587, 227, 259, 415, 500, 541, 489, 393, - 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, - 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 582, 571, 573, 214, 502, 533, 240, 479, 0, 0, - 589, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 243, 232, 525, 544, 288, 452, 431, 432, 570, 583, + 571, 573, 574, 214, 502, 533, 240, 479, 0, 0, + 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, - 255, 590, 229, 555, 221, 0, 554, 403, 522, 531, + 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 591, 235, 236, 238, + 542, 0, 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, - 569, 574, 575, 576, 577, 583, 581, 578, 579, 580, + 569, 575, 576, 577, 578, 584, 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 610, 380, 481, 537, 333, + 0, 0, 0, 0, 0, 0, 0, 0, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, - 450, 287, 588, 551, 545, 208, 224, 0, 261, 0, + 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, @@ -3745,27 +5052,27 @@ var yyAct = [...]int{ 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, - 564, 476, 299, 300, 441, 442, 312, 313, 585, 586, - 298, 534, 565, 532, 584, 559, 435, 374, 0, 0, + 564, 476, 299, 300, 441, 442, 312, 313, 586, 587, + 298, 534, 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, - 242, 480, 504, 505, 506, 508, 391, 265, 428, 0, - 392, 372, 514, 515, 314, 88, 513, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, - 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, - 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, - 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, - 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, + 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, + 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, + 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, + 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, + 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, + 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, - 493, 285, 0, 97, 0, 0, 0, 199, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, - 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, - 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, - 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, + 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, + 285, 0, 0, 0, 0, 0, 199, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, + 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, + 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, + 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3773,39 +5080,39 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, - 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, - 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, - 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, - 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, - 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, - 401, 547, 507, 556, 587, 227, 259, 415, 500, 541, - 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, - 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, - 432, 570, 582, 571, 573, 214, 502, 533, 240, 479, - 0, 0, 589, 248, 499, 216, 530, 498, 389, 324, + 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, + 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, + 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, + 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, + 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, + 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, + 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, + 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, + 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, + 570, 583, 571, 573, 574, 214, 502, 533, 240, 479, + 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 527, 528, 255, 590, 229, 555, 221, 0, 554, 403, + 527, 528, 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 591, 235, + 400, 209, 542, 0, 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, - 566, 567, 569, 574, 575, 576, 577, 583, 581, 578, - 579, 580, 572, 402, 309, 490, 331, 369, 0, 0, + 566, 567, 569, 575, 576, 577, 578, 584, 582, 579, + 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 608, 609, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 610, 380, 481, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, - 364, 96, 450, 287, 588, 551, 545, 208, 224, 0, - 261, 0, 0, 0, 0, 0, 0, 2173, 0, 0, - 2172, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 364, 1913, 450, 287, 589, 551, 545, 208, 224, 0, + 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, @@ -3813,25 +5120,25 @@ var yyAct = [...]int{ 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, - 585, 586, 298, 534, 565, 532, 584, 559, 435, 374, + 586, 587, 298, 534, 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, - 428, 1587, 0, 372, 514, 515, 314, 513, 0, 0, + 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, - 0, 0, 0, 1589, 0, 0, 0, 0, 269, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, - 408, 493, 285, 0, 0, 0, 0, 1591, 669, 0, + 408, 493, 285, 0, 0, 0, 0, 1904, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, - 0, 0, 230, 0, 0, 0, 1365, 0, 1366, 1367, + 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3846,55 +5153,55 @@ var yyAct = [...]int{ 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, - 262, 401, 547, 507, 556, 587, 227, 259, 415, 500, + 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, - 431, 432, 570, 582, 571, 573, 214, 502, 533, 240, - 479, 0, 0, 589, 248, 499, 216, 530, 498, 389, - 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 527, 528, 255, 590, 229, 555, 221, 0, 554, - 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 591, - 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, - 560, 566, 567, 569, 574, 575, 576, 577, 583, 581, - 578, 579, 580, 572, 402, 309, 490, 331, 369, 0, - 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, + 431, 432, 570, 583, 571, 573, 574, 214, 502, 533, + 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, + 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, + 257, 410, 527, 528, 255, 591, 229, 555, 221, 0, + 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, + 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, + 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, + 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, + 548, 560, 566, 567, 569, 575, 576, 577, 578, 584, + 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, + 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 609, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 610, 380, - 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, - 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, - 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, - 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, - 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, - 222, 364, 0, 450, 287, 588, 551, 545, 208, 224, - 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, + 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, + 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, + 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, + 201, 222, 364, 0, 450, 287, 589, 551, 545, 208, + 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 585, 586, 298, 534, 565, 532, 584, 559, 435, - 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 0, 392, 372, 514, 515, 314, 88, 513, + 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, + 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, + 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, + 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, + 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, + 312, 313, 586, 587, 298, 534, 565, 532, 585, 559, + 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, + 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, + 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, + 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, + 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 1740, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, - 323, 206, 408, 493, 285, 0, 97, 0, 1568, 0, - 669, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, + 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, @@ -3913,100 +5220,33 @@ var yyAct = [...]int{ 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, - 562, 563, 262, 401, 547, 507, 556, 587, 227, 259, + 562, 563, 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, - 288, 452, 431, 432, 570, 582, 571, 573, 214, 502, - 533, 240, 479, 0, 0, 589, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 590, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 591, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 574, 575, 576, 577, - 583, 581, 578, 579, 580, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 610, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 96, 450, 287, 588, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 585, 586, 298, 534, 565, 532, 584, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 97, 0, 0, - 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 587, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 582, 571, 573, 214, - 502, 533, 240, 479, 0, 0, 589, 248, 499, 216, + 288, 452, 431, 432, 570, 583, 571, 573, 574, 214, + 502, 533, 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, - 0, 0, 257, 410, 527, 528, 255, 590, 229, 555, + 0, 0, 257, 410, 527, 528, 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, - 494, 543, 591, 235, 236, 238, 0, 278, 282, 290, + 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, - 517, 536, 548, 560, 566, 567, 569, 574, 575, 576, - 577, 583, 581, 578, 579, 580, 572, 402, 309, 490, + 517, 536, 548, 560, 566, 567, 569, 575, 576, 577, + 578, 584, 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 609, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 610, 380, 481, 537, 333, 345, 348, 338, 357, + 0, 0, 0, 0, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, - 446, 0, 201, 222, 364, 0, 450, 287, 588, 551, + 446, 0, 201, 222, 364, 0, 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, - 0, 2173, 0, 0, 2172, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, @@ -4014,21 +5254,21 @@ var yyAct = [...]int{ 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, - 441, 442, 312, 313, 585, 586, 298, 534, 565, 532, - 584, 559, 435, 374, 0, 0, 549, 0, 377, 280, + 441, 442, 312, 313, 586, 587, 298, 534, 565, 532, + 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 411, 0, 0, 0, 2124, 0, 0, + 0, 0, 0, 411, 0, 1738, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, - 0, 1772, 199, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, @@ -4046,100 +5286,33 @@ var yyAct = [...]int{ 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, - 454, 427, 465, 437, 286, 0, 2122, 466, 368, 523, - 447, 535, 562, 563, 262, 401, 547, 507, 556, 587, + 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, + 447, 535, 562, 563, 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, - 525, 544, 288, 452, 431, 432, 570, 582, 571, 573, - 214, 502, 533, 240, 479, 0, 0, 589, 248, 499, - 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, - 292, 0, 0, 257, 410, 527, 528, 255, 590, 229, - 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, - 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, - 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, - 0, 494, 543, 591, 235, 236, 238, 0, 278, 282, - 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, - 0, 517, 536, 548, 560, 566, 567, 569, 574, 575, - 576, 577, 583, 581, 578, 579, 580, 572, 402, 309, - 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 592, 593, 594, 595, 596, - 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 608, 609, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 610, 380, 481, 537, 333, 345, 348, 338, - 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, - 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, - 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, - 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, - 375, 446, 0, 201, 222, 364, 0, 450, 287, 588, - 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, - 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, - 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, - 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, - 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, - 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, - 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, - 300, 441, 442, 312, 313, 585, 586, 298, 534, 565, - 532, 584, 559, 435, 374, 0, 0, 549, 0, 377, - 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, - 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, - 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, - 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, - 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, - 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, - 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, - 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, - 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, - 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, - 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, - 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, - 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 970, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, - 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, - 0, 361, 976, 328, 202, 226, 974, 0, 407, 457, - 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, - 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, - 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, - 587, 227, 259, 415, 500, 541, 489, 393, 519, 520, - 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, - 232, 525, 544, 288, 452, 431, 432, 570, 582, 571, - 573, 214, 502, 533, 240, 479, 0, 0, 589, 248, + 525, 544, 288, 452, 431, 432, 570, 583, 571, 573, + 574, 214, 502, 533, 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 590, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 591, 235, 236, 238, 0, 278, + 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 0, 517, 536, 548, 560, 566, 567, 569, 574, - 575, 576, 577, 583, 581, 578, 579, 580, 572, 402, + 448, 0, 517, 536, 548, 560, 566, 567, 569, 575, + 576, 577, 578, 584, 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 610, 380, 481, 537, 333, 345, 348, + 0, 0, 0, 0, 0, 0, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, - 588, 551, 545, 208, 224, 0, 261, 0, 0, 0, + 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, @@ -4148,21 +5321,21 @@ var yyAct = [...]int{ 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 299, 300, 441, 442, 312, 313, 585, 586, 298, 534, - 565, 532, 584, 559, 435, 374, 0, 0, 549, 0, + 299, 300, 441, 442, 312, 313, 586, 587, 298, 534, + 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 411, 0, 0, 0, 2124, + 0, 0, 0, 0, 0, 411, 0, 1736, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, - 0, 0, 0, 1772, 199, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, @@ -4182,98 +5355,31 @@ var yyAct = [...]int{ 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, - 556, 587, 227, 259, 415, 500, 541, 489, 393, 519, + 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, - 243, 232, 525, 544, 288, 452, 431, 432, 570, 582, - 571, 573, 214, 502, 533, 240, 479, 0, 0, 589, - 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, - 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, - 590, 229, 555, 221, 0, 554, 403, 522, 531, 390, - 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, - 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, - 0, 210, 0, 494, 543, 591, 235, 236, 238, 0, - 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, - 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, - 574, 575, 576, 577, 583, 581, 578, 579, 580, 572, - 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, - 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 592, 593, 594, - 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 610, 380, 481, 537, 333, 345, - 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, - 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, - 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, - 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, - 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, - 287, 588, 551, 545, 208, 224, 0, 261, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, - 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, - 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, - 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, - 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, - 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, - 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, - 476, 299, 300, 441, 442, 312, 313, 585, 586, 298, - 534, 565, 532, 584, 559, 435, 374, 0, 0, 549, - 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, - 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, - 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, - 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, - 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, - 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, - 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, - 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, - 0, 0, 0, 1568, 0, 669, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, - 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, - 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, - 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, - 0, 449, 0, 0, 0, 561, 0, 0, 0, 3456, - 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, - 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, - 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, - 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 587, 227, 259, 415, 500, 541, 489, 393, - 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, - 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 582, 571, 573, 214, 502, 533, 240, 479, 0, 0, - 589, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 243, 232, 525, 544, 288, 452, 431, 432, 570, 583, + 571, 573, 574, 214, 502, 533, 240, 479, 0, 0, + 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, - 255, 590, 229, 555, 221, 0, 554, 403, 522, 531, + 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 591, 235, 236, 238, + 542, 0, 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, - 569, 574, 575, 576, 577, 583, 581, 578, 579, 580, + 569, 575, 576, 577, 578, 584, 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 610, 380, 481, 537, 333, + 0, 0, 0, 0, 0, 0, 0, 0, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, - 450, 287, 588, 551, 545, 208, 224, 0, 261, 0, + 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, @@ -4282,132 +5388,65 @@ var yyAct = [...]int{ 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, - 564, 476, 299, 300, 441, 442, 312, 313, 585, 586, - 298, 534, 565, 532, 584, 559, 435, 374, 0, 0, + 564, 476, 299, 300, 441, 442, 312, 313, 586, 587, + 298, 534, 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 411, 0, 1734, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, - 285, 0, 0, 0, 0, 1957, 669, 0, 0, 0, + 285, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, - 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1958, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, - 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, - 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, - 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, - 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, - 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, - 547, 507, 556, 587, 227, 259, 415, 500, 541, 489, - 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, - 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, - 570, 582, 571, 573, 214, 502, 533, 240, 479, 0, - 0, 589, 248, 499, 216, 530, 498, 389, 324, 325, - 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, - 528, 255, 590, 229, 555, 221, 0, 554, 403, 522, - 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, - 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, - 209, 542, 0, 210, 0, 494, 543, 591, 235, 236, - 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, - 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, - 567, 569, 574, 575, 576, 577, 583, 581, 578, 579, - 580, 572, 402, 309, 490, 331, 369, 0, 0, 420, - 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 609, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 610, 380, 481, 537, - 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, - 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, - 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, - 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, - 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, - 0, 450, 287, 588, 551, 545, 208, 224, 0, 261, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, - 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, - 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, - 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, - 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, - 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, - 558, 564, 476, 299, 300, 441, 442, 312, 313, 585, - 586, 298, 534, 565, 532, 584, 559, 435, 374, 0, - 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, - 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, - 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, - 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, - 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, - 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, - 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, - 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, - 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, + 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, - 493, 285, 0, 0, 0, 0, 2565, 669, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, - 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, - 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, - 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, - 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, - 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, - 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, - 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, - 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, - 401, 547, 507, 556, 587, 227, 259, 415, 500, 541, - 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, - 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, - 432, 570, 582, 571, 573, 214, 502, 533, 240, 479, - 0, 0, 589, 248, 499, 216, 530, 498, 389, 324, + 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, + 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, + 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, + 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, + 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, + 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, + 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, + 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, + 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, + 570, 583, 571, 573, 574, 214, 502, 533, 240, 479, + 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 527, 528, 255, 590, 229, 555, 221, 0, 554, 403, + 527, 528, 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 591, 235, + 400, 209, 542, 0, 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, - 566, 567, 569, 574, 575, 576, 577, 583, 581, 578, - 579, 580, 572, 402, 309, 490, 331, 369, 0, 0, + 566, 567, 569, 575, 576, 577, 578, 584, 582, 579, + 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 608, 609, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 610, 380, 481, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, - 364, 0, 450, 287, 588, 551, 545, 208, 224, 0, + 364, 0, 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, @@ -4417,22 +5456,22 @@ var yyAct = [...]int{ 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, - 585, 586, 298, 534, 565, 532, 584, 559, 435, 374, + 586, 587, 298, 534, 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, - 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, + 0, 1732, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, - 408, 493, 285, 0, 0, 0, 0, 0, 669, 0, - 0, 0, 0, 2550, 0, 0, 0, 0, 239, 0, - 0, 246, 2551, 0, 0, 347, 356, 355, 336, 337, + 408, 493, 285, 0, 0, 0, 0, 0, 670, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, + 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, @@ -4450,98 +5489,31 @@ var yyAct = [...]int{ 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, - 262, 401, 547, 507, 556, 587, 227, 259, 415, 500, + 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, - 431, 432, 570, 582, 571, 573, 214, 502, 533, 240, - 479, 0, 0, 589, 248, 499, 216, 530, 498, 389, - 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 527, 528, 255, 590, 229, 555, 221, 0, 554, - 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 591, - 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, - 560, 566, 567, 569, 574, 575, 576, 577, 583, 581, - 578, 579, 580, 572, 402, 309, 490, 331, 369, 0, - 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 609, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 610, 380, - 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, - 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, - 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, - 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, - 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, - 222, 364, 0, 450, 287, 588, 551, 545, 208, 224, - 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 585, 586, 298, 534, 565, 532, 584, 559, 435, - 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, - 1610, 0, 0, 0, 362, 266, 0, 0, 425, 0, - 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 0, 0, 0, 1609, 669, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, - 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, - 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, - 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, - 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, - 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, - 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, - 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, - 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 587, 227, 259, 415, - 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, - 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 582, 571, 573, 214, 502, 533, - 240, 479, 0, 0, 589, 248, 499, 216, 530, 498, + 431, 432, 570, 583, 571, 573, 574, 214, 502, 533, + 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 527, 528, 255, 590, 229, 555, 221, 0, + 257, 410, 527, 528, 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 591, 235, 236, 238, 0, 278, 282, 290, 293, 301, + 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, - 548, 560, 566, 567, 569, 574, 575, 576, 577, 583, - 581, 578, 579, 580, 572, 402, 309, 490, 331, 369, + 548, 560, 566, 567, 569, 575, 576, 577, 578, 584, + 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, + 0, 0, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, - 201, 222, 364, 0, 450, 287, 588, 551, 545, 208, + 201, 222, 364, 0, 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, @@ -4551,21 +5523,21 @@ var yyAct = [...]int{ 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, - 312, 313, 585, 586, 298, 534, 565, 532, 584, 559, + 312, 313, 586, 587, 298, 534, 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 1728, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, - 671, 672, 673, 0, 0, 0, 0, 0, 0, 0, + 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, @@ -4584,98 +5556,31 @@ var yyAct = [...]int{ 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, - 562, 563, 262, 401, 547, 507, 556, 587, 227, 259, + 562, 563, 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, - 288, 452, 431, 432, 570, 582, 571, 573, 214, 502, - 533, 240, 479, 0, 0, 589, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 590, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 591, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 574, 575, 576, 577, - 583, 581, 578, 579, 580, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 610, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 588, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 585, 586, 298, 534, 565, 532, 584, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 669, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 3580, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 587, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 582, 571, 573, 214, - 502, 533, 240, 479, 0, 0, 589, 248, 499, 216, + 288, 452, 431, 432, 570, 583, 571, 573, 574, 214, + 502, 533, 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, - 0, 0, 257, 410, 527, 528, 255, 590, 229, 555, + 0, 0, 257, 410, 527, 528, 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, - 494, 543, 591, 235, 236, 238, 0, 278, 282, 290, + 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, - 517, 536, 548, 560, 566, 567, 569, 574, 575, 576, - 577, 583, 581, 578, 579, 580, 572, 402, 309, 490, + 517, 536, 548, 560, 566, 567, 569, 575, 576, 577, + 578, 584, 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 609, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 610, 380, 481, 537, 333, 345, 348, 338, 357, + 0, 0, 0, 0, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, - 446, 0, 201, 222, 364, 0, 450, 287, 588, 551, + 446, 0, 201, 222, 364, 0, 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, @@ -4685,21 +5590,21 @@ var yyAct = [...]int{ 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, - 441, 442, 312, 313, 585, 586, 298, 534, 565, 532, - 584, 559, 435, 374, 0, 0, 549, 0, 377, 280, + 441, 442, 312, 313, 586, 587, 298, 534, 565, 532, + 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 411, 0, 1726, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, - 0, 1772, 199, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, @@ -4718,99 +5623,32 @@ var yyAct = [...]int{ 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, - 447, 535, 562, 563, 262, 401, 547, 507, 556, 587, + 447, 535, 562, 563, 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, - 525, 544, 288, 452, 431, 432, 570, 582, 571, 573, - 214, 502, 533, 240, 479, 0, 0, 589, 248, 499, - 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, - 292, 0, 0, 257, 410, 527, 528, 255, 590, 229, - 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, - 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, - 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, - 0, 494, 543, 591, 235, 236, 238, 0, 278, 282, - 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, - 0, 517, 536, 548, 560, 566, 567, 569, 574, 575, - 576, 577, 583, 581, 578, 579, 580, 572, 402, 309, - 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 592, 593, 594, 595, 596, - 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 608, 609, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 610, 380, 481, 537, 333, 345, 348, 338, - 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, - 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, - 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, - 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, - 375, 446, 0, 201, 222, 364, 0, 450, 287, 588, - 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, - 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, - 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, - 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, - 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, - 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, - 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, - 300, 441, 442, 312, 313, 585, 586, 298, 534, 565, - 532, 584, 559, 435, 374, 0, 0, 549, 0, 377, - 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, - 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, - 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, - 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, - 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, - 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, - 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, - 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, - 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, - 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, - 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, - 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, - 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, - 0, 0, 0, 561, 0, 0, 0, 3456, 0, 0, - 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, - 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, - 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, - 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, - 587, 227, 259, 415, 500, 541, 489, 393, 519, 520, - 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, - 232, 525, 544, 288, 452, 431, 432, 570, 582, 571, - 573, 214, 502, 533, 240, 479, 0, 0, 589, 248, + 525, 544, 288, 452, 431, 432, 570, 583, 571, 573, + 574, 214, 502, 533, 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 590, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 591, 235, 236, 238, 0, 278, + 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 0, 517, 536, 548, 560, 566, 567, 569, 574, - 575, 576, 577, 583, 581, 578, 579, 580, 572, 402, + 448, 0, 517, 536, 548, 560, 566, 567, 569, 575, + 576, 577, 578, 584, 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 610, 380, 481, 537, 333, 345, 348, + 0, 0, 0, 0, 0, 0, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, - 588, 551, 545, 208, 224, 0, 261, 0, 0, 0, + 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, @@ -4819,21 +5657,21 @@ var yyAct = [...]int{ 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 299, 300, 441, 442, 312, 313, 585, 586, 298, 534, - 565, 532, 584, 559, 435, 374, 0, 0, 549, 0, + 299, 300, 441, 442, 312, 313, 586, 587, 298, 534, + 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 1724, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, - 97, 0, 0, 0, 669, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, @@ -4853,98 +5691,31 @@ var yyAct = [...]int{ 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, - 556, 587, 227, 259, 415, 500, 541, 489, 393, 519, + 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, - 243, 232, 525, 544, 288, 452, 431, 432, 570, 582, - 571, 573, 214, 502, 533, 240, 479, 0, 0, 589, - 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, - 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, - 590, 229, 555, 221, 0, 554, 403, 522, 531, 390, - 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, - 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, - 0, 210, 0, 494, 543, 591, 235, 236, 238, 0, - 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, - 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, - 574, 575, 576, 577, 583, 581, 578, 579, 580, 572, - 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, - 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 592, 593, 594, - 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 610, 380, 481, 537, 333, 345, - 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, - 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, - 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, - 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, - 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, - 287, 588, 551, 545, 208, 224, 0, 261, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, - 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, - 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, - 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, - 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, - 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, - 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, - 476, 299, 300, 441, 442, 312, 313, 585, 586, 298, - 534, 565, 532, 584, 559, 435, 374, 0, 0, 549, - 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, - 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, - 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, - 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, - 372, 514, 515, 314, 513, 0, 0, 0, 0, 2174, - 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, - 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, - 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, - 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, - 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, - 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, - 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, - 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, - 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, - 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, - 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, - 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, - 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 587, 227, 259, 415, 500, 541, 489, 393, - 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, - 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 582, 571, 573, 214, 502, 533, 240, 479, 0, 0, - 589, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 243, 232, 525, 544, 288, 452, 431, 432, 570, 583, + 571, 573, 574, 214, 502, 533, 240, 479, 0, 0, + 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, - 255, 590, 229, 555, 221, 0, 554, 403, 522, 531, + 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 591, 235, 236, 238, + 542, 0, 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, - 569, 574, 575, 576, 577, 583, 581, 578, 579, 580, + 569, 575, 576, 577, 578, 584, 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 610, 380, 481, 537, 333, + 0, 0, 0, 0, 0, 0, 0, 0, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, - 450, 287, 588, 551, 545, 208, 224, 0, 261, 0, + 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, @@ -4953,8 +5724,8 @@ var yyAct = [...]int{ 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, - 564, 476, 299, 300, 441, 442, 312, 313, 585, 586, - 298, 534, 565, 532, 584, 559, 435, 374, 0, 0, + 564, 476, 299, 300, 441, 442, 312, 313, 586, 587, + 298, 534, 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, @@ -4967,80 +5738,13 @@ var yyAct = [...]int{ 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, - 285, 0, 0, 0, 0, 1591, 669, 0, 0, 0, + 285, 0, 1699, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, - 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, - 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, - 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, - 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, - 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, - 547, 507, 556, 587, 227, 259, 415, 500, 541, 489, - 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, - 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, - 570, 582, 571, 573, 214, 502, 533, 240, 479, 0, - 0, 589, 248, 499, 216, 530, 498, 389, 324, 325, - 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, - 528, 255, 590, 229, 555, 221, 0, 554, 403, 522, - 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, - 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, - 209, 542, 0, 210, 0, 494, 543, 591, 235, 236, - 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, - 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, - 567, 569, 574, 575, 576, 577, 583, 581, 578, 579, - 580, 572, 402, 309, 490, 331, 369, 0, 0, 420, - 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 609, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 610, 380, 481, 537, - 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, - 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, - 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, - 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, - 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, - 0, 450, 287, 588, 551, 545, 208, 224, 0, 261, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, - 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, - 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, - 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, - 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, - 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, - 558, 564, 476, 299, 300, 441, 442, 312, 313, 585, - 586, 298, 534, 565, 532, 584, 559, 435, 374, 0, - 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, - 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, - 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, - 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, - 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, - 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, - 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, - 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, - 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, - 493, 285, 0, 0, 0, 0, 0, 199, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, - 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, - 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, - 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, + 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5048,37 +5752,37 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, - 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, - 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, - 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, - 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, - 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, - 401, 547, 507, 556, 587, 227, 259, 415, 500, 541, - 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, - 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, - 432, 570, 582, 571, 573, 214, 502, 533, 240, 479, - 0, 0, 589, 248, 499, 216, 530, 498, 389, 324, + 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, + 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, + 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, + 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, + 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, + 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, + 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, + 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, + 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, + 570, 583, 571, 573, 574, 214, 502, 533, 240, 479, + 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 527, 528, 255, 590, 229, 555, 221, 0, 554, 403, + 527, 528, 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 591, 235, + 400, 209, 542, 0, 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, - 566, 567, 569, 574, 575, 576, 577, 583, 581, 578, - 579, 580, 572, 402, 309, 490, 331, 369, 0, 0, + 566, 567, 569, 575, 576, 577, 578, 584, 582, 579, + 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 608, 609, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 610, 380, 481, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, - 364, 1912, 450, 287, 588, 551, 545, 208, 224, 0, + 364, 0, 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, @@ -5088,20 +5792,20 @@ var yyAct = [...]int{ 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, - 585, 586, 298, 534, 565, 532, 584, 559, 435, 374, + 586, 587, 298, 534, 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, - 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, + 0, 0, 0, 0, 0, 0, 0, 1596, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, - 408, 493, 285, 0, 0, 0, 0, 1903, 669, 0, + 408, 493, 285, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, @@ -5121,98 +5825,31 @@ var yyAct = [...]int{ 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, - 262, 401, 547, 507, 556, 587, 227, 259, 415, 500, + 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, - 431, 432, 570, 582, 571, 573, 214, 502, 533, 240, - 479, 0, 0, 589, 248, 499, 216, 530, 498, 389, - 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 527, 528, 255, 590, 229, 555, 221, 0, 554, - 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 591, - 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, - 560, 566, 567, 569, 574, 575, 576, 577, 583, 581, - 578, 579, 580, 572, 402, 309, 490, 331, 369, 0, - 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 609, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 610, 380, - 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, - 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, - 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, - 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, - 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, - 222, 364, 0, 450, 287, 588, 551, 545, 208, 224, - 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 585, 586, 298, 534, 565, 532, 584, 559, 435, - 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 1739, 0, 0, 0, 0, 0, 0, 269, - 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, - 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 0, 0, 0, 0, 669, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, - 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, - 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, - 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, - 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, - 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, - 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, - 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, - 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 587, 227, 259, 415, - 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, - 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 582, 571, 573, 214, 502, 533, - 240, 479, 0, 0, 589, 248, 499, 216, 530, 498, + 431, 432, 570, 583, 571, 573, 574, 214, 502, 533, + 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 527, 528, 255, 590, 229, 555, 221, 0, + 257, 410, 527, 528, 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 591, 235, 236, 238, 0, 278, 282, 290, 293, 301, + 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, - 548, 560, 566, 567, 569, 574, 575, 576, 577, 583, - 581, 578, 579, 580, 572, 402, 309, 490, 331, 369, + 548, 560, 566, 567, 569, 575, 576, 577, 578, 584, + 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, + 0, 0, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, - 201, 222, 364, 0, 450, 287, 588, 551, 545, 208, + 201, 222, 364, 0, 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, @@ -5222,21 +5859,21 @@ var yyAct = [...]int{ 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, - 312, 313, 585, 586, 298, 534, 565, 532, 584, 559, + 312, 313, 586, 587, 298, 534, 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 411, 0, 1737, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, - 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, - 669, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 323, 206, 408, 493, 285, 0, 97, 0, 0, 0, + 844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, @@ -5255,98 +5892,31 @@ var yyAct = [...]int{ 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, - 562, 563, 262, 401, 547, 507, 556, 587, 227, 259, + 562, 563, 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, - 288, 452, 431, 432, 570, 582, 571, 573, 214, 502, - 533, 240, 479, 0, 0, 589, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 590, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 591, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 574, 575, 576, 577, - 583, 581, 578, 579, 580, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 610, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 588, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 585, 586, 298, 534, 565, 532, 584, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 1735, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 669, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 587, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 582, 571, 573, 214, - 502, 533, 240, 479, 0, 0, 589, 248, 499, 216, + 288, 452, 431, 432, 570, 583, 571, 573, 574, 214, + 502, 533, 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, - 0, 0, 257, 410, 527, 528, 255, 590, 229, 555, + 0, 0, 257, 410, 527, 528, 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, - 494, 543, 591, 235, 236, 238, 0, 278, 282, 290, + 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, - 517, 536, 548, 560, 566, 567, 569, 574, 575, 576, - 577, 583, 581, 578, 579, 580, 572, 402, 309, 490, + 517, 536, 548, 560, 566, 567, 569, 575, 576, 577, + 578, 584, 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 609, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 610, 380, 481, 537, 333, 345, 348, 338, 357, + 0, 0, 0, 0, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, - 446, 0, 201, 222, 364, 0, 450, 287, 588, 551, + 446, 0, 201, 222, 364, 0, 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, @@ -5356,21 +5926,21 @@ var yyAct = [...]int{ 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, - 441, 442, 312, 313, 585, 586, 298, 534, 565, 532, - 584, 559, 435, 374, 0, 0, 549, 0, 377, 280, + 441, 442, 312, 313, 586, 587, 298, 534, 565, 532, + 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 411, 0, 1733, 0, 0, 0, 0, + 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, - 0, 0, 669, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, @@ -5384,104 +5954,37 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, + 1344, 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, - 447, 535, 562, 563, 262, 401, 547, 507, 556, 587, + 447, 535, 562, 563, 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, - 525, 544, 288, 452, 431, 432, 570, 582, 571, 573, - 214, 502, 533, 240, 479, 0, 0, 589, 248, 499, - 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, - 292, 0, 0, 257, 410, 527, 528, 255, 590, 229, - 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, - 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, - 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, - 0, 494, 543, 591, 235, 236, 238, 0, 278, 282, - 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, - 0, 517, 536, 548, 560, 566, 567, 569, 574, 575, - 576, 577, 583, 581, 578, 579, 580, 572, 402, 309, - 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 592, 593, 594, 595, 596, - 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 608, 609, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 610, 380, 481, 537, 333, 345, 348, 338, - 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, - 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, - 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, - 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, - 375, 446, 0, 201, 222, 364, 0, 450, 287, 588, - 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, - 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, - 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, - 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, - 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, - 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, - 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, - 300, 441, 442, 312, 313, 585, 586, 298, 534, 565, - 532, 584, 559, 435, 374, 0, 0, 549, 0, 377, - 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, - 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, - 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, - 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, - 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 411, 0, 1731, 0, 0, 0, - 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, - 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, - 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, - 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, - 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, - 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, - 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, - 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, - 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, - 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, - 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, - 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, - 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, - 587, 227, 259, 415, 500, 541, 489, 393, 519, 520, - 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, - 232, 525, 544, 288, 452, 431, 432, 570, 582, 571, - 573, 214, 502, 533, 240, 479, 0, 0, 589, 248, + 525, 544, 288, 452, 431, 432, 570, 583, 571, 573, + 574, 214, 502, 533, 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 590, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 591, 235, 236, 238, 0, 278, + 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 0, 517, 536, 548, 560, 566, 567, 569, 574, - 575, 576, 577, 583, 581, 578, 579, 580, 572, 402, + 448, 0, 517, 536, 548, 560, 566, 567, 569, 575, + 576, 577, 578, 584, 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 610, 380, 481, 537, 333, 345, 348, + 0, 0, 0, 0, 0, 0, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, - 588, 551, 545, 208, 224, 0, 261, 0, 0, 0, + 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, @@ -5490,21 +5993,21 @@ var yyAct = [...]int{ 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 299, 300, 441, 442, 312, 313, 585, 586, 298, 534, - 565, 532, 584, 559, 435, 374, 0, 0, 549, 0, + 299, 300, 441, 442, 312, 313, 586, 587, 1343, 534, + 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 411, 0, 1727, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, - 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, @@ -5524,121 +6027,54 @@ var yyAct = [...]int{ 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, - 556, 587, 227, 259, 415, 500, 541, 489, 393, 519, + 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, - 243, 232, 525, 544, 288, 452, 431, 432, 570, 582, - 571, 573, 214, 502, 533, 240, 479, 0, 0, 589, - 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, - 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, - 590, 229, 555, 221, 0, 554, 403, 522, 531, 390, - 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, - 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, - 0, 210, 0, 494, 543, 591, 235, 236, 238, 0, - 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, - 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, - 574, 575, 576, 577, 583, 581, 578, 579, 580, 572, - 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, - 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 592, 593, 594, - 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 610, 380, 481, 537, 333, 345, - 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, - 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, - 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, - 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, - 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, - 287, 588, 551, 545, 208, 224, 0, 261, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, - 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, - 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, - 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, - 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, - 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, - 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, - 476, 299, 300, 441, 442, 312, 313, 585, 586, 298, - 534, 565, 532, 584, 559, 435, 374, 0, 0, 549, - 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, - 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, - 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, - 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, - 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 411, 0, 1725, 0, - 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, - 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, - 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, - 0, 0, 0, 0, 0, 669, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, - 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, - 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, - 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, - 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, - 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, - 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, - 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, - 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 587, 227, 259, 415, 500, 541, 489, 393, - 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, - 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 582, 571, 573, 214, 502, 533, 240, 479, 0, 0, - 589, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 243, 232, 525, 544, 288, 452, 431, 432, 570, 583, + 571, 573, 574, 214, 502, 533, 240, 479, 0, 0, + 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, - 255, 590, 229, 555, 221, 0, 554, 403, 522, 531, + 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 591, 235, 236, 238, + 542, 0, 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, - 569, 574, 575, 576, 577, 583, 581, 578, 579, 580, + 569, 575, 576, 577, 578, 584, 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 610, 380, 481, 537, 333, + 0, 0, 0, 0, 0, 0, 0, 0, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, - 450, 287, 588, 551, 545, 208, 224, 0, 261, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 929, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, - 564, 476, 299, 300, 441, 442, 312, 313, 585, 586, - 298, 534, 565, 532, 584, 559, 435, 374, 0, 0, + 564, 476, 299, 300, 441, 442, 312, 313, 586, 587, + 298, 534, 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 411, 0, 1723, + 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, - 285, 0, 0, 0, 0, 0, 669, 0, 0, 0, + 285, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, @@ -5653,103 +6089,36 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, - 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, - 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, - 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, - 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, - 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, - 547, 507, 556, 587, 227, 259, 415, 500, 541, 489, - 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, - 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, - 570, 582, 571, 573, 214, 502, 533, 240, 479, 0, - 0, 589, 248, 499, 216, 530, 498, 389, 324, 325, - 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, - 528, 255, 590, 229, 555, 221, 0, 554, 403, 522, - 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, - 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, - 209, 542, 0, 210, 0, 494, 543, 591, 235, 236, - 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, - 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, - 567, 569, 574, 575, 576, 577, 583, 581, 578, 579, - 580, 572, 402, 309, 490, 331, 369, 0, 0, 420, - 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 609, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 610, 380, 481, 537, - 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, - 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, - 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, - 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, - 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, - 0, 450, 287, 588, 551, 545, 208, 224, 0, 261, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, - 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, - 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, - 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, - 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, - 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, - 558, 564, 476, 299, 300, 441, 442, 312, 313, 585, - 586, 298, 534, 565, 532, 584, 559, 435, 374, 0, - 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, - 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, - 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, - 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, - 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, - 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, - 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, - 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, - 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, - 493, 285, 0, 1698, 0, 0, 0, 669, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, - 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, - 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, - 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, - 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, - 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, - 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, - 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, - 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, - 401, 547, 507, 556, 587, 227, 259, 415, 500, 541, - 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, - 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, - 432, 570, 582, 571, 573, 214, 502, 533, 240, 479, - 0, 0, 589, 248, 499, 216, 530, 498, 389, 324, + 0, 0, 449, 0, 614, 0, 561, 0, 0, 0, + 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, + 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, + 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, + 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, + 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, + 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, + 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, + 570, 583, 571, 573, 574, 214, 502, 533, 240, 479, + 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, - 527, 528, 255, 590, 229, 555, 221, 0, 554, 403, + 527, 528, 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, - 400, 209, 542, 0, 210, 0, 494, 543, 591, 235, + 400, 209, 542, 0, 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, - 566, 567, 569, 574, 575, 576, 577, 583, 581, 578, - 579, 580, 572, 402, 309, 490, 331, 369, 0, 0, + 566, 567, 569, 575, 576, 577, 578, 584, 582, 579, + 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 608, 609, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 610, 380, 481, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, - 364, 0, 450, 287, 588, 551, 545, 208, 224, 0, + 364, 0, 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, @@ -5759,20 +6128,20 @@ var yyAct = [...]int{ 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, - 585, 586, 298, 534, 565, 532, 584, 559, 435, 374, + 586, 587, 298, 534, 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, - 0, 0, 0, 0, 0, 0, 0, 1595, 269, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, - 408, 493, 285, 0, 0, 0, 0, 0, 199, 0, + 408, 493, 285, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, @@ -5792,108 +6161,41 @@ var yyAct = [...]int{ 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, - 262, 401, 547, 507, 556, 587, 227, 259, 415, 500, + 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, - 431, 432, 570, 582, 571, 573, 214, 502, 533, 240, - 479, 0, 0, 589, 248, 499, 216, 530, 498, 389, - 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 527, 528, 255, 590, 229, 555, 221, 0, 554, - 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 591, - 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, - 560, 566, 567, 569, 574, 575, 576, 577, 583, 581, - 578, 579, 580, 572, 402, 309, 490, 331, 369, 0, - 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 609, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 610, 380, - 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, - 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, - 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, - 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, - 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, - 222, 364, 0, 450, 287, 588, 551, 545, 208, 224, - 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 585, 586, 298, 534, 565, 532, 584, 559, 435, - 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, - 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, - 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 97, 0, 0, 0, 843, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, - 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, - 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, - 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, - 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, - 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, - 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, - 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, - 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 587, 227, 259, 415, - 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, - 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 582, 571, 573, 214, 502, 533, - 240, 479, 0, 0, 589, 248, 499, 216, 530, 498, + 431, 432, 570, 583, 571, 573, 574, 214, 502, 533, + 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 527, 528, 255, 590, 229, 555, 221, 0, + 257, 410, 527, 528, 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 591, 235, 236, 238, 0, 278, 282, 290, 293, 301, + 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, - 548, 560, 566, 567, 569, 574, 575, 576, 577, 583, - 581, 578, 579, 580, 572, 402, 309, 490, 331, 369, + 548, 560, 566, 567, 569, 575, 576, 577, 578, 584, + 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, + 0, 0, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, - 201, 222, 364, 0, 450, 287, 588, 551, 545, 208, + 201, 222, 364, 0, 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, - 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 326, 376, 382, 383, 384, 385, 3592, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, - 312, 313, 585, 586, 298, 534, 565, 532, 584, 559, + 312, 313, 586, 587, 298, 534, 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, @@ -5907,7 +6209,7 @@ var yyAct = [...]int{ 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, - 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, @@ -5920,115 +6222,48 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1343, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, - 562, 563, 262, 401, 547, 507, 556, 587, 227, 259, + 562, 563, 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, - 288, 452, 431, 432, 570, 582, 571, 573, 214, 502, - 533, 240, 479, 0, 0, 589, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 590, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 591, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 574, 575, 576, 577, - 583, 581, 578, 579, 580, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 592, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 610, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 588, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 585, 586, 1342, 534, 565, 532, 584, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, - 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, - 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, - 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, - 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, - 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, - 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, - 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, - 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, - 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, - 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, - 535, 562, 563, 262, 401, 547, 507, 556, 587, 227, - 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, - 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, - 544, 288, 452, 431, 432, 570, 582, 571, 573, 214, - 502, 533, 240, 479, 0, 0, 589, 248, 499, 216, + 288, 452, 431, 432, 570, 583, 571, 573, 574, 214, + 502, 533, 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, - 0, 0, 257, 410, 527, 528, 255, 590, 229, 555, + 0, 0, 257, 410, 527, 528, 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, - 494, 543, 591, 235, 236, 238, 0, 278, 282, 290, + 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, - 517, 536, 548, 560, 566, 567, 569, 574, 575, 576, - 577, 583, 581, 578, 579, 580, 572, 402, 309, 490, + 517, 536, 548, 560, 566, 567, 569, 575, 576, 577, + 578, 584, 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 608, 609, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 610, 380, 481, 537, 333, 345, 348, 338, 357, + 0, 0, 0, 0, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, - 446, 0, 201, 222, 364, 0, 450, 287, 588, 551, + 446, 0, 201, 222, 364, 0, 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 928, 0, 0, 0, 203, 204, 211, 223, + 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, - 441, 442, 312, 313, 585, 586, 298, 534, 565, 532, - 584, 559, 435, 374, 0, 0, 549, 0, 377, 280, + 441, 442, 312, 313, 586, 587, 298, 534, 565, 532, + 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, @@ -6041,7 +6276,7 @@ var yyAct = [...]int{ 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, - 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, @@ -6056,113 +6291,46 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, - 613, 0, 561, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, - 447, 535, 562, 563, 262, 401, 547, 507, 556, 587, + 447, 535, 562, 563, 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, - 525, 544, 288, 452, 431, 432, 570, 582, 571, 573, - 214, 502, 533, 240, 479, 0, 0, 589, 248, 499, - 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, - 292, 0, 0, 257, 410, 527, 528, 255, 590, 229, - 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, - 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, - 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, - 0, 494, 543, 591, 235, 236, 238, 0, 278, 282, - 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, - 0, 517, 536, 548, 560, 566, 567, 569, 574, 575, - 576, 577, 583, 581, 578, 579, 580, 572, 402, 309, - 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 592, 593, 594, 595, 596, - 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 608, 609, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 610, 380, 481, 537, 333, 345, 348, 338, - 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, - 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, - 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, - 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, - 375, 446, 0, 201, 222, 364, 0, 450, 287, 588, - 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, - 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, - 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, - 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, - 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, - 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, - 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, - 300, 441, 442, 312, 313, 585, 586, 298, 534, 565, - 532, 584, 559, 435, 374, 0, 0, 549, 0, 377, - 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, - 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, - 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, - 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, - 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, - 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, - 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, - 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, - 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, - 0, 0, 0, 669, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, - 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, - 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, - 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, - 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, - 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, - 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, - 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, - 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, - 587, 227, 259, 415, 500, 541, 489, 393, 519, 520, - 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, - 232, 525, 544, 288, 452, 431, 432, 570, 582, 571, - 573, 214, 502, 533, 240, 479, 0, 0, 589, 248, + 525, 544, 288, 452, 431, 432, 570, 583, 571, 573, + 574, 214, 502, 533, 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 590, + 267, 292, 0, 0, 257, 410, 527, 528, 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 591, 235, 236, 238, 0, 278, + 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 0, 517, 536, 548, 560, 566, 567, 569, 574, - 575, 576, 577, 583, 581, 578, 579, 580, 572, 402, + 448, 0, 517, 536, 548, 560, 566, 567, 569, 575, + 576, 577, 578, 584, 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 610, 380, 481, 537, 333, 345, 348, + 0, 0, 0, 0, 0, 0, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, - 588, 551, 545, 208, 224, 0, 261, 0, 0, 0, + 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, - 3588, 405, 406, 409, 412, 413, 416, 418, 419, 422, + 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 299, 300, 441, 442, 312, 313, 585, 586, 298, 534, - 565, 532, 584, 559, 435, 374, 0, 0, 549, 0, + 299, 300, 441, 442, 312, 313, 586, 587, 298, 534, + 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, @@ -6175,7 +6343,7 @@ var yyAct = [...]int{ 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, - 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, @@ -6195,98 +6363,31 @@ var yyAct = [...]int{ 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, - 556, 587, 227, 259, 415, 500, 541, 489, 393, 519, + 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, - 243, 232, 525, 544, 288, 452, 431, 432, 570, 582, - 571, 573, 214, 502, 533, 240, 479, 0, 0, 589, - 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, - 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, - 590, 229, 555, 221, 0, 554, 403, 522, 531, 390, - 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, - 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, - 0, 210, 0, 494, 543, 591, 235, 236, 238, 0, - 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, - 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, - 574, 575, 576, 577, 583, 581, 578, 579, 580, 572, - 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, - 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 592, 593, 594, - 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 610, 380, 481, 537, 333, 345, - 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, - 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, - 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, - 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, - 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, - 287, 588, 551, 545, 208, 224, 0, 261, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, - 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, - 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, - 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, - 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, - 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, - 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, - 476, 299, 300, 441, 442, 312, 313, 585, 586, 298, - 534, 565, 532, 584, 559, 435, 374, 0, 0, 549, - 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, - 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, - 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, - 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, - 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, - 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, - 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, - 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, - 0, 0, 0, 0, 0, 843, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, - 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, - 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, - 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, - 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, - 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, - 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, - 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, - 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 587, 227, 259, 415, 500, 541, 489, 393, - 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, - 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 582, 571, 573, 214, 502, 533, 240, 479, 0, 0, - 589, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 243, 232, 525, 544, 288, 452, 431, 432, 570, 583, + 571, 573, 574, 214, 502, 533, 240, 479, 0, 0, + 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, - 255, 590, 229, 555, 221, 0, 554, 403, 522, 531, + 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 591, 235, 236, 238, + 542, 0, 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, - 569, 574, 575, 576, 577, 583, 581, 578, 579, 580, + 569, 575, 576, 577, 578, 584, 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 610, 380, 481, 537, 333, + 0, 0, 0, 0, 0, 0, 0, 0, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, - 450, 287, 588, 551, 545, 208, 224, 0, 261, 0, + 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, @@ -6295,103 +6396,37 @@ var yyAct = [...]int{ 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, - 564, 476, 299, 300, 441, 442, 312, 313, 585, 586, - 298, 534, 565, 532, 584, 559, 435, 374, 0, 0, + 564, 476, 299, 300, 441, 442, 312, 313, 586, 587, + 298, 534, 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, - 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, - 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, - 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, - 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, - 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, - 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, - 285, 0, 0, 0, 0, 0, 199, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, - 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, - 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, - 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, - 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, - 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, - 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, - 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, - 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, - 547, 507, 556, 587, 227, 259, 415, 500, 541, 489, - 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, - 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, - 570, 582, 571, 573, 214, 502, 533, 240, 479, 0, - 0, 589, 248, 499, 216, 530, 498, 389, 324, 325, - 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, - 528, 255, 590, 229, 555, 221, 0, 554, 403, 522, - 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, - 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, - 209, 542, 0, 210, 0, 494, 543, 591, 235, 236, - 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, - 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, - 567, 569, 574, 575, 576, 577, 583, 581, 578, 579, - 580, 572, 402, 309, 490, 331, 369, 0, 0, 420, - 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 608, 609, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 610, 380, 481, 537, - 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, - 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, - 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, - 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, - 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, - 0, 450, 287, 588, 551, 545, 208, 224, 0, 261, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, - 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, - 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, - 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, - 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, - 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, - 558, 564, 476, 299, 300, 441, 442, 312, 313, 585, - 586, 298, 534, 565, 532, 584, 559, 435, 374, 0, - 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, - 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, - 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, - 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, - 0, 0, 372, 514, 515, 314, + 242, 480, 504, 505, 506, 508, 391, 265, 428, 0, + 0, 372, 514, 515, 314, } var yyPact = [...]int{ - -1000, -1000, 3813, -1000, -467, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 4589, -1000, -467, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 2311, 2501, -1000, -1000, -1000, -1000, 2441, -1000, + 1197, 1867, -1000, 2176, 338, -1000, 47683, 575, -1000, 44995, + 572, 555, 147, -82, 5295, 30211, -1000, 236, -1000, 226, + 46339, 231, -1000, -1000, -1000, -1000, -316, 18785, 2103, 115, + 112, 47683, -1000, -1000, -1000, -1000, 2408, 1814, -1000, 412, + -1000, -1000, -1000, -1000, -1000, -1000, 44323, -1000, 964, -1000, + -1000, 2194, 2181, 2449, 725, 2134, -1000, 2339, 1814, -1000, + 18785, 2394, 2260, 18113, 18113, 492, -1000, -1000, 261, -1000, + -1000, -1000, 2454, 25507, 47683, -1000, 32899, 407, -1000, 2176, + -1000, -1000, -1000, 98, -1000, 378, 1745, -1000, 1736, -1000, + 835, 868, 398, 537, 531, 397, 395, 394, 393, 392, + 386, 385, 384, 405, -1000, 745, 745, -119, -123, 1259, + 490, 447, 447, 890, 530, 2145, 2140, -1000, -1000, 745, + 745, 745, 413, 745, 745, 745, 745, 350, 349, 745, + 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, + 745, 745, 745, 745, 745, 745, 470, 2176, 331, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 2266, 2426, -1000, -1000, -1000, -1000, 2512, -1000, - 1116, 1983, -1000, 2282, 4544, -1000, 47365, 608, -1000, 44681, - 604, 592, 137, -85, 5057, 29919, -1000, 235, -1000, 226, - 46023, 234, -1000, -1000, -1000, -1000, -324, 18510, 2202, 113, - 109, 47365, -1000, -1000, -1000, -1000, 2469, 1969, -1000, 412, - -1000, -1000, -1000, -1000, -1000, -1000, 44010, -1000, 1006, -1000, - -1000, 2293, 2267, 2522, 768, 2248, -1000, 2409, 1969, -1000, - 18510, 2464, 2342, 17839, 17839, 507, -1000, -1000, 225, -1000, - -1000, -1000, 2532, 25222, 47365, -1000, 32603, 354, -1000, 2282, - -1000, -1000, -1000, 97, -1000, 405, 1891, -1000, 1889, -1000, - 1008, 1057, 443, 559, 540, 440, 437, 435, 433, 432, - 431, 420, 418, 451, -1000, 799, 799, -116, -121, 3210, - 499, 497, 497, 875, 533, 2249, 2231, -1000, -1000, 799, - 799, 799, 458, 799, 799, 799, 799, 353, 350, 799, - 799, 799, 799, 799, 799, 799, 799, 799, 799, 799, - 799, 799, 799, 799, 799, 799, 402, 2282, 337, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -6432,63 +6467,62 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 47683, 253, 47683, -1000, 652, 47683, 47683, -1000, + 1175, 1173, -1000, -1000, 892, -1000, -1000, 892, 123, 892, + 892, 892, 892, 240, 669, 111, -1000, 235, 314, 218, + 323, 909, 248, -1000, -1000, 311, 909, 963, 909, 1574, + 1569, -1000, 729, 322, 228, -1000, 892, 892, -1000, -1000, + 12040, 171, 12040, 12040, -1000, 2172, -1000, -1000, -1000, -1000, + -1000, 1188, -1000, -1000, -1000, -1000, 7, 528, -1000, -1000, + -1000, -1000, 46339, 43651, 295, -1000, -1000, 55, -1000, -1000, + 1610, 945, 18785, 1095, -1000, 1991, 703, -1000, -1000, -1000, + -1000, -1000, 611, -1000, 19457, 19457, 19457, 19457, -1000, -1000, + 1424, 42979, 1424, 1424, 19457, 1424, -1000, 19457, 1424, 1424, + 1424, 18785, 1424, 1424, 1424, 1424, -1000, 1424, 1424, 1424, + 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, + 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, + 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, + 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, + 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, + 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, + 1424, 1424, 1424, 1424, 1424, -1000, -1000, -1000, -1000, 1424, + 639, 1424, 1424, 1424, 1424, 1424, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 1424, 1424, 1424, 1424, 1424, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1424, 1424, + 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, + 1424, 1424, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 21473, 1383, 1381, 1379, -1000, 16097, 1424, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 47365, 248, 47365, -1000, 684, 47365, 47365, -1000, 1289, - 1287, -1000, -1000, 963, -1000, -1000, 963, 125, 963, 963, - 963, 963, 245, 718, 107, -1000, 240, 324, 232, 331, - 923, 257, -1000, -1000, 309, 923, 919, 923, 1749, 1747, - -1000, 773, 329, 230, -1000, 963, 963, -1000, -1000, 11775, - 165, 11775, 11775, -1000, 2279, -1000, -1000, -1000, -1000, -1000, - 1265, -1000, -1000, -1000, -1000, 5, 521, -1000, -1000, -1000, - -1000, 46023, 43339, 295, -1000, -1000, 58, -1000, -1000, 1645, - 1174, 18510, 1261, -1000, 1766, 735, -1000, -1000, -1000, -1000, - -1000, 658, -1000, 19181, 19181, 19181, 19181, -1000, -1000, 1596, - 42668, 1596, 1596, 19181, 1596, -1000, 19181, 1596, 1596, 1596, - 18510, 1596, 1596, 1596, 1596, -1000, 1596, 1596, 1596, 1596, - 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, - 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, - 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, - 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, - 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, - 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, - 1596, 1596, 1596, 1596, -1000, -1000, -1000, -1000, 1596, 681, - 1596, 1596, 1596, 1596, 1596, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 1596, 1596, 1596, 1596, 1596, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1596, 1596, 1596, - 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, - 1596, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 21194, 1487, 1480, 1450, -1000, 15826, 1596, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 47365, - -1000, 1596, 259, 46023, 46023, 384, 2409, 1969, -1000, 2469, - 2457, 412, 2903, 1799, 1462, 1401, 1969, 1873, 47365, -1000, - 1897, -1000, -1000, -1000, -1000, 2143, 1418, 1729, -1000, -1000, - -1000, -1000, 1745, 18510, -1000, -1000, 2506, -1000, 22537, 678, - 2503, 41997, -1000, 507, 507, 1887, 470, 63, -1000, -1000, - -1000, -1000, 824, 29248, -1000, -1000, -1000, -1000, -1000, 1760, - 47365, -1000, -1000, 6857, 1190, -1000, 1976, -1000, 2509, 1743, - -1000, 1934, 18510, 2002, 575, 1190, 561, 553, 552, -1000, - -18, -1000, -1000, -1000, -1000, -1000, -1000, 799, 799, 799, - -1000, 450, 2455, 4544, 4097, -1000, -1000, -1000, 41326, 1975, - 1190, -1000, 1973, -1000, 921, 594, 657, 657, 1190, -1000, - -1000, 46694, 1190, 916, 915, 1190, 1190, 46023, 46023, -1000, - 40655, -1000, 39984, 39313, 1286, 46023, 38642, 37971, 37300, 36629, - 35958, -1000, 2162, -1000, 1990, -1000, -1000, -1000, 46694, 1190, - 1190, 46694, 46023, 46694, 47365, 1190, -1000, -1000, 414, -1000, - -1000, 1285, 1246, 1238, 799, 799, 1237, 1724, 1712, 1696, - 799, 799, 1233, 1688, 31261, 1684, 381, 1231, 1228, 1221, - 1218, 1681, 205, 1657, 1172, 1109, 1214, 46023, 1965, 47365, - -1000, 307, 798, 600, 769, 531, 823, 2282, 2199, 1885, - 520, 573, 1190, 500, 500, 46023, -1000, 13806, -1000, 572, - -1000, -1000, -1000, -1000, 1614, 18510, -1000, 925, 923, 923, - -1000, -1000, -1000, -1000, -1000, -1000, 963, 47365, 925, -1000, - -1000, -1000, 923, 963, 47365, 963, 963, 963, 963, 923, - 923, 923, 963, 47365, 47365, 47365, 47365, 47365, 47365, 47365, - 47365, 47365, 11775, 773, 963, 963, -332, 963, 236, -335, - -1000, 1609, -1000, -1000, 2103, -1000, -1000, -1000, -1000, -1000, + 47683, -1000, 1424, 259, 46339, 46339, 367, 2339, 1814, -1000, + 2408, 2373, 412, 2665, 1459, 1447, 1318, 1814, 1716, 47683, + -1000, 1771, -1000, -1000, -1000, -1000, 2018, 1278, 1559, -1000, + -1000, -1000, -1000, 1666, 18785, -1000, -1000, 2438, -1000, 22818, + 631, 2437, 42307, -1000, 492, 492, 1734, 466, 37, -1000, + -1000, -1000, -1000, 782, 29539, -1000, -1000, -1000, -1000, -1000, + 1573, 47683, -1000, -1000, 5685, 1191, -1000, 1864, -1000, 2555, + 1564, -1000, 1792, 18785, 1874, 552, 1191, 544, 538, 536, + -1000, -17, -1000, -1000, -1000, -1000, -1000, -1000, 745, 745, + 745, -1000, 401, 2392, 338, 5317, -1000, -1000, -1000, 41635, + 1837, 1191, -1000, 1822, -1000, 847, 574, 637, 637, 1191, + -1000, -1000, 47011, 1191, 846, 839, 1191, 1191, 46339, 46339, + -1000, 40963, -1000, 40291, 39619, 1163, 46339, 38947, 38275, 37603, + 36931, 36259, -1000, 2025, -1000, 1878, -1000, -1000, -1000, 47011, + 1191, 1191, 47011, 46339, 47011, 47683, 1191, -1000, -1000, 415, + -1000, -1000, 1160, 1148, 1146, 745, 745, 1132, 1557, 1556, + 1550, 745, 745, 1131, 1538, 31555, 1525, 328, 1130, 1126, + 1123, 1147, 1520, 205, 1513, 1103, 1080, 1120, 46339, 1821, + 47683, -1000, 296, 752, 983, 535, 911, 780, 2176, 2102, + 1733, 524, 551, 1191, 467, 467, 46339, -1000, 14074, -1000, + 556, -1000, -1000, -1000, -1000, 1508, 18785, -1000, 910, 909, + 909, -1000, -1000, -1000, -1000, -1000, -1000, 892, 47683, 910, + -1000, -1000, -1000, 909, 892, 47683, 892, 892, 892, 892, + 909, 909, 909, 892, 47683, 47683, 47683, 47683, 47683, 47683, + 47683, 47683, 47683, 12040, 729, 892, 892, -324, 892, 242, + -330, -1000, 1504, -1000, -1000, 1993, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -6504,292 +6538,293 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 11775, 11775, -1000, - -1000, -1000, -1000, -1000, 1884, -1000, 221, 77, 233, -1000, - 35287, 416, 821, -1000, 416, -1000, -1000, -1000, 1881, 34616, - -1000, -336, -341, -376, -377, -1000, -1000, -1000, -1000, -378, - -381, -1000, -1000, -1000, 18510, 18510, 18510, 18510, -146, -1000, - 1185, 19181, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 162, - 1011, 19181, 19181, 19181, 19181, 19181, 19181, 19181, 19181, 19181, - 19181, 19181, 19181, 19181, 19181, 19181, -1000, -1000, 27235, 8189, - 8189, 735, 735, 735, 735, -1000, -84, 1878, 46694, -1000, - -1000, -1000, 677, 18510, 18510, 735, -1000, 1190, 15826, 19852, - 17839, 17839, 18510, 838, 1174, 46694, 18510, -1000, 1401, -1000, - -1000, -1000, 1189, -1000, 945, 2245, 2245, 2245, 2245, 18510, - 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, 2245, - 46023, 46023, 772, 18510, 18510, 18510, 18510, 18510, 18510, 14483, - 18510, 18510, 19181, 18510, 18510, 18510, 1401, 18510, 18510, 18510, - 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, - 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, - 18510, 18510, 18510, 18510, 1401, 18510, 1161, 18510, 18510, 17839, - 13129, 17839, 17839, 17839, 17839, 17839, -1000, -1000, -1000, -1000, - -1000, 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, 1401, - 18510, 18510, 18510, 18510, 18510, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 1483, 1501, 1421, 18510, -1000, - 1874, -1000, -67, 24551, 18510, 1600, 1595, 2502, 2032, 46023, - -1000, -1000, -1000, 2409, -1000, 2409, 1483, 2057, 17839, -1000, - -1000, 2509, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 1720, -1000, 47365, 1873, 2328, 46023, 2145, 1588, 408, -1000, - 18510, 18510, 1870, -1000, 1427, 47365, -1000, -146, -1000, 33945, - -1000, -1000, 11098, 47365, 413, 47365, -1000, 23880, 33274, 229, - -1000, 63, 1820, -1000, 81, 28, 15154, 732, -1000, -1000, - -1000, 3210, 20523, 1579, 732, 153, -1000, -1000, -1000, 1934, - -1000, 1934, 1934, 1934, 1934, 408, 408, 408, 408, -1000, - -1000, -1000, -1000, -1000, 1960, 1956, -1000, 1934, 1934, 1934, - 1934, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1955, 1955, - 1955, 1952, 1952, 1936, 1936, 490, -1000, 18510, -1000, -1000, - 323, 32603, 2310, 1213, 1209, 307, 502, 2030, 1190, 1190, - 1190, 502, -1000, 1387, 1385, 1361, -1000, -456, 1867, -1000, - -1000, 2452, -1000, -1000, 1099, 962, 959, 889, 46023, 263, - 383, -1000, 481, -1000, 32603, 1190, 909, 657, 1190, -1000, - 1190, -1000, -1000, -1000, -1000, -1000, 1190, -1000, -1000, 1854, - -1000, 1868, 1032, 957, 1000, 947, 1854, -1000, -1000, -89, - 1854, -1000, 1854, -1000, 1854, -1000, 1854, -1000, 1854, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 818, 252, - -225, 46023, 263, 519, -1000, 518, 27235, -1000, -1000, -1000, - 27235, 27235, -1000, -1000, -1000, -1000, 1586, 1583, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 12040, 12040, + -1000, -1000, -1000, -1000, -1000, 1732, -1000, 219, 82, 220, + -1000, 35587, 410, 772, -1000, 410, -1000, -1000, -1000, 1731, + 34915, -1000, -334, -346, -375, -380, -1000, -1000, -1000, -1000, + -383, -384, -1000, -1000, -1000, 18785, 18785, 18785, 18785, -152, + -1000, 883, 19457, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 154, 901, 19457, 19457, 19457, 19457, 19457, 19457, 19457, 19457, + 19457, 19457, 19457, 19457, 19457, 19457, 19457, -1000, -1000, 27523, + 6811, 6811, 703, 703, 703, 703, -1000, -78, 1725, 47011, + -1000, -1000, -1000, 629, 18785, 18785, 703, -1000, 1191, 16097, + 20129, 18113, 18113, 18785, 794, 945, 47011, 18785, -1000, 1318, + -1000, -1000, -1000, 1183, -1000, 861, 2163, 2163, 2163, 2163, + 18785, 18785, 18785, 18785, 18785, 18785, 18785, 18785, 18785, 18785, + 2163, 46339, 46339, 1486, 18785, 18785, 18785, 18785, 18785, 18785, + 14752, 18785, 18785, 19457, 18785, 18785, 18785, 1318, 18785, 18785, + 18785, 18785, 18785, 18785, 18785, 18785, 18785, 18785, 18785, 18785, + 18785, 18785, 18785, 18785, 18785, 18785, 18785, 18785, 18785, 18785, + 18785, 18785, 18785, 18785, 18785, 1318, 18785, 1216, 18785, 18785, + 18113, 13396, 18113, 18113, 18113, 18113, 18113, -1000, -1000, -1000, + -1000, -1000, 18785, 18785, 18785, 18785, 18785, 18785, 18785, 18785, + 1318, 18785, 18785, 18785, 18785, 18785, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 1317, 1336, 1245, 18785, + -1000, 1724, -1000, -100, 24835, 18785, 1497, 1490, 2434, 1889, + 46339, -1000, -1000, -1000, 2339, -1000, 2339, 1317, 2023, 18113, + -1000, -1000, 2555, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 1552, -1000, 47683, 1716, 2242, 46339, 2012, 1478, 403, + -1000, 18785, 18785, 1699, -1000, 1494, 47683, -1000, -152, -1000, + 34243, -1000, -1000, 11362, 47683, 381, 47683, -1000, 24163, 33571, + 324, -1000, 37, 1669, -1000, 74, 30, 15424, 699, -1000, + -1000, -1000, 1259, 20801, 1597, 699, 149, -1000, -1000, -1000, + 1792, -1000, 1792, 1792, 1792, 1792, 403, 403, 403, 403, + -1000, -1000, -1000, -1000, -1000, 1820, 1819, -1000, 1792, 1792, + 1792, 1792, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1810, + 1810, 1810, 1809, 1809, 1794, 1794, 457, -1000, 18785, -1000, + -1000, 312, 32899, 2206, 1113, 1269, 296, 472, 1888, 1191, + 1191, 1191, 472, -1000, 1229, 1227, 1223, -1000, -457, 1698, + -1000, -1000, 2391, -1000, -1000, 578, 920, 903, 1061, 46339, + 272, 375, -1000, 451, -1000, 32899, 1191, 833, 637, 1191, + -1000, 1191, -1000, -1000, -1000, -1000, -1000, 1191, -1000, -1000, + 1697, -1000, 1664, 922, 894, 897, 893, 1697, -1000, -1000, + -91, 1697, -1000, 1697, -1000, 1697, -1000, 1697, -1000, 1697, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 784, + 244, -229, 46339, 272, 504, -1000, 499, 27523, -1000, -1000, + -1000, 27523, 27523, -1000, -1000, -1000, -1000, 1476, 1464, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -441, 47365, -1000, - 306, 814, 372, 422, 344, 47365, 364, 2403, 2399, 2391, - 2390, 2389, 2387, 2385, 419, 2372, 2366, 2364, 2362, 2360, - 2359, 299, 2358, 2353, 2351, 2347, 2346, 2345, 2320, 289, - 348, 47365, 47365, 500, 2096, 47365, 2308, 47365, -1000, -1000, - -1000, -1000, 491, 47365, -1000, 333, -1000, -1000, -1000, -1000, - -1000, -1000, 1174, 47365, -1000, -1000, 963, 963, -1000, -1000, - 47365, 963, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 963, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -443, 47683, + -1000, 285, 763, 357, 396, 346, 47683, 887, 2335, 2334, + 2333, 2332, 2330, 2324, 2322, 443, 2320, 2312, 2302, 2300, + 2299, 2290, 709, 2286, 2276, 2275, 2269, 2266, 2245, 2225, + 302, 348, 47683, 47683, 467, 1954, 47683, 2203, 47683, -1000, + -1000, -1000, -1000, 461, 47683, -1000, 325, -1000, -1000, -1000, + -1000, -1000, -1000, 945, 47683, -1000, -1000, 892, 892, -1000, + -1000, 47683, 892, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 892, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 47365, -1000, -1000, -1000, -1000, 5, 219, -1000, -1000, 46023, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -39, - -1000, 130, 73, 399, -1000, -1000, -1000, -1000, -1000, 2405, - -1000, 1174, 907, 868, -1000, 1596, -1000, -1000, 1055, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 162, 19181, 19181, 19181, - 1780, 562, 1074, 1227, 849, 932, 932, 899, 899, 746, - 746, 746, 746, 746, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 1573, -1000, 1596, 46694, 1728, 13129, 1467, 1503, - 1401, 2953, -1000, 1723, -1000, 1723, 1322, 834, -1000, 18510, - 1401, 2939, -1000, -1000, 1401, 1401, 1401, 18510, -1000, -1000, - 18510, 18510, 18510, 18510, 1209, 1209, 1209, 1209, 1209, 1209, - 1209, 1209, 1209, 1209, 18510, 1835, 1831, 2501, -1000, -1000, + -1000, 47683, -1000, -1000, -1000, -1000, 7, 222, -1000, -1000, + 46339, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -38, -1000, 81, 67, 404, -1000, -1000, -1000, -1000, -1000, + 2292, -1000, 945, 821, 809, -1000, 1424, -1000, -1000, 1025, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 154, 19457, 19457, + 19457, 1628, 508, 2028, 1293, 1249, 933, 933, 1062, 1062, + 710, 710, 710, 710, 710, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 1456, -1000, 1424, 47011, 1536, 13396, 1746, + 1977, 1318, 3014, -1000, 1532, -1000, 1532, 1198, 790, -1000, + 18785, 1318, 3006, -1000, -1000, 1318, 1318, 1318, 18785, -1000, + -1000, 18785, 18785, 18785, 18785, 1269, 1269, 1269, 1269, 1269, + 1269, 1269, 1269, 1269, 1269, 18785, 1691, 1685, 2431, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1282, - 1209, 1209, 1209, 1209, 1209, 18510, 1561, -1000, -1000, -1000, - 1409, 2913, 1391, 2898, 1209, 1209, -1000, 1209, 2891, 2887, - 1401, 1645, 1401, 1828, -1000, 2876, 1209, 2871, 2867, 2841, - 2086, 2805, 2769, 2759, 1209, 1209, 1209, 2081, 2755, 2740, - 2735, 2719, 2608, 2587, 2520, 2418, 2398, 1209, -149, 1209, - 1401, -1000, -1000, -1000, -1000, -1000, 2381, 2065, 1401, 1827, - 1596, 673, -1000, -1000, 1723, 1401, 1401, 1723, 1723, 2356, - 2341, 2329, 2322, 2318, 2307, 1209, 1209, -1000, 1209, 2301, - 2277, 2054, 2050, 1401, -1000, 1421, 47365, -1000, -319, -1000, - 33, 672, 1596, -1000, 31261, 1401, -1000, -1000, 7203, -1000, - 1015, -1000, -1000, -1000, 28577, 1785, 2509, -1000, -1000, 1596, - 1717, -1000, -1000, 408, 131, 27906, 716, 716, 163, 1174, - 1174, 18510, -1000, -1000, -1000, -1000, -1000, -1000, 670, 2483, - 424, 1596, -1000, 1866, 2288, -1000, -1000, -1000, 2326, 21866, - -1000, -1000, 1596, 1596, 47365, 1784, 1680, -1000, 669, -1000, - 1232, 1820, 63, 69, -1000, -1000, -1000, -1000, 1174, -1000, - 1359, 417, 719, -1000, 487, -1000, -1000, -1000, -1000, 2218, - 140, -1000, -1000, -1000, 276, 408, -1000, -1000, -1000, -1000, - -1000, -1000, 1567, 1567, -1000, -1000, -1000, -1000, -1000, 1199, - -1000, -1000, -1000, -1000, 1195, -1000, -1000, 1194, -1000, -1000, - 2111, 2043, 323, -1000, -1000, 799, 1558, -1000, -1000, 2223, - 799, 799, 46023, -1000, -1000, 1536, 2310, 306, 47365, 845, - 2090, -1000, 2030, 2030, 2030, 47365, -1000, -1000, -1000, -1000, - -1000, -1000, -443, 78, 442, -1000, -1000, -1000, 338, 46023, - 1709, -1000, 258, -1000, 1531, -1000, 46023, -1000, 1707, 1949, - 1190, 1190, -1000, -1000, -1000, 46023, 1596, -1000, -1000, -1000, - -1000, 571, 2278, 320, -1000, -1000, -174, -1000, -1000, 263, - 258, 46694, 1190, 732, -1000, -1000, -1000, -1000, -1000, -444, - 1703, 541, 282, 359, 47365, 47365, 47365, 47365, 47365, 647, - -1000, -1000, 98, -1000, -1000, -1000, -1000, 249, -1000, -1000, - -1000, -1000, -1000, -1000, 249, -1000, -1000, -1000, -1000, -1000, - 249, -1000, -1000, -1000, -1000, -1000, 249, -1000, -1000, -1000, - 96, -1000, -1000, -1000, -1000, 249, -1000, -1000, -1000, -1000, - -1000, -1000, 249, -1000, -1000, -1000, -1000, 340, 511, -1000, - 47365, 47365, 699, -1000, -1000, -1000, -1000, -1000, -1000, 923, - -1000, -1000, 923, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 2269, 47365, 70, -402, -1000, - -399, 18510, -1000, -1000, -1000, -1000, 1196, 558, 1074, 19181, - 19181, 19181, -1000, -1000, -1000, 480, 480, 27235, -1000, 18510, - 17839, -1000, -1000, 18510, 18510, 830, -1000, 18510, 1128, -1000, - 18510, -1000, -1000, -1000, 1421, 1209, 1209, 1209, 1209, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1826, - 18510, 18510, 18510, 1401, 363, -1000, -1000, -1000, -1000, -1000, - 2499, -1000, 18510, -1000, 27235, 18510, 18510, 18510, -1000, -1000, - -1000, 18510, 18510, -1000, -1000, 18510, 18510, -1000, 18510, 18510, - 18510, -1000, 18510, 18510, 18510, 18510, -1000, -1000, -1000, -1000, - 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, 18510, - -1000, -1000, 32603, 110, -149, 1161, 110, 1161, -1000, 17839, - 12452, -1000, -1000, -1000, -1000, -1000, 18510, 18510, 18510, 18510, - 18510, 18510, -1000, -1000, -1000, 18510, 18510, -1000, 18510, -1000, - 18510, -1000, -1000, -1000, -1000, -1000, 672, -1000, 657, 657, - 657, 46023, -1000, -1000, -1000, -1000, 1819, -1000, 2349, -1000, - 2160, 2158, 2489, 2483, -1000, 23880, 2509, -1000, -1000, 46023, - -297, -1000, 2193, 2216, 716, 716, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 10421, 2409, 18510, 2089, 46694, 157, -1000, - 23209, 46023, 46694, 23880, 23880, 23880, 23880, 23880, -1000, 2130, - 2123, -1000, 2142, 2131, 2117, 47365, -1000, 1483, 1701, -1000, - 18510, 25893, 1807, 23880, -1000, -1000, 23880, 47365, 9744, -1000, - -1000, 38, 20, -1000, -1000, -1000, -1000, 3210, -1000, -1000, - 1781, 2325, 2204, -1000, -1000, -1000, -1000, -1000, 1672, -1000, - 1668, 1817, 1648, 1623, 252, -1000, 2000, 2268, 799, 799, - -1000, 1192, -1000, 1190, 1538, 1527, -1000, -1000, -1000, 536, - -1000, 2303, 47365, 2084, 2083, 2079, -1000, -455, 1183, 1942, - 1997, 18510, 1941, 2446, 1801, 46023, -1000, -1000, 46694, -1000, - 305, -1000, 323, 46023, -1000, -1000, -1000, 383, 47365, -1000, - 8018, -1000, -1000, -1000, 258, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 47365, 279, -1000, 1937, 1120, -1000, -1000, 2008, - -1000, -1000, -1000, -1000, 254, 358, 1515, 241, 1509, 241, - 241, 241, 1499, 241, 241, -1000, 47365, 599, 2043, 47365, - -1000, -1000, -1000, 963, 963, -1000, -1000, 2253, -1000, 1190, - 1209, 19181, 19181, -1000, 735, 304, -127, 1934, 1934, -1000, - 1934, 1936, -1000, 1934, 208, 1934, 207, 1934, -1000, -1000, - 1401, 1401, 1421, -1000, 2040, 1318, -1000, 1174, 18510, 2262, - -1000, -1000, -1000, -1000, -1000, -25, 2252, 2167, 1209, -1000, - 1932, 1931, 18510, 1209, 1401, 2016, 1209, 1209, 1209, 1209, - -1000, 1174, 1421, 2141, 1421, 1209, 1209, 2136, 339, 1209, - 1621, 1621, 1621, 1621, 1621, 1421, 1421, 1421, 1421, 46023, - -1000, -149, -1000, -1000, -194, -195, -1000, 1401, -149, 1803, - 1401, -1000, 2005, 1961, 2097, 1875, 1209, 2023, 1209, 1209, - 1209, 1871, -1000, 2382, 2382, 2382, 1572, 1015, 47365, -1000, - -1000, -1000, -1000, 2483, 2479, 1802, -1000, -1000, 131, 476, - -1000, 2201, 2216, -1000, 2438, 2187, 2435, -1000, -1000, -1000, - -1000, -1000, 1174, -1000, 2285, 1806, -1000, 809, 1674, -1000, - -1000, 17168, 1578, 2153, 665, 1572, 1853, 2288, 2045, 2075, - 3031, -1000, -1000, -1000, -1000, 2121, -1000, 2053, -1000, -1000, - 1897, -1000, 1643, 413, 23880, 1777, 1777, -1000, 663, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 972, 7607, 2518, -1000, - 1497, -1000, 1357, 202, 1168, -1000, -1000, 799, 799, -1000, - 895, 892, -1000, 47365, 1928, -1000, 408, 1489, 408, 1165, - -1000, -1000, 1163, -1000, -1000, -1000, -1000, 1908, 2055, -1000, - -1000, -1000, -1000, 47365, -1000, -1000, 47365, 47365, 47365, 1924, - 2433, -1000, 18510, 1920, 802, 2060, 46023, 46023, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 504, - 799, -420, 346, 343, 799, 799, 799, -461, -1000, -1000, - 1563, 1552, -1000, -113, -1000, 18510, -1000, -1000, -1000, 1223, - 1223, 1487, 1480, 1450, -1000, 1897, -1000, -1000, -1000, 1504, - -1000, -1000, -94, 46023, 46023, 46023, 46023, -1000, -1000, 1013, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 735, 1401, 366, - -100, 1401, -1000, -1000, 408, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 18510, -1000, 18510, -1000, 1174, - 18510, 2409, 1435, 18510, 18510, -1000, 1112, 1106, 1209, -1000, - -1000, -1000, 18510, -1000, -1000, -1000, -1000, -1000, 18510, -1000, - -1000, -1000, 18510, 215, 480, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 1401, 404, -1000, -1000, -1000, - -1000, 2485, -1000, 1401, 18510, -1000, -1000, 18510, -1000, 18510, - 18510, -1000, 18510, -1000, 18510, -1000, -1000, -1000, -1000, 18510, - 1596, 2159, 1596, 1596, 25893, -1000, -1000, 2479, 2472, 2432, - 2180, 2182, 2182, 2201, -1000, 2431, 2430, -1000, 1433, 2421, - 1424, 890, -1000, 46694, 18510, 157, -1000, 421, 46023, 157, - 46023, -1000, 2470, -1000, -1000, 18510, 1919, -1000, 18510, -1000, - -1000, -1000, -1000, 8189, 2483, 1777, -1000, -1000, 760, -1000, - 18510, -1000, -1000, -1000, 7015, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 1411, 1404, -1000, -1000, 1907, 18510, -1000, - -1000, -1000, 1496, 1461, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 1897, -1000, -1000, -1000, -1000, 383, -451, 1762, - 46023, 1105, -1000, 1550, 1801, 376, 157, 1396, 799, 799, - 799, 1094, 1092, 31261, 1535, -1000, 46023, 467, -1000, 383, - -1000, -122, -124, 1209, -1000, -1000, 2323, -1000, -1000, 12452, - -1000, -1000, 1895, 2014, -1000, -1000, -1000, -1000, 2100, -87, - -108, -1000, -1000, 1209, 1209, 1631, 1401, -1000, 1209, 1209, - 1456, 1441, -1000, 1209, 1421, 1771, -1000, 215, 1401, 2074, - -1000, -1000, 8189, -1000, -1000, 2470, 2413, 110, -1000, -1000, - 273, 110, 1174, 1603, 1209, 1593, 1530, 1209, 1209, 26564, - -1000, 2412, 2411, 31932, 31932, 672, 2472, -157, 18510, 18510, - 2176, 1063, -1000, -1000, -1000, -1000, 1390, 1376, -1000, 1368, - -1000, 2517, -1000, 1174, -1000, 157, -1000, 662, 1674, -1000, - 2409, 1174, 46023, 1174, 139, 2470, -1000, 1209, -1000, 1596, - 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, - 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, - 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, - 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, - 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, - 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, - 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, -1000, - -1000, 46023, 1739, -1000, -1000, 2321, 1485, 75, -1000, 1428, - 1801, -1000, -1000, 155, -1000, 18510, -1000, 31261, 1340, 1337, - -1000, -1000, -1000, -1000, -461, -1000, -1000, -1000, -1000, -1000, - -1000, 412, 1783, -1000, 797, 46023, 47365, -1000, 2068, -1000, - -1000, -1000, 18510, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 18510, -1000, 1401, 2073, -1000, -272, -1000, -423, 18510, - -149, -1000, -1000, -149, -1000, 18510, -1000, -1000, 18510, -1000, - 18510, -1000, -1000, 1460, -1000, -1000, -1000, -1000, -1000, 1460, - 1460, -1000, -157, -1000, 1782, -1000, 46023, 1174, 1645, -1000, - 1035, -1000, -1000, -1000, -1000, -1000, 46694, 1674, 46023, -1000, - 1455, 1401, 1596, 2409, -1000, 1440, -1000, 412, -1000, 1893, - 1997, -1000, -1000, -1000, 16497, -1000, -1000, -1000, -1000, -1000, - 214, -91, 12452, 9067, 1423, -1000, -90, 1209, 1421, -1000, - -385, -1000, -1000, -1000, -1000, 239, -1000, -1000, 1645, -1000, - -1000, 1523, 1514, 1495, 30590, -1000, -1000, -1000, -1000, -157, - -1000, -1000, 2317, -1000, -1000, 1625, -1000, -1000, 25893, 45352, - -1000, -80, 260, -91, 18510, 1767, 1401, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 22, -1000, -1000, -1000, -1000, - -1000, 2008, -103, -1000, -1000, -1000, 142, -406, -198, -199, - -1000, -1000, 19181, -1000, 18510, -1000, 18510, -1000, 18510, -1000, - -1000, -1000, 46023, 1596, -1000, 1417, -1000, 5912, -215, 2064, - -1000, -9, -1000, -1000, -1000, 940, 1335, -1000, -1000, -1000, - -1000, -1000, -1000, 1331, 46023, -1000, 439, -1000, -1000, -94, - -110, 858, -1000, -1000, -1000, -1000, -1000, 1380, 1267, 1209, - -1000, 46023, -1000, 45352, -200, 732, 8189, -1000, 2056, 2047, - 2496, -1000, -1000, -1000, -1000, -1000, -1000, -463, 1400, 308, - -1000, -1000, 142, -1000, 18510, -1000, 18510, -1000, 1401, -1000, - -1000, 2302, 139, -1000, 2515, -1000, 2513, 689, 689, -1000, - 1073, -463, -1000, -1000, 1209, 1209, -1000, -218, -1000, -1000, - -1000, -1000, -1000, 474, 1130, -1000, -1000, -1000, -1000, -1000, - 8189, -1000, -1000, -1000, 261, 261, -1000, -1000, + 1541, 1269, 1269, 1269, 1269, 1269, 18785, 1970, -1000, -1000, + -1000, 1273, 3001, 1850, 2987, 1269, 1269, -1000, 1269, 2981, + 2974, 1318, 1610, 1318, 1673, -1000, 2962, 1269, 2958, 2951, + 2945, 2254, 2932, 2906, 2902, 1269, 1269, 1269, 2223, 2893, + 2889, 2870, 2841, 2762, 2743, 2720, 2716, 2526, 1269, -155, + 1269, 1318, -1000, -1000, -1000, -1000, -1000, 2521, 2167, 1318, + 1671, 1424, 626, -1000, -1000, 1532, 1318, 1318, 1532, 1532, + 2424, 2403, 2393, 2385, 2369, 2359, 1269, 1269, -1000, 1269, + 2336, 2329, 2162, 2121, 1318, -1000, 1245, 47683, -1000, -304, + -1000, 59, 717, 1424, -1000, 31555, 1318, -1000, -1000, 5971, + -1000, 1065, -1000, -1000, -1000, 28867, 1560, 2555, -1000, -1000, + 1424, 1530, -1000, -1000, 403, 132, 28195, 600, 600, 163, + 945, 945, 18785, -1000, -1000, -1000, -1000, -1000, -1000, 606, + 2337, 424, 1424, -1000, 1695, 2174, -1000, -1000, -1000, 2239, + 22146, -1000, -1000, 1424, 1424, 47683, 1622, 1599, -1000, 601, + -1000, 1203, 1669, 37, 72, -1000, -1000, -1000, -1000, 945, + -1000, 1219, 382, 719, -1000, 437, -1000, -1000, -1000, -1000, + 2126, 146, -1000, -1000, -1000, 266, 403, -1000, -1000, -1000, + -1000, -1000, -1000, 1454, 1454, -1000, -1000, -1000, -1000, -1000, + 1112, -1000, -1000, -1000, -1000, 1109, -1000, -1000, 1108, -1000, + -1000, 2309, 1942, 312, -1000, -1000, 745, 1451, -1000, -1000, + 2130, 745, 745, 46339, -1000, -1000, 1585, 2206, 285, 47683, + 804, 1952, -1000, 1888, 1888, 1888, 47683, -1000, -1000, -1000, + -1000, -1000, -1000, -445, 80, 430, -1000, -1000, -1000, 4856, + 46339, 1496, -1000, 268, -1000, 1580, -1000, 46339, -1000, 1489, + 1808, 1191, 1191, -1000, -1000, -1000, 46339, 1424, -1000, -1000, + -1000, -1000, 550, 2175, 326, -1000, -1000, -180, -1000, -1000, + 272, 268, 47011, 1191, 699, -1000, -1000, -1000, -1000, -1000, + -446, 1485, 509, 277, 361, 47683, 47683, 47683, 47683, 47683, + 613, -1000, -1000, 94, -1000, -1000, -1000, -1000, 252, -1000, + -1000, -1000, -1000, -1000, -1000, 252, -1000, -1000, -1000, -1000, + -1000, 252, -1000, 1439, -1000, -1000, -1000, -1000, 252, -1000, + -1000, -1000, 91, -1000, -1000, -1000, -1000, 252, -1000, -1000, + -1000, -1000, -1000, -1000, 252, -1000, -1000, -1000, -1000, 327, + 497, -1000, 47683, 47683, 657, -1000, -1000, -1000, -1000, -1000, + -1000, 909, -1000, -1000, 909, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2169, 47683, 65, + -404, -1000, -399, 18785, -1000, -1000, -1000, -1000, 1392, 506, + 2028, 19457, 19457, 19457, -1000, -1000, -1000, 1003, 1003, 27523, + -1000, 18785, 18113, -1000, -1000, 18785, 18785, 785, -1000, 18785, + 1122, -1000, 18785, -1000, -1000, -1000, 1245, 1269, 1269, 1269, + 1269, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 1723, 18785, 18785, 18785, 1318, 364, -1000, -1000, -1000, + -1000, -1000, 2428, -1000, 18785, -1000, 27523, 18785, 18785, 18785, + -1000, -1000, -1000, 18785, 18785, -1000, -1000, 18785, 18785, -1000, + 18785, 18785, 18785, -1000, 18785, 18785, 18785, 18785, -1000, -1000, + -1000, -1000, 18785, 18785, 18785, 18785, 18785, 18785, 18785, 18785, + 18785, 18785, -1000, -1000, 32899, 119, -155, 1216, 119, 1216, + -1000, 18113, 12718, -1000, -1000, -1000, -1000, -1000, 18785, 18785, + 18785, 18785, 18785, 18785, -1000, -1000, -1000, 18785, 18785, -1000, + 18785, -1000, 18785, -1000, -1000, -1000, -1000, -1000, 717, -1000, + 637, 637, 637, 46339, -1000, -1000, -1000, -1000, 1668, -1000, + 2271, -1000, 2045, 2037, 2414, 2337, -1000, 24163, 2555, -1000, + -1000, 46339, -290, -1000, 2099, 2036, 600, 600, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 10684, 2339, 18785, 1951, 47011, + 158, -1000, 23491, 46339, 47011, 24163, 24163, 24163, 24163, 24163, + -1000, 1986, 1984, -1000, 1976, 1972, 1994, 47683, -1000, 1317, + 1482, -1000, 18785, 26179, 1623, 24163, -1000, -1000, 24163, 47683, + 10006, -1000, -1000, 62, 21, -1000, -1000, -1000, -1000, 1259, + -1000, -1000, 2759, 2238, 2123, -1000, -1000, -1000, -1000, -1000, + 1463, -1000, 1461, 1663, 1438, 1430, 244, -1000, 1873, 2155, + 745, 745, -1000, 1107, -1000, 1191, 1427, 1426, -1000, -1000, + -1000, 507, -1000, 2201, 47683, 1934, 1933, 1917, -1000, -454, + 1093, 1806, 1816, 18785, 1805, 2390, 1648, 46339, -1000, -1000, + 47011, -1000, 262, -1000, 312, 46339, -1000, -1000, -1000, 375, + 47683, -1000, 4371, -1000, -1000, -1000, 268, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 47683, 283, -1000, 1802, 1182, -1000, + -1000, 1793, -1000, -1000, -1000, -1000, 255, 355, 1425, 247, + 1423, 247, 247, 1422, 247, 1407, 247, 247, -1000, 47683, + 649, 1942, 47683, -1000, -1000, -1000, 892, 892, -1000, -1000, + 2150, -1000, 1191, 1269, 19457, 19457, -1000, 703, 304, -130, + 1792, 1792, -1000, 1792, 1794, -1000, 1792, 207, 1792, 202, + 1792, -1000, -1000, 1318, 1318, 1245, -1000, 2098, 1258, -1000, + 945, 18785, 2303, -1000, -1000, -1000, -1000, -1000, -23, 2291, + 2284, 1269, -1000, 1789, 1788, 18785, 1269, 1318, 2041, 1269, + 1269, 1269, 1269, -1000, 945, 1245, 2267, 1245, 1269, 1269, + 2263, 339, 1269, 1421, 1421, 1421, 1421, 1421, 1245, 1245, + 1245, 1245, 46339, -1000, -155, -1000, -1000, -198, -202, -1000, + 1318, -155, 1659, 1318, -1000, 2033, 2003, 2229, 1811, 1269, + 2208, 1269, 1269, 1269, 1784, -1000, 2264, 2264, 2264, 1406, + 1065, 47683, -1000, -1000, -1000, -1000, 2337, 2401, 1652, -1000, + -1000, 132, 482, -1000, 2076, 2036, -1000, 2380, 2093, 2365, + -1000, -1000, -1000, -1000, -1000, 945, -1000, 2187, 1619, -1000, + 761, 1621, -1000, -1000, 17441, 1417, 2029, 594, 1406, 1681, + 2174, 1880, 1916, 3290, -1000, -1000, -1000, -1000, 1983, -1000, + 1973, -1000, -1000, 1771, -1000, 2137, 381, 24163, 1651, 1651, + -1000, 592, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 935, + 7106, 2447, -1000, 1389, -1000, 1208, 199, 1078, -1000, -1000, + 745, 745, -1000, 829, 819, -1000, 47683, 1781, -1000, 403, + 1386, 403, 1076, -1000, -1000, 1070, -1000, -1000, -1000, -1000, + 1743, 1946, -1000, -1000, -1000, -1000, 47683, -1000, -1000, 47683, + 47683, 47683, 1776, 2363, -1000, 18785, 1775, 755, 2133, 46339, + 46339, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 486, 745, -421, 344, 343, 745, 745, 745, + -456, -1000, -1000, 1404, 1402, -1000, -121, -1000, 18785, -1000, + -1000, -1000, 1073, 1073, 1383, 1381, 1379, -1000, 1771, -1000, + -1000, -1000, 1579, -1000, -1000, -97, 46339, 46339, 46339, 46339, + -1000, -1000, 981, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 703, 1318, 366, -99, 1318, -1000, -1000, 403, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 18785, + -1000, 18785, -1000, 945, 18785, 2339, 1358, 18785, 18785, -1000, + 1063, 1046, 1269, -1000, -1000, -1000, 18785, -1000, -1000, -1000, + -1000, -1000, 18785, -1000, -1000, -1000, 18785, 217, 1003, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1318, + 377, -1000, -1000, -1000, -1000, 2404, -1000, 1318, 18785, -1000, + -1000, 18785, -1000, 18785, 18785, -1000, 18785, -1000, 18785, -1000, + -1000, -1000, -1000, 18785, 1424, 2059, 1424, 1424, 26179, -1000, + -1000, 2401, 2395, 2362, 2085, 2087, 2087, 2076, -1000, 2360, + 2358, -1000, 1338, 2354, 1334, 816, -1000, 47011, 18785, 158, + -1000, 428, 46339, 158, 46339, -1000, 2396, -1000, -1000, 18785, + 1774, -1000, 18785, -1000, -1000, -1000, -1000, 6811, 2337, 1651, + -1000, -1000, 716, -1000, 18785, -1000, -1000, -1000, 3903, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1319, 1313, -1000, + -1000, 1773, 18785, -1000, -1000, -1000, 1565, 1537, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 1771, -1000, -1000, -1000, + -1000, 375, -450, 2090, 46339, 1032, -1000, 1398, 1648, 368, + 158, 1311, 745, 745, 745, 1024, 1011, 31555, 1363, -1000, + 46339, 432, -1000, 375, -1000, -126, -127, 1269, -1000, -1000, + 2228, -1000, -1000, 12718, -1000, -1000, 1753, 1887, -1000, -1000, + -1000, -1000, 2010, -87, -105, -1000, -1000, 1269, 1269, 1675, + 1318, -1000, 1269, 1269, 1399, 1364, -1000, 1269, 1245, 1763, + -1000, 217, 1318, 1915, -1000, -1000, 6811, -1000, -1000, 2396, + 2347, 119, -1000, -1000, 294, 119, 945, 1741, 1269, 1602, + 1596, 1269, 1269, 26851, -1000, 2346, 2341, 32227, 32227, 717, + 2395, -170, 18785, 18785, 2031, 1015, -1000, -1000, -1000, -1000, + 1306, 1279, -1000, 1277, -1000, 2446, -1000, 945, -1000, 158, + -1000, 554, 1621, -1000, 2339, 945, 46339, 945, 133, 2396, + -1000, 1269, -1000, 1424, 1424, 1424, 1424, 1424, 1424, 1424, + 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, + 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, + 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, + 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, + 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, + 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, + 1424, 1424, 1424, -1000, -1000, 46339, 1714, -1000, -1000, 2212, + 1343, 79, -1000, 1337, 1648, -1000, -1000, 151, -1000, 18785, + -1000, 31555, 1274, 1234, -1000, -1000, -1000, -1000, -456, -1000, + -1000, -1000, -1000, -1000, -1000, 412, 1631, -1000, 738, 46339, + 47683, -1000, 2009, -1000, -1000, -1000, 18785, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 18785, -1000, 1318, 1906, -1000, + -284, -1000, -429, 18785, -155, -1000, -1000, -155, -1000, 18785, + -1000, -1000, 18785, -1000, 18785, -1000, -1000, 1305, -1000, -1000, + -1000, -1000, -1000, 1305, 1305, -1000, -170, -1000, 1625, -1000, + 46339, 945, 1610, -1000, 999, -1000, -1000, -1000, -1000, -1000, + 47011, 1621, 46339, -1000, 1303, 1318, 1424, 2339, -1000, 1294, + -1000, 412, -1000, 1750, 1816, -1000, -1000, -1000, 16769, -1000, + -1000, -1000, -1000, -1000, 194, -95, 12718, 9328, 1266, -1000, + -94, 1269, 1245, -1000, -386, -1000, -1000, -1000, -1000, 216, + -1000, -1000, 1610, -1000, -1000, 1584, 1524, 1516, 30883, -1000, + -1000, -1000, -1000, -170, -1000, -1000, 2210, -1000, -1000, 1607, + -1000, -1000, 26179, 45667, -1000, -81, 263, -95, 18785, 1744, + 1318, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 28, + -1000, -1000, -1000, -1000, -1000, 1793, -103, -1000, -1000, -1000, + 206, -410, -195, -200, -1000, -1000, 19457, -1000, 18785, -1000, + 18785, -1000, 18785, -1000, -1000, -1000, 46339, 1424, -1000, 1241, + -1000, 3811, -216, 1903, -1000, -35, -1000, -1000, -1000, 931, + 1215, -1000, -1000, -1000, -1000, -1000, -1000, 1635, 46339, -1000, + 454, -1000, -1000, -97, -116, 806, -1000, -1000, -1000, -1000, + -1000, 1503, 1361, 1269, -1000, 46339, -1000, 45667, -207, 699, + 6811, -1000, 1902, 1893, 2421, -1000, -1000, -1000, -1000, -1000, + -1000, -462, 1239, 291, -1000, -1000, 206, -1000, 18785, -1000, + 18785, -1000, 1318, -1000, -1000, 2179, 133, -1000, 2445, -1000, + 2422, 645, 645, -1000, 992, -462, -1000, -1000, 1269, 1269, + -1000, -219, -1000, -1000, -1000, -1000, -1000, 438, 996, -1000, + -1000, -1000, -1000, -1000, 6811, -1000, -1000, -1000, 241, 241, + -1000, -1000, } var yyPgo = [...]int{ - 0, 3116, 3115, 25, 1, 38, 37, 3114, 60, 128, - 211, 58, 250, 109, 3112, 188, 3111, 3110, 3106, 3103, - 3097, 3096, 2561, 2543, 2542, 3093, 3091, 3090, 3089, 3088, - 3087, 3086, 3085, 3083, 3082, 194, 180, 195, 3079, 3077, - 3075, 131, 196, 98, 101, 206, 3074, 3073, 96, 3071, - 3070, 3069, 203, 202, 198, 878, 3067, 201, 124, 52, - 3066, 3065, 3063, 3059, 3058, 3057, 3051, 3050, 3048, 3045, - 3044, 3043, 3042, 3038, 3036, 3035, 3034, 3031, 3025, 3024, - 292, 3023, 3021, 16, 3020, 92, 3016, 3014, 3011, 3002, - 3000, 7, 2995, 2989, 20, 33, 2988, 2981, 48, 2978, - 2977, 2976, 2966, 2965, 14, 2962, 22, 2960, 27, 2958, - 2938, 140, 2937, 2933, 2931, 39, 2930, 2926, 2925, 2922, - 2920, 2919, 2918, 160, 2915, 2909, 2907, 193, 213, 2906, - 2904, 192, 118, 111, 2903, 2892, 117, 209, 2890, 133, - 2889, 2888, 2886, 171, 2885, 2213, 2884, 2883, 75, 89, - 2878, 50, 2873, 2872, 9, 91, 76, 4, 81, 83, - 2870, 2869, 72, 93, 2868, 115, 2867, 2865, 110, 78, - 2864, 107, 116, 2859, 2854, 17, 21, 2849, 35, 29, - 36, 85, 2840, 2837, 122, 2836, 2834, 2833, 104, 2830, - 2829, 675, 2826, 106, 151, 119, 87, 2818, 54, 65, - 2812, 2806, 2805, 2804, 2803, 53, 2801, 2800, 2789, 154, - 71, 184, 2788, 44, 46, 55, 146, 2784, 74, 97, - 207, 185, 2772, 2768, 152, 147, 2766, 2765, 69, 45, - 42, 2764, 123, 143, 121, 26, 113, 156, 2762, 2761, - 66, 82, 2760, 2758, 2754, 2748, 186, 2746, 2745, 80, - 2742, 57, 2741, 191, 2733, 6, 67, 2730, 49, 177, - 2727, 86, 2725, 2724, 77, 158, 79, 41, 2720, 178, - 183, 142, 176, 2718, 2717, 56, 2716, 2715, 2713, 210, - 327, 2710, 2708, 550, 190, 155, 170, 102, 2703, 354, - 2698, 2697, 103, 2, 4478, 2693, 40, 179, 2692, 2689, - 5757, 153, 43, 24, 2688, 132, 2687, 2686, 2684, 2683, - 222, 187, 135, 181, 70, 2679, 2673, 2672, 13, 2670, - 2669, 2666, 2665, 2660, 2658, 100, 34, 32, 31, 248, - 88, 11, 112, 182, 173, 90, 2654, 2653, 2651, 134, - 105, 2650, 175, 174, 139, 166, 2649, 189, 168, 144, - 2643, 95, 30, 2642, 2640, 2639, 2638, 114, 2637, 2636, - 2635, 2627, 172, 161, 130, 108, 2622, 94, 125, 165, - 164, 64, 2620, 47, 2618, 2617, 28, 205, 23, 2615, - 12, 120, 137, 2613, 3463, 204, 2607, 15, 358, 163, - 2605, 2603, 5, 8, 10, 2602, 2594, 2593, 2592, 145, - 2582, 2579, 2578, 2572, 19, 51, 18, 3, 138, 141, - 2567, 2565, 159, 162, 2563, 2556, 2554, 2549, 3192, 0, - 136, 2547, 208, + 0, 3029, 3027, 25, 1, 34, 33, 3025, 52, 110, + 213, 58, 246, 119, 3024, 189, 3022, 3021, 3019, 3017, + 3015, 3014, 2485, 2484, 2476, 3013, 3008, 3003, 2997, 2995, + 2993, 2992, 2986, 2984, 2979, 194, 184, 210, 2972, 2970, + 2969, 133, 206, 100, 103, 207, 2965, 2963, 93, 2961, + 2960, 2959, 204, 203, 201, 876, 2950, 196, 130, 64, + 2947, 2946, 2945, 2937, 2934, 2933, 2932, 2931, 2930, 2928, + 2926, 2924, 2923, 2922, 2917, 2916, 2914, 2913, 2912, 2911, + 292, 2908, 2907, 16, 2905, 89, 2900, 2899, 2898, 2894, + 2892, 7, 2891, 2889, 20, 42, 2888, 2887, 48, 2886, + 2883, 2881, 2880, 2879, 14, 2877, 22, 2876, 38, 2875, + 2873, 146, 2872, 2871, 2870, 39, 2868, 2867, 2864, 2863, + 2856, 2853, 2852, 158, 2851, 2839, 2827, 192, 212, 2821, + 2818, 186, 118, 120, 2813, 2812, 115, 205, 2809, 141, + 2807, 2806, 2803, 172, 2792, 2216, 2787, 2785, 75, 88, + 2776, 50, 2775, 2770, 9, 90, 70, 4, 81, 83, + 2768, 2767, 72, 102, 2765, 121, 2764, 2763, 116, 86, + 2762, 114, 111, 2761, 2760, 17, 21, 2757, 35, 29, + 36, 80, 2752, 2751, 122, 2750, 2749, 2748, 109, 2746, + 2744, 3164, 2743, 107, 148, 117, 92, 2739, 54, 78, + 2738, 2735, 2732, 2726, 2721, 56, 2719, 2718, 2715, 163, + 71, 188, 2714, 41, 46, 57, 150, 2712, 74, 97, + 211, 185, 2708, 2707, 156, 153, 2705, 2696, 66, 45, + 44, 2694, 123, 144, 136, 26, 113, 155, 2691, 2688, + 69, 85, 2686, 2685, 2684, 2681, 187, 2677, 2676, 79, + 2675, 65, 2672, 191, 2669, 6, 67, 2666, 49, 179, + 2664, 87, 2655, 2653, 77, 143, 82, 37, 2652, 178, + 183, 145, 177, 2651, 2650, 60, 2643, 2637, 2636, 208, + 335, 2633, 2632, 101, 190, 160, 171, 104, 2626, 359, + 2625, 2624, 105, 2, 5282, 2618, 40, 180, 2617, 2615, + 6014, 154, 43, 24, 2607, 134, 2605, 2604, 2599, 2597, + 224, 195, 128, 181, 63, 2593, 2584, 2581, 13, 2577, + 2576, 2575, 2574, 2569, 2568, 91, 32, 31, 30, 251, + 76, 11, 112, 182, 174, 96, 2567, 2562, 2561, 137, + 106, 2559, 176, 175, 139, 168, 2558, 193, 169, 138, + 2556, 95, 28, 2555, 2551, 2550, 2547, 108, 2541, 2540, + 2539, 2538, 173, 164, 135, 94, 2537, 98, 132, 170, + 165, 53, 2536, 47, 2533, 2529, 27, 202, 23, 2528, + 12, 124, 151, 2523, 4148, 198, 2521, 15, 347, 166, + 2518, 2517, 5, 8, 10, 2513, 2506, 2505, 2504, 152, + 2502, 2499, 2497, 2494, 19, 51, 18, 3, 125, 131, + 2492, 2489, 159, 162, 2486, 2480, 2472, 2466, 3168, 0, + 147, 2465, 214, } -//line sql.y:8399 +//line sql.y:8409 type yySymType struct { union any empty struct{} @@ -7542,63 +7577,63 @@ var yyR1 = [...]int{ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 111, 111, 112, - 112, 112, 112, 114, 114, 114, 372, 372, 59, 59, - 3, 3, 174, 176, 177, 177, 175, 175, 175, 175, - 175, 175, 61, 61, 60, 60, 179, 178, 180, 180, - 180, 1, 1, 2, 2, 4, 4, 377, 377, 377, + 28, 28, 28, 28, 28, 28, 28, 28, 111, 111, + 112, 112, 112, 112, 114, 114, 114, 372, 372, 59, + 59, 3, 3, 174, 176, 177, 177, 175, 175, 175, + 175, 175, 175, 61, 61, 60, 60, 179, 178, 180, + 180, 180, 1, 1, 2, 2, 4, 4, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, - 377, 377, 377, 377, 377, 377, 377, 377, 377, 338, - 338, 338, 371, 371, 373, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 117, 116, 116, 115, 118, - 118, 118, 118, 118, 118, 118, 118, 375, 375, 375, - 62, 62, 376, 326, 327, 328, 5, 6, 352, 374, - 125, 125, 29, 38, 38, 30, 30, 30, 30, 31, - 31, 63, 64, 415, 415, 68, 68, 68, 69, 69, - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, + 338, 338, 338, 371, 371, 373, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 117, 116, 116, 115, + 118, 118, 118, 118, 118, 118, 118, 118, 375, 375, + 375, 62, 62, 376, 326, 327, 328, 5, 6, 352, + 374, 125, 125, 29, 38, 38, 30, 30, 30, 30, + 31, 31, 63, 64, 415, 415, 68, 68, 68, 69, + 69, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 281, 281, 290, 290, 280, 280, 305, 305, 305, 283, - 283, 283, 284, 284, 401, 401, 401, 277, 277, 66, - 66, 66, 306, 306, 306, 306, 70, 70, 410, 410, - 411, 411, 412, 412, 412, 71, 72, 72, 308, 308, - 309, 309, 73, 74, 86, 86, 86, 86, 86, 86, - 86, 87, 87, 87, 87, 110, 110, 110, 15, 15, - 15, 15, 82, 82, 82, 14, 14, 17, 67, 67, - 76, 398, 398, 399, 400, 400, 400, 400, 77, 79, - 79, 32, 32, 32, 32, 32, 32, 135, 135, 123, + 65, 281, 281, 290, 290, 280, 280, 305, 305, 305, + 283, 283, 283, 284, 284, 401, 401, 401, 277, 277, + 66, 66, 66, 306, 306, 306, 306, 70, 70, 410, + 410, 411, 411, 412, 412, 412, 71, 72, 72, 308, + 308, 309, 309, 73, 74, 86, 86, 86, 86, 86, + 86, 86, 87, 87, 87, 87, 110, 110, 110, 15, + 15, 15, 15, 82, 82, 82, 14, 14, 17, 67, + 67, 76, 398, 398, 399, 400, 400, 400, 400, 77, + 79, 79, 32, 32, 32, 32, 32, 32, 135, 135, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 130, 130, 130, 124, 124, 421, 80, 81, - 81, 128, 128, 128, 121, 121, 121, 127, 127, 127, - 16, 16, 18, 263, 263, 19, 19, 132, 132, 134, - 134, 134, 134, 134, 136, 136, 136, 136, 136, 136, - 136, 131, 131, 133, 133, 133, 133, 298, 298, 298, - 297, 297, 168, 168, 170, 169, 169, 171, 171, 172, - 172, 172, 172, 217, 217, 194, 194, 256, 256, 257, - 257, 255, 255, 262, 262, 258, 258, 258, 258, 265, - 265, 173, 173, 173, 173, 181, 181, 182, 182, 183, - 183, 307, 307, 303, 303, 303, 302, 302, 187, 187, - 187, 189, 188, 188, 188, 188, 190, 190, 192, 192, - 191, 191, 193, 198, 198, 197, 197, 195, 195, 195, - 195, 196, 196, 196, 196, 199, 199, 145, 145, 145, - 145, 145, 145, 145, 160, 160, 160, 160, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 246, - 246, 151, 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 155, 155, 155, 155, 155, 155, + 123, 123, 123, 130, 130, 130, 124, 124, 421, 80, + 81, 81, 128, 128, 128, 121, 121, 121, 127, 127, + 127, 16, 16, 18, 263, 263, 19, 19, 132, 132, + 134, 134, 134, 134, 134, 136, 136, 136, 136, 136, + 136, 136, 131, 131, 133, 133, 133, 133, 298, 298, + 298, 297, 297, 168, 168, 170, 169, 169, 171, 171, + 172, 172, 172, 172, 217, 217, 194, 194, 256, 256, + 257, 257, 255, 255, 262, 262, 258, 258, 258, 258, + 265, 265, 173, 173, 173, 173, 181, 181, 182, 182, + 183, 183, 307, 307, 303, 303, 303, 302, 302, 187, + 187, 187, 189, 188, 188, 188, 188, 190, 190, 192, + 192, 191, 191, 193, 198, 198, 197, 197, 195, 195, + 195, 195, 196, 196, 196, 196, 199, 199, 145, 145, + 145, 145, 145, 145, 145, 160, 160, 160, 160, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 246, 246, 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, - 222, 222, 221, 221, 88, 88, 88, 89, 89, 90, - 90, 90, 90, 90, 91, 91, 91, 91, 91, 146, - 146, 93, 93, 92, 92, 212, 212, 295, 295, 94, - 95, 95, 98, 98, 97, 96, 96, 102, 102, 99, - 99, 101, 101, 100, 103, 103, 104, 105, 105, 278, - 278, 200, 200, 208, 208, 208, 208, 201, 201, 201, - 201, 201, 201, 201, 209, 209, 209, 216, 210, 210, - 206, 206, 204, 204, 204, 204, 204, 204, 204, 204, - 204, 204, 205, 205, 205, 205, 205, 205, 205, 205, + 154, 222, 222, 221, 221, 88, 88, 88, 89, 89, + 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, + 146, 146, 93, 93, 92, 92, 212, 212, 295, 295, + 94, 95, 95, 98, 98, 97, 96, 96, 102, 102, + 99, 99, 101, 101, 100, 103, 103, 104, 105, 105, + 278, 278, 200, 200, 208, 208, 208, 208, 201, 201, + 201, 201, 201, 201, 201, 209, 209, 209, 216, 210, + 210, 206, 206, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, @@ -7606,34 +7641,34 @@ var yyR1 = [...]int{ 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, 165, 165, - 165, 165, 227, 227, 152, 152, 152, 152, 152, 152, - 152, 152, 152, 152, 152, 152, 152, 152, 152, 153, - 153, 166, 166, 166, 166, 167, 167, 167, 167, 167, - 167, 167, 315, 315, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 119, 119, 119, 119, - 119, 119, 119, 119, 119, 422, 422, 329, 329, 329, - 329, 207, 207, 207, 207, 207, 126, 126, 126, 126, - 126, 312, 312, 312, 316, 316, 316, 314, 314, 314, + 205, 205, 205, 205, 205, 205, 205, 205, 205, 165, + 165, 165, 165, 227, 227, 152, 152, 152, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, + 153, 153, 166, 166, 166, 166, 167, 167, 167, 167, + 167, 167, 167, 315, 315, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 422, 422, 329, 329, + 329, 329, 207, 207, 207, 207, 207, 126, 126, 126, + 126, 126, 312, 312, 312, 316, 316, 316, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, - 314, 314, 317, 317, 225, 225, 122, 122, 223, 223, - 224, 226, 226, 218, 218, 218, 218, 220, 220, 203, - 203, 203, 228, 228, 229, 229, 106, 107, 107, 108, - 108, 230, 230, 232, 231, 231, 233, 234, 234, 234, - 235, 235, 236, 236, 236, 48, 48, 48, 48, 48, - 43, 43, 43, 43, 44, 44, 44, 44, 137, 137, - 137, 137, 139, 139, 138, 138, 83, 83, 84, 84, - 84, 414, 414, 414, 413, 413, 413, 413, 413, 413, - 143, 143, 144, 144, 144, 141, 141, 142, 142, 253, - 253, 237, 237, 237, 244, 244, 244, 240, 240, 242, - 242, 242, 243, 243, 243, 241, 250, 250, 252, 252, - 251, 251, 247, 247, 248, 248, 249, 249, 249, 245, - 245, 202, 202, 202, 202, 202, 254, 254, 254, 254, - 266, 266, 213, 213, 215, 215, 214, 214, 164, 267, - 267, 275, 272, 272, 273, 273, 299, 299, 299, 276, - 276, 289, 289, 285, 285, 286, 286, 279, 279, 291, - 291, 291, 78, 211, 211, 368, 368, 365, 294, 294, - 296, 296, 300, 300, 304, 304, 301, 301, 292, 292, + 314, 314, 314, 317, 317, 225, 225, 122, 122, 223, + 223, 224, 226, 226, 218, 218, 218, 218, 220, 220, + 203, 203, 203, 228, 228, 229, 229, 106, 107, 107, + 108, 108, 230, 230, 232, 231, 231, 233, 234, 234, + 234, 235, 235, 236, 236, 236, 48, 48, 48, 48, + 48, 43, 43, 43, 43, 44, 44, 44, 44, 137, + 137, 137, 137, 139, 139, 138, 138, 83, 83, 84, + 84, 84, 414, 414, 414, 413, 413, 413, 413, 413, + 413, 143, 143, 144, 144, 144, 141, 141, 142, 142, + 253, 253, 237, 237, 237, 244, 244, 244, 240, 240, + 242, 242, 242, 243, 243, 243, 241, 250, 250, 252, + 252, 251, 251, 247, 247, 248, 248, 249, 249, 249, + 245, 245, 202, 202, 202, 202, 202, 254, 254, 254, + 254, 266, 266, 213, 213, 215, 215, 214, 214, 164, + 267, 267, 275, 272, 272, 273, 273, 299, 299, 299, + 276, 276, 289, 289, 285, 285, 286, 286, 279, 279, + 291, 291, 291, 78, 211, 211, 368, 368, 365, 294, + 294, 296, 296, 300, 300, 304, 304, 301, 301, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, @@ -7649,7 +7684,7 @@ var yyR1 = [...]int{ 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 293, 293, 293, 293, 293, 293, 293, + 292, 292, 292, 292, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, @@ -7690,7 +7725,8 @@ var yyR1 = [...]int{ 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 418, 419, 310, 311, 311, 311, + 293, 293, 293, 293, 293, 418, 419, 310, 311, 311, + 311, } var yyR2 = [...]int{ @@ -7756,99 +7792,99 @@ var yyR2 = [...]int{ 10, 5, 5, 5, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 7, 5, 5, - 5, 5, 5, 7, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 7, 7, 5, 5, 0, 6, 5, - 6, 4, 5, 0, 8, 9, 0, 3, 0, 1, - 0, 3, 8, 4, 1, 3, 3, 6, 7, 7, - 8, 4, 0, 1, 0, 1, 3, 3, 1, 1, - 2, 1, 1, 0, 2, 0, 2, 5, 3, 7, - 4, 4, 4, 4, 3, 3, 3, 7, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 2, 0, - 2, 2, 1, 3, 2, 0, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 3, 1, 3, 3, 0, - 2, 2, 2, 2, 2, 2, 2, 4, 4, 3, - 0, 1, 4, 3, 4, 4, 3, 3, 3, 2, - 1, 3, 3, 3, 5, 7, 7, 6, 5, 3, - 2, 3, 4, 1, 3, 2, 3, 3, 2, 2, - 3, 2, 2, 3, 7, 3, 3, 3, 3, 4, - 7, 5, 2, 4, 4, 4, 4, 4, 5, 5, - 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, - 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, - 2, 3, 3, 3, 3, 5, 2, 3, 3, 2, - 2, 3, 4, 4, 4, 3, 4, 4, 5, 3, - 0, 1, 0, 1, 1, 1, 0, 2, 2, 0, - 2, 2, 0, 2, 0, 1, 1, 1, 1, 2, - 1, 3, 1, 1, 1, 1, 1, 3, 0, 1, - 1, 3, 3, 2, 2, 1, 1, 5, 0, 1, - 0, 1, 2, 3, 0, 3, 3, 3, 3, 3, - 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 1, 1, 4, 4, 4, 2, 2, - 3, 1, 3, 2, 1, 2, 1, 2, 2, 4, - 4, 3, 3, 6, 4, 7, 6, 1, 3, 2, - 2, 2, 2, 1, 1, 1, 1, 3, 2, 1, - 1, 1, 0, 1, 1, 0, 3, 0, 2, 0, - 2, 1, 2, 2, 0, 1, 1, 0, 1, 1, - 5, 5, 4, 0, 2, 4, 4, 0, 1, 0, - 1, 2, 3, 4, 1, 1, 1, 1, 1, 1, - 1, 1, 3, 1, 2, 3, 5, 0, 1, 2, - 1, 1, 0, 1, 2, 1, 3, 1, 1, 1, - 4, 3, 1, 1, 2, 3, 7, 0, 3, 0, - 1, 1, 3, 1, 3, 1, 1, 3, 3, 1, - 3, 4, 4, 4, 3, 2, 4, 0, 1, 0, - 2, 0, 1, 0, 1, 2, 1, 1, 1, 2, - 2, 1, 2, 3, 2, 3, 2, 2, 2, 1, - 1, 3, 3, 0, 1, 1, 2, 6, 5, 6, - 6, 0, 2, 3, 3, 0, 2, 3, 3, 3, - 2, 3, 1, 6, 3, 4, 3, 1, 3, 4, - 5, 6, 3, 4, 5, 6, 3, 4, 1, 1, - 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 1, 1, 1, 1, 1, 3, 1, - 1, 1, 2, 2, 2, 2, 1, 1, 2, 7, - 7, 6, 6, 2, 2, 1, 6, 3, 3, 3, - 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, - 1, 0, 1, 2, 5, 0, 3, 0, 1, 4, - 4, 2, 0, 1, 1, 2, 2, 1, 1, 2, - 2, 0, 1, 1, 1, 1, 5, 1, 3, 0, - 3, 1, 1, 1, 2, 1, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, - 4, 6, 4, 4, 8, 6, 8, 6, 5, 4, - 10, 2, 2, 1, 2, 2, 2, 4, 5, 5, - 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 8, 8, 8, 6, 5, 4, 4, - 4, 4, 4, 7, 4, 4, 6, 6, 6, 8, - 6, 6, 4, 4, 3, 4, 6, 6, 4, 4, - 4, 6, 8, 6, 4, 6, 6, 8, 10, 7, - 8, 8, 9, 4, 4, 4, 4, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 4, 4, 6, - 5, 9, 6, 9, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 2, 6, 8, 10, 12, 14, 6, - 8, 8, 10, 12, 14, 6, 8, 10, 12, 6, - 8, 4, 4, 3, 4, 6, 6, 4, 6, 4, - 6, 8, 0, 2, 1, 1, 1, 1, 1, 1, + 7, 5, 5, 5, 7, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 7, 7, 5, 5, 0, 6, + 5, 6, 4, 5, 0, 8, 9, 0, 3, 0, + 1, 0, 3, 8, 4, 1, 3, 3, 6, 7, + 7, 8, 4, 0, 1, 0, 1, 3, 3, 1, + 1, 2, 1, 1, 0, 2, 0, 2, 5, 3, + 7, 4, 4, 4, 4, 3, 3, 3, 7, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, + 0, 2, 2, 1, 3, 2, 0, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 3, 1, 3, 3, + 0, 2, 2, 2, 2, 2, 2, 2, 4, 4, + 3, 0, 1, 4, 3, 4, 4, 3, 3, 3, + 2, 1, 3, 3, 3, 5, 7, 7, 6, 5, + 3, 2, 3, 4, 1, 3, 2, 3, 3, 2, + 2, 3, 2, 2, 3, 7, 3, 3, 3, 3, + 4, 7, 5, 2, 4, 4, 4, 4, 4, 5, + 5, 4, 4, 4, 4, 4, 4, 4, 4, 2, + 2, 4, 4, 4, 4, 4, 4, 3, 4, 4, + 4, 2, 3, 3, 3, 3, 5, 2, 3, 3, + 2, 2, 3, 4, 4, 4, 3, 4, 4, 5, + 3, 0, 1, 0, 1, 1, 1, 0, 2, 2, + 0, 2, 2, 0, 2, 0, 1, 1, 1, 1, + 2, 1, 3, 1, 1, 1, 1, 1, 3, 0, + 1, 1, 3, 3, 2, 2, 1, 1, 5, 0, + 1, 0, 1, 2, 3, 0, 3, 3, 3, 3, + 3, 1, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 1, 1, 4, 4, 4, 2, + 2, 3, 1, 3, 2, 1, 2, 1, 2, 2, + 4, 4, 3, 3, 6, 4, 7, 6, 1, 3, + 2, 2, 2, 2, 1, 1, 1, 1, 3, 2, + 1, 1, 1, 0, 1, 1, 0, 3, 0, 2, + 0, 2, 1, 2, 2, 0, 1, 1, 0, 1, + 1, 5, 5, 4, 0, 2, 4, 4, 0, 1, + 0, 1, 2, 3, 4, 1, 1, 1, 1, 1, + 1, 1, 1, 3, 1, 2, 3, 5, 0, 1, + 2, 1, 1, 0, 1, 2, 1, 3, 1, 1, + 1, 4, 3, 1, 1, 2, 3, 7, 0, 3, + 0, 1, 1, 3, 1, 3, 1, 1, 3, 3, + 1, 3, 4, 4, 4, 3, 2, 4, 0, 1, + 0, 2, 0, 1, 0, 1, 2, 1, 1, 1, + 2, 2, 1, 2, 3, 2, 3, 2, 2, 2, + 1, 1, 3, 3, 0, 1, 1, 2, 6, 5, + 6, 6, 0, 2, 3, 3, 0, 2, 3, 3, + 3, 2, 3, 1, 6, 3, 4, 3, 1, 3, + 4, 5, 6, 3, 4, 5, 6, 3, 4, 1, + 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 1, 1, 1, 1, 1, 3, + 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, + 7, 7, 6, 6, 2, 2, 1, 6, 3, 3, + 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, + 1, 1, 0, 1, 2, 5, 0, 3, 0, 1, + 4, 4, 2, 0, 1, 1, 2, 2, 1, 1, + 2, 2, 0, 1, 1, 1, 1, 5, 1, 3, + 0, 3, 1, 1, 1, 2, 1, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 4, 6, 4, 4, 8, 6, 8, 6, 5, + 4, 10, 2, 2, 1, 2, 2, 2, 4, 5, + 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 8, 8, 8, 6, 5, 4, + 4, 4, 4, 4, 7, 4, 4, 6, 6, 6, + 8, 6, 6, 4, 4, 3, 4, 6, 6, 4, + 4, 4, 6, 8, 6, 4, 6, 6, 8, 10, + 7, 8, 8, 9, 4, 4, 4, 4, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 4, 4, + 6, 5, 9, 6, 9, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 2, 6, 8, 10, 12, 14, + 6, 8, 8, 10, 12, 14, 6, 8, 10, 12, + 6, 8, 4, 4, 3, 4, 6, 6, 4, 6, + 4, 6, 8, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 2, 0, 2, 3, - 3, 4, 4, 4, 4, 4, 0, 3, 4, 7, - 3, 1, 1, 1, 0, 5, 5, 2, 3, 1, - 2, 2, 1, 2, 1, 2, 2, 1, 2, 2, - 1, 1, 0, 1, 0, 1, 0, 2, 1, 2, - 4, 0, 2, 1, 1, 3, 5, 1, 1, 1, - 2, 2, 0, 3, 0, 2, 2, 1, 3, 0, - 1, 0, 1, 3, 1, 3, 2, 0, 1, 1, - 0, 1, 2, 4, 4, 0, 2, 2, 1, 1, - 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, - 3, 3, 0, 3, 1, 1, 0, 4, 0, 1, - 1, 0, 1, 2, 2, 1, 1, 1, 1, 1, - 0, 3, 1, 3, 2, 1, 1, 0, 1, 2, - 4, 9, 3, 5, 0, 3, 3, 0, 1, 0, - 2, 2, 0, 2, 2, 2, 0, 2, 1, 2, - 3, 3, 0, 2, 1, 2, 3, 4, 3, 0, - 1, 2, 1, 5, 4, 4, 1, 3, 3, 5, - 0, 5, 1, 3, 1, 2, 3, 4, 1, 1, - 3, 3, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 0, 1, 0, 2, 0, 3, 0, 1, 0, - 1, 1, 5, 0, 1, 0, 1, 2, 1, 1, - 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 2, 0, 2, + 3, 3, 4, 4, 4, 4, 4, 0, 3, 4, + 7, 3, 1, 1, 1, 0, 5, 5, 2, 3, + 1, 2, 2, 1, 2, 1, 2, 2, 1, 2, + 2, 1, 1, 0, 1, 0, 1, 0, 2, 1, + 2, 4, 0, 2, 1, 1, 3, 5, 1, 1, + 1, 2, 2, 0, 3, 0, 2, 2, 1, 3, + 0, 1, 0, 1, 3, 1, 3, 2, 0, 1, + 1, 0, 1, 2, 4, 4, 0, 2, 2, 1, + 1, 3, 3, 3, 3, 3, 3, 3, 3, 0, + 3, 3, 3, 0, 3, 1, 1, 0, 4, 0, + 1, 1, 0, 1, 2, 2, 1, 1, 1, 1, + 1, 0, 3, 1, 3, 2, 1, 1, 0, 1, + 2, 4, 9, 3, 5, 0, 3, 3, 0, 1, + 0, 2, 2, 0, 2, 2, 2, 0, 2, 1, + 2, 3, 3, 0, 2, 1, 2, 3, 4, 3, + 0, 1, 2, 1, 5, 4, 4, 1, 3, 3, + 5, 0, 5, 1, 3, 1, 2, 3, 4, 1, + 1, 3, 3, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 0, 1, 0, 2, 0, 3, 0, 1, + 0, 1, 1, 5, 0, 1, 0, 1, 2, 1, + 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -7905,7 +7941,8 @@ var yyR2 = [...]int{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, + 1, } var yyChk = [...]int{ @@ -7915,490 +7952,491 @@ var yyChk = [...]int{ -17, -67, -32, -33, -75, -76, -77, -78, -79, -16, -18, -19, -9, -8, -13, 10, 11, -109, -34, 33, -39, -49, 225, -50, -40, 226, -51, 228, 227, 266, - 229, 250, 635, 235, 259, 75, 319, 320, 322, 323, - 324, 325, -110, 631, 264, 265, 231, 37, 46, 34, + 229, 250, 636, 235, 259, 75, 320, 321, 323, 324, + 325, 326, -110, 632, 264, 265, 231, 37, 46, 34, 35, 38, 236, 272, 273, 234, -10, -35, 9, -418, - 12, 463, 261, 260, 29, -12, 525, 87, -81, -417, - 681, -253, -237, 23, 34, 30, -236, -232, -128, -237, + 12, 464, 261, 260, 29, -12, 526, 87, -81, -417, + 682, -253, -237, 23, 34, 30, -236, -232, -128, -237, 21, 19, 8, -80, -80, -80, 13, 14, -80, -353, -355, -12, 26, 87, 159, 9, 87, -80, -56, -55, -53, -52, -54, -57, 32, -46, -47, -377, -45, -42, 230, 227, 276, 123, 124, 266, 267, 268, 229, 250, - 265, 269, 264, 285, -41, 82, 34, 525, 528, -360, - 226, 232, 233, 228, 464, 126, 125, 76, -357, 378, - 558, 651, -57, 653, 101, 104, 652, 45, 240, 654, - 655, 656, 565, 657, 249, 658, 659, 660, 661, 667, - 606, 668, 669, 670, 127, 8, -80, -304, -300, 91, - -293, 522, 252, 556, 557, 301, 82, 42, 531, 375, - 378, 558, 493, 651, 319, 335, 329, 498, 499, 500, - 358, 350, 523, 559, 532, 304, 253, 289, 645, 348, - 135, 653, 308, 560, 267, 383, 384, 561, 385, 101, - 322, 426, 666, 307, 562, 664, 104, 652, 327, 80, - 492, 52, 648, 45, 262, 346, 234, 342, 654, 290, - 563, 534, 283, 126, 123, 673, 37, 338, 51, 31, - 663, 125, 50, 655, 150, 564, 656, 565, 387, 365, - 639, 49, 388, 268, 566, 85, 273, 527, 311, 647, - 389, 512, 339, 390, 300, 662, 231, 567, 626, 618, - 619, 391, 392, 640, 370, 366, 371, 514, 568, 418, - 497, 393, 622, 623, 680, 53, 569, 570, 641, 124, - 571, 79, 657, 81, 333, 334, 572, 298, 251, 517, - 518, 420, 362, 475, 482, 483, 111, 112, 478, 113, - 484, 114, 485, 486, 487, 476, 115, 108, 477, 488, - 489, 363, 364, 116, 490, 110, 109, 479, 481, 117, - 491, 249, 36, 394, 524, 302, 59, 306, 277, 421, - 47, 368, 677, 46, 633, 519, 573, 638, 361, 357, - 472, 54, 574, 575, 576, 577, 494, 658, 360, 332, - 356, 672, 4, 295, 495, 659, 63, 233, 373, 372, - 374, 284, 417, 353, 578, 579, 580, 256, 83, 581, - 343, 22, 582, 583, 395, 291, 584, 57, 585, 586, - 424, 265, 587, 55, 660, 40, 588, 270, 674, 661, - 589, 313, 314, 590, 591, 632, 592, 272, 593, 397, - 594, 620, 621, 396, 367, 369, 520, 279, 398, 237, - 526, 595, 312, 337, 269, 665, 596, 257, 508, 509, - 510, 511, 646, 516, 515, 271, 276, 264, 425, 258, - 597, 598, 599, 600, 601, 305, 617, 602, 603, 323, - 667, 473, 44, 604, 605, 606, 607, 608, 299, 294, - 419, 428, 62, 84, 380, 609, 610, 644, 331, 328, - 292, 611, 320, 56, 668, 669, 670, 286, 671, 501, - 502, 503, 504, 10, 678, 679, 496, 400, 127, 296, - 297, 48, 354, 278, 612, 309, 613, 344, 345, 359, - 330, 355, 629, 321, 627, 280, 401, 474, 266, 614, - 427, 293, 376, 381, 310, 530, 513, 285, 402, 636, - 643, 529, 505, 506, 352, 349, 287, 507, 615, 631, - 403, 241, 281, 282, 616, 628, 404, 405, 303, 406, - 315, 317, 416, 318, 407, 408, 409, 410, 413, 414, - 415, 412, 316, 411, 630, 624, 625, 288, 528, 326, - 347, 382, 444, 445, 446, 447, 448, 449, 450, 451, + 265, 269, 264, 285, -41, 82, 34, 526, 529, -360, + 226, 232, 233, 228, 465, 126, 125, 76, -357, 379, + 559, 652, -57, 654, 101, 104, 653, 45, 240, 655, + 656, 657, 566, 658, 249, 659, 660, 661, 662, 668, + 607, 669, 670, 671, 127, 8, -80, -304, -300, 91, + -293, 523, 252, 557, 558, 301, 82, 42, 532, 376, + 379, 559, 494, 652, 320, 336, 330, 499, 500, 501, + 359, 351, 524, 560, 533, 304, 253, 289, 646, 349, + 135, 654, 308, 561, 267, 384, 385, 562, 386, 101, + 323, 427, 667, 307, 563, 665, 104, 653, 328, 80, + 493, 52, 649, 45, 262, 347, 234, 343, 655, 290, + 564, 535, 283, 126, 123, 674, 37, 339, 51, 31, + 664, 125, 50, 656, 150, 565, 657, 566, 388, 366, + 640, 49, 389, 268, 567, 85, 273, 528, 311, 648, + 390, 513, 340, 391, 300, 663, 231, 568, 627, 619, + 620, 392, 393, 641, 371, 367, 372, 515, 569, 419, + 498, 394, 623, 624, 681, 53, 570, 571, 642, 124, + 572, 79, 658, 81, 334, 335, 573, 298, 251, 518, + 519, 421, 363, 476, 483, 484, 111, 112, 479, 113, + 485, 114, 486, 487, 488, 477, 115, 108, 478, 489, + 490, 364, 365, 116, 491, 110, 109, 480, 482, 117, + 492, 249, 36, 395, 525, 302, 59, 306, 277, 422, + 47, 369, 678, 46, 634, 520, 574, 639, 362, 358, + 473, 54, 575, 576, 577, 578, 495, 659, 361, 333, + 357, 673, 4, 295, 496, 660, 63, 233, 374, 373, + 375, 284, 418, 354, 579, 580, 581, 256, 83, 582, + 344, 22, 583, 584, 396, 291, 585, 57, 586, 587, + 425, 265, 588, 55, 661, 40, 589, 270, 675, 662, + 590, 313, 314, 591, 592, 633, 593, 272, 594, 398, + 595, 621, 622, 397, 368, 370, 521, 279, 399, 237, + 527, 596, 312, 338, 269, 666, 597, 257, 509, 510, + 511, 512, 647, 517, 516, 271, 276, 264, 426, 258, + 598, 599, 600, 601, 602, 305, 618, 603, 604, 324, + 668, 474, 44, 605, 606, 607, 608, 609, 299, 294, + 420, 429, 62, 84, 381, 610, 611, 645, 332, 329, + 292, 612, 321, 56, 669, 670, 671, 286, 672, 502, + 503, 504, 505, 10, 679, 680, 497, 401, 127, 296, + 297, 48, 355, 278, 613, 309, 614, 345, 346, 360, + 331, 356, 630, 322, 628, 280, 402, 475, 266, 615, + 428, 293, 377, 382, 310, 531, 514, 285, 403, 637, + 644, 530, 506, 507, 353, 350, 287, 508, 616, 632, + 404, 241, 281, 282, 617, 629, 405, 406, 303, 407, + 315, 317, 417, 318, 319, 408, 409, 410, 411, 414, + 415, 416, 413, 316, 412, 631, 625, 626, 288, 529, + 327, 348, 383, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, - 471, 239, -80, 239, -191, -300, 239, 239, 96, 526, - 652, 636, 397, -272, 414, 415, 384, -290, 386, 399, - 394, 404, 392, -281, 395, 397, 279, -401, 418, 239, - 401, 225, 387, 396, 405, 406, 315, 416, 317, 303, - 412, 407, 316, 411, 288, 408, 409, 410, 413, -384, - 177, 656, 671, 135, 351, 391, 389, 419, 633, 91, - -306, 91, 92, 93, -293, 321, -308, 326, -294, -384, - -293, 324, -80, -80, -310, -310, -130, 633, 637, -210, - -145, 143, -160, -163, -151, -155, -204, -205, -206, -207, - -161, -220, -259, 166, 167, 174, 144, -216, -164, 27, - 521, 465, 464, 177, 32, -154, 220, 69, 70, 467, - 146, 58, 12, 440, 441, -162, 435, 442, 437, 492, - 494, 495, 496, 493, 498, 499, 500, 501, 502, 503, - 504, 505, 506, 507, 497, 469, 470, 118, 471, 108, - 110, 109, 472, 473, 474, 348, 519, 520, 514, 517, - 518, 516, 515, 363, 364, 475, 476, 477, 111, 112, - 113, 114, 115, 116, 117, 478, 481, 479, 480, 482, - 483, 484, 489, 490, 485, 486, 487, 488, 491, -90, - -102, 547, 546, -103, -152, -153, -166, -167, -294, -300, - 244, 434, 238, 172, 463, -156, -149, -218, 107, 92, - 93, -8, -214, 433, 438, 439, 443, 436, 533, 535, - 550, 551, 553, 538, 543, 542, 545, 508, 509, 510, - 511, 512, 513, 618, 619, 620, 621, 622, 623, 624, - 625, -384, -293, 91, -158, -157, -200, 94, 99, 102, - 103, 105, -407, 262, 344, 345, 119, -418, 649, 90, - 95, 96, 97, 98, 120, 121, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, - 212, 213, 214, 215, 216, 217, 218, 219, 45, 400, - 400, -191, -80, -80, -80, -80, -230, -128, -232, -10, - -8, -418, -80, -8, -9, -13, -35, -37, 552, -36, - -300, 100, -237, -253, 13, 162, 43, 51, -235, -236, - -12, -8, -145, 20, 24, 25, -133, 168, -145, -300, - -133, -279, 243, -80, -80, -268, -313, 321, -270, 419, - 633, 418, -260, -273, 91, -259, -272, 417, -12, -354, - 159, -340, -344, -294, 254, -370, 250, -191, -80, -363, - -362, -294, -418, -129, -289, 240, 248, 247, 136, -388, - 139, 296, 434, 238, -52, -53, -54, -272, 176, 655, - -111, 271, 275, 88, 88, -344, -343, -342, -389, 275, - 254, -369, -361, 246, 255, -350, 247, 248, -345, 240, - 137, -389, -345, 245, 255, 250, 254, 275, 275, 127, - 275, 127, 275, 275, 275, 275, 275, 275, 275, 275, - 275, 270, -351, 151, -351, 529, 529, -357, -389, 250, - 240, -389, -389, 246, -291, -345, 242, 26, 242, 36, - 36, -351, -351, -351, -272, 176, -351, -351, -351, -351, - 283, 283, -351, -351, -351, -351, -351, -351, -351, -351, - -351, -351, -351, -351, -351, -351, -351, -351, -351, 239, - -388, -137, 411, 303, 317, 315, 82, -55, 285, -38, - -191, -289, 240, 241, -388, 272, -191, 221, -191, -415, - -191, 96, 96, -283, 159, 16, -283, -280, 400, 398, - 385, 390, -283, -283, -283, -283, 286, 383, -346, 240, - 36, 251, 400, 286, 383, 286, 287, 286, 287, 393, - 403, 286, -305, 15, 162, 434, 388, 392, 279, 239, - 280, 241, 402, 287, -305, -305, 90, -305, 90, 90, - -284, 159, 286, 400, 282, -283, -283, -311, -418, -296, - -294, -292, 230, 24, 142, 26, 28, 145, 177, 130, - 20, 146, 38, 232, 351, 250, 176, 246, 464, 225, - 73, 533, 435, 437, 433, 440, 466, 467, 434, 386, - 32, 14, 535, 29, 260, 25, 39, 170, 227, 149, - 536, 263, 27, 261, 118, 121, 538, 23, 76, 255, - 15, 248, 41, 17, 539, 540, 18, 244, 243, 162, - 240, 71, 12, 220, 30, 158, 67, 541, 137, 542, - 543, 544, 545, 131, 69, 159, 21, 675, 438, 439, - 34, 634, 521, 274, 172, 74, 60, 637, 143, 436, - 546, 547, 119, 548, 122, 77, 642, 139, 19, 72, - 43, 549, 275, 550, 245, 676, 551, 422, 552, 160, - 228, 463, 70, 161, 649, 553, 650, 238, 399, 9, - 468, 33, 259, 247, 129, 68, 554, 239, 148, 469, - 470, 242, 132, 120, 8, 136, 35, 13, 75, 78, - 441, 442, 443, 58, 128, 525, 147, 16, 555, 423, - 141, 635, 429, 430, 431, 432, 235, -384, 638, -311, - -311, 33, 92, -410, -411, -412, 525, 422, 242, -294, - -191, -86, 626, 229, -87, 632, 24, 237, -135, 400, - -123, 177, 656, 639, 640, 641, 638, 397, 636, 646, - 644, 642, 286, 643, 88, 139, 141, 142, 4, -145, - 158, -201, 151, 152, 153, 154, 155, 156, 157, 162, - 143, 145, 159, -246, 140, 163, 164, 165, 166, 167, - 168, 169, 171, 170, 172, 173, 160, 161, 176, 223, - 224, -155, -155, -155, -155, -216, -222, -221, -418, -218, - -384, -293, -300, -418, -418, -155, -278, -418, -418, -151, - -418, -418, -418, -225, -145, -418, -418, -422, -418, -422, - -422, -329, -418, -329, -418, -418, -418, -418, -418, -418, + 462, 472, 239, -80, 239, -191, -300, 239, 239, 96, + 527, 653, 637, 398, -272, 415, 416, 385, -290, 387, + 400, 395, 405, 393, -281, 396, 398, 279, -401, 419, + 239, 402, 225, 388, 397, 406, 407, 315, 417, 317, + 303, 413, 408, 316, 412, 288, 409, 410, 411, 414, + -384, 177, 657, 672, 135, 352, 392, 390, 420, 634, + 91, -306, 91, 92, 93, -293, 322, -308, 327, -294, + -384, -293, 325, -80, -80, -310, -310, -130, 634, 638, + -210, -145, 143, -160, -163, -151, -155, -204, -205, -206, + -207, -161, -220, -259, 166, 167, 174, 144, -216, -164, + 27, 522, 466, 465, 177, 32, -154, 220, 69, 70, + 468, 146, 58, 12, 441, 442, -162, 436, 443, 438, + 493, 495, 496, 497, 494, 499, 500, 501, 502, 503, + 504, 505, 506, 507, 508, 498, 470, 471, 118, 472, + 108, 110, 109, 473, 474, 475, 349, 520, 521, 515, + 518, 519, 517, 516, 364, 365, 476, 477, 478, 111, + 112, 113, 114, 115, 116, 117, 479, 482, 480, 481, + 483, 484, 485, 490, 491, 486, 487, 488, 489, 492, + -90, -102, 548, 547, -103, -152, -153, -166, -167, -294, + -300, 244, 435, 238, 172, 464, -156, -149, -218, 107, + 92, 93, -8, -214, 434, 439, 440, 444, 437, 534, + 536, 551, 552, 554, 539, 544, 543, 546, 509, 510, + 511, 512, 513, 514, 619, 620, 621, 622, 623, 624, + 625, 626, -384, -293, 91, -158, -157, -200, 94, 99, + 102, 103, 105, -407, 262, 345, 346, 119, -418, 650, + 90, 95, 96, 97, 98, 120, 121, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 45, + 401, 401, -191, -80, -80, -80, -80, -230, -128, -232, + -10, -8, -418, -80, -8, -9, -13, -35, -37, 553, + -36, -300, 100, -237, -253, 13, 162, 43, 51, -235, + -236, -12, -8, -145, 20, 24, 25, -133, 168, -145, + -300, -133, -279, 243, -80, -80, -268, -313, 322, -270, + 420, 634, 419, -260, -273, 91, -259, -272, 418, -12, + -354, 159, -340, -344, -294, 254, -370, 250, -191, -80, + -363, -362, -294, -418, -129, -289, 240, 248, 247, 136, + -388, 139, 296, 435, 238, -52, -53, -54, -272, 176, + 656, -111, 271, 275, 88, 88, -344, -343, -342, -389, + 275, 254, -369, -361, 246, 255, -350, 247, 248, -345, + 240, 137, -389, -345, 245, 255, 250, 254, 275, 275, + 127, 275, 127, 275, 275, 275, 275, 275, 275, 275, + 275, 275, 270, -351, 151, -351, 530, 530, -357, -389, + 250, 240, -389, -389, 246, -291, -345, 242, 26, 242, + 36, 36, -351, -351, -351, -272, 176, -351, -351, -351, + -351, 283, 283, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + 239, -388, -137, 412, 303, 317, 315, 82, -55, 285, + -38, -191, -289, 240, 241, -388, 272, -191, 221, -191, + -415, -191, 96, 96, -283, 159, 16, -283, -280, 401, + 399, 386, 391, -283, -283, -283, -283, 286, 384, -346, + 240, 36, 251, 401, 286, 384, 286, 287, 286, 287, + 394, 404, 286, -305, 15, 162, 435, 389, 393, 279, + 239, 280, 241, 403, 287, -305, -305, 90, -305, 90, + 90, -284, 159, 286, 401, 282, -283, -283, -311, -418, + -296, -294, -292, 230, 24, 142, 26, 28, 145, 177, + 130, 20, 146, 38, 232, 352, 250, 176, 246, 465, + 225, 73, 534, 436, 438, 434, 441, 467, 468, 435, + 387, 32, 14, 536, 29, 260, 25, 39, 170, 227, + 149, 537, 263, 27, 261, 118, 121, 539, 23, 76, + 255, 15, 248, 41, 17, 540, 541, 18, 244, 243, + 162, 240, 71, 12, 220, 30, 158, 67, 542, 137, + 543, 544, 545, 546, 131, 69, 159, 21, 676, 439, + 440, 34, 635, 522, 274, 172, 74, 60, 638, 143, + 437, 547, 548, 119, 549, 122, 77, 643, 139, 19, + 72, 43, 550, 275, 551, 245, 677, 552, 423, 553, + 160, 228, 464, 70, 161, 650, 554, 651, 238, 400, + 9, 469, 33, 259, 247, 129, 68, 555, 239, 148, + 470, 471, 242, 132, 120, 8, 136, 35, 13, 75, + 78, 442, 443, 444, 58, 128, 526, 147, 16, 556, + 424, 141, 636, 430, 431, 432, 433, 235, -384, 639, + -311, -311, 33, 92, -410, -411, -412, 526, 423, 242, + -294, -191, -86, 627, 229, -87, 633, 24, 237, -135, + 401, -123, 177, 657, 640, 641, 642, 639, 398, 637, + 647, 645, 643, 286, 644, 88, 139, 141, 142, 4, + -145, 158, -201, 151, 152, 153, 154, 155, 156, 157, + 162, 143, 145, 159, -246, 140, 163, 164, 165, 166, + 167, 168, 169, 171, 170, 172, 173, 160, 161, 176, + 223, 224, -155, -155, -155, -155, -216, -222, -221, -418, + -218, -384, -293, -300, -418, -418, -155, -278, -418, -418, + -151, -418, -418, -418, -225, -145, -418, -418, -422, -418, + -422, -422, -329, -418, -329, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, - 221, -418, -418, -418, -418, -418, -329, -329, -329, -329, - -329, -418, -418, -418, -418, -418, -418, -418, -418, -418, - -418, -418, -418, -418, -418, 103, 99, 102, 94, -220, - 105, 90, 90, 90, 90, -8, -9, -210, -418, -310, - -398, -399, -194, -191, -418, 303, 315, -294, -294, 272, - -235, -12, -8, -230, -236, -232, -8, -121, -134, 64, - 65, -136, 25, 39, 68, 66, 24, -419, 89, -419, - -253, -419, 88, -37, -256, 87, 62, 44, 90, 90, - 88, 22, -231, -233, -145, 15, -298, 4, -297, 26, - -294, 90, 221, 15, -192, 30, -191, -279, -279, 88, - 91, 321, -269, -271, 420, 422, 151, -299, -294, 90, - 32, 89, 88, -191, -318, -321, -323, -322, -324, -319, - -320, 348, 349, 177, 352, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 365, 33, 262, 344, 345, 346, - 347, 366, 367, 368, 369, 371, 372, 373, 374, 329, - 350, 523, 330, 331, 332, 333, 334, 335, 337, 338, - 341, 339, 340, 342, 343, -385, -384, 87, 64, 65, - 89, 88, -325, 87, -145, -137, 239, -384, 240, 240, - 240, -80, 463, -351, -351, -351, 270, 20, -45, -42, - -377, 19, -41, -42, 230, 123, 124, 227, 87, -340, - 87, -349, -385, -384, 87, 137, 245, 136, -348, -345, - -348, -349, -384, -218, -384, 137, 137, -384, -384, -265, - -294, -265, -265, 24, -265, 24, -265, 24, 96, -294, - -265, 24, -265, 24, -265, 24, -265, 24, -265, 24, - 32, 79, 80, 81, 32, 83, 84, 85, -218, -384, - -384, -218, -340, -218, -191, -384, -272, 96, 96, 96, - -351, -351, 96, 90, 90, 90, -351, -351, 96, 90, - -302, -300, 90, 90, -390, 256, 300, 302, 96, 96, - 96, 96, 32, 90, -391, 32, 663, 662, 664, 665, - 666, 90, 96, 32, 96, 32, 96, -294, 87, -191, - -143, 290, 225, 227, 230, 77, 90, 306, 307, 304, - 313, 314, 309, 310, 90, 306, 304, 313, 314, 309, - 310, 90, 306, 307, 304, 313, 314, 309, 310, 151, - 45, 88, 242, 239, -384, -285, 244, -285, -294, -301, - -300, -292, -414, 88, -413, 23, 429, 430, 432, 389, - 431, 90, -145, -347, 15, 162, -305, -305, -283, -191, - -347, -305, -283, -191, -283, -283, -283, -283, -305, -305, - -305, -283, -300, -300, -191, -191, -191, -191, -191, -191, - -191, -311, -284, -283, -283, 638, -283, 318, 638, 90, - -277, 15, 77, -311, -311, 88, 327, 423, 424, -309, - 324, -82, -294, 90, -15, -11, -23, -22, -24, 151, - -15, 88, 525, -184, -191, 638, 638, 638, 638, 638, - 638, -145, -145, -145, -145, 548, -208, 119, 143, 120, - 121, -163, -209, -214, -216, 106, 162, 145, 159, -246, - -151, -155, -151, -151, -151, -151, -151, -151, -151, -151, - -151, -151, -151, -151, -151, -312, -294, 90, 177, -159, - -158, 105, -407, -159, 522, 88, -221, 221, -145, -145, - -384, -145, -294, -131, -133, -131, -145, -223, -224, 147, - -218, -145, -419, -419, 96, 105, 168, -127, 25, 39, - -127, -127, -127, -127, -145, -145, -145, -145, -145, -145, - -145, -145, -145, -145, -127, -294, -294, -120, -119, 445, - 446, 447, 448, 450, 451, 452, 455, 456, 460, 461, - 444, 462, 449, 454, 457, 458, 459, 453, 347, -145, - -145, -145, -145, -145, -145, -88, -145, 130, 131, 132, - -210, -145, -151, -145, -145, -145, -419, -145, -145, -145, - -211, -210, -383, -382, -381, -145, -145, -145, -145, -145, + -418, 221, -418, -418, -418, -418, -418, -329, -329, -329, + -329, -329, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, 103, 99, 102, 94, + -220, 105, 90, 90, 90, 90, -8, -9, -210, -418, + -310, -398, -399, -194, -191, -418, 303, 315, -294, -294, + 272, -235, -12, -8, -230, -236, -232, -8, -121, -134, + 64, 65, -136, 25, 39, 68, 66, 24, -419, 89, + -419, -253, -419, 88, -37, -256, 87, 62, 44, 90, + 90, 88, 22, -231, -233, -145, 15, -298, 4, -297, + 26, -294, 90, 221, 15, -192, 30, -191, -279, -279, + 88, 91, 322, -269, -271, 421, 423, 151, -299, -294, + 90, 32, 89, 88, -191, -318, -321, -323, -322, -324, + -319, -320, 349, 350, 177, 353, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 366, 33, 262, 345, 346, + 347, 348, 367, 368, 369, 370, 372, 373, 374, 375, + 330, 351, 524, 331, 332, 333, 334, 335, 336, 338, + 339, 342, 340, 341, 343, 344, -385, -384, 87, 64, + 65, 89, 88, -325, 87, -145, -137, 239, -384, 240, + 240, 240, -80, 464, -351, -351, -351, 270, 20, -45, + -42, -377, 19, -41, -42, 230, 123, 124, 227, 87, + -340, 87, -349, -385, -384, 87, 137, 245, 136, -348, + -345, -348, -349, -384, -218, -384, 137, 137, -384, -384, + -265, -294, -265, -265, 24, -265, 24, -265, 24, 96, + -294, -265, 24, -265, 24, -265, 24, -265, 24, -265, + 24, 32, 79, 80, 81, 32, 83, 84, 85, -218, + -384, -384, -218, -340, -218, -191, -384, -272, 96, 96, + 96, -351, -351, 96, 90, 90, 90, -351, -351, 96, + 90, -302, -300, 90, 90, -390, 256, 300, 302, 96, + 96, 96, 96, 32, 90, -391, 32, 664, 663, 665, + 666, 667, 90, 96, 32, 96, 32, 96, -294, 87, + -191, -143, 290, 225, 227, 230, 77, 90, 306, 307, + 304, 313, 314, 309, 310, 90, 306, 304, 313, 314, + 309, 310, 90, 306, 307, 304, 313, 314, 309, 310, + 151, 45, 88, 242, 239, -384, -285, 244, -285, -294, + -301, -300, -292, -414, 88, -413, 23, 430, 431, 433, + 390, 432, 90, -145, -347, 15, 162, -305, -305, -283, + -191, -347, -305, -283, -191, -283, -283, -283, -283, -305, + -305, -305, -283, -300, -300, -191, -191, -191, -191, -191, + -191, -191, -311, -284, -283, -283, 639, -283, 318, 639, + 90, -277, 15, 77, -311, -311, 88, 328, 424, 425, + -309, 325, -82, -294, 90, -15, -11, -23, -22, -24, + 151, -15, 88, 526, -184, -191, 639, 639, 639, 639, + 639, 639, -145, -145, -145, -145, 549, -208, 119, 143, + 120, 121, -163, -209, -214, -216, 106, 162, 145, 159, + -246, -151, -155, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -312, -294, 90, 177, + -159, -158, 105, -407, -159, 523, 88, -221, 221, -145, + -145, -384, -145, -294, -131, -133, -131, -145, -223, -224, + 147, -218, -145, -419, -419, 96, 105, 168, -127, 25, + 39, -127, -127, -127, -127, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -127, -294, -294, -120, -119, + 446, 447, 448, 449, 451, 452, 453, 456, 457, 461, + 462, 445, 463, 450, 455, 458, 459, 460, 454, 348, + -145, -145, -145, -145, -145, -145, -88, -145, 130, 131, + 132, -210, -145, -151, -145, -145, -145, -419, -145, -145, + -145, -211, -210, -383, -382, -381, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -419, + -145, -165, -149, 96, -261, 105, 92, -145, -145, -132, + -131, -296, -301, -292, -293, -131, -132, -132, -131, -131, -145, -145, -145, -145, -145, -145, -145, -145, -419, -145, - -165, -149, 96, -261, 105, 92, -145, -145, -132, -131, - -296, -301, -292, -293, -131, -132, -132, -131, -131, -145, - -145, -145, -145, -145, -145, -145, -145, -419, -145, -145, - -145, -145, -145, -253, -419, -210, 88, -400, 422, 423, - 634, -303, 275, -302, 26, -211, 90, 90, 15, -263, - 78, -294, -235, -235, 60, -131, -136, -419, -36, 26, - -255, -294, 63, 90, -330, -272, 375, 376, 177, -145, - -145, 88, -234, 28, 29, -191, -297, 168, -301, -191, - -264, 275, -191, -169, -171, -172, -173, -194, -217, -418, - -174, -8, 544, 541, 15, -184, -185, -193, -300, -270, - -313, -269, 88, 421, 423, 424, 77, 122, -145, -331, - 176, -359, -358, -357, -340, -342, -343, -344, 89, -331, - -336, 381, 380, -325, -325, -325, -325, -325, -330, -330, - -330, -330, 87, 87, -325, -325, -325, -325, -333, 87, - -333, -333, -334, -333, 87, -334, -335, 87, -335, -370, - -145, -367, -366, -364, -365, 249, 101, 616, 572, 525, - 565, 606, 78, -362, -234, 96, -419, -143, -286, 244, - -368, -365, -384, -384, -384, -286, 91, 90, 91, 90, - 91, 90, -112, -59, -1, 675, 676, 677, 88, 20, - -341, -340, -58, 300, -373, -374, 275, -369, -363, -349, - 137, -348, -349, -349, -384, 88, 30, 127, 127, 127, - 127, 525, 227, 33, -287, 564, 143, 616, 572, -340, - -58, 242, 242, -312, -312, -312, 90, 90, -282, 671, - -184, -139, 292, 151, 281, 281, 239, 239, 294, -191, + -145, -145, -145, -145, -253, -419, -210, 88, -400, 423, + 424, 635, -303, 275, -302, 26, -211, 90, 90, 15, + -263, 78, -294, -235, -235, 60, -131, -136, -419, -36, + 26, -255, -294, 63, 90, -330, -272, 376, 377, 177, + -145, -145, 88, -234, 28, 29, -191, -297, 168, -301, + -191, -264, 275, -191, -169, -171, -172, -173, -194, -217, + -418, -174, -8, 545, 542, 15, -184, -185, -193, -300, + -270, -313, -269, 88, 422, 424, 425, 77, 122, -145, + -331, 176, -359, -358, -357, -340, -342, -343, -344, 89, + -331, -336, 382, 381, -325, -325, -325, -325, -325, -330, + -330, -330, -330, 87, 87, -325, -325, -325, -325, -333, + 87, -333, -333, -334, -333, 87, -334, -335, 87, -335, + -370, -145, -367, -366, -364, -365, 249, 101, 617, 573, + 526, 566, 607, 78, -362, -234, 96, -419, -143, -286, + 244, -368, -365, -384, -384, -384, -286, 91, 90, 91, + 90, 91, 90, -112, -59, -1, 676, 677, 678, 88, + 20, -341, -340, -58, 300, -373, -374, 275, -369, -363, + -349, 137, -348, -349, -349, -384, 88, 30, 127, 127, + 127, 127, 526, 227, 33, -287, 565, 143, 617, 573, + -340, -58, 242, 242, -312, -312, -312, 90, 90, -282, + 672, -184, -139, 292, 151, 281, 281, 239, 239, 294, + -191, 305, 308, 306, 307, 304, 313, 314, 309, 310, + 24, 24, 24, 24, 24, 24, 24, 306, 304, 313, + 314, 309, 310, 319, 24, 24, 24, 24, 24, 24, 305, 308, 306, 307, 304, 313, 314, 309, 310, 24, - 24, 24, 24, 24, 24, 24, 306, 304, 313, 314, - 309, 310, 24, 24, 24, 24, 24, 24, 305, 308, - 306, 307, 304, 313, 314, 309, 310, 24, 24, 24, - 24, 24, 24, 24, 293, 295, 297, 283, -191, -191, - -285, 77, -186, -191, 27, -300, -413, -191, 285, -191, - -283, -283, -191, -283, -283, -191, -412, 328, -294, 362, - 627, 628, 630, 629, -123, 422, 88, 525, 23, -124, - 23, -418, 119, 120, 121, -209, -151, -155, -151, 142, - 263, -418, -218, -419, -296, 26, 88, 78, -419, 88, - 88, -419, -419, 88, 15, -226, -224, 149, -145, -419, - 88, -419, -419, -419, -210, -145, -145, -145, -145, -419, - -419, -419, -419, -419, -419, -419, -419, -419, -419, -210, - 88, 88, 15, -316, 26, -419, -419, -419, -419, -419, - -225, -419, 15, -419, 78, 88, 162, 88, -419, -419, - -419, 88, 88, -419, -419, 88, 88, -419, 88, 88, - 88, -419, 88, 88, 88, 88, -419, -419, -419, -419, - 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, - -419, -95, 549, -419, -419, 88, -419, 88, -419, -418, - 221, -419, -419, -419, -419, -419, 88, 88, 88, 88, - 88, 88, -419, -419, -419, 88, 88, -419, 88, -419, - 88, -419, -399, 633, 423, -198, -197, -195, 75, 243, - 76, -418, -302, -419, -159, -261, -262, -261, -203, -294, - 96, 105, -237, -168, -170, 15, -136, -216, 89, 88, - -330, -241, -247, -280, -294, 90, 177, -332, 177, -332, - 375, 376, -233, 221, -199, 16, -202, 33, 58, -11, - -418, -418, 33, 88, -187, -189, -188, -190, 67, 71, - 73, 68, 69, 70, 74, -307, 26, -8, -169, -8, - -418, -191, -184, -420, 15, 78, -420, 88, 221, -271, - -274, 425, 422, 428, -384, 90, -111, 88, -357, -344, - -238, -140, 41, -337, 382, -330, 532, -330, -339, 90, - -339, 96, 96, 96, 89, -48, -43, -44, 34, 82, - -364, -351, 90, 40, -351, -351, -294, 89, -234, -139, - -191, 143, 77, -368, -368, -368, -300, -2, 674, 680, - 137, 87, 385, 19, -255, 88, 89, -219, 301, 89, - -113, -294, 89, 87, -349, -349, -294, -418, 239, 32, - 32, 616, 572, 564, -58, -219, -218, -384, -331, 673, - 672, 89, 241, 299, -144, 440, -141, 90, 91, -191, - -191, -191, -191, -191, 230, 227, 408, -408, 311, -408, - -408, -408, 408, -408, -408, 284, 242, -184, -191, 88, - -85, 258, 253, -305, -305, 34, -191, 422, 647, 645, - -145, 142, 263, -163, -155, -151, -314, 177, 348, 262, - 346, 342, 362, 353, 380, 344, 381, 339, 338, 337, - -314, -312, -210, -133, -145, -145, 150, -145, 148, -145, - -419, -419, -419, -419, -419, -230, -145, -145, -145, -419, - 177, 348, 15, -145, -312, -145, -145, -145, -145, -145, - -381, -145, -210, -145, -210, -145, -145, -145, -145, -145, - -382, -382, -382, -382, -382, -210, -210, -210, -210, -418, - -294, -98, -97, -96, 599, 243, -95, -165, -98, -165, - -132, -296, -145, -145, -145, -145, -145, -145, -145, -145, - -145, -145, -195, -345, -345, -345, -265, 88, -276, 23, - 15, 58, 58, -168, -199, -169, -136, -294, -244, 626, - -250, 47, -248, -249, 48, -245, 49, 57, -332, -332, - 168, -235, -145, -266, 77, -267, -275, -218, -213, -215, - -214, -418, -254, -419, -294, -265, -267, -171, -172, -172, - -171, -172, 67, 67, 67, 72, 67, 72, 67, -188, - -300, -419, -145, -303, 78, -169, -169, -193, -300, 168, - 422, 426, 427, -357, -406, 119, 143, 32, 77, 378, - 101, -404, 176, 561, 611, 616, 572, 565, 606, -405, - 245, 136, 137, 257, 26, 42, 89, 88, 89, 88, - 89, 89, 88, -288, -287, -44, -43, -351, -351, 96, - -384, 90, 90, 241, 27, -191, 77, 77, 77, -114, - 678, 96, 87, -3, 82, -145, 87, 20, -340, -218, - -375, -326, -376, -327, -328, -5, -6, -352, -117, 58, - 101, -62, 45, 240, 658, 659, 127, -418, 671, -367, - -255, -371, -373, -191, -148, -418, -147, -149, -156, 166, - 167, 262, 344, 345, -219, -191, -138, 290, 298, 87, - -142, 92, -387, 78, 281, 378, 281, 90, -409, 312, - 90, -409, -409, -409, 90, -409, -409, -191, -85, -48, - -191, -283, -283, 34, -384, -419, -163, -155, -126, 162, - 525, -317, 531, -325, -325, -325, -335, -325, 334, -325, - 334, -325, -419, -419, -419, 88, -419, 23, -419, -145, - 88, -122, 468, 88, 88, -419, 87, 87, -145, -419, - -419, -419, 88, -419, -419, -419, -419, -419, 88, -419, - -419, -419, 88, -315, 617, -419, -419, -419, -419, -419, - -419, -419, -419, -419, -419, -94, -295, -294, -95, 581, - 581, -419, -95, -227, 88, -419, -419, 88, -419, 88, - 88, -419, 88, -419, 88, -419, -419, -419, -419, 88, - -196, 23, -196, -196, -419, -261, -191, -199, -228, 17, - -241, 52, 354, -252, -251, 56, 48, -249, 20, 50, - 20, 31, -266, 88, 151, 88, -419, -419, 88, 58, - 221, -419, -199, -182, -181, 77, 78, -183, 77, -181, - 67, 67, -256, 88, -264, -169, -199, -199, 221, 119, - -418, -150, -162, -148, 13, 90, 90, -384, -403, 662, - 663, 32, 96, -351, -351, 137, 137, -191, 87, -330, - 90, -330, 96, 96, 32, 83, 84, 85, 32, 79, - 80, 81, -191, -191, -191, -191, -372, 87, 20, -145, - 87, 151, 89, -255, -255, 277, 162, -351, 656, 283, - 283, -351, -351, -351, -116, -115, 678, 89, -419, 88, - -338, 525, 528, -145, -157, -157, -256, 89, -380, 525, - -386, -294, -294, -294, -294, 96, 98, -419, 523, 74, - 526, -419, -330, -145, -145, -145, -235, 90, -145, -145, - 96, 96, -419, -145, -210, -145, -419, -179, -178, -180, - 639, 119, 32, -314, -419, -212, 275, -101, -100, -99, - 15, -419, -145, -145, -145, -145, -145, -145, -145, -418, - 67, 19, 17, -418, -418, -303, -228, -229, 18, 20, - -242, 54, -240, 53, -240, -251, 20, 20, 90, 20, - 90, 137, -275, -145, -215, 58, -11, -294, -213, -294, - -230, -145, 87, -145, -159, -199, -199, -145, -205, 492, - 494, 495, 496, 493, 498, 499, 500, 501, 502, 503, - 504, 505, 506, 507, 497, 471, 108, 110, 109, 472, - 473, 474, 348, 519, 520, 514, 517, 518, 516, 515, - 363, 364, 475, 476, 477, 111, 112, 113, 114, 115, - 116, 117, 478, 481, 479, 482, 483, 484, 489, 490, - 485, 486, 487, 488, 491, 508, 509, 510, 511, 512, - 513, 618, 619, 620, 621, 622, 623, 624, 625, 90, - 90, 87, -145, 89, 89, -256, -371, -59, 89, -257, - -255, 96, 89, 278, -214, -418, 90, -351, -351, -351, - 96, 96, -302, -419, 88, -294, -405, -373, 529, 529, - -419, 26, -379, -378, -296, 87, 78, 63, 524, 527, - -419, -419, 88, -419, -419, -419, 89, 89, -419, -419, - -419, 88, -419, -178, -180, -419, 77, -159, -230, 20, - -98, 300, 302, -98, -419, 88, -419, -419, 88, -419, - 88, -419, -419, -258, -419, -294, 245, 20, 20, -258, - -258, -198, -229, -108, -107, -106, 555, -145, -210, -243, - 55, 77, 122, 90, 90, 90, 13, -213, 221, -235, - -255, -176, 385, -230, -419, -255, 89, 26, 89, 680, - 137, 89, -214, -125, -418, 274, -302, 90, 90, -115, - -118, -11, 88, 151, -255, -191, 63, -145, -210, -419, - 77, 536, 639, -93, -92, -89, 650, 676, -210, -95, - -95, -145, -145, -145, 88, -419, -419, -419, -108, 88, - -105, -104, -294, 77, 122, -267, -294, 89, -419, -418, - -235, 89, -239, -11, 87, -3, 274, -326, -376, -327, - -328, -5, -6, -352, -83, 525, -378, -356, -296, 90, - 96, 89, 525, -419, -419, -91, 145, 648, 614, -146, - -157, -154, 220, -419, 88, -419, 88, -419, 88, -294, - 245, -106, 88, 26, -303, -177, -175, -294, 578, -396, - -395, 521, -406, -402, 119, 143, 101, -404, 616, 572, - 128, 129, -83, -145, 87, -419, -84, 289, 633, -387, - 526, -91, 649, 592, 567, 592, 567, -145, -145, -145, - -104, -418, -419, 88, 23, -318, -61, 589, -393, -394, - 77, -397, 391, 588, 609, 119, 90, 89, -255, 250, - -380, 527, 142, -419, 88, -419, 88, -419, -94, -175, - 585, -331, -159, -394, 77, -393, 77, 14, 13, -4, - 679, 89, 291, -91, -145, -145, -419, -60, 27, -176, - -392, 258, 253, 256, 33, -392, 96, -4, -419, -419, - 589, 252, 32, 119, -159, -179, -178, -178, + 24, 24, 24, 24, 24, 24, 293, 295, 297, 283, + -191, -191, -285, 77, -186, -191, 27, -300, -413, -191, + 285, -191, -283, -283, -191, -283, -283, -191, -412, 329, + -294, 363, 628, 629, 631, 630, -123, 423, 88, 526, + 23, -124, 23, -418, 119, 120, 121, -209, -151, -155, + -151, 142, 263, -418, -218, -419, -296, 26, 88, 78, + -419, 88, 88, -419, -419, 88, 15, -226, -224, 149, + -145, -419, 88, -419, -419, -419, -210, -145, -145, -145, + -145, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -210, 88, 88, 15, -316, 26, -419, -419, -419, + -419, -419, -225, -419, 15, -419, 78, 88, 162, 88, + -419, -419, -419, 88, 88, -419, -419, 88, 88, -419, + 88, 88, 88, -419, 88, 88, 88, 88, -419, -419, + -419, -419, 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, -419, -95, 550, -419, -419, 88, -419, 88, + -419, -418, 221, -419, -419, -419, -419, -419, 88, 88, + 88, 88, 88, 88, -419, -419, -419, 88, 88, -419, + 88, -419, 88, -419, -399, 634, 424, -198, -197, -195, + 75, 243, 76, -418, -302, -419, -159, -261, -262, -261, + -203, -294, 96, 105, -237, -168, -170, 15, -136, -216, + 89, 88, -330, -241, -247, -280, -294, 90, 177, -332, + 177, -332, 376, 377, -233, 221, -199, 16, -202, 33, + 58, -11, -418, -418, 33, 88, -187, -189, -188, -190, + 67, 71, 73, 68, 69, 70, 74, -307, 26, -8, + -169, -8, -418, -191, -184, -420, 15, 78, -420, 88, + 221, -271, -274, 426, 423, 429, -384, 90, -111, 88, + -357, -344, -238, -140, 41, -337, 383, -330, 533, -330, + -339, 90, -339, 96, 96, 96, 89, -48, -43, -44, + 34, 82, -364, -351, 90, 40, -351, -351, -294, 89, + -234, -139, -191, 143, 77, -368, -368, -368, -300, -2, + 675, 681, 137, 87, 386, 19, -255, 88, 89, -219, + 301, 89, -113, -294, 89, 87, -349, -349, -294, -418, + 239, 32, 32, 617, 573, 565, -58, -219, -218, -384, + -331, 674, 673, 89, 241, 299, -144, 441, -141, 90, + 91, -191, -191, -191, -191, -191, 230, 227, 409, -408, + 311, -408, -408, 90, -408, 409, -408, -408, 284, 242, + -184, -191, 88, -85, 258, 253, -305, -305, 34, -191, + 423, 648, 646, -145, 142, 263, -163, -155, -151, -314, + 177, 349, 262, 347, 343, 363, 354, 381, 345, 382, + 340, 339, 338, -314, -312, -210, -133, -145, -145, 150, + -145, 148, -145, -419, -419, -419, -419, -419, -230, -145, + -145, -145, -419, 177, 349, 15, -145, -312, -145, -145, + -145, -145, -145, -381, -145, -210, -145, -210, -145, -145, + -145, -145, -145, -382, -382, -382, -382, -382, -210, -210, + -210, -210, -418, -294, -98, -97, -96, 600, 243, -95, + -165, -98, -165, -132, -296, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -195, -345, -345, -345, -265, + 88, -276, 23, 15, 58, 58, -168, -199, -169, -136, + -294, -244, 627, -250, 47, -248, -249, 48, -245, 49, + 57, -332, -332, 168, -235, -145, -266, 77, -267, -275, + -218, -213, -215, -214, -418, -254, -419, -294, -265, -267, + -171, -172, -172, -171, -172, 67, 67, 67, 72, 67, + 72, 67, -188, -300, -419, -145, -303, 78, -169, -169, + -193, -300, 168, 423, 427, 428, -357, -406, 119, 143, + 32, 77, 379, 101, -404, 176, 562, 612, 617, 573, + 566, 607, -405, 245, 136, 137, 257, 26, 42, 89, + 88, 89, 88, 89, 89, 88, -288, -287, -44, -43, + -351, -351, 96, -384, 90, 90, 241, 27, -191, 77, + 77, 77, -114, 679, 96, 87, -3, 82, -145, 87, + 20, -340, -218, -375, -326, -376, -327, -328, -5, -6, + -352, -117, 58, 101, -62, 45, 240, 659, 660, 127, + -418, 672, -367, -255, -371, -373, -191, -148, -418, -147, + -149, -156, 166, 167, 262, 345, 346, -219, -191, -138, + 290, 298, 87, -142, 92, -387, 78, 281, 379, 281, + 90, -409, 312, 90, -409, -409, 90, -409, 90, -409, + -409, -191, -85, -48, -191, -283, -283, 34, -384, -419, + -163, -155, -126, 162, 526, -317, 532, -325, -325, -325, + -335, -325, 335, -325, 335, -325, -419, -419, -419, 88, + -419, 23, -419, -145, 88, -122, 469, 88, 88, -419, + 87, 87, -145, -419, -419, -419, 88, -419, -419, -419, + -419, -419, 88, -419, -419, -419, 88, -315, 618, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -94, + -295, -294, -95, 582, 582, -419, -95, -227, 88, -419, + -419, 88, -419, 88, 88, -419, 88, -419, 88, -419, + -419, -419, -419, 88, -196, 23, -196, -196, -419, -261, + -191, -199, -228, 17, -241, 52, 355, -252, -251, 56, + 48, -249, 20, 50, 20, 31, -266, 88, 151, 88, + -419, -419, 88, 58, 221, -419, -199, -182, -181, 77, + 78, -183, 77, -181, 67, 67, -256, 88, -264, -169, + -199, -199, 221, 119, -418, -150, -162, -148, 13, 90, + 90, -384, -403, 663, 664, 32, 96, -351, -351, 137, + 137, -191, 87, -330, 90, -330, 96, 96, 32, 83, + 84, 85, 32, 79, 80, 81, -191, -191, -191, -191, + -372, 87, 20, -145, 87, 151, 89, -255, -255, 277, + 162, -351, 657, 283, 283, -351, -351, -351, -116, -115, + 679, 89, -419, 88, -338, 526, 529, -145, -157, -157, + -256, 89, -380, 526, -386, -294, -294, -294, -294, 96, + 98, -419, 524, 74, 527, -419, -330, -145, -145, -145, + -235, 90, -145, -145, 96, 96, -419, -145, -210, -145, + -419, -179, -178, -180, 640, 119, 32, -314, -419, -212, + 275, -101, -100, -99, 15, -419, -145, -145, -145, -145, + -145, -145, -145, -418, 67, 19, 17, -418, -418, -303, + -228, -229, 18, 20, -242, 54, -240, 53, -240, -251, + 20, 20, 90, 20, 90, 137, -275, -145, -215, 58, + -11, -294, -213, -294, -230, -145, 87, -145, -159, -199, + -199, -145, -205, 493, 495, 496, 497, 494, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 498, 472, + 108, 110, 109, 473, 474, 475, 349, 520, 521, 515, + 518, 519, 517, 516, 364, 365, 476, 477, 478, 111, + 112, 113, 114, 115, 116, 117, 479, 482, 480, 483, + 484, 485, 490, 491, 486, 487, 488, 489, 492, 509, + 510, 511, 512, 513, 514, 619, 620, 621, 622, 623, + 624, 625, 626, 90, 90, 87, -145, 89, 89, -256, + -371, -59, 89, -257, -255, 96, 89, 278, -214, -418, + 90, -351, -351, -351, 96, 96, -302, -419, 88, -294, + -405, -373, 530, 530, -419, 26, -379, -378, -296, 87, + 78, 63, 525, 528, -419, -419, 88, -419, -419, -419, + 89, 89, -419, -419, -419, 88, -419, -178, -180, -419, + 77, -159, -230, 20, -98, 300, 302, -98, -419, 88, + -419, -419, 88, -419, 88, -419, -419, -258, -419, -294, + 245, 20, 20, -258, -258, -198, -229, -108, -107, -106, + 556, -145, -210, -243, 55, 77, 122, 90, 90, 90, + 13, -213, 221, -235, -255, -176, 386, -230, -419, -255, + 89, 26, 89, 681, 137, 89, -214, -125, -418, 274, + -302, 90, 90, -115, -118, -11, 88, 151, -255, -191, + 63, -145, -210, -419, 77, 537, 640, -93, -92, -89, + 651, 677, -210, -95, -95, -145, -145, -145, 88, -419, + -419, -419, -108, 88, -105, -104, -294, 77, 122, -267, + -294, 89, -419, -418, -235, 89, -239, -11, 87, -3, + 274, -326, -376, -327, -328, -5, -6, -352, -83, 526, + -378, -356, -296, 90, 96, 89, 526, -419, -419, -91, + 145, 649, 615, -146, -157, -154, 220, -419, 88, -419, + 88, -419, 88, -294, 245, -106, 88, 26, -303, -177, + -175, -294, 579, -396, -395, 522, -406, -402, 119, 143, + 101, -404, 617, 573, 128, 129, -83, -145, 87, -419, + -84, 289, 634, -387, 527, -91, 650, 593, 568, 593, + 568, -145, -145, -145, -104, -418, -419, 88, 23, -318, + -61, 590, -393, -394, 77, -397, 392, 589, 610, 119, + 90, 89, -255, 250, -380, 528, 142, -419, 88, -419, + 88, -419, -94, -175, 586, -331, -159, -394, 77, -393, + 77, 14, 13, -4, 680, 89, 291, -91, -145, -145, + -419, -60, 27, -176, -392, 258, 253, 256, 33, -392, + 96, -4, -419, -419, 590, 252, 32, 119, -159, -179, + -178, -178, } var yyDef = [...]int{ - 927, -2, -2, 929, 2, 4, 5, 6, 7, 8, + 928, -2, -2, 930, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 73, 75, 76, 927, 927, 927, 0, 927, - 0, 0, 927, -2, -2, 927, 1544, 0, 927, 0, - 0, 0, 0, 0, -2, 840, 846, 0, 855, -2, - 0, 0, 927, 927, 2115, 2115, 922, 0, 0, 0, - 0, 0, 927, 927, 927, 927, 1401, 53, 927, 0, - 88, 89, 875, 876, 877, 68, 0, 2113, 928, 1, - 3, 74, 78, 0, 0, 0, 61, 1410, 0, 81, - 0, 0, 931, 0, 0, 1527, 927, 927, 0, 129, - 130, 131, 0, 0, 0, 927, 0, -2, 135, -2, - 164, 165, 166, 0, 171, 637, 527, 579, 525, 564, + 39, 40, 73, 75, 76, 928, 928, 928, 0, 928, + 0, 0, 928, -2, -2, 928, 1545, 0, 928, 0, + 0, 0, 0, 0, -2, 841, 847, 0, 856, -2, + 0, 0, 928, 928, 2117, 2117, 923, 0, 0, 0, + 0, 0, 928, 928, 928, 928, 1402, 53, 928, 0, + 88, 89, 876, 877, 878, 68, 0, 2115, 929, 1, + 3, 74, 78, 0, 0, 0, 61, 1411, 0, 81, + 0, 0, 932, 0, 0, 1528, 928, 928, 0, 129, + 130, 131, 0, 0, 0, 928, 0, -2, 135, -2, + 164, 165, 166, 0, 171, 638, 527, 579, 525, 564, -2, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 403, 403, 0, 0, -2, - 513, 513, 513, 1529, 0, 0, 0, 561, 465, 403, + 513, 513, 513, 1530, 0, 0, 0, 561, 465, 403, 403, 403, 0, 403, 403, 403, 403, 0, 0, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, - 403, 403, 403, 403, 403, 403, 1428, 170, 1545, 1542, - 1543, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, - 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, - 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, - 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, - 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, - 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, - 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, - 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, - 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, - 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, - 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, - 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, - 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, - 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, - 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, - 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, - 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, - 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, - 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, - 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, - 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, - 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, - 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, - 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, - 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, - 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, - 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, - 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, - 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, - 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, - 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, - 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, - 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, - 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, - 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, - 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, - 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, - 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, - 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, - 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, - 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, - 2112, 0, 1521, 0, 750, 1030, 0, 0, 755, 0, - 0, 758, 759, 829, 761, 762, 829, 0, 829, 829, - 829, 829, 0, 0, 0, 772, 0, 0, 0, 0, - 826, 0, 788, 789, 0, 826, 826, 826, 0, 0, - 800, 832, 0, 0, 806, 829, 829, 809, 810, 2116, - 0, 2116, 2116, 1512, 0, 823, 821, 835, 836, 43, - 839, 842, 843, 844, 845, 848, 0, 859, 862, 1538, - 1539, 0, 864, 871, 888, 889, 0, 923, 924, 48, - 1178, 0, 1052, 1057, 1068, 1083, 1084, 1085, 1086, 1087, - 1089, 1090, 1091, 0, 0, 0, 0, 1096, 1097, 0, - 0, 0, 0, 0, 1159, 1105, 0, 0, 0, 0, - 1374, 0, 0, 1335, 1335, 1193, 1335, 1337, 1337, 1752, - 1888, 1896, 2018, 1714, 1719, 1720, 1721, 2011, 2012, 2013, - 2014, 2054, 2055, 2059, 1812, 0, 0, 0, 2112, 1849, - 1857, 1858, 1882, 1983, 2039, 1731, 1877, 1948, 1809, 1831, - 1832, 1965, 1966, 1853, 1854, 1835, 1847, 1850, 1838, 1839, - 1841, 1843, 1848, 1855, 1861, 1840, 1860, 1859, 0, 1836, - 1837, 1842, 1852, 1856, 1844, 1845, 1846, 1851, 1862, 0, - 0, 0, 0, 0, 1274, 1275, 1276, 1277, 0, 0, - 0, 0, 0, 0, 0, 295, 296, 1387, 1388, 46, - 47, 1177, 1508, 1337, 1337, 1337, 1337, 1337, 1119, 1120, - 1121, 1122, 1123, 1147, 1148, 1154, 1155, 1960, 1961, 1962, - 1963, 1793, 2048, 1801, 1802, 1943, 1944, 1814, 1815, 2087, - 2088, -2, -2, -2, 236, 237, 238, 239, 240, 241, - 242, 243, 0, 1756, 2029, 2030, 232, 0, 0, 300, - 301, 297, 298, 299, 1161, 1162, 253, 254, 255, 256, - 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 287, 288, 289, 290, 291, 292, 293, 294, 2115, 0, - 898, 0, 0, 0, 0, 0, 1410, 0, 1402, 1401, - 66, 0, -2, 0, 0, 0, 0, 50, 0, 55, - 987, 930, 80, 79, 1459, 0, 0, 0, 62, 1411, - 70, 72, 1412, 0, 932, 933, 0, 963, 967, 0, - 0, 0, 1528, 1527, 1527, 105, 0, 0, 106, 126, - 127, 128, 0, 0, 112, 113, 1514, 1515, 132, 0, - 0, 182, 183, 0, 44, 430, 0, 178, 949, 0, - 423, 362, 0, 1428, 0, 0, 0, 0, 0, 927, - 0, 1522, 159, 160, 167, 168, 169, 403, 403, 403, - 576, 0, 0, 170, 170, 534, 535, 536, 0, 0, - -2, 428, 0, 514, 0, 0, 417, 417, 421, 419, - 420, 0, 0, 0, 0, 0, 0, 0, 0, 553, - 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 698, 0, 404, 0, 574, 575, 466, 0, 0, - 0, 0, 0, 0, 0, 0, 1530, 1531, 0, 551, - 552, 0, 0, 0, 403, 403, 0, 0, 0, 0, - 403, 403, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 158, 1450, 0, 0, 0, 0, 0, -2, 0, 742, - 0, 0, 0, 1523, 1523, 0, 749, 0, 751, 1441, - 753, 756, 757, 760, 0, 0, 763, 0, 826, 826, - 824, 825, 765, 766, 767, 768, 829, 0, 0, 412, - 413, 414, 826, 829, 0, 829, 829, 829, 829, 826, - 826, 826, 829, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2116, 832, 829, 829, 0, 829, 796, 0, - 801, 0, 802, 803, 804, 807, 808, 811, 2117, 2118, - 1540, 1541, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, + 403, 403, 403, 403, 403, 403, 1429, 170, 1546, 1543, + 1544, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, + 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, + 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, + 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, + 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, + 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, + 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, + 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, + 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, + 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, + 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, + 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, + 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, + 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, + 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, + 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, + 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, + 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, + 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, + 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, + 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, + 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, + 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, + 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, + 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, + 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, + 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, + 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, + 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, + 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, + 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, + 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, + 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, + 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, + 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, + 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, + 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, + 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, + 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, + 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, + 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, + 2113, 2114, 0, 1522, 0, 751, 1031, 0, 0, 756, + 0, 0, 759, 760, 830, 762, 763, 830, 0, 830, + 830, 830, 830, 0, 0, 0, 773, 0, 0, 0, + 0, 827, 0, 789, 790, 0, 827, 827, 827, 0, + 0, 801, 833, 0, 0, 807, 830, 830, 810, 811, + 2118, 0, 2118, 2118, 1513, 0, 824, 822, 836, 837, + 43, 840, 843, 844, 845, 846, 849, 0, 860, 863, + 1539, 1540, 0, 865, 872, 889, 890, 0, 924, 925, + 48, 1179, 0, 1053, 1058, 1069, 1084, 1085, 1086, 1087, + 1088, 1090, 1091, 1092, 0, 0, 0, 0, 1097, 1098, + 0, 0, 0, 0, 0, 1160, 1106, 0, 0, 0, + 0, 1375, 0, 0, 1336, 1336, 1194, 1336, 1338, 1338, + 1753, 1889, 1897, 2019, 1715, 1720, 1721, 1722, 2012, 2013, + 2014, 2015, 2055, 2056, 2060, 1813, 0, 0, 0, 2114, + 1850, 1858, 1859, 1883, 1984, 2040, 1732, 1878, 1949, 1810, + 1832, 1833, 1966, 1967, 1854, 1855, 1836, 1848, 1851, 1839, + 1840, 1842, 1844, 1849, 1856, 1862, 1841, 1861, 1860, 0, + 1837, 1838, 1843, 1853, 1857, 1845, 1846, 1847, 1852, 1863, + 0, 0, 0, 0, 0, 1275, 1276, 1277, 1278, 0, + 0, 0, 0, 0, 0, 0, 295, 296, 1388, 1389, + 46, 47, 1178, 1509, 1338, 1338, 1338, 1338, 1338, 1120, + 1121, 1122, 1123, 1124, 1148, 1149, 1155, 1156, 1961, 1962, + 1963, 1964, 1794, 2049, 1802, 1803, 1944, 1945, 1815, 1816, + 2089, 2090, -2, -2, -2, 236, 237, 238, 239, 240, + 241, 242, 243, 0, 1757, 2030, 2031, 232, 0, 0, + 300, 301, 297, 298, 299, 1162, 1163, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 2117, + 0, 899, 0, 0, 0, 0, 0, 1411, 0, 1403, + 1402, 66, 0, -2, 0, 0, 0, 0, 50, 0, + 55, 988, 931, 80, 79, 1460, 0, 0, 0, 62, + 1412, 70, 72, 1413, 0, 933, 934, 0, 964, 968, + 0, 0, 0, 1529, 1528, 1528, 105, 0, 0, 106, + 126, 127, 128, 0, 0, 112, 113, 1515, 1516, 132, + 0, 0, 182, 183, 0, 44, 430, 0, 178, 950, + 0, 423, 362, 0, 1429, 0, 0, 0, 0, 0, + 928, 0, 1523, 159, 160, 167, 168, 169, 403, 403, + 403, 576, 0, 0, 170, 170, 534, 535, 536, 0, + 0, -2, 428, 0, 514, 0, 0, 417, 417, 421, + 419, 420, 0, 0, 0, 0, 0, 0, 0, 0, + 553, 0, 554, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 699, 0, 404, 0, 574, 575, 466, 0, + 0, 0, 0, 0, 0, 0, 0, 1531, 1532, 0, + 551, 552, 0, 0, 0, 403, 403, 0, 0, 0, + 0, 403, 403, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 158, 1451, 0, 0, 0, 0, 0, -2, 0, + 743, 0, 0, 0, 1524, 1524, 0, 750, 0, 752, + 1442, 754, 757, 758, 761, 0, 0, 764, 0, 827, + 827, 825, 826, 766, 767, 768, 769, 830, 0, 0, + 412, 413, 414, 827, 830, 0, 830, 830, 830, 830, + 827, 827, 827, 830, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2118, 833, 830, 830, 0, 830, 797, + 0, 802, 0, 803, 804, 805, 808, 809, 812, 2119, + 2120, 1541, 1542, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, @@ -8413,243 +8451,244 @@ var yyDef = [...]int{ 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, - 1696, 1697, 1698, 1699, 1700, 1701, 1702, 2116, 2116, 815, - 819, 1513, 841, 847, 849, 850, 0, 0, 860, 863, - 882, 52, 1800, 870, 52, 872, 873, 874, 901, 902, - 907, 0, 0, 0, 0, 913, 914, 915, 916, 0, - 0, 919, 920, 921, 0, 0, 0, 0, 0, 1050, - 0, 0, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1069, 1070, 0, 0, - 0, 1092, 1093, 1094, 1095, 1098, 0, 1110, 0, 1112, - 1383, -2, 0, 0, 0, 1103, 1104, 0, 0, 0, - 0, 0, 0, 0, 1375, 0, 0, 1191, 0, 1192, - 1194, 1195, 0, 1196, 937, 937, 937, 937, 937, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 937, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1533, 146, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 947, - 0, 0, 947, 947, 0, 0, 225, 226, 227, 228, - 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 244, 245, 246, 247, 248, - 249, 302, 250, 251, 252, 1177, 0, 0, 0, 49, - 890, 891, 0, 1013, 1533, 0, 0, 0, 943, 0, - 60, 69, 71, 1410, 64, 1410, 0, 0, 0, -2, - -2, 950, 956, 957, 958, 959, 960, 57, 2114, 58, - 0, 77, 0, 51, 0, 0, 0, 0, 376, 1462, - 0, 0, 1403, 1404, 1407, 0, 964, 1894, 968, 0, - 970, 971, 0, 0, 103, 0, 1029, 0, 0, 0, - 114, 0, 116, 117, 0, 0, 0, 387, 1516, 1517, - 1518, -2, 410, 0, 387, 371, 310, 311, 312, 362, - 314, 362, 362, 362, 362, 376, 376, 376, 376, 345, - 346, 347, 348, 349, 0, 0, 331, 362, 362, 362, - 362, 352, 353, 354, 355, 356, 357, 358, 359, 315, - 316, 317, 318, 319, 320, 321, 322, 323, 364, 364, - 364, 364, 364, 368, 368, 0, 45, 0, 954, 955, - 391, 0, 1407, 0, 0, 1450, 1525, 1535, 0, 0, - 0, 1525, 137, 0, 0, 0, 577, 648, 528, 565, - 578, 0, 531, 532, -2, 0, 0, 513, 0, 515, - 0, 411, 0, -2, 0, 421, 0, 417, 421, 418, - 421, 409, 422, 555, 556, 557, 0, 559, 560, 678, - 999, 0, 0, 0, 0, 0, 684, 685, 686, 0, - 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, - 566, 567, 568, 569, 570, 571, 572, 573, 0, 0, - 0, 0, 515, 0, 562, 0, 0, 467, 468, 469, - 0, 0, 472, 473, 474, 475, 0, 0, 478, 479, - 480, 1016, 1017, 481, 482, 507, 508, 509, 483, 484, - 485, 486, 487, 488, 489, 501, 502, 503, 504, 505, - 506, 490, 491, 492, 493, 494, 495, 498, 0, 152, - 1432, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1523, 0, 0, 0, 0, 946, 1031, - 1546, 1547, 752, 0, 1442, 0, 1445, 1446, 1447, 1448, - 1449, 830, 831, 0, 415, 416, 829, 829, 769, 816, - 0, 829, 773, 817, 774, 776, 775, 777, 790, 791, - 829, 780, 827, 828, 781, 782, 783, 784, 785, 786, - 787, 812, 792, 793, 794, 799, 795, 797, 798, 833, - 0, 837, 838, 813, 814, 0, 0, 853, 854, 0, - 861, 885, 883, 884, 886, 878, 879, 880, 881, 0, - 887, 0, 0, 904, 99, 909, 910, 911, 912, 925, - 918, 1179, 1047, 1048, 1049, 0, 1051, 1054, 0, 1163, - 1165, 1056, 1058, 1174, 1175, 1176, 0, 0, 0, 0, - 0, 1062, 1066, 1071, 1072, 1073, 1074, 1075, 1076, 1077, - 1078, 1079, 1080, 1081, 1082, 1088, 1351, 1352, 1353, 1107, - 303, 304, 0, 1108, 0, 0, 0, 0, 0, 0, - 0, 1178, 1109, 0, 961, 0, 0, 1381, 1378, 0, - 0, 0, 1336, 1338, 0, 0, 0, 0, 938, 939, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1314, 1315, + 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 2118, 2118, + 816, 820, 1514, 842, 848, 850, 851, 0, 0, 861, + 864, 883, 52, 1801, 871, 52, 873, 874, 875, 902, + 903, 908, 0, 0, 0, 0, 914, 915, 916, 917, + 0, 0, 920, 921, 922, 0, 0, 0, 0, 0, + 1051, 0, 0, 1168, 1169, 1170, 1171, 1172, 1173, 1174, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1070, 1071, 0, + 0, 0, 1093, 1094, 1095, 1096, 1099, 0, 1111, 0, + 1113, 1384, -2, 0, 0, 0, 1104, 1105, 0, 0, + 0, 0, 0, 0, 0, 1376, 0, 0, 1192, 0, + 1193, 1195, 1196, 0, 1197, 938, 938, 938, 938, 938, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 938, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1534, 146, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 948, 0, 0, 948, 948, 0, 0, 225, 226, 227, + 228, 229, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 244, 245, 246, 247, + 248, 249, 302, 250, 251, 252, 1178, 0, 0, 0, + 49, 891, 892, 0, 1014, 1534, 0, 0, 0, 944, + 0, 60, 69, 71, 1411, 64, 1411, 0, 0, 0, + -2, -2, 951, 957, 958, 959, 960, 961, 57, 2116, + 58, 0, 77, 0, 51, 0, 0, 0, 0, 376, + 1463, 0, 0, 1404, 1405, 1408, 0, 965, 1895, 969, + 0, 971, 972, 0, 0, 103, 0, 1030, 0, 0, + 0, 114, 0, 116, 117, 0, 0, 0, 387, 1517, + 1518, 1519, -2, 410, 0, 387, 371, 310, 311, 312, + 362, 314, 362, 362, 362, 362, 376, 376, 376, 376, + 345, 346, 347, 348, 349, 0, 0, 331, 362, 362, + 362, 362, 352, 353, 354, 355, 356, 357, 358, 359, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 364, + 364, 364, 364, 364, 368, 368, 0, 45, 0, 955, + 956, 391, 0, 1408, 0, 0, 1451, 1526, 1536, 0, + 0, 0, 1526, 137, 0, 0, 0, 577, 649, 528, + 565, 578, 0, 531, 532, -2, 0, 0, 513, 0, + 515, 0, 411, 0, -2, 0, 421, 0, 417, 421, + 418, 421, 409, 422, 555, 556, 557, 0, 559, 560, + 679, 1000, 0, 0, 0, 0, 0, 685, 686, 687, + 0, 689, 690, 691, 692, 693, 694, 695, 696, 697, + 698, 566, 567, 568, 569, 570, 571, 572, 573, 0, + 0, 0, 0, 515, 0, 562, 0, 0, 467, 468, + 469, 0, 0, 472, 473, 474, 475, 0, 0, 478, + 479, 480, 1017, 1018, 481, 482, 507, 508, 509, 483, + 484, 485, 486, 487, 488, 489, 501, 502, 503, 504, + 505, 506, 490, 491, 492, 493, 494, 495, 498, 0, + 152, 1433, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1524, 0, 0, 0, 0, 947, + 1032, 1547, 1548, 753, 0, 1443, 0, 1446, 1447, 1448, + 1449, 1450, 831, 832, 0, 415, 416, 830, 830, 770, + 817, 0, 830, 774, 818, 775, 777, 776, 778, 791, + 792, 830, 781, 828, 829, 782, 783, 784, 785, 786, + 787, 788, 813, 793, 794, 795, 800, 796, 798, 799, + 834, 0, 838, 839, 814, 815, 0, 0, 854, 855, + 0, 862, 886, 884, 885, 887, 879, 880, 881, 882, + 0, 888, 0, 0, 905, 99, 910, 911, 912, 913, + 926, 919, 1180, 1048, 1049, 1050, 0, 1052, 1055, 0, + 1164, 1166, 1057, 1059, 1175, 1176, 1177, 0, 0, 0, + 0, 0, 1063, 1067, 1072, 1073, 1074, 1075, 1076, 1077, + 1078, 1079, 1080, 1081, 1082, 1083, 1089, 1352, 1353, 1354, + 1108, 303, 304, 0, 1109, 0, 0, 0, 0, 0, + 0, 0, 1179, 1110, 0, 962, 0, 0, 1382, 1379, + 0, 0, 0, 1337, 1339, 0, 0, 0, 0, 939, + 940, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, - 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1354, - 0, 0, 0, 0, 0, 1374, 0, 1114, 1115, 1116, - 0, 0, 0, 0, 0, 0, 1234, 0, 0, 0, - 0, 1534, 0, 147, 148, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1278, 1279, 1280, 1281, 42, 0, 0, 0, 948, - 1385, 0, -2, -2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1303, 0, 0, - 0, 0, 0, 0, 1506, 0, 0, 893, 894, 896, - 0, 1033, 0, 1014, 0, 0, 899, 900, 0, 942, - 0, 945, 63, 65, 0, 972, 951, 59, 54, 0, - 0, 991, 1460, 376, 1482, 0, 385, 385, 382, 1413, - 1414, 0, 1406, 1408, 1409, 82, 969, 965, 0, 1045, - 0, 0, 1028, 0, 975, 977, 978, 979, 1011, 0, - 982, 983, 0, 0, 0, 0, 0, 101, 1030, 107, - 0, 115, 0, 0, 120, 121, 108, 109, 110, 111, - 0, 637, -2, 462, 184, 186, 187, 188, 179, -2, - 374, 372, 373, 313, 376, 376, 339, 340, 341, 342, - 343, 344, 0, 0, 332, 333, 334, 335, 324, 0, - 325, 326, 327, 366, 0, 328, 329, 0, 330, 429, - 0, 1415, 392, 393, 395, 403, 0, 398, 399, 0, - 403, 403, 0, 424, 425, 0, 1407, 1432, 0, 0, - 0, 1536, 1535, 1535, 1535, 0, 172, 173, 174, 175, - 176, 177, 673, 0, 0, 649, 671, 672, 170, 0, - 0, 180, 517, 516, 0, 705, 0, 427, 0, 0, - 421, 421, 406, 407, 558, 0, 0, 680, 681, 682, - 683, 0, 0, 0, 544, 456, 0, 545, 546, 515, - 517, 0, 0, 387, 470, 471, 476, 477, 496, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 591, 592, 593, 596, 598, 599, 600, 519, 606, 595, - 597, 601, 602, 603, 519, 607, 608, 610, 611, 612, - 519, 618, 609, 613, 614, 615, 519, 619, 620, 621, - 622, 625, 627, 628, 629, 519, 635, 624, 626, 630, - 631, 632, 519, 636, 1429, 1430, 1431, 0, 0, 743, - 0, 0, 453, 97, 1524, 748, 1443, 754, 1444, 826, - 779, 818, 826, 771, 778, 805, 851, 852, 857, 865, - 866, 867, 868, 869, 908, 0, 0, 0, 0, 917, - 0, 0, 1055, 1164, 1166, 1059, 0, 1063, 1067, 0, - 0, 0, 1113, 1111, 1385, 0, 0, 0, 1160, 0, - 0, 1182, 1183, 0, 0, 0, 1379, 0, 0, 1189, - 0, 1339, 1340, 1197, 0, 0, 0, 0, 0, 1203, - 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1401, - 0, 0, 0, 0, 0, 1218, 1219, 1220, 1221, 1222, - 0, 1224, 0, 1225, 0, 0, 0, 0, 1232, 1233, - 1235, 0, 0, 1238, 1239, 0, 0, 1240, 0, 0, - 0, 1244, 0, 0, 0, 0, 1253, 1254, 1255, 1256, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1267, 1268, 0, 1142, 0, 0, 1142, 0, 1180, 947, - 0, 1341, 1342, 1343, 1344, 1345, 0, 0, 0, 0, - 0, 0, 1301, 1302, 1304, 0, 0, 1307, 0, 1309, - 0, 1507, 892, 895, 897, 985, 1034, 1035, 0, 0, - 0, 0, 1015, 1532, 940, 941, 944, 993, 0, 1389, - 0, 0, 972, 1045, 973, 0, 952, 56, 988, 0, - 1464, 1463, 1476, 1489, 385, 385, 379, 380, 386, 381, - 383, 384, 1405, 0, 1410, 0, 1500, 0, 0, 1492, - 0, 0, 0, 0, 0, 0, 0, 0, 1018, 0, - 0, 1021, 0, 0, 0, 0, 1012, 983, 0, 984, - 0, -2, 0, 0, 95, 96, 0, 0, 0, 118, - 119, 0, 0, 125, 388, 389, 161, 170, 464, 185, - 437, 0, 0, 309, 375, 336, 337, 338, 0, 360, - 0, 0, 0, 0, 458, 133, 1419, 1418, 403, 403, - 394, 0, 397, 0, 0, 0, 1537, 363, 426, 0, - 151, 0, 0, 0, 0, 0, 157, 643, 0, 0, - 650, 0, 0, 0, 526, 0, 537, 538, 0, 677, - -2, 739, 391, 0, 405, 408, 1000, 0, 0, 539, - 0, 542, 543, 457, 517, 548, 549, 563, 550, 499, - 500, 497, 0, 0, 1451, 1452, 1457, 1455, 1456, 138, - 584, 586, 585, 589, 0, 0, 0, 521, 0, 521, - 521, 521, 0, 521, 521, 582, 0, 453, 1415, 0, - 747, 454, 455, 829, 829, 903, 100, 0, 906, 0, - 0, 0, 0, 1060, 1064, 1346, 1372, 362, 362, 1359, - 362, 368, 1362, 362, 1364, 362, 1367, 362, 1370, 1371, - 0, 0, 0, 962, 0, 0, 1188, 1382, 0, 0, - 1198, 1199, 1200, 1201, 1202, 1376, 0, 0, 0, 1217, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 149, 150, 0, 0, 0, 0, 0, 0, 1312, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1137, - 1141, 0, 1143, 1144, 0, 0, 1270, 0, 0, 1282, - 0, 1386, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1036, 1041, 1041, 1041, 0, 0, 0, 1519, - 1520, 1390, 1391, 1045, 1392, 974, 953, 992, 1482, 0, - 1475, 0, -2, 1484, 0, 0, 0, 1490, 377, 378, - 966, 83, 1046, 86, 0, 1500, 1509, 0, 1491, 1502, - 1504, 0, 0, 0, 1496, 0, 1045, 976, 1007, 1009, - 0, 1004, 1019, 1020, 1022, 0, 1024, 0, 1026, 1027, - 987, 981, 0, 103, 0, 1045, 1045, 102, 0, 1032, - 122, 123, 124, 463, 189, 194, 0, 0, 0, 199, - 0, 201, 0, 0, 0, 206, 207, 403, 403, 438, - 0, 306, 308, 0, 0, 192, 376, 0, 376, 0, - 367, 369, 0, 439, 459, 1416, 1417, 0, 0, 396, - 400, 401, 402, 0, 1526, 153, 0, 0, 0, 646, - 0, 674, 0, 0, 0, 0, 0, 0, 181, 518, - 706, 707, 708, 709, 710, 711, 712, 713, 714, 0, - 403, 0, 0, 0, 403, 403, 403, 0, 731, 390, - 0, 0, 702, 699, 540, 0, 230, 231, 233, 0, - 0, 0, 0, 0, 547, 987, 1433, 1434, 1435, 0, - 1454, 1458, 141, 0, 0, 0, 0, 594, 604, 0, - 520, 605, 616, 617, 623, 633, 634, 744, 745, 746, - 98, 764, 770, 905, 926, 1053, 1061, 1065, 0, 0, - 0, 0, 1373, 1357, 376, 1360, 1361, 1363, 1365, 1366, - 1368, 1369, 1101, 1102, 1106, 0, 1185, 0, 1187, 1380, - 0, 1410, 0, 0, 0, 1216, 0, 0, 0, 1227, - 1226, 1228, 0, 1230, 1231, 1236, 1237, 1241, 0, 1243, - 1245, 1246, 0, 0, 0, 1257, 1258, 1259, 1260, 1261, - 1262, 1263, 1264, 1265, 1266, 0, 1135, 1138, 1269, 1145, - 1146, 1151, 1272, 0, 0, 1181, 1284, 0, 1289, 0, - 0, 1295, 0, 1299, 0, 1305, 1306, 1308, 1310, 0, - 0, 0, 0, 0, 1013, 994, 67, 1392, 1394, 0, - 1469, 1467, 1467, 1477, 1478, 0, 0, 1485, 0, 0, - 0, 0, 87, 0, 0, 0, 1505, 0, 0, 0, - 0, 104, 1401, 1001, 1008, 0, 0, 1002, 0, 1003, - 1023, 1025, 980, 0, 1045, 1045, 93, 94, 0, 195, - 0, 197, 223, 224, 0, 200, 202, 203, 204, 210, - 211, 212, 205, 0, 0, 305, 307, 0, 0, 350, - 361, 351, 0, 0, 1420, 1421, 1422, 1423, 1424, 1425, - 1426, 1427, 987, 154, 155, 156, 638, 0, 648, 0, - 989, 0, 641, 0, 529, 0, 0, 0, 403, 403, - 403, 0, 0, 0, 0, 716, 0, 0, 679, 0, - 687, 0, 0, 0, 234, 235, 0, 1453, 583, 0, - 139, 140, 0, 0, 588, 522, 523, 1099, 0, 0, - 0, 1100, 1358, 0, 0, 0, 0, 1377, 0, 0, - 0, 0, 1223, 0, 0, 0, 1249, 0, 0, 0, - 668, 669, 0, 1313, 1140, 1401, 0, 1142, 1152, 1153, - 0, 1142, 1283, 0, 0, 0, 0, 0, 0, 0, - 1042, 0, 0, 0, 0, 1033, 1394, 1399, 0, 0, - 1472, 0, 1465, 1468, 1466, 1479, 0, 0, 1486, 0, - 1488, 0, 1510, 1511, 1503, 0, 1495, 1498, 1494, 1497, - 1410, 1005, 0, 1010, 0, 1401, 92, 0, 198, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, - 209, 0, 0, 365, 370, 0, 0, 0, 639, 0, - 990, 651, 642, 0, 729, 0, 733, 0, 0, 0, - 736, 737, 738, 715, 0, 719, 431, 703, 700, 701, - 541, 0, 142, 143, 0, 0, 0, 1347, 0, 1350, - 1184, 1186, 0, 1213, 1214, 1215, 1355, 1356, 1229, 1242, - 1247, 0, 1250, 0, 0, 1251, 0, 670, 1131, 0, - 0, 1149, 1150, 0, 1285, 0, 1290, 1291, 0, 1296, - 0, 1300, 1311, 0, 1038, 995, 996, 1043, 1044, 0, - 0, 986, 1399, 85, 1400, 1397, 0, 1395, 1393, 1461, - 0, 1470, 1471, 1480, 1481, 1487, 0, 1493, 0, 90, - 0, 0, 0, 1410, 196, 0, 215, 0, 647, 0, - 650, 640, 727, 728, 0, 740, 732, 734, 735, 717, - -2, 1436, 0, 0, 0, 590, 1348, 0, 0, 1252, - 0, 666, 667, 1139, 1132, 0, 1117, 1118, 1136, 1271, - 1273, 0, 0, 0, 0, 1037, 1039, 1040, 84, 0, - 1396, 1157, 0, 1473, 1474, 1501, 1499, 1006, 1013, 0, - 91, 444, 437, 1436, 0, 0, 0, 720, 721, 722, - 723, 724, 725, 726, 580, 1438, 144, 145, 510, 511, - 512, 138, 0, 1190, 1248, 1133, 0, 0, 0, 0, - 1129, 1130, 0, 1286, 0, 1292, 0, 1297, 0, 997, - 998, 1398, 0, 0, 652, 0, 654, 0, -2, 432, - 445, 0, 190, 216, 217, 0, 0, 220, 221, 222, - 213, 214, 134, 0, 0, 741, 0, 1439, 1440, 141, - 0, 0, 1124, 1125, 1126, 1127, 1128, 0, 0, 0, - 1158, 1137, 653, 0, 0, 387, 0, 663, 433, 434, - 0, 440, 441, 442, 443, 218, 219, 675, 0, 0, - 587, 1349, 0, 1287, 0, 1293, 0, 1298, 0, 655, - 656, 664, 0, 435, 0, 436, 0, 0, 0, 644, - 0, 675, 1437, 1134, 0, 0, 1156, 0, 665, 661, - 446, 448, 449, 0, 0, 447, 676, 645, 1288, 1294, - 0, 450, 451, 452, 657, 658, 659, 660, + 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, + 1355, 0, 0, 0, 0, 0, 1375, 0, 1115, 1116, + 1117, 0, 0, 0, 0, 0, 0, 1235, 0, 0, + 0, 0, 1535, 0, 147, 148, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1279, 1280, 1281, 1282, 42, 0, 0, 0, + 949, 1386, 0, -2, -2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1304, 0, + 0, 0, 0, 0, 0, 1507, 0, 0, 894, 895, + 897, 0, 1034, 0, 1015, 0, 0, 900, 901, 0, + 943, 0, 946, 63, 65, 0, 973, 952, 59, 54, + 0, 0, 992, 1461, 376, 1483, 0, 385, 385, 382, + 1414, 1415, 0, 1407, 1409, 1410, 82, 970, 966, 0, + 1046, 0, 0, 1029, 0, 976, 978, 979, 980, 1012, + 0, 983, 984, 0, 0, 0, 0, 0, 101, 1031, + 107, 0, 115, 0, 0, 120, 121, 108, 109, 110, + 111, 0, 638, -2, 462, 184, 186, 187, 188, 179, + -2, 374, 372, 373, 313, 376, 376, 339, 340, 341, + 342, 343, 344, 0, 0, 332, 333, 334, 335, 324, + 0, 325, 326, 327, 366, 0, 328, 329, 0, 330, + 429, 0, 1416, 392, 393, 395, 403, 0, 398, 399, + 0, 403, 403, 0, 424, 425, 0, 1408, 1433, 0, + 0, 0, 1537, 1536, 1536, 1536, 0, 172, 173, 174, + 175, 176, 177, 674, 0, 0, 650, 672, 673, 170, + 0, 0, 180, 517, 516, 0, 706, 0, 427, 0, + 0, 421, 421, 406, 407, 558, 0, 0, 681, 682, + 683, 684, 0, 0, 0, 544, 456, 0, 545, 546, + 515, 517, 0, 0, 387, 470, 471, 476, 477, 496, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 591, 592, 593, 596, 598, 599, 600, 519, 606, + 595, 597, 601, 602, 603, 519, 607, 608, 610, 611, + 612, 519, 618, 0, 609, 613, 614, 615, 519, 619, + 621, 622, 623, 626, 628, 629, 630, 519, 636, 625, + 627, 631, 632, 633, 519, 637, 1430, 1431, 1432, 0, + 0, 744, 0, 0, 453, 97, 1525, 749, 1444, 755, + 1445, 827, 780, 819, 827, 772, 779, 806, 852, 853, + 858, 866, 867, 868, 869, 870, 909, 0, 0, 0, + 0, 918, 0, 0, 1056, 1165, 1167, 1060, 0, 1064, + 1068, 0, 0, 0, 1114, 1112, 1386, 0, 0, 0, + 1161, 0, 0, 1183, 1184, 0, 0, 0, 1380, 0, + 0, 1190, 0, 1340, 1341, 1198, 0, 0, 0, 0, + 0, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, + 1213, 1402, 0, 0, 0, 0, 0, 1219, 1220, 1221, + 1222, 1223, 0, 1225, 0, 1226, 0, 0, 0, 0, + 1233, 1234, 1236, 0, 0, 1239, 1240, 0, 0, 1241, + 0, 0, 0, 1245, 0, 0, 0, 0, 1254, 1255, + 1256, 1257, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1268, 1269, 0, 1143, 0, 0, 1143, 0, + 1181, 948, 0, 1342, 1343, 1344, 1345, 1346, 0, 0, + 0, 0, 0, 0, 1302, 1303, 1305, 0, 0, 1308, + 0, 1310, 0, 1508, 893, 896, 898, 986, 1035, 1036, + 0, 0, 0, 0, 1016, 1533, 941, 942, 945, 994, + 0, 1390, 0, 0, 973, 1046, 974, 0, 953, 56, + 989, 0, 1465, 1464, 1477, 1490, 385, 385, 379, 380, + 386, 381, 383, 384, 1406, 0, 1411, 0, 1501, 0, + 0, 1493, 0, 0, 0, 0, 0, 0, 0, 0, + 1019, 0, 0, 1022, 0, 0, 0, 0, 1013, 984, + 0, 985, 0, -2, 0, 0, 95, 96, 0, 0, + 0, 118, 119, 0, 0, 125, 388, 389, 161, 170, + 464, 185, 437, 0, 0, 309, 375, 336, 337, 338, + 0, 360, 0, 0, 0, 0, 458, 133, 1420, 1419, + 403, 403, 394, 0, 397, 0, 0, 0, 1538, 363, + 426, 0, 151, 0, 0, 0, 0, 0, 157, 644, + 0, 0, 651, 0, 0, 0, 526, 0, 537, 538, + 0, 678, -2, 740, 391, 0, 405, 408, 1001, 0, + 0, 539, 0, 542, 543, 457, 517, 548, 549, 563, + 550, 499, 500, 497, 0, 0, 1452, 1453, 1458, 1456, + 1457, 138, 584, 586, 585, 589, 0, 0, 0, 521, + 0, 521, 521, 0, 521, 0, 521, 521, 582, 0, + 453, 1416, 0, 748, 454, 455, 830, 830, 904, 100, + 0, 907, 0, 0, 0, 0, 1061, 1065, 1347, 1373, + 362, 362, 1360, 362, 368, 1363, 362, 1365, 362, 1368, + 362, 1371, 1372, 0, 0, 0, 963, 0, 0, 1189, + 1383, 0, 0, 1199, 1200, 1201, 1202, 1203, 1377, 0, + 0, 0, 1218, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 149, 150, 0, 0, 0, 0, 0, + 0, 1313, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1138, 1142, 0, 1144, 1145, 0, 0, 1271, + 0, 0, 1283, 0, 1387, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1037, 1042, 1042, 1042, 0, + 0, 0, 1520, 1521, 1391, 1392, 1046, 1393, 975, 954, + 993, 1483, 0, 1476, 0, -2, 1485, 0, 0, 0, + 1491, 377, 378, 967, 83, 1047, 86, 0, 1501, 1510, + 0, 1492, 1503, 1505, 0, 0, 0, 1497, 0, 1046, + 977, 1008, 1010, 0, 1005, 1020, 1021, 1023, 0, 1025, + 0, 1027, 1028, 988, 982, 0, 103, 0, 1046, 1046, + 102, 0, 1033, 122, 123, 124, 463, 189, 194, 0, + 0, 0, 199, 0, 201, 0, 0, 0, 206, 207, + 403, 403, 438, 0, 306, 308, 0, 0, 192, 376, + 0, 376, 0, 367, 369, 0, 439, 459, 1417, 1418, + 0, 0, 396, 400, 401, 402, 0, 1527, 153, 0, + 0, 0, 647, 0, 675, 0, 0, 0, 0, 0, + 0, 181, 518, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 0, 403, 0, 0, 0, 403, 403, 403, + 0, 732, 390, 0, 0, 703, 700, 540, 0, 230, + 231, 233, 0, 0, 0, 0, 0, 547, 988, 1434, + 1435, 1436, 0, 1455, 1459, 141, 0, 0, 0, 0, + 594, 604, 0, 520, 605, 616, 620, 617, 624, 634, + 635, 745, 746, 747, 98, 765, 771, 906, 927, 1054, + 1062, 1066, 0, 0, 0, 0, 1374, 1358, 376, 1361, + 1362, 1364, 1366, 1367, 1369, 1370, 1102, 1103, 1107, 0, + 1186, 0, 1188, 1381, 0, 1411, 0, 0, 0, 1217, + 0, 0, 0, 1228, 1227, 1229, 0, 1231, 1232, 1237, + 1238, 1242, 0, 1244, 1246, 1247, 0, 0, 0, 1258, + 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 0, + 1136, 1139, 1270, 1146, 1147, 1152, 1273, 0, 0, 1182, + 1285, 0, 1290, 0, 0, 1296, 0, 1300, 0, 1306, + 1307, 1309, 1311, 0, 0, 0, 0, 0, 1014, 995, + 67, 1393, 1395, 0, 1470, 1468, 1468, 1478, 1479, 0, + 0, 1486, 0, 0, 0, 0, 87, 0, 0, 0, + 1506, 0, 0, 0, 0, 104, 1402, 1002, 1009, 0, + 0, 1003, 0, 1004, 1024, 1026, 981, 0, 1046, 1046, + 93, 94, 0, 195, 0, 197, 223, 224, 0, 200, + 202, 203, 204, 210, 211, 212, 205, 0, 0, 305, + 307, 0, 0, 350, 361, 351, 0, 0, 1421, 1422, + 1423, 1424, 1425, 1426, 1427, 1428, 988, 154, 155, 156, + 639, 0, 649, 0, 990, 0, 642, 0, 529, 0, + 0, 0, 403, 403, 403, 0, 0, 0, 0, 717, + 0, 0, 680, 0, 688, 0, 0, 0, 234, 235, + 0, 1454, 583, 0, 139, 140, 0, 0, 588, 522, + 523, 1100, 0, 0, 0, 1101, 1359, 0, 0, 0, + 0, 1378, 0, 0, 0, 0, 1224, 0, 0, 0, + 1250, 0, 0, 0, 669, 670, 0, 1314, 1141, 1402, + 0, 1143, 1153, 1154, 0, 1143, 1284, 0, 0, 0, + 0, 0, 0, 0, 1043, 0, 0, 0, 0, 1034, + 1395, 1400, 0, 0, 1473, 0, 1466, 1469, 1467, 1480, + 0, 0, 1487, 0, 1489, 0, 1511, 1512, 1504, 0, + 1496, 1499, 1495, 1498, 1411, 1006, 0, 1011, 0, 1402, + 92, 0, 198, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 208, 209, 0, 0, 365, 370, 0, + 0, 0, 640, 0, 991, 652, 643, 0, 730, 0, + 734, 0, 0, 0, 737, 738, 739, 716, 0, 720, + 431, 704, 701, 702, 541, 0, 142, 143, 0, 0, + 0, 1348, 0, 1351, 1185, 1187, 0, 1214, 1215, 1216, + 1356, 1357, 1230, 1243, 1248, 0, 1251, 0, 0, 1252, + 0, 671, 1132, 0, 0, 1150, 1151, 0, 1286, 0, + 1291, 1292, 0, 1297, 0, 1301, 1312, 0, 1039, 996, + 997, 1044, 1045, 0, 0, 987, 1400, 85, 1401, 1398, + 0, 1396, 1394, 1462, 0, 1471, 1472, 1481, 1482, 1488, + 0, 1494, 0, 90, 0, 0, 0, 1411, 196, 0, + 215, 0, 648, 0, 651, 641, 728, 729, 0, 741, + 733, 735, 736, 718, -2, 1437, 0, 0, 0, 590, + 1349, 0, 0, 1253, 0, 667, 668, 1140, 1133, 0, + 1118, 1119, 1137, 1272, 1274, 0, 0, 0, 0, 1038, + 1040, 1041, 84, 0, 1397, 1158, 0, 1474, 1475, 1502, + 1500, 1007, 1014, 0, 91, 444, 437, 1437, 0, 0, + 0, 721, 722, 723, 724, 725, 726, 727, 580, 1439, + 144, 145, 510, 511, 512, 138, 0, 1191, 1249, 1134, + 0, 0, 0, 0, 1130, 1131, 0, 1287, 0, 1293, + 0, 1298, 0, 998, 999, 1399, 0, 0, 653, 0, + 655, 0, -2, 432, 445, 0, 190, 216, 217, 0, + 0, 220, 221, 222, 213, 214, 134, 0, 0, 742, + 0, 1440, 1441, 141, 0, 0, 1125, 1126, 1127, 1128, + 1129, 0, 0, 0, 1159, 1138, 654, 0, 0, 387, + 0, 664, 433, 434, 0, 440, 441, 442, 443, 218, + 219, 676, 0, 0, 587, 1350, 0, 1288, 0, 1294, + 0, 1299, 0, 656, 657, 665, 0, 435, 0, 436, + 0, 0, 0, 645, 0, 676, 1438, 1135, 0, 0, + 1157, 0, 666, 662, 446, 448, 449, 0, 0, 447, + 677, 646, 1289, 1295, 0, 450, 451, 452, 658, 659, + 660, 661, } var yyTok1 = [...]int{ @@ -8658,7 +8697,7 @@ var yyTok1 = [...]int{ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 144, 3, 3, 3, 171, 163, 3, 87, 89, 168, 166, 88, 167, 221, 169, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 681, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 682, 152, 151, 153, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -8779,7 +8818,7 @@ var yyTok3 = [...]int{ 57990, 665, 57991, 666, 57992, 667, 57993, 668, 57994, 669, 57995, 670, 57996, 671, 57997, 672, 57998, 673, 57999, 674, 58000, 675, 58001, 676, 58002, 677, 58003, 678, 58004, 679, - 58005, 680, 0, + 58005, 680, 58006, 681, 0, } var yyErrorMessages = [...]struct { @@ -13535,9 +13574,22 @@ yydefault: } yyVAL.union = yyLOCAL case 620: + yyDollar = yyS[yypt-7 : yypt+1] + var yyLOCAL Statement +//line sql.y:3508 + { + yyLOCAL = &AlterDMLJob{ + Type: SetRunningTimePeriodType, + UUID: string(yyDollar[4].str), + TimePeriodStart: string(yyDollar[6].str), + TimePeriodEnd: string(yyDollar[7].str), + } + } + yyVAL.union = yyLOCAL + case 621: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3511 +//line sql.y:3520 { yyLOCAL = &AlterMigration{ Type: RetryMigrationType, @@ -13545,10 +13597,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 621: + case 622: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3518 +//line sql.y:3527 { yyLOCAL = &AlterMigration{ Type: CleanupMigrationType, @@ -13556,10 +13608,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 622: + case 623: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3525 +//line sql.y:3534 { yyLOCAL = &AlterMigration{ Type: LaunchMigrationType, @@ -13567,10 +13619,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 623: + case 624: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3532 +//line sql.y:3541 { yyLOCAL = &AlterMigration{ Type: LaunchMigrationType, @@ -13579,20 +13631,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 624: + case 625: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3540 +//line sql.y:3549 { yyLOCAL = &AlterMigration{ Type: LaunchAllMigrationType, } } yyVAL.union = yyLOCAL - case 625: + case 626: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3546 +//line sql.y:3555 { yyLOCAL = &AlterMigration{ Type: CompleteMigrationType, @@ -13600,20 +13652,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 626: + case 627: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3553 +//line sql.y:3562 { yyLOCAL = &AlterMigration{ Type: CompleteAllMigrationType, } } yyVAL.union = yyLOCAL - case 627: + case 628: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3559 +//line sql.y:3568 { yyLOCAL = &AlterMigration{ Type: CancelMigrationType, @@ -13621,10 +13673,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 628: + case 629: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3566 +//line sql.y:3575 { yyLOCAL = &AlterMigration{ Type: PauseMigrationType, @@ -13632,10 +13684,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 629: + case 630: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3573 +//line sql.y:3582 { yyLOCAL = &AlterMigration{ Type: ResumeMigrationType, @@ -13643,40 +13695,40 @@ yydefault: } } yyVAL.union = yyLOCAL - case 630: + case 631: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3580 +//line sql.y:3589 { yyLOCAL = &AlterMigration{ Type: CancelAllMigrationType, } } yyVAL.union = yyLOCAL - case 631: + case 632: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3586 +//line sql.y:3595 { yyLOCAL = &AlterMigration{ Type: PauseAllMigrationType, } } yyVAL.union = yyLOCAL - case 632: + case 633: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3592 +//line sql.y:3601 { yyLOCAL = &AlterMigration{ Type: ResumeAllMigrationType, } } yyVAL.union = yyLOCAL - case 633: + case 634: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3598 +//line sql.y:3607 { yyLOCAL = &AlterMigration{ Type: ThrottleMigrationType, @@ -13686,10 +13738,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 634: + case 635: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3607 +//line sql.y:3616 { yyLOCAL = &AlterMigration{ Type: ThrottleAllMigrationType, @@ -13698,10 +13750,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 635: + case 636: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3615 +//line sql.y:3624 { yyLOCAL = &AlterMigration{ Type: UnthrottleMigrationType, @@ -13709,28 +13761,28 @@ yydefault: } } yyVAL.union = yyLOCAL - case 636: + case 637: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3622 +//line sql.y:3631 { yyLOCAL = &AlterMigration{ Type: UnthrottleAllMigrationType, } } yyVAL.union = yyLOCAL - case 637: + case 638: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3630 +//line sql.y:3639 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 638: + case 639: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3634 +//line sql.y:3643 { yyDollar[3].partitionOptionUnion().Partitions = yyDollar[4].integerUnion() yyDollar[3].partitionOptionUnion().SubPartition = yyDollar[5].subPartitionUnion() @@ -13738,10 +13790,10 @@ yydefault: yyLOCAL = yyDollar[3].partitionOptionUnion() } yyVAL.union = yyLOCAL - case 639: + case 640: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3643 +//line sql.y:3652 { yyLOCAL = &PartitionOption{ IsLinear: yyDollar[1].booleanUnion(), @@ -13750,10 +13802,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 640: + case 641: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3651 +//line sql.y:3660 { yyLOCAL = &PartitionOption{ IsLinear: yyDollar[1].booleanUnion(), @@ -13763,10 +13815,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 641: + case 642: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3660 +//line sql.y:3669 { yyLOCAL = &PartitionOption{ Type: yyDollar[1].partitionByTypeUnion(), @@ -13774,10 +13826,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 642: + case 643: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionOption -//line sql.y:3667 +//line sql.y:3676 { yyLOCAL = &PartitionOption{ Type: yyDollar[1].partitionByTypeUnion(), @@ -13785,18 +13837,18 @@ yydefault: } } yyVAL.union = yyLOCAL - case 643: + case 644: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *SubPartition -//line sql.y:3675 +//line sql.y:3684 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 644: + case 645: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *SubPartition -//line sql.y:3679 +//line sql.y:3688 { yyLOCAL = &SubPartition{ IsLinear: yyDollar[3].booleanUnion(), @@ -13806,10 +13858,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 645: + case 646: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL *SubPartition -//line sql.y:3688 +//line sql.y:3697 { yyLOCAL = &SubPartition{ IsLinear: yyDollar[3].booleanUnion(), @@ -13820,682 +13872,682 @@ yydefault: } } yyVAL.union = yyLOCAL - case 646: + case 647: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*PartitionDefinition -//line sql.y:3699 +//line sql.y:3708 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 647: + case 648: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*PartitionDefinition -//line sql.y:3703 +//line sql.y:3712 { yyLOCAL = yyDollar[2].partDefsUnion() } yyVAL.union = yyLOCAL - case 648: + case 649: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3708 +//line sql.y:3717 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 649: + case 650: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3712 +//line sql.y:3721 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 650: + case 651: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:3717 +//line sql.y:3726 { yyLOCAL = 0 } yyVAL.union = yyLOCAL - case 651: + case 652: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:3721 +//line sql.y:3730 { yyLOCAL = convertStringToInt(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 652: + case 653: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL TableExpr -//line sql.y:3727 +//line sql.y:3736 { yyLOCAL = &JSONTableExpr{Expr: yyDollar[3].exprUnion(), Filter: yyDollar[5].exprUnion(), Columns: yyDollar[6].jtColumnListUnion(), Alias: yyDollar[8].identifierCS} } yyVAL.union = yyLOCAL - case 653: + case 654: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL []*JtColumnDefinition -//line sql.y:3733 +//line sql.y:3742 { yyLOCAL = yyDollar[3].jtColumnListUnion() } yyVAL.union = yyLOCAL - case 654: + case 655: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*JtColumnDefinition -//line sql.y:3739 +//line sql.y:3748 { yyLOCAL = []*JtColumnDefinition{yyDollar[1].jtColumnDefinitionUnion()} } yyVAL.union = yyLOCAL - case 655: + case 656: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3743 +//line sql.y:3752 { yySLICE := (*[]*JtColumnDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].jtColumnDefinitionUnion()) } - case 656: + case 657: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3749 +//line sql.y:3758 { yyLOCAL = &JtColumnDefinition{JtOrdinal: &JtOrdinalColDef{Name: yyDollar[1].identifierCI}} } yyVAL.union = yyLOCAL - case 657: + case 658: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3753 +//line sql.y:3762 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 658: + case 659: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3759 +//line sql.y:3768 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 659: + case 660: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3765 +//line sql.y:3774 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 660: + case 661: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3771 +//line sql.y:3780 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 661: + case 662: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *JtColumnDefinition -//line sql.y:3777 +//line sql.y:3786 { jtNestedPath := &JtNestedPathColDef{Path: yyDollar[3].exprUnion(), Columns: yyDollar[4].jtColumnListUnion()} yyLOCAL = &JtColumnDefinition{JtNestedPath: jtNestedPath} } yyVAL.union = yyLOCAL - case 662: + case 663: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3783 +//line sql.y:3792 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 663: + case 664: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3787 +//line sql.y:3796 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 664: + case 665: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3791 +//line sql.y:3800 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 665: + case 666: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3795 +//line sql.y:3804 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 666: + case 667: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3801 +//line sql.y:3810 { yyLOCAL = yyDollar[1].jtOnResponseUnion() } yyVAL.union = yyLOCAL - case 667: + case 668: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3807 +//line sql.y:3816 { yyLOCAL = yyDollar[1].jtOnResponseUnion() } yyVAL.union = yyLOCAL - case 668: + case 669: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3813 +//line sql.y:3822 { yyLOCAL = &JtOnResponse{ResponseType: ErrorJSONType} } yyVAL.union = yyLOCAL - case 669: + case 670: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3817 +//line sql.y:3826 { yyLOCAL = &JtOnResponse{ResponseType: NullJSONType} } yyVAL.union = yyLOCAL - case 670: + case 671: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3821 +//line sql.y:3830 { yyLOCAL = &JtOnResponse{ResponseType: DefaultJSONType, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 671: + case 672: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL PartitionByType -//line sql.y:3827 +//line sql.y:3836 { yyLOCAL = RangeType } yyVAL.union = yyLOCAL - case 672: + case 673: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL PartitionByType -//line sql.y:3831 +//line sql.y:3840 { yyLOCAL = ListType } yyVAL.union = yyLOCAL - case 673: + case 674: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:3836 +//line sql.y:3845 { yyLOCAL = -1 } yyVAL.union = yyLOCAL - case 674: + case 675: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL int -//line sql.y:3840 +//line sql.y:3849 { yyLOCAL = convertStringToInt(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 675: + case 676: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:3845 +//line sql.y:3854 { yyLOCAL = -1 } yyVAL.union = yyLOCAL - case 676: + case 677: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL int -//line sql.y:3849 +//line sql.y:3858 { yyLOCAL = convertStringToInt(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 677: + case 678: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3855 +//line sql.y:3864 { yyLOCAL = &PartitionSpec{Action: AddAction, Definitions: []*PartitionDefinition{yyDollar[4].partDefUnion()}} } yyVAL.union = yyLOCAL - case 678: + case 679: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3859 +//line sql.y:3868 { yyLOCAL = &PartitionSpec{Action: DropAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 679: + case 680: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3863 +//line sql.y:3872 { yyLOCAL = &PartitionSpec{Action: ReorganizeAction, Names: yyDollar[3].partitionsUnion(), Definitions: yyDollar[6].partDefsUnion()} } yyVAL.union = yyLOCAL - case 680: + case 681: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3867 +//line sql.y:3876 { yyLOCAL = &PartitionSpec{Action: DiscardAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 681: + case 682: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3871 +//line sql.y:3880 { yyLOCAL = &PartitionSpec{Action: DiscardAction, IsAll: true} } yyVAL.union = yyLOCAL - case 682: + case 683: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3875 +//line sql.y:3884 { yyLOCAL = &PartitionSpec{Action: ImportAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 683: + case 684: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3879 +//line sql.y:3888 { yyLOCAL = &PartitionSpec{Action: ImportAction, IsAll: true} } yyVAL.union = yyLOCAL - case 684: + case 685: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3883 +//line sql.y:3892 { yyLOCAL = &PartitionSpec{Action: TruncateAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 685: + case 686: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3887 +//line sql.y:3896 { yyLOCAL = &PartitionSpec{Action: TruncateAction, IsAll: true} } yyVAL.union = yyLOCAL - case 686: + case 687: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3891 +//line sql.y:3900 { yyLOCAL = &PartitionSpec{Action: CoalesceAction, Number: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 687: + case 688: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3895 +//line sql.y:3904 { yyLOCAL = &PartitionSpec{Action: ExchangeAction, Names: Partitions{yyDollar[3].identifierCI}, TableName: yyDollar[6].tableName, WithoutValidation: yyDollar[7].booleanUnion()} } yyVAL.union = yyLOCAL - case 688: + case 689: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3899 +//line sql.y:3908 { yyLOCAL = &PartitionSpec{Action: AnalyzeAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 689: + case 690: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3903 +//line sql.y:3912 { yyLOCAL = &PartitionSpec{Action: AnalyzeAction, IsAll: true} } yyVAL.union = yyLOCAL - case 690: + case 691: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3907 +//line sql.y:3916 { yyLOCAL = &PartitionSpec{Action: CheckAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 691: + case 692: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3911 +//line sql.y:3920 { yyLOCAL = &PartitionSpec{Action: CheckAction, IsAll: true} } yyVAL.union = yyLOCAL - case 692: + case 693: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3915 +//line sql.y:3924 { yyLOCAL = &PartitionSpec{Action: OptimizeAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 693: + case 694: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3919 +//line sql.y:3928 { yyLOCAL = &PartitionSpec{Action: OptimizeAction, IsAll: true} } yyVAL.union = yyLOCAL - case 694: + case 695: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3923 +//line sql.y:3932 { yyLOCAL = &PartitionSpec{Action: RebuildAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 695: + case 696: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3927 +//line sql.y:3936 { yyLOCAL = &PartitionSpec{Action: RebuildAction, IsAll: true} } yyVAL.union = yyLOCAL - case 696: + case 697: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3931 +//line sql.y:3940 { yyLOCAL = &PartitionSpec{Action: RepairAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 697: + case 698: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3935 +//line sql.y:3944 { yyLOCAL = &PartitionSpec{Action: RepairAction, IsAll: true} } yyVAL.union = yyLOCAL - case 698: + case 699: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3939 +//line sql.y:3948 { yyLOCAL = &PartitionSpec{Action: UpgradeAction} } yyVAL.union = yyLOCAL - case 699: + case 700: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3944 +//line sql.y:3953 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 700: + case 701: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:3948 +//line sql.y:3957 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 701: + case 702: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:3952 +//line sql.y:3961 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 702: + case 703: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*PartitionDefinition -//line sql.y:3958 +//line sql.y:3967 { yyLOCAL = []*PartitionDefinition{yyDollar[1].partDefUnion()} } yyVAL.union = yyLOCAL - case 703: + case 704: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3962 +//line sql.y:3971 { yySLICE := (*[]*PartitionDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].partDefUnion()) } - case 704: + case 705: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3968 +//line sql.y:3977 { yyVAL.partDefUnion().Options = yyDollar[2].partitionDefinitionOptionsUnion() } - case 705: + case 706: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3973 +//line sql.y:3982 { yyLOCAL = &PartitionDefinitionOptions{} } yyVAL.union = yyLOCAL - case 706: + case 707: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3977 +//line sql.y:3986 { yyDollar[1].partitionDefinitionOptionsUnion().ValueRange = yyDollar[2].partitionValueRangeUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 707: + case 708: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3982 +//line sql.y:3991 { yyDollar[1].partitionDefinitionOptionsUnion().Comment = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 708: + case 709: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3987 +//line sql.y:3996 { yyDollar[1].partitionDefinitionOptionsUnion().Engine = yyDollar[2].partitionEngineUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 709: + case 710: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3992 +//line sql.y:4001 { yyDollar[1].partitionDefinitionOptionsUnion().DataDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 710: + case 711: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:3997 +//line sql.y:4006 { yyDollar[1].partitionDefinitionOptionsUnion().IndexDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 711: + case 712: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:4002 +//line sql.y:4011 { val := yyDollar[2].integerUnion() yyDollar[1].partitionDefinitionOptionsUnion().MaxRows = &val yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 712: + case 713: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:4008 +//line sql.y:4017 { val := yyDollar[2].integerUnion() yyDollar[1].partitionDefinitionOptionsUnion().MinRows = &val yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 713: + case 714: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:4014 +//line sql.y:4023 { yyDollar[1].partitionDefinitionOptionsUnion().TableSpace = yyDollar[2].str yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 714: + case 715: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -//line sql.y:4019 +//line sql.y:4028 { yyDollar[1].partitionDefinitionOptionsUnion().SubPartitionDefinitions = yyDollar[2].subPartitionDefinitionsUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 715: + case 716: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SubPartitionDefinitions -//line sql.y:4025 +//line sql.y:4034 { yyLOCAL = yyDollar[2].subPartitionDefinitionsUnion() } yyVAL.union = yyLOCAL - case 716: + case 717: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SubPartitionDefinitions -//line sql.y:4031 +//line sql.y:4040 { yyLOCAL = SubPartitionDefinitions{yyDollar[1].subPartitionDefinitionUnion()} } yyVAL.union = yyLOCAL - case 717: + case 718: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4035 +//line sql.y:4044 { yySLICE := (*SubPartitionDefinitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].subPartitionDefinitionUnion()) } - case 718: + case 719: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SubPartitionDefinition -//line sql.y:4041 +//line sql.y:4050 { yyLOCAL = &SubPartitionDefinition{Name: yyDollar[2].identifierCI, Options: yyDollar[3].subPartitionDefinitionOptionsUnion()} } yyVAL.union = yyLOCAL - case 719: + case 720: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:4046 +//line sql.y:4055 { yyLOCAL = &SubPartitionDefinitionOptions{} } yyVAL.union = yyLOCAL - case 720: + case 721: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:4050 +//line sql.y:4059 { yyDollar[1].subPartitionDefinitionOptionsUnion().Comment = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 721: + case 722: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:4055 +//line sql.y:4064 { yyDollar[1].subPartitionDefinitionOptionsUnion().Engine = yyDollar[2].partitionEngineUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 722: + case 723: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:4060 +//line sql.y:4069 { yyDollar[1].subPartitionDefinitionOptionsUnion().DataDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 723: + case 724: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:4065 +//line sql.y:4074 { yyDollar[1].subPartitionDefinitionOptionsUnion().IndexDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 724: + case 725: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:4070 +//line sql.y:4079 { val := yyDollar[2].integerUnion() yyDollar[1].subPartitionDefinitionOptionsUnion().MaxRows = &val yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 725: + case 726: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:4076 +//line sql.y:4085 { val := yyDollar[2].integerUnion() yyDollar[1].subPartitionDefinitionOptionsUnion().MinRows = &val yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 726: + case 727: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -//line sql.y:4082 +//line sql.y:4091 { yyDollar[1].subPartitionDefinitionOptionsUnion().TableSpace = yyDollar[2].str yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 727: + case 728: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionValueRange -//line sql.y:4089 +//line sql.y:4098 { yyLOCAL = &PartitionValueRange{ Type: LessThanType, @@ -14503,10 +14555,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 728: + case 729: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionValueRange -//line sql.y:4096 +//line sql.y:4105 { yyLOCAL = &PartitionValueRange{ Type: LessThanType, @@ -14514,10 +14566,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 729: + case 730: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionValueRange -//line sql.y:4103 +//line sql.y:4112 { yyLOCAL = &PartitionValueRange{ Type: InType, @@ -14525,131 +14577,131 @@ yydefault: } } yyVAL.union = yyLOCAL - case 730: + case 731: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4111 +//line sql.y:4120 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 731: + case 732: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4115 +//line sql.y:4124 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 732: + case 733: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionEngine -//line sql.y:4121 +//line sql.y:4130 { yyLOCAL = &PartitionEngine{Storage: yyDollar[1].booleanUnion(), Name: yyDollar[4].identifierCS.String()} } yyVAL.union = yyLOCAL - case 733: + case 734: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Literal -//line sql.y:4127 +//line sql.y:4136 { yyLOCAL = NewStrLiteral(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 734: + case 735: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Literal -//line sql.y:4133 +//line sql.y:4142 { yyLOCAL = NewStrLiteral(yyDollar[4].str) } yyVAL.union = yyLOCAL - case 735: + case 736: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Literal -//line sql.y:4139 +//line sql.y:4148 { yyLOCAL = NewStrLiteral(yyDollar[4].str) } yyVAL.union = yyLOCAL - case 736: + case 737: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:4145 +//line sql.y:4154 { yyLOCAL = convertStringToInt(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 737: + case 738: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -//line sql.y:4151 +//line sql.y:4160 { yyLOCAL = convertStringToInt(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 738: + case 739: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4157 +//line sql.y:4166 { yyVAL.str = yyDollar[3].identifierCS.String() } - case 739: + case 740: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinition -//line sql.y:4163 +//line sql.y:4172 { yyLOCAL = &PartitionDefinition{Name: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 740: + case 741: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4169 +//line sql.y:4178 { yyVAL.str = "" } - case 741: + case 742: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4173 +//line sql.y:4182 { yyVAL.str = "" } - case 742: + case 743: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4179 +//line sql.y:4188 { yyLOCAL = &RenameTable{TablePairs: yyDollar[3].renameTablePairsUnion()} } yyVAL.union = yyLOCAL - case 743: + case 744: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*RenameTablePair -//line sql.y:4185 +//line sql.y:4194 { yyLOCAL = []*RenameTablePair{{FromTable: yyDollar[1].tableName, ToTable: yyDollar[3].tableName}} } yyVAL.union = yyLOCAL - case 744: + case 745: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:4189 +//line sql.y:4198 { yySLICE := (*[]*RenameTablePair)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, &RenameTablePair{FromTable: yyDollar[3].tableName, ToTable: yyDollar[5].tableName}) } - case 745: + case 746: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4195 +//line sql.y:4204 { yyLOCAL = &DropTable{FromTables: yyDollar[6].tableNamesUnion(), IfExists: yyDollar[5].booleanUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), Temp: yyDollar[3].booleanUnion()} } yyVAL.union = yyLOCAL - case 746: + case 747: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4199 +//line sql.y:4208 { // Change this to an alter statement if yyDollar[4].identifierCI.Lowered() == "primary" { @@ -14659,1460 +14711,1460 @@ yydefault: } } yyVAL.union = yyLOCAL - case 747: + case 748: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:4208 +//line sql.y:4217 { yyLOCAL = &DropView{FromTables: yyDollar[5].tableNamesUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), IfExists: yyDollar[4].booleanUnion()} } yyVAL.union = yyLOCAL - case 748: + case 749: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4212 +//line sql.y:4221 { yyLOCAL = &DropDatabase{Comments: Comments(yyDollar[2].strs).Parsed(), DBName: yyDollar[5].identifierCS, IfExists: yyDollar[4].booleanUnion()} } yyVAL.union = yyLOCAL - case 749: + case 750: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4218 +//line sql.y:4227 { yyLOCAL = &TruncateTable{Table: yyDollar[3].tableName} } yyVAL.union = yyLOCAL - case 750: + case 751: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4222 +//line sql.y:4231 { yyLOCAL = &TruncateTable{Table: yyDollar[2].tableName} } yyVAL.union = yyLOCAL - case 751: + case 752: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4228 +//line sql.y:4237 { yyLOCAL = &OtherRead{} } yyVAL.union = yyLOCAL - case 752: + case 753: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4234 +//line sql.y:4243 { yyLOCAL = &CheckTable{Tables: yyDollar[3].tableNamesUnion(), Options: yyDollar[4].checkOptionsUnion()} } yyVAL.union = yyLOCAL - case 753: + case 754: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableNames -//line sql.y:4240 +//line sql.y:4249 { yyLOCAL = TableNames{yyDollar[1].tableName} } yyVAL.union = yyLOCAL - case 754: + case 755: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4244 +//line sql.y:4253 { yySLICE := (*TableNames)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableName) } - case 755: + case 756: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4250 +//line sql.y:4259 { yyLOCAL = &Kill{Type: KillConnection, ConnID: NewIntLiteral(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 756: + case 757: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4254 +//line sql.y:4263 { yyLOCAL = &Kill{Type: KillQuery, ConnID: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 757: + case 758: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4258 +//line sql.y:4267 { yyLOCAL = &Kill{Type: KillConnection, ConnID: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 758: + case 759: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4264 +//line sql.y:4273 { yyLOCAL = &Reload{Type: ReloadUsers} } yyVAL.union = yyLOCAL - case 759: + case 760: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4268 +//line sql.y:4277 { yyLOCAL = &Reload{Type: ReloadPrivileges} } yyVAL.union = yyLOCAL - case 760: + case 761: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4274 +//line sql.y:4283 { yyLOCAL = &Show{&ShowBasic{Command: Charset, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 761: + case 762: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4278 +//line sql.y:4287 { yyLOCAL = &Show{&ShowBasic{Command: LastSeenGTID}} } yyVAL.union = yyLOCAL - case 762: + case 763: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4282 +//line sql.y:4291 { yyLOCAL = &Show{&ShowBasic{Command: FailPoints}} } yyVAL.union = yyLOCAL - case 763: + case 764: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4286 +//line sql.y:4295 { yyLOCAL = &Show{&ShowBasic{Command: Collation, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 764: + case 765: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4290 +//line sql.y:4299 { yyLOCAL = &Show{&ShowBasic{Full: yyDollar[2].booleanUnion(), Command: Column, Tbl: yyDollar[5].tableName, DbName: yyDollar[6].identifierCS, Filter: yyDollar[7].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 765: + case 766: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4294 +//line sql.y:4303 { yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 766: + case 767: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4298 +//line sql.y:4307 { yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 767: + case 768: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4302 +//line sql.y:4311 { yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 768: + case 769: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4306 +//line sql.y:4315 { yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 769: + case 770: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4310 +//line sql.y:4319 { yyLOCAL = &Show{&ShowBasic{Command: Function, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 770: + case 771: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4314 +//line sql.y:4323 { yyLOCAL = &Show{&ShowBasic{Command: Index, Tbl: yyDollar[5].tableName, DbName: yyDollar[6].identifierCS, Filter: yyDollar[7].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 771: + case 772: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4318 +//line sql.y:4327 { yyLOCAL = &Show{&ShowBasic{Command: OpenTable, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 772: + case 773: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4322 +//line sql.y:4331 { yyLOCAL = &Show{&ShowBasic{Command: Privilege}} } yyVAL.union = yyLOCAL - case 773: + case 774: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4326 +//line sql.y:4335 { yyLOCAL = &Show{&ShowBasic{Command: Procedure, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 774: + case 775: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4330 +//line sql.y:4339 { yyLOCAL = &Show{&ShowBasic{Command: StatusSession, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 775: + case 776: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4334 +//line sql.y:4343 { yyLOCAL = &Show{&ShowBasic{Command: StatusGlobal, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 776: + case 777: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4338 +//line sql.y:4347 { yyLOCAL = &Show{&ShowBasic{Command: VariableSession, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 777: + case 778: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4342 +//line sql.y:4351 { yyLOCAL = &Show{&ShowBasic{Command: VariableGlobal, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 778: + case 779: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4346 +//line sql.y:4355 { yyLOCAL = &Show{&ShowBasic{Command: TableStatus, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 779: + case 780: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4350 +//line sql.y:4359 { yyLOCAL = &Show{&ShowBasic{Command: Table, Full: yyDollar[2].booleanUnion(), DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 780: + case 781: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4354 +//line sql.y:4363 { yyLOCAL = &Show{&ShowBasic{Command: Trigger, DbName: yyDollar[3].identifierCS, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 781: + case 782: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4358 +//line sql.y:4367 { yyLOCAL = &Show{&ShowCreate{Command: CreateDb, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 782: + case 783: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4362 +//line sql.y:4371 { yyLOCAL = &Show{&ShowCreate{Command: CreateE, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 783: + case 784: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4366 +//line sql.y:4375 { yyLOCAL = &Show{&ShowCreate{Command: CreateF, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 784: + case 785: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4370 +//line sql.y:4379 { yyLOCAL = &Show{&ShowCreate{Command: CreateProc, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 785: + case 786: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4374 +//line sql.y:4383 { yyLOCAL = &Show{&ShowCreate{Command: CreateTbl, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 786: + case 787: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4378 +//line sql.y:4387 { yyLOCAL = &Show{&ShowCreate{Command: CreateTr, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 787: + case 788: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4382 +//line sql.y:4391 { yyLOCAL = &Show{&ShowCreate{Command: CreateV, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL - case 788: + case 789: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4386 +//line sql.y:4395 { yyLOCAL = &Show{&ShowBasic{Command: Engines}} } yyVAL.union = yyLOCAL - case 789: + case 790: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4390 +//line sql.y:4399 { yyLOCAL = &Show{&ShowBasic{Command: Plugins}} } yyVAL.union = yyLOCAL - case 790: + case 791: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4394 +//line sql.y:4403 { yyLOCAL = &Show{&ShowBasic{Command: GtidExecGlobal, DbName: yyDollar[4].identifierCS}} } yyVAL.union = yyLOCAL - case 791: + case 792: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4398 +//line sql.y:4407 { yyLOCAL = &Show{&ShowBasic{Command: VGtidExecGlobal, DbName: yyDollar[4].identifierCS}} } yyVAL.union = yyLOCAL - case 792: + case 793: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4402 +//line sql.y:4411 { yyLOCAL = &Show{&ShowBasic{Command: VitessVariables, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 793: + case 794: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4406 +//line sql.y:4415 { yyLOCAL = &Show{&ShowBasic{Command: VitessMigrations, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL - case 794: + case 795: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4410 +//line sql.y:4419 { yyLOCAL = &Show{&ShowBasic{Command: VitessMigrations, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL - case 795: + case 796: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4414 +//line sql.y:4423 { yyLOCAL = &Show{&ShowBasic{Command: DMLJobs, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL - case 796: + case 797: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4418 +//line sql.y:4427 { yyLOCAL = &Show{&ShowDMLJob{UUID: yyDollar[3].str, Detail: false}} } yyVAL.union = yyLOCAL - case 797: + case 798: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4422 +//line sql.y:4431 { yyLOCAL = &Show{&ShowDMLJob{UUID: yyDollar[3].str, Detail: true}} } yyVAL.union = yyLOCAL - case 798: + case 799: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4426 +//line sql.y:4435 { yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 799: + case 800: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4430 +//line sql.y:4439 { yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL - case 800: + case 801: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4434 +//line sql.y:4443 { yyLOCAL = &ShowThrottledApps{} } yyVAL.union = yyLOCAL - case 801: + case 802: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4438 +//line sql.y:4447 { yyLOCAL = &Show{&ShowBasic{Command: VitessReplicationStatus, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 802: + case 803: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4442 +//line sql.y:4451 { yyLOCAL = &ShowThrottlerStatus{} } yyVAL.union = yyLOCAL - case 803: + case 804: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4446 +//line sql.y:4455 { yyLOCAL = &Show{&ShowBasic{Command: VschemaTables}} } yyVAL.union = yyLOCAL - case 804: + case 805: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4450 +//line sql.y:4459 { yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes}} } yyVAL.union = yyLOCAL - case 805: + case 806: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4454 +//line sql.y:4463 { yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes, Tbl: yyDollar[5].tableName}} } yyVAL.union = yyLOCAL - case 806: + case 807: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4458 +//line sql.y:4467 { yyLOCAL = &Show{&ShowBasic{Command: Warnings}} } yyVAL.union = yyLOCAL - case 807: + case 808: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4462 +//line sql.y:4471 { yyLOCAL = &Show{&ShowBasic{Command: VitessShards, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 808: + case 809: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4466 +//line sql.y:4475 { yyLOCAL = &Show{&ShowBasic{Command: VitessTablets, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 809: + case 810: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4470 +//line sql.y:4479 { yyLOCAL = &Show{&ShowBasic{Command: VitessTarget}} } yyVAL.union = yyLOCAL - case 810: + case 811: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4474 +//line sql.y:4483 { yyLOCAL = &Show{&ShowBasic{Command: Workload}} } yyVAL.union = yyLOCAL - case 811: + case 812: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4481 +//line sql.y:4490 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].identifierCI.String())}} } yyVAL.union = yyLOCAL - case 812: + case 813: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4485 +//line sql.y:4494 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL - case 813: + case 814: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4489 +//line sql.y:4498 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String()}} } yyVAL.union = yyLOCAL - case 814: + case 815: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4493 +//line sql.y:4502 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL - case 815: + case 816: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4497 +//line sql.y:4506 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}} } yyVAL.union = yyLOCAL - case 816: + case 817: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4501 +//line sql.y:4510 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}} } yyVAL.union = yyLOCAL - case 817: + case 818: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4505 +//line sql.y:4514 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}} } yyVAL.union = yyLOCAL - case 818: + case 819: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4509 +//line sql.y:4518 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL - case 819: + case 820: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4513 +//line sql.y:4522 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}} } yyVAL.union = yyLOCAL - case 820: + case 821: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4519 +//line sql.y:4528 { yyVAL.str = "" } - case 821: + case 822: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4523 +//line sql.y:4532 { yyVAL.str = "extended " } - case 822: + case 823: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4529 +//line sql.y:4538 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 823: + case 824: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4533 +//line sql.y:4542 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 824: + case 825: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4539 +//line sql.y:4548 { yyVAL.str = string(yyDollar[1].str) } - case 825: + case 826: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4543 +//line sql.y:4552 { yyVAL.str = string(yyDollar[1].str) } - case 826: + case 827: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4549 +//line sql.y:4558 { yyVAL.identifierCS = NewIdentifierCS("") } - case 827: + case 828: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4553 +//line sql.y:4562 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 828: + case 829: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4557 +//line sql.y:4566 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 829: + case 830: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4563 +//line sql.y:4572 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 830: + case 831: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4567 +//line sql.y:4576 { yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 831: + case 832: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4571 +//line sql.y:4580 { yyLOCAL = &ShowFilter{Filter: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 832: + case 833: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4577 +//line sql.y:4586 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 833: + case 834: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4581 +//line sql.y:4590 { yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 834: + case 835: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4587 +//line sql.y:4596 { yyVAL.empty = struct{}{} } - case 835: + case 836: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4591 +//line sql.y:4600 { yyVAL.empty = struct{}{} } - case 836: + case 837: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4595 +//line sql.y:4604 { yyVAL.empty = struct{}{} } - case 837: + case 838: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4601 +//line sql.y:4610 { yyVAL.str = string(yyDollar[1].str) } - case 838: + case 839: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4605 +//line sql.y:4614 { yyVAL.str = string(yyDollar[1].str) } - case 839: + case 840: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4611 +//line sql.y:4620 { yyLOCAL = &Use{DBName: yyDollar[2].identifierCS} } yyVAL.union = yyLOCAL - case 840: + case 841: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4615 +//line sql.y:4624 { yyLOCAL = &Use{DBName: IdentifierCS{v: ""}} } yyVAL.union = yyLOCAL - case 841: + case 842: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4619 +//line sql.y:4628 { yyLOCAL = &Use{DBName: NewIdentifierCS(yyDollar[2].identifierCS.String() + "@" + string(yyDollar[3].str))} } yyVAL.union = yyLOCAL - case 842: + case 843: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4626 +//line sql.y:4635 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 843: + case 844: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4630 +//line sql.y:4639 { yyVAL.identifierCS = NewIdentifierCS("@" + string(yyDollar[1].str)) } - case 844: + case 845: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4634 +//line sql.y:4643 { yyVAL.identifierCS = NewIdentifierCS("@@" + string(yyDollar[1].str)) } - case 845: + case 846: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4638 +//line sql.y:4647 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 846: + case 847: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4645 +//line sql.y:4654 { yyLOCAL = &Begin{} } yyVAL.union = yyLOCAL - case 847: + case 848: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4649 +//line sql.y:4658 { yyLOCAL = &Begin{TxAccessModes: yyDollar[3].txAccessModesUnion()} } yyVAL.union = yyLOCAL - case 848: + case 849: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4654 +//line sql.y:4663 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 849: + case 850: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4658 +//line sql.y:4667 { yyLOCAL = yyDollar[1].txAccessModesUnion() } yyVAL.union = yyLOCAL - case 850: + case 851: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4664 +//line sql.y:4673 { yyLOCAL = []TxAccessMode{yyDollar[1].txAccessModeUnion()} } yyVAL.union = yyLOCAL - case 851: + case 852: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4668 +//line sql.y:4677 { yySLICE := (*[]TxAccessMode)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].txAccessModeUnion()) } - case 852: + case 853: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4674 +//line sql.y:4683 { yyLOCAL = WithConsistentSnapshot } yyVAL.union = yyLOCAL - case 853: + case 854: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4678 +//line sql.y:4687 { yyLOCAL = ReadWrite } yyVAL.union = yyLOCAL - case 854: + case 855: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4682 +//line sql.y:4691 { yyLOCAL = ReadOnly } yyVAL.union = yyLOCAL - case 855: + case 856: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4689 +//line sql.y:4698 { yyLOCAL = &Commit{} } yyVAL.union = yyLOCAL - case 856: + case 857: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4695 +//line sql.y:4704 { yyLOCAL = &Rollback{} } yyVAL.union = yyLOCAL - case 857: + case 858: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4699 +//line sql.y:4708 { yyLOCAL = &SRollback{Name: yyDollar[5].identifierCI} } yyVAL.union = yyLOCAL - case 858: + case 859: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4704 +//line sql.y:4713 { yyVAL.empty = struct{}{} } - case 859: + case 860: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4706 +//line sql.y:4715 { yyVAL.empty = struct{}{} } - case 860: + case 861: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4709 +//line sql.y:4718 { yyVAL.empty = struct{}{} } - case 861: + case 862: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4711 +//line sql.y:4720 { yyVAL.empty = struct{}{} } - case 862: + case 863: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4715 +//line sql.y:4724 { yyLOCAL = &Savepoint{Name: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 863: + case 864: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4721 +//line sql.y:4730 { yyLOCAL = &Release{Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 864: + case 865: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4726 +//line sql.y:4735 { yyLOCAL = EmptyType } yyVAL.union = yyLOCAL - case 865: + case 866: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4730 +//line sql.y:4739 { yyLOCAL = JSONType } yyVAL.union = yyLOCAL - case 866: + case 867: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4734 +//line sql.y:4743 { yyLOCAL = TreeType } yyVAL.union = yyLOCAL - case 867: + case 868: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4738 +//line sql.y:4747 { yyLOCAL = VitessType } yyVAL.union = yyLOCAL - case 868: + case 869: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4742 +//line sql.y:4751 { yyLOCAL = VTExplainType } yyVAL.union = yyLOCAL - case 869: + case 870: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4746 +//line sql.y:4755 { yyLOCAL = TraditionalType } yyVAL.union = yyLOCAL - case 870: + case 871: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4750 +//line sql.y:4759 { yyLOCAL = AnalyzeType } yyVAL.union = yyLOCAL - case 871: + case 872: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4755 +//line sql.y:4764 { yyLOCAL = PlanVExplainType } yyVAL.union = yyLOCAL - case 872: + case 873: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4759 +//line sql.y:4768 { yyLOCAL = PlanVExplainType } yyVAL.union = yyLOCAL - case 873: + case 874: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4763 +//line sql.y:4772 { yyLOCAL = AllVExplainType } yyVAL.union = yyLOCAL - case 874: + case 875: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4767 +//line sql.y:4776 { yyLOCAL = QueriesVExplainType } yyVAL.union = yyLOCAL - case 875: + case 876: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4773 +//line sql.y:4782 { yyVAL.str = yyDollar[1].str } - case 876: + case 877: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4777 +//line sql.y:4786 { yyVAL.str = yyDollar[1].str } - case 877: + case 878: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4781 +//line sql.y:4790 { yyVAL.str = yyDollar[1].str } - case 878: + case 879: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4787 +//line sql.y:4796 { yyLOCAL = yyDollar[1].selStmtUnion() } yyVAL.union = yyLOCAL - case 879: + case 880: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4791 +//line sql.y:4800 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 880: + case 881: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4795 +//line sql.y:4804 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 881: + case 882: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4799 +//line sql.y:4808 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 882: + case 883: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4804 +//line sql.y:4813 { yyVAL.str = "" } - case 883: + case 884: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4808 +//line sql.y:4817 { yyVAL.str = yyDollar[1].identifierCI.val } - case 884: + case 885: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4812 +//line sql.y:4821 { yyVAL.str = encodeSQLString(yyDollar[1].str) } - case 885: + case 886: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4818 +//line sql.y:4827 { yyLOCAL = &ExplainTab{Table: yyDollar[3].tableName, Wild: yyDollar[4].str} } yyVAL.union = yyLOCAL - case 886: + case 887: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4822 +//line sql.y:4831 { yyLOCAL = &ExplainStmt{Type: yyDollar[3].explainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()} } yyVAL.union = yyLOCAL - case 887: + case 888: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4828 +//line sql.y:4837 { yyLOCAL = &VExplainStmt{Type: yyDollar[3].vexplainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()} } yyVAL.union = yyLOCAL - case 888: + case 889: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4834 +//line sql.y:4843 { yyLOCAL = &OtherAdmin{} } yyVAL.union = yyLOCAL - case 889: + case 890: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4838 +//line sql.y:4847 { yyLOCAL = &OtherAdmin{} } yyVAL.union = yyLOCAL - case 890: + case 891: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4844 +//line sql.y:4853 { yyLOCAL = &LockTables{Tables: yyDollar[3].tableAndLockTypesUnion()} } yyVAL.union = yyLOCAL - case 891: + case 892: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableAndLockTypes -//line sql.y:4850 +//line sql.y:4859 { yyLOCAL = TableAndLockTypes{yyDollar[1].tableAndLockTypeUnion()} } yyVAL.union = yyLOCAL - case 892: + case 893: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4854 +//line sql.y:4863 { yySLICE := (*TableAndLockTypes)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableAndLockTypeUnion()) } - case 893: + case 894: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *TableAndLockType -//line sql.y:4860 +//line sql.y:4869 { yyLOCAL = &TableAndLockType{Table: yyDollar[1].aliasedTableNameUnion(), Lock: yyDollar[2].lockTypeUnion()} } yyVAL.union = yyLOCAL - case 894: + case 895: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LockType -//line sql.y:4866 +//line sql.y:4875 { yyLOCAL = Read } yyVAL.union = yyLOCAL - case 895: + case 896: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL LockType -//line sql.y:4870 +//line sql.y:4879 { yyLOCAL = ReadLocal } yyVAL.union = yyLOCAL - case 896: + case 897: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LockType -//line sql.y:4874 +//line sql.y:4883 { yyLOCAL = Write } yyVAL.union = yyLOCAL - case 897: + case 898: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL LockType -//line sql.y:4878 +//line sql.y:4887 { yyLOCAL = LowPriorityWrite } yyVAL.union = yyLOCAL - case 898: + case 899: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4884 +//line sql.y:4893 { yyLOCAL = &UnlockTables{} } yyVAL.union = yyLOCAL - case 899: + case 900: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4890 +//line sql.y:4899 { yyLOCAL = &RevertMigration{Comments: Comments(yyDollar[2].strs).Parsed(), UUID: string(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 900: + case 901: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4894 +//line sql.y:4903 { yyLOCAL = &RevertMigration{Comments: Comments(yyDollar[2].strs).Parsed(), UUID: string(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 901: + case 902: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4900 +//line sql.y:4909 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), FlushOptions: yyDollar[3].strs} } yyVAL.union = yyLOCAL - case 902: + case 903: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4904 +//line sql.y:4913 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion()} } yyVAL.union = yyLOCAL - case 903: + case 904: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:4908 +//line sql.y:4917 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), WithLock: true} } yyVAL.union = yyLOCAL - case 904: + case 905: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4912 +//line sql.y:4921 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion()} } yyVAL.union = yyLOCAL - case 905: + case 906: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4916 +//line sql.y:4925 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), WithLock: true} } yyVAL.union = yyLOCAL - case 906: + case 907: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:4920 +//line sql.y:4929 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), ForExport: true} } yyVAL.union = yyLOCAL - case 907: + case 908: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4926 +//line sql.y:4935 { yyVAL.strs = []string{yyDollar[1].str} } - case 908: + case 909: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4930 +//line sql.y:4939 { yyVAL.strs = append(yyDollar[1].strs, yyDollar[3].str) } - case 909: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4936 - { - yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) - } case 910: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4940 +//line sql.y:4945 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 911: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4944 +//line sql.y:4949 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 912: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4948 +//line sql.y:4953 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 913: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4952 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:4957 { - yyVAL.str = string(yyDollar[1].str) + yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 914: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4956 +//line sql.y:4961 { yyVAL.str = string(yyDollar[1].str) } case 915: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4960 +//line sql.y:4965 { yyVAL.str = string(yyDollar[1].str) } case 916: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4964 +//line sql.y:4969 { yyVAL.str = string(yyDollar[1].str) } case 917: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:4973 + { + yyVAL.str = string(yyDollar[1].str) + } + case 918: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4968 +//line sql.y:4977 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) + yyDollar[3].str } - case 918: + case 919: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4972 +//line sql.y:4981 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 919: + case 920: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4976 +//line sql.y:4985 { yyVAL.str = string(yyDollar[1].str) } - case 920: + case 921: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4980 +//line sql.y:4989 { yyVAL.str = string(yyDollar[1].str) } - case 921: + case 922: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4984 +//line sql.y:4993 { yyVAL.str = string(yyDollar[1].str) } - case 922: + case 923: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4989 +//line sql.y:4998 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 923: + case 924: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4993 +//line sql.y:5002 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 924: + case 925: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4997 +//line sql.y:5006 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 925: + case 926: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5002 +//line sql.y:5011 { yyVAL.str = "" } - case 926: + case 927: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5006 +//line sql.y:5015 { yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String() } - case 927: + case 928: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5011 +//line sql.y:5020 { setAllowComments(yylex, true) } - case 928: + case 929: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5015 +//line sql.y:5024 { yyVAL.strs = yyDollar[2].strs setAllowComments(yylex, false) } - case 929: + case 930: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5021 +//line sql.y:5030 { yyVAL.strs = nil } - case 930: + case 931: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5025 +//line sql.y:5034 { yyVAL.strs = append(yyDollar[1].strs, yyDollar[2].str) } - case 931: + case 932: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:5031 +//line sql.y:5040 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 932: + case 933: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:5035 +//line sql.y:5044 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 933: + case 934: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:5039 +//line sql.y:5048 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 934: + case 935: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5044 +//line sql.y:5053 { yyVAL.str = "" } - case 935: + case 936: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5048 +//line sql.y:5057 { yyVAL.str = SQLNoCacheStr } - case 936: + case 937: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5052 +//line sql.y:5061 { yyVAL.str = SQLCacheStr } - case 937: + case 938: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:5057 +//line sql.y:5066 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 938: + case 939: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:5061 +//line sql.y:5070 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 939: + case 940: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:5065 +//line sql.y:5074 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 940: + case 941: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:5071 +//line sql.y:5080 { yyLOCAL = &PrepareStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Statement: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 941: + case 942: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:5075 +//line sql.y:5084 { yyLOCAL = &PrepareStmt{ Name: yyDollar[3].identifierCI, @@ -16121,595 +16173,595 @@ yydefault: } } yyVAL.union = yyLOCAL - case 942: + case 943: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:5085 +//line sql.y:5094 { yyLOCAL = &ExecuteStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Arguments: yyDollar[4].variablesUnion()} } yyVAL.union = yyLOCAL - case 943: + case 944: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*Variable -//line sql.y:5090 +//line sql.y:5099 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 944: + case 945: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []*Variable -//line sql.y:5094 +//line sql.y:5103 { yyLOCAL = yyDollar[2].variablesUnion() } yyVAL.union = yyLOCAL - case 945: + case 946: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:5100 +//line sql.y:5109 { yyLOCAL = &DeallocateStmt{Type: DeallocateType, Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI} } yyVAL.union = yyLOCAL - case 946: + case 947: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:5104 +//line sql.y:5113 { yyLOCAL = &DeallocateStmt{Type: DropType, Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI} } yyVAL.union = yyLOCAL - case 947: + case 948: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL SelectExprs -//line sql.y:5109 +//line sql.y:5118 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 948: + case 949: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExprs -//line sql.y:5113 +//line sql.y:5122 { yyLOCAL = yyDollar[1].selectExprsUnion() } yyVAL.union = yyLOCAL - case 949: + case 950: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5118 +//line sql.y:5127 { yyVAL.strs = nil } - case 950: + case 951: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5122 +//line sql.y:5131 { yyVAL.strs = []string{yyDollar[1].str} } - case 951: + case 952: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5126 +//line sql.y:5135 { // TODO: This is a hack since I couldn't get it to work in a nicer way. I got 'conflicts: 8 shift/reduce' yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str} } - case 952: + case 953: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5130 +//line sql.y:5139 { yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str} } - case 953: + case 954: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:5134 +//line sql.y:5143 { yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str, yyDollar[4].str} } - case 954: + case 955: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5140 +//line sql.y:5149 { yyVAL.str = SQLNoCacheStr } - case 955: + case 956: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5144 +//line sql.y:5153 { yyVAL.str = SQLCacheStr } - case 956: + case 957: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5148 +//line sql.y:5157 { yyVAL.str = DistinctStr } - case 957: + case 958: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5152 +//line sql.y:5161 { yyVAL.str = DistinctStr } - case 958: + case 959: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5156 +//line sql.y:5165 { yyVAL.str = StraightJoinHint } - case 959: + case 960: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5160 +//line sql.y:5169 { yyVAL.str = SQLCalcFoundRowsStr } - case 960: + case 961: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5164 +//line sql.y:5173 { yyVAL.str = AllStr // These are not picked up by NewSelect, and so ALL will be dropped. But this is OK, since it's redundant anyway } - case 961: + case 962: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExprs -//line sql.y:5170 +//line sql.y:5179 { yyLOCAL = SelectExprs{yyDollar[1].selectExprUnion()} } yyVAL.union = yyLOCAL - case 962: + case 963: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5174 +//line sql.y:5183 { yySLICE := (*SelectExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].selectExprUnion()) } - case 963: + case 964: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5180 +//line sql.y:5189 { yyLOCAL = &StarExpr{} } yyVAL.union = yyLOCAL - case 964: + case 965: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5184 +//line sql.y:5193 { yyLOCAL = &AliasedExpr{Expr: yyDollar[1].exprUnion(), As: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 965: + case 966: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5188 +//line sql.y:5197 { yyLOCAL = &StarExpr{TableName: TableName{Name: yyDollar[1].identifierCS}} } yyVAL.union = yyLOCAL - case 966: + case 967: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5192 +//line sql.y:5201 { yyLOCAL = &StarExpr{TableName: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL - case 967: + case 968: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5197 +//line sql.y:5206 { yyVAL.identifierCI = IdentifierCI{} } - case 968: + case 969: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5201 +//line sql.y:5210 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 969: + case 970: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5205 +//line sql.y:5214 { yyVAL.identifierCI = yyDollar[2].identifierCI } - case 971: + case 972: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5212 +//line sql.y:5221 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 972: + case 973: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5217 +//line sql.y:5226 { yyLOCAL = TableExprs{&AliasedTableExpr{Expr: TableName{Name: NewIdentifierCS("dual")}}} } yyVAL.union = yyLOCAL - case 973: + case 974: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5221 +//line sql.y:5230 { yyLOCAL = yyDollar[1].tableExprsUnion() } yyVAL.union = yyLOCAL - case 974: + case 975: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5227 +//line sql.y:5236 { yyLOCAL = yyDollar[2].tableExprsUnion() } yyVAL.union = yyLOCAL - case 975: + case 976: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5233 +//line sql.y:5242 { yyLOCAL = TableExprs{yyDollar[1].tableExprUnion()} } yyVAL.union = yyLOCAL - case 976: + case 977: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5237 +//line sql.y:5246 { yySLICE := (*TableExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableExprUnion()) } - case 979: + case 980: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5247 +//line sql.y:5256 { yyLOCAL = yyDollar[1].aliasedTableNameUnion() } yyVAL.union = yyLOCAL - case 980: + case 981: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5251 +//line sql.y:5260 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].derivedTableUnion(), As: yyDollar[3].identifierCS, Columns: yyDollar[4].columnsUnion()} } yyVAL.union = yyLOCAL - case 981: + case 982: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5255 +//line sql.y:5264 { yyLOCAL = &ParenTableExpr{Exprs: yyDollar[2].tableExprsUnion()} } yyVAL.union = yyLOCAL - case 982: + case 983: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5259 +//line sql.y:5268 { yyLOCAL = yyDollar[1].tableExprUnion() } yyVAL.union = yyLOCAL - case 983: + case 984: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *DerivedTable -//line sql.y:5265 +//line sql.y:5274 { yyLOCAL = &DerivedTable{Lateral: false, Select: yyDollar[1].selStmtUnion()} } yyVAL.union = yyLOCAL - case 984: + case 985: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *DerivedTable -//line sql.y:5269 +//line sql.y:5278 { yyLOCAL = &DerivedTable{Lateral: true, Select: yyDollar[2].selStmtUnion()} } yyVAL.union = yyLOCAL - case 985: + case 986: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *AliasedTableExpr -//line sql.y:5275 +//line sql.y:5284 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, As: yyDollar[2].identifierCS, Hints: yyDollar[3].indexHintsUnion()} } yyVAL.union = yyLOCAL - case 986: + case 987: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *AliasedTableExpr -//line sql.y:5279 +//line sql.y:5288 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, Partitions: yyDollar[4].partitionsUnion(), As: yyDollar[6].identifierCS, Hints: yyDollar[7].indexHintsUnion()} } yyVAL.union = yyLOCAL - case 987: + case 988: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Columns -//line sql.y:5284 +//line sql.y:5293 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 988: + case 989: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Columns -//line sql.y:5288 +//line sql.y:5297 { yyLOCAL = yyDollar[2].columnsUnion() } yyVAL.union = yyLOCAL - case 989: + case 990: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Columns -//line sql.y:5293 +//line sql.y:5302 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 990: + case 991: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5297 +//line sql.y:5306 { yyLOCAL = yyDollar[1].columnsUnion() } yyVAL.union = yyLOCAL - case 991: + case 992: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5303 +//line sql.y:5312 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 992: + case 993: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5307 +//line sql.y:5316 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 993: + case 994: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*Variable -//line sql.y:5313 +//line sql.y:5322 { yyLOCAL = []*Variable{yyDollar[1].variableUnion()} } yyVAL.union = yyLOCAL - case 994: + case 995: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5317 +//line sql.y:5326 { yySLICE := (*[]*Variable)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].variableUnion()) } - case 995: + case 996: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5323 +//line sql.y:5332 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 996: + case 997: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5327 +//line sql.y:5336 { yyLOCAL = Columns{NewIdentifierCI(string(yyDollar[1].str))} } yyVAL.union = yyLOCAL - case 997: + case 998: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5331 +//line sql.y:5340 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 998: + case 999: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5335 +//line sql.y:5344 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, NewIdentifierCI(string(yyDollar[3].str))) } - case 999: + case 1000: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Partitions -//line sql.y:5341 +//line sql.y:5350 { yyLOCAL = Partitions{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 1000: + case 1001: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5345 +//line sql.y:5354 { yySLICE := (*Partitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 1001: + case 1002: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5358 +//line sql.y:5367 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 1002: + case 1003: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5362 +//line sql.y:5371 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 1003: + case 1004: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5366 +//line sql.y:5375 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 1004: + case 1005: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5370 +//line sql.y:5379 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion()} } yyVAL.union = yyLOCAL - case 1005: + case 1006: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5376 +//line sql.y:5385 { yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()} } - case 1006: + case 1007: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:5378 +//line sql.y:5387 { yyVAL.joinCondition = &JoinCondition{Using: yyDollar[3].columnsUnion()} } - case 1007: + case 1008: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5382 +//line sql.y:5391 { yyVAL.joinCondition = &JoinCondition{} } - case 1008: + case 1009: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5384 +//line sql.y:5393 { yyVAL.joinCondition = yyDollar[1].joinCondition } - case 1009: + case 1010: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5388 +//line sql.y:5397 { yyVAL.joinCondition = &JoinCondition{} } - case 1010: + case 1011: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5390 +//line sql.y:5399 { yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()} } - case 1011: + case 1012: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5393 +//line sql.y:5402 { yyVAL.empty = struct{}{} } - case 1012: + case 1013: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5395 +//line sql.y:5404 { yyVAL.empty = struct{}{} } - case 1013: + case 1014: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5398 +//line sql.y:5407 { yyVAL.identifierCS = NewIdentifierCS("") } - case 1014: + case 1015: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5402 +//line sql.y:5411 { yyVAL.identifierCS = yyDollar[1].identifierCS } - case 1015: + case 1016: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5406 +//line sql.y:5415 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 1017: + case 1018: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5413 +//line sql.y:5422 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1018: + case 1019: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL JoinType -//line sql.y:5419 +//line sql.y:5428 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 1019: + case 1020: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5423 +//line sql.y:5432 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 1020: + case 1021: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5427 +//line sql.y:5436 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 1021: + case 1022: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL JoinType -//line sql.y:5433 +//line sql.y:5442 { yyLOCAL = StraightJoinType } yyVAL.union = yyLOCAL - case 1022: + case 1023: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5439 +//line sql.y:5448 { yyLOCAL = LeftJoinType } yyVAL.union = yyLOCAL - case 1023: + case 1024: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL JoinType -//line sql.y:5443 +//line sql.y:5452 { yyLOCAL = LeftJoinType } yyVAL.union = yyLOCAL - case 1024: + case 1025: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5447 +//line sql.y:5456 { yyLOCAL = RightJoinType } yyVAL.union = yyLOCAL - case 1025: + case 1026: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL JoinType -//line sql.y:5451 +//line sql.y:5460 { yyLOCAL = RightJoinType } yyVAL.union = yyLOCAL - case 1026: + case 1027: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5457 +//line sql.y:5466 { yyLOCAL = NaturalJoinType } yyVAL.union = yyLOCAL - case 1027: + case 1028: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5461 +//line sql.y:5470 { if yyDollar[2].joinTypeUnion() == LeftJoinType { yyLOCAL = NaturalLeftJoinType @@ -16718,441 +16770,433 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1028: + case 1029: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5471 +//line sql.y:5480 { yyVAL.tableName = yyDollar[2].tableName } - case 1029: + case 1030: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5475 +//line sql.y:5484 { yyVAL.tableName = yyDollar[1].tableName } - case 1030: + case 1031: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5481 +//line sql.y:5490 { yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS} } - case 1031: + case 1032: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5485 +//line sql.y:5494 { yyVAL.tableName = TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS} } - case 1032: + case 1033: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5491 +//line sql.y:5500 { yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS} } - case 1033: + case 1034: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5496 +//line sql.y:5505 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1034: + case 1035: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5500 +//line sql.y:5509 { yyLOCAL = yyDollar[1].indexHintsUnion() } yyVAL.union = yyLOCAL - case 1035: + case 1036: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5506 +//line sql.y:5515 { yyLOCAL = IndexHints{yyDollar[1].indexHintUnion()} } yyVAL.union = yyLOCAL - case 1036: + case 1037: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5510 +//line sql.y:5519 { yySLICE := (*IndexHints)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].indexHintUnion()) } - case 1037: + case 1038: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5516 +//line sql.y:5525 { yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 1038: + case 1039: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5520 +//line sql.y:5529 { yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion()} } yyVAL.union = yyLOCAL - case 1039: + case 1040: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5524 +//line sql.y:5533 { yyLOCAL = &IndexHint{Type: IgnoreOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 1040: + case 1041: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5528 +//line sql.y:5537 { yyLOCAL = &IndexHint{Type: ForceOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 1041: + case 1042: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5533 +//line sql.y:5542 { yyLOCAL = NoForType } yyVAL.union = yyLOCAL - case 1042: + case 1043: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5537 +//line sql.y:5546 { yyLOCAL = JoinForType } yyVAL.union = yyLOCAL - case 1043: + case 1044: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5541 +//line sql.y:5550 { yyLOCAL = OrderByForType } yyVAL.union = yyLOCAL - case 1044: + case 1045: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5545 +//line sql.y:5554 { yyLOCAL = GroupByForType } yyVAL.union = yyLOCAL - case 1045: + case 1046: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:5551 +//line sql.y:5560 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1046: + case 1047: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5555 +//line sql.y:5564 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1047: + case 1048: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5562 +//line sql.y:5571 { yyLOCAL = &OrExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1048: + case 1049: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5566 +//line sql.y:5575 { yyLOCAL = &XorExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1049: + case 1050: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5570 +//line sql.y:5579 { yyLOCAL = &AndExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1050: + case 1051: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5574 +//line sql.y:5583 { yyLOCAL = &NotExpr{Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1051: + case 1052: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5578 +//line sql.y:5587 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].isExprOperatorUnion()} } yyVAL.union = yyLOCAL - case 1052: + case 1053: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5582 +//line sql.y:5591 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1053: + case 1054: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5586 +//line sql.y:5595 { yyLOCAL = &MemberOfExpr{Value: yyDollar[1].exprUnion(), JSONArr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1054: + case 1055: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5592 +//line sql.y:5601 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNullOp} } yyVAL.union = yyLOCAL - case 1055: + case 1056: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5596 +//line sql.y:5605 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNotNullOp} } yyVAL.union = yyLOCAL - case 1056: + case 1057: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5600 +//line sql.y:5609 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1057: + case 1058: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5604 +//line sql.y:5613 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1058: + case 1059: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5610 +//line sql.y:5619 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: InOp, Right: yyDollar[3].colTupleUnion()} } yyVAL.union = yyLOCAL - case 1059: + case 1060: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5614 +//line sql.y:5623 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotInOp, Right: yyDollar[4].colTupleUnion()} } yyVAL.union = yyLOCAL - case 1060: + case 1061: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5618 +//line sql.y:5627 { yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: true, From: yyDollar[3].exprUnion(), To: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1061: + case 1062: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5622 +//line sql.y:5631 { yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: false, From: yyDollar[4].exprUnion(), To: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 1062: + case 1063: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5626 +//line sql.y:5635 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1063: + case 1064: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5630 +//line sql.y:5639 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1064: + case 1065: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5634 +//line sql.y:5643 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion(), Escape: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1065: + case 1066: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5638 +//line sql.y:5647 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion(), Escape: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 1066: + case 1067: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5642 +//line sql.y:5651 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: RegexpOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1067: + case 1068: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5646 +//line sql.y:5655 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotRegexpOp, Right: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1068: + case 1069: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5650 +//line sql.y:5659 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1069: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5656 - { - } case 1070: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5659 +//line sql.y:5665 { } case 1071: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Expr -//line sql.y:5665 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:5668 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitOrOp, Right: yyDollar[3].exprUnion()} } - yyVAL.union = yyLOCAL case 1072: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5669 +//line sql.y:5674 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitAndOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitOrOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1073: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5673 +//line sql.y:5678 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftLeftOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitAndOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1074: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5677 +//line sql.y:5682 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftRightOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftLeftOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1075: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5681 +//line sql.y:5686 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: PlusOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftRightOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1076: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5685 +//line sql.y:5690 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MinusOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: PlusOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1077: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5689 +//line sql.y:5694 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MultOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MinusOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1078: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5693 +//line sql.y:5698 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: DivOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MultOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1079: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5697 +//line sql.y:5702 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: DivOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1080: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5701 +//line sql.y:5706 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: IntDivOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1081: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5705 +//line sql.y:5710 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: IntDivOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1082: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5709 +//line sql.y:5714 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitXorOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1083: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5713 +//line sql.y:5718 { - yyLOCAL = yyDollar[1].exprUnion() + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitXorOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1084: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5719 +//line sql.y:5722 { yyLOCAL = yyDollar[1].exprUnion() } @@ -17160,7 +17204,7 @@ yydefault: case 1085: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5723 +//line sql.y:5728 { yyLOCAL = yyDollar[1].exprUnion() } @@ -17168,7 +17212,7 @@ yydefault: case 1086: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5727 +//line sql.y:5732 { yyLOCAL = yyDollar[1].exprUnion() } @@ -17176,135 +17220,143 @@ yydefault: case 1087: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5731 +//line sql.y:5736 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL case 1088: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Expr +//line sql.y:5740 + { + yyLOCAL = yyDollar[1].exprUnion() + } + yyVAL.union = yyLOCAL + case 1089: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5735 +//line sql.y:5744 { yyLOCAL = &CollateExpr{Expr: yyDollar[1].exprUnion(), Collation: yyDollar[3].str} } yyVAL.union = yyLOCAL - case 1089: + case 1090: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5739 +//line sql.y:5748 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1090: + case 1091: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5743 +//line sql.y:5752 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1091: + case 1092: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5747 +//line sql.y:5756 { yyLOCAL = yyDollar[1].variableUnion() } yyVAL.union = yyLOCAL - case 1092: + case 1093: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5751 +//line sql.y:5760 { yyLOCAL = yyDollar[2].exprUnion() // TODO: do we really want to ignore unary '+' before any kind of literals? } yyVAL.union = yyLOCAL - case 1093: + case 1094: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5755 +//line sql.y:5764 { yyLOCAL = &UnaryExpr{Operator: UMinusOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1094: + case 1095: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5759 +//line sql.y:5768 { yyLOCAL = &UnaryExpr{Operator: TildaOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1095: + case 1096: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5763 +//line sql.y:5772 { yyLOCAL = &UnaryExpr{Operator: BangOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1096: + case 1097: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5767 +//line sql.y:5776 { yyLOCAL = yyDollar[1].subqueryUnion() } yyVAL.union = yyLOCAL - case 1097: + case 1098: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5771 +//line sql.y:5780 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1098: + case 1099: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5775 +//line sql.y:5784 { yyLOCAL = &ExistsExpr{Subquery: yyDollar[2].subqueryUnion()} } yyVAL.union = yyLOCAL - case 1099: + case 1100: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:5779 +//line sql.y:5788 { yyLOCAL = &MatchExpr{Columns: yyDollar[2].colNamesUnion(), Expr: yyDollar[5].exprUnion(), Option: yyDollar[6].matchExprOptionUnion()} } yyVAL.union = yyLOCAL - case 1100: + case 1101: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:5783 +//line sql.y:5792 { yyLOCAL = &CastExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion(), Array: yyDollar[6].booleanUnion()} } yyVAL.union = yyLOCAL - case 1101: + case 1102: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5787 +//line sql.y:5796 { yyLOCAL = &ConvertExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion()} } yyVAL.union = yyLOCAL - case 1102: + case 1103: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5791 +//line sql.y:5800 { yyLOCAL = &ConvertUsingExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].str} } yyVAL.union = yyLOCAL - case 1103: + case 1104: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5795 +//line sql.y:5804 { // From: https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#operator_binary // To convert a string expression to a binary string, these constructs are equivalent: @@ -17313,18 +17365,18 @@ yydefault: yyLOCAL = &ConvertExpr{Expr: yyDollar[2].exprUnion(), Type: &ConvertType{Type: yyDollar[1].str}} } yyVAL.union = yyLOCAL - case 1104: + case 1105: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5803 +//line sql.y:5812 { yyLOCAL = &Default{ColName: yyDollar[2].str} } yyVAL.union = yyLOCAL - case 1105: + case 1106: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5807 +//line sql.y:5816 { // INTERVAL can trigger a shift / reduce conflict. We want // to shift here for the interval rule. In case we do have @@ -17333,2192 +17385,2192 @@ yydefault: yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1106: + case 1107: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5815 +//line sql.y:5824 { yyLOCAL = &IntervalFuncExpr{Expr: yyDollar[3].exprUnion(), Exprs: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1107: + case 1108: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5819 +//line sql.y:5828 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: JSONExtractOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1108: + case 1109: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5823 +//line sql.y:5832 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: JSONUnquoteExtractOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1109: + case 1110: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5829 +//line sql.y:5838 { yyLOCAL = &IntervalExpr{Expr: yyDollar[2].exprUnion(), Unit: yyDollar[3].identifierCI.String()} } yyVAL.union = yyLOCAL - case 1110: + case 1111: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5835 +//line sql.y:5844 { yyLOCAL = yyDollar[1].colNamesUnion() } yyVAL.union = yyLOCAL - case 1111: + case 1112: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5839 +//line sql.y:5848 { yyLOCAL = yyDollar[2].colNamesUnion() } yyVAL.union = yyLOCAL - case 1112: + case 1113: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5845 +//line sql.y:5854 { yyLOCAL = []*ColName{yyDollar[1].colNameUnion()} } yyVAL.union = yyLOCAL - case 1113: + case 1114: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5849 +//line sql.y:5858 { yySLICE := (*[]*ColName)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].colNameUnion()) } - case 1114: + case 1115: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:5855 +//line sql.y:5864 { yyLOCAL = BothTrimType } yyVAL.union = yyLOCAL - case 1115: + case 1116: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:5859 +//line sql.y:5868 { yyLOCAL = LeadingTrimType } yyVAL.union = yyLOCAL - case 1116: + case 1117: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:5863 +//line sql.y:5872 { yyLOCAL = TrailingTrimType } yyVAL.union = yyLOCAL - case 1117: + case 1118: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FrameUnitType -//line sql.y:5869 +//line sql.y:5878 { yyLOCAL = FrameRowsType } yyVAL.union = yyLOCAL - case 1118: + case 1119: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FrameUnitType -//line sql.y:5873 +//line sql.y:5882 { yyLOCAL = FrameRangeType } yyVAL.union = yyLOCAL - case 1119: + case 1120: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5880 +//line sql.y:5889 { yyLOCAL = CumeDistExprType } yyVAL.union = yyLOCAL - case 1120: + case 1121: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5884 +//line sql.y:5893 { yyLOCAL = DenseRankExprType } yyVAL.union = yyLOCAL - case 1121: + case 1122: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5888 +//line sql.y:5897 { yyLOCAL = PercentRankExprType } yyVAL.union = yyLOCAL - case 1122: + case 1123: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5892 +//line sql.y:5901 { yyLOCAL = RankExprType } yyVAL.union = yyLOCAL - case 1123: + case 1124: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5896 +//line sql.y:5905 { yyLOCAL = RowNumberExprType } yyVAL.union = yyLOCAL - case 1124: + case 1125: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5902 +//line sql.y:5911 { yyLOCAL = &FramePoint{Type: CurrentRowType} } yyVAL.union = yyLOCAL - case 1125: + case 1126: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5906 +//line sql.y:5915 { yyLOCAL = &FramePoint{Type: UnboundedPrecedingType} } yyVAL.union = yyLOCAL - case 1126: + case 1127: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5910 +//line sql.y:5919 { yyLOCAL = &FramePoint{Type: UnboundedFollowingType} } yyVAL.union = yyLOCAL - case 1127: + case 1128: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5914 +//line sql.y:5923 { yyLOCAL = &FramePoint{Type: ExprPrecedingType, Expr: yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1128: + case 1129: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5918 +//line sql.y:5927 { yyLOCAL = &FramePoint{Type: ExprFollowingType, Expr: yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1129: + case 1130: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5924 +//line sql.y:5933 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1130: + case 1131: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5928 +//line sql.y:5937 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1131: + case 1132: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5933 +//line sql.y:5942 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1132: + case 1133: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5937 +//line sql.y:5946 { yyLOCAL = yyDollar[1].frameClauseUnion() } yyVAL.union = yyLOCAL - case 1133: + case 1134: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5943 +//line sql.y:5952 { yyLOCAL = &FrameClause{Unit: yyDollar[1].frameUnitTypeUnion(), Start: yyDollar[2].framePointUnion()} } yyVAL.union = yyLOCAL - case 1134: + case 1135: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5947 +//line sql.y:5956 { yyLOCAL = &FrameClause{Unit: yyDollar[1].frameUnitTypeUnion(), Start: yyDollar[3].framePointUnion(), End: yyDollar[5].framePointUnion()} } yyVAL.union = yyLOCAL - case 1135: + case 1136: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Exprs -//line sql.y:5952 +//line sql.y:5961 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1136: + case 1137: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Exprs -//line sql.y:5956 +//line sql.y:5965 { yyLOCAL = yyDollar[3].exprsUnion() } yyVAL.union = yyLOCAL - case 1137: + case 1138: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5961 +//line sql.y:5970 { } - case 1138: + case 1139: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5964 +//line sql.y:5973 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 1139: + case 1140: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *WindowSpecification -//line sql.y:5970 +//line sql.y:5979 { yyLOCAL = &WindowSpecification{Name: yyDollar[1].identifierCI, PartitionClause: yyDollar[2].exprsUnion(), OrderClause: yyDollar[3].orderByUnion(), FrameClause: yyDollar[4].frameClauseUnion()} } yyVAL.union = yyLOCAL - case 1140: + case 1141: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *OverClause -//line sql.y:5976 +//line sql.y:5985 { yyLOCAL = &OverClause{WindowSpec: yyDollar[3].windowSpecificationUnion()} } yyVAL.union = yyLOCAL - case 1141: + case 1142: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *OverClause -//line sql.y:5980 +//line sql.y:5989 { yyLOCAL = &OverClause{WindowName: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 1142: + case 1143: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *NullTreatmentClause -//line sql.y:5985 +//line sql.y:5994 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1144: + case 1145: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *NullTreatmentClause -//line sql.y:5992 +//line sql.y:6001 { yyLOCAL = &NullTreatmentClause{yyDollar[1].nullTreatmentTypeUnion()} } yyVAL.union = yyLOCAL - case 1145: + case 1146: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL NullTreatmentType -//line sql.y:5998 +//line sql.y:6007 { yyLOCAL = RespectNullsType } yyVAL.union = yyLOCAL - case 1146: + case 1147: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL NullTreatmentType -//line sql.y:6002 +//line sql.y:6011 { yyLOCAL = IgnoreNullsType } yyVAL.union = yyLOCAL - case 1147: + case 1148: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FirstOrLastValueExprType -//line sql.y:6008 +//line sql.y:6017 { yyLOCAL = FirstValueExprType } yyVAL.union = yyLOCAL - case 1148: + case 1149: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FirstOrLastValueExprType -//line sql.y:6012 +//line sql.y:6021 { yyLOCAL = LastValueExprType } yyVAL.union = yyLOCAL - case 1149: + case 1150: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL FromFirstLastType -//line sql.y:6018 +//line sql.y:6027 { yyLOCAL = FromFirstType } yyVAL.union = yyLOCAL - case 1150: + case 1151: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL FromFirstLastType -//line sql.y:6022 +//line sql.y:6031 { yyLOCAL = FromLastType } yyVAL.union = yyLOCAL - case 1151: + case 1152: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *FromFirstLastClause -//line sql.y:6027 +//line sql.y:6036 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1153: + case 1154: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *FromFirstLastClause -//line sql.y:6034 +//line sql.y:6043 { yyLOCAL = &FromFirstLastClause{yyDollar[1].fromFirstLastTypeUnion()} } yyVAL.union = yyLOCAL - case 1154: + case 1155: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LagLeadExprType -//line sql.y:6040 +//line sql.y:6049 { yyLOCAL = LagExprType } yyVAL.union = yyLOCAL - case 1155: + case 1156: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LagLeadExprType -//line sql.y:6044 +//line sql.y:6053 { yyLOCAL = LeadExprType } yyVAL.union = yyLOCAL - case 1156: + case 1157: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *WindowDefinition -//line sql.y:6050 +//line sql.y:6059 { yyLOCAL = &WindowDefinition{Name: yyDollar[1].identifierCI, WindowSpec: yyDollar[4].windowSpecificationUnion()} } yyVAL.union = yyLOCAL - case 1157: + case 1158: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL WindowDefinitions -//line sql.y:6056 +//line sql.y:6065 { yyLOCAL = WindowDefinitions{yyDollar[1].windowDefinitionUnion()} } yyVAL.union = yyLOCAL - case 1158: + case 1159: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:6060 +//line sql.y:6069 { yySLICE := (*WindowDefinitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].windowDefinitionUnion()) } - case 1159: + case 1160: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:6066 +//line sql.y:6075 { yyVAL.str = "" } - case 1160: + case 1161: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:6070 +//line sql.y:6079 { yyVAL.str = string(yyDollar[2].identifierCI.String()) } - case 1161: + case 1162: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL BoolVal -//line sql.y:6076 +//line sql.y:6085 { yyLOCAL = BoolVal(true) } yyVAL.union = yyLOCAL - case 1162: + case 1163: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL BoolVal -//line sql.y:6080 +//line sql.y:6089 { yyLOCAL = BoolVal(false) } yyVAL.union = yyLOCAL - case 1163: + case 1164: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:6087 +//line sql.y:6096 { yyLOCAL = IsTrueOp } yyVAL.union = yyLOCAL - case 1164: + case 1165: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:6091 +//line sql.y:6100 { yyLOCAL = IsNotTrueOp } yyVAL.union = yyLOCAL - case 1165: + case 1166: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:6095 +//line sql.y:6104 { yyLOCAL = IsFalseOp } yyVAL.union = yyLOCAL - case 1166: + case 1167: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:6099 +//line sql.y:6108 { yyLOCAL = IsNotFalseOp } yyVAL.union = yyLOCAL - case 1167: + case 1168: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6105 +//line sql.y:6114 { yyLOCAL = EqualOp } yyVAL.union = yyLOCAL - case 1168: + case 1169: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6109 +//line sql.y:6118 { yyLOCAL = LessThanOp } yyVAL.union = yyLOCAL - case 1169: + case 1170: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6113 +//line sql.y:6122 { yyLOCAL = GreaterThanOp } yyVAL.union = yyLOCAL - case 1170: + case 1171: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6117 +//line sql.y:6126 { yyLOCAL = LessEqualOp } yyVAL.union = yyLOCAL - case 1171: + case 1172: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6121 +//line sql.y:6130 { yyLOCAL = GreaterEqualOp } yyVAL.union = yyLOCAL - case 1172: + case 1173: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6125 +//line sql.y:6134 { yyLOCAL = NotEqualOp } yyVAL.union = yyLOCAL - case 1173: + case 1174: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6129 +//line sql.y:6138 { yyLOCAL = NullSafeEqualOp } yyVAL.union = yyLOCAL - case 1174: + case 1175: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:6135 +//line sql.y:6144 { yyLOCAL = yyDollar[1].valTupleUnion() } yyVAL.union = yyLOCAL - case 1175: + case 1176: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:6139 +//line sql.y:6148 { yyLOCAL = yyDollar[1].subqueryUnion() } yyVAL.union = yyLOCAL - case 1176: + case 1177: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:6143 +//line sql.y:6152 { yyLOCAL = ListArg(yyDollar[1].str[2:]) bindVariable(yylex, yyDollar[1].str[2:]) } yyVAL.union = yyLOCAL - case 1177: + case 1178: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Subquery -//line sql.y:6150 +//line sql.y:6159 { yyLOCAL = &Subquery{yyDollar[1].selStmtUnion()} } yyVAL.union = yyLOCAL - case 1178: + case 1179: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Exprs -//line sql.y:6156 +//line sql.y:6165 { yyLOCAL = Exprs{yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1179: + case 1180: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:6160 +//line sql.y:6169 { yySLICE := (*Exprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].exprUnion()) } - case 1180: + case 1181: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6170 +//line sql.y:6179 { yyLOCAL = &FuncExpr{Name: yyDollar[1].identifierCI, Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1181: + case 1182: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6174 +//line sql.y:6183 { yyLOCAL = &FuncExpr{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCI, Exprs: yyDollar[5].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1182: + case 1183: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6184 +//line sql.y:6193 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("left"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1183: + case 1184: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6188 +//line sql.y:6197 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("right"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1184: + case 1185: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6192 +//line sql.y:6201 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1185: + case 1186: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6196 +//line sql.y:6205 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1186: + case 1187: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6200 +//line sql.y:6209 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1187: + case 1188: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6204 +//line sql.y:6213 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1188: + case 1189: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6208 +//line sql.y:6217 { yyLOCAL = &CaseExpr{Expr: yyDollar[2].exprUnion(), Whens: yyDollar[3].whensUnion(), Else: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1189: + case 1190: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6212 +//line sql.y:6221 { yyLOCAL = &ValuesFuncExpr{Name: yyDollar[3].colNameUnion()} } yyVAL.union = yyLOCAL - case 1190: + case 1191: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6216 +//line sql.y:6225 { yyLOCAL = &InsertExpr{Str: yyDollar[3].exprUnion(), Pos: yyDollar[5].exprUnion(), Len: yyDollar[7].exprUnion(), NewStr: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1191: + case 1192: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6220 +//line sql.y:6229 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1192: + case 1193: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6231 +//line sql.y:6240 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("utc_date")} } yyVAL.union = yyLOCAL - case 1193: + case 1194: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6235 +//line sql.y:6244 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1194: + case 1195: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6241 +//line sql.y:6250 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("current_date")} } yyVAL.union = yyLOCAL - case 1195: + case 1196: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6245 +//line sql.y:6254 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("utc_time"), Fsp: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1196: + case 1197: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6250 +//line sql.y:6259 { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("current_time"), Fsp: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1197: + case 1198: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6254 +//line sql.y:6263 { yyLOCAL = &CountStar{} } yyVAL.union = yyLOCAL - case 1198: + case 1199: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6258 +//line sql.y:6267 { yyLOCAL = &Count{Distinct: yyDollar[3].booleanUnion(), Args: yyDollar[4].exprsUnion()} } yyVAL.union = yyLOCAL - case 1199: + case 1200: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6262 +//line sql.y:6271 { yyLOCAL = &Max{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1200: + case 1201: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6266 +//line sql.y:6275 { yyLOCAL = &Min{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1201: + case 1202: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6270 +//line sql.y:6279 { yyLOCAL = &Sum{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1202: + case 1203: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6274 +//line sql.y:6283 { yyLOCAL = &Avg{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1203: + case 1204: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6278 +//line sql.y:6287 { yyLOCAL = &BitAnd{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1204: + case 1205: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6282 +//line sql.y:6291 { yyLOCAL = &BitOr{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1205: + case 1206: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6286 +//line sql.y:6295 { yyLOCAL = &BitXor{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1206: + case 1207: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6290 +//line sql.y:6299 { yyLOCAL = &Std{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1207: + case 1208: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6294 +//line sql.y:6303 { yyLOCAL = &StdDev{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1208: + case 1209: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6298 +//line sql.y:6307 { yyLOCAL = &StdPop{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1209: + case 1210: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6302 +//line sql.y:6311 { yyLOCAL = &StdSamp{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1210: + case 1211: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6306 +//line sql.y:6315 { yyLOCAL = &VarPop{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1211: + case 1212: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6310 +//line sql.y:6319 { yyLOCAL = &VarSamp{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1212: + case 1213: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6314 +//line sql.y:6323 { yyLOCAL = &Variance{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1213: + case 1214: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6318 +//line sql.y:6327 { yyLOCAL = &GroupConcatExpr{Distinct: yyDollar[3].booleanUnion(), Exprs: yyDollar[4].exprsUnion(), OrderBy: yyDollar[5].orderByUnion(), Separator: yyDollar[6].str, Limit: yyDollar[7].limitUnion()} } yyVAL.union = yyLOCAL - case 1214: + case 1215: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6322 +//line sql.y:6331 { yyLOCAL = &TimestampFuncExpr{Name: string("timestampadd"), Unit: yyDollar[3].identifierCI.String(), Expr1: yyDollar[5].exprUnion(), Expr2: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1215: + case 1216: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6326 +//line sql.y:6335 { yyLOCAL = &TimestampFuncExpr{Name: string("timestampdiff"), Unit: yyDollar[3].identifierCI.String(), Expr1: yyDollar[5].exprUnion(), Expr2: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1216: + case 1217: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6330 +//line sql.y:6339 { yyLOCAL = &ExtractFuncExpr{IntervalTypes: yyDollar[3].intervalTypeUnion(), Expr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1217: + case 1218: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6334 +//line sql.y:6343 { yyLOCAL = &WeightStringFuncExpr{Expr: yyDollar[3].exprUnion(), As: yyDollar[4].convertTypeUnion()} } yyVAL.union = yyLOCAL - case 1218: + case 1219: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6338 +//line sql.y:6347 { yyLOCAL = &JSONPrettyExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1219: + case 1220: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6342 +//line sql.y:6351 { yyLOCAL = &JSONStorageFreeExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1220: + case 1221: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6346 +//line sql.y:6355 { yyLOCAL = &JSONStorageSizeExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1221: + case 1222: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6350 +//line sql.y:6359 { yyLOCAL = &TrimFuncExpr{TrimFuncType: LTrimType, StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1222: + case 1223: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6354 +//line sql.y:6363 { yyLOCAL = &TrimFuncExpr{TrimFuncType: RTrimType, StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1223: + case 1224: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:6358 +//line sql.y:6367 { yyLOCAL = &TrimFuncExpr{Type: yyDollar[3].trimTypeUnion(), TrimArg: yyDollar[4].exprUnion(), StringArg: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 1224: + case 1225: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6362 +//line sql.y:6371 { yyLOCAL = &TrimFuncExpr{StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1225: + case 1226: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6366 +//line sql.y:6375 { yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1226: + case 1227: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6370 +//line sql.y:6379 { yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion(), Charset: yyDollar[5].str} } yyVAL.union = yyLOCAL - case 1227: + case 1228: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6374 +//line sql.y:6383 { yyLOCAL = &TrimFuncExpr{TrimArg: yyDollar[3].exprUnion(), StringArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1228: + case 1229: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6378 +//line sql.y:6387 { yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1229: + case 1230: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6382 +//line sql.y:6391 { yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion(), Pos: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1230: + case 1231: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6386 +//line sql.y:6395 { yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1231: + case 1232: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6390 +//line sql.y:6399 { yyLOCAL = &LockingFunc{Type: GetLock, Name: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1232: + case 1233: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6394 +//line sql.y:6403 { yyLOCAL = &LockingFunc{Type: IsFreeLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1233: + case 1234: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6398 +//line sql.y:6407 { yyLOCAL = &LockingFunc{Type: IsUsedLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1234: + case 1235: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6402 +//line sql.y:6411 { yyLOCAL = &LockingFunc{Type: ReleaseAllLocks} } yyVAL.union = yyLOCAL - case 1235: + case 1236: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6406 +//line sql.y:6415 { yyLOCAL = &LockingFunc{Type: ReleaseLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1236: + case 1237: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6410 +//line sql.y:6419 { yyLOCAL = &JSONSchemaValidFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1237: + case 1238: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6414 +//line sql.y:6423 { yyLOCAL = &JSONSchemaValidationReportFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1238: + case 1239: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6418 +//line sql.y:6427 { yyLOCAL = &JSONArrayExpr{Params: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL - case 1239: + case 1240: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6422 +//line sql.y:6431 { yyLOCAL = &JSONObjectExpr{Params: yyDollar[3].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1240: + case 1241: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6426 +//line sql.y:6435 { yyLOCAL = &JSONQuoteExpr{StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1241: + case 1242: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6430 +//line sql.y:6439 { yyLOCAL = &JSONContainsExpr{Target: yyDollar[3].exprUnion(), Candidate: yyDollar[5].exprsUnion()[0], PathList: yyDollar[5].exprsUnion()[1:]} } yyVAL.union = yyLOCAL - case 1242: + case 1243: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6434 +//line sql.y:6443 { yyLOCAL = &JSONContainsPathExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), PathList: yyDollar[7].exprsUnion()} } yyVAL.union = yyLOCAL - case 1243: + case 1244: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6438 +//line sql.y:6447 { yyLOCAL = &JSONExtractExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1244: + case 1245: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6442 +//line sql.y:6451 { yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1245: + case 1246: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6446 +//line sql.y:6455 { yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1246: + case 1247: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6450 +//line sql.y:6459 { yyLOCAL = &JSONOverlapsExpr{JSONDoc1: yyDollar[3].exprUnion(), JSONDoc2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1247: + case 1248: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6454 +//line sql.y:6463 { yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1248: + case 1249: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6458 +//line sql.y:6467 { yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion(), EscapeChar: yyDollar[9].exprsUnion()[0], PathList: yyDollar[9].exprsUnion()[1:]} } yyVAL.union = yyLOCAL - case 1249: + case 1250: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:6462 +//line sql.y:6471 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion()} } yyVAL.union = yyLOCAL - case 1250: + case 1251: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6466 +//line sql.y:6475 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()} } yyVAL.union = yyLOCAL - case 1251: + case 1252: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6470 +//line sql.y:6479 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()} } yyVAL.union = yyLOCAL - case 1252: + case 1253: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr -//line sql.y:6474 +//line sql.y:6483 { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()} } yyVAL.union = yyLOCAL - case 1253: + case 1254: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6478 +//line sql.y:6487 { yyLOCAL = &JSONAttributesExpr{Type: DepthAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1254: + case 1255: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6482 +//line sql.y:6491 { yyLOCAL = &JSONAttributesExpr{Type: ValidAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1255: + case 1256: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6486 +//line sql.y:6495 { yyLOCAL = &JSONAttributesExpr{Type: TypeAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1256: + case 1257: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6490 +//line sql.y:6499 { yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1257: + case 1258: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6494 +//line sql.y:6503 { yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1258: + case 1259: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6498 +//line sql.y:6507 { yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayAppendType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1259: + case 1260: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6502 +//line sql.y:6511 { yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1260: + case 1261: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6506 +//line sql.y:6515 { yyLOCAL = &JSONValueModifierExpr{Type: JSONInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1261: + case 1262: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6510 +//line sql.y:6519 { yyLOCAL = &JSONValueModifierExpr{Type: JSONReplaceType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1262: + case 1263: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6514 +//line sql.y:6523 { yyLOCAL = &JSONValueModifierExpr{Type: JSONSetType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1263: + case 1264: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6518 +//line sql.y:6527 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergeType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1264: + case 1265: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6522 +//line sql.y:6531 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePatchType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1265: + case 1266: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6526 +//line sql.y:6535 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePreserveType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1266: + case 1267: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6530 +//line sql.y:6539 { yyLOCAL = &JSONRemoveExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1267: + case 1268: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6534 +//line sql.y:6543 { yyLOCAL = &JSONUnquoteExpr{JSONValue: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1268: + case 1269: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6538 +//line sql.y:6547 { yyLOCAL = &ArgumentLessWindowExpr{Type: yyDollar[1].argumentLessWindowExprTypeUnion(), OverClause: yyDollar[4].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1269: + case 1270: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6542 +//line sql.y:6551 { yyLOCAL = &FirstOrLastValueExpr{Type: yyDollar[1].firstOrLastValueExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1270: + case 1271: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6546 +//line sql.y:6555 { yyLOCAL = &NtileExpr{N: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1271: + case 1272: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr -//line sql.y:6550 +//line sql.y:6559 { yyLOCAL = &NTHValueExpr{Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), FromFirstLastClause: yyDollar[7].fromFirstLastClauseUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1272: + case 1273: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6554 +//line sql.y:6563 { yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1273: + case 1274: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr -//line sql.y:6558 +//line sql.y:6567 { yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), Default: yyDollar[6].exprUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1278: + case 1279: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6568 +//line sql.y:6577 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1279: + case 1280: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6572 +//line sql.y:6581 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1280: + case 1281: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6576 +//line sql.y:6585 { yyLOCAL = yyDollar[1].variableUnion() } yyVAL.union = yyLOCAL - case 1281: + case 1282: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6580 +//line sql.y:6589 { yyLOCAL = NewArgument(yyDollar[1].str[1:]) bindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL - case 1282: + case 1283: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:6586 +//line sql.y:6595 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1283: + case 1284: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6590 +//line sql.y:6599 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1284: + case 1285: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6596 +//line sql.y:6605 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1285: + case 1286: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6600 +//line sql.y:6609 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1286: + case 1287: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6604 +//line sql.y:6613 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1287: + case 1288: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6608 +//line sql.y:6617 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1288: + case 1289: yyDollar = yyS[yypt-14 : yypt+1] var yyLOCAL Expr -//line sql.y:6612 +//line sql.y:6621 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()} } yyVAL.union = yyLOCAL - case 1289: + case 1290: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6617 +//line sql.y:6626 { yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1290: + case 1291: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6621 +//line sql.y:6630 { yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), MatchType: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1291: + case 1292: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6625 +//line sql.y:6634 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1292: + case 1293: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6629 +//line sql.y:6638 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1293: + case 1294: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6633 +//line sql.y:6642 { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1294: + case 1295: yyDollar = yyS[yypt-14 : yypt+1] var yyLOCAL Expr -//line sql.y:6637 +//line sql.y:6646 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()} } yyVAL.union = yyLOCAL - case 1295: + case 1296: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6642 +//line sql.y:6651 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1296: + case 1297: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6646 +//line sql.y:6655 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1297: + case 1298: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6650 +//line sql.y:6659 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1298: + case 1299: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6654 +//line sql.y:6663 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), MatchType: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1299: + case 1300: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6661 +//line sql.y:6670 { yyLOCAL = &ExtractValueExpr{Fragment: yyDollar[3].exprUnion(), XPathExpr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1300: + case 1301: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6665 +//line sql.y:6674 { yyLOCAL = &UpdateXMLExpr{Target: yyDollar[3].exprUnion(), XPathExpr: yyDollar[5].exprUnion(), NewXML: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1301: + case 1302: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6671 +//line sql.y:6680 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatBytesType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1302: + case 1303: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6675 +//line sql.y:6684 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatPicoTimeType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1303: + case 1304: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6679 +//line sql.y:6688 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsCurrentThreadIDType} } yyVAL.union = yyLOCAL - case 1304: + case 1305: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6683 +//line sql.y:6692 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsThreadIDType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1305: + case 1306: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6689 +//line sql.y:6698 { yyLOCAL = >IDFuncExpr{Type: GTIDSubsetType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1306: + case 1307: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6693 +//line sql.y:6702 { yyLOCAL = >IDFuncExpr{Type: GTIDSubtractType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1307: + case 1308: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6697 +//line sql.y:6706 { yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1308: + case 1309: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6701 +//line sql.y:6710 { yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1309: + case 1310: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6705 +//line sql.y:6714 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1310: + case 1311: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6709 +//line sql.y:6718 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1311: + case 1312: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6713 +//line sql.y:6722 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion(), Channel: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1312: + case 1313: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6718 +//line sql.y:6727 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1313: + case 1314: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6722 +//line sql.y:6731 { yyLOCAL = yyDollar[2].convertTypeUnion() } yyVAL.union = yyLOCAL - case 1314: + case 1315: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6728 +//line sql.y:6737 { } - case 1315: + case 1316: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6730 +//line sql.y:6739 { yyLOCAL = IntervalDayHour } yyVAL.union = yyLOCAL - case 1316: + case 1317: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6734 +//line sql.y:6743 { yyLOCAL = IntervalDayMicrosecond } yyVAL.union = yyLOCAL - case 1317: + case 1318: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6738 +//line sql.y:6747 { yyLOCAL = IntervalDayMinute } yyVAL.union = yyLOCAL - case 1318: + case 1319: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6742 +//line sql.y:6751 { yyLOCAL = IntervalDaySecond } yyVAL.union = yyLOCAL - case 1319: + case 1320: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6746 +//line sql.y:6755 { yyLOCAL = IntervalHourMicrosecond } yyVAL.union = yyLOCAL - case 1320: + case 1321: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6750 +//line sql.y:6759 { yyLOCAL = IntervalHourMinute } yyVAL.union = yyLOCAL - case 1321: + case 1322: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6754 +//line sql.y:6763 { yyLOCAL = IntervalHourSecond } yyVAL.union = yyLOCAL - case 1322: + case 1323: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6758 +//line sql.y:6767 { yyLOCAL = IntervalMinuteMicrosecond } yyVAL.union = yyLOCAL - case 1323: + case 1324: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6762 +//line sql.y:6771 { yyLOCAL = IntervalMinuteSecond } yyVAL.union = yyLOCAL - case 1324: + case 1325: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6766 +//line sql.y:6775 { yyLOCAL = IntervalSecondMicrosecond } yyVAL.union = yyLOCAL - case 1325: + case 1326: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6770 +//line sql.y:6779 { yyLOCAL = IntervalYearMonth } yyVAL.union = yyLOCAL - case 1326: + case 1327: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6776 +//line sql.y:6785 { yyLOCAL = IntervalDay } yyVAL.union = yyLOCAL - case 1327: + case 1328: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6780 +//line sql.y:6789 { yyLOCAL = IntervalWeek } yyVAL.union = yyLOCAL - case 1328: + case 1329: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6784 +//line sql.y:6793 { yyLOCAL = IntervalHour } yyVAL.union = yyLOCAL - case 1329: + case 1330: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6788 +//line sql.y:6797 { yyLOCAL = IntervalMinute } yyVAL.union = yyLOCAL - case 1330: + case 1331: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6792 +//line sql.y:6801 { yyLOCAL = IntervalMonth } yyVAL.union = yyLOCAL - case 1331: + case 1332: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6796 +//line sql.y:6805 { yyLOCAL = IntervalQuarter } yyVAL.union = yyLOCAL - case 1332: + case 1333: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6800 +//line sql.y:6809 { yyLOCAL = IntervalSecond } yyVAL.union = yyLOCAL - case 1333: + case 1334: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6804 +//line sql.y:6813 { yyLOCAL = IntervalMicrosecond } yyVAL.union = yyLOCAL - case 1334: + case 1335: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6808 +//line sql.y:6817 { yyLOCAL = IntervalYear } yyVAL.union = yyLOCAL - case 1337: + case 1338: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:6818 +//line sql.y:6827 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1338: + case 1339: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6822 +//line sql.y:6831 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1339: + case 1340: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6826 +//line sql.y:6835 { yyLOCAL = NewIntLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 1340: + case 1341: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6830 +//line sql.y:6839 { yyLOCAL = NewArgument(yyDollar[2].str[1:]) bindVariable(yylex, yyDollar[2].str[1:]) } yyVAL.union = yyLOCAL - case 1341: + case 1342: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6841 +//line sql.y:6850 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("if"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1342: + case 1343: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6845 +//line sql.y:6854 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("database"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1343: + case 1344: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6849 +//line sql.y:6858 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("schema"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1344: + case 1345: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6853 +//line sql.y:6862 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("mod"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1345: + case 1346: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6857 +//line sql.y:6866 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("replace"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1346: + case 1347: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6863 +//line sql.y:6872 { yyLOCAL = NoOption } yyVAL.union = yyLOCAL - case 1347: + case 1348: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6867 +//line sql.y:6876 { yyLOCAL = BooleanModeOpt } yyVAL.union = yyLOCAL - case 1348: + case 1349: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6871 +//line sql.y:6880 { yyLOCAL = NaturalLanguageModeOpt } yyVAL.union = yyLOCAL - case 1349: + case 1350: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6875 +//line sql.y:6884 { yyLOCAL = NaturalLanguageModeWithQueryExpansionOpt } yyVAL.union = yyLOCAL - case 1350: + case 1351: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6879 +//line sql.y:6888 { yyLOCAL = QueryExpansionOpt } yyVAL.union = yyLOCAL - case 1351: + case 1352: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6885 +//line sql.y:6894 { yyVAL.str = string(yyDollar[1].identifierCI.String()) } - case 1352: + case 1353: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6889 +//line sql.y:6898 { yyVAL.str = string(yyDollar[1].str) } - case 1353: + case 1354: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6893 +//line sql.y:6902 { yyVAL.str = string(yyDollar[1].str) } - case 1354: + case 1355: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6899 +//line sql.y:6908 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1355: + case 1356: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6903 +//line sql.y:6912 { yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: NewIntLiteral(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 1356: + case 1357: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6907 +//line sql.y:6916 { yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: NewIntLiteral(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 1357: + case 1358: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6913 +//line sql.y:6922 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1358: + case 1359: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6917 +//line sql.y:6926 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion(), Charset: yyDollar[3].columnCharset} } yyVAL.union = yyLOCAL - case 1359: + case 1360: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6921 +//line sql.y:6930 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1360: + case 1361: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6925 +//line sql.y:6934 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1361: + case 1362: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6929 +//line sql.y:6938 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} yyLOCAL.Length = yyDollar[2].LengthScaleOption.Length yyLOCAL.Scale = yyDollar[2].LengthScaleOption.Scale } yyVAL.union = yyLOCAL - case 1362: + case 1363: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6935 +//line sql.y:6944 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1363: + case 1364: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6939 +//line sql.y:6948 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1364: + case 1365: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6943 +//line sql.y:6952 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1365: + case 1366: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6947 +//line sql.y:6956 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1366: + case 1367: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6951 +//line sql.y:6960 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1367: + case 1368: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6955 +//line sql.y:6964 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1368: + case 1369: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6959 +//line sql.y:6968 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1369: + case 1370: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6963 +//line sql.y:6972 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1370: + case 1371: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6967 +//line sql.y:6976 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1371: + case 1372: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6971 +//line sql.y:6980 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1372: + case 1373: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:6977 +//line sql.y:6986 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1373: + case 1374: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:6981 +//line sql.y:6990 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1374: + case 1375: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:6986 +//line sql.y:6995 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1375: + case 1376: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6990 +//line sql.y:6999 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1376: + case 1377: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:6995 +//line sql.y:7004 { yyVAL.str = string("") } - case 1377: + case 1378: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:6999 +//line sql.y:7008 { yyVAL.str = " separator " + encodeSQLString(yyDollar[2].str) } - case 1378: + case 1379: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*When -//line sql.y:7005 +//line sql.y:7014 { yyLOCAL = []*When{yyDollar[1].whenUnion()} } yyVAL.union = yyLOCAL - case 1379: + case 1380: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7009 +//line sql.y:7018 { yySLICE := (*[]*When)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].whenUnion()) } - case 1380: + case 1381: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *When -//line sql.y:7015 +//line sql.y:7024 { yyLOCAL = &When{Cond: yyDollar[2].exprUnion(), Val: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1381: + case 1382: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:7020 +//line sql.y:7029 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1382: + case 1383: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7024 +//line sql.y:7033 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1383: + case 1384: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ColName -//line sql.y:7030 +//line sql.y:7039 { yyLOCAL = &ColName{Name: yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 1384: + case 1385: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ColName -//line sql.y:7034 +//line sql.y:7043 { yyLOCAL = &ColName{Name: NewIdentifierCI(string(yyDollar[1].str))} } yyVAL.union = yyLOCAL - case 1385: + case 1386: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColName -//line sql.y:7038 +//line sql.y:7047 { yyLOCAL = &ColName{Qualifier: TableName{Name: yyDollar[1].identifierCS}, Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 1386: + case 1387: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ColName -//line sql.y:7042 +//line sql.y:7051 { yyLOCAL = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}, Name: yyDollar[5].identifierCI} } yyVAL.union = yyLOCAL - case 1387: + case 1388: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7048 +//line sql.y:7057 { yyLOCAL = yyDollar[1].colNameUnion() } yyVAL.union = yyLOCAL - case 1388: + case 1389: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7052 +//line sql.y:7061 { yyLOCAL = &Offset{V: convertStringToInt(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1389: + case 1390: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7058 +//line sql.y:7067 { // TODO(sougou): Deprecate this construct. if yyDollar[1].identifierCI.Lowered() != "value" { @@ -19528,498 +19580,498 @@ yydefault: yyLOCAL = NewIntLiteral("1") } yyVAL.union = yyLOCAL - case 1390: + case 1391: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7067 +//line sql.y:7076 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1391: + case 1392: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7071 +//line sql.y:7080 { yyLOCAL = NewArgument(yyDollar[1].str[1:]) bindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL - case 1392: + case 1393: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Exprs -//line sql.y:7077 +//line sql.y:7086 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1393: + case 1394: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Exprs -//line sql.y:7081 +//line sql.y:7090 { yyLOCAL = yyDollar[3].exprsUnion() } yyVAL.union = yyLOCAL - case 1394: + case 1395: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:7086 +//line sql.y:7095 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1395: + case 1396: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7090 +//line sql.y:7099 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1396: + case 1397: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *NamedWindow -//line sql.y:7096 +//line sql.y:7105 { yyLOCAL = &NamedWindow{yyDollar[2].windowDefinitionsUnion()} } yyVAL.union = yyLOCAL - case 1397: + case 1398: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7102 +//line sql.y:7111 { yyLOCAL = NamedWindows{yyDollar[1].namedWindowUnion()} } yyVAL.union = yyLOCAL - case 1398: + case 1399: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7106 +//line sql.y:7115 { yySLICE := (*NamedWindows)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].namedWindowUnion()) } - case 1399: + case 1400: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7111 +//line sql.y:7120 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1400: + case 1401: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7115 +//line sql.y:7124 { yyLOCAL = yyDollar[1].namedWindowsUnion() } yyVAL.union = yyLOCAL - case 1401: + case 1402: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7120 +//line sql.y:7129 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1402: + case 1403: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7124 +//line sql.y:7133 { yyLOCAL = yyDollar[1].orderByUnion() } yyVAL.union = yyLOCAL - case 1403: + case 1404: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7130 +//line sql.y:7139 { yyLOCAL = yyDollar[3].orderByUnion() } yyVAL.union = yyLOCAL - case 1404: + case 1405: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7136 +//line sql.y:7145 { yyLOCAL = OrderBy{yyDollar[1].orderUnion()} } yyVAL.union = yyLOCAL - case 1405: + case 1406: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7140 +//line sql.y:7149 { yySLICE := (*OrderBy)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].orderUnion()) } - case 1406: + case 1407: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Order -//line sql.y:7146 +//line sql.y:7155 { yyLOCAL = &Order{Expr: yyDollar[1].exprUnion(), Direction: yyDollar[2].orderDirectionUnion()} } yyVAL.union = yyLOCAL - case 1407: + case 1408: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7151 +//line sql.y:7160 { yyLOCAL = AscOrder } yyVAL.union = yyLOCAL - case 1408: + case 1409: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7155 +//line sql.y:7164 { yyLOCAL = AscOrder } yyVAL.union = yyLOCAL - case 1409: + case 1410: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7159 +//line sql.y:7168 { yyLOCAL = DescOrder } yyVAL.union = yyLOCAL - case 1410: + case 1411: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Limit -//line sql.y:7164 +//line sql.y:7173 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1411: + case 1412: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Limit -//line sql.y:7168 +//line sql.y:7177 { yyLOCAL = yyDollar[1].limitUnion() } yyVAL.union = yyLOCAL - case 1412: + case 1413: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Limit -//line sql.y:7174 +//line sql.y:7183 { yyLOCAL = &Limit{Rowcount: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1413: + case 1414: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Limit -//line sql.y:7178 +//line sql.y:7187 { yyLOCAL = &Limit{Offset: yyDollar[2].exprUnion(), Rowcount: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1414: + case 1415: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Limit -//line sql.y:7182 +//line sql.y:7191 { yyLOCAL = &Limit{Offset: yyDollar[4].exprUnion(), Rowcount: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1415: + case 1416: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7187 +//line sql.y:7196 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1416: + case 1417: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7191 +//line sql.y:7200 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1417: + case 1418: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7195 +//line sql.y:7204 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1418: + case 1419: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7199 +//line sql.y:7208 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1419: + case 1420: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []AlterOption -//line sql.y:7203 +//line sql.y:7212 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL - case 1420: + case 1421: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7213 +//line sql.y:7222 { yyLOCAL = &LockOption{Type: DefaultType} } yyVAL.union = yyLOCAL - case 1421: + case 1422: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7217 +//line sql.y:7226 { yyLOCAL = &LockOption{Type: NoneType} } yyVAL.union = yyLOCAL - case 1422: + case 1423: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7221 +//line sql.y:7230 { yyLOCAL = &LockOption{Type: SharedType} } yyVAL.union = yyLOCAL - case 1423: + case 1424: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7225 +//line sql.y:7234 { yyLOCAL = &LockOption{Type: ExclusiveType} } yyVAL.union = yyLOCAL - case 1424: + case 1425: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7231 +//line sql.y:7240 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1425: + case 1426: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7235 +//line sql.y:7244 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1426: + case 1427: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7239 +//line sql.y:7248 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1427: + case 1428: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7243 +//line sql.y:7252 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 1428: + case 1429: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7248 +//line sql.y:7257 { yyVAL.str = "" } - case 1429: + case 1430: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7252 +//line sql.y:7261 { yyVAL.str = string(yyDollar[3].str) } - case 1430: + case 1431: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7256 +//line sql.y:7265 { yyVAL.str = string(yyDollar[3].str) } - case 1431: + case 1432: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7260 +//line sql.y:7269 { yyVAL.str = string(yyDollar[3].str) } - case 1432: + case 1433: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7265 +//line sql.y:7274 { yyVAL.str = "" } - case 1433: + case 1434: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7269 +//line sql.y:7278 { yyVAL.str = yyDollar[3].str } - case 1434: + case 1435: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7275 +//line sql.y:7284 { yyVAL.str = string(yyDollar[1].str) } - case 1435: + case 1436: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7279 +//line sql.y:7288 { yyVAL.str = string(yyDollar[1].str) } - case 1436: + case 1437: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7284 +//line sql.y:7293 { yyVAL.str = "" } - case 1437: + case 1438: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:7288 +//line sql.y:7297 { yyVAL.str = yyDollar[2].str } - case 1438: + case 1439: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7293 +//line sql.y:7302 { yyVAL.str = "cascaded" } - case 1439: + case 1440: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7297 +//line sql.y:7306 { yyVAL.str = string(yyDollar[1].str) } - case 1440: + case 1441: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7301 +//line sql.y:7310 { yyVAL.str = string(yyDollar[1].str) } - case 1441: + case 1442: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL CheckOptions -//line sql.y:7306 +//line sql.y:7315 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1442: + case 1443: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckOptions -//line sql.y:7310 +//line sql.y:7319 { yyLOCAL = CheckOptions{yyDollar[1].checkTypeUnion()} } yyVAL.union = yyLOCAL - case 1443: + case 1444: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7314 +//line sql.y:7323 { yySLICE := (*CheckOptions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].checkTypeUnion()) } - case 1444: + case 1445: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL CheckType -//line sql.y:7320 +//line sql.y:7329 { yyLOCAL = Forupgrade } yyVAL.union = yyLOCAL - case 1445: + case 1446: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType -//line sql.y:7324 +//line sql.y:7333 { yyLOCAL = Fast } yyVAL.union = yyLOCAL - case 1446: + case 1447: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType -//line sql.y:7328 +//line sql.y:7337 { yyLOCAL = Quick } yyVAL.union = yyLOCAL - case 1447: + case 1448: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType -//line sql.y:7332 +//line sql.y:7341 { yyLOCAL = Medium } yyVAL.union = yyLOCAL - case 1448: + case 1449: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType -//line sql.y:7336 +//line sql.y:7345 { yyLOCAL = Extended } yyVAL.union = yyLOCAL - case 1449: + case 1450: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType -//line sql.y:7340 +//line sql.y:7349 { yyLOCAL = CHanged } yyVAL.union = yyLOCAL - case 1450: + case 1451: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Definer -//line sql.y:7346 +//line sql.y:7355 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1451: + case 1452: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Definer -//line sql.y:7350 +//line sql.y:7359 { yyLOCAL = yyDollar[3].definerUnion() } yyVAL.union = yyLOCAL - case 1452: + case 1453: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Definer -//line sql.y:7356 +//line sql.y:7365 { yyLOCAL = &Definer{ Name: string(yyDollar[1].str), } } yyVAL.union = yyLOCAL - case 1453: + case 1454: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Definer -//line sql.y:7362 +//line sql.y:7371 { yyLOCAL = &Definer{ Name: string(yyDollar[1].str), } } yyVAL.union = yyLOCAL - case 1454: + case 1455: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Definer -//line sql.y:7368 +//line sql.y:7377 { yyLOCAL = &Definer{ Name: yyDollar[1].str, @@ -20027,369 +20079,369 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1455: + case 1456: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7377 +//line sql.y:7386 { yyVAL.str = encodeSQLString(yyDollar[1].str) } - case 1456: + case 1457: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7381 +//line sql.y:7390 { yyVAL.str = formatIdentifier(yyDollar[1].str) } - case 1457: + case 1458: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7386 +//line sql.y:7395 { yyVAL.str = "" } - case 1458: + case 1459: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7390 +//line sql.y:7399 { yyVAL.str = formatAddress(yyDollar[1].str) } - case 1459: + case 1460: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Lock -//line sql.y:7396 +//line sql.y:7405 { yyLOCAL = ForUpdateLock } yyVAL.union = yyLOCAL - case 1460: + case 1461: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Lock -//line sql.y:7400 +//line sql.y:7409 { yyLOCAL = ShareModeLock } yyVAL.union = yyLOCAL - case 1461: + case 1462: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7406 +//line sql.y:7415 { yyLOCAL = &SelectInto{Type: IntoOutfileS3, FileName: encodeSQLString(yyDollar[4].str), Charset: yyDollar[5].columnCharset, FormatOption: yyDollar[6].str, ExportOption: yyDollar[7].str, Manifest: yyDollar[8].str, Overwrite: yyDollar[9].str} } yyVAL.union = yyLOCAL - case 1462: + case 1463: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7410 +//line sql.y:7419 { yyLOCAL = &SelectInto{Type: IntoDumpfile, FileName: encodeSQLString(yyDollar[3].str), Charset: ColumnCharset{}, FormatOption: "", ExportOption: "", Manifest: "", Overwrite: ""} } yyVAL.union = yyLOCAL - case 1463: + case 1464: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7414 +//line sql.y:7423 { yyLOCAL = &SelectInto{Type: IntoOutfile, FileName: encodeSQLString(yyDollar[3].str), Charset: yyDollar[4].columnCharset, FormatOption: "", ExportOption: yyDollar[5].str, Manifest: "", Overwrite: ""} } yyVAL.union = yyLOCAL - case 1464: + case 1465: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7419 +//line sql.y:7428 { yyVAL.str = "" } - case 1465: + case 1466: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7423 +//line sql.y:7432 { yyVAL.str = " format csv" + yyDollar[3].str } - case 1466: + case 1467: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7427 +//line sql.y:7436 { yyVAL.str = " format text" + yyDollar[3].str } - case 1467: + case 1468: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7432 +//line sql.y:7441 { yyVAL.str = "" } - case 1468: + case 1469: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7436 +//line sql.y:7445 { yyVAL.str = " header" } - case 1469: + case 1470: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7441 +//line sql.y:7450 { yyVAL.str = "" } - case 1470: + case 1471: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7445 +//line sql.y:7454 { yyVAL.str = " manifest on" } - case 1471: + case 1472: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7449 +//line sql.y:7458 { yyVAL.str = " manifest off" } - case 1472: + case 1473: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7454 +//line sql.y:7463 { yyVAL.str = "" } - case 1473: + case 1474: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7458 +//line sql.y:7467 { yyVAL.str = " overwrite on" } - case 1474: + case 1475: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7462 +//line sql.y:7471 { yyVAL.str = " overwrite off" } - case 1475: + case 1476: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7468 +//line sql.y:7477 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1476: + case 1477: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7473 +//line sql.y:7482 { yyVAL.str = "" } - case 1477: + case 1478: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7477 +//line sql.y:7486 { yyVAL.str = " lines" + yyDollar[2].str } - case 1478: + case 1479: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7483 +//line sql.y:7492 { yyVAL.str = yyDollar[1].str } - case 1479: + case 1480: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7487 +//line sql.y:7496 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1480: + case 1481: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7493 +//line sql.y:7502 { yyVAL.str = " starting by " + encodeSQLString(yyDollar[3].str) } - case 1481: + case 1482: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7497 +//line sql.y:7506 { yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str) } - case 1482: + case 1483: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7502 +//line sql.y:7511 { yyVAL.str = "" } - case 1483: + case 1484: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7506 +//line sql.y:7515 { yyVAL.str = " " + yyDollar[1].str + yyDollar[2].str } - case 1484: + case 1485: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7512 +//line sql.y:7521 { yyVAL.str = yyDollar[1].str } - case 1485: + case 1486: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7516 +//line sql.y:7525 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1486: + case 1487: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7522 +//line sql.y:7531 { yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str) } - case 1487: + case 1488: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:7526 +//line sql.y:7535 { yyVAL.str = yyDollar[1].str + " enclosed by " + encodeSQLString(yyDollar[4].str) } - case 1488: + case 1489: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7530 +//line sql.y:7539 { yyVAL.str = " escaped by " + encodeSQLString(yyDollar[3].str) } - case 1489: + case 1490: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7535 +//line sql.y:7544 { yyVAL.str = "" } - case 1490: + case 1491: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7539 +//line sql.y:7548 { yyVAL.str = " optionally" } - case 1491: + case 1492: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Insert -//line sql.y:7552 +//line sql.y:7561 { yyLOCAL = &Insert{Rows: yyDollar[2].valuesUnion()} } yyVAL.union = yyLOCAL - case 1492: + case 1493: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Insert -//line sql.y:7556 +//line sql.y:7565 { yyLOCAL = &Insert{Rows: yyDollar[1].selStmtUnion()} } yyVAL.union = yyLOCAL - case 1493: + case 1494: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *Insert -//line sql.y:7560 +//line sql.y:7569 { yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[5].valuesUnion()} } yyVAL.union = yyLOCAL - case 1494: + case 1495: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Insert -//line sql.y:7564 +//line sql.y:7573 { yyLOCAL = &Insert{Columns: []IdentifierCI{}, Rows: yyDollar[4].valuesUnion()} } yyVAL.union = yyLOCAL - case 1495: + case 1496: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Insert -//line sql.y:7568 +//line sql.y:7577 { yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[4].selStmtUnion()} } yyVAL.union = yyLOCAL - case 1496: + case 1497: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:7574 +//line sql.y:7583 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 1497: + case 1498: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Columns -//line sql.y:7578 +//line sql.y:7587 { yyLOCAL = Columns{yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL - case 1498: + case 1499: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7582 +//line sql.y:7591 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 1499: + case 1500: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:7586 +//line sql.y:7595 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[5].identifierCI) } - case 1500: + case 1501: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7591 +//line sql.y:7600 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1501: + case 1502: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7595 +//line sql.y:7604 { yyLOCAL = yyDollar[5].updateExprsUnion() } yyVAL.union = yyLOCAL - case 1502: + case 1503: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Values -//line sql.y:7601 +//line sql.y:7610 { yyLOCAL = Values{yyDollar[1].valTupleUnion()} } yyVAL.union = yyLOCAL - case 1503: + case 1504: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7605 +//line sql.y:7614 { yySLICE := (*Values)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].valTupleUnion()) } - case 1504: + case 1505: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7611 +//line sql.y:7620 { yyLOCAL = yyDollar[1].valTupleUnion() } yyVAL.union = yyLOCAL - case 1505: + case 1506: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7615 +//line sql.y:7624 { yyLOCAL = ValTuple{} } yyVAL.union = yyLOCAL - case 1506: + case 1507: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7621 +//line sql.y:7630 { yyLOCAL = ValTuple(yyDollar[2].exprsUnion()) } yyVAL.union = yyLOCAL - case 1507: + case 1508: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7625 +//line sql.y:7634 { yyLOCAL = ValTuple(yyDollar[3].exprsUnion()) } yyVAL.union = yyLOCAL - case 1508: + case 1509: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7630 +//line sql.y:7639 { if len(yyDollar[1].valTupleUnion()) == 1 { yyLOCAL = yyDollar[1].valTupleUnion()[0] @@ -20398,273 +20450,273 @@ yydefault: } } yyVAL.union = yyLOCAL - case 1509: + case 1510: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7640 +//line sql.y:7649 { yyLOCAL = UpdateExprs{yyDollar[1].updateExprUnion()} } yyVAL.union = yyLOCAL - case 1510: + case 1511: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7644 +//line sql.y:7653 { yySLICE := (*UpdateExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].updateExprUnion()) } - case 1511: + case 1512: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *UpdateExpr -//line sql.y:7650 +//line sql.y:7659 { yyLOCAL = &UpdateExpr{Name: yyDollar[1].colNameUnion(), Expr: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1513: + case 1514: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7657 +//line sql.y:7666 { yyVAL.str = "charset" } - case 1516: + case 1517: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7667 +//line sql.y:7676 { yyLOCAL = NewStrLiteral(yyDollar[1].identifierCI.String()) } yyVAL.union = yyLOCAL - case 1517: + case 1518: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7671 +//line sql.y:7680 { yyLOCAL = NewStrLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1518: + case 1519: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7675 +//line sql.y:7684 { yyLOCAL = &Default{} } yyVAL.union = yyLOCAL - case 1521: + case 1522: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7684 +//line sql.y:7693 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1522: + case 1523: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:7686 +//line sql.y:7695 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1523: + case 1524: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7689 +//line sql.y:7698 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1524: + case 1525: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:7691 +//line sql.y:7700 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1525: + case 1526: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7694 +//line sql.y:7703 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1526: + case 1527: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL bool -//line sql.y:7696 +//line sql.y:7705 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1527: + case 1528: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Ignore -//line sql.y:7699 +//line sql.y:7708 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1528: + case 1529: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Ignore -//line sql.y:7701 +//line sql.y:7710 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1529: + case 1530: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7704 +//line sql.y:7713 { yyVAL.empty = struct{}{} } - case 1530: + case 1531: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7706 +//line sql.y:7715 { yyVAL.empty = struct{}{} } - case 1531: + case 1532: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7708 +//line sql.y:7717 { yyVAL.empty = struct{}{} } - case 1532: + case 1533: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:7712 +//line sql.y:7721 { yyLOCAL = &CallProc{Name: yyDollar[2].tableName, Params: yyDollar[4].exprsUnion()} } yyVAL.union = yyLOCAL - case 1533: + case 1534: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Exprs -//line sql.y:7717 +//line sql.y:7726 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1534: + case 1535: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Exprs -//line sql.y:7721 +//line sql.y:7730 { yyLOCAL = yyDollar[1].exprsUnion() } yyVAL.union = yyLOCAL - case 1535: + case 1536: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:7726 +//line sql.y:7735 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1536: + case 1537: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:7728 +//line sql.y:7737 { yyLOCAL = []*IndexOption{yyDollar[1].indexOptionUnion()} } yyVAL.union = yyLOCAL - case 1537: + case 1538: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:7732 +//line sql.y:7741 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), String: string(yyDollar[2].identifierCI.String())} } yyVAL.union = yyLOCAL - case 1538: + case 1539: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7738 +//line sql.y:7747 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 1539: + case 1540: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7742 +//line sql.y:7751 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 1541: + case 1542: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7749 +//line sql.y:7758 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 1542: + case 1543: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7755 +//line sql.y:7764 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1543: + case 1544: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7759 +//line sql.y:7768 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1544: + case 1545: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7765 +//line sql.y:7774 { yyVAL.identifierCS = NewIdentifierCS("") } - case 1545: + case 1546: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7769 +//line sql.y:7778 { yyVAL.identifierCS = yyDollar[1].identifierCS } - case 1547: + case 1548: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7776 +//line sql.y:7785 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 2113: + case 2115: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8369 +//line sql.y:8379 { if incNesting(yylex) { yylex.Error("max nesting level reached") return 1 } } - case 2114: + case 2116: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8378 +//line sql.y:8388 { decNesting(yylex) } - case 2115: + case 2117: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8383 +//line sql.y:8393 { skipToEnd(yylex) } - case 2116: + case 2118: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8388 +//line sql.y:8398 { skipToEnd(yylex) } - case 2117: + case 2119: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8392 +//line sql.y:8402 { skipToEnd(yylex) } - case 2118: + case 2120: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8396 +//line sql.y:8406 { skipToEnd(yylex) } diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index ad00e4734b..a2845738ec 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -326,7 +326,7 @@ func bindVariable(yylex yyLexer, bvar string) { // Throttler tokens %token VITESS_THROTTLER // DML JOB tokens -%token DML_JOB DETAILS +%token DML_JOB DETAILS TIME_PERIOD // Transaction Tokens %token BEGIN START TRANSACTION COMMIT ROLLBACK SAVEPOINT RELEASE WORK @@ -3504,6 +3504,15 @@ alter_statement: Type: UnthrottleAllDMLJobType, } } + | ALTER comment_opt DML_JOB STRING TIME_PERIOD STRING STRING + { + $$ = &AlterDMLJob{ + Type: SetRunningTimePeriodType, + UUID: string($4), + TimePeriodStart: string($6), + TimePeriodEnd: string($7), + } + } @@ -8324,6 +8333,7 @@ non_reserved_keyword: | DML_JOB | DML_JOBS | DETAILS +| TIME_PERIOD | VITESS_REPLICATION_STATUS | VITESS_SHARDS | VITESS_TABLETS diff --git a/go/vt/vtgate/executor.go b/go/vt/vtgate/executor.go index 783ad2299b..976b16c412 100644 --- a/go/vt/vtgate/executor.go +++ b/go/vt/vtgate/executor.go @@ -1556,7 +1556,7 @@ func (e *Executor) SetFailPoint(command string, key string, value string) error return nil } -func (e *Executor) SubmitDMLJob(command, sql, uuid, tableSchema string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (e *Executor) SubmitDMLJob(command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { ctx := context.Background() // todo newborn22, scatterConn or txnConn? // todo ,这个写法丑陋,要直接拿到primary @@ -1568,7 +1568,7 @@ func (e *Executor) SubmitDMLJob(command, sql, uuid, tableSchema string, timeGapI break } } - return th.Conn.SubmitDMLJob(ctx, command, sql, uuid, tableSchema, timeGapInMs, batchSize, postponeLaunch, autoRetry) + return th.Conn.SubmitDMLJob(ctx, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd, timeGapInMs, batchSize, postponeLaunch, autoRetry) } func (e *Executor) checkThatPlanIsValid(stmt sqlparser.Statement, plan *engine.Plan) error { diff --git a/go/vt/vtgate/plan_execute.go b/go/vt/vtgate/plan_execute.go index b188f88763..e55c185208 100644 --- a/go/vt/vtgate/plan_execute.go +++ b/go/vt/vtgate/plan_execute.go @@ -449,8 +449,8 @@ func IsSubmitDMLJob(stmt sqlparser.Statement) bool { func HandleDMLJobSubmit(stmt sqlparser.Statement, vcursor *vcursorImpl, sql string) (*sqltypes.Result, error) { // todo newborn22,检查是否在事务中,如果是则报错 if IsSubmitDMLJob(stmt) { - timeGapInMs, batchSize, postponeLaunch, autoRetry := sqlparser.GetDMLJobArgs(stmt) - qr, err := vcursor.executor.SubmitDMLJob("submit_job", sql, "", vcursor.keyspace, timeGapInMs, batchSize, postponeLaunch, autoRetry) + timeGapInMs, batchSize, postponeLaunch, autoRetry, timePeriodStart, timePeriodEnd := sqlparser.GetDMLJobArgs(stmt) + qr, err := vcursor.executor.SubmitDMLJob("submit_job", sql, "", vcursor.keyspace, timePeriodStart, timePeriodEnd, timeGapInMs, batchSize, postponeLaunch, autoRetry) // todo ,在这个地方把qr写回到前端 if qr != nil { if qr.RowsAffected == 1 { diff --git a/go/vt/vtgate/vcursor_impl.go b/go/vt/vtgate/vcursor_impl.go index c98d5c8ffa..4381030272 100644 --- a/go/vt/vtgate/vcursor_impl.go +++ b/go/vt/vtgate/vcursor_impl.go @@ -93,7 +93,7 @@ type iExecute interface { reloadExec(ctx context.Context, reloadType *sqlparser.ReloadType) error VSchema() *vindexes.VSchema SetFailPoint(command string, key string, value string) error - SubmitDMLJob(command, sql, uuid, tableSchema string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) + SubmitDMLJob(command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) } // VSchemaOperator is an interface to Vschema Operations diff --git a/go/vt/vttablet/grpcqueryservice/server.go b/go/vt/vttablet/grpcqueryservice/server.go index 508fb19e94..0e07f288ff 100644 --- a/go/vt/vttablet/grpcqueryservice/server.go +++ b/go/vt/vttablet/grpcqueryservice/server.go @@ -529,7 +529,7 @@ func (q *query) SetFailPoint(ctx context.Context, request *querypb.SetFailPointR } func (q *query) SubmitDMLJob(ctx context.Context, request *querypb.SubmitDMLJobRequest) (*querypb.SubmitDMLJobResponse, error) { - rst, err := q.server.SubmitDMLJob(ctx, request.Cmd, request.Sql, request.JobUuid, request.RelatedSchema, request.Timegap, request.BatchSize, request.PostponeLaunch, request.AutoRetry) + rst, err := q.server.SubmitDMLJob(ctx, request.Cmd, request.Sql, request.JobUuid, request.RelatedSchema, request.TimePeriodStart, request.TimePeriodEnd, request.Timegap, request.BatchSize, request.PostponeLaunch, request.AutoRetry) return &querypb.SubmitDMLJobResponse{Result: sqltypes.ResultToProto3(rst)}, err } diff --git a/go/vt/vttablet/grpctabletconn/conn.go b/go/vt/vttablet/grpctabletconn/conn.go index 1d7f4af2d6..dd8bbea7fe 100644 --- a/go/vt/vttablet/grpctabletconn/conn.go +++ b/go/vt/vttablet/grpctabletconn/conn.go @@ -1133,7 +1133,7 @@ func (conn *gRPCQueryClient) SetFailPoint(ctx context.Context, command string, k return nil } -func (conn *gRPCQueryClient) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (conn *gRPCQueryClient) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { // todo newborn22,为什么要加锁? // todo,什么时候调用? conn.mu.RLock() @@ -1142,14 +1142,16 @@ func (conn *gRPCQueryClient) SubmitDMLJob(ctx context.Context, command, sql, uui return nil, tabletconn.ConnClosed } req := querypb.SubmitDMLJobRequest{ - Cmd: command, - Sql: sql, - JobUuid: uuid, - RelatedSchema: tableSchema, - Timegap: timeGapInMs, - BatchSize: batchSize, - PostponeLaunch: postponeLaunch, - AutoRetry: autoRetry, + Cmd: command, + Sql: sql, + JobUuid: uuid, + RelatedSchema: tableSchema, + Timegap: timeGapInMs, + BatchSize: batchSize, + PostponeLaunch: postponeLaunch, + AutoRetry: autoRetry, + TimePeriodStart: timePeriodStart, + TimePeriodEnd: timePeriodEnd, } er, err := conn.c.SubmitDMLJob(ctx, &req) if err != nil { diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 45aef1df5c..e8d993fb38 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -134,6 +134,12 @@ const ( job_uuid = %a` sqlDMLJobDeleteJob = `delete from mysql.big_dml_jobs_table where job_uuid = %a` + + sqlDMLJobUpdateTimePeriod = `update mysql.big_dml_jobs_table set + running_time_period_start = %a, + running_time_period_end = %a + where + job_uuid = %a` ) const ( @@ -221,6 +227,8 @@ func (jc *JobController) HandleRequest(command, sql, jobUUID, tableSchema, expir return jc.ThrottleJob(jobUUID, expireString, ratioLiteral) case UnthrottleJob: return jc.UnthrottleJob(jobUUID) + case SetRunningTimePeriod: + return jc.SetRunningTimePeriod(jobUUID, runningTimePeriodStart, runningTimePeriodEnd) } } // todo newborn22,对返回值判断为空? @@ -398,18 +406,17 @@ func (jc *JobController) SetRunningTimePeriod(uuid, startTime, endTime string) ( return emptyResult, errors.New("the job is running now, pause it first") } // 提交的时间段必须满足特定的格式,可以成功转换成time对象 - _, errStartTime := time.Parse(time.TimeOnly, startTime) - if errStartTime != nil { + _, err = time.Parse(time.TimeOnly, startTime) + if err != nil { return emptyResult, errors.New("the start time is in error format, it should be like HH:MM:SS") } - _, errEndTime := time.Parse(time.TimeOnly, endTime) - if errEndTime != nil { + _, err = time.Parse(time.TimeOnly, endTime) + if err != nil { return emptyResult, errors.New("the start time is in error format, it should be like HH:MM:SS") } // 往表中插入 - - return nil, nil + return jc.updateJobPeriodTime(ctx, uuid, startTime, endTime) } func (jc *JobController) LaunchJob(uuid string) (*sqltypes.Result, error) { @@ -592,6 +599,10 @@ func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { qr, _ := jc.execQuery(ctx, "", sqlDMLJobGetAllJobs) if qr == nil { + jc.workingTablesMutex.Unlock() + jc.tableMutex.Unlock() + + time.Sleep(3 * time.Second) continue } for _, row := range qr.Named().Rows { @@ -652,7 +663,14 @@ func (jc *JobController) checkDmlJobRunnable(jobUUID, status, table string, peri timeNow := time.Now() if !(timeNow.After(*periodStartTime) && timeNow.Before(*periodEndTime)) { // 更新状态 - _, _ = jc.updateJobStatus(context.Background(), jobUUID, notInTimePeriodStatus, timeNow.Format(time.RFC3339)) + submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobUpdateStatus, + sqltypes.StringBindVariable(notInTimePeriodStatus), + sqltypes.StringBindVariable(timeNow.Format(time.RFC3339)), + sqltypes.StringBindVariable(jobUUID)) + if err != nil { + return false + } + _, _ = jc.execQuery(context.Background(), "", submitQuery) return false } } @@ -1219,6 +1237,20 @@ func (jc *JobController) updateJobStatus(ctx context.Context, uuid, status, stat return jc.execQuery(ctx, "", submitQuery) } +func (jc *JobController) updateJobPeriodTime(ctx context.Context, uuid, timePeriodStart, timePeriodEnd string) (*sqltypes.Result, error) { + jc.tableMutex.Lock() + defer jc.tableMutex.Unlock() + + submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobUpdateTimePeriod, + sqltypes.StringBindVariable(timePeriodStart), + sqltypes.StringBindVariable(timePeriodEnd), + sqltypes.StringBindVariable(uuid)) + if err != nil { + return &sqltypes.Result{}, err + } + return jc.execQuery(ctx, "", submitQuery) +} + func (jc *JobController) GetIntJobInfo(ctx context.Context, uuid, fieldName string) (int64, error) { jc.tableMutex.Lock() defer jc.tableMutex.Unlock() diff --git a/go/vt/vttablet/queryservice/queryservice.go b/go/vt/vttablet/queryservice/queryservice.go index bfa46cd722..cc69bfd99f 100644 --- a/go/vt/vttablet/queryservice/queryservice.go +++ b/go/vt/vttablet/queryservice/queryservice.go @@ -115,7 +115,7 @@ type QueryService interface { SetFailPoint(ctx context.Context, command string, key string, value string) error - SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema string, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) + SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) // HandlePanic will be called if any of the functions panic. HandlePanic(err *error) diff --git a/go/vt/vttablet/queryservice/wrapped.go b/go/vt/vttablet/queryservice/wrapped.go index b14ad338bb..6b57cdd105 100644 --- a/go/vt/vttablet/queryservice/wrapped.go +++ b/go/vt/vttablet/queryservice/wrapped.go @@ -375,11 +375,11 @@ func (ws *wrappedService) SetFailPoint(ctx context.Context, command string, key }) } -func (ws *wrappedService) SubmitDMLJob(ctx context.Context, cmd, sql, uuid, tableSchema string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (qr *sqltypes.Result, err error) { +func (ws *wrappedService) SubmitDMLJob(ctx context.Context, cmd, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (qr *sqltypes.Result, err error) { err = ws.wrapper(ctx, nil, ws.impl, "SubmitDMLJob", false, nil, func(ctx context.Context, target *querypb.Target, conn QueryService) (bool, error) { // todo newborn22,这个地方是否要canRetry? 参考 dropschema var innerErr error - qr, innerErr = conn.SubmitDMLJob(ctx, cmd, sql, uuid, tableSchema, timeGapInMs, batchSize, postponeLaunch, autoRetry) + qr, innerErr = conn.SubmitDMLJob(ctx, cmd, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd, timeGapInMs, batchSize, postponeLaunch, autoRetry) return canRetry(ctx, innerErr), innerErr }) return qr, err diff --git a/go/vt/vttablet/sandboxconn/sandboxconn.go b/go/vt/vttablet/sandboxconn/sandboxconn.go index ed354f905d..b04a4943db 100644 --- a/go/vt/vttablet/sandboxconn/sandboxconn.go +++ b/go/vt/vttablet/sandboxconn/sandboxconn.go @@ -625,7 +625,7 @@ func (sbc *SandboxConn) SetFailPoint(ctx context.Context, command string, key st return err } -func (sbc *SandboxConn) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (sbc *SandboxConn) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { return nil, nil } diff --git a/go/vt/vttablet/tabletconntest/fakequeryservice.go b/go/vt/vttablet/tabletconntest/fakequeryservice.go index 5b298859c4..ebafaa2c5e 100644 --- a/go/vt/vttablet/tabletconntest/fakequeryservice.go +++ b/go/vt/vttablet/tabletconntest/fakequeryservice.go @@ -71,7 +71,7 @@ func (f *FakeQueryService) SetFailPoint(ctx context.Context, command string, key return nil } -func (f *FakeQueryService) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (f *FakeQueryService) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { panic("implement me") } diff --git a/go/vt/vttablet/tabletserver/query_executor.go b/go/vt/vttablet/tabletserver/query_executor.go index 8b080f025b..0095e373d3 100644 --- a/go/vt/vttablet/tabletserver/query_executor.go +++ b/go/vt/vttablet/tabletserver/query_executor.go @@ -1161,17 +1161,19 @@ func (qre *QueryExecutor) execAlterDMLJob() (*sqltypes.Result, error) { uuid := alterDMLJob.UUID switch alterDMLJob.Type { case sqlparser.PauseDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("pause", "", uuid, "", "", nil, 0, 0, false, false) + return qre.tsv.dmlJonController.HandleRequest("pause", "", uuid, "", "", "", "", nil, 0, 0, false, false) case sqlparser.ResumeDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("resume", "", uuid, "", "", nil, 0, 0, false, false) + return qre.tsv.dmlJonController.HandleRequest("resume", "", uuid, "", "", "", "", nil, 0, 0, false, false) case sqlparser.LaunchDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("launch", "", uuid, "", "", nil, 0, 0, false, false) + return qre.tsv.dmlJonController.HandleRequest("launch", "", uuid, "", "", "", "", nil, 0, 0, false, false) case sqlparser.CancelDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("cancel", "", uuid, "", "", nil, 0, 0, false, false) + return qre.tsv.dmlJonController.HandleRequest("cancel", "", uuid, "", "", "", "", nil, 0, 0, false, false) case sqlparser.ThrottleDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("throttle", "", uuid, "", alterDMLJob.Expire, alterDMLJob.Ratio, 0, 0, false, false) + return qre.tsv.dmlJonController.HandleRequest("throttle", "", uuid, "", "", "", alterDMLJob.Expire, alterDMLJob.Ratio, 0, 0, false, false) case sqlparser.UnthrottleDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("unthrottle", "", uuid, "", "", nil, 0, 0, false, false) + return qre.tsv.dmlJonController.HandleRequest("unthrottle", "", uuid, "", "", "", "", nil, 0, 0, false, false) + case sqlparser.SetRunningTimePeriodType: + return qre.tsv.dmlJonController.HandleRequest("set_running_time_period", "", uuid, "", "", alterDMLJob.TimePeriodStart, alterDMLJob.TimePeriodEnd, nil, 0, 0, false, false) } return nil, vterrors.New(vtrpcpb.Code_UNIMPLEMENTED, "ALTER DML_JOB not implemented") } diff --git a/go/vt/vttablet/tabletserver/tabletserver.go b/go/vt/vttablet/tabletserver/tabletserver.go index 7e13253b28..1bf3a1b458 100644 --- a/go/vt/vttablet/tabletserver/tabletserver.go +++ b/go/vt/vttablet/tabletserver/tabletserver.go @@ -1496,9 +1496,9 @@ func (tsv *TabletServer) SetFailPoint(ctx context.Context, command string, key s } // todo newborn22,改名,submitDMLjob -func (tsv *TabletServer) SubmitDMLJob(ctx context.Context, command, sql, jobUUID, tableSchema string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (tsv *TabletServer) SubmitDMLJob(ctx context.Context, command, sql, jobUUID, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { // todo newborn22, 这个地方要进行封装?,变成更通用的 - return tsv.dmlJonController.HandleRequest(command, sql, jobUUID, tableSchema, "", nil, timeGapInMs, batchSize, postponeLaunch, autoRetry) + return tsv.dmlJonController.HandleRequest(command, sql, jobUUID, tableSchema, "", timePeriodStart, timePeriodEnd, nil, timeGapInMs, batchSize, postponeLaunch, autoRetry) } // execRequest performs verifications, sets up the necessary environments diff --git a/proto/query.proto b/proto/query.proto index 9fc044bc85..c9cbb5de71 100644 --- a/proto/query.proto +++ b/proto/query.proto @@ -1094,6 +1094,8 @@ message SubmitDMLJobRequest{ int64 batch_size = 7; bool auto_retry = 8; bool postpone_launch = 9; + string time_period_start = 10; + string time_period_end = 11; } message SubmitDMLJobResponse { QueryResult result = 1; From 1026359fa9311964c9078f0570fd35617d207ad6 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Tue, 26 Dec 2023 11:26:26 +0800 Subject: [PATCH 19/54] fix: fix some bugs and time period can work correctly Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/sqlparser/ast_format.go | 5 +++ go/vt/sqlparser/ast_format_fast.go | 4 ++ go/vt/vttablet/jobcontroller/controller.go | 43 ++++++++++++---------- 3 files changed, 32 insertions(+), 20 deletions(-) diff --git a/go/vt/sqlparser/ast_format.go b/go/vt/sqlparser/ast_format.go index be861d1afc..400fd0784e 100644 --- a/go/vt/sqlparser/ast_format.go +++ b/go/vt/sqlparser/ast_format.go @@ -343,6 +343,8 @@ func (node *AlterDMLJob) Format(buf *TrackedBuffer) { alterType = "unthrottle" case UnthrottleAllDMLJobType: alterType = "unthrottle all" + case SetRunningTimePeriodType: + alterType = "time_period" } buf.astPrintf(node, " %s", alterType) if node.Expire != "" { @@ -351,6 +353,9 @@ func (node *AlterDMLJob) Format(buf *TrackedBuffer) { if node.Ratio != nil { buf.astPrintf(node, " ratio %v", node.Ratio) } + if node.Type == SetRunningTimePeriodType { + buf.astPrintf(node, " '%s' '%s'", node.TimePeriodStart, node.TimePeriodEnd) + } } // Format formats the node. diff --git a/go/vt/sqlparser/ast_format_fast.go b/go/vt/sqlparser/ast_format_fast.go index eac2e92cc0..eb2ca672e4 100644 --- a/go/vt/sqlparser/ast_format_fast.go +++ b/go/vt/sqlparser/ast_format_fast.go @@ -485,6 +485,10 @@ func (node *AlterDMLJob) formatFast(buf *TrackedBuffer) { buf.WriteString(" ratio ") node.Ratio.formatFast(buf) } + if node.Type == SetRunningTimePeriodType { + buf.WriteString(" '" + node.TimePeriodStart + "'") + buf.WriteString(" '" + node.TimePeriodEnd + "'") + } } // formatFast formats the node. diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index e8d993fb38..55b51ade6f 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -275,6 +275,7 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run // 对runningTimePeriodStart, runningTimePeriodEnd进行有效性检查,需要能够转换成time // 当用户没有提交该信息时,默认两个值都为"" + // 当用户用hint提交运维时间时,有可能出现一个为"",一个不为""的情况,因此这里需要用||而不是&& if runningTimePeriodStart != "" || runningTimePeriodEnd != "" { _, err = time.Parse(time.TimeOnly, runningTimePeriodStart) if err != nil { @@ -398,6 +399,12 @@ func (jc *JobController) ResumeJob(uuid string) (*sqltypes.Result, error) { func (jc *JobController) SetRunningTimePeriod(uuid, startTime, endTime string) (*sqltypes.Result, error) { var emptyResult = &sqltypes.Result{} ctx := context.Background() + + // 如果两个时间只有一个为空,则报错 + if (startTime == "" && endTime != "") || (startTime != "" && endTime == "") { + return emptyResult, errors.New("the start time and end time must be both set or not") + } + status, err := jc.GetStrJobInfo(ctx, uuid, "job_status") if err != nil { return emptyResult, err @@ -406,15 +413,16 @@ func (jc *JobController) SetRunningTimePeriod(uuid, startTime, endTime string) ( return emptyResult, errors.New("the job is running now, pause it first") } // 提交的时间段必须满足特定的格式,可以成功转换成time对象 - _, err = time.Parse(time.TimeOnly, startTime) - if err != nil { - return emptyResult, errors.New("the start time is in error format, it should be like HH:MM:SS") - } - _, err = time.Parse(time.TimeOnly, endTime) - if err != nil { - return emptyResult, errors.New("the start time is in error format, it should be like HH:MM:SS") + if startTime != "" && endTime != "" { + _, err = time.Parse(time.TimeOnly, startTime) + if err != nil { + return emptyResult, errors.New("the start time is in error format, it should be like HH:MM:SS") + } + _, err = time.Parse(time.TimeOnly, endTime) + if err != nil { + return emptyResult, errors.New("the start time is in error format, it should be like HH:MM:SS") + } } - // 往表中插入 return jc.updateJobPeriodTime(ctx, uuid, startTime, endTime) } @@ -616,7 +624,6 @@ func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { runningTimePeriodStart := row["running_time_period_start"].ToString() runningTimePeriodEnd := row["running_time_period_end"].ToString() - // 由于提交时已经对时间格式进行检查,因此这里不再处理错误,todo 之后可针对错误情况给job改一个Message periodStartTimePtr, periodEndTimePtr := getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd) if jc.checkDmlJobRunnable(uuid, status, table, periodStartTimePtr, periodEndTimePtr) { @@ -635,6 +642,7 @@ func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { func getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd string) (*time.Time, *time.Time) { if runningTimePeriodStart != "" && runningTimePeriodEnd != "" { + // 在submit job时或setRunningTimePeriod时,已经对格式进行了检查,因此这里不会出现错误 periodStartTime, _ := time.Parse(time.TimeOnly, runningTimePeriodStart) periodEndTime, _ := time.Parse(time.TimeOnly, runningTimePeriodEnd) // 由于用户只提供了时间部分,因此需要将日期部分用当天的时间补齐。 @@ -999,19 +1007,19 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTabl var err error ctx := context.Background() - status, err := jc.GetStrJobInfo(ctx, uuid, "job_status") + // 如果currentBatchID为"",意味着这个job之前尚未运行,需要初始化currentBatchID为1 + currentBatchID, err := jc.getDealingBatchID(ctx, uuid) if err != nil { + jc.FailJob(ctx, uuid, err.Error(), table) return } - - // 如果状态为queued,意味着这个job刚刚开始运行,那么将当前处理的batch id设为1。 - // 否则,意味着这个job之前已经启动过,无需再初始化当前处理的batch id,而是直接取表中这个字段的值并接着运行。 - if status == queuedStatus { + if currentBatchID == "" { err = jc.updateDealingBatchID(ctx, uuid, 1) if err != nil { jc.FailJob(ctx, uuid, err.Error(), table) return } + currentBatchID = "1" } statusSetTime := time.Now().Format(time.RFC3339) _, err = jc.updateJobStatus(ctx, uuid, runningStatus, statusSetTime) @@ -1019,12 +1027,7 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTabl jc.FailJob(ctx, uuid, err.Error(), table) return } - currentBatchID, err := jc.getDealingBatchID(ctx, uuid) - if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) - return - } - // todo,当动态生成batch时,如何更新max? + maxBatchID, err := jc.getMaxBatchID(ctx, batchTable, relatedSchema) if err != nil { jc.FailJob(ctx, uuid, err.Error(), table) From 8df1833b334711f44336b69b66eb2a57863a04e4 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Thu, 28 Dec 2023 14:29:56 +0800 Subject: [PATCH 20/54] fix: put split batch codes into funcion splitBatchIntoTwo Signed-off-by: newborn22 <953950914@qq.com> --- .../schema/job/big_dml_jobs_table.sql | 31 ++ go/vt/vttablet/jobcontroller/controller.go | 300 +++++++++--------- 2 files changed, 187 insertions(+), 144 deletions(-) diff --git a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql index d8fb0e1c14..4e3ccf90da 100644 --- a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql +++ b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql @@ -37,3 +37,34 @@ CREATE TABLE IF NOT EXISTS mysql.big_dml_jobs_table `running_time_period_end` varchar(256) NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE = InnoDB + + +CREATE TABLE IF NOT EXISTS mysql.big_dml_jobs_table2 +( + `id` bigint unsigned NOT NULL AUTO_INCREMENT, + `job_uuid` varchar(64) NOT NULL UNIQUE, + `table_schema` varchar(256) NOT NULL, + `table_name` varchar(256) NOT NULL, + `batch_info_table_schema` varchar(256) NOT NULL, + `batch_info_table_name` varchar(256) NOT NULL UNIQUE, + `status` varchar(128) NOT NULL, + `status_set_time` timestamp NOT NULL, + `message` varchar(2048) NULL DEFAULT NULL, + `dml_sql` text NOT NULL, + + + `batch_interval_in_ms` bigint NOT NULL , + + + + `batch_size` bigint NOT NULL , + `batch_concurrency` bigint NOT NULL , --todo newborn22 , 并发 + + `affected_rows` bigint NOT NULL DEFAULT 0, + `throttle_ratio` double NULL DEFAULT NULL, + `throttle_expire_time` varchar(256) NULL DEFAULT NULL, + `dealing_batch_id` varchar(256) NULL DEFAULT NULL, -- todo newborn22 , delete or no + `running_time_period_start` varchar(256) NULL DEFAULT NULL, + `running_time_period_end` varchar(256) NULL DEFAULT NULL, + PRIMARY KEY (`id`) + ) ENGINE = InnoDB diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 55b51ade6f..c810d1adc0 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -793,149 +793,10 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta } expectedRow, _ := qr.Named().Rows[0].ToInt64("count_rows") if expectedRow > batchSize { - // todo,递归生成新的batch - // todo将下面的每一个小步封装在函数中 - // 1).根据batchCountSQL生成查询pk值的select sql - // 1.1).获得PK信息 - pkInfos, err := jc.getTablePkInfo(ctx, tableSchema, table) + batchSQL, nextBatchID, err = jc.splitBatchIntoTwo(ctx, tableSchema, table, batchTable, batchSQL, batchCountSQL, batchID, conn, batchSize, expectedRow) if err != nil { return "", err } - isFirstPk := true - pkPart := "" - for _, pkInfo := range pkInfos { - if !isFirstPk { - pkPart += "," - } - pkPart += pkInfo.pkName - isFirstPk = false - } - //1.2).生成select sql - batchSplitSelectSQL := strings.Replace(batchCountSQL, "count(*) as count_rows", pkPart, 1) + "order by " + pkPart - - // 2).根据select sql将batch拆分,生成两个新的batch。 - //这里每次只将超过threshold的batch拆成两个batch而不是多个小于等于threshold的batch的原因是: - // 拆成多个batch需要遍历完select的全部结果,这可能会导致超时 - - // 2.1).计算两个batch的batchPKStart和batchPKEnd。实际上,只要获得当前batch的新的PKEnd和新的batch的PKStart - - // 遍历前threshold+1条,依然使用同一个连接 - qr, err = conn.Exec(ctx, batchSplitSelectSQL, math.MaxInt32, true) - if err != nil { - return "", err - } - - var curBatchNewEnd []interface{} - var newBatchStart []interface{} - - for rowCount, row := range qr.Named().Rows { - // 将原本batch的PKEnd设在threshold条数处 - if int64(rowCount) == batchSize-1 { - for _, pkInfo := range pkInfos { - pkName := pkInfo.pkName - keyVal, err := ProcessValue(row[pkName]) - if err != nil { - return "", err - } - curBatchNewEnd = append(curBatchNewEnd, keyVal) - } - } - // 将第threshold+1条的PK作为新PK的起点 - if int64(rowCount) == batchSize { - for _, pkInfo := range pkInfos { - pkName := pkInfo.pkName - keyVal, err := ProcessValue(row[pkName]) - if err != nil { - return "", err - } - newBatchStart = append(newBatchStart, keyVal) - } - } - } - - // 2.2) 将curBatchNewEnd和newBatchStart转换成sql中where部分的<=和>=的字符串 - curBatchLessThanPart, err := genPKsLessThanPart(pkInfos, curBatchNewEnd) - if err != nil { - return "", err - } - - newBatchGreatThanPart, err := genPKsGreaterThanPart(pkInfos, newBatchStart) - if err != nil { - return "", err - } - - // 2.3) 通过正则表达式,获得原先batchSQL中的great than和less than部分,作为当前batch的great than和新batch的less than部分 - // 定义正则表达式,匹配"( (greatThanPart) AND (lessThanPart) )" - - curBatchGreatThanPart := "" - newBatchLessThanPart := "" - - regexPattern := `\(\s*\((.*)\)\s*AND\s*\((.*)\)\s*\)` - - // 编译正则表达式 - regex := regexp.MustCompile(regexPattern) - - // 查找匹配项 - matches := regex.FindAllStringSubmatch(batchSQL, -1) - - // 如果有匹配项,只取最后一个匹配的结果,因为用户自己输入的where条件中也可能存在这样的格式 - pkScopePart := "" - if len(matches) > 0 { - lastMatch := matches[len(matches)-1] - if len(lastMatch) == 3 { - pkScopePart = lastMatch[0] - curBatchGreatThanPart = lastMatch[1] - newBatchLessThanPart = lastMatch[2] - } - } else { - return "", errors.New("can not match greatThan and lessThan parts by regex") - } - - // 2.4) 生成拆分后,当前batch的sql和新batch的sql - batchSQLCommonPart := strings.Replace(batchSQL, pkScopePart, "", 1) - batchCountSQLCommonPart := strings.Replace(batchCountSQL, pkScopePart, "", 1) - curBatchSQL := batchSQLCommonPart + fmt.Sprintf("( (%s) AND (%s) )", curBatchGreatThanPart, curBatchLessThanPart) - newBatchSQL := batchSQLCommonPart + fmt.Sprintf("( (%s) AND (%s) )", newBatchGreatThanPart, newBatchLessThanPart) - newBatchCountSQL := batchCountSQLCommonPart + fmt.Sprintf("( (%s) AND (%s) )", newBatchGreatThanPart, newBatchLessThanPart) - - // 2.5) 在batch表中更改旧的条目的sql,并插入新batch条目 - // 在表中更改旧的sql - // todo,更改原本条目中的size为threshold - updateBatchSQL := fmt.Sprintf("update %s set batch_sql=%%a where batch_id=%%a", batchTable) - updateBatchSQLQuery, err := sqlparser.ParseAndBind(updateBatchSQL, - sqltypes.StringBindVariable(curBatchSQL), - sqltypes.StringBindVariable(batchID)) - if err != nil { - return "", err - } - _, err = conn.Exec(ctx, updateBatchSQLQuery, math.MaxInt32, true) - if err != nil { - return "", err - } - batchSQL = curBatchSQL - - // 生成新的table条目并插入 - newBatchID := batchID + "+" - nextBatchID = newBatchID - newBatchSize := expectedRow - batchSize - - insertBatchSQL := fmt.Sprintf(insertBatchSQL, batchTable) - insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQL, - sqltypes.StringBindVariable(newBatchID), - sqltypes.StringBindVariable(newBatchSQL), - sqltypes.StringBindVariable(newBatchCountSQL), - sqltypes.Int64BindVariable(newBatchSize)) - if err != nil { - return "", err - } - _, err = conn.Exec(ctx, insertBatchSQLQuery, math.MaxInt32, true) - if err != nil { - return "", err - } - - hhh := fmt.Sprintf("%s %s %s %s", curBatchGreatThanPart, curBatchLessThanPart, newBatchGreatThanPart, newBatchLessThanPart) - fmt.Printf("%s", hhh) - } // 3.执行batch sql @@ -998,6 +859,149 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta return nextBatchID, nil } +// 将超过batchSize的batch拆分成两个batches,其中第一个batch的大小等于batchSize +// 拆分的基本原理是遍历原先batch的batchCountSQL的结果集,将第batchSize条record的pk作为原先batch的PKEnd,第batchSize+1条record的pk作为新batch的PKStart +// 原先batch的PKStart和PKEnd分别成为原先batch的PKStart和新batch的PKEnd +func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, table, batchTable, batchSQL, batchCountSQL, batchID string, conn *connpool.DBConn, batchSize, expectedRow int64) (newCurrentBatchSQL, nextBatchID string, err error) { + // 1.根据batchCountSQL生成查询pk值的select sql + // 1.1.获得PK信息 + pkInfos, err := jc.getTablePkInfo(ctx, tableSchema, table) + if err != nil { + return "", "", err + } + isFirstPk := true + pkPart := "" + for _, pkInfo := range pkInfos { + if !isFirstPk { + pkPart += "," + } + pkPart += pkInfo.pkName + isFirstPk = false + } + //1.2.生成select pk的sql + batchSplitSelectSQL := strings.Replace(batchCountSQL, "count(*) as count_rows", pkPart, 1) + "order by " + pkPart + + // 2.根据select sql将batch拆分,生成两个新的batch。 + //这里每次只将超过threshold的batch拆成两个batch而不是多个小于等于threshold的batch的原因是: + // 拆成多个batch需要遍历完select的全部结果,这可能会导致超时 + + // 2.1.计算两个batch的batchPKStart和batchPKEnd。实际上,只要获得当前batch的新的PKEnd和新的batch的PKStart + + // 遍历前threshold+1条,依然使用同一个连接 + qr, err := conn.Exec(ctx, batchSplitSelectSQL, math.MaxInt32, true) + if err != nil { + return "", "", err + } + + var curBatchNewEnd []any + var newBatchStart []any + + for rowCount, row := range qr.Named().Rows { + // 将原本batch的PKEnd设在threshold条数处 + if int64(rowCount) == batchSize-1 { + for _, pkInfo := range pkInfos { + pkName := pkInfo.pkName + keyVal, err := ProcessValue(row[pkName]) + if err != nil { + return "", "", err + } + curBatchNewEnd = append(curBatchNewEnd, keyVal) + } + } + // 将第threshold+1条的PK作为新PK的起点 + if int64(rowCount) == batchSize { + for _, pkInfo := range pkInfos { + pkName := pkInfo.pkName + keyVal, err := ProcessValue(row[pkName]) + if err != nil { + return "", "", err + } + newBatchStart = append(newBatchStart, keyVal) + } + } + } + + // 2.2) 将curBatchNewEnd和newBatchStart转换成sql中where部分的<=和>=的字符串 + curBatchLessThanPart, err := genPKsLessThanPart(pkInfos, curBatchNewEnd) + if err != nil { + return "", "", err + } + + newBatchGreatThanPart, err := genPKsGreaterThanPart(pkInfos, newBatchStart) + if err != nil { + return "", "", err + } + + // 2.3) 通过正则表达式,获得原先batchSQL中的great than和less than部分,作为当前batch的great than和新batch的less than部分 + // 定义正则表达式,匹配"( (greatThanPart) AND (lessThanPart) )" + curBatchGreatThanPart := "" + newBatchLessThanPart := "" + + // 这个正则表达式用于匹配出"( (greatThanPart) AND (lessThanPart) )"greatThanPart和lessThanPart,也就是每条batch sql中用于限定PK范围的部分 + regexPattern := `\(\s*\((.*)\)\s*AND\s*\((.*)\)\s*\)` + + // 编译正则表达式 + regex := regexp.MustCompile(regexPattern) + + // 查找匹配项 + matches := regex.FindAllStringSubmatch(batchSQL, -1) + + // 如果有匹配项,只取最后一个匹配的结果,因为用户自己输入的where条件中也可能存在这样的格式 + pkConditionPart := "" + if len(matches) > 0 { + lastMatch := matches[len(matches)-1] + if len(lastMatch) == 3 { + pkConditionPart = lastMatch[0] + curBatchGreatThanPart = lastMatch[1] + newBatchLessThanPart = lastMatch[2] + } + } else { + return "", "", errors.New("can not match greatThan and lessThan parts by regex") + } + + // 2.4) 生成拆分后,当前batch的sql和新batch的sql + batchSQLCommonPart := strings.Replace(batchSQL, pkConditionPart, "", 1) + batchCountSQLCommonPart := strings.Replace(batchCountSQL, pkConditionPart, "", 1) + curBatchSQL := batchSQLCommonPart + fmt.Sprintf("( (%s) AND (%s) )", curBatchGreatThanPart, curBatchLessThanPart) + newBatchSQL := batchSQLCommonPart + fmt.Sprintf("( (%s) AND (%s) )", newBatchGreatThanPart, newBatchLessThanPart) + newBatchCountSQL := batchCountSQLCommonPart + fmt.Sprintf("( (%s) AND (%s) )", newBatchGreatThanPart, newBatchLessThanPart) + + // 2.5) 在batch表中更改旧的条目的sql,并插入新batch条目 + // 在表中更改旧的sql + updateBatchSQL := fmt.Sprintf("update %s set batch_sql=%%a where batch_id=%%a", batchTable) + updateBatchSQLQuery, err := sqlparser.ParseAndBind(updateBatchSQL, + sqltypes.StringBindVariable(curBatchSQL), + sqltypes.StringBindVariable(batchID)) + if err != nil { + return "", "", err + } + _, err = conn.Exec(ctx, updateBatchSQLQuery, math.MaxInt32, true) + if err != nil { + return "", "", err + } + newCurrentBatchSQL = curBatchSQL + + // 生成新的table条目并插入 + newBatchID := batchID + "+" + nextBatchID = newBatchID + newBatchSize := expectedRow - batchSize + + insertBatchSQL := fmt.Sprintf(insertBatchSQL, batchTable) + insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQL, + sqltypes.StringBindVariable(newBatchID), + sqltypes.StringBindVariable(newBatchSQL), + sqltypes.StringBindVariable(newBatchCountSQL), + sqltypes.Int64BindVariable(newBatchSize)) + if err != nil { + return "", "", err + } + _, err = conn.Exec(ctx, insertBatchSQLQuery, math.MaxInt32, true) + if err != nil { + return "", "", err + } + return newCurrentBatchSQL, nextBatchID, nil +} + func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTable string, timeGap, batchSize int64, timePeriodStart, timePeriodEnd *time.Time) { // timeGap 单位ms,duration输入ns,应该乘上1000000 @@ -1535,15 +1539,22 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, // 为每一个DML job创建一张batch表,保存着该job被拆分成batches的具体信息。 // healthCheck协程会定时对处于结束状态(completed,canceled,failed)的job的batch表进行回收 batchTableName := "job_batch_table_" + strings.Replace(jobUUID, "-", "_", -1) + // todo newborn22 batch_size 改成 count_size,count时的大小 + // todo newborn22 Pending->queued, completed, + // todo newborn22 batch_sql batch_count_sql -> text + // todo newborn22 batch begin, batch end text + // todo pingcap + // todo 2+ -> 2-1 + createTableSQL := fmt.Sprintf(`CREATE TABLE IF NOT EXISTS %s ( id bigint unsigned NOT NULL AUTO_INCREMENT, - batch_id varchar(1024) NOT NULL, + batch_id varchar(256) NOT NULL, batch_sql varchar(1024) NOT NULL, batch_count_sql varchar(1024) NOT NULL, batch_size bigint unsigned NOT NULL, actually_affected_rows bigint unsigned NOT NULL DEFAULT 0, - batch_status varchar(1024) NOT NULL DEFAULT 'Pending', + batch_status varchar(64) NOT NULL DEFAULT 'Pending', PRIMARY KEY (id) ) ENGINE = InnoDB`, batchTableName) _, err = jc.execQuery(ctx, tableSchema, createTableSQL) @@ -1554,8 +1565,9 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, // 遍历每一行的每一个PK的值,记录每一个batch的开始和结束pk值(当有多个pk列时,需要记录多个pk值,pk可能具有不同的数据类型 // 当遍历的行数达到一个batchSize时,即可生成一个batch所要执行的batch SQL,往batch表中插入一个条目 currentBatchSize := int64(0) - var currentBatchStart []interface{} - var currentBatchEnd []interface{} + // todo newborn22 interface{} -> any + var currentBatchStart []any + var currentBatchEnd []any currentBatchID := "1" insertBatchSQLWithTableName := fmt.Sprintf(insertBatchSQL, batchTableName) From bcc2dba920099966ffb78f2aee4c6100aa2846aa Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Thu, 28 Dec 2023 21:40:14 +0800 Subject: [PATCH 21/54] fix: will return error if DML won't affect any rows Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/vttablet/jobcontroller/controller.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index c810d1adc0..2b647b3169 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -266,6 +266,9 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run if err != nil { return &sqltypes.Result{}, err } + if jobBatchTable == "" { + return &sqltypes.Result{}, errors.New("this DML sql won't affect any rows") + } jobStatus := queuedStatus if postponeLaunch { @@ -1571,7 +1574,6 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, currentBatchID := "1" insertBatchSQLWithTableName := fmt.Sprintf(insertBatchSQL, batchTableName) - // todo 对结果集为0的情况进行特判 for _, row := range qr.Named().Rows { var pkValues []interface{} for _, pkInfo := range pkInfos { From c8a63e89dedca5d9f56b6812cc36d8aaa68578c9 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Fri, 29 Dec 2023 11:07:50 +0800 Subject: [PATCH 22/54] feat: add notify mechanism to jobScheduler Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/vttablet/jobcontroller/controller.go | 105 +++++++++++++-------- 1 file changed, 67 insertions(+), 38 deletions(-) diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 2b647b3169..4f2ca1c45b 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -38,6 +38,8 @@ import ( const ( databasePoolSize = 3 healthCheckTimeGap = 5000 // ms + + jobSchedulerRunningInterval = 10 * time.Second ) const ( @@ -163,6 +165,8 @@ type JobController struct { workingTablesMutex sync.Mutex checkBeforeSchedule chan struct{} // 用于确保当healthCheck拉起crash的running job的runner协程后,job scheduler才开始运行 + + schedulerNotifyChan chan struct{} // jobScheduler每隔一段时间运行一次调度。但当它收到这个chan的消息后,会立刻开始一次调度 } type PKInfo struct { @@ -181,6 +185,7 @@ func (jc *JobController) Open() error { jc.workingTables = map[string]bool{} jc.checkBeforeSchedule = make(chan struct{}) + jc.schedulerNotifyChan = make(chan struct{}, 1) go jc.jobHealthCheck(jc.checkBeforeSchedule) go jc.jobScheduler(jc.checkBeforeSchedule) @@ -192,6 +197,12 @@ func (jc *JobController) Open() error { func (jc *JobController) Close() { jc.pool.Close() + if jc.checkBeforeSchedule != nil { + close(jc.checkBeforeSchedule) + } + if jc.schedulerNotifyChan != nil { + close(jc.schedulerNotifyChan) + } } func NewJobController(tableName string, tabletTypeFunc func() topodatapb.TabletType, env tabletenv.Env, lagThrottler *throttle.Throttler) *JobController { @@ -310,6 +321,9 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run if err != nil { return &sqltypes.Result{}, err } + + jc.notifyJobScheduler() + return jc.buildJobSubmitResult(jobUUID, jobBatchTable, timeGapInMs, userBatchSize, postponeLaunch, autoRetry), nil } @@ -467,6 +481,8 @@ func (jc *JobController) CancelJob(uuid string) (*sqltypes.Result, error) { // 相比于pause,cancel需要删除内存中的元数据 jc.deleteDMLJobRunningMeta(uuid, tableName) + jc.notifyJobScheduler() + return qr, nil } @@ -575,10 +591,16 @@ func (jc *JobController) validateThrottleParams(expireString string, ratioLitera func (jc *JobController) CompleteJob(ctx context.Context, uuid, table string) (*sqltypes.Result, error) { jc.workingTablesMutex.Lock() defer jc.workingTablesMutex.Unlock() - delete(jc.workingTables, table) statusSetTime := time.Now().Format(time.RFC3339) - return jc.updateJobStatus(ctx, uuid, completedStatus, statusSetTime) + qr, err := jc.updateJobStatus(ctx, uuid, completedStatus, statusSetTime) + if err != nil { + return &sqltypes.Result{}, err + } + + delete(jc.workingTables, table) + jc.notifyJobScheduler() + return qr, nil } // todo, 记录错误时的错误怎么处理 @@ -587,9 +609,8 @@ func (jc *JobController) FailJob(ctx context.Context, uuid, message, tableName s statusSetTime := time.Now().Format(time.RFC3339) _, _ = jc.updateJobStatus(ctx, uuid, failedStatus, statusSetTime) - jc.workingTablesMutex.Lock() - defer jc.workingTablesMutex.Unlock() - delete(jc.workingTables, tableName) + jc.deleteDMLJobRunningMeta(uuid, tableName) + jc.notifyJobScheduler() } @@ -599,47 +620,44 @@ func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { // 等待healthcare扫一遍后再进行 <-checkBeforeSchedule - fmt.Printf("start jobScheduler\n") - ctx := context.Background() + timer := time.NewTicker(time.Duration(jobSchedulerRunningInterval)) + defer timer.Stop() + for { - // todo,这里拿锁存在潜在bug,因为checkDmlJobRunnable中也拿了并去变成running状态,一个job可能被启动多次,要成睡眠和唤醒的方式 - // todo,优化这里的拿锁结构 + select { + case <-timer.C: + case <-jc.schedulerNotifyChan: + } + jc.workingTablesMutex.Lock() jc.tableMutex.Lock() qr, _ := jc.execQuery(ctx, "", sqlDMLJobGetAllJobs) - if qr == nil { - jc.workingTablesMutex.Unlock() - jc.tableMutex.Unlock() - - time.Sleep(3 * time.Second) - continue - } - for _, row := range qr.Named().Rows { - status := row["job_status"].ToString() - schema := row["related_schema"].ToString() - table := row["related_table"].ToString() - uuid := row["job_uuid"].ToString() - jobBatchTable := row["job_batch_table"].ToString() - timegap, _ := row["timegap_in_ms"].ToInt64() - batchSize, _ := row["batch_size"].ToInt64() - runningTimePeriodStart := row["running_time_period_start"].ToString() - runningTimePeriodEnd := row["running_time_period_end"].ToString() + if qr != nil { + for _, row := range qr.Named().Rows { + status := row["job_status"].ToString() + schema := row["related_schema"].ToString() + table := row["related_table"].ToString() + uuid := row["job_uuid"].ToString() + jobBatchTable := row["job_batch_table"].ToString() + timegap, _ := row["timegap_in_ms"].ToInt64() + batchSize, _ := row["batch_size"].ToInt64() + runningTimePeriodStart := row["running_time_period_start"].ToString() + runningTimePeriodEnd := row["running_time_period_end"].ToString() - periodStartTimePtr, periodEndTimePtr := getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd) + periodStartTimePtr, periodEndTimePtr := getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd) - if jc.checkDmlJobRunnable(uuid, status, table, periodStartTimePtr, periodEndTimePtr) { - // todo 这里之后改成休眠的方式后要删掉, 由于外面拿锁,必须在这里就加上,不然后面的循环可能:已经启动go runner的但是还未加入到working table,导致多个表的同时启动 - jc.initDMLJobRunningMeta(uuid, table) - go jc.dmlJobBatchRunner(uuid, table, schema, jobBatchTable, timegap, batchSize, periodStartTimePtr, periodEndTimePtr) + if jc.checkDmlJobRunnable(uuid, status, table, periodStartTimePtr, periodEndTimePtr) { + // 初始化Job在内存中的元数据,防止在dmlJobBatchRunner修改表中的状态前,scheduler多次启动同一个job + jc.initDMLJobRunningMeta(uuid, table) + go jc.dmlJobBatchRunner(uuid, table, schema, jobBatchTable, timegap, batchSize, periodStartTimePtr, periodEndTimePtr) + } } } jc.workingTablesMutex.Unlock() jc.tableMutex.Unlock() - - time.Sleep(3 * time.Second) } } @@ -661,7 +679,7 @@ func getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd string) ( return nil, nil } -// 外部需要加锁 +// 调用该函数时外部必须拿tableMutex锁和workingTablesMutex锁 // todo,并发数的限制 func (jc *JobController) checkDmlJobRunnable(jobUUID, status, table string, periodStartTime, periodEndTime *time.Time) bool { if status != queuedStatus && status != notInTimePeriodStatus { @@ -1126,12 +1144,9 @@ func isAllBatchDone(currentBatchID string, maxBatchIDInt int64) (bool, error) { return currentBatchIDInt > maxBatchIDInt, nil } -// 注意在外面拿锁, todo,换成在里面拿锁? +// 调用该函数时,需要外部要获取相关的锁 func (jc *JobController) initDMLJobRunningMeta(uuid, table string) { - //jc.workingTablesMutex.Lock() jc.workingTables[table] = true - //jc.workingTablesMutex.Unlock() - } func (jc *JobController) deleteDMLJobRunningMeta(uuid, table string) { @@ -1851,3 +1866,17 @@ func (jc *JobController) genBatchSQL(sql string, currentBatchStart, currentBatch } return batchSQL, nil } + +// 通知jobScheduler让它立刻开始一次调度。 +func (jc *JobController) notifyJobScheduler() { + if jc.schedulerNotifyChan == nil { + return + } + + // Try to send. If the channel buffer is full, it means a notification is + // already pending, so we don't need to do anything. + select { + case jc.schedulerNotifyChan <- struct{}{}: + default: + } +} From 67260678f198c95c06a74eafaccbfb25d1cf1d95 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Fri, 29 Dec 2023 13:40:28 +0800 Subject: [PATCH 23/54] feat: batchSize = min(userBatchSize, threshold/table_index_count*ratioOfThreshold) Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/vttablet/jobcontroller/controller.go | 55 ++++++++++++++++++---- 1 file changed, 45 insertions(+), 10 deletions(-) diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 4f2ca1c45b..c6dae2568c 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -60,9 +60,10 @@ const ( ) const ( - defaultTimeGap = 1000 // 1000ms - defaultBatchSize = 150 - defaultThreshold = 100 // todo,通过函数来计算出threshold并传入runner中,要依据索引的个数 + defaultTimeGap = 1000 // 1000ms + defaultBatchSize = 150 + thresholdOfTxnRows = 10000 + ratioOfThreshold = 0.5 ) const ( @@ -142,6 +143,8 @@ const ( running_time_period_end = %a where job_uuid = %a` + + sqlGetIndexCount = `select count(*) as index_count from information_schema.statistics where table_schema = %a and table_name = %a` ) const ( @@ -267,13 +270,15 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run } // 取用户输入的batchSize和程序的threshold的最小值作为每个batch最终的batchSize var batchSize int64 - if userBatchSize < defaultThreshold { + + if userBatchSize < thresholdOfTxnRows { batchSize = userBatchSize } else { - batchSize = defaultThreshold + batchSize = thresholdOfTxnRows } - tableName, jobBatchTable, err := jc.createJobBatches(jobUUID, sql, tableSchema, batchSize) + tableName, jobBatchTable, batchSize, err := jc.createJobBatches(jobUUID, sql, tableSchema, batchSize) + if err != nil { return &sqltypes.Result{}, err } @@ -1477,15 +1482,27 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { } } -func (jc *JobController) createJobBatches(jobUUID, sql, tableSchema string, batchSize int64) (tableName, batchTableName string, err error) { +func (jc *JobController) createJobBatches(jobUUID, sql, tableSchema string, userBatchSize int64) (tableName, batchTableName string, batchSize int64, err error) { // 1.解析用户提交的DML sql,返回DML的各个部分。其中selectSQL用于确定每一个batch的pk范围,生成每一个batch所要执行的batch sql selectSQL, tableName, wherePart, pkPart, pkInfos, err := jc.parseDML(sql, tableSchema) if err != nil { - return "", "", nil + return "", "", 0, nil + } + + // 2.利用selectSQL为该job生成batch表,在此之前生成每个batch的batchSize + // batchSize = min(userBatchSize, thresholdOfTxnRows / 每个表的index数量 * ratioOfThreshold) + indexCount, err := jc.getIndexCount(tableSchema, tableName) + if err != nil { + return "", "", 0, err + } + actualThreshold := int64(float64(thresholdOfTxnRows/indexCount) * ratioOfThreshold) + if userBatchSize < actualThreshold { + batchSize = userBatchSize + } else { + batchSize = actualThreshold } - // 2.利用selectSQL为该job生成batch表 batchTableName, err = jc.createBatchTable(jobUUID, selectSQL, tableSchema, sql, tableName, wherePart, pkPart, pkInfos, batchSize) - return tableName, batchTableName, err + return tableName, batchTableName, batchSize, err } func (jc *JobController) parseDML(sql, tableSchema string) (selectSQL, tableName, wherePart, pkPart string, pkInfos []PKInfo, err error) { @@ -1880,3 +1897,21 @@ func (jc *JobController) notifyJobScheduler() { default: } } + +func (jc *JobController) getIndexCount(tableSchema, tableName string) (indexCount int64, err error) { + query, err := sqlparser.ParseAndBind(sqlGetIndexCount, + sqltypes.StringBindVariable(tableSchema), + sqltypes.StringBindVariable(tableName)) + if err != nil { + return 0, err + } + ctx := context.Background() + qr, err := jc.execQuery(ctx, "", query) + if err != nil { + return 0, err + } + if len(qr.Named().Rows) != 1 { + return 0, err + } + return qr.Named().Rows[0]["index_count"].ToInt64() +} From ed002cae6fca2946136c0edad93421980d82efb4 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Fri, 29 Dec 2023 15:50:20 +0800 Subject: [PATCH 24/54] fix: move constant var about sql to sqls.go Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/vttablet/jobcontroller/controller.go | 153 ++++----------------- go/vt/vttablet/jobcontroller/sqls.go | 105 ++++++++++++++ 2 files changed, 135 insertions(+), 123 deletions(-) create mode 100644 go/vt/vttablet/jobcontroller/sqls.go diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index c6dae2568c..59453e7eea 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -34,14 +34,22 @@ import ( "vitess.io/vitess/go/vt/vttablet/tabletserver/tabletenv" ) -// todo newborn22, 数一下连接数是不是3够用 +// config const ( - databasePoolSize = 3 - healthCheckTimeGap = 5000 // ms + databasePoolSize = 5 + defaultBatchSize = 150 + healthCheckInterval = 5000 // ms + defaultBatchInterval = 1000 // 1000ms + tableEntryGCInterval = 24 * time.Hour jobSchedulerRunningInterval = 10 * time.Second + throttleCheckInterval = 250 * time.Millisecond + + batchSizeThreshold = 10000 + ratioOfBatchSizeThreshold = 0.5 ) +// commands for DML job const ( SubmitJob = "submit_job" ShowJobs = "show_jobs" @@ -59,17 +67,10 @@ const ( SetRunningTimePeriod = "set_running_time_period" ) -const ( - defaultTimeGap = 1000 // 1000ms - defaultBatchSize = 150 - thresholdOfTxnRows = 10000 - ratioOfThreshold = 0.5 -) - +// possible status of DML job const ( postponeLaunchStatus = "postpone-launch" queuedStatus = "queued" - blockedStatus = "blocked" // todo,被正在运行或者paused的任务阻塞时发条消息? runningStatus = "running" pausedStatus = "paused" canceledStatus = "canceled" @@ -78,83 +79,6 @@ const ( notInTimePeriodStatus = "not-in-time-period" ) -const ( - sqlDMLJobGetAllJobs = `select * from mysql.big_dml_jobs_table order by id;` - sqlDMLJobSubmit = `insert into mysql.big_dml_jobs_table ( - job_uuid, - dml_sql, - related_schema, - related_table, - job_batch_table, - timegap_in_ms, - batch_size, - job_status, - status_set_time, - running_time_period_start, - running_time_period_end) values(%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a)` - - sqlDMLJobUpdateMessage = `update mysql.big_dml_jobs_table set - message = %a - where - job_uuid = %a` - - sqlDMLJobUpdateAffectedRows = `update mysql.big_dml_jobs_table set - affected_rows = affected_rows + %a - where - job_uuid = %a` - - sqlDMLJobUpdateStatus = `update mysql.big_dml_jobs_table set - job_status = %a, - status_set_time = %a - where - job_uuid = %a` - - sqlDMLJobGetInfo = `select * from mysql.big_dml_jobs_table - where - job_uuid = %a` - - sqlGetTablePk = ` SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE - WHERE - TABLE_SCHEMA = %a - AND TABLE_NAME = %a - AND CONSTRAINT_NAME = 'PRIMARY'` - - sqlGetTableColNames = `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS - WHERE - TABLE_SCHEMA = %a - AND TABLE_NAME = %a` - - sqlDMLJobUpdateThrottleInfo = `update mysql.big_dml_jobs_table set - throttle_ratio = %a , - throttle_expire_time = %a - where - job_uuid = %a` - - sqlDMLJobClearThrottleInfo = `update mysql.big_dml_jobs_table set - throttle_ratio = NULL , - throttle_expire_time = NULL - where - job_uuid = %a` - - sqlDMLJobDeleteJob = `delete from mysql.big_dml_jobs_table where job_uuid = %a` - - sqlDMLJobUpdateTimePeriod = `update mysql.big_dml_jobs_table set - running_time_period_start = %a, - running_time_period_end = %a - where - job_uuid = %a` - - sqlGetIndexCount = `select count(*) as index_count from information_schema.statistics where table_schema = %a and table_name = %a` -) - -const ( - throttleCheckDuration = 250 * time.Millisecond -) - -const ( - tableEntryGCTimeGap = 3000 * time.Second // todo 改成更长的值,为了测试只设了30s -) - type JobController struct { tableName string tableMutex sync.Mutex // todo newborn22,检查是否都上锁了 @@ -263,7 +187,7 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run } sql = rewirteSQL(sql) if timeGapInMs == 0 { - timeGapInMs = int64(defaultTimeGap) + timeGapInMs = int64(defaultBatchInterval) } if userBatchSize == 0 { userBatchSize = int64(defaultBatchSize) @@ -271,10 +195,10 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run // 取用户输入的batchSize和程序的threshold的最小值作为每个batch最终的batchSize var batchSize int64 - if userBatchSize < thresholdOfTxnRows { + if userBatchSize < batchSizeThreshold { batchSize = userBatchSize } else { - batchSize = thresholdOfTxnRows + batchSize = batchSizeThreshold } tableName, jobBatchTable, batchSize, err := jc.createJobBatches(jobUUID, sql, tableSchema, batchSize) @@ -546,7 +470,7 @@ var throttleInit sync.Once func initThrottleTicker() { throttleInit.Do(func() { go func() { - tick := time.NewTicker(throttleCheckDuration) + tick := time.NewTicker(throttleCheckInterval) defer tick.Stop() for range tick.C { atomic.AddInt64(&throttleTicks, 1) @@ -712,18 +636,11 @@ func (jc *JobController) checkDmlJobRunnable(jobUUID, status, table string, peri return true } -const ( - getDealingBatchIDSQL = `select dealing_batch_id from mysql.big_dml_jobs_table where job_uuid = %a` - updateDealingBatchIDSQL = `update mysql.big_dml_jobs_table set dealing_batch_id = %a where job_uuid = %a` - getBatchSQLsByID = `select batch_sql,batch_count_sql from %s where batch_id = %%a` - getMaxBatchID = `select batch_id as max_batch_id from %s order by id desc limit 1` -) - func (jc *JobController) getDealingBatchID(ctx context.Context, uuid string) (string, error) { jc.tableMutex.Lock() defer jc.tableMutex.Unlock() - submitQuery, err := sqlparser.ParseAndBind(getDealingBatchIDSQL, + submitQuery, err := sqlparser.ParseAndBind(sqlGetDealingBatchID, sqltypes.StringBindVariable(uuid)) if err != nil { return "", err @@ -742,7 +659,7 @@ func (jc *JobController) updateDealingBatchID(ctx context.Context, uuid string, jc.tableMutex.Lock() defer jc.tableMutex.Unlock() - submitQuery, err := sqlparser.ParseAndBind(updateDealingBatchIDSQL, + submitQuery, err := sqlparser.ParseAndBind(sqlUpdateDealingBatchID, sqltypes.Float64BindVariable(batchID), sqltypes.StringBindVariable(uuid)) if err != nil { @@ -757,7 +674,7 @@ func (jc *JobController) updateDealingBatchID(ctx context.Context, uuid string, // todo to confirm,对于同一个job的batch表只有一个线程在访问,因此不用加锁 func (jc *JobController) getBatchSQLsByID(ctx context.Context, batchID, batchTableName, tableSchema string) (batchSQL, batchCountSQL string, err error) { - getBatchSQLWithTableName := fmt.Sprintf(getBatchSQLsByID, batchTableName) + getBatchSQLWithTableName := fmt.Sprintf(sqlTemplateGetBatchSQLsByID, batchTableName) query, err := sqlparser.ParseAndBind(getBatchSQLWithTableName, sqltypes.StringBindVariable(batchID)) if err != nil { @@ -776,7 +693,7 @@ func (jc *JobController) getBatchSQLsByID(ctx context.Context, batchID, batchTab } func (jc *JobController) getMaxBatchID(ctx context.Context, batchTableName, tableSchema string) (string, error) { - getMaxBatchIDWithTableName := fmt.Sprintf(getMaxBatchID, batchTableName) + getMaxBatchIDWithTableName := fmt.Sprintf(sqlTemplateGetMaxBatchID, batchTableName) qr, err := jc.execQuery(ctx, tableSchema, getMaxBatchIDWithTableName) if err != nil { return "", err @@ -833,7 +750,7 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta // 4.记录batch sql已经完成,将行数增加到affected rows中 // 4.1在batch table中记录 - updateBatchStatus := fmt.Sprintf("update %s set batch_status = %%a,actually_affected_rows = actually_affected_rows+%%a where batch_id = %%a", batchTable) + updateBatchStatus := fmt.Sprintf(sqlTempalteUpdateBatchStatusAndAffectedRows, batchTable) updateBatchStatusDoneSQL, err := sqlparser.ParseAndBind(updateBatchStatus, sqltypes.StringBindVariable("Done"), sqltypes.Int64BindVariable(int64(qr.RowsAffected)), @@ -868,7 +785,7 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta if err != nil { return "", err } - submitQuery, err := sqlparser.ParseAndBind(updateDealingBatchIDSQL, + submitQuery, err := sqlparser.ParseAndBind(sqlUpdateDealingBatchID, sqltypes.StringBindVariable(nextBatchID), sqltypes.StringBindVariable(uuid)) @@ -994,7 +911,7 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab // 2.5) 在batch表中更改旧的条目的sql,并插入新batch条目 // 在表中更改旧的sql - updateBatchSQL := fmt.Sprintf("update %s set batch_sql=%%a where batch_id=%%a", batchTable) + updateBatchSQL := fmt.Sprintf(sqlTemplateUpdateBatchSQL, batchTable) updateBatchSQLQuery, err := sqlparser.ParseAndBind(updateBatchSQL, sqltypes.StringBindVariable(curBatchSQL), sqltypes.StringBindVariable(batchID)) @@ -1367,7 +1284,7 @@ func (jc *JobController) getTablePkInfo(ctx context.Context, tableSchema, tableN pkCols += pkName firstPK = false } - selectPKCols := fmt.Sprintf("select %s from %s.%s limit 1", pkCols, tableSchema, tableName) + selectPKCols := fmt.Sprintf(sqlTemplateSelectPKCols, pkCols, tableSchema, tableName) qr, err = jc.execQuery(ctx, "", selectPKCols) if err != nil { return nil, err @@ -1463,7 +1380,7 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { } if status == canceledStatus || status == failedStatus || status == completedStatus { - if time.Now().After(statusSetTimeObj.Add(tableEntryGCTimeGap)) { + if time.Now().After(statusSetTimeObj.Add(tableEntryGCInterval)) { deleteJobSQL, err := sqlparser.ParseAndBind(sqlDMLJobDeleteJob, sqltypes.StringBindVariable(uuid)) if err != nil { @@ -1471,14 +1388,14 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { } _, _ = jc.execQuery(ctx, "", deleteJobSQL) - _, _ = jc.execQuery(ctx, tableSchema, fmt.Sprintf("drop table %s", jobBatchTable)) + _, _ = jc.execQuery(ctx, tableSchema, fmt.Sprintf(sqlTemplateDropTable, jobBatchTable)) } } } } jc.tableMutex.Unlock() - time.Sleep(healthCheckTimeGap * time.Millisecond) + time.Sleep(healthCheckInterval * time.Millisecond) } } @@ -1490,12 +1407,12 @@ func (jc *JobController) createJobBatches(jobUUID, sql, tableSchema string, user } // 2.利用selectSQL为该job生成batch表,在此之前生成每个batch的batchSize - // batchSize = min(userBatchSize, thresholdOfTxnRows / 每个表的index数量 * ratioOfThreshold) + // batchSize = min(userBatchSize, batchSizeThreshold / 每个表的index数量 * ratioOfBatchSizeThreshold) indexCount, err := jc.getIndexCount(tableSchema, tableName) if err != nil { return "", "", 0, err } - actualThreshold := int64(float64(thresholdOfTxnRows/indexCount) * ratioOfThreshold) + actualThreshold := int64(float64(batchSizeThreshold/indexCount) * ratioOfBatchSizeThreshold) if userBatchSize < actualThreshold { batchSize = userBatchSize } else { @@ -1581,17 +1498,7 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, // todo pingcap // todo 2+ -> 2-1 - createTableSQL := fmt.Sprintf(`CREATE TABLE IF NOT EXISTS %s - ( - id bigint unsigned NOT NULL AUTO_INCREMENT, - batch_id varchar(256) NOT NULL, - batch_sql varchar(1024) NOT NULL, - batch_count_sql varchar(1024) NOT NULL, - batch_size bigint unsigned NOT NULL, - actually_affected_rows bigint unsigned NOT NULL DEFAULT 0, - batch_status varchar(64) NOT NULL DEFAULT 'Pending', - PRIMARY KEY (id) - ) ENGINE = InnoDB`, batchTableName) + createTableSQL := fmt.Sprintf(sqlTemplateCreateBatchTable, batchTableName) _, err = jc.execQuery(ctx, tableSchema, createTableSQL) if err != nil { return "", err diff --git a/go/vt/vttablet/jobcontroller/sqls.go b/go/vt/vttablet/jobcontroller/sqls.go new file mode 100644 index 0000000000..85746d35fa --- /dev/null +++ b/go/vt/vttablet/jobcontroller/sqls.go @@ -0,0 +1,105 @@ +/* +Copyright ApeCloud, Inc. +Licensed under the Apache v2(found in the LICENSE file in the root directory). +*/ + +package jobcontroller + +const ( + sqlTemplateCreateBatchTable = `CREATE TABLE IF NOT EXISTS %s + ( + id bigint unsigned NOT NULL AUTO_INCREMENT, + batch_id varchar(256) NOT NULL, + batch_sql varchar(1024) NOT NULL, + batch_count_sql varchar(1024) NOT NULL, + batch_size bigint unsigned NOT NULL, + actually_affected_rows bigint unsigned NOT NULL DEFAULT 0, + batch_status varchar(64) NOT NULL DEFAULT 'Pending', + PRIMARY KEY (id) + ) ENGINE = InnoDB` +) + +const ( + sqlDMLJobGetAllJobs = `select * from mysql.big_dml_jobs_table order by id;` + sqlDMLJobSubmit = `insert into mysql.big_dml_jobs_table ( + job_uuid, + dml_sql, + related_schema, + related_table, + job_batch_table, + timegap_in_ms, + batch_size, + job_status, + status_set_time, + running_time_period_start, + running_time_period_end) values(%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a)` + + sqlDMLJobUpdateMessage = `update mysql.big_dml_jobs_table set + message = %a + where + job_uuid = %a` + + sqlDMLJobUpdateAffectedRows = `update mysql.big_dml_jobs_table set + affected_rows = affected_rows + %a + where + job_uuid = %a` + + sqlDMLJobUpdateStatus = `update mysql.big_dml_jobs_table set + job_status = %a, + status_set_time = %a + where + job_uuid = %a` + + sqlDMLJobGetInfo = `select * from mysql.big_dml_jobs_table + where + job_uuid = %a` + + sqlGetTablePk = ` SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE + WHERE + TABLE_SCHEMA = %a + AND TABLE_NAME = %a + AND CONSTRAINT_NAME = 'PRIMARY'` + + sqlGetTableColNames = `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS + WHERE + TABLE_SCHEMA = %a + AND TABLE_NAME = %a` + + sqlDMLJobUpdateThrottleInfo = `update mysql.big_dml_jobs_table set + throttle_ratio = %a , + throttle_expire_time = %a + where + job_uuid = %a` + + sqlDMLJobClearThrottleInfo = `update mysql.big_dml_jobs_table set + throttle_ratio = NULL , + throttle_expire_time = NULL + where + job_uuid = %a` + + sqlDMLJobDeleteJob = `delete from mysql.big_dml_jobs_table where job_uuid = %a` + + sqlDMLJobUpdateTimePeriod = `update mysql.big_dml_jobs_table set + running_time_period_start = %a, + running_time_period_end = %a + where + job_uuid = %a` + + sqlGetIndexCount = `select count(*) as index_count from information_schema.statistics where table_schema = %a and table_name = %a` + + sqlGetDealingBatchID = `select dealing_batch_id from mysql.big_dml_jobs_table where job_uuid = %a` + + sqlUpdateDealingBatchID = `update mysql.big_dml_jobs_table set dealing_batch_id = %a where job_uuid = %a` + + sqlTemplateGetBatchSQLsByID = `select batch_sql,batch_count_sql from %s where batch_id = %%a` + + sqlTemplateGetMaxBatchID = `select batch_id as max_batch_id from %s order by id desc limit 1` + + sqlTempalteUpdateBatchStatusAndAffectedRows = `update %s set batch_status = %%a,actually_affected_rows = actually_affected_rows+%%a where batch_id = %%a` + + sqlTemplateUpdateBatchSQL = `update %s set batch_sql=%%a where batch_id=%%a` + + sqlTemplateSelectPKCols = `select %s from %s.%s limit 1` + + sqlTemplateDropTable = `drop table if exiss %s` +) From 67e79151a7b41746b4ba59e1724137a0b597d07b Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Fri, 29 Dec 2023 17:26:15 +0800 Subject: [PATCH 25/54] fix: modify some cols in big_dml_jobs_table Signed-off-by: newborn22 <953950914@qq.com> --- .../schema/job/big_dml_jobs_table.sql | 41 ++-------- go/vt/vttablet/jobcontroller/controller.go | 78 ++++++++++--------- go/vt/vttablet/jobcontroller/sqls.go | 20 ++--- 3 files changed, 57 insertions(+), 82 deletions(-) diff --git a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql index 4e3ccf90da..92e29b9caf 100644 --- a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql +++ b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql @@ -14,32 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ --- todo newborn22 ,需要索引?,名字 --- todo newbron22 ,改成batchsize CREATE TABLE IF NOT EXISTS mysql.big_dml_jobs_table -( - `id` bigint unsigned NOT NULL AUTO_INCREMENT, - `job_uuid` varchar(64) NOT NULL UNIQUE, - `job_batch_table` varchar(64) NOT NULL UNIQUE, - `job_status` varchar(128) NOT NULL, - `status_set_time` varchar(128) NOT NULL, - `message` varchar(2048) NULL DEFAULT NULL, - `dml_sql` varchar(256) NOT NULL, - `related_schema` varchar(256) NOT NULL, - `related_table` varchar(256) NOT NULL, - `timegap_in_ms` bigint NOT NULL , - `batch_size` bigint NOT NULL , - `affected_rows` bigint NOT NULL DEFAULT 0, - `throttle_ratio` double NULL DEFAULT NULL, - `throttle_expire_time` varchar(256) NULL DEFAULT NULL, - `dealing_batch_id` varchar(256) NULL DEFAULT NULL, - `running_time_period_start` varchar(256) NULL DEFAULT NULL, - `running_time_period_end` varchar(256) NULL DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE = InnoDB - - -CREATE TABLE IF NOT EXISTS mysql.big_dml_jobs_table2 ( `id` bigint unsigned NOT NULL AUTO_INCREMENT, `job_uuid` varchar(64) NOT NULL UNIQUE, @@ -51,20 +26,16 @@ CREATE TABLE IF NOT EXISTS mysql.big_dml_jobs_table2 `status_set_time` timestamp NOT NULL, `message` varchar(2048) NULL DEFAULT NULL, `dml_sql` text NOT NULL, - - `batch_interval_in_ms` bigint NOT NULL , - - - `batch_size` bigint NOT NULL , - `batch_concurrency` bigint NOT NULL , --todo newborn22 , 并发 - + `batch_concurrency` bigint NOT NULL DEFAULT 1 , `affected_rows` bigint NOT NULL DEFAULT 0, `throttle_ratio` double NULL DEFAULT NULL, `throttle_expire_time` varchar(256) NULL DEFAULT NULL, - `dealing_batch_id` varchar(256) NULL DEFAULT NULL, -- todo newborn22 , delete or no + `dealing_batch_id` varchar(256) NULL DEFAULT NULL, `running_time_period_start` varchar(256) NULL DEFAULT NULL, `running_time_period_end` varchar(256) NULL DEFAULT NULL, - PRIMARY KEY (`id`) - ) ENGINE = InnoDB + PRIMARY KEY (`id`), + KEY `job_uuid_idx` (`job_uuid`), + KEY `status_idx` (`status`) +) ENGINE = InnoDB; diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 59453e7eea..ef31e660e0 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -201,12 +201,13 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run batchSize = batchSizeThreshold } - tableName, jobBatchTable, batchSize, err := jc.createJobBatches(jobUUID, sql, tableSchema, batchSize) + tableName, batchInfoTable, batchSize, err := jc.createJobBatches(jobUUID, sql, tableSchema, batchSize) + batchInfoTableSchema := tableSchema if err != nil { return &sqltypes.Result{}, err } - if jobBatchTable == "" { + if batchInfoTable == "" { return &sqltypes.Result{}, errors.New("this DML sql won't affect any rows") } @@ -235,7 +236,8 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run sqltypes.StringBindVariable(sql), sqltypes.StringBindVariable(tableSchema), sqltypes.StringBindVariable(tableName), - sqltypes.StringBindVariable(jobBatchTable), + sqltypes.StringBindVariable(batchInfoTableSchema), + sqltypes.StringBindVariable(batchInfoTable), sqltypes.Int64BindVariable(timeGapInMs), sqltypes.Int64BindVariable(batchSize), sqltypes.StringBindVariable(jobStatus), @@ -253,7 +255,7 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run jc.notifyJobScheduler() - return jc.buildJobSubmitResult(jobUUID, jobBatchTable, timeGapInMs, userBatchSize, postponeLaunch, autoRetry), nil + return jc.buildJobSubmitResult(jobUUID, batchInfoTable, timeGapInMs, userBatchSize, postponeLaunch, autoRetry), nil } func (jc *JobController) buildJobSubmitResult(jobUUID, jobBatchTable string, timeGap, subtaskRows int64, postponeLaunch, autoRetry bool) *sqltypes.Result { @@ -261,7 +263,7 @@ func (jc *JobController) buildJobSubmitResult(jobUUID, jobBatchTable string, tim row := buildVarCharRow(jobUUID, jobBatchTable, strconv.FormatInt(timeGap, 10), strconv.FormatInt(subtaskRows, 10), strconv.FormatBool(autoRetry), strconv.FormatBool(postponeLaunch)) rows = append(rows, row) submitRst := &sqltypes.Result{ - Fields: buildVarCharFields("job_uuid", "job_batch_table", "time_gap_in_ms", "batch_size", "auto_retry", "postpone_launch"), + Fields: buildVarCharFields("job_uuid", "batch_info_table_name", "time_gap_in_ms", "batch_size", "auto_retry", "postpone_launch"), Rows: rows, RowsAffected: 1, } @@ -281,7 +283,7 @@ func (jc *JobController) ShowJobs() (*sqltypes.Result, error) { func (jc *JobController) PauseJob(uuid string) (*sqltypes.Result, error) { var emptyResult = &sqltypes.Result{} ctx := context.Background() - status, err := jc.GetStrJobInfo(ctx, uuid, "job_status") + status, err := jc.GetStrJobInfo(ctx, uuid, "status") if err != nil { return emptyResult, err } @@ -304,7 +306,7 @@ func (jc *JobController) PauseJob(uuid string) (*sqltypes.Result, error) { func (jc *JobController) ResumeJob(uuid string) (*sqltypes.Result, error) { var emptyResult = &sqltypes.Result{} ctx := context.Background() - status, err := jc.GetStrJobInfo(ctx, uuid, "job_status") + status, err := jc.GetStrJobInfo(ctx, uuid, "status") if err != nil { return emptyResult, err } @@ -327,17 +329,17 @@ func (jc *JobController) ResumeJob(uuid string) (*sqltypes.Result, error) { return emptyResult, errors.New("the len of qr of querying job info by uuid is not 1") } row := rst.Named().Rows[0] - tableSchema := row["related_schema"].ToString() - table := row["related_table"].ToString() - jobBatchTable := row["job_batch_table"].ToString() - timegap, _ := row["timegap_in_ms"].ToInt64() + tableSchema := row["table_schema"].ToString() + table := row["table_name"].ToString() + jobBatchTable := row["batch_info_table_name"].ToString() + batchInterval, _ := row["batch_interval_in_ms"].ToInt64() batchSize, _ := row["batch_szie"].ToInt64() runningTimePeriodStart := row["running_time_period_start"].ToString() runningTimePeriodEnd := row["running_time_period_end"].ToString() periodStartTimePtr, periodEndTimePtr := getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd) // 拉起runner协程,协程内会将状态改为running - go jc.dmlJobBatchRunner(uuid, table, tableSchema, jobBatchTable, timegap, batchSize, periodStartTimePtr, periodEndTimePtr) + go jc.dmlJobBatchRunner(uuid, table, tableSchema, jobBatchTable, batchInterval, batchSize, periodStartTimePtr, periodEndTimePtr) emptyResult.RowsAffected = 1 return emptyResult, nil } @@ -351,7 +353,7 @@ func (jc *JobController) SetRunningTimePeriod(uuid, startTime, endTime string) ( return emptyResult, errors.New("the start time and end time must be both set or not") } - status, err := jc.GetStrJobInfo(ctx, uuid, "job_status") + status, err := jc.GetStrJobInfo(ctx, uuid, "status") if err != nil { return emptyResult, err } @@ -376,7 +378,7 @@ func (jc *JobController) SetRunningTimePeriod(uuid, startTime, endTime string) ( func (jc *JobController) LaunchJob(uuid string) (*sqltypes.Result, error) { var emptyResult = &sqltypes.Result{} ctx := context.Background() - status, err := jc.GetStrJobInfo(ctx, uuid, "job_status") + status, err := jc.GetStrJobInfo(ctx, uuid, "status") if err != nil { return emptyResult, err } @@ -391,7 +393,7 @@ func (jc *JobController) LaunchJob(uuid string) (*sqltypes.Result, error) { func (jc *JobController) CancelJob(uuid string) (*sqltypes.Result, error) { var emptyResult = &sqltypes.Result{} ctx := context.Background() - status, err := jc.GetStrJobInfo(ctx, uuid, "job_status") + status, err := jc.GetStrJobInfo(ctx, uuid, "status") if err != nil { return emptyResult, nil } @@ -405,7 +407,7 @@ func (jc *JobController) CancelJob(uuid string) (*sqltypes.Result, error) { return emptyResult, nil } - tableName, _ := jc.GetStrJobInfo(ctx, uuid, "related_table") + tableName, _ := jc.GetStrJobInfo(ctx, uuid, "table_name") // 相比于pause,cancel需要删除内存中的元数据 jc.deleteDMLJobRunningMeta(uuid, tableName) @@ -561,16 +563,16 @@ func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { jc.workingTablesMutex.Lock() jc.tableMutex.Lock() - - qr, _ := jc.execQuery(ctx, "", sqlDMLJobGetAllJobs) + // 先提交的job先执行 + qr, _ := jc.execQuery(ctx, "", sqlDMLJobGetJobsToSchedule) if qr != nil { for _, row := range qr.Named().Rows { - status := row["job_status"].ToString() - schema := row["related_schema"].ToString() - table := row["related_table"].ToString() + status := row["status"].ToString() + schema := row["table_schema"].ToString() + table := row["table_name"].ToString() uuid := row["job_uuid"].ToString() - jobBatchTable := row["job_batch_table"].ToString() - timegap, _ := row["timegap_in_ms"].ToInt64() + jobBatchTable := row["batch_info_table_name"].ToString() + batchInterval, _ := row["batch_interval_in_ms"].ToInt64() batchSize, _ := row["batch_size"].ToInt64() runningTimePeriodStart := row["running_time_period_start"].ToString() runningTimePeriodEnd := row["running_time_period_end"].ToString() @@ -580,7 +582,7 @@ func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { if jc.checkDmlJobRunnable(uuid, status, table, periodStartTimePtr, periodEndTimePtr) { // 初始化Job在内存中的元数据,防止在dmlJobBatchRunner修改表中的状态前,scheduler多次启动同一个job jc.initDMLJobRunningMeta(uuid, table) - go jc.dmlJobBatchRunner(uuid, table, schema, jobBatchTable, timegap, batchSize, periodStartTimePtr, periodEndTimePtr) + go jc.dmlJobBatchRunner(uuid, table, schema, jobBatchTable, batchInterval, batchSize, periodStartTimePtr, periodEndTimePtr) } } } @@ -945,10 +947,10 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab return newCurrentBatchSQL, nextBatchID, nil } -func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTable string, timeGap, batchSize int64, timePeriodStart, timePeriodEnd *time.Time) { +func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTable string, batchInterval, batchSize int64, timePeriodStart, timePeriodEnd *time.Time) { - // timeGap 单位ms,duration输入ns,应该乘上1000000 - timer := time.NewTicker(time.Duration(timeGap * 1e6)) + // batchInterval 单位ms,duration输入ns,应该乘上1000000 + timer := time.NewTicker(time.Duration(batchInterval * 1e6)) defer timer.Stop() var err error @@ -989,7 +991,7 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTabl // 在一个无限循环中等待定时器触发 for range timer.C { // 定时器触发时执行的函数 - status, err := jc.GetStrJobInfo(ctx, uuid, "job_status") + status, err := jc.GetStrJobInfo(ctx, uuid, "status") if err != nil { jc.FailJob(ctx, uuid, err.Error(), table) return @@ -1331,12 +1333,12 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { jc.tableMutex.Lock() // todo,删掉? for _, row := range qr.Named().Rows { - status := row["job_status"].ToString() - tableSchema := row["related_schema"].ToString() - table := row["related_table"].ToString() - jobBatchTable := row["job_batch_table"].ToString() + status := row["status"].ToString() + tableSchema := row["table_schema"].ToString() + table := row["table_name"].ToString() + jobBatchTable := row["batch_info_table_name"].ToString() uuid := row["job_uuid"].ToString() - timegap, _ := row["timegap_in_ms"].ToInt64() + batchInterval, _ := row["batch_interval_in_ms"].ToInt64() batchSize, _ := row["batch_size"].ToInt64() runningTimePeriodStart := row["running_time_period_start"].ToString() runningTimePeriodEnd := row["running_time_period_end"].ToString() @@ -1344,7 +1346,7 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { if status == runningStatus { jc.initDMLJobRunningMeta(uuid, table) - go jc.dmlJobBatchRunner(uuid, table, tableSchema, jobBatchTable, timegap, batchSize, periodStartTimePtr, periodEndTimePtr) + go jc.dmlJobBatchRunner(uuid, table, tableSchema, jobBatchTable, batchInterval, batchSize, periodStartTimePtr, periodEndTimePtr) } // 对于暂停的,不启动协程,只需要恢复内存元数据 @@ -1368,11 +1370,11 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { qr, _ := jc.execQuery(ctx, "", sqlDMLJobGetAllJobs) if qr != nil { for _, row := range qr.Named().Rows { - status := row["job_status"].ToString() + status := row["status"].ToString() statusSetTime := row["status_set_time"].ToString() uuid := row["job_uuid"].ToString() - jobBatchTable := row["job_batch_table"].ToString() - tableSchema := row["related_schema"].ToString() + jobBatchTable := row["batch_info_table_name"].ToString() + tableSchema := row["table_schema"].ToString() statusSetTimeObj, err := time.Parse(time.RFC3339, statusSetTime) if err != nil { @@ -1490,7 +1492,7 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, // 为每一个DML job创建一张batch表,保存着该job被拆分成batches的具体信息。 // healthCheck协程会定时对处于结束状态(completed,canceled,failed)的job的batch表进行回收 - batchTableName := "job_batch_table_" + strings.Replace(jobUUID, "-", "_", -1) + batchTableName := "batch_info_table_" + strings.Replace(jobUUID, "-", "_", -1) // todo newborn22 batch_size 改成 count_size,count时的大小 // todo newborn22 Pending->queued, completed, // todo newborn22 batch_sql batch_count_sql -> text diff --git a/go/vt/vttablet/jobcontroller/sqls.go b/go/vt/vttablet/jobcontroller/sqls.go index 85746d35fa..f8548f139e 100644 --- a/go/vt/vttablet/jobcontroller/sqls.go +++ b/go/vt/vttablet/jobcontroller/sqls.go @@ -20,19 +20,21 @@ const ( ) const ( - sqlDMLJobGetAllJobs = `select * from mysql.big_dml_jobs_table order by id;` - sqlDMLJobSubmit = `insert into mysql.big_dml_jobs_table ( + sqlDMLJobGetJobsToSchedule = `select * from mysql.big_dml_jobs_table where status IN ('queued','not-in-time-period') order by id` + sqlDMLJobGetAllJobs = `select * from mysql.big_dml_jobs_table order by id` + sqlDMLJobSubmit = `insert into mysql.big_dml_jobs_table ( job_uuid, dml_sql, - related_schema, - related_table, - job_batch_table, - timegap_in_ms, + table_schema, + table_name, + batch_info_table_schema, + batch_info_table_name, + batch_interval_in_ms, batch_size, - job_status, + status, status_set_time, running_time_period_start, - running_time_period_end) values(%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a)` + running_time_period_end) values(%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a)` sqlDMLJobUpdateMessage = `update mysql.big_dml_jobs_table set message = %a @@ -45,7 +47,7 @@ const ( job_uuid = %a` sqlDMLJobUpdateStatus = `update mysql.big_dml_jobs_table set - job_status = %a, + status = %a, status_set_time = %a where job_uuid = %a` From 43e7644db7346adb7bb177aa9c6f8f6d772a4378 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Sat, 30 Dec 2023 17:25:04 +0800 Subject: [PATCH 26/54] feat: add batch begin and end cols on batch table Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/vtgate/planbuilder/show.go | 2 +- go/vt/vttablet/jobcontroller/controller.go | 96 ++++++++++++++++------ go/vt/vttablet/jobcontroller/sqls.go | 25 ++++-- 3 files changed, 89 insertions(+), 34 deletions(-) diff --git a/go/vt/vtgate/planbuilder/show.go b/go/vt/vtgate/planbuilder/show.go index d2586be01c..3f8af4595e 100644 --- a/go/vt/vtgate/planbuilder/show.go +++ b/go/vt/vtgate/planbuilder/show.go @@ -205,7 +205,7 @@ func buildShowDMLJobPlan(show *sqlparser.ShowDMLJob, vschema plancontext.VSchema } } else { UUID := strings.Replace(show.UUID, "-", "_", -1) - sql = fmt.Sprintf("SELECT * FROM job_batch_table_%s", UUID) + sql = fmt.Sprintf("SELECT * FROM batch_info_table_%s", UUID) } return &engine.Send{ diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index ef31e660e0..a930459159 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -37,7 +37,7 @@ import ( // config const ( databasePoolSize = 5 - defaultBatchSize = 150 + defaultBatchSize = 100 healthCheckInterval = 5000 // ms defaultBatchInterval = 1000 // 1000ms @@ -68,6 +68,7 @@ const ( ) // possible status of DML job +// batch is status is in ('queued', 'completed') const ( postponeLaunchStatus = "postpone-launch" queuedStatus = "queued" @@ -690,7 +691,7 @@ func (jc *JobController) getBatchSQLsByID(ctx context.Context, batchID, batchTab return "", "", errors.New("the len of qr of getting batch sql by ID is not 1") } batchSQL, _ = qr.Named().Rows[0].ToString("batch_sql") - batchCountSQL, _ = qr.Named().Rows[0].ToString("batch_count_sql") + batchCountSQL, _ = qr.Named().Rows[0].ToString("batch_count_sql_when_creating_batch") return batchSQL, batchCountSQL, nil } @@ -754,7 +755,7 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta // 4.1在batch table中记录 updateBatchStatus := fmt.Sprintf(sqlTempalteUpdateBatchStatusAndAffectedRows, batchTable) updateBatchStatusDoneSQL, err := sqlparser.ParseAndBind(updateBatchStatus, - sqltypes.StringBindVariable("Done"), + sqltypes.StringBindVariable(completedStatus), sqltypes.Int64BindVariable(int64(qr.RowsAffected)), sqltypes.StringBindVariable(batchID)) if err != nil { @@ -910,12 +911,33 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab curBatchSQL := batchSQLCommonPart + fmt.Sprintf("( (%s) AND (%s) )", curBatchGreatThanPart, curBatchLessThanPart) newBatchSQL := batchSQLCommonPart + fmt.Sprintf("( (%s) AND (%s) )", newBatchGreatThanPart, newBatchLessThanPart) newBatchCountSQL := batchCountSQLCommonPart + fmt.Sprintf("( (%s) AND (%s) )", newBatchGreatThanPart, newBatchLessThanPart) + // 构建当前batch新的batch begin及end字段以及新batch的begin及end字段 + getBatchBeginAndEndSQL := fmt.Sprintf(sqlTemplateGetBatchBeginAndEnd, batchTable) + getBatchBeginAndEndQuery, err := sqlparser.ParseAndBind(getBatchBeginAndEndSQL, sqltypes.StringBindVariable(batchID)) + if err != nil { + return "", "", err + } + qr, err = conn.Exec(ctx, getBatchBeginAndEndQuery, math.MaxInt32, true) + if err != nil { + return "", "", err + } + if len(qr.Named().Rows) != 1 { + return "", "", errors.New("can not get batch begin and end") + } + currentBatchNewBeginStr := qr.Named().Rows[0]["batch_begin"].ToString() + newBatchEndStr := qr.Named().Rows[0]["batch_end"].ToString() + currentBatchNewEndStr, newBatchBegintStr, err := genBatchStartAndEndStr(curBatchNewEnd, newBatchStart, pkInfos) + if err != nil { + return "", "", err + } // 2.5) 在batch表中更改旧的条目的sql,并插入新batch条目 // 在表中更改旧的sql updateBatchSQL := fmt.Sprintf(sqlTemplateUpdateBatchSQL, batchTable) updateBatchSQLQuery, err := sqlparser.ParseAndBind(updateBatchSQL, sqltypes.StringBindVariable(curBatchSQL), + sqltypes.StringBindVariable(currentBatchNewBeginStr), + sqltypes.StringBindVariable(currentBatchNewEndStr), sqltypes.StringBindVariable(batchID)) if err != nil { return "", "", err @@ -931,12 +953,14 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab nextBatchID = newBatchID newBatchSize := expectedRow - batchSize - insertBatchSQL := fmt.Sprintf(insertBatchSQL, batchTable) + insertBatchSQL := fmt.Sprintf(sqlTemplateInsertBatchEntry, batchTable) insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQL, sqltypes.StringBindVariable(newBatchID), sqltypes.StringBindVariable(newBatchSQL), sqltypes.StringBindVariable(newBatchCountSQL), - sqltypes.Int64BindVariable(newBatchSize)) + sqltypes.Int64BindVariable(newBatchSize), + sqltypes.StringBindVariable(newBatchBegintStr), + sqltypes.StringBindVariable(newBatchEndStr)) if err != nil { return "", "", err } @@ -1493,9 +1517,6 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, // 为每一个DML job创建一张batch表,保存着该job被拆分成batches的具体信息。 // healthCheck协程会定时对处于结束状态(completed,canceled,failed)的job的batch表进行回收 batchTableName := "batch_info_table_" + strings.Replace(jobUUID, "-", "_", -1) - // todo newborn22 batch_size 改成 count_size,count时的大小 - // todo newborn22 Pending->queued, completed, - // todo newborn22 batch_sql batch_count_sql -> text // todo newborn22 batch begin, batch end text // todo pingcap // todo 2+ -> 2-1 @@ -1509,14 +1530,14 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, // 遍历每一行的每一个PK的值,记录每一个batch的开始和结束pk值(当有多个pk列时,需要记录多个pk值,pk可能具有不同的数据类型 // 当遍历的行数达到一个batchSize时,即可生成一个batch所要执行的batch SQL,往batch表中插入一个条目 currentBatchSize := int64(0) - // todo newborn22 interface{} -> any + // todo newborn22 any -> any var currentBatchStart []any var currentBatchEnd []any currentBatchID := "1" - insertBatchSQLWithTableName := fmt.Sprintf(insertBatchSQL, batchTableName) + insertBatchSQLWithTableName := fmt.Sprintf(sqlTemplateInsertBatchEntry, batchTableName) for _, row := range qr.Named().Rows { - var pkValues []interface{} + var pkValues []any for _, pkInfo := range pkInfos { pkName := pkInfo.pkName keyVal, err := ProcessValue(row[pkName]) @@ -1539,12 +1560,18 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, if err != nil { return "", err } + batchStartStr, batchEndStr, err := genBatchStartAndEndStr(currentBatchStart, currentBatchEnd, pkInfos) + if err != nil { + return "", err + } currentBatchSize = 0 insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQLWithTableName, sqltypes.StringBindVariable(currentBatchID), sqltypes.StringBindVariable(batchSQL), sqltypes.StringBindVariable(countSQL), - sqltypes.Int64BindVariable(batchSize)) + sqltypes.Int64BindVariable(batchSize), + sqltypes.StringBindVariable(batchStartStr), + sqltypes.StringBindVariable(batchEndStr)) if err != nil { return "", err } @@ -1568,11 +1595,17 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, if err != nil { return "", err } + batchStartStr, batchEndStr, err := genBatchStartAndEndStr(currentBatchStart, currentBatchEnd, pkInfos) + if err != nil { + return "", err + } insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQLWithTableName, sqltypes.StringBindVariable(currentBatchID), sqltypes.StringBindVariable(batchSQL), sqltypes.StringBindVariable(countSQL), - sqltypes.Int64BindVariable(currentBatchSize)) + sqltypes.Int64BindVariable(currentBatchSize), + sqltypes.StringBindVariable(batchStartStr), + sqltypes.StringBindVariable(batchEndStr)) if err != nil { return "", err } @@ -1594,7 +1627,25 @@ func currentBatchIDInc(currentBatchID string) (string, error) { return strconv.FormatInt(currentBatchIDInt64, 10), nil } -func genCountSQL(tableSchema, tableName, wherePart, pkPart string, currentBatchStart, currentBatchEnd []interface{}, pkInfos []PKInfo) (countSQLTemplate string, err error) { +func genBatchStartAndEndStr(currentBatchStart, currentBatchEnd []any, pkInfos []PKInfo) (currentBatchStartStr string, currentBatchStartEnd string, err error) { + for i, pkInfo := range pkInfos { + placeHolder, err := genPlaceholderByType(pkInfo.pkType) + if err != nil { + return "", "", err + } + if i > 0 { + currentBatchStartStr += "," + currentBatchStartEnd += "," + } + currentBatchStartStr += placeHolder + currentBatchStartEnd += placeHolder + currentBatchStartStr = fmt.Sprintf(currentBatchStartStr, currentBatchStart[i]) + currentBatchStartEnd = fmt.Sprintf(currentBatchStartEnd, currentBatchEnd[i]) + } + return currentBatchStartStr, currentBatchStartEnd, nil +} + +func genCountSQL(tableSchema, tableName, wherePart, pkPart string, currentBatchStart, currentBatchEnd []any, pkInfos []PKInfo) (countSQLTemplate string, err error) { if len(pkInfos) == 0 { return "", errors.New("the len of pkInfos is 0") } @@ -1659,7 +1710,7 @@ func genPlaceholderByType(typ querypb.Type) (string, error) { } } -func genPKsGreaterThanPart(pkInfos []PKInfo, currentBatchStart []interface{}) (string, error) { +func genPKsGreaterThanPart(pkInfos []PKInfo, currentBatchStart []any) (string, error) { curIdx := 0 pksNum := len(pkInfos) var equalStr, rst string @@ -1692,7 +1743,7 @@ func genPKsGreaterThanPart(pkInfos []PKInfo, currentBatchStart []interface{}) (s return rst, nil } -func genPKsLessThanPart(pkInfos []PKInfo, currentBatchEnd []interface{}) (string, error) { +func genPKsLessThanPart(pkInfos []PKInfo, currentBatchEnd []any) (string, error) { curIdx := 0 pksNum := len(pkInfos) var equalStr, rst string @@ -1725,16 +1776,7 @@ func genPKsLessThanPart(pkInfos []PKInfo, currentBatchEnd []interface{}) (string return rst, nil } -const ( - insertBatchSQL = ` insert into %s ( - batch_id, - batch_sql, - batch_count_sql, - batch_size - ) values (%%a,%%a,%%a,%%a)` -) - -func ProcessValue(value sqltypes.Value) (interface{}, error) { +func ProcessValue(value sqltypes.Value) (any, error) { typ := value.Type() switch typ { @@ -1753,7 +1795,7 @@ func ProcessValue(value sqltypes.Value) (interface{}, error) { } } -func (jc *JobController) genBatchSQL(sql string, currentBatchStart, currentBatchEnd []interface{}, pkInfos []PKInfo) (batchSQL string, err error) { +func (jc *JobController) genBatchSQL(sql string, currentBatchStart, currentBatchEnd []any, pkInfos []PKInfo) (batchSQL string, err error) { if len(pkInfos) == 1 { if fmt.Sprintf("%T", currentBatchStart[0]) != fmt.Sprintf("%T", currentBatchEnd[0]) { err = errors.New("the type of currentBatchStart and currentBatchEnd is different") diff --git a/go/vt/vttablet/jobcontroller/sqls.go b/go/vt/vttablet/jobcontroller/sqls.go index f8548f139e..332684a9c4 100644 --- a/go/vt/vttablet/jobcontroller/sqls.go +++ b/go/vt/vttablet/jobcontroller/sqls.go @@ -10,11 +10,13 @@ const ( ( id bigint unsigned NOT NULL AUTO_INCREMENT, batch_id varchar(256) NOT NULL, - batch_sql varchar(1024) NOT NULL, - batch_count_sql varchar(1024) NOT NULL, - batch_size bigint unsigned NOT NULL, + batch_status varchar(64) NOT NULL DEFAULT 'queued', + count_size_when_creating_batch bigint unsigned NOT NULL, actually_affected_rows bigint unsigned NOT NULL DEFAULT 0, - batch_status varchar(64) NOT NULL DEFAULT 'Pending', + batch_begin text NOT NULL, + batch_end text NOT NULL, + batch_sql text NOT NULL, + batch_count_sql_when_creating_batch text NOT NULL, PRIMARY KEY (id) ) ENGINE = InnoDB` ) @@ -93,15 +95,26 @@ const ( sqlUpdateDealingBatchID = `update mysql.big_dml_jobs_table set dealing_batch_id = %a where job_uuid = %a` - sqlTemplateGetBatchSQLsByID = `select batch_sql,batch_count_sql from %s where batch_id = %%a` + sqlTemplateGetBatchSQLsByID = `select batch_sql,batch_count_sql_when_creating_batch from %s where batch_id = %%a` sqlTemplateGetMaxBatchID = `select batch_id as max_batch_id from %s order by id desc limit 1` sqlTempalteUpdateBatchStatusAndAffectedRows = `update %s set batch_status = %%a,actually_affected_rows = actually_affected_rows+%%a where batch_id = %%a` - sqlTemplateUpdateBatchSQL = `update %s set batch_sql=%%a where batch_id=%%a` + sqlTemplateUpdateBatchSQL = `update %s set batch_sql=%%a,batch_begin=%%a,batch_end=%%a where batch_id=%%a` sqlTemplateSelectPKCols = `select %s from %s.%s limit 1` sqlTemplateDropTable = `drop table if exiss %s` + + sqlTemplateGetBatchBeginAndEnd = `select batch_begin,batch_end from %s where batch_id=%%a` + + sqlTemplateInsertBatchEntry = ` insert into %s ( + batch_id, + batch_sql, + batch_count_sql_when_creating_batch, + count_size_when_creating_batch, + batch_begin, + batch_end + ) values (%%a,%%a,%%a,%%a,%%a,%%a)` ) From 69b8a8595ee335921b0e37918b22606242a74a1a Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Sat, 30 Dec 2023 20:59:32 +0800 Subject: [PATCH 27/54] fix: modify dealing batch id format from '1+' to '1-1' Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/vttablet/jobcontroller/controller.go | 43 ++++++++++++++++++---- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index a930459159..0b915fc6d5 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -717,6 +717,7 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta } conn, err := jc.pool.Get(ctx, &setting) defer conn.Recycle() + if err != nil { return "", err } @@ -724,6 +725,11 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta // 1.开启事务 // todo,wantfield是否要设置成false _, err = conn.Exec(ctx, "start transaction", math.MaxInt32, true) + // 确保函数意味退出时结束该事务,以释放该事务锁定的资源 + defer func() { + _, _ = conn.Exec(ctx, "rollback", math.MaxInt32, true) + }() + if err != nil { return "", err } @@ -946,16 +952,16 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab if err != nil { return "", "", err } + // 插入新batch条目 newCurrentBatchSQL = curBatchSQL - - // 生成新的table条目并插入 - newBatchID := batchID + "+" - nextBatchID = newBatchID + nextBatchID, err = genNewBatchID(batchID) + if err != nil { + return "", "", err + } newBatchSize := expectedRow - batchSize - insertBatchSQL := fmt.Sprintf(sqlTemplateInsertBatchEntry, batchTable) insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQL, - sqltypes.StringBindVariable(newBatchID), + sqltypes.StringBindVariable(nextBatchID), sqltypes.StringBindVariable(newBatchSQL), sqltypes.StringBindVariable(newBatchCountSQL), sqltypes.Int64BindVariable(newBatchSize), @@ -1076,7 +1082,7 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTabl func isAllBatchDone(currentBatchID string, maxBatchIDInt int64) (bool, error) { var currentBatchIDInt int64 var err error - parts := strings.Split(currentBatchID, "+") + parts := strings.Split(currentBatchID, "-") if len(parts) == 0 { currentBatchIDInt, err = strconv.ParseInt(currentBatchID, 10, 64) if err != nil { @@ -1618,7 +1624,9 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, } func currentBatchIDInc(currentBatchID string) (string, error) { - currentBatchID = strings.Replace(currentBatchID, "+", "", -1) // 去除串中的加号 + if strings.Contains(currentBatchID, "-") { + currentBatchID = strings.Split(currentBatchID, "-")[0] + } currentBatchIDInt64, err := strconv.ParseInt(currentBatchID, 10, 64) if err != nil { return "", err @@ -1866,3 +1874,22 @@ func (jc *JobController) getIndexCount(tableSchema, tableName string) (indexCoun } return qr.Named().Rows[0]["index_count"].ToInt64() } + +func genNewBatchID(batchID string) (newBatchID string, err error) { + // 产生新的batchID + if strings.Contains(batchID, "-") { + parts := strings.Split(batchID, "-") + num, err := strconv.ParseInt(parts[1], 10, 64) + if err != nil { + return "", err + } + newBatchID = fmt.Sprintf("%s-%d", parts[0], num+1) + } else { + num, err := strconv.ParseInt(batchID, 10, 64) + if err != nil { + return "", err + } + newBatchID = fmt.Sprintf("%d-1", num) + } + return newBatchID, nil +} From d270b7375390c2cedf7461ca50b7ec2c144f8d86 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Sat, 30 Dec 2023 21:55:16 +0800 Subject: [PATCH 28/54] feat: dml job details is shown by batchID order Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/vtgate/planbuilder/show.go | 2 +- go/vt/vttablet/jobcontroller/controller.go | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/go/vt/vtgate/planbuilder/show.go b/go/vt/vtgate/planbuilder/show.go index 3f8af4595e..cf957b7ba1 100644 --- a/go/vt/vtgate/planbuilder/show.go +++ b/go/vt/vtgate/planbuilder/show.go @@ -205,7 +205,7 @@ func buildShowDMLJobPlan(show *sqlparser.ShowDMLJob, vschema plancontext.VSchema } } else { UUID := strings.Replace(show.UUID, "-", "_", -1) - sql = fmt.Sprintf("SELECT * FROM batch_info_table_%s", UUID) + sql = fmt.Sprintf("SELECT * FROM batch_info_table_%s order by CAST(SUBSTRING_INDEX(batch_id, '-', 1) AS SIGNED),id", UUID) } return &engine.Send{ diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 0b915fc6d5..7680214145 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -1523,9 +1523,7 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, // 为每一个DML job创建一张batch表,保存着该job被拆分成batches的具体信息。 // healthCheck协程会定时对处于结束状态(completed,canceled,failed)的job的batch表进行回收 batchTableName := "batch_info_table_" + strings.Replace(jobUUID, "-", "_", -1) - // todo newborn22 batch begin, batch end text // todo pingcap - // todo 2+ -> 2-1 createTableSQL := fmt.Sprintf(sqlTemplateCreateBatchTable, batchTableName) _, err = jc.execQuery(ctx, tableSchema, createTableSQL) @@ -1536,7 +1534,6 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, // 遍历每一行的每一个PK的值,记录每一个batch的开始和结束pk值(当有多个pk列时,需要记录多个pk值,pk可能具有不同的数据类型 // 当遍历的行数达到一个batchSize时,即可生成一个batch所要执行的batch SQL,往batch表中插入一个条目 currentBatchSize := int64(0) - // todo newborn22 any -> any var currentBatchStart []any var currentBatchEnd []any currentBatchID := "1" From 101bb9ceaf13b50555749458937a14ae86c293ff Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Sun, 31 Dec 2023 17:40:08 +0800 Subject: [PATCH 29/54] feat: add fail policy Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/proto/query/query.pb.go | 198 +++++++++--------- go/vt/proto/query/query_vtproto.pb.go | 62 +++--- .../schema/job/big_dml_jobs_table.sql | 1 + go/vt/sqlparser/comments.go | 16 +- go/vt/vtgate/executor.go | 4 +- go/vt/vtgate/plan_execute.go | 6 +- go/vt/vtgate/vcursor_impl.go | 2 +- go/vt/vttablet/grpcqueryservice/server.go | 2 +- go/vt/vttablet/grpctabletconn/conn.go | 4 +- go/vt/vttablet/jobcontroller/controller.go | 85 ++++++-- go/vt/vttablet/jobcontroller/sqls.go | 3 +- go/vt/vttablet/queryservice/queryservice.go | 2 +- go/vt/vttablet/queryservice/wrapped.go | 4 +- go/vt/vttablet/sandboxconn/sandboxconn.go | 2 +- .../tabletconntest/fakequeryservice.go | 2 +- go/vt/vttablet/tabletserver/query_executor.go | 14 +- go/vt/vttablet/tabletserver/tabletserver.go | 4 +- proto/query.proto | 8 +- 18 files changed, 235 insertions(+), 184 deletions(-) diff --git a/go/vt/proto/query/query.pb.go b/go/vt/proto/query/query.pb.go index 2b3eb02a37..690b71da98 100644 --- a/go/vt/proto/query/query.pb.go +++ b/go/vt/proto/query/query.pb.go @@ -6139,10 +6139,10 @@ type SubmitDMLJobRequest struct { RelatedSchema string `protobuf:"bytes,4,opt,name=related_schema,json=relatedSchema,proto3" json:"related_schema,omitempty"` Timegap int64 `protobuf:"varint,6,opt,name=timegap,proto3" json:"timegap,omitempty"` BatchSize int64 `protobuf:"varint,7,opt,name=batch_size,json=batchSize,proto3" json:"batch_size,omitempty"` - AutoRetry bool `protobuf:"varint,8,opt,name=auto_retry,json=autoRetry,proto3" json:"auto_retry,omitempty"` - PostponeLaunch bool `protobuf:"varint,9,opt,name=postpone_launch,json=postponeLaunch,proto3" json:"postpone_launch,omitempty"` - TimePeriodStart string `protobuf:"bytes,10,opt,name=time_period_start,json=timePeriodStart,proto3" json:"time_period_start,omitempty"` - TimePeriodEnd string `protobuf:"bytes,11,opt,name=time_period_end,json=timePeriodEnd,proto3" json:"time_period_end,omitempty"` + PostponeLaunch bool `protobuf:"varint,8,opt,name=postpone_launch,json=postponeLaunch,proto3" json:"postpone_launch,omitempty"` + TimePeriodStart string `protobuf:"bytes,9,opt,name=time_period_start,json=timePeriodStart,proto3" json:"time_period_start,omitempty"` + TimePeriodEnd string `protobuf:"bytes,10,opt,name=time_period_end,json=timePeriodEnd,proto3" json:"time_period_end,omitempty"` + FailPolicy string `protobuf:"bytes,11,opt,name=fail_policy,json=failPolicy,proto3" json:"fail_policy,omitempty"` } func (x *SubmitDMLJobRequest) Reset() { @@ -6219,13 +6219,6 @@ func (x *SubmitDMLJobRequest) GetBatchSize() int64 { return 0 } -func (x *SubmitDMLJobRequest) GetAutoRetry() bool { - if x != nil { - return x.AutoRetry - } - return false -} - func (x *SubmitDMLJobRequest) GetPostponeLaunch() bool { if x != nil { return x.PostponeLaunch @@ -6247,6 +6240,13 @@ func (x *SubmitDMLJobRequest) GetTimePeriodEnd() string { return "" } +func (x *SubmitDMLJobRequest) GetFailPolicy() string { + if x != nil { + return x.FailPolicy + } + return "" +} + type SubmitDMLJobResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -7313,7 +7313,7 @@ var file_query_proto_rawDesc = []byte{ 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd0, 0x02, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x44, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd2, 0x02, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x44, 0x4d, 0x4c, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, @@ -7324,93 +7324,93 @@ var file_query_proto_rawDesc = []byte{ 0x6d, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x67, 0x61, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x67, 0x61, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, - 0x75, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x09, 0x61, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x6f, - 0x73, 0x74, 0x70, 0x6f, 0x6e, 0x65, 0x5f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0e, 0x70, 0x6f, 0x73, 0x74, 0x70, 0x6f, 0x6e, 0x65, 0x4c, 0x61, 0x75, - 0x6e, 0x63, 0x68, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, - 0x6f, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, - 0x74, 0x69, 0x6d, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, - 0x26, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x65, - 0x6e, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x65, - 0x72, 0x69, 0x6f, 0x64, 0x45, 0x6e, 0x64, 0x22, 0x42, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x44, 0x4d, 0x4c, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x92, 0x03, 0x0a, 0x09, - 0x4d, 0x79, 0x53, 0x71, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x4d, 0x50, - 0x54, 0x59, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, - 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x52, 0x49, 0x5f, 0x4b, - 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x4e, 0x49, - 0x51, 0x55, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x04, 0x12, 0x15, - 0x0a, 0x11, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, - 0x4c, 0x41, 0x47, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x46, 0x4c, - 0x41, 0x47, 0x10, 0x10, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, - 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x20, 0x12, 0x11, 0x0a, 0x0d, 0x5a, 0x45, 0x52, 0x4f, 0x46, - 0x49, 0x4c, 0x4c, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x40, 0x12, 0x10, 0x0a, 0x0b, 0x42, 0x49, - 0x4e, 0x41, 0x52, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x01, 0x12, 0x0e, 0x0a, 0x09, - 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x02, 0x12, 0x18, 0x0a, 0x13, - 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x49, 0x4e, 0x43, 0x52, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x46, - 0x4c, 0x41, 0x47, 0x10, 0x80, 0x04, 0x12, 0x13, 0x0a, 0x0e, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, - 0x41, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x53, - 0x45, 0x54, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x10, 0x12, 0x1a, 0x0a, 0x15, 0x4e, 0x4f, - 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x46, - 0x4c, 0x41, 0x47, 0x10, 0x80, 0x20, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, - 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x57, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x40, 0x12, - 0x0e, 0x0a, 0x08, 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x02, 0x12, - 0x13, 0x0a, 0x0d, 0x50, 0x41, 0x52, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, - 0x10, 0x80, 0x80, 0x01, 0x12, 0x10, 0x0a, 0x0a, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x46, 0x4c, - 0x41, 0x47, 0x10, 0x80, 0x80, 0x02, 0x12, 0x11, 0x0a, 0x0b, 0x55, 0x4e, 0x49, 0x51, 0x55, 0x45, - 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x04, 0x12, 0x11, 0x0a, 0x0b, 0x42, 0x49, 0x4e, - 0x43, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x08, 0x1a, 0x02, 0x10, 0x01, - 0x2a, 0x6b, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, - 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x4c, - 0x10, 0x80, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, 0x45, - 0x44, 0x10, 0x80, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x49, 0x53, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, - 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x53, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x44, 0x10, 0x80, - 0x10, 0x12, 0x0b, 0x0a, 0x06, 0x49, 0x53, 0x54, 0x45, 0x58, 0x54, 0x10, 0x80, 0x20, 0x12, 0x0d, - 0x0a, 0x08, 0x49, 0x53, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x80, 0x40, 0x2a, 0xc0, 0x03, - 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x04, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x81, 0x02, - 0x12, 0x0a, 0x0a, 0x05, 0x55, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x82, 0x06, 0x12, 0x0a, 0x0a, 0x05, - 0x49, 0x4e, 0x54, 0x31, 0x36, 0x10, 0x83, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, - 0x31, 0x36, 0x10, 0x84, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x85, - 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x86, 0x06, 0x12, 0x0a, - 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x87, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, - 0x4e, 0x54, 0x33, 0x32, 0x10, 0x88, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x36, 0x34, - 0x10, 0x89, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x8a, 0x06, - 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x33, 0x32, 0x10, 0x8b, 0x08, 0x12, 0x0c, - 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x36, 0x34, 0x10, 0x8c, 0x08, 0x12, 0x0e, 0x0a, 0x09, - 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x8d, 0x10, 0x12, 0x09, 0x0a, 0x04, - 0x44, 0x41, 0x54, 0x45, 0x10, 0x8e, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x49, 0x4d, 0x45, 0x10, - 0x8f, 0x10, 0x12, 0x0d, 0x0a, 0x08, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x90, - 0x10, 0x12, 0x09, 0x0a, 0x04, 0x59, 0x45, 0x41, 0x52, 0x10, 0x91, 0x06, 0x12, 0x0b, 0x0a, 0x07, - 0x44, 0x45, 0x43, 0x49, 0x4d, 0x41, 0x4c, 0x10, 0x12, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x45, 0x58, - 0x54, 0x10, 0x93, 0x30, 0x12, 0x09, 0x0a, 0x04, 0x42, 0x4c, 0x4f, 0x42, 0x10, 0x94, 0x50, 0x12, - 0x0c, 0x0a, 0x07, 0x56, 0x41, 0x52, 0x43, 0x48, 0x41, 0x52, 0x10, 0x95, 0x30, 0x12, 0x0e, 0x0a, - 0x09, 0x56, 0x41, 0x52, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x96, 0x50, 0x12, 0x09, 0x0a, - 0x04, 0x43, 0x48, 0x41, 0x52, 0x10, 0x97, 0x30, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x4e, 0x41, - 0x52, 0x59, 0x10, 0x98, 0x50, 0x12, 0x08, 0x0a, 0x03, 0x42, 0x49, 0x54, 0x10, 0x99, 0x10, 0x12, - 0x09, 0x0a, 0x04, 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x9a, 0x10, 0x12, 0x08, 0x0a, 0x03, 0x53, 0x45, - 0x54, 0x10, 0x9b, 0x10, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x55, 0x50, 0x4c, 0x45, 0x10, 0x1c, 0x12, - 0x0d, 0x0a, 0x08, 0x47, 0x45, 0x4f, 0x4d, 0x45, 0x54, 0x52, 0x59, 0x10, 0x9d, 0x10, 0x12, 0x09, - 0x0a, 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x9e, 0x10, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x58, 0x50, - 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x1f, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45, 0x58, - 0x4e, 0x55, 0x4d, 0x10, 0xa0, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45, 0x58, 0x56, 0x41, 0x4c, - 0x10, 0xa1, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x54, 0x4e, 0x55, 0x4d, 0x10, 0xa2, 0x20, - 0x2a, 0x46, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, - 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x45, 0x10, 0x01, 0x12, 0x0a, - 0x0a, 0x06, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x4f, - 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x03, 0x2a, 0x31, 0x0a, 0x0f, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x56, - 0x49, 0x45, 0x57, 0x53, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x53, - 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x02, 0x42, 0x35, 0x0a, 0x0f, 0x69, - 0x6f, 0x2e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x22, - 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, - 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x09, 0x62, 0x61, 0x74, 0x63, 0x68, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x70, + 0x6f, 0x73, 0x74, 0x70, 0x6f, 0x6e, 0x65, 0x5f, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x70, 0x6f, 0x73, 0x74, 0x70, 0x6f, 0x6e, 0x65, 0x4c, 0x61, + 0x75, 0x6e, 0x63, 0x68, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x65, 0x72, + 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, + 0x65, 0x6e, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x50, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x45, 0x6e, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x61, 0x69, 0x6c, + 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, + 0x61, 0x69, 0x6c, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x42, 0x0a, 0x14, 0x53, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x44, 0x4d, 0x4c, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x92, 0x03, + 0x0a, 0x09, 0x4d, 0x79, 0x53, 0x71, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x09, 0x0a, 0x05, 0x45, + 0x4d, 0x50, 0x54, 0x59, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x4e, 0x55, + 0x4c, 0x4c, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x52, 0x49, + 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x55, + 0x4e, 0x49, 0x51, 0x55, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x04, + 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x45, 0x5f, 0x4b, 0x45, 0x59, + 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x4c, 0x4f, 0x42, 0x5f, + 0x46, 0x4c, 0x41, 0x47, 0x10, 0x10, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, + 0x45, 0x44, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x20, 0x12, 0x11, 0x0a, 0x0d, 0x5a, 0x45, 0x52, + 0x4f, 0x46, 0x49, 0x4c, 0x4c, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x40, 0x12, 0x10, 0x0a, 0x0b, + 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x01, 0x12, 0x0e, + 0x0a, 0x09, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x02, 0x12, 0x18, + 0x0a, 0x13, 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x49, 0x4e, 0x43, 0x52, 0x45, 0x4d, 0x45, 0x4e, 0x54, + 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x04, 0x12, 0x13, 0x0a, 0x0e, 0x54, 0x49, 0x4d, 0x45, + 0x53, 0x54, 0x41, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x08, 0x12, 0x0d, 0x0a, + 0x08, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x10, 0x12, 0x1a, 0x0a, 0x15, + 0x4e, 0x4f, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, + 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x20, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x4e, 0x5f, 0x55, + 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x57, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, + 0x40, 0x12, 0x0e, 0x0a, 0x08, 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, + 0x02, 0x12, 0x13, 0x0a, 0x0d, 0x50, 0x41, 0x52, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, + 0x41, 0x47, 0x10, 0x80, 0x80, 0x01, 0x12, 0x10, 0x0a, 0x0a, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, + 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x02, 0x12, 0x11, 0x0a, 0x0b, 0x55, 0x4e, 0x49, 0x51, + 0x55, 0x45, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x04, 0x12, 0x11, 0x0a, 0x0b, 0x42, + 0x49, 0x4e, 0x43, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x08, 0x1a, 0x02, + 0x10, 0x01, 0x2a, 0x6b, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, + 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, + 0x41, 0x4c, 0x10, 0x80, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x55, 0x4e, 0x53, 0x49, 0x47, + 0x4e, 0x45, 0x44, 0x10, 0x80, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x49, 0x53, 0x46, 0x4c, 0x4f, 0x41, + 0x54, 0x10, 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x53, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x44, + 0x10, 0x80, 0x10, 0x12, 0x0b, 0x0a, 0x06, 0x49, 0x53, 0x54, 0x45, 0x58, 0x54, 0x10, 0x80, 0x20, + 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x53, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x80, 0x40, 0x2a, + 0xc0, 0x03, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x55, 0x4c, 0x4c, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x04, 0x49, 0x4e, 0x54, 0x38, 0x10, + 0x81, 0x02, 0x12, 0x0a, 0x0a, 0x05, 0x55, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x82, 0x06, 0x12, 0x0a, + 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x31, 0x36, 0x10, 0x83, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, + 0x4e, 0x54, 0x31, 0x36, 0x10, 0x84, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x32, 0x34, + 0x10, 0x85, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x86, 0x06, + 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x87, 0x02, 0x12, 0x0b, 0x0a, 0x06, + 0x55, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x88, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, + 0x36, 0x34, 0x10, 0x89, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, + 0x8a, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x33, 0x32, 0x10, 0x8b, 0x08, + 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x36, 0x34, 0x10, 0x8c, 0x08, 0x12, 0x0e, + 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x8d, 0x10, 0x12, 0x09, + 0x0a, 0x04, 0x44, 0x41, 0x54, 0x45, 0x10, 0x8e, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x49, 0x4d, + 0x45, 0x10, 0x8f, 0x10, 0x12, 0x0d, 0x0a, 0x08, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, + 0x10, 0x90, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x59, 0x45, 0x41, 0x52, 0x10, 0x91, 0x06, 0x12, 0x0b, + 0x0a, 0x07, 0x44, 0x45, 0x43, 0x49, 0x4d, 0x41, 0x4c, 0x10, 0x12, 0x12, 0x09, 0x0a, 0x04, 0x54, + 0x45, 0x58, 0x54, 0x10, 0x93, 0x30, 0x12, 0x09, 0x0a, 0x04, 0x42, 0x4c, 0x4f, 0x42, 0x10, 0x94, + 0x50, 0x12, 0x0c, 0x0a, 0x07, 0x56, 0x41, 0x52, 0x43, 0x48, 0x41, 0x52, 0x10, 0x95, 0x30, 0x12, + 0x0e, 0x0a, 0x09, 0x56, 0x41, 0x52, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x96, 0x50, 0x12, + 0x09, 0x0a, 0x04, 0x43, 0x48, 0x41, 0x52, 0x10, 0x97, 0x30, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, + 0x4e, 0x41, 0x52, 0x59, 0x10, 0x98, 0x50, 0x12, 0x08, 0x0a, 0x03, 0x42, 0x49, 0x54, 0x10, 0x99, + 0x10, 0x12, 0x09, 0x0a, 0x04, 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x9a, 0x10, 0x12, 0x08, 0x0a, 0x03, + 0x53, 0x45, 0x54, 0x10, 0x9b, 0x10, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x55, 0x50, 0x4c, 0x45, 0x10, + 0x1c, 0x12, 0x0d, 0x0a, 0x08, 0x47, 0x45, 0x4f, 0x4d, 0x45, 0x54, 0x52, 0x59, 0x10, 0x9d, 0x10, + 0x12, 0x09, 0x0a, 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x9e, 0x10, 0x12, 0x0e, 0x0a, 0x0a, 0x45, + 0x58, 0x50, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x1f, 0x12, 0x0b, 0x0a, 0x06, 0x48, + 0x45, 0x58, 0x4e, 0x55, 0x4d, 0x10, 0xa0, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45, 0x58, 0x56, + 0x41, 0x4c, 0x10, 0xa1, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x54, 0x4e, 0x55, 0x4d, 0x10, + 0xa2, 0x20, 0x2a, 0x46, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, + 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x45, 0x10, 0x01, + 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, + 0x52, 0x4f, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x03, 0x2a, 0x31, 0x0a, 0x0f, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, + 0x05, 0x56, 0x49, 0x45, 0x57, 0x53, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x54, 0x41, 0x42, 0x4c, + 0x45, 0x53, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x02, 0x42, 0x35, 0x0a, + 0x0f, 0x69, 0x6f, 0x2e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x5a, 0x22, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, + 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/go/vt/proto/query/query_vtproto.pb.go b/go/vt/proto/query/query_vtproto.pb.go index fa24b7b160..d3bec78aa3 100644 --- a/go/vt/proto/query/query_vtproto.pb.go +++ b/go/vt/proto/query/query_vtproto.pb.go @@ -4707,19 +4707,26 @@ func (m *SubmitDMLJobRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } + if len(m.FailPolicy) > 0 { + i -= len(m.FailPolicy) + copy(dAtA[i:], m.FailPolicy) + i = encodeVarint(dAtA, i, uint64(len(m.FailPolicy))) + i-- + dAtA[i] = 0x5a + } if len(m.TimePeriodEnd) > 0 { i -= len(m.TimePeriodEnd) copy(dAtA[i:], m.TimePeriodEnd) i = encodeVarint(dAtA, i, uint64(len(m.TimePeriodEnd))) i-- - dAtA[i] = 0x5a + dAtA[i] = 0x52 } if len(m.TimePeriodStart) > 0 { i -= len(m.TimePeriodStart) copy(dAtA[i:], m.TimePeriodStart) i = encodeVarint(dAtA, i, uint64(len(m.TimePeriodStart))) i-- - dAtA[i] = 0x52 + dAtA[i] = 0x4a } if m.PostponeLaunch { i-- @@ -4729,16 +4736,6 @@ func (m *SubmitDMLJobRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { dAtA[i] = 0 } i-- - dAtA[i] = 0x48 - } - if m.AutoRetry { - i-- - if m.AutoRetry { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- dAtA[i] = 0x40 } if m.BatchSize != 0 { @@ -6669,9 +6666,6 @@ func (m *SubmitDMLJobRequest) SizeVT() (n int) { if m.BatchSize != 0 { n += 1 + sov(uint64(m.BatchSize)) } - if m.AutoRetry { - n += 2 - } if m.PostponeLaunch { n += 2 } @@ -6683,6 +6677,10 @@ func (m *SubmitDMLJobRequest) SizeVT() (n int) { if l > 0 { n += 1 + l + sov(uint64(l)) } + l = len(m.FailPolicy) + if l > 0 { + n += 1 + l + sov(uint64(l)) + } n += len(m.unknownFields) return n } @@ -18924,7 +18922,7 @@ func (m *SubmitDMLJobRequest) UnmarshalVT(dAtA []byte) error { } case 8: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field AutoRetry", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PostponeLaunch", wireType) } var v int for shift := uint(0); ; shift += 7 { @@ -18941,12 +18939,12 @@ func (m *SubmitDMLJobRequest) UnmarshalVT(dAtA []byte) error { break } } - m.AutoRetry = bool(v != 0) + m.PostponeLaunch = bool(v != 0) case 9: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field PostponeLaunch", wireType) + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TimePeriodStart", wireType) } - var v int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflow @@ -18956,15 +18954,27 @@ func (m *SubmitDMLJobRequest) UnmarshalVT(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - m.PostponeLaunch = bool(v != 0) + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TimePeriodStart = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex case 10: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TimePeriodStart", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TimePeriodEnd", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -18992,11 +19002,11 @@ func (m *SubmitDMLJobRequest) UnmarshalVT(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.TimePeriodStart = string(dAtA[iNdEx:postIndex]) + m.TimePeriodEnd = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 11: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TimePeriodEnd", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field FailPolicy", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -19024,7 +19034,7 @@ func (m *SubmitDMLJobRequest) UnmarshalVT(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.TimePeriodEnd = string(dAtA[iNdEx:postIndex]) + m.FailPolicy = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex diff --git a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql index 92e29b9caf..a80045f82a 100644 --- a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql +++ b/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql @@ -28,6 +28,7 @@ CREATE TABLE IF NOT EXISTS mysql.big_dml_jobs_table `dml_sql` text NOT NULL, `batch_interval_in_ms` bigint NOT NULL , `batch_size` bigint NOT NULL , + `fail_policy` varchar(64) NOT NULL, `batch_concurrency` bigint NOT NULL DEFAULT 1 , `affected_rows` bigint NOT NULL DEFAULT 0, `throttle_ratio` double NULL DEFAULT NULL, diff --git a/go/vt/sqlparser/comments.go b/go/vt/sqlparser/comments.go index dd5a02672e..ec47d22070 100644 --- a/go/vt/sqlparser/comments.go +++ b/go/vt/sqlparser/comments.go @@ -58,7 +58,7 @@ const ( // DirectiveRole specifies the node type for the query. possible values are: PRIMARY/REPLICA/RDONLY DirectiveRole = "ROLE" - DirectiveDMLCMD = "DML_CMD" + DirectiveDMLCMD = "DML_SPLIT" DirectiveDMLTimeGap = "DML_TIME_GAP" DirectiveBATCHSIZE = "DML_BATCH_SIZE" DirectiveDMLPostponeLaunch = "DML_POSTPONE_LAUNCH" @@ -465,7 +465,7 @@ func GetDMLJobCmd(stmt Statement) string { return str } -func GetDMLJobArgs(stmt Statement) (timeGapInMs int64, batchSize int64, postponeLaunch bool, autoRetry bool, timePeriodStart, timePeriodEnd string) { +func GetDMLJobArgs(stmt Statement) (timeGapInMs int64, batchSize int64, postponeLaunch bool, failPolicy, timePeriodStart, timePeriodEnd string) { var comments *ParsedComments switch stmt := stmt.(type) { // todo newborn22 支持insert select @@ -475,7 +475,7 @@ func GetDMLJobArgs(stmt Statement) (timeGapInMs int64, batchSize int64, postpone comments = stmt.Comments } if comments == nil { - return timeGapInMs, batchSize, postponeLaunch, autoRetry, timePeriodStart, timePeriodEnd + return timeGapInMs, batchSize, postponeLaunch, failPolicy, timePeriodStart, timePeriodEnd } var err error @@ -505,17 +505,11 @@ func GetDMLJobArgs(stmt Statement) (timeGapInMs int64, batchSize int64, postpone } } - autoRetryStr, isSet := directives.GetString(DirectiveDMLAutoRetry, "") - if isSet { - autoRetry, err = strconv.ParseBool(autoRetryStr) - if err != nil { - autoRetry = false - } - } + failPolicy, _ = directives.GetString(DirectiveDMLAutoRetry, "") timePeriodStart, _ = directives.GetString(DirectiveDMLTimePeriodStart, "") timePeriodEnd, _ = directives.GetString(DirectiveDMLTimePeriodEnd, "") - return timeGapInMs, batchSize, postponeLaunch, autoRetry, timePeriodStart, timePeriodEnd + return timeGapInMs, batchSize, postponeLaunch, failPolicy, timePeriodStart, timePeriodEnd } diff --git a/go/vt/vtgate/executor.go b/go/vt/vtgate/executor.go index 976b16c412..9f6d5fc0c5 100644 --- a/go/vt/vtgate/executor.go +++ b/go/vt/vtgate/executor.go @@ -1556,7 +1556,7 @@ func (e *Executor) SetFailPoint(command string, key string, value string) error return nil } -func (e *Executor) SubmitDMLJob(command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (e *Executor) SubmitDMLJob(command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { ctx := context.Background() // todo newborn22, scatterConn or txnConn? // todo ,这个写法丑陋,要直接拿到primary @@ -1568,7 +1568,7 @@ func (e *Executor) SubmitDMLJob(command, sql, uuid, tableSchema, timePeriodStart break } } - return th.Conn.SubmitDMLJob(ctx, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd, timeGapInMs, batchSize, postponeLaunch, autoRetry) + return th.Conn.SubmitDMLJob(ctx, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd, timeGapInMs, batchSize, postponeLaunch, failPolicy) } func (e *Executor) checkThatPlanIsValid(stmt sqlparser.Statement, plan *engine.Plan) error { diff --git a/go/vt/vtgate/plan_execute.go b/go/vt/vtgate/plan_execute.go index e55c185208..e552b5ff75 100644 --- a/go/vt/vtgate/plan_execute.go +++ b/go/vt/vtgate/plan_execute.go @@ -442,15 +442,15 @@ func ResolveTabletType(safeSession *SafeSession, vcursor *vcursorImpl, stmt sqlp func IsSubmitDMLJob(stmt sqlparser.Statement) bool { cmd := sqlparser.GetDMLJobCmd(stmt) - return cmd == "submit" + return cmd == "true" } // todo newborn22,提交成功后要返回结果集 func HandleDMLJobSubmit(stmt sqlparser.Statement, vcursor *vcursorImpl, sql string) (*sqltypes.Result, error) { // todo newborn22,检查是否在事务中,如果是则报错 if IsSubmitDMLJob(stmt) { - timeGapInMs, batchSize, postponeLaunch, autoRetry, timePeriodStart, timePeriodEnd := sqlparser.GetDMLJobArgs(stmt) - qr, err := vcursor.executor.SubmitDMLJob("submit_job", sql, "", vcursor.keyspace, timePeriodStart, timePeriodEnd, timeGapInMs, batchSize, postponeLaunch, autoRetry) + timeGapInMs, batchSize, postponeLaunch, failPolicy, timePeriodStart, timePeriodEnd := sqlparser.GetDMLJobArgs(stmt) + qr, err := vcursor.executor.SubmitDMLJob("submit_job", sql, "", vcursor.keyspace, timePeriodStart, timePeriodEnd, timeGapInMs, batchSize, postponeLaunch, failPolicy) // todo ,在这个地方把qr写回到前端 if qr != nil { if qr.RowsAffected == 1 { diff --git a/go/vt/vtgate/vcursor_impl.go b/go/vt/vtgate/vcursor_impl.go index 4381030272..a4a493ede3 100644 --- a/go/vt/vtgate/vcursor_impl.go +++ b/go/vt/vtgate/vcursor_impl.go @@ -93,7 +93,7 @@ type iExecute interface { reloadExec(ctx context.Context, reloadType *sqlparser.ReloadType) error VSchema() *vindexes.VSchema SetFailPoint(command string, key string, value string) error - SubmitDMLJob(command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) + SubmitDMLJob(command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch bool, autoRetry string) (*sqltypes.Result, error) } // VSchemaOperator is an interface to Vschema Operations diff --git a/go/vt/vttablet/grpcqueryservice/server.go b/go/vt/vttablet/grpcqueryservice/server.go index 0e07f288ff..585c7e33f6 100644 --- a/go/vt/vttablet/grpcqueryservice/server.go +++ b/go/vt/vttablet/grpcqueryservice/server.go @@ -529,7 +529,7 @@ func (q *query) SetFailPoint(ctx context.Context, request *querypb.SetFailPointR } func (q *query) SubmitDMLJob(ctx context.Context, request *querypb.SubmitDMLJobRequest) (*querypb.SubmitDMLJobResponse, error) { - rst, err := q.server.SubmitDMLJob(ctx, request.Cmd, request.Sql, request.JobUuid, request.RelatedSchema, request.TimePeriodStart, request.TimePeriodEnd, request.Timegap, request.BatchSize, request.PostponeLaunch, request.AutoRetry) + rst, err := q.server.SubmitDMLJob(ctx, request.Cmd, request.Sql, request.JobUuid, request.RelatedSchema, request.TimePeriodStart, request.TimePeriodEnd, request.Timegap, request.BatchSize, request.PostponeLaunch, request.FailPolicy) return &querypb.SubmitDMLJobResponse{Result: sqltypes.ResultToProto3(rst)}, err } diff --git a/go/vt/vttablet/grpctabletconn/conn.go b/go/vt/vttablet/grpctabletconn/conn.go index dd8bbea7fe..78c83e8534 100644 --- a/go/vt/vttablet/grpctabletconn/conn.go +++ b/go/vt/vttablet/grpctabletconn/conn.go @@ -1133,7 +1133,7 @@ func (conn *gRPCQueryClient) SetFailPoint(ctx context.Context, command string, k return nil } -func (conn *gRPCQueryClient) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (conn *gRPCQueryClient) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { // todo newborn22,为什么要加锁? // todo,什么时候调用? conn.mu.RLock() @@ -1149,7 +1149,7 @@ func (conn *gRPCQueryClient) SubmitDMLJob(ctx context.Context, command, sql, uui Timegap: timeGapInMs, BatchSize: batchSize, PostponeLaunch: postponeLaunch, - AutoRetry: autoRetry, + FailPolicy: failPolicy, TimePeriodStart: timePeriodStart, TimePeriodEnd: timePeriodEnd, } diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 7680214145..f46a2737a6 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -67,6 +67,15 @@ const ( SetRunningTimePeriod = "set_running_time_period" ) +// 当batch执行失败时的策略,需要注意的时,如果Job在执行batch之外的其他地方发生了错误,则Job会直接变成failed状态,而与failPolicy无关 +const ( + failPolicySkip = "skip" // 跳过当前batch,继续执行下一个batch + failPolicyPause = "pause" // 暂停当前job + failPolicyAbort = "abort" // fail当前job + + defaultFailPolicy = failPolicyAbort +) + // possible status of DML job // batch is status is in ('queued', 'completed') const ( @@ -146,12 +155,12 @@ func NewJobController(tableName string, tabletTypeFunc func() topodatapb.TabletT } // todo newborn22 , 能否改写得更有通用性? 这样改写是否好? -func (jc *JobController) HandleRequest(command, sql, jobUUID, tableSchema, expireString, runningTimePeriodStart, runningTimePeriodEnd string, ratioLiteral *sqlparser.Literal, timeGapInMs, usrBatchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (jc *JobController) HandleRequest(command, sql, jobUUID, tableSchema, expireString, runningTimePeriodStart, runningTimePeriodEnd string, ratioLiteral *sqlparser.Literal, timeGapInMs, usrBatchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { // todo newborn22, if 可以删掉 if jc.tabletTypeFunc() == topodatapb.TabletType_PRIMARY { switch command { case SubmitJob: - return jc.SubmitJob(sql, tableSchema, runningTimePeriodStart, runningTimePeriodEnd, timeGapInMs, usrBatchSize, postponeLaunch, autoRetry) + return jc.SubmitJob(sql, tableSchema, runningTimePeriodStart, runningTimePeriodEnd, timeGapInMs, usrBatchSize, postponeLaunch, failPolicy) case ShowJobs: return jc.ShowJobs() case PauseJob: @@ -176,7 +185,7 @@ func (jc *JobController) HandleRequest(command, sql, jobUUID, tableSchema, expir // todo newboen22 函数的可见性,封装性上的改进? // todo 传timegap和table_name -func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, runningTimePeriodEnd string, timeGapInMs, userBatchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, runningTimePeriodEnd string, timeGapInMs, userBatchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { jc.tableMutex.Lock() defer jc.tableMutex.Unlock() @@ -232,6 +241,14 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run } } + if failPolicy == "" { + failPolicy = defaultFailPolicy + } else { + if failPolicy != failPolicyAbort && failPolicy != failPolicySkip && failPolicy != failPolicyPause { + return &sqltypes.Result{}, errors.New("failPolicy must be one of 'abort', 'skip' or 'pause'") + } + } + submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobSubmit, sqltypes.StringBindVariable(jobUUID), sqltypes.StringBindVariable(sql), @@ -243,6 +260,7 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run sqltypes.Int64BindVariable(batchSize), sqltypes.StringBindVariable(jobStatus), sqltypes.StringBindVariable(statusSetTime), + sqltypes.StringBindVariable(failPolicy), sqltypes.StringBindVariable(runningTimePeriodStart), sqltypes.StringBindVariable(runningTimePeriodEnd)) if err != nil { @@ -256,15 +274,15 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run jc.notifyJobScheduler() - return jc.buildJobSubmitResult(jobUUID, batchInfoTable, timeGapInMs, userBatchSize, postponeLaunch, autoRetry), nil + return jc.buildJobSubmitResult(jobUUID, batchInfoTable, timeGapInMs, userBatchSize, postponeLaunch, failPolicy), nil } -func (jc *JobController) buildJobSubmitResult(jobUUID, jobBatchTable string, timeGap, subtaskRows int64, postponeLaunch, autoRetry bool) *sqltypes.Result { +func (jc *JobController) buildJobSubmitResult(jobUUID, jobBatchTable string, timeGap, subtaskRows int64, postponeLaunch bool, failPolicy string) *sqltypes.Result { var rows []sqltypes.Row - row := buildVarCharRow(jobUUID, jobBatchTable, strconv.FormatInt(timeGap, 10), strconv.FormatInt(subtaskRows, 10), strconv.FormatBool(autoRetry), strconv.FormatBool(postponeLaunch)) + row := buildVarCharRow(jobUUID, jobBatchTable, strconv.FormatInt(timeGap, 10), strconv.FormatInt(subtaskRows, 10), failPolicy, strconv.FormatBool(postponeLaunch)) rows = append(rows, row) submitRst := &sqltypes.Result{ - Fields: buildVarCharFields("job_uuid", "batch_info_table_name", "time_gap_in_ms", "batch_size", "auto_retry", "postpone_launch"), + Fields: buildVarCharFields("job_uuid", "batch_info_table_name", "time_gap_in_ms", "batch_size", "fail_policy", "postpone_launch"), Rows: rows, RowsAffected: 1, } @@ -338,9 +356,10 @@ func (jc *JobController) ResumeJob(uuid string) (*sqltypes.Result, error) { runningTimePeriodStart := row["running_time_period_start"].ToString() runningTimePeriodEnd := row["running_time_period_end"].ToString() periodStartTimePtr, periodEndTimePtr := getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd) + failPolicy := row["fail_policy"].ToString() // 拉起runner协程,协程内会将状态改为running - go jc.dmlJobBatchRunner(uuid, table, tableSchema, jobBatchTable, batchInterval, batchSize, periodStartTimePtr, periodEndTimePtr) + go jc.dmlJobBatchRunner(uuid, table, tableSchema, jobBatchTable, failPolicy, batchInterval, batchSize, periodStartTimePtr, periodEndTimePtr) emptyResult.RowsAffected = 1 return emptyResult, nil } @@ -577,13 +596,13 @@ func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { batchSize, _ := row["batch_size"].ToInt64() runningTimePeriodStart := row["running_time_period_start"].ToString() runningTimePeriodEnd := row["running_time_period_end"].ToString() - periodStartTimePtr, periodEndTimePtr := getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd) + failPolicy := row["fail_policy"].ToString() if jc.checkDmlJobRunnable(uuid, status, table, periodStartTimePtr, periodEndTimePtr) { // 初始化Job在内存中的元数据,防止在dmlJobBatchRunner修改表中的状态前,scheduler多次启动同一个job jc.initDMLJobRunningMeta(uuid, table) - go jc.dmlJobBatchRunner(uuid, table, schema, jobBatchTable, batchInterval, batchSize, periodStartTimePtr, periodEndTimePtr) + go jc.dmlJobBatchRunner(uuid, table, schema, jobBatchTable, failPolicy, batchInterval, batchSize, periodStartTimePtr, periodEndTimePtr) } } } @@ -977,7 +996,7 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab return newCurrentBatchSQL, nextBatchID, nil } -func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTable string, batchInterval, batchSize int64, timePeriodStart, timePeriodEnd *time.Time) { +func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, failPolicy string, batchInterval, batchSize int64, timePeriodStart, timePeriodEnd *time.Time) { // batchInterval 单位ms,duration输入ns,应该乘上1000000 timer := time.NewTicker(time.Duration(batchInterval * 1e6)) @@ -1007,7 +1026,7 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTabl return } - maxBatchID, err := jc.getMaxBatchID(ctx, batchTable, relatedSchema) + maxBatchID, err := jc.getMaxBatchID(ctx, batchTable, tableSchema) if err != nil { jc.FailJob(ctx, uuid, err.Error(), table) return @@ -1048,21 +1067,33 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, relatedSchema, batchTabl continue } - batchSQL, batchCountSQL, err := jc.getBatchSQLsByID(ctx, currentBatchID, batchTable, relatedSchema) + // todo 检查id是否位空 + + batchSQL, batchCountSQL, err := jc.getBatchSQLsByID(ctx, currentBatchID, batchTable, tableSchema) if err != nil { jc.FailJob(ctx, uuid, err.Error(), table) return } // 执行当前batch的batch sql,并获得下一要执行的batchID - // todo,将defaultThreshold换成batchSize? 还是说可以超过batchSize但是不超过阈值就行。 - // todo 在batch table中添加一个字段,记录实际执行的行数 - currentBatchID, err = jc.execBatchAndRecord(ctx, relatedSchema, table, batchSQL, batchCountSQL, uuid, batchTable, currentBatchID, batchSize) + currentBatchID, err = jc.execBatchAndRecord(ctx, tableSchema, table, batchSQL, batchCountSQL, uuid, batchTable, currentBatchID, batchSize) + // 如果执行batch时失败,则根据failPolicy决定处理策略 if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) - return + switch failPolicy { + case failPolicyAbort: + jc.FailJob(ctx, uuid, err.Error(), table) + return + case failPolicySkip: + // todo,由于目前batch是串行执行,不存在多个协程同时访问batch表的情况,因此暂时不用加锁。 + _ = jc.updateBatchStatus(tableSchema, batchTable, currentBatchID, failPolicySkip, err.Error()) + continue + case failPolicyPause: + msg := fmt.Sprintf("batch %s failed, pause job: %s", currentBatchID, err.Error()) + _ = jc.updateJobMessage(ctx, uuid, msg) + _, _ = jc.updateJobStatus(ctx, uuid, pausedStatus, statusSetTime) + return + } } - // todo,不能简单地字典序比较 jobDone, err := isAllBatchDone(currentBatchID, maxBatchIDInt) if err != nil { jc.FailJob(ctx, uuid, err.Error(), table) @@ -1373,10 +1404,11 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { runningTimePeriodStart := row["running_time_period_start"].ToString() runningTimePeriodEnd := row["running_time_period_end"].ToString() periodStartTimePtr, periodEndTimePtr := getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd) + failPolicy := row["fail_policy"].ToString() if status == runningStatus { jc.initDMLJobRunningMeta(uuid, table) - go jc.dmlJobBatchRunner(uuid, table, tableSchema, jobBatchTable, batchInterval, batchSize, periodStartTimePtr, periodEndTimePtr) + go jc.dmlJobBatchRunner(uuid, table, tableSchema, jobBatchTable, failPolicy, batchInterval, batchSize, periodStartTimePtr, periodEndTimePtr) } // 对于暂停的,不启动协程,只需要恢复内存元数据 @@ -1890,3 +1922,16 @@ func genNewBatchID(batchID string) (newBatchID string, err error) { } return newBatchID, nil } + +func (jc *JobController) updateBatchStatus(batchTableSchema, batchTableName, status, batchID, errStr string) (err error) { + updateBatchStatusAndAffectedRowsSQL := fmt.Sprintf(sqlTempalteUpdateBatchStatusAndAffectedRows, batchTableName) + query, err := sqlparser.ParseAndBind(updateBatchStatusAndAffectedRowsSQL, + sqltypes.StringBindVariable(status+": "+errStr), + sqltypes.Int64BindVariable(0), + sqltypes.StringBindVariable(batchID)) + if err != nil { + return err + } + _, err = jc.execQuery(context.Background(), batchTableSchema, query) + return err +} diff --git a/go/vt/vttablet/jobcontroller/sqls.go b/go/vt/vttablet/jobcontroller/sqls.go index 332684a9c4..4f5398b054 100644 --- a/go/vt/vttablet/jobcontroller/sqls.go +++ b/go/vt/vttablet/jobcontroller/sqls.go @@ -35,8 +35,9 @@ const ( batch_size, status, status_set_time, + fail_policy, running_time_period_start, - running_time_period_end) values(%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a)` + running_time_period_end) values(%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a)` sqlDMLJobUpdateMessage = `update mysql.big_dml_jobs_table set message = %a diff --git a/go/vt/vttablet/queryservice/queryservice.go b/go/vt/vttablet/queryservice/queryservice.go index cc69bfd99f..4e66bd3e0c 100644 --- a/go/vt/vttablet/queryservice/queryservice.go +++ b/go/vt/vttablet/queryservice/queryservice.go @@ -115,7 +115,7 @@ type QueryService interface { SetFailPoint(ctx context.Context, command string, key string, value string) error - SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, subtaskRows int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) + SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, subtaskRows int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) // HandlePanic will be called if any of the functions panic. HandlePanic(err *error) diff --git a/go/vt/vttablet/queryservice/wrapped.go b/go/vt/vttablet/queryservice/wrapped.go index 6b57cdd105..f9873994f8 100644 --- a/go/vt/vttablet/queryservice/wrapped.go +++ b/go/vt/vttablet/queryservice/wrapped.go @@ -375,11 +375,11 @@ func (ws *wrappedService) SetFailPoint(ctx context.Context, command string, key }) } -func (ws *wrappedService) SubmitDMLJob(ctx context.Context, cmd, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (qr *sqltypes.Result, err error) { +func (ws *wrappedService) SubmitDMLJob(ctx context.Context, cmd, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch bool, failPolicy string) (qr *sqltypes.Result, err error) { err = ws.wrapper(ctx, nil, ws.impl, "SubmitDMLJob", false, nil, func(ctx context.Context, target *querypb.Target, conn QueryService) (bool, error) { // todo newborn22,这个地方是否要canRetry? 参考 dropschema var innerErr error - qr, innerErr = conn.SubmitDMLJob(ctx, cmd, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd, timeGapInMs, batchSize, postponeLaunch, autoRetry) + qr, innerErr = conn.SubmitDMLJob(ctx, cmd, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd, timeGapInMs, batchSize, postponeLaunch, failPolicy) return canRetry(ctx, innerErr), innerErr }) return qr, err diff --git a/go/vt/vttablet/sandboxconn/sandboxconn.go b/go/vt/vttablet/sandboxconn/sandboxconn.go index b04a4943db..38db4dcdf8 100644 --- a/go/vt/vttablet/sandboxconn/sandboxconn.go +++ b/go/vt/vttablet/sandboxconn/sandboxconn.go @@ -625,7 +625,7 @@ func (sbc *SandboxConn) SetFailPoint(ctx context.Context, command string, key st return err } -func (sbc *SandboxConn) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (sbc *SandboxConn) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { return nil, nil } diff --git a/go/vt/vttablet/tabletconntest/fakequeryservice.go b/go/vt/vttablet/tabletconntest/fakequeryservice.go index ebafaa2c5e..5c384ee9cd 100644 --- a/go/vt/vttablet/tabletconntest/fakequeryservice.go +++ b/go/vt/vttablet/tabletconntest/fakequeryservice.go @@ -71,7 +71,7 @@ func (f *FakeQueryService) SetFailPoint(ctx context.Context, command string, key return nil } -func (f *FakeQueryService) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (f *FakeQueryService) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { panic("implement me") } diff --git a/go/vt/vttablet/tabletserver/query_executor.go b/go/vt/vttablet/tabletserver/query_executor.go index 0095e373d3..c1dbac2ce9 100644 --- a/go/vt/vttablet/tabletserver/query_executor.go +++ b/go/vt/vttablet/tabletserver/query_executor.go @@ -1161,19 +1161,19 @@ func (qre *QueryExecutor) execAlterDMLJob() (*sqltypes.Result, error) { uuid := alterDMLJob.UUID switch alterDMLJob.Type { case sqlparser.PauseDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("pause", "", uuid, "", "", "", "", nil, 0, 0, false, false) + return qre.tsv.dmlJonController.HandleRequest("pause", "", uuid, "", "", "", "", nil, 0, 0, false, "") case sqlparser.ResumeDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("resume", "", uuid, "", "", "", "", nil, 0, 0, false, false) + return qre.tsv.dmlJonController.HandleRequest("resume", "", uuid, "", "", "", "", nil, 0, 0, false, "") case sqlparser.LaunchDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("launch", "", uuid, "", "", "", "", nil, 0, 0, false, false) + return qre.tsv.dmlJonController.HandleRequest("launch", "", uuid, "", "", "", "", nil, 0, 0, false, "") case sqlparser.CancelDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("cancel", "", uuid, "", "", "", "", nil, 0, 0, false, false) + return qre.tsv.dmlJonController.HandleRequest("cancel", "", uuid, "", "", "", "", nil, 0, 0, false, "") case sqlparser.ThrottleDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("throttle", "", uuid, "", "", "", alterDMLJob.Expire, alterDMLJob.Ratio, 0, 0, false, false) + return qre.tsv.dmlJonController.HandleRequest("throttle", "", uuid, "", "", "", alterDMLJob.Expire, alterDMLJob.Ratio, 0, 0, false, "") case sqlparser.UnthrottleDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("unthrottle", "", uuid, "", "", "", "", nil, 0, 0, false, false) + return qre.tsv.dmlJonController.HandleRequest("unthrottle", "", uuid, "", "", "", "", nil, 0, 0, false, "") case sqlparser.SetRunningTimePeriodType: - return qre.tsv.dmlJonController.HandleRequest("set_running_time_period", "", uuid, "", "", alterDMLJob.TimePeriodStart, alterDMLJob.TimePeriodEnd, nil, 0, 0, false, false) + return qre.tsv.dmlJonController.HandleRequest("set_running_time_period", "", uuid, "", "", alterDMLJob.TimePeriodStart, alterDMLJob.TimePeriodEnd, nil, 0, 0, false, "") } return nil, vterrors.New(vtrpcpb.Code_UNIMPLEMENTED, "ALTER DML_JOB not implemented") } diff --git a/go/vt/vttablet/tabletserver/tabletserver.go b/go/vt/vttablet/tabletserver/tabletserver.go index 1bf3a1b458..b48befa1a2 100644 --- a/go/vt/vttablet/tabletserver/tabletserver.go +++ b/go/vt/vttablet/tabletserver/tabletserver.go @@ -1496,9 +1496,9 @@ func (tsv *TabletServer) SetFailPoint(ctx context.Context, command string, key s } // todo newborn22,改名,submitDMLjob -func (tsv *TabletServer) SubmitDMLJob(ctx context.Context, command, sql, jobUUID, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch, autoRetry bool) (*sqltypes.Result, error) { +func (tsv *TabletServer) SubmitDMLJob(ctx context.Context, command, sql, jobUUID, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { // todo newborn22, 这个地方要进行封装?,变成更通用的 - return tsv.dmlJonController.HandleRequest(command, sql, jobUUID, tableSchema, "", timePeriodStart, timePeriodEnd, nil, timeGapInMs, batchSize, postponeLaunch, autoRetry) + return tsv.dmlJonController.HandleRequest(command, sql, jobUUID, tableSchema, "", timePeriodStart, timePeriodEnd, nil, timeGapInMs, batchSize, postponeLaunch, failPolicy) } // execRequest performs verifications, sets up the necessary environments diff --git a/proto/query.proto b/proto/query.proto index c9cbb5de71..4a9fa96641 100644 --- a/proto/query.proto +++ b/proto/query.proto @@ -1092,10 +1092,10 @@ message SubmitDMLJobRequest{ string related_schema= 4; int64 timegap = 6; int64 batch_size = 7; - bool auto_retry = 8; - bool postpone_launch = 9; - string time_period_start = 10; - string time_period_end = 11; + bool postpone_launch = 8; + string time_period_start = 9; + string time_period_end = 10; + string fail_policy = 11; } message SubmitDMLJobResponse { QueryResult result = 1; From a58e5bac10d77e5cac6815799713cc2a491044d5 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Sun, 31 Dec 2023 18:43:51 +0800 Subject: [PATCH 30/54] fix: modify the way to get batchID to execute, otherwise failpolicy skip will not work Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/vttablet/jobcontroller/controller.go | 203 +++++++-------------- go/vt/vttablet/jobcontroller/sqls.go | 2 + 2 files changed, 72 insertions(+), 133 deletions(-) diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index f46a2737a6..9657325371 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -584,6 +584,7 @@ func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { jc.workingTablesMutex.Lock() jc.tableMutex.Lock() // 先提交的job先执行 + qr, _ := jc.execQuery(ctx, "", sqlDMLJobGetJobsToSchedule) if qr != nil { for _, row := range qr.Named().Rows { @@ -658,31 +659,24 @@ func (jc *JobController) checkDmlJobRunnable(jobUUID, status, table string, peri return true } -func (jc *JobController) getDealingBatchID(ctx context.Context, uuid string) (string, error) { - jc.tableMutex.Lock() - defer jc.tableMutex.Unlock() - - submitQuery, err := sqlparser.ParseAndBind(sqlGetDealingBatchID, - sqltypes.StringBindVariable(uuid)) - if err != nil { - return "", err - } - qr, err := jc.execQuery(ctx, "", submitQuery) +func (jc *JobController) getBatchIDToExec(ctx context.Context, batchTableSchema, batchTableName string) (string, error) { + getBatchIDToExecSQL := fmt.Sprintf(sqlTemplateGetBatchIDToExec, batchTableName) + qr, err := jc.execQuery(ctx, batchTableSchema, getBatchIDToExecSQL) if err != nil { return "", err } if len(qr.Named().Rows) != 1 { - return "", errors.New("the len of query result of batch ID is not one") + return "", nil } - return qr.Named().Rows[0].ToString("dealing_batch_id") + return qr.Named().Rows[0].ToString("batch_id") } -func (jc *JobController) updateDealingBatchID(ctx context.Context, uuid string, batchID float64) error { +func (jc *JobController) updateDealingBatchID(ctx context.Context, uuid string, batchID string) error { jc.tableMutex.Lock() defer jc.tableMutex.Unlock() submitQuery, err := sqlparser.ParseAndBind(sqlUpdateDealingBatchID, - sqltypes.Float64BindVariable(batchID), + sqltypes.StringBindVariable(batchID), sqltypes.StringBindVariable(uuid)) if err != nil { return err @@ -726,7 +720,7 @@ func (jc *JobController) getMaxBatchID(ctx context.Context, batchTableName, tabl return qr.Named().Rows[0].ToString("max_batch_id") } -func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, table, batchSQL, batchCountSQL, uuid, batchTable, batchID string, batchSize int64) (nextBatchID string, err error) { +func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, table, batchSQL, batchCountSQL, uuid, batchTable, batchID string, batchSize int64) (err error) { defer jc.env.LogError() var setting pools.Setting @@ -738,7 +732,7 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta defer conn.Recycle() if err != nil { - return "", err + return err } // 1.开启事务 @@ -750,30 +744,30 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta }() if err != nil { - return "", err + return err } // 2.查询batch sql预计影响的行数,如果超过阈值,则生成新的batch ID batchCountSQLForShare := batchCountSQL + " FOR SHARE" qr, err := conn.Exec(ctx, batchCountSQLForShare, math.MaxInt32, true) if err != nil { - return "", err + return err } if len(qr.Named().Rows) != 1 { - return "", errors.New("the len of qr of count expected batch size is not 1") + return errors.New("the len of qr of count expected batch size is not 1") } expectedRow, _ := qr.Named().Rows[0].ToInt64("count_rows") if expectedRow > batchSize { - batchSQL, nextBatchID, err = jc.splitBatchIntoTwo(ctx, tableSchema, table, batchTable, batchSQL, batchCountSQL, batchID, conn, batchSize, expectedRow) + batchSQL, err = jc.splitBatchIntoTwo(ctx, tableSchema, table, batchTable, batchSQL, batchCountSQL, batchID, conn, batchSize, expectedRow) if err != nil { - return "", err + return err } } // 3.执行batch sql qr, err = conn.Exec(ctx, batchSQL, math.MaxInt32, true) if err != nil { - return "", err + return err } // 4.记录batch sql已经完成,将行数增加到affected rows中 @@ -784,11 +778,11 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta sqltypes.Int64BindVariable(int64(qr.RowsAffected)), sqltypes.StringBindVariable(batchID)) if err != nil { - return "", err + return err } _, err = conn.Exec(ctx, updateBatchStatusDoneSQL, math.MaxInt32, true) if err != nil { - return "", err + return err } // 4.2在job表中记录 @@ -796,49 +790,32 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta sqltypes.Int64BindVariable(int64(qr.RowsAffected)), sqltypes.StringBindVariable(uuid)) if err != nil { - return "", err + return err } jc.tableMutex.Lock() defer jc.tableMutex.Unlock() _, err = conn.Exec(ctx, updateAffectedRowsSQL, math.MaxInt32, true) if err != nil { - return "", err - } - - // 5.获得新的batchID,更新正在处理的batch ID - if nextBatchID == "" { - // nextBatchID在此处为“”意味着本次batch没有拆分。因此下一个BatchID中不会带有'+' - nextBatchID, err = currentBatchIDInc(batchID) // todo,考虑生成新batch的情况,如何正确地获得下一个batch ID? - } - if err != nil { - return "", err - } - submitQuery, err := sqlparser.ParseAndBind(sqlUpdateDealingBatchID, - sqltypes.StringBindVariable(nextBatchID), - sqltypes.StringBindVariable(uuid)) - - _, err = conn.Exec(ctx, submitQuery, math.MaxInt32, true) - if err != nil { - return "", err + return err } - // 6.提交事务 + // 5.提交事务 _, err = conn.Exec(ctx, "commit", math.MaxInt32, true) if err != nil { - return "", err + return err } - return nextBatchID, nil + return nil } // 将超过batchSize的batch拆分成两个batches,其中第一个batch的大小等于batchSize // 拆分的基本原理是遍历原先batch的batchCountSQL的结果集,将第batchSize条record的pk作为原先batch的PKEnd,第batchSize+1条record的pk作为新batch的PKStart // 原先batch的PKStart和PKEnd分别成为原先batch的PKStart和新batch的PKEnd -func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, table, batchTable, batchSQL, batchCountSQL, batchID string, conn *connpool.DBConn, batchSize, expectedRow int64) (newCurrentBatchSQL, nextBatchID string, err error) { +func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, table, batchTable, batchSQL, batchCountSQL, batchID string, conn *connpool.DBConn, batchSize, expectedRow int64) (newCurrentBatchSQL string, err error) { // 1.根据batchCountSQL生成查询pk值的select sql // 1.1.获得PK信息 pkInfos, err := jc.getTablePkInfo(ctx, tableSchema, table) if err != nil { - return "", "", err + return "", err } isFirstPk := true pkPart := "" @@ -861,7 +838,7 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab // 遍历前threshold+1条,依然使用同一个连接 qr, err := conn.Exec(ctx, batchSplitSelectSQL, math.MaxInt32, true) if err != nil { - return "", "", err + return "", err } var curBatchNewEnd []any @@ -874,7 +851,7 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab pkName := pkInfo.pkName keyVal, err := ProcessValue(row[pkName]) if err != nil { - return "", "", err + return "", err } curBatchNewEnd = append(curBatchNewEnd, keyVal) } @@ -885,7 +862,7 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab pkName := pkInfo.pkName keyVal, err := ProcessValue(row[pkName]) if err != nil { - return "", "", err + return "", err } newBatchStart = append(newBatchStart, keyVal) } @@ -895,12 +872,12 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab // 2.2) 将curBatchNewEnd和newBatchStart转换成sql中where部分的<=和>=的字符串 curBatchLessThanPart, err := genPKsLessThanPart(pkInfos, curBatchNewEnd) if err != nil { - return "", "", err + return "", err } newBatchGreatThanPart, err := genPKsGreaterThanPart(pkInfos, newBatchStart) if err != nil { - return "", "", err + return "", err } // 2.3) 通过正则表达式,获得原先batchSQL中的great than和less than部分,作为当前batch的great than和新batch的less than部分 @@ -927,7 +904,7 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab newBatchLessThanPart = lastMatch[2] } } else { - return "", "", errors.New("can not match greatThan and lessThan parts by regex") + return "", errors.New("can not match greatThan and lessThan parts by regex") } // 2.4) 生成拆分后,当前batch的sql和新batch的sql @@ -940,20 +917,20 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab getBatchBeginAndEndSQL := fmt.Sprintf(sqlTemplateGetBatchBeginAndEnd, batchTable) getBatchBeginAndEndQuery, err := sqlparser.ParseAndBind(getBatchBeginAndEndSQL, sqltypes.StringBindVariable(batchID)) if err != nil { - return "", "", err + return "", err } qr, err = conn.Exec(ctx, getBatchBeginAndEndQuery, math.MaxInt32, true) if err != nil { - return "", "", err + return "", err } if len(qr.Named().Rows) != 1 { - return "", "", errors.New("can not get batch begin and end") + return "", errors.New("can not get batch begin and end") } currentBatchNewBeginStr := qr.Named().Rows[0]["batch_begin"].ToString() newBatchEndStr := qr.Named().Rows[0]["batch_end"].ToString() currentBatchNewEndStr, newBatchBegintStr, err := genBatchStartAndEndStr(curBatchNewEnd, newBatchStart, pkInfos) if err != nil { - return "", "", err + return "", err } // 2.5) 在batch表中更改旧的条目的sql,并插入新batch条目 @@ -965,17 +942,17 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab sqltypes.StringBindVariable(currentBatchNewEndStr), sqltypes.StringBindVariable(batchID)) if err != nil { - return "", "", err + return "", err } _, err = conn.Exec(ctx, updateBatchSQLQuery, math.MaxInt32, true) if err != nil { - return "", "", err + return "", err } // 插入新batch条目 newCurrentBatchSQL = curBatchSQL - nextBatchID, err = genNewBatchID(batchID) + nextBatchID, err := genNewBatchID(batchID) if err != nil { - return "", "", err + return "", err } newBatchSize := expectedRow - batchSize insertBatchSQL := fmt.Sprintf(sqlTemplateInsertBatchEntry, batchTable) @@ -987,13 +964,13 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab sqltypes.StringBindVariable(newBatchBegintStr), sqltypes.StringBindVariable(newBatchEndStr)) if err != nil { - return "", "", err + return "", err } _, err = conn.Exec(ctx, insertBatchSQLQuery, math.MaxInt32, true) if err != nil { - return "", "", err + return "", err } - return newCurrentBatchSQL, nextBatchID, nil + return newCurrentBatchSQL, nil } func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, failPolicy string, batchInterval, batchSize int64, timePeriodStart, timePeriodEnd *time.Time) { @@ -1002,50 +979,22 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, timer := time.NewTicker(time.Duration(batchInterval * 1e6)) defer timer.Stop() - var err error ctx := context.Background() - // 如果currentBatchID为"",意味着这个job之前尚未运行,需要初始化currentBatchID为1 - currentBatchID, err := jc.getDealingBatchID(ctx, uuid) - if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) - return - } - if currentBatchID == "" { - err = jc.updateDealingBatchID(ctx, uuid, 1) - if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) - return - } - currentBatchID = "1" - } - statusSetTime := time.Now().Format(time.RFC3339) - _, err = jc.updateJobStatus(ctx, uuid, runningStatus, statusSetTime) - if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) - return - } - - maxBatchID, err := jc.getMaxBatchID(ctx, batchTable, tableSchema) + _, err := jc.updateJobStatus(ctx, uuid, runningStatus, time.Now().Format(time.RFC3339)) if err != nil { jc.FailJob(ctx, uuid, err.Error(), table) - return - } - maxBatchIDInt, err := strconv.ParseInt(maxBatchID, 10, 64) - if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) - return } // 在一个无限循环中等待定时器触发 for range timer.C { // 定时器触发时执行的函数 + // 检查状态是否为running,可能为paused/canceled status, err := jc.GetStrJobInfo(ctx, uuid, "status") if err != nil { jc.FailJob(ctx, uuid, err.Error(), table) return } - // maybe paused / canceled if status != runningStatus { return } @@ -1067,16 +1016,36 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, continue } - // todo 检查id是否位空 + // 获取本次要执行的batch的batchId + batchIDToExec, err := jc.getBatchIDToExec(ctx, tableSchema, batchTable) + if err != nil { + jc.FailJob(ctx, uuid, err.Error(), table) + return + } + if batchIDToExec == "" { + // 意味着所有的batch都已经执行完毕,则退出 + _, err = jc.CompleteJob(ctx, uuid, table) + if err != nil { + jc.FailJob(ctx, uuid, err.Error(), table) + } + return + } + + // 将batchID信息记录在系统表中便于用户查看 + err = jc.updateDealingBatchID(ctx, uuid, batchIDToExec) + if err != nil { + jc.FailJob(ctx, uuid, err.Error(), table) + return + } - batchSQL, batchCountSQL, err := jc.getBatchSQLsByID(ctx, currentBatchID, batchTable, tableSchema) + batchSQL, batchCountSQL, err := jc.getBatchSQLsByID(ctx, batchIDToExec, batchTable, tableSchema) if err != nil { jc.FailJob(ctx, uuid, err.Error(), table) return } // 执行当前batch的batch sql,并获得下一要执行的batchID - currentBatchID, err = jc.execBatchAndRecord(ctx, tableSchema, table, batchSQL, batchCountSQL, uuid, batchTable, currentBatchID, batchSize) + err = jc.execBatchAndRecord(ctx, tableSchema, table, batchSQL, batchCountSQL, uuid, batchTable, batchIDToExec, batchSize) // 如果执行batch时失败,则根据failPolicy决定处理策略 if err != nil { switch failPolicy { @@ -1085,50 +1054,18 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, return case failPolicySkip: // todo,由于目前batch是串行执行,不存在多个协程同时访问batch表的情况,因此暂时不用加锁。 - _ = jc.updateBatchStatus(tableSchema, batchTable, currentBatchID, failPolicySkip, err.Error()) + _ = jc.updateBatchStatus(tableSchema, batchTable, batchIDToExec, failPolicySkip, err.Error()) continue case failPolicyPause: - msg := fmt.Sprintf("batch %s failed, pause job: %s", currentBatchID, err.Error()) + msg := fmt.Sprintf("batch %s failed, pause job: %s", batchIDToExec, err.Error()) _ = jc.updateJobMessage(ctx, uuid, msg) - _, _ = jc.updateJobStatus(ctx, uuid, pausedStatus, statusSetTime) - return - } - } - jobDone, err := isAllBatchDone(currentBatchID, maxBatchIDInt) - if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) - return - } - if jobDone { - // todo,将completeJob移动到execBatchAndRecord中,确保原子性 - _, err = jc.CompleteJob(ctx, uuid, table) - if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) + _, _ = jc.updateJobStatus(ctx, uuid, pausedStatus, time.Now().Format(time.RFC3339)) return } } } } -func isAllBatchDone(currentBatchID string, maxBatchIDInt int64) (bool, error) { - var currentBatchIDInt int64 - var err error - parts := strings.Split(currentBatchID, "-") - if len(parts) == 0 { - currentBatchIDInt, err = strconv.ParseInt(currentBatchID, 10, 64) - if err != nil { - return false, err - } - } else { - currentBatchIDInt, err = strconv.ParseInt(parts[0], 10, 64) - if err != nil { - return false, err - } - } - - return currentBatchIDInt > maxBatchIDInt, nil -} - // 调用该函数时,需要外部要获取相关的锁 func (jc *JobController) initDMLJobRunningMeta(uuid, table string) { jc.workingTables[table] = true diff --git a/go/vt/vttablet/jobcontroller/sqls.go b/go/vt/vttablet/jobcontroller/sqls.go index 4f5398b054..c37dba0f5f 100644 --- a/go/vt/vttablet/jobcontroller/sqls.go +++ b/go/vt/vttablet/jobcontroller/sqls.go @@ -110,6 +110,8 @@ const ( sqlTemplateGetBatchBeginAndEnd = `select batch_begin,batch_end from %s where batch_id=%%a` + sqlTemplateGetBatchIDToExec = `SELECT batch_id FROM %s where batch_status = 'queued' order by CAST(SUBSTRING_INDEX(batch_id, '-', 1) AS SIGNED),id limit 1` + sqlTemplateInsertBatchEntry = ` insert into %s ( batch_id, batch_sql, From cac208267e273fc1a6ee8929bab1e5694da1225b Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Tue, 2 Jan 2024 11:21:05 +0800 Subject: [PATCH 31/54] fix: clear some old todos; inhibit float type used as split col; inhibit sql without where clause and with limit or order by clause; Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/sqlparser/ast.go | 3 +- go/vt/sqlparser/comments.go | 9 +- go/vt/vtgate/executor.go | 2 - go/vt/vtgate/plan_execute.go | 10 +- go/vt/vttablet/grpctabletconn/conn.go | 2 - go/vt/vttablet/jobcontroller/controller.go | 186 +++++++++++--------- go/vt/vttablet/queryservice/wrapped.go | 1 - go/vt/vttablet/tabletserver/tabletserver.go | 2 - 8 files changed, 111 insertions(+), 104 deletions(-) diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go index d6c40f333c..bcf265a42a 100644 --- a/go/vt/sqlparser/ast.go +++ b/go/vt/sqlparser/ast.go @@ -1675,8 +1675,7 @@ type ( } ShowDMLJob struct { - UUID string - // todo newborn22,换成枚举类型支持更多 + UUID string Detail bool } diff --git a/go/vt/sqlparser/comments.go b/go/vt/sqlparser/comments.go index ec47d22070..ed4df9780e 100644 --- a/go/vt/sqlparser/comments.go +++ b/go/vt/sqlparser/comments.go @@ -58,7 +58,7 @@ const ( // DirectiveRole specifies the node type for the query. possible values are: PRIMARY/REPLICA/RDONLY DirectiveRole = "ROLE" - DirectiveDMLCMD = "DML_SPLIT" + DirectiveDMLSplit = "DML_SPLIT" DirectiveDMLTimeGap = "DML_TIME_GAP" DirectiveBATCHSIZE = "DML_BATCH_SIZE" DirectiveDMLPostponeLaunch = "DML_POSTPONE_LAUNCH" @@ -440,8 +440,7 @@ func GetNodeType(stmt Statement) tabletpb.TabletType { return tabletpb.TabletType_UNKNOWN } -// todo newborn22,是否换成别的命令名字 -// 改成enum? +// todo newborn22 support insert...select, replace...select func GetDMLJobCmd(stmt Statement) string { var comments *ParsedComments switch stmt := stmt.(type) { @@ -458,7 +457,7 @@ func GetDMLJobCmd(stmt Statement) string { return "" } directives := comments.Directives() - str, isSet := directives.GetString(DirectiveDMLCMD, "") + str, isSet := directives.GetString(DirectiveDMLSplit, "") if !isSet { return "" } @@ -468,7 +467,7 @@ func GetDMLJobCmd(stmt Statement) string { func GetDMLJobArgs(stmt Statement) (timeGapInMs int64, batchSize int64, postponeLaunch bool, failPolicy, timePeriodStart, timePeriodEnd string) { var comments *ParsedComments switch stmt := stmt.(type) { - // todo newborn22 支持insert select + // todo newborn22 support insert...select, replace...select case *Update: comments = stmt.Comments case *Delete: diff --git a/go/vt/vtgate/executor.go b/go/vt/vtgate/executor.go index 9f6d5fc0c5..c2c0eb81ec 100644 --- a/go/vt/vtgate/executor.go +++ b/go/vt/vtgate/executor.go @@ -1558,8 +1558,6 @@ func (e *Executor) SetFailPoint(command string, key string, value string) error func (e *Executor) SubmitDMLJob(command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { ctx := context.Background() - // todo newborn22, scatterConn or txnConn? - // todo ,这个写法丑陋,要直接拿到primary healthyTablets := e.scatterConn.gateway.hc.GetAllHealthyTabletStats() var th *discovery.TabletHealth for _, tablet := range healthyTablets { diff --git a/go/vt/vtgate/plan_execute.go b/go/vt/vtgate/plan_execute.go index e552b5ff75..b741bc48a8 100644 --- a/go/vt/vtgate/plan_execute.go +++ b/go/vt/vtgate/plan_execute.go @@ -95,8 +95,6 @@ func (e *Executor) newExecute( return err } - // todo newborn22, 是不是要换位置。 - // 注意只有提交的时候需要这样加hint,其他的都是通过show和alter命令进行,参考online ddl执行路径 rst, err := HandleDMLJobSubmit(stmt, vcursor, sql) if err != nil { return err @@ -445,13 +443,15 @@ func IsSubmitDMLJob(stmt sqlparser.Statement) bool { return cmd == "true" } -// todo newborn22,提交成功后要返回结果集 func HandleDMLJobSubmit(stmt sqlparser.Statement, vcursor *vcursorImpl, sql string) (*sqltypes.Result, error) { - // todo newborn22,检查是否在事务中,如果是则报错 if IsSubmitDMLJob(stmt) { + // if in transaction, return error + if vcursor.InTransaction() { + return nil, errors.New("cannot submit DML job in transaction") + } + timeGapInMs, batchSize, postponeLaunch, failPolicy, timePeriodStart, timePeriodEnd := sqlparser.GetDMLJobArgs(stmt) qr, err := vcursor.executor.SubmitDMLJob("submit_job", sql, "", vcursor.keyspace, timePeriodStart, timePeriodEnd, timeGapInMs, batchSize, postponeLaunch, failPolicy) - // todo ,在这个地方把qr写回到前端 if qr != nil { if qr.RowsAffected == 1 { qr.Info = "job submitted successfully" diff --git a/go/vt/vttablet/grpctabletconn/conn.go b/go/vt/vttablet/grpctabletconn/conn.go index 78c83e8534..260c2eb4da 100644 --- a/go/vt/vttablet/grpctabletconn/conn.go +++ b/go/vt/vttablet/grpctabletconn/conn.go @@ -1134,8 +1134,6 @@ func (conn *gRPCQueryClient) SetFailPoint(ctx context.Context, command string, k } func (conn *gRPCQueryClient) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { - // todo newborn22,为什么要加锁? - // todo,什么时候调用? conn.mu.RLock() defer conn.mu.RUnlock() if conn.cc == nil { diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 9657325371..7dabb5edaf 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -18,6 +18,8 @@ import ( "sync/atomic" "time" + "vitess.io/vitess/go/vt/log" + vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/vttablet/tabletserver/throttle" @@ -91,7 +93,7 @@ const ( type JobController struct { tableName string - tableMutex sync.Mutex // todo newborn22,检查是否都上锁了 + tableMutex sync.Mutex tabletTypeFunc func() topodatapb.TabletType env tabletenv.Env pool *connpool.Pool @@ -111,12 +113,7 @@ type PKInfo struct { pkType querypb.Type } -// todo newborn22, 初始化函数 -// 要加锁? func (jc *JobController) Open() error { - // todo newborn22 ,改成英文注释 - // 只在primary上运行,记得在rpc那里也做处理 - // todo newborn22, if 可以删掉 if jc.tabletTypeFunc() == topodatapb.TabletType_PRIMARY { jc.pool.Open(jc.env.Config().DB.AppConnector(), jc.env.Config().DB.DbaConnector(), jc.env.Config().DB.AppDebugConnector()) @@ -154,37 +151,30 @@ func NewJobController(tableName string, tabletTypeFunc func() topodatapb.TabletT lagThrottler: lagThrottler} } -// todo newborn22 , 能否改写得更有通用性? 这样改写是否好? func (jc *JobController) HandleRequest(command, sql, jobUUID, tableSchema, expireString, runningTimePeriodStart, runningTimePeriodEnd string, ratioLiteral *sqlparser.Literal, timeGapInMs, usrBatchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { - // todo newborn22, if 可以删掉 - if jc.tabletTypeFunc() == topodatapb.TabletType_PRIMARY { - switch command { - case SubmitJob: - return jc.SubmitJob(sql, tableSchema, runningTimePeriodStart, runningTimePeriodEnd, timeGapInMs, usrBatchSize, postponeLaunch, failPolicy) - case ShowJobs: - return jc.ShowJobs() - case PauseJob: - return jc.PauseJob(jobUUID) - case ResumeJob: - return jc.ResumeJob(jobUUID) - case LaunchJob: - return jc.LaunchJob(jobUUID) - case CancelJob: - return jc.CancelJob(jobUUID) - case ThrottleJob: - return jc.ThrottleJob(jobUUID, expireString, ratioLiteral) - case UnthrottleJob: - return jc.UnthrottleJob(jobUUID) - case SetRunningTimePeriod: - return jc.SetRunningTimePeriod(jobUUID, runningTimePeriodStart, runningTimePeriodEnd) - } - } - // todo newborn22,对返回值判断为空? - return nil, nil + switch command { + case SubmitJob: + return jc.SubmitJob(sql, tableSchema, runningTimePeriodStart, runningTimePeriodEnd, timeGapInMs, usrBatchSize, postponeLaunch, failPolicy) + case ShowJobs: + return jc.ShowJobs() + case PauseJob: + return jc.PauseJob(jobUUID) + case ResumeJob: + return jc.ResumeJob(jobUUID) + case LaunchJob: + return jc.LaunchJob(jobUUID) + case CancelJob: + return jc.CancelJob(jobUUID) + case ThrottleJob: + return jc.ThrottleJob(jobUUID, expireString, ratioLiteral) + case UnthrottleJob: + return jc.UnthrottleJob(jobUUID) + case SetRunningTimePeriod: + return jc.SetRunningTimePeriod(jobUUID, runningTimePeriodStart, runningTimePeriodEnd) + } + return &sqltypes.Result{}, fmt.Errorf("unknown command: %s", command) } -// todo newboen22 函数的可见性,封装性上的改进? -// todo 传timegap和table_name func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, runningTimePeriodEnd string, timeGapInMs, userBatchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { jc.tableMutex.Lock() defer jc.tableMutex.Unlock() @@ -554,7 +544,6 @@ func (jc *JobController) CompleteJob(ctx context.Context, uuid, table string) (* return qr, nil } -// todo, 记录错误时的错误怎么处理 func (jc *JobController) FailJob(ctx context.Context, uuid, message, tableName string) { _ = jc.updateJobMessage(ctx, uuid, message) statusSetTime := time.Now().Format(time.RFC3339) @@ -562,11 +551,8 @@ func (jc *JobController) FailJob(ctx context.Context, uuid, message, tableName s jc.deleteDMLJobRunningMeta(uuid, tableName) jc.notifyJobScheduler() - } -// 注意非primary要关掉 -// todo 做成休眠和唤醒的 func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { // 等待healthcare扫一遍后再进行 @@ -631,8 +617,8 @@ func getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd string) ( return nil, nil } +// todo,可以增加并发Job数的限制 // 调用该函数时外部必须拿tableMutex锁和workingTablesMutex锁 -// todo,并发数的限制 func (jc *JobController) checkDmlJobRunnable(jobUUID, status, table string, periodStartTime, periodEndTime *time.Time) bool { if status != queuedStatus && status != notInTimePeriodStatus { return false @@ -688,7 +674,7 @@ func (jc *JobController) updateDealingBatchID(ctx context.Context, uuid string, return nil } -// todo to confirm,对于同一个job的batch表只有一个线程在访问,因此不用加锁 +// todo,由于目前尚不支持一个job的batch并行,因此对job的batch表进行访问不用设锁 func (jc *JobController) getBatchSQLsByID(ctx context.Context, batchID, batchTableName, tableSchema string) (batchSQL, batchCountSQL string, err error) { getBatchSQLWithTableName := fmt.Sprintf(sqlTemplateGetBatchSQLsByID, batchTableName) query, err := sqlparser.ParseAndBind(getBatchSQLWithTableName, @@ -736,11 +722,10 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta } // 1.开启事务 - // todo,wantfield是否要设置成false - _, err = conn.Exec(ctx, "start transaction", math.MaxInt32, true) + _, err = conn.Exec(ctx, "start transaction", math.MaxInt32, false) // 确保函数意味退出时结束该事务,以释放该事务锁定的资源 defer func() { - _, _ = conn.Exec(ctx, "rollback", math.MaxInt32, true) + _, _ = conn.Exec(ctx, "rollback", math.MaxInt32, false) }() if err != nil { @@ -780,7 +765,7 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta if err != nil { return err } - _, err = conn.Exec(ctx, updateBatchStatusDoneSQL, math.MaxInt32, true) + _, err = conn.Exec(ctx, updateBatchStatusDoneSQL, math.MaxInt32, false) if err != nil { return err } @@ -794,13 +779,13 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta } jc.tableMutex.Lock() defer jc.tableMutex.Unlock() - _, err = conn.Exec(ctx, updateAffectedRowsSQL, math.MaxInt32, true) + _, err = conn.Exec(ctx, updateAffectedRowsSQL, math.MaxInt32, false) if err != nil { return err } // 5.提交事务 - _, err = conn.Exec(ctx, "commit", math.MaxInt32, true) + _, err = conn.Exec(ctx, "commit", math.MaxInt32, false) if err != nil { return err } @@ -944,7 +929,7 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab if err != nil { return "", err } - _, err = conn.Exec(ctx, updateBatchSQLQuery, math.MaxInt32, true) + _, err = conn.Exec(ctx, updateBatchSQLQuery, math.MaxInt32, false) if err != nil { return "", err } @@ -966,7 +951,7 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab if err != nil { return "", err } - _, err = conn.Exec(ctx, insertBatchSQLQuery, math.MaxInt32, true) + _, err = conn.Exec(ctx, insertBatchSQLQuery, math.MaxInt32, false) if err != nil { return "", err } @@ -1101,14 +1086,13 @@ func (jc *JobController) execSubtaskAndRecord(ctx context.Context, tableSchema, setting.SetWithoutDBName(false) setting.SetQuery(fmt.Sprintf("use %s", tableSchema)) } - // todo ,是不是有事务专门的连接池?需要看一下代码 conn, err := jc.pool.Get(ctx, &setting) defer conn.Recycle() if err != nil { return 0, err } - _, err = conn.Exec(ctx, "start transaction", math.MaxInt32, true) + _, err = conn.Exec(ctx, "start transaction", math.MaxInt32, false) if err != nil { return 0, err } @@ -1121,11 +1105,11 @@ func (jc *JobController) execSubtaskAndRecord(ctx context.Context, tableSchema, recordRstSQL, err := sqlparser.ParseAndBind(sqlDMLJobUpdateAffectedRows, sqltypes.Int64BindVariable(affectedRows), sqltypes.StringBindVariable(uuid)) - _, err = conn.Exec(ctx, recordRstSQL, math.MaxInt32, true) + _, err = conn.Exec(ctx, recordRstSQL, math.MaxInt32, false) if err != nil { return 0, err } - _, err = conn.Exec(ctx, "commit", math.MaxInt32, true) + _, err = conn.Exec(ctx, "commit", math.MaxInt32, false) if err != nil { return 0, err } @@ -1323,12 +1307,11 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { ctx := context.Background() // 用于crash后,重启时,先扫一遍running和paused的 - // todo,能不能用代码手段确保下面的逻辑只运行一次 qr, _ := jc.execQuery(ctx, "", sqlDMLJobGetAllJobs) if qr != nil { jc.workingTablesMutex.Lock() - jc.tableMutex.Lock() // todo,删掉? + jc.tableMutex.Lock() for _, row := range qr.Named().Rows { status := row["status"].ToString() @@ -1359,7 +1342,7 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { jc.tableMutex.Unlock() } - fmt.Printf("check of running and paused done \n") + log.Info("check of running and paused done \n") checkBeforeSchedule <- struct{}{} for { @@ -1404,7 +1387,7 @@ func (jc *JobController) createJobBatches(jobUUID, sql, tableSchema string, user // 1.解析用户提交的DML sql,返回DML的各个部分。其中selectSQL用于确定每一个batch的pk范围,生成每一个batch所要执行的batch sql selectSQL, tableName, wherePart, pkPart, pkInfos, err := jc.parseDML(sql, tableSchema) if err != nil { - return "", "", 0, nil + return "", "", 0, err } // 2.利用selectSQL为该job生成batch表,在此之前生成每个batch的batchSize @@ -1435,23 +1418,50 @@ func (jc *JobController) parseDML(sql, tableSchema string) (selectSQL, tableName return "", "", "", "", nil, errors.New("the number of table is more than one") } tableExpr, ok := s.TableExprs[0].(*sqlparser.AliasedTableExpr) - // 目前暂不支持join和多表 todo + // todo 目前暂不支持join和多表 if !ok { return "", "", "", "", nil, errors.New("don't support join table now") } tableName = sqlparser.String(tableExpr) wherePart = sqlparser.String(s.Where) + if wherePart == "" { + return "", "", "", "", nil, errors.New("the sql doesn't have where condition") + } + limitPart := sqlparser.String(s.Limit) + if limitPart != "" { + return "", "", "", "", nil, errors.New("the SQL should not have limit clause") + } + orderByPart := sqlparser.String(s.OrderBy) + if orderByPart != "" { + return "", "", "", "", nil, errors.New("the SQL should not have order by clause") + } + case *sqlparser.Update: if len(s.TableExprs) != 1 { return "", "", "", "", nil, errors.New("the number of table is more than one") } tableExpr, ok := s.TableExprs[0].(*sqlparser.AliasedTableExpr) - // 目前暂不支持join和多表 todo + // todo 目前暂不支持join和多表 if !ok { return "", "", "", "", nil, errors.New("don't support join table now") } tableName = sqlparser.String(tableExpr) wherePart = sqlparser.String(s.Where) + if wherePart == "" { + return "", "", "", "", nil, errors.New("the sql doesn't have where condition") + } + limitPart := sqlparser.String(s.Limit) + if limitPart != "" { + return "", "", "", "", nil, errors.New("the SQL should not have limit clause") + } + orderByPart := sqlparser.String(s.OrderBy) + if orderByPart != "" { + return "", "", "", "", nil, errors.New("the SQL should not have order by clause") + } + + default: + // todo support select...into, replace...into + return "", "", "", "", nil, errors.New("the type of sql is not supported") } // 获得该DML所相关表的PK信息,将其中的PK列组成字符串pkPart,形如"PKCol1,PKCol2,PKCol3" @@ -1492,7 +1502,6 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, // 为每一个DML job创建一张batch表,保存着该job被拆分成batches的具体信息。 // healthCheck协程会定时对处于结束状态(completed,canceled,failed)的job的batch表进行回收 batchTableName := "batch_info_table_" + strings.Replace(jobUUID, "-", "_", -1) - // todo pingcap createTableSQL := fmt.Sprintf(sqlTemplateCreateBatchTable, batchTableName) _, err = jc.execQuery(ctx, tableSchema, createTableSQL) @@ -1619,6 +1628,9 @@ func genBatchStartAndEndStr(currentBatchStart, currentBatchEnd []any, pkInfos [] return currentBatchStartStr, currentBatchStartEnd, nil } +// 拆分列所支持的类型需要满足以下条件: +// 1.在sql中可以正确地使用between或>=,<=进行比较运算,且没有精度问题。 +// 2.可以转换成go中的int64,float64或string三种类型之一,且转换后,在golang中的比较规则和mysql中的比较规则相同 func genCountSQL(tableSchema, tableName, wherePart, pkPart string, currentBatchStart, currentBatchEnd []any, pkInfos []PKInfo) (countSQLTemplate string, err error) { if len(pkInfos) == 0 { return "", errors.New("the len of pkInfos is 0") @@ -1634,12 +1646,10 @@ func genCountSQL(tableSchema, tableName, wherePart, pkPart string, currentBatchS tableSchema, tableName, wherePart, pkPart, currentBatchStart[0], currentBatchEnd[0], pkPart) case querypb.Type_FLOAT32, querypb.Type_FLOAT64: - countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between %f AND %f order by %s", - tableSchema, tableName, wherePart, pkPart, currentBatchStart[0], currentBatchEnd[0], pkPart) + return "", errors.New("float type is unsupported") - // todo decimal类型能否转换成string待定 case querypb.Type_TIMESTAMP, querypb.Type_DATE, querypb.Type_TIME, querypb.Type_DATETIME, querypb.Type_YEAR, - querypb.Type_DECIMAL, querypb.Type_TEXT, querypb.Type_VARCHAR, querypb.Type_CHAR, querypb.Type_BLOB: + querypb.Type_TEXT, querypb.Type_VARCHAR, querypb.Type_CHAR: countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between '%s' AND '%s' order by %s", tableSchema, tableName, wherePart, pkPart, currentBatchStart[0], currentBatchEnd[0], pkPart) @@ -1675,15 +1685,32 @@ func genPlaceholderByType(typ querypb.Type) (string, error) { return "%d", nil case querypb.Type_FLOAT32, querypb.Type_FLOAT64: return "%f", nil - // todo decimal类型能否转换成string待定 case querypb.Type_TIMESTAMP, querypb.Type_DATE, querypb.Type_TIME, querypb.Type_DATETIME, querypb.Type_YEAR, - querypb.Type_DECIMAL, querypb.Type_TEXT, querypb.Type_VARCHAR, querypb.Type_CHAR, querypb.Type_BLOB: + querypb.Type_TEXT, querypb.Type_VARCHAR, querypb.Type_CHAR: return "%s", nil default: return "", fmt.Errorf("Unsupported type: %v", typ) } } +func ProcessValue(value sqltypes.Value) (any, error) { + typ := value.Type() + + switch typ { + case querypb.Type_INT8, querypb.Type_INT16, querypb.Type_INT24, querypb.Type_INT32, querypb.Type_INT64: + return value.ToInt64() + case querypb.Type_UINT8, querypb.Type_UINT16, querypb.Type_UINT24, querypb.Type_UINT32, querypb.Type_UINT64: + return value.ToUint64() + case querypb.Type_FLOAT32, querypb.Type_FLOAT64: + return value.ToFloat64() + case querypb.Type_TIMESTAMP, querypb.Type_DATE, querypb.Type_TIME, querypb.Type_DATETIME, querypb.Type_YEAR, + querypb.Type_TEXT, querypb.Type_VARCHAR, querypb.Type_CHAR: + return value.ToString(), nil + default: + return nil, fmt.Errorf("Unsupported type: %v", typ) + } +} + func genPKsGreaterThanPart(pkInfos []PKInfo, currentBatchStart []any) (string, error) { curIdx := 0 pksNum := len(pkInfos) @@ -1691,6 +1718,10 @@ func genPKsGreaterThanPart(pkInfos []PKInfo, currentBatchStart []any) (string, e for curIdx < pksNum { curPkName := pkInfos[curIdx].pkName curPKType := pkInfos[curIdx].pkType + // mysql的浮点类型在比较时有精度损失,不适合作为拆分列 + if curPKType == querypb.Type_FLOAT32 || curPKType == querypb.Type_FLOAT64 { + return "", fmt.Errorf("unsupported type: %v", curPKType) + } placeholder, err := genPlaceholderByType(curPKType) if err != nil { @@ -1724,6 +1755,10 @@ func genPKsLessThanPart(pkInfos []PKInfo, currentBatchEnd []any) (string, error) for curIdx < pksNum { curPkName := pkInfos[curIdx].pkName curPKType := pkInfos[curIdx].pkType + // mysql的浮点类型在比较时有精度损失,不适合作为拆分列 + if curPKType == querypb.Type_FLOAT32 || curPKType == querypb.Type_FLOAT64 { + return "", fmt.Errorf("unsupported type: %v", curPKType) + } placeholder, err := genPlaceholderByType(curPKType) if err != nil { @@ -1750,25 +1785,6 @@ func genPKsLessThanPart(pkInfos []PKInfo, currentBatchEnd []any) (string, error) return rst, nil } -func ProcessValue(value sqltypes.Value) (any, error) { - typ := value.Type() - - switch typ { - case querypb.Type_INT8, querypb.Type_INT16, querypb.Type_INT24, querypb.Type_INT32, querypb.Type_INT64: - return value.ToInt64() - case querypb.Type_UINT8, querypb.Type_UINT16, querypb.Type_UINT24, querypb.Type_UINT32, querypb.Type_UINT64: - return value.ToUint64() - case querypb.Type_FLOAT32, querypb.Type_FLOAT64: - return value.ToFloat64() - // todo decimal类型能否转换成string待定 - case querypb.Type_TIMESTAMP, querypb.Type_DATE, querypb.Type_TIME, querypb.Type_DATETIME, querypb.Type_YEAR, - querypb.Type_DECIMAL, querypb.Type_TEXT, querypb.Type_VARCHAR, querypb.Type_CHAR, querypb.Type_BLOB: - return value.ToString(), nil - default: - return nil, fmt.Errorf("Unsupported type: %v", typ) - } -} - func (jc *JobController) genBatchSQL(sql string, currentBatchStart, currentBatchEnd []any, pkInfos []PKInfo) (batchSQL string, err error) { if len(pkInfos) == 1 { if fmt.Sprintf("%T", currentBatchStart[0]) != fmt.Sprintf("%T", currentBatchEnd[0]) { @@ -1782,7 +1798,7 @@ func (jc *JobController) genBatchSQL(sql string, currentBatchStart, currentBatch case uint64: batchSQL = sql + fmt.Sprintf(" AND %s between %d AND %d", pkName, currentBatchStart[0].(uint64), currentBatchEnd[0].(uint64)) case float64: - batchSQL = sql + fmt.Sprintf(" AND %s between %f AND %f", pkName, currentBatchStart[0].(float64), currentBatchEnd[0].(float64)) + return "", errors.New("float type is unsupported") case string: batchSQL = sql + fmt.Sprintf(" AND %s between '%s' AND '%s'", pkName, currentBatchStart[0].(string), currentBatchEnd[0].(string)) default: diff --git a/go/vt/vttablet/queryservice/wrapped.go b/go/vt/vttablet/queryservice/wrapped.go index f9873994f8..fb47617cca 100644 --- a/go/vt/vttablet/queryservice/wrapped.go +++ b/go/vt/vttablet/queryservice/wrapped.go @@ -377,7 +377,6 @@ func (ws *wrappedService) SetFailPoint(ctx context.Context, command string, key func (ws *wrappedService) SubmitDMLJob(ctx context.Context, cmd, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch bool, failPolicy string) (qr *sqltypes.Result, err error) { err = ws.wrapper(ctx, nil, ws.impl, "SubmitDMLJob", false, nil, func(ctx context.Context, target *querypb.Target, conn QueryService) (bool, error) { - // todo newborn22,这个地方是否要canRetry? 参考 dropschema var innerErr error qr, innerErr = conn.SubmitDMLJob(ctx, cmd, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd, timeGapInMs, batchSize, postponeLaunch, failPolicy) return canRetry(ctx, innerErr), innerErr diff --git a/go/vt/vttablet/tabletserver/tabletserver.go b/go/vt/vttablet/tabletserver/tabletserver.go index b48befa1a2..9ee9de73bd 100644 --- a/go/vt/vttablet/tabletserver/tabletserver.go +++ b/go/vt/vttablet/tabletserver/tabletserver.go @@ -1495,9 +1495,7 @@ func (tsv *TabletServer) SetFailPoint(ctx context.Context, command string, key s return err } -// todo newborn22,改名,submitDMLjob func (tsv *TabletServer) SubmitDMLJob(ctx context.Context, command, sql, jobUUID, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { - // todo newborn22, 这个地方要进行封装?,变成更通用的 return tsv.dmlJonController.HandleRequest(command, sql, jobUUID, tableSchema, "", timePeriodStart, timePeriodEnd, nil, timeGapInMs, batchSize, postponeLaunch, failPolicy) } From 39f6367f9285255b18853e72fa6910f6239ee5ea Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Wed, 3 Jan 2024 17:01:56 +0800 Subject: [PATCH 32/54] fix: modify system table name; add StripComments func; call setResetQuery after calling setQuery; replace sleep with ticker Signed-off-by: newborn22 <953950914@qq.com> --- ...ble.sql => non_transactional_dml_jobs.sql} | 2 +- go/vt/sqlparser/comments.go | 25 ++++++++++ go/vt/vtgate/planbuilder/show.go | 4 +- go/vt/vttablet/jobcontroller/controller.go | 46 ++++++++----------- go/vt/vttablet/jobcontroller/sqls.go | 26 +++++------ go/vt/vttablet/tabletserver/tabletserver.go | 2 +- 6 files changed, 62 insertions(+), 43 deletions(-) rename go/vt/sidecardb/schema/job/{big_dml_jobs_table.sql => non_transactional_dml_jobs.sql} (97%) diff --git a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql b/go/vt/sidecardb/schema/job/non_transactional_dml_jobs.sql similarity index 97% rename from go/vt/sidecardb/schema/job/big_dml_jobs_table.sql rename to go/vt/sidecardb/schema/job/non_transactional_dml_jobs.sql index a80045f82a..6cec771ab8 100644 --- a/go/vt/sidecardb/schema/job/big_dml_jobs_table.sql +++ b/go/vt/sidecardb/schema/job/non_transactional_dml_jobs.sql @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -CREATE TABLE IF NOT EXISTS mysql.big_dml_jobs_table +CREATE TABLE IF NOT EXISTS mysql.non_transactional_dml_jobs ( `id` bigint unsigned NOT NULL AUTO_INCREMENT, `job_uuid` varchar(64) NOT NULL UNIQUE, diff --git a/go/vt/sqlparser/comments.go b/go/vt/sqlparser/comments.go index ed4df9780e..961b6b9ec2 100644 --- a/go/vt/sqlparser/comments.go +++ b/go/vt/sqlparser/comments.go @@ -193,6 +193,31 @@ func StripLeadingComments(sql string) string { return sql } +// StripComments trims the SQL string and removes all comments wrapped by /**/. +func StripComments(sql string) string { + var output strings.Builder + inComment := false + + for i := 0; i < len(sql); i++ { + if !inComment && i+1 < len(sql) && sql[i:i+2] == "/*" { + inComment = true + i++ + continue + } + + if inComment && i+1 < len(sql) && sql[i:i+2] == "*/" { + inComment = false + i++ + continue + } + + if !inComment { + output.WriteByte(sql[i]) + } + } + return output.String() +} + func hasCommentPrefix(sql string) bool { return len(sql) > 1 && ((sql[0] == '/' && sql[1] == '*') || (sql[0] == '-' && sql[1] == '-')) } diff --git a/go/vt/vtgate/planbuilder/show.go b/go/vt/vtgate/planbuilder/show.go index cf957b7ba1..f1eaad38b1 100644 --- a/go/vt/vtgate/planbuilder/show.go +++ b/go/vt/vtgate/planbuilder/show.go @@ -198,7 +198,7 @@ func buildShowDMLJobPlan(show *sqlparser.ShowDMLJob, vschema plancontext.VSchema var sql string if !show.Detail { - sql, err = sqlparser.ParseAndBind("SELECT * FROM mysql.big_dml_jobs_table where job_uuid = %a", + sql, err = sqlparser.ParseAndBind("SELECT * FROM mysql.non_transactional_dml_jobs where job_uuid = %a", sqltypes.StringBindVariable(show.UUID)) if err != nil { return nil, err @@ -381,7 +381,7 @@ func buildShowDMLJobsPlan(show *sqlparser.ShowBasic, vschema plancontext.VSchema dest = key.DestinationAllShards{} } - sql := "SELECT * FROM mysql.big_dml_jobs_table" + sql := "SELECT * FROM mysql.non_transactional_dml_jobs" if show.Filter != nil { if show.Filter.Filter != nil { diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 7dabb5edaf..4cce08bef2 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -41,8 +41,8 @@ const ( databasePoolSize = 5 defaultBatchSize = 100 - healthCheckInterval = 5000 // ms - defaultBatchInterval = 1000 // 1000ms + healthCheckInterval = 5000 * time.Millisecond // ms + defaultBatchInterval = 1000 // 1000ms tableEntryGCInterval = 24 * time.Hour jobSchedulerRunningInterval = 10 * time.Second throttleCheckInterval = 250 * time.Millisecond @@ -54,7 +54,6 @@ const ( // commands for DML job const ( SubmitJob = "submit_job" - ShowJobs = "show_jobs" LaunchJob = "launch" LaunchAllJobs = "launch_all" PauseJob = "pause" @@ -100,6 +99,8 @@ type JobController struct { lagThrottler *throttle.Throttler lastSuccessfulThrottle int64 + initMutex sync.Mutex + workingTables map[string]bool // 用于调度时检测当前任务是否和正在工作的表冲突,paused、running状态的job的表都在里面 workingTablesMutex sync.Mutex @@ -114,6 +115,8 @@ type PKInfo struct { } func (jc *JobController) Open() error { + jc.initMutex.Lock() + defer jc.initMutex.Unlock() if jc.tabletTypeFunc() == topodatapb.TabletType_PRIMARY { jc.pool.Open(jc.env.Config().DB.AppConnector(), jc.env.Config().DB.DbaConnector(), jc.env.Config().DB.AppDebugConnector()) @@ -130,6 +133,8 @@ func (jc *JobController) Open() error { } func (jc *JobController) Close() { + jc.initMutex.Lock() + defer jc.initMutex.Unlock() jc.pool.Close() if jc.checkBeforeSchedule != nil { close(jc.checkBeforeSchedule) @@ -155,8 +160,6 @@ func (jc *JobController) HandleRequest(command, sql, jobUUID, tableSchema, expir switch command { case SubmitJob: return jc.SubmitJob(sql, tableSchema, runningTimePeriodStart, runningTimePeriodEnd, timeGapInMs, usrBatchSize, postponeLaunch, failPolicy) - case ShowJobs: - return jc.ShowJobs() case PauseJob: return jc.PauseJob(jobUUID) case ResumeJob: @@ -185,7 +188,7 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run if err != nil { return nil, err } - sql = rewirteSQL(sql) + sql = sqlparser.StripComments(sql) if timeGapInMs == 0 { timeGapInMs = int64(defaultBatchInterval) } @@ -279,14 +282,6 @@ func (jc *JobController) buildJobSubmitResult(jobUUID, jobBatchTable string, tim return submitRst } -func (jc *JobController) ShowJobs() (*sqltypes.Result, error) { - jc.tableMutex.Lock() - defer jc.tableMutex.Unlock() - ctx := context.Background() - showJobsSQL := fmt.Sprintf("select * from %s", jc.tableName) - return jc.execQuery(ctx, "mysql", showJobsSQL) -} - // 和cancel的区别:1.pasue不会删除元数据 2.cancel状态的job在经过一段时间后会被后台协程回收 // 和cancel的相同点:都停止了runner协程 func (jc *JobController) PauseJob(uuid string) (*sqltypes.Result, error) { @@ -713,6 +708,7 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta if tableSchema != "" { setting.SetWithoutDBName(false) setting.SetQuery(fmt.Sprintf("use %s", tableSchema)) + setting.SetResetQuery(fmt.Sprintf("use %s", jc.env.Config().DB.DBName)) } conn, err := jc.pool.Get(ctx, &setting) defer conn.Recycle() @@ -1069,13 +1065,16 @@ func (jc *JobController) execQuery(ctx context.Context, targetString, query stri if targetString != "" { setting.SetWithoutDBName(false) setting.SetQuery(fmt.Sprintf("use %s", targetString)) + setting.SetResetQuery(fmt.Sprintf("use %s", jc.env.Config().DB.DBName)) } conn, err := jc.pool.Get(ctx, &setting) if err != nil { return result, err } - defer conn.Recycle() - return conn.Exec(ctx, query, math.MaxInt32, true) + qr, err := conn.Exec(ctx, query, math.MaxInt32, true) + conn.Recycle() + return qr, err + } func (jc *JobController) execSubtaskAndRecord(ctx context.Context, tableSchema, subtaskSQL, uuid string) (affectedRows int64, err error) { @@ -1085,6 +1084,7 @@ func (jc *JobController) execSubtaskAndRecord(ctx context.Context, tableSchema, if tableSchema != "" { setting.SetWithoutDBName(false) setting.SetQuery(fmt.Sprintf("use %s", tableSchema)) + setting.SetResetQuery(fmt.Sprintf("use %s", jc.env.Config().DB.DBName)) } conn, err := jc.pool.Get(ctx, &setting) defer conn.Recycle() @@ -1117,14 +1117,6 @@ func (jc *JobController) execSubtaskAndRecord(ctx context.Context, tableSchema, return affectedRows, nil } -func rewirteSQL(input string) string { - // 定义正则表达式匹配注释 - re := regexp.MustCompile(`/\*.*?\*/`) - // 用空字符串替换匹配到的注释 - result := re.ReplaceAllString(input, "") - return result -} - // 该函数拿锁 func (jc *JobController) updateJobMessage(ctx context.Context, uuid, message string) error { jc.tableMutex.Lock() @@ -1345,7 +1337,10 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { log.Info("check of running and paused done \n") checkBeforeSchedule <- struct{}{} - for { + timer := time.NewTicker(healthCheckInterval) + defer timer.Stop() + + for range timer.C { // todo, 增加对长时间未增加 rows的处理 jc.tableMutex.Lock() @@ -1379,7 +1374,6 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { } jc.tableMutex.Unlock() - time.Sleep(healthCheckInterval * time.Millisecond) } } diff --git a/go/vt/vttablet/jobcontroller/sqls.go b/go/vt/vttablet/jobcontroller/sqls.go index c37dba0f5f..7412b98fcd 100644 --- a/go/vt/vttablet/jobcontroller/sqls.go +++ b/go/vt/vttablet/jobcontroller/sqls.go @@ -22,9 +22,9 @@ const ( ) const ( - sqlDMLJobGetJobsToSchedule = `select * from mysql.big_dml_jobs_table where status IN ('queued','not-in-time-period') order by id` - sqlDMLJobGetAllJobs = `select * from mysql.big_dml_jobs_table order by id` - sqlDMLJobSubmit = `insert into mysql.big_dml_jobs_table ( + sqlDMLJobGetJobsToSchedule = `select * from mysql.non_transactional_dml_jobs where status IN ('queued','not-in-time-period') order by id` + sqlDMLJobGetAllJobs = `select * from mysql.non_transactional_dml_jobs order by id` + sqlDMLJobSubmit = `insert into mysql.non_transactional_dml_jobs ( job_uuid, dml_sql, table_schema, @@ -39,23 +39,23 @@ const ( running_time_period_start, running_time_period_end) values(%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a)` - sqlDMLJobUpdateMessage = `update mysql.big_dml_jobs_table set + sqlDMLJobUpdateMessage = `update mysql.non_transactional_dml_jobs set message = %a where job_uuid = %a` - sqlDMLJobUpdateAffectedRows = `update mysql.big_dml_jobs_table set + sqlDMLJobUpdateAffectedRows = `update mysql.non_transactional_dml_jobs set affected_rows = affected_rows + %a where job_uuid = %a` - sqlDMLJobUpdateStatus = `update mysql.big_dml_jobs_table set + sqlDMLJobUpdateStatus = `update mysql.non_transactional_dml_jobs set status = %a, status_set_time = %a where job_uuid = %a` - sqlDMLJobGetInfo = `select * from mysql.big_dml_jobs_table + sqlDMLJobGetInfo = `select * from mysql.non_transactional_dml_jobs where job_uuid = %a` @@ -70,21 +70,21 @@ const ( TABLE_SCHEMA = %a AND TABLE_NAME = %a` - sqlDMLJobUpdateThrottleInfo = `update mysql.big_dml_jobs_table set + sqlDMLJobUpdateThrottleInfo = `update mysql.non_transactional_dml_jobs set throttle_ratio = %a , throttle_expire_time = %a where job_uuid = %a` - sqlDMLJobClearThrottleInfo = `update mysql.big_dml_jobs_table set + sqlDMLJobClearThrottleInfo = `update mysql.non_transactional_dml_jobs set throttle_ratio = NULL , throttle_expire_time = NULL where job_uuid = %a` - sqlDMLJobDeleteJob = `delete from mysql.big_dml_jobs_table where job_uuid = %a` + sqlDMLJobDeleteJob = `delete from mysql.non_transactional_dml_jobs where job_uuid = %a` - sqlDMLJobUpdateTimePeriod = `update mysql.big_dml_jobs_table set + sqlDMLJobUpdateTimePeriod = `update mysql.non_transactional_dml_jobs set running_time_period_start = %a, running_time_period_end = %a where @@ -92,9 +92,9 @@ const ( sqlGetIndexCount = `select count(*) as index_count from information_schema.statistics where table_schema = %a and table_name = %a` - sqlGetDealingBatchID = `select dealing_batch_id from mysql.big_dml_jobs_table where job_uuid = %a` + sqlGetDealingBatchID = `select dealing_batch_id from mysql.non_transactional_dml_jobs where job_uuid = %a` - sqlUpdateDealingBatchID = `update mysql.big_dml_jobs_table set dealing_batch_id = %a where job_uuid = %a` + sqlUpdateDealingBatchID = `update mysql.non_transactional_dml_jobs set dealing_batch_id = %a where job_uuid = %a` sqlTemplateGetBatchSQLsByID = `select batch_sql,batch_count_sql_when_creating_batch from %s where batch_id = %%a` diff --git a/go/vt/vttablet/tabletserver/tabletserver.go b/go/vt/vttablet/tabletserver/tabletserver.go index 9ee9de73bd..62814e8fa0 100644 --- a/go/vt/vttablet/tabletserver/tabletserver.go +++ b/go/vt/vttablet/tabletserver/tabletserver.go @@ -197,7 +197,7 @@ func NewTabletServer(name string, config *tabletenv.TabletConfig, topoServer *to tsv.branchWatch = NewBranchWatcher(tsv, tsv.config.DB.DbaWithDB()) tsv.onlineDDLExecutor = onlineddl.NewExecutor(tsv, alias, topoServer, tsv.lagThrottler, tabletTypeFunc, tsv.onlineDDLExecutorToggleTableBuffer) - tsv.dmlJonController = jobcontroller.NewJobController("big_dml_jobs_table", tabletTypeFunc, tsv, tsv.lagThrottler) + tsv.dmlJonController = jobcontroller.NewJobController("non_transactional_dml_jobs", tabletTypeFunc, tsv, tsv.lagThrottler) tsv.tableGC = gc.NewTableGC(tsv, topoServer, tsv.lagThrottler) tsv.sm = &stateManager{ From 7bc61381a0615aaade540cdef91231e21c0b0802 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Thu, 4 Jan 2024 15:30:56 +0800 Subject: [PATCH 33/54] fix: gen batchSQL by modify ast node instead of string operations when creating batch table Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/vttablet/jobcontroller/controller.go | 125 ++++++++++++++------- 1 file changed, 86 insertions(+), 39 deletions(-) diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 4cce08bef2..f47e481a19 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -738,6 +738,7 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta return errors.New("the len of qr of count expected batch size is not 1") } expectedRow, _ := qr.Named().Rows[0].ToInt64("count_rows") + // batchSize = 30 if expectedRow > batchSize { batchSQL, err = jc.splitBatchIntoTwo(ctx, tableSchema, table, batchTable, batchSQL, batchCountSQL, batchID, conn, batchSize, expectedRow) if err != nil { @@ -798,17 +799,20 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab if err != nil { return "", err } - isFirstPk := true - pkPart := "" + + // 1.2.根据当前batch的batchCountSQL生成select sql,用于获得拆分后batch的拆分列start和end + // 只需要将batchCountSQL的投影部分(SelectExprs)从count(*)改为拆分列即可 + batchCountSQLStmt, err := sqlparser.Parse(batchCountSQL) + if err != nil { + return "", err + } + batchCountSQLStmtSelect, _ := batchCountSQLStmt.(*sqlparser.Select) + var pkExprs []sqlparser.SelectExpr for _, pkInfo := range pkInfos { - if !isFirstPk { - pkPart += "," - } - pkPart += pkInfo.pkName - isFirstPk = false + pkExprs = append(pkExprs, &sqlparser.AliasedExpr{Expr: sqlparser.NewColName(pkInfo.pkName)}) } - //1.2.生成select pk的sql - batchSplitSelectSQL := strings.Replace(batchCountSQL, "count(*) as count_rows", pkPart, 1) + "order by " + pkPart + batchCountSQLStmtSelect.SelectExprs = pkExprs + batchSplitSelectSQL := sqlparser.String(batchCountSQLStmtSelect) // 2.根据select sql将batch拆分,生成两个新的batch。 //这里每次只将超过threshold的batch拆成两个batch而不是多个小于等于threshold的batch的原因是: @@ -1341,7 +1345,6 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { defer timer.Stop() for range timer.C { - // todo, 增加对长时间未增加 rows的处理 jc.tableMutex.Lock() qr, _ := jc.execQuery(ctx, "", sqlDMLJobGetAllJobs) @@ -1379,7 +1382,7 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { func (jc *JobController) createJobBatches(jobUUID, sql, tableSchema string, userBatchSize int64) (tableName, batchTableName string, batchSize int64, err error) { // 1.解析用户提交的DML sql,返回DML的各个部分。其中selectSQL用于确定每一个batch的pk范围,生成每一个batch所要执行的batch sql - selectSQL, tableName, wherePart, pkPart, pkInfos, err := jc.parseDML(sql, tableSchema) + selectSQL, tableName, wherePart, pkPart, whereExpr, pkInfos, stmt, err := jc.parseDML(sql, tableSchema) if err != nil { return "", "", 0, err } @@ -1396,73 +1399,81 @@ func (jc *JobController) createJobBatches(jobUUID, sql, tableSchema string, user } else { batchSize = actualThreshold } - batchTableName, err = jc.createBatchTable(jobUUID, selectSQL, tableSchema, sql, tableName, wherePart, pkPart, pkInfos, batchSize) + batchTableName, err = jc.createBatchTable(jobUUID, selectSQL, tableSchema, sql, tableName, wherePart, pkPart, whereExpr, stmt, pkInfos, batchSize) return tableName, batchTableName, batchSize, err } -func (jc *JobController) parseDML(sql, tableSchema string) (selectSQL, tableName, wherePart, pkPart string, pkInfos []PKInfo, err error) { - stmt, _, err := sqlparser.Parse2(sql) +func (jc *JobController) parseDML(sql, tableSchema string) (selectSQL, tableName, wherePart, pkPart string, whereExpr sqlparser.Expr, pkInfos []PKInfo, stmt sqlparser.Statement, err error) { + stmt, err = sqlparser.Parse(sql) if err != nil { - return "", "", "", "", nil, err + return "", "", "", "", nil, nil, nil, err } // 根据stmt,分析DML SQL的各个部分,包括涉及的表,where条件 switch s := stmt.(type) { case *sqlparser.Delete: if len(s.TableExprs) != 1 { - return "", "", "", "", nil, errors.New("the number of table is more than one") + return "", "", "", "", nil, nil, nil, errors.New("the number of table is more than one") } tableExpr, ok := s.TableExprs[0].(*sqlparser.AliasedTableExpr) // todo 目前暂不支持join和多表 if !ok { - return "", "", "", "", nil, errors.New("don't support join table now") + return "", "", "", "", nil, nil, nil, errors.New("don't support join table now") } tableName = sqlparser.String(tableExpr) wherePart = sqlparser.String(s.Where) if wherePart == "" { - return "", "", "", "", nil, errors.New("the sql doesn't have where condition") + return "", "", "", "", nil, nil, nil, errors.New("the sql doesn't have where condition") } + // 将where字符串中的"where"字符串删除,便于对真正的条件部分增加括号 + wherePart = wherePart[strings.Index(wherePart, "where")+5:] + whereExpr = s.Where.Expr + limitPart := sqlparser.String(s.Limit) if limitPart != "" { - return "", "", "", "", nil, errors.New("the SQL should not have limit clause") + return "", "", "", "", nil, nil, nil, errors.New("the SQL should not have limit clause") } orderByPart := sqlparser.String(s.OrderBy) if orderByPart != "" { - return "", "", "", "", nil, errors.New("the SQL should not have order by clause") + return "", "", "", "", nil, nil, nil, errors.New("the SQL should not have order by clause") } case *sqlparser.Update: if len(s.TableExprs) != 1 { - return "", "", "", "", nil, errors.New("the number of table is more than one") + return "", "", "", "", nil, nil, nil, errors.New("the number of table is more than one") } tableExpr, ok := s.TableExprs[0].(*sqlparser.AliasedTableExpr) // todo 目前暂不支持join和多表 if !ok { - return "", "", "", "", nil, errors.New("don't support join table now") + return "", "", "", "", nil, nil, nil, errors.New("don't support join table now") } tableName = sqlparser.String(tableExpr) wherePart = sqlparser.String(s.Where) if wherePart == "" { - return "", "", "", "", nil, errors.New("the sql doesn't have where condition") + return "", "", "", "", nil, nil, nil, errors.New("the sql doesn't have where condition") } + // 将where字符串中的"where"字符串删除,便于对真正的条件部分增加括号 + wherePart = wherePart[strings.Index(wherePart, "where")+5:] + whereExpr = s.Where.Expr + limitPart := sqlparser.String(s.Limit) if limitPart != "" { - return "", "", "", "", nil, errors.New("the SQL should not have limit clause") + return "", "", "", "", nil, nil, nil, errors.New("the SQL should not have limit clause") } orderByPart := sqlparser.String(s.OrderBy) if orderByPart != "" { - return "", "", "", "", nil, errors.New("the SQL should not have order by clause") + return "", "", "", "", nil, nil, nil, errors.New("the SQL should not have order by clause") } default: // todo support select...into, replace...into - return "", "", "", "", nil, errors.New("the type of sql is not supported") + return "", "", "", "", nil, nil, nil, errors.New("the type of sql is not supported") } // 获得该DML所相关表的PK信息,将其中的PK列组成字符串pkPart,形如"PKCol1,PKCol2,PKCol3" ctx := context.Background() pkInfos, err = jc.getTablePkInfo(ctx, tableSchema, tableName) if err != nil { - return "", "", "", "", nil, err + return "", "", "", "", nil, nil, nil, err } pkPart = "" firstPK := true @@ -1475,13 +1486,13 @@ func (jc *JobController) parseDML(sql, tableSchema string) (selectSQL, tableName } // 将该DML的各部分信息组成batch select语句,用于生成每一个batch的pk范围 - selectSQL = fmt.Sprintf("select %s from %s.%s %s order by %s", + selectSQL = fmt.Sprintf("select %s from %s.%s where %s order by %s", pkPart, tableSchema, tableName, wherePart, pkPart) - return selectSQL, tableName, wherePart, pkPart, pkInfos, err + return selectSQL, tableName, wherePart, pkPart, whereExpr, pkInfos, stmt, err } -func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, tableName, wherePart, pkPart string, pkInfos []PKInfo, batchSize int64) (string, error) { +func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, tableName, wherePart, pkPart string, whereExpr sqlparser.Expr, stmt sqlparser.Statement, pkInfos []PKInfo, batchSize int64) (string, error) { ctx := context.Background() // 执行selectSQL,获得有序的pk值结果集,以生成每一个batch要执行的batch SQL @@ -1527,7 +1538,7 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, currentBatchEnd = pkValues currentBatchSize++ if currentBatchSize == batchSize { - batchSQL, err := jc.genBatchSQL(sql, currentBatchStart, currentBatchEnd, pkInfos) + batchSQL, err := jc.genBatchSQL(sql, stmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) if err != nil { return "", err } @@ -1562,7 +1573,7 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, } // 最后一个batch的行数不一定是batchSize,在循环结束时要将剩余的行数划分到最后一个batch中 if currentBatchSize != 0 { - batchSQL, err := jc.genBatchSQL(sql, currentBatchStart, currentBatchEnd, pkInfos) + batchSQL, err := jc.genBatchSQL(sql, stmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) if err != nil { return "", err } @@ -1632,11 +1643,11 @@ func genCountSQL(tableSchema, tableName, wherePart, pkPart string, currentBatchS if len(pkInfos) == 1 { switch pkInfos[0].pkType { case querypb.Type_INT8, querypb.Type_INT16, querypb.Type_INT24, querypb.Type_INT32, querypb.Type_INT64: - countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between %d AND %d order by %s", + countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s where ( %s ) and ( %s between %d AND %d ) order by %s", tableSchema, tableName, wherePart, pkPart, currentBatchStart[0], currentBatchEnd[0], pkPart) case querypb.Type_UINT8, querypb.Type_UINT16, querypb.Type_UINT24, querypb.Type_UINT32, querypb.Type_UINT64: - countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between %d AND %d order by %s", + countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s where ( %s ) and ( %s between %d AND %d ) order by %s", tableSchema, tableName, wherePart, pkPart, currentBatchStart[0], currentBatchEnd[0], pkPart) case querypb.Type_FLOAT32, querypb.Type_FLOAT64: @@ -1644,7 +1655,7 @@ func genCountSQL(tableSchema, tableName, wherePart, pkPart string, currentBatchS case querypb.Type_TIMESTAMP, querypb.Type_DATE, querypb.Type_TIME, querypb.Type_DATETIME, querypb.Type_YEAR, querypb.Type_TEXT, querypb.Type_VARCHAR, querypb.Type_CHAR: - countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND %s between '%s' AND '%s' order by %s", + countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s where ( %s ) and ( %s between '%s' AND '%s' ) order by %s", tableSchema, tableName, wherePart, pkPart, currentBatchStart[0], currentBatchEnd[0], pkPart) default: @@ -1665,7 +1676,7 @@ func genCountSQL(tableSchema, tableName, wherePart, pkPart string, currentBatchS } // 3.将各部分拼接成最终的template - countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s %s AND ( (%s) AND (%s) )", + countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s where ( %s ) and ( (%s) AND (%s) )", tableSchema, tableName, wherePart, greatThanPart, lessThanPart) } return countSQLTemplate, nil @@ -1779,7 +1790,7 @@ func genPKsLessThanPart(pkInfos []PKInfo, currentBatchEnd []any) (string, error) return rst, nil } -func (jc *JobController) genBatchSQL(sql string, currentBatchStart, currentBatchEnd []any, pkInfos []PKInfo) (batchSQL string, err error) { +func (jc *JobController) genBatchSQL(sql string, stmt sqlparser.Statement, whereExpr sqlparser.Expr, currentBatchStart, currentBatchEnd []any, pkInfos []PKInfo) (batchSQL string, err error) { if len(pkInfos) == 1 { if fmt.Sprintf("%T", currentBatchStart[0]) != fmt.Sprintf("%T", currentBatchEnd[0]) { err = errors.New("the type of currentBatchStart and currentBatchEnd is different") @@ -1813,8 +1824,17 @@ func (jc *JobController) genBatchSQL(sql string, currentBatchStart, currentBatch return "", err } - // 3.将各部分拼接成最终的template - batchSQL = sql + fmt.Sprintf(" AND ( (%s) AND (%s) )", greatThanPart, lessThanPart) + // 3.将pk>= and pk <= 拼接起来并生成相应的condition expr ast node + pkConditionExpr, err := jc.genPKConditionExpr(greatThanPart, lessThanPart) + if err != nil { + return "", err + } + + // 4.将原本sql stmt中的where expr ast node用AND拼接上pkConditionExpr,作为batchSQL的where expr ast node + // 4.1先生成新的condition ast node + andExpr := sqlparser.Where{Expr: &sqlparser.AndExpr{Left: whereExpr, Right: pkConditionExpr}} + batchSQL = jc.genBatchSQLByReplaceWhereExprNode(stmt, andExpr) + //batchSQL = sql + fmt.Sprintf(" AND ( (%s) AND (%s) )", greatThanPart, lessThanPart) } return batchSQL, nil } @@ -1882,3 +1902,30 @@ func (jc *JobController) updateBatchStatus(batchTableSchema, batchTableName, sta _, err = jc.execQuery(context.Background(), batchTableSchema, query) return err } + +func (jc *JobController) genPKConditionExpr(greatThanPart, lessThanPart string) (sqlparser.Expr, error) { + tmpSQL := fmt.Sprintf("select 1 where (%s) AND (%s)", greatThanPart, lessThanPart) + tmpStmt, err := sqlparser.Parse(tmpSQL) + if err != nil { + return nil, err + } + tmpStmtSelect, ok := tmpStmt.(*sqlparser.Select) + if !ok { + return nil, errors.New("genPKConditionExpr: tmpStmt is not *sqlparser.Select") + } + return tmpStmtSelect.Where.Expr, nil +} + +func (jc *JobController) genBatchSQLByReplaceWhereExprNode(stmt sqlparser.Statement, whereExpr sqlparser.Where) string { + switch s := stmt.(type) { + case *sqlparser.Update: + s.Where = &whereExpr + return sqlparser.String(s) + case *sqlparser.Delete: + s.Where = &whereExpr + return sqlparser.String(s) + default: + // the code won't reach here + return "" + } +} From 8b989441e8a074769b2962d26610ba8ed35c3c92 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Thu, 4 Jan 2024 18:28:39 +0800 Subject: [PATCH 34/54] fix: gen batchSQL and batchCountSQL when splitting sql by modify sql ast node instead of string operations Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/vttablet/jobcontroller/controller.go | 121 +++++++++++++++------ 1 file changed, 85 insertions(+), 36 deletions(-) diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index f47e481a19..df9a7b51c0 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -11,7 +11,6 @@ import ( "fmt" "math" "net/http" - "regexp" "strconv" "strings" "sync" @@ -738,7 +737,6 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta return errors.New("the len of qr of count expected batch size is not 1") } expectedRow, _ := qr.Named().Rows[0].ToInt64("count_rows") - // batchSize = 30 if expectedRow > batchSize { batchSQL, err = jc.splitBatchIntoTwo(ctx, tableSchema, table, batchTable, batchSQL, batchCountSQL, batchID, conn, batchSize, expectedRow) if err != nil { @@ -811,8 +809,11 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab for _, pkInfo := range pkInfos { pkExprs = append(pkExprs, &sqlparser.AliasedExpr{Expr: sqlparser.NewColName(pkInfo.pkName)}) } + oldBatchCountSQLStmtSelectExprs := batchCountSQLStmtSelect.SelectExprs batchCountSQLStmtSelect.SelectExprs = pkExprs batchSplitSelectSQL := sqlparser.String(batchCountSQLStmtSelect) + // batchCountSQLStmt在后续生成newBatchCountSQL时还需用到,因此这里将其恢复原样 + batchCountSQLStmtSelect.SelectExprs = oldBatchCountSQLStmtSelectExprs // 2.根据select sql将batch拆分,生成两个新的batch。 //这里每次只将超过threshold的batch拆成两个batch而不是多个小于等于threshold的batch的原因是: @@ -859,45 +860,42 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab if err != nil { return "", err } + curBatchLessThanExpr, err := genExprNodeFromStr(curBatchLessThanPart) + if err != nil { + return "", err + } newBatchGreatThanPart, err := genPKsGreaterThanPart(pkInfos, newBatchStart) if err != nil { return "", err } + newBatchGreatThanExpr, err := genExprNodeFromStr(newBatchGreatThanPart) + if err != nil { + return "", err + } - // 2.3) 通过正则表达式,获得原先batchSQL中的great than和less than部分,作为当前batch的great than和新batch的less than部分 - // 定义正则表达式,匹配"( (greatThanPart) AND (lessThanPart) )" - curBatchGreatThanPart := "" - newBatchLessThanPart := "" - - // 这个正则表达式用于匹配出"( (greatThanPart) AND (lessThanPart) )"greatThanPart和lessThanPart,也就是每条batch sql中用于限定PK范围的部分 - regexPattern := `\(\s*\((.*)\)\s*AND\s*\((.*)\)\s*\)` + // 2.3) 通过parser,获得原先batchSQL的greatThan和lessThan的expr ast node + batchSQLStmt, err := sqlparser.Parse(batchSQL) + if err != nil { + return "", err + } + curBatchGreatThanExpr, newBatchLessThanExpr := jc.getBatchSQLGreatThanAndLessThanExprNode(batchSQLStmt) - // 编译正则表达式 - regex := regexp.MustCompile(regexPattern) + // 2.4) 生成拆分后,当前batch的sql和新batch的sql + // 2.4.1) 先获得curBatchSQL和newBatchSQL的where expr ast node,需要将用户输入的where expr与上PK Condition Expr + oldBatchSQLUserWhereExpr := getUserWhereExpr(batchSQLStmt) + curBatchPKConditionExpr := sqlparser.AndExpr{Left: curBatchGreatThanExpr, Right: curBatchLessThanExpr} + newBatchPKConditionExpr := sqlparser.AndExpr{Left: newBatchGreatThanExpr, Right: newBatchLessThanExpr} + curBatchWhereExpr := sqlparser.Where{Expr: &sqlparser.AndExpr{Left: oldBatchSQLUserWhereExpr, Right: &curBatchPKConditionExpr}} + newBatchWhereExpr := sqlparser.Where{Expr: &sqlparser.AndExpr{Left: oldBatchSQLUserWhereExpr, Right: &newBatchPKConditionExpr}} - // 查找匹配项 - matches := regex.FindAllStringSubmatch(batchSQL, -1) + // 2.4.2) 替换原先batchSQL和batchCountSQL的where expr来生成新的sql + curBatchSQL := jc.genSQLByReplaceWhereExprNode(batchSQLStmt, curBatchWhereExpr) + newBatchSQL := jc.genSQLByReplaceWhereExprNode(batchSQLStmt, newBatchWhereExpr) - // 如果有匹配项,只取最后一个匹配的结果,因为用户自己输入的where条件中也可能存在这样的格式 - pkConditionPart := "" - if len(matches) > 0 { - lastMatch := matches[len(matches)-1] - if len(lastMatch) == 3 { - pkConditionPart = lastMatch[0] - curBatchGreatThanPart = lastMatch[1] - newBatchLessThanPart = lastMatch[2] - } - } else { - return "", errors.New("can not match greatThan and lessThan parts by regex") - } + // 2.4.3) 生成新batch的batchCountSQL,原理同上 + newBatchCountSQL := jc.genSQLByReplaceWhereExprNode(batchCountSQLStmt, newBatchWhereExpr) - // 2.4) 生成拆分后,当前batch的sql和新batch的sql - batchSQLCommonPart := strings.Replace(batchSQL, pkConditionPart, "", 1) - batchCountSQLCommonPart := strings.Replace(batchCountSQL, pkConditionPart, "", 1) - curBatchSQL := batchSQLCommonPart + fmt.Sprintf("( (%s) AND (%s) )", curBatchGreatThanPart, curBatchLessThanPart) - newBatchSQL := batchSQLCommonPart + fmt.Sprintf("( (%s) AND (%s) )", newBatchGreatThanPart, newBatchLessThanPart) - newBatchCountSQL := batchCountSQLCommonPart + fmt.Sprintf("( (%s) AND (%s) )", newBatchGreatThanPart, newBatchLessThanPart) // 构建当前batch新的batch begin及end字段以及新batch的begin及end字段 getBatchBeginAndEndSQL := fmt.Sprintf(sqlTemplateGetBatchBeginAndEnd, batchTable) getBatchBeginAndEndQuery, err := sqlparser.ParseAndBind(getBatchBeginAndEndSQL, sqltypes.StringBindVariable(batchID)) @@ -1825,7 +1823,7 @@ func (jc *JobController) genBatchSQL(sql string, stmt sqlparser.Statement, where } // 3.将pk>= and pk <= 拼接起来并生成相应的condition expr ast node - pkConditionExpr, err := jc.genPKConditionExpr(greatThanPart, lessThanPart) + pkConditionExpr, err := jc.genPKConditionExprByStr(greatThanPart, lessThanPart) if err != nil { return "", err } @@ -1833,7 +1831,7 @@ func (jc *JobController) genBatchSQL(sql string, stmt sqlparser.Statement, where // 4.将原本sql stmt中的where expr ast node用AND拼接上pkConditionExpr,作为batchSQL的where expr ast node // 4.1先生成新的condition ast node andExpr := sqlparser.Where{Expr: &sqlparser.AndExpr{Left: whereExpr, Right: pkConditionExpr}} - batchSQL = jc.genBatchSQLByReplaceWhereExprNode(stmt, andExpr) + batchSQL = jc.genSQLByReplaceWhereExprNode(stmt, andExpr) //batchSQL = sql + fmt.Sprintf(" AND ( (%s) AND (%s) )", greatThanPart, lessThanPart) } return batchSQL, nil @@ -1903,7 +1901,7 @@ func (jc *JobController) updateBatchStatus(batchTableSchema, batchTableName, sta return err } -func (jc *JobController) genPKConditionExpr(greatThanPart, lessThanPart string) (sqlparser.Expr, error) { +func (jc *JobController) genPKConditionExprByStr(greatThanPart, lessThanPart string) (sqlparser.Expr, error) { tmpSQL := fmt.Sprintf("select 1 where (%s) AND (%s)", greatThanPart, lessThanPart) tmpStmt, err := sqlparser.Parse(tmpSQL) if err != nil { @@ -1911,12 +1909,12 @@ func (jc *JobController) genPKConditionExpr(greatThanPart, lessThanPart string) } tmpStmtSelect, ok := tmpStmt.(*sqlparser.Select) if !ok { - return nil, errors.New("genPKConditionExpr: tmpStmt is not *sqlparser.Select") + return nil, errors.New("genPKConditionExprByStr: tmpStmt is not *sqlparser.Select") } return tmpStmtSelect.Where.Expr, nil } -func (jc *JobController) genBatchSQLByReplaceWhereExprNode(stmt sqlparser.Statement, whereExpr sqlparser.Where) string { +func (jc *JobController) genSQLByReplaceWhereExprNode(stmt sqlparser.Statement, whereExpr sqlparser.Where) string { switch s := stmt.(type) { case *sqlparser.Update: s.Where = &whereExpr @@ -1924,8 +1922,59 @@ func (jc *JobController) genBatchSQLByReplaceWhereExprNode(stmt sqlparser.Statem case *sqlparser.Delete: s.Where = &whereExpr return sqlparser.String(s) + case *sqlparser.Select: + // 针对batchCountSQL + s.Where = &whereExpr + return sqlparser.String(s) default: // the code won't reach here return "" } } + +func getUserWhereExpr(stmt sqlparser.Statement) (expr sqlparser.Expr) { + switch s := stmt.(type) { + case *sqlparser.Update: + tempAndExpr, _ := s.Where.Expr.(*sqlparser.AndExpr) + expr = tempAndExpr.Left + return expr + case *sqlparser.Delete: + tempAndExpr, _ := s.Where.Expr.(*sqlparser.AndExpr) + expr = tempAndExpr.Left + return expr + default: + // the code won't reach here + return nil + } +} + +func (jc *JobController) getBatchSQLGreatThanAndLessThanExprNode(stmt sqlparser.Statement) (greatThanExpr sqlparser.Expr, lessThanExpr sqlparser.Expr) { + switch s := stmt.(type) { + case *sqlparser.Update: + // the type switch will be ok + andExpr, _ := s.Where.Expr.(*sqlparser.AndExpr) + pkConditionExpr, _ := andExpr.Right.(*sqlparser.AndExpr) + greatThanExpr = pkConditionExpr.Left + lessThanExpr = pkConditionExpr.Right + return greatThanExpr, lessThanExpr + case *sqlparser.Delete: + // the type switch will be ok + andExpr, _ := s.Where.Expr.(*sqlparser.AndExpr) + pkConditionExpr, _ := andExpr.Right.(*sqlparser.AndExpr) + greatThanExpr = pkConditionExpr.Left + lessThanExpr = pkConditionExpr.Right + return greatThanExpr, lessThanExpr + } + // the code won't reach here + return nil, nil +} + +func genExprNodeFromStr(condition string) (sqlparser.Expr, error) { + tmpSQL := fmt.Sprintf("select 1 where %s", condition) + tmpStmt, err := sqlparser.Parse(tmpSQL) + if err != nil { + return nil, err + } + tmpStmtSelect, _ := tmpStmt.(*sqlparser.Select) + return tmpStmtSelect.Where.Expr, nil +} From 3a7495dfadfd66b995a79d96d83d6c05974d42d5 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Thu, 4 Jan 2024 19:07:35 +0800 Subject: [PATCH 35/54] fix: replace string literal with const var; fix error due to wrong rebase operation Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/vttablet/tabletserver/query_executor.go | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/go/vt/vttablet/tabletserver/query_executor.go b/go/vt/vttablet/tabletserver/query_executor.go index c1dbac2ce9..10a9881974 100644 --- a/go/vt/vttablet/tabletserver/query_executor.go +++ b/go/vt/vttablet/tabletserver/query_executor.go @@ -29,6 +29,8 @@ import ( "sync" "time" + "vitess.io/vitess/go/vt/vttablet/jobcontroller" + "google.golang.org/protobuf/proto" "vitess.io/vitess/go/mysql" @@ -1161,19 +1163,19 @@ func (qre *QueryExecutor) execAlterDMLJob() (*sqltypes.Result, error) { uuid := alterDMLJob.UUID switch alterDMLJob.Type { case sqlparser.PauseDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("pause", "", uuid, "", "", "", "", nil, 0, 0, false, "") + return qre.tsv.dmlJonController.HandleRequest(jobcontroller.PauseJob, "", uuid, "", "", "", "", nil, 0, 0, false, "") case sqlparser.ResumeDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("resume", "", uuid, "", "", "", "", nil, 0, 0, false, "") + return qre.tsv.dmlJonController.HandleRequest(jobcontroller.ResumeJob, "", uuid, "", "", "", "", nil, 0, 0, false, "") case sqlparser.LaunchDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("launch", "", uuid, "", "", "", "", nil, 0, 0, false, "") + return qre.tsv.dmlJonController.HandleRequest(jobcontroller.LaunchJob, "", uuid, "", "", "", "", nil, 0, 0, false, "") case sqlparser.CancelDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("cancel", "", uuid, "", "", "", "", nil, 0, 0, false, "") + return qre.tsv.dmlJonController.HandleRequest(jobcontroller.CancelJob, "", uuid, "", "", "", "", nil, 0, 0, false, "") case sqlparser.ThrottleDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("throttle", "", uuid, "", "", "", alterDMLJob.Expire, alterDMLJob.Ratio, 0, 0, false, "") + return qre.tsv.dmlJonController.HandleRequest(jobcontroller.ThrottleJob, "", uuid, "", "", "", alterDMLJob.Expire, alterDMLJob.Ratio, 0, 0, false, "") case sqlparser.UnthrottleDMLJobType: - return qre.tsv.dmlJonController.HandleRequest("unthrottle", "", uuid, "", "", "", "", nil, 0, 0, false, "") + return qre.tsv.dmlJonController.HandleRequest(jobcontroller.UnthrottleJob, "", uuid, "", "", "", "", nil, 0, 0, false, "") case sqlparser.SetRunningTimePeriodType: - return qre.tsv.dmlJonController.HandleRequest("set_running_time_period", "", uuid, "", "", alterDMLJob.TimePeriodStart, alterDMLJob.TimePeriodEnd, nil, 0, 0, false, "") + return qre.tsv.dmlJonController.HandleRequest(jobcontroller.SetRunningTimePeriod, "", uuid, "", "", alterDMLJob.TimePeriodStart, alterDMLJob.TimePeriodEnd, nil, 0, 0, false, "") } return nil, vterrors.New(vtrpcpb.Code_UNIMPLEMENTED, "ALTER DML_JOB not implemented") } From 2f7eadd01d01fe931f0ecd628da851f186e503aa Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Thu, 4 Jan 2024 19:20:50 +0800 Subject: [PATCH 36/54] fix: fix wrong operion when rebase main Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/vttablet/tabletserver/tabletserver.go | 37 +++++++++++---------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/go/vt/vttablet/tabletserver/tabletserver.go b/go/vt/vttablet/tabletserver/tabletserver.go index 62814e8fa0..20d75506ab 100644 --- a/go/vt/vttablet/tabletserver/tabletserver.go +++ b/go/vt/vttablet/tabletserver/tabletserver.go @@ -201,24 +201,25 @@ func NewTabletServer(name string, config *tabletenv.TabletConfig, topoServer *to tsv.tableGC = gc.NewTableGC(tsv, topoServer, tsv.lagThrottler) tsv.sm = &stateManager{ - statelessql: tsv.statelessql, - statefulql: tsv.statefulql, - olapql: tsv.olapql, - hs: tsv.hs, - se: tsv.se, - rt: tsv.rt, - vstreamer: tsv.vstreamer, - tracker: tsv.tracker, - watcher: tsv.watcher, - branchWatch: tsv.branchWatch, - qe: tsv.qe, - txThrottler: tsv.txThrottler, - te: tsv.te, - messager: tsv.messager, - ddle: tsv.onlineDDLExecutor, - throttler: tsv.lagThrottler, - tableGC: tsv.tableGC, - tableACL: tableacl.GetCurrentACL(), + statelessql: tsv.statelessql, + statefulql: tsv.statefulql, + olapql: tsv.olapql, + hs: tsv.hs, + se: tsv.se, + rt: tsv.rt, + vstreamer: tsv.vstreamer, + tracker: tsv.tracker, + watcher: tsv.watcher, + branchWatch: tsv.branchWatch, + qe: tsv.qe, + txThrottler: tsv.txThrottler, + te: tsv.te, + messager: tsv.messager, + dmlJobController: tsv.dmlJonController, + ddle: tsv.onlineDDLExecutor, + throttler: tsv.lagThrottler, + tableGC: tsv.tableGC, + tableACL: tableacl.GetCurrentACL(), } tsv.exporter.NewGaugeFunc("TabletState", "Tablet server state", func() int64 { return int64(tsv.sm.State()) }) From 71fd11a6dec113fa852bad68ae5b2621262284a1 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Mon, 8 Jan 2024 13:13:30 +0800 Subject: [PATCH 37/54] fix: refactor genBatchSQL and genBatchCountSQL Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/vttablet/jobcontroller/controller.go | 206 ++++--------------- go/vt/vttablet/jobcontroller/gen_sql.go | 156 ++++++++++++++ go/vt/vttablet/jobcontroller/gen_sql_test.go | 155 ++++++++++++++ 3 files changed, 347 insertions(+), 170 deletions(-) create mode 100644 go/vt/vttablet/jobcontroller/gen_sql.go create mode 100644 go/vt/vttablet/jobcontroller/gen_sql_test.go diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index df9a7b51c0..edc52aae1f 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -126,7 +126,6 @@ func (jc *JobController) Open() error { go jc.jobHealthCheck(jc.checkBeforeSchedule) go jc.jobScheduler(jc.checkBeforeSchedule) initThrottleTicker() - } return nil } @@ -336,7 +335,7 @@ func (jc *JobController) ResumeJob(uuid string) (*sqltypes.Result, error) { table := row["table_name"].ToString() jobBatchTable := row["batch_info_table_name"].ToString() batchInterval, _ := row["batch_interval_in_ms"].ToInt64() - batchSize, _ := row["batch_szie"].ToInt64() + batchSize, _ := row["batch_size"].ToInt64() runningTimePeriodStart := row["running_time_period_start"].ToString() runningTimePeriodEnd := row["running_time_period_end"].ToString() periodStartTimePtr, periodEndTimePtr := getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd) @@ -729,6 +728,7 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta // 2.查询batch sql预计影响的行数,如果超过阈值,则生成新的batch ID batchCountSQLForShare := batchCountSQL + " FOR SHARE" + // todo 检查batch status是否为completed,脑裂问题 qr, err := conn.Exec(ctx, batchCountSQLForShare, math.MaxInt32, true) if err != nil { return err @@ -737,6 +737,7 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta return errors.New("the len of qr of count expected batch size is not 1") } expectedRow, _ := qr.Named().Rows[0].ToInt64("count_rows") + //batchSize = 30 if expectedRow > batchSize { batchSQL, err = jc.splitBatchIntoTwo(ctx, tableSchema, table, batchTable, batchSQL, batchCountSQL, batchID, conn, batchSize, expectedRow) if err != nil { @@ -827,6 +828,7 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab return "", err } + // todo literal var curBatchNewEnd []any var newBatchStart []any @@ -856,6 +858,7 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab } // 2.2) 将curBatchNewEnd和newBatchStart转换成sql中where部分的<=和>=的字符串 + // todo 直接从ast开始构建 curBatchLessThanPart, err := genPKsLessThanPart(pkInfos, curBatchNewEnd) if err != nil { return "", err @@ -890,11 +893,11 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab newBatchWhereExpr := sqlparser.Where{Expr: &sqlparser.AndExpr{Left: oldBatchSQLUserWhereExpr, Right: &newBatchPKConditionExpr}} // 2.4.2) 替换原先batchSQL和batchCountSQL的where expr来生成新的sql - curBatchSQL := jc.genSQLByReplaceWhereExprNode(batchSQLStmt, curBatchWhereExpr) - newBatchSQL := jc.genSQLByReplaceWhereExprNode(batchSQLStmt, newBatchWhereExpr) + curBatchSQL := GenSQLByReplaceWhereExprNode(batchSQLStmt, curBatchWhereExpr) + newBatchSQL := GenSQLByReplaceWhereExprNode(batchSQLStmt, newBatchWhereExpr) // 2.4.3) 生成新batch的batchCountSQL,原理同上 - newBatchCountSQL := jc.genSQLByReplaceWhereExprNode(batchCountSQLStmt, newBatchWhereExpr) + newBatchCountSQL := GenSQLByReplaceWhereExprNode(batchCountSQLStmt, newBatchWhereExpr) // 构建当前batch新的batch begin及end字段以及新batch的begin及end字段 getBatchBeginAndEndSQL := fmt.Sprintf(sqlTemplateGetBatchBeginAndEnd, batchTable) @@ -911,7 +914,8 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab } currentBatchNewBeginStr := qr.Named().Rows[0]["batch_begin"].ToString() newBatchEndStr := qr.Named().Rows[0]["batch_end"].ToString() - currentBatchNewEndStr, newBatchBegintStr, err := genBatchStartAndEndStr(curBatchNewEnd, newBatchStart, pkInfos) + // todo newborn22 next + currentBatchNewEndStr, newBatchBegintStr, err := genBatchStartAndEndStr(nil, nil) if err != nil { return "", err } @@ -933,6 +937,7 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab } // 插入新batch条目 newCurrentBatchSQL = curBatchSQL + // todo 1-1 -> 1-2开始 nextBatchID, err := genNewBatchID(batchID) if err != nil { return "", err @@ -1297,6 +1302,7 @@ func (jc *JobController) getTableColNames(ctx context.Context, tableSchema, tabl return colNames, nil } +// todo 状态机。 struct func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { ctx := context.Background() @@ -1397,6 +1403,7 @@ func (jc *JobController) createJobBatches(jobUUID, sql, tableSchema string, user } else { batchSize = actualThreshold } + // 3.创建batchTable表,并在表中记录每个batch所要执行的sql batchTableName, err = jc.createBatchTable(jobUUID, selectSQL, tableSchema, sql, tableName, wherePart, pkPart, whereExpr, stmt, pkInfos, batchSize) return tableName, batchTableName, batchSize, err } @@ -1504,8 +1511,11 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, // 为每一个DML job创建一张batch表,保存着该job被拆分成batches的具体信息。 // healthCheck协程会定时对处于结束状态(completed,canceled,failed)的job的batch表进行回收 + // todo _vt_BATCH_uuid batchTableName := "batch_info_table_" + strings.Replace(jobUUID, "-", "_", -1) + // todo,删除batchSQL,batchCountSQL,字段,在内存中生成具体的sql + // todo mysql generate col 或者 go代码实现 createTableSQL := fmt.Sprintf(sqlTemplateCreateBatchTable, batchTableName) _, err = jc.execQuery(ctx, tableSchema, createTableSQL) if err != nil { @@ -1515,36 +1525,28 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, // 遍历每一行的每一个PK的值,记录每一个batch的开始和结束pk值(当有多个pk列时,需要记录多个pk值,pk可能具有不同的数据类型 // 当遍历的行数达到一个batchSize时,即可生成一个batch所要执行的batch SQL,往batch表中插入一个条目 currentBatchSize := int64(0) - var currentBatchStart []any - var currentBatchEnd []any + var currentBatchStart []sqltypes.Value + var currentBatchEnd []sqltypes.Value currentBatchID := "1" insertBatchSQLWithTableName := fmt.Sprintf(sqlTemplateInsertBatchEntry, batchTableName) - for _, row := range qr.Named().Rows { - var pkValues []any - for _, pkInfo := range pkInfos { - pkName := pkInfo.pkName - keyVal, err := ProcessValue(row[pkName]) - pkValues = append(pkValues, keyVal) - if err != nil { - return "", err - } - } + for _, values := range qr.Rows { if currentBatchSize == 0 { - currentBatchStart = pkValues + currentBatchStart = values } - currentBatchEnd = pkValues + currentBatchEnd = values currentBatchSize++ + if currentBatchSize == batchSize { - batchSQL, err := jc.genBatchSQL(sql, stmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) + batchSQL, finalWhereStr, err := GenBatchSQL(sql, stmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) if err != nil { return "", err } - countSQL, err := genCountSQL(tableSchema, tableName, wherePart, pkPart, currentBatchStart, currentBatchEnd, pkInfos) + countSQL := GenCountSQL(tableSchema, tableName, finalWhereStr) if err != nil { return "", err } - batchStartStr, batchEndStr, err := genBatchStartAndEndStr(currentBatchStart, currentBatchEnd, pkInfos) + batchStartStr, batchEndStr, err := genBatchStartAndEndStr(currentBatchStart, currentBatchEnd) if err != nil { return "", err } @@ -1571,15 +1573,15 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, } // 最后一个batch的行数不一定是batchSize,在循环结束时要将剩余的行数划分到最后一个batch中 if currentBatchSize != 0 { - batchSQL, err := jc.genBatchSQL(sql, stmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) + batchSQL, finalWhereStr, err := GenBatchSQL(sql, stmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) if err != nil { return "", err } - countSQL, err := genCountSQL(tableSchema, tableName, wherePart, pkPart, currentBatchStart, currentBatchEnd, pkInfos) + countSQL := GenCountSQL(tableSchema, tableName, finalWhereStr) if err != nil { return "", err } - batchStartStr, batchEndStr, err := genBatchStartAndEndStr(currentBatchStart, currentBatchEnd, pkInfos) + batchStartStr, batchEndStr, err := genBatchStartAndEndStr(currentBatchStart, currentBatchEnd) if err != nil { return "", err } @@ -1613,73 +1615,16 @@ func currentBatchIDInc(currentBatchID string) (string, error) { return strconv.FormatInt(currentBatchIDInt64, 10), nil } -func genBatchStartAndEndStr(currentBatchStart, currentBatchEnd []any, pkInfos []PKInfo) (currentBatchStartStr string, currentBatchStartEnd string, err error) { - for i, pkInfo := range pkInfos { - placeHolder, err := genPlaceholderByType(pkInfo.pkType) - if err != nil { - return "", "", err - } - if i > 0 { - currentBatchStartStr += "," - currentBatchStartEnd += "," - } - currentBatchStartStr += placeHolder - currentBatchStartEnd += placeHolder - currentBatchStartStr = fmt.Sprintf(currentBatchStartStr, currentBatchStart[i]) - currentBatchStartEnd = fmt.Sprintf(currentBatchStartEnd, currentBatchEnd[i]) +func genBatchStartAndEndStr(currentBatchStart, currentBatchEnd []sqltypes.Value) (currentBatchStartStr string, currentBatchStartEnd string, err error) { + prefix := "" + for i := range currentBatchStart { + prefix = "," + currentBatchStartStr += prefix + currentBatchStart[i].ToString() + currentBatchStartEnd += prefix + currentBatchEnd[i].ToString() } return currentBatchStartStr, currentBatchStartEnd, nil } -// 拆分列所支持的类型需要满足以下条件: -// 1.在sql中可以正确地使用between或>=,<=进行比较运算,且没有精度问题。 -// 2.可以转换成go中的int64,float64或string三种类型之一,且转换后,在golang中的比较规则和mysql中的比较规则相同 -func genCountSQL(tableSchema, tableName, wherePart, pkPart string, currentBatchStart, currentBatchEnd []any, pkInfos []PKInfo) (countSQLTemplate string, err error) { - if len(pkInfos) == 0 { - return "", errors.New("the len of pkInfos is 0") - } - if len(pkInfos) == 1 { - switch pkInfos[0].pkType { - case querypb.Type_INT8, querypb.Type_INT16, querypb.Type_INT24, querypb.Type_INT32, querypb.Type_INT64: - countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s where ( %s ) and ( %s between %d AND %d ) order by %s", - tableSchema, tableName, wherePart, pkPart, currentBatchStart[0], currentBatchEnd[0], pkPart) - - case querypb.Type_UINT8, querypb.Type_UINT16, querypb.Type_UINT24, querypb.Type_UINT32, querypb.Type_UINT64: - countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s where ( %s ) and ( %s between %d AND %d ) order by %s", - tableSchema, tableName, wherePart, pkPart, currentBatchStart[0], currentBatchEnd[0], pkPart) - - case querypb.Type_FLOAT32, querypb.Type_FLOAT64: - return "", errors.New("float type is unsupported") - - case querypb.Type_TIMESTAMP, querypb.Type_DATE, querypb.Type_TIME, querypb.Type_DATETIME, querypb.Type_YEAR, - querypb.Type_TEXT, querypb.Type_VARCHAR, querypb.Type_CHAR: - countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s where ( %s ) and ( %s between '%s' AND '%s' ) order by %s", - tableSchema, tableName, wherePart, pkPart, currentBatchStart[0], currentBatchEnd[0], pkPart) - - default: - return "", fmt.Errorf("Unsupported type: %v", pkInfos[0].pkType) - } - } else { - // 1. 生成>=的部分 - // 遍历PKName,不同的pk类型要对应不同的占位符 - greatThanPart, err := genPKsGreaterThanPart(pkInfos, currentBatchStart) - if err != nil { - return "", err - } - - // 2.生成<=的部分 - lessThanPart, err := genPKsLessThanPart(pkInfos, currentBatchEnd) - if err != nil { - return "", err - } - - // 3.将各部分拼接成最终的template - countSQLTemplate = fmt.Sprintf("select count(*) as count_rows from %s.%s where ( %s ) and ( (%s) AND (%s) )", - tableSchema, tableName, wherePart, greatThanPart, lessThanPart) - } - return countSQLTemplate, nil -} - func genPlaceholderByType(typ querypb.Type) (string, error) { switch typ { case querypb.Type_INT8, querypb.Type_INT16, querypb.Type_INT24, querypb.Type_INT32, querypb.Type_INT64: @@ -1688,9 +1633,10 @@ func genPlaceholderByType(typ querypb.Type) (string, error) { return "%d", nil case querypb.Type_FLOAT32, querypb.Type_FLOAT64: return "%f", nil + // todo string case querypb.Type_TIMESTAMP, querypb.Type_DATE, querypb.Type_TIME, querypb.Type_DATETIME, querypb.Type_YEAR, querypb.Type_TEXT, querypb.Type_VARCHAR, querypb.Type_CHAR: - return "%s", nil + return "'%s'", nil default: return "", fmt.Errorf("Unsupported type: %v", typ) } @@ -1788,55 +1734,6 @@ func genPKsLessThanPart(pkInfos []PKInfo, currentBatchEnd []any) (string, error) return rst, nil } -func (jc *JobController) genBatchSQL(sql string, stmt sqlparser.Statement, whereExpr sqlparser.Expr, currentBatchStart, currentBatchEnd []any, pkInfos []PKInfo) (batchSQL string, err error) { - if len(pkInfos) == 1 { - if fmt.Sprintf("%T", currentBatchStart[0]) != fmt.Sprintf("%T", currentBatchEnd[0]) { - err = errors.New("the type of currentBatchStart and currentBatchEnd is different") - return "", err - } - pkName := pkInfos[0].pkName - switch currentBatchEnd[0].(type) { - case int64: - batchSQL = sql + fmt.Sprintf(" AND %s between %d AND %d", pkName, currentBatchStart[0].(int64), currentBatchEnd[0].(int64)) - case uint64: - batchSQL = sql + fmt.Sprintf(" AND %s between %d AND %d", pkName, currentBatchStart[0].(uint64), currentBatchEnd[0].(uint64)) - case float64: - return "", errors.New("float type is unsupported") - case string: - batchSQL = sql + fmt.Sprintf(" AND %s between '%s' AND '%s'", pkName, currentBatchStart[0].(string), currentBatchEnd[0].(string)) - default: - err = errors.New("unsupported type of currentBatchEnd") - return "", err - } - } else { - // 1. 生成>=的部分 - // 遍历PKName,不同的pk类型要对应不同的占位符 - greatThanPart, err := genPKsGreaterThanPart(pkInfos, currentBatchStart) - if err != nil { - return "", err - } - - // 2.生成<=的部分 - lessThanPart, err := genPKsLessThanPart(pkInfos, currentBatchEnd) - if err != nil { - return "", err - } - - // 3.将pk>= and pk <= 拼接起来并生成相应的condition expr ast node - pkConditionExpr, err := jc.genPKConditionExprByStr(greatThanPart, lessThanPart) - if err != nil { - return "", err - } - - // 4.将原本sql stmt中的where expr ast node用AND拼接上pkConditionExpr,作为batchSQL的where expr ast node - // 4.1先生成新的condition ast node - andExpr := sqlparser.Where{Expr: &sqlparser.AndExpr{Left: whereExpr, Right: pkConditionExpr}} - batchSQL = jc.genSQLByReplaceWhereExprNode(stmt, andExpr) - //batchSQL = sql + fmt.Sprintf(" AND ( (%s) AND (%s) )", greatThanPart, lessThanPart) - } - return batchSQL, nil -} - // 通知jobScheduler让它立刻开始一次调度。 func (jc *JobController) notifyJobScheduler() { if jc.schedulerNotifyChan == nil { @@ -1901,37 +1798,6 @@ func (jc *JobController) updateBatchStatus(batchTableSchema, batchTableName, sta return err } -func (jc *JobController) genPKConditionExprByStr(greatThanPart, lessThanPart string) (sqlparser.Expr, error) { - tmpSQL := fmt.Sprintf("select 1 where (%s) AND (%s)", greatThanPart, lessThanPart) - tmpStmt, err := sqlparser.Parse(tmpSQL) - if err != nil { - return nil, err - } - tmpStmtSelect, ok := tmpStmt.(*sqlparser.Select) - if !ok { - return nil, errors.New("genPKConditionExprByStr: tmpStmt is not *sqlparser.Select") - } - return tmpStmtSelect.Where.Expr, nil -} - -func (jc *JobController) genSQLByReplaceWhereExprNode(stmt sqlparser.Statement, whereExpr sqlparser.Where) string { - switch s := stmt.(type) { - case *sqlparser.Update: - s.Where = &whereExpr - return sqlparser.String(s) - case *sqlparser.Delete: - s.Where = &whereExpr - return sqlparser.String(s) - case *sqlparser.Select: - // 针对batchCountSQL - s.Where = &whereExpr - return sqlparser.String(s) - default: - // the code won't reach here - return "" - } -} - func getUserWhereExpr(stmt sqlparser.Statement) (expr sqlparser.Expr) { switch s := stmt.(type) { case *sqlparser.Update: diff --git a/go/vt/vttablet/jobcontroller/gen_sql.go b/go/vt/vttablet/jobcontroller/gen_sql.go new file mode 100644 index 0000000000..339f9efe89 --- /dev/null +++ b/go/vt/vttablet/jobcontroller/gen_sql.go @@ -0,0 +1,156 @@ +/* +Copyright ApeCloud, Inc. +Licensed under the Apache v2(found in the LICENSE file in the root directory). +*/ + +package jobcontroller + +import ( + "errors" + "fmt" + + "vitess.io/vitess/go/sqltypes" + "vitess.io/vitess/go/vt/sqlparser" +) + +func GenPKsGreaterEqualOrLessEqualStr(pkInfos []PKInfo, currentBatchStart []sqltypes.Value, greatEqual bool) (string, error) { + buf := sqlparser.NewTrackedBuffer(nil) + prefix := "" + // This loop handles the case for composite pks. For example, + // if lastpk was (1,2), and the greatEqual is true, then clause would be: + // (col1 > 1) or (col1 = 1 and col2 >= 2). + for curCol := 0; curCol <= len(pkInfos)-1; curCol++ { + buf.Myprintf("%s(", prefix) + prefix = " or " + for i, pk := range currentBatchStart[:curCol] { + buf.Myprintf("%s = ", pkInfos[i].pkName) + pk.EncodeSQL(buf) + buf.Myprintf(" and ") + } + if curCol == len(pkInfos)-1 { + if greatEqual { + buf.Myprintf("%s >= ", pkInfos[curCol].pkName) + } else { + buf.Myprintf("%s <= ", pkInfos[curCol].pkName) + } + } else { + if greatEqual { + buf.Myprintf("%s > ", pkInfos[curCol].pkName) + } else { + buf.Myprintf("%s < ", pkInfos[curCol].pkName) + } + } + currentBatchStart[curCol].EncodeSQL(buf) + buf.Myprintf(")") + } + return buf.String(), nil +} + +func GenPKConditionExprByStr(greatThanPart, lessThanPart string) (sqlparser.Expr, error) { + tmpSQL := fmt.Sprintf("select 1 where (%s) AND (%s)", greatThanPart, lessThanPart) + tmpStmt, err := sqlparser.Parse(tmpSQL) + if err != nil { + return nil, err + } + tmpStmtSelect, ok := tmpStmt.(*sqlparser.Select) + if !ok { + return nil, errors.New("genPKConditionExprByStr: tmpStmt is not *sqlparser.Select") + } + return tmpStmtSelect.Where.Expr, nil +} + +func GenSQLByReplaceWhereExprNode(stmt sqlparser.Statement, whereExpr sqlparser.Where) string { + switch s := stmt.(type) { + case *sqlparser.Update: + s.Where = &whereExpr + return sqlparser.String(s) + case *sqlparser.Delete: + s.Where = &whereExpr + return sqlparser.String(s) + case *sqlparser.Select: + // 针对batchCountSQL + s.Where = &whereExpr + return sqlparser.String(s) + default: + // the code won't reach here + return "" + } +} + +func ReplaceWhereExprNode(stmt sqlparser.Statement, whereExpr sqlparser.Where) sqlparser.Statement { + switch s := stmt.(type) { + case *sqlparser.Update: + s.Where = &whereExpr + return s + case *sqlparser.Delete: + s.Where = &whereExpr + return s + default: + // the code won't reach here + return nil + } +} + +// todo newborn22 对参数进行调整 +func GenBatchSQL(sql string, stmt sqlparser.Statement, whereExpr sqlparser.Expr, currentBatchStart, currentBatchEnd []sqltypes.Value, pkInfos []PKInfo) (batchSQL, finalWhereStr string, err error) { + // 1. 生成>=的部分 + greatThanPart, err := GenPKsGreaterEqualOrLessEqualStr(pkInfos, currentBatchStart, true) + if err != nil { + return "", "", err + } + + // 2.生成<=的部分 + lessThanPart, err := GenPKsGreaterEqualOrLessEqualStr(pkInfos, currentBatchEnd, false) + if err != nil { + return "", "", err + } + + // 3.将pk>= and pk <= 拼接起来并生成相应的condition expr ast node + pkConditionExpr, err := GenPKConditionExprByStr(greatThanPart, lessThanPart) + if err != nil { + return "", "", err + } + + // 4.将原本sql stmt中的where expr ast node用AND拼接上pkConditionExpr,作为batchSQL的where expr ast node + // 4.1先生成新的condition ast node + andExpr := sqlparser.Where{Expr: &sqlparser.AndExpr{Left: whereExpr, Right: pkConditionExpr}} + batchSQL = GenSQLByReplaceWhereExprNode(stmt, andExpr) + finalWhereStr = sqlparser.String(andExpr.Expr) + + return batchSQL, finalWhereStr, nil +} + +// todo newbon22 删除 +// todo newborn22 batchSQL和batchCountSQL对浮点数进行拦截,可能在获得pkInfo时就进行拦截。 +// 拆分列所支持的类型需要满足以下条件: +// 1.在sql中可以正确地使用between或>=,<=进行比较运算,且没有精度问题。 +// 2.可以转换成go中的int64,float64或string三种类型之一,且转换后,在golang中的比较规则和mysql中的比较规则相同 +func GenCountSQLOld(tableSchema, tableName, wherePart string, currentBatchStart, currentBatchEnd []sqltypes.Value, pkInfos []PKInfo) (countSQL string, err error) { + // 1. 生成>=的部分 + greatThanPart, err := GenPKsGreaterEqualOrLessEqualStr(pkInfos, currentBatchStart, true) + if err != nil { + return "", err + } + + // 2.生成<=的部分 + lessThanPart, err := GenPKsGreaterEqualOrLessEqualStr(pkInfos, currentBatchEnd, false) + if err != nil { + return "", err + } + + // 3.将各部分拼接成最终的countSQL + countSQL = fmt.Sprintf("select count(*) as count_rows from %s.%s where (%s) and ((%s) and (%s))", + tableSchema, tableName, wherePart, greatThanPart, lessThanPart) + + return countSQL, nil +} + +// todo newborn22 batchSQL和batchCountSQL对浮点数进行拦截,可能在获得pkInfo时就进行拦截。 +// 拆分列所支持的类型需要满足以下条件: +// 1.在sql中可以正确地使用between或>=,<=进行比较运算,且没有精度问题。 +// 2.可以转换成go中的int64,float64或string三种类型之一,且转换后,在golang中的比较规则和mysql中的比较规则相同 +func GenCountSQL(tableSchema, tableName, whereExpr string) (countSQL string) { + countSQL = fmt.Sprintf("select count(*) as count_rows from %s.%s where %s)", + tableSchema, tableName, whereExpr) + return countSQL +} diff --git a/go/vt/vttablet/jobcontroller/gen_sql_test.go b/go/vt/vttablet/jobcontroller/gen_sql_test.go new file mode 100644 index 0000000000..b06b7c9dff --- /dev/null +++ b/go/vt/vttablet/jobcontroller/gen_sql_test.go @@ -0,0 +1,155 @@ +/* +Copyright ApeCloud, Inc. +Licensed under the Apache v2(found in the LICENSE file in the root directory). +*/ + +package jobcontroller + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "vitess.io/vitess/go/sqltypes" + "vitess.io/vitess/go/vt/sqlparser" +) + +func TestGenPKsGreaterEqualOrLessEqual(t *testing.T) { + type args struct { + pkInfos []PKInfo + currentBatchStart []sqltypes.Value + greatEqual bool + } + tests := []struct { + name string + args args + want string + }{ + { + name: "Test GenPKsGreaterEqualOrLessEqualStr, Single Int", + args: args{ + pkInfos: []PKInfo{ + {pkName: "a"}, + }, + currentBatchStart: []sqltypes.Value{sqltypes.NewInt64(1)}, + greatEqual: true, + }, + want: "(a >= 1)", + }, + { + name: "Test GenPKsGreaterEqualOrLessEqualStr, Two INTs", + args: args{ + pkInfos: []PKInfo{ + {pkName: "a"}, + {pkName: "b"}, + }, + currentBatchStart: []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(2)}, + greatEqual: true, + }, + want: "(a > 1) or (a = 1 and b >= 2)", + }, + { + name: "Test GenPKsGreaterEqualOrLessEqualStr, One INT With One String", + args: args{ + pkInfos: []PKInfo{ + {pkName: "a"}, + {pkName: "b"}, + }, + currentBatchStart: []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewTimestamp("1704630977")}, + greatEqual: false, + }, + want: "(a < 1) or (a = 1 and b <= '1704630977')", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, _ := GenPKsGreaterEqualOrLessEqualStr(tt.args.pkInfos, tt.args.currentBatchStart, tt.args.greatEqual) + assert.Equalf(t, tt.want, got, "GenPKsGreaterEqualOrLessEqualStr(%v, %v, %v)", tt.args.pkInfos, tt.args.currentBatchStart, tt.args.greatEqual) + }) + } +} + +func TestGenBatchSQL(t *testing.T) { + sql := "update t set c = 1 where 1 = 1 or 2 = 2 and 3 = 3" + stmt, _ := sqlparser.Parse(sql) + whereExpr := stmt.(*sqlparser.Update).Where + currentBatchStart := []sqltypes.Value{sqltypes.NewInt64(1)} + currentBatchEnd := []sqltypes.Value{sqltypes.NewInt64(9)} + pkInfos := []PKInfo{{pkName: "pk1"}} + batchSQL, finalWhereStr, _ := GenBatchSQL(sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + expectedBatchSQL := "update t set c = 1 where (1 = 1 or 2 = 2 and 3 = 3) and (pk1 >= 1 and pk1 <= 9)" + expectedWhereStr := "(1 = 1 or 2 = 2 and 3 = 3) and (pk1 >= 1 and pk1 <= 9)" + assert.Equalf(t, expectedBatchSQL, batchSQL, "GenBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + assert.Equalf(t, expectedWhereStr, finalWhereStr, "GenBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + + sql = "update t set c = 1 where 1 = 1 or 2 = 2 " + stmt, _ = sqlparser.Parse(sql) + whereExpr = stmt.(*sqlparser.Update).Where + currentBatchStart = []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(1)} + currentBatchEnd = []sqltypes.Value{sqltypes.NewInt64(9), sqltypes.NewInt64(9)} + pkInfos = []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}} + batchSQL, finalWhereStr, _ = GenBatchSQL(sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + expectedBatchSQL = "update t set c = 1 where (1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))" + expectedWhereStr = "(1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))" + assert.Equalf(t, expectedBatchSQL, batchSQL, "GenBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + assert.Equalf(t, expectedWhereStr, finalWhereStr, "GenBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + + sql = "update t set c = 1 where 1 = 1 or 2 = 2 " + stmt, _ = sqlparser.Parse(sql) + whereExpr = stmt.(*sqlparser.Update).Where + currentBatchStart = []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(1), sqltypes.NewInt64(1)} + currentBatchEnd = []sqltypes.Value{sqltypes.NewInt64(9), sqltypes.NewInt64(9), sqltypes.NewInt64(9)} + pkInfos = []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}, {pkName: "pk3"}} + batchSQL, finalWhereStr, _ = GenBatchSQL(sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + expectedBatchSQL = "update t set c = 1 where (1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 > 1 or pk1 = 1 and pk2 = 1 and pk3 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 < 9 or pk1 = 9 and pk2 = 9 and pk3 <= 9))" + expectedWhereStr = "(1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 > 1 or pk1 = 1 and pk2 = 1 and pk3 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 < 9 or pk1 = 9 and pk2 = 9 and pk3 <= 9))" + assert.Equalf(t, expectedBatchSQL, batchSQL, "GenBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + assert.Equalf(t, expectedWhereStr, finalWhereStr, "GenBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) +} + +//func TestGenCountSQL_old(t *testing.T) { +// type args struct { +// tableSchema string +// tableName string +// wherePart string +// currentBatchStart []sqltypes.Value +// currentBatchEnd []sqltypes.Value +// pkInfos []PKInfo +// } +// tests := []struct { +// name string +// args args +// want string +// }{ +// { +// name: "test_db", +// args: args{ +// tableSchema: "test_db", +// tableName: "test_table", +// wherePart: "id = 1", +// currentBatchStart: []sqltypes.Value{sqltypes.NewInt64(1)}, +// currentBatchEnd: []sqltypes.Value{sqltypes.NewInt64(9)}, +// pkInfos: []PKInfo{{pkName: "pk1"}}, +// }, +// want: "select count(*) as count_rows from test_db.test_table where (id = 1) and (((pk1 >= 1)) and ((pk1 <= 9)))", +// }, +// { +// name: "test_db", +// args: args{ +// tableSchema: "test_db", +// tableName: "test_table", +// wherePart: "id = 1", +// currentBatchStart: []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(1)}, +// currentBatchEnd: []sqltypes.Value{sqltypes.NewInt64(9), sqltypes.NewInt64(9)}, +// pkInfos: []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}}, +// }, +// want: "select count(*) as count_rows from test_db.test_table where (id = 1) and (((pk1 > 1) or (pk1 = 1 and pk2 >= 1)) and ((pk1 < 9) or (pk1 = 9 and pk2 <= 9)))", +// }, +// } +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// got, _ := GenCountSQL(tt.args.tableSchema, tt.args.tableName, tt.args.wherePart, tt.args.currentBatchStart, tt.args.currentBatchEnd, tt.args.pkInfos) +// assert.Equalf(t, tt.want, got, "GenCountSQL(%v,%v,%v,%v,%v,%v)", tt.args.tableSchema, tt.args.tableName, tt.args.wherePart, tt.args.currentBatchStart, tt.args.currentBatchEnd, tt.args.pkInfos) +// }) +// } +//} From ba612ff0ff5af736f4a0ca39f5a61809f5068fc5 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Mon, 8 Jan 2024 23:28:05 +0800 Subject: [PATCH 38/54] fix: refactor splitBatchIntoTwo, add related testcases Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/vttablet/jobcontroller/controller.go | 270 ++---------------- go/vt/vttablet/jobcontroller/gen_sql.go | 156 ---------- go/vt/vttablet/jobcontroller/gen_sql_test.go | 155 ---------- go/vt/vttablet/jobcontroller/sql_related.go | 213 ++++++++++++++ .../jobcontroller/sql_related_test.go | 217 ++++++++++++++ 5 files changed, 459 insertions(+), 552 deletions(-) delete mode 100644 go/vt/vttablet/jobcontroller/gen_sql.go delete mode 100644 go/vt/vttablet/jobcontroller/gen_sql_test.go create mode 100644 go/vt/vttablet/jobcontroller/sql_related.go create mode 100644 go/vt/vttablet/jobcontroller/sql_related_test.go diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index edc52aae1f..db606580a8 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -108,6 +108,7 @@ type JobController struct { schedulerNotifyChan chan struct{} // jobScheduler每隔一段时间运行一次调度。但当它收到这个chan的消息后,会立刻开始一次调度 } +// todo newborn22 删除pktype? type PKInfo struct { pkName string pkType querypb.Type @@ -792,6 +793,15 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta // 拆分的基本原理是遍历原先batch的batchCountSQL的结果集,将第batchSize条record的pk作为原先batch的PKEnd,第batchSize+1条record的pk作为新batch的PKStart // 原先batch的PKStart和PKEnd分别成为原先batch的PKStart和新batch的PKEnd func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, table, batchTable, batchSQL, batchCountSQL, batchID string, conn *connpool.DBConn, batchSize, expectedRow int64) (newCurrentBatchSQL string, err error) { + batchSQLStmt, err := sqlparser.Parse(batchSQL) + if err != nil { + return "", err + } + batchCountSQLStmt, err := sqlparser.Parse(batchCountSQL) + if err != nil { + return "", err + } + // 1.根据batchCountSQL生成查询pk值的select sql // 1.1.获得PK信息 pkInfos, err := jc.getTablePkInfo(ctx, tableSchema, table) @@ -801,11 +811,8 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab // 1.2.根据当前batch的batchCountSQL生成select sql,用于获得拆分后batch的拆分列start和end // 只需要将batchCountSQL的投影部分(SelectExprs)从count(*)改为拆分列即可 - batchCountSQLStmt, err := sqlparser.Parse(batchCountSQL) - if err != nil { - return "", err - } batchCountSQLStmtSelect, _ := batchCountSQLStmt.(*sqlparser.Select) + // 根据pk信息生成select exprs var pkExprs []sqlparser.SelectExpr for _, pkInfo := range pkInfos { pkExprs = append(pkExprs, &sqlparser.AliasedExpr{Expr: sqlparser.NewColName(pkInfo.pkName)}) @@ -821,85 +828,33 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab // 拆成多个batch需要遍历完select的全部结果,这可能会导致超时 // 2.1.计算两个batch的batchPKStart和batchPKEnd。实际上,只要获得当前batch的新的PKEnd和新的batch的PKStart - // 遍历前threshold+1条,依然使用同一个连接 qr, err := conn.Exec(ctx, batchSplitSelectSQL, math.MaxInt32, true) if err != nil { return "", err } - // todo literal - var curBatchNewEnd []any - var newBatchStart []any + var curBatchNewEnd []sqltypes.Value + var newBatchStart []sqltypes.Value - for rowCount, row := range qr.Named().Rows { + for rowCount, row := range qr.Rows { // 将原本batch的PKEnd设在threshold条数处 if int64(rowCount) == batchSize-1 { - for _, pkInfo := range pkInfos { - pkName := pkInfo.pkName - keyVal, err := ProcessValue(row[pkName]) - if err != nil { - return "", err - } - curBatchNewEnd = append(curBatchNewEnd, keyVal) - } + curBatchNewEnd = row } // 将第threshold+1条的PK作为新PK的起点 if int64(rowCount) == batchSize { - for _, pkInfo := range pkInfos { - pkName := pkInfo.pkName - keyVal, err := ProcessValue(row[pkName]) - if err != nil { - return "", err - } - newBatchStart = append(newBatchStart, keyVal) - } + newBatchStart = row + break } } - - // 2.2) 将curBatchNewEnd和newBatchStart转换成sql中where部分的<=和>=的字符串 - // todo 直接从ast开始构建 - curBatchLessThanPart, err := genPKsLessThanPart(pkInfos, curBatchNewEnd) - if err != nil { - return "", err - } - curBatchLessThanExpr, err := genExprNodeFromStr(curBatchLessThanPart) - if err != nil { - return "", err - } - - newBatchGreatThanPart, err := genPKsGreaterThanPart(pkInfos, newBatchStart) - if err != nil { - return "", err - } - newBatchGreatThanExpr, err := genExprNodeFromStr(newBatchGreatThanPart) + // 2.2.生成新的batchSQL和新的batchCountSQL + curBatchSQL, newBatchSQL, newBatchCountSQL, err := genNewBatchSQLsAndCountSQLsWhenSplittingBatch(batchSQLStmt, batchCountSQLStmt, curBatchNewEnd, newBatchStart, pkInfos) if err != nil { return "", err } - // 2.3) 通过parser,获得原先batchSQL的greatThan和lessThan的expr ast node - batchSQLStmt, err := sqlparser.Parse(batchSQL) - if err != nil { - return "", err - } - curBatchGreatThanExpr, newBatchLessThanExpr := jc.getBatchSQLGreatThanAndLessThanExprNode(batchSQLStmt) - - // 2.4) 生成拆分后,当前batch的sql和新batch的sql - // 2.4.1) 先获得curBatchSQL和newBatchSQL的where expr ast node,需要将用户输入的where expr与上PK Condition Expr - oldBatchSQLUserWhereExpr := getUserWhereExpr(batchSQLStmt) - curBatchPKConditionExpr := sqlparser.AndExpr{Left: curBatchGreatThanExpr, Right: curBatchLessThanExpr} - newBatchPKConditionExpr := sqlparser.AndExpr{Left: newBatchGreatThanExpr, Right: newBatchLessThanExpr} - curBatchWhereExpr := sqlparser.Where{Expr: &sqlparser.AndExpr{Left: oldBatchSQLUserWhereExpr, Right: &curBatchPKConditionExpr}} - newBatchWhereExpr := sqlparser.Where{Expr: &sqlparser.AndExpr{Left: oldBatchSQLUserWhereExpr, Right: &newBatchPKConditionExpr}} - - // 2.4.2) 替换原先batchSQL和batchCountSQL的where expr来生成新的sql - curBatchSQL := GenSQLByReplaceWhereExprNode(batchSQLStmt, curBatchWhereExpr) - newBatchSQL := GenSQLByReplaceWhereExprNode(batchSQLStmt, newBatchWhereExpr) - - // 2.4.3) 生成新batch的batchCountSQL,原理同上 - newBatchCountSQL := GenSQLByReplaceWhereExprNode(batchCountSQLStmt, newBatchWhereExpr) - - // 构建当前batch新的batch begin及end字段以及新batch的begin及end字段 + // 2.3.计算两个batch的batch start和end字段 getBatchBeginAndEndSQL := fmt.Sprintf(sqlTemplateGetBatchBeginAndEnd, batchTable) getBatchBeginAndEndQuery, err := sqlparser.ParseAndBind(getBatchBeginAndEndSQL, sqltypes.StringBindVariable(batchID)) if err != nil { @@ -914,14 +869,13 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab } currentBatchNewBeginStr := qr.Named().Rows[0]["batch_begin"].ToString() newBatchEndStr := qr.Named().Rows[0]["batch_end"].ToString() - // todo newborn22 next - currentBatchNewEndStr, newBatchBegintStr, err := genBatchStartAndEndStr(nil, nil) + currentBatchNewEndStr, newBatchBeginStr, err := genBatchStartAndEndStr(curBatchNewEnd, newBatchStart) if err != nil { return "", err } - // 2.5) 在batch表中更改旧的条目的sql,并插入新batch条目 - // 在表中更改旧的sql + // 3 将结果记录在表中:在batch表中更改旧的条目的sql,并插入新batch条目 + // 3.1.在表中更改旧的sql updateBatchSQL := fmt.Sprintf(sqlTemplateUpdateBatchSQL, batchTable) updateBatchSQLQuery, err := sqlparser.ParseAndBind(updateBatchSQL, sqltypes.StringBindVariable(curBatchSQL), @@ -935,7 +889,7 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab if err != nil { return "", err } - // 插入新batch条目 + // 3.2.插入新batch条目 newCurrentBatchSQL = curBatchSQL // todo 1-1 -> 1-2开始 nextBatchID, err := genNewBatchID(batchID) @@ -949,7 +903,7 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab sqltypes.StringBindVariable(newBatchSQL), sqltypes.StringBindVariable(newBatchCountSQL), sqltypes.Int64BindVariable(newBatchSize), - sqltypes.StringBindVariable(newBatchBegintStr), + sqltypes.StringBindVariable(newBatchBeginStr), sqltypes.StringBindVariable(newBatchEndStr)) if err != nil { return "", err @@ -1538,11 +1492,11 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, currentBatchSize++ if currentBatchSize == batchSize { - batchSQL, finalWhereStr, err := GenBatchSQL(sql, stmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) + batchSQL, finalWhereStr, err := genBatchSQL(sql, stmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) if err != nil { return "", err } - countSQL := GenCountSQL(tableSchema, tableName, finalWhereStr) + countSQL := genCountSQL(tableSchema, tableName, finalWhereStr) if err != nil { return "", err } @@ -1573,11 +1527,11 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, } // 最后一个batch的行数不一定是batchSize,在循环结束时要将剩余的行数划分到最后一个batch中 if currentBatchSize != 0 { - batchSQL, finalWhereStr, err := GenBatchSQL(sql, stmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) + batchSQL, finalWhereStr, err := genBatchSQL(sql, stmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) if err != nil { return "", err } - countSQL := GenCountSQL(tableSchema, tableName, finalWhereStr) + countSQL := genCountSQL(tableSchema, tableName, finalWhereStr) if err != nil { return "", err } @@ -1615,125 +1569,6 @@ func currentBatchIDInc(currentBatchID string) (string, error) { return strconv.FormatInt(currentBatchIDInt64, 10), nil } -func genBatchStartAndEndStr(currentBatchStart, currentBatchEnd []sqltypes.Value) (currentBatchStartStr string, currentBatchStartEnd string, err error) { - prefix := "" - for i := range currentBatchStart { - prefix = "," - currentBatchStartStr += prefix + currentBatchStart[i].ToString() - currentBatchStartEnd += prefix + currentBatchEnd[i].ToString() - } - return currentBatchStartStr, currentBatchStartEnd, nil -} - -func genPlaceholderByType(typ querypb.Type) (string, error) { - switch typ { - case querypb.Type_INT8, querypb.Type_INT16, querypb.Type_INT24, querypb.Type_INT32, querypb.Type_INT64: - return "%d", nil - case querypb.Type_UINT8, querypb.Type_UINT16, querypb.Type_UINT24, querypb.Type_UINT32, querypb.Type_UINT64: - return "%d", nil - case querypb.Type_FLOAT32, querypb.Type_FLOAT64: - return "%f", nil - // todo string - case querypb.Type_TIMESTAMP, querypb.Type_DATE, querypb.Type_TIME, querypb.Type_DATETIME, querypb.Type_YEAR, - querypb.Type_TEXT, querypb.Type_VARCHAR, querypb.Type_CHAR: - return "'%s'", nil - default: - return "", fmt.Errorf("Unsupported type: %v", typ) - } -} - -func ProcessValue(value sqltypes.Value) (any, error) { - typ := value.Type() - - switch typ { - case querypb.Type_INT8, querypb.Type_INT16, querypb.Type_INT24, querypb.Type_INT32, querypb.Type_INT64: - return value.ToInt64() - case querypb.Type_UINT8, querypb.Type_UINT16, querypb.Type_UINT24, querypb.Type_UINT32, querypb.Type_UINT64: - return value.ToUint64() - case querypb.Type_FLOAT32, querypb.Type_FLOAT64: - return value.ToFloat64() - case querypb.Type_TIMESTAMP, querypb.Type_DATE, querypb.Type_TIME, querypb.Type_DATETIME, querypb.Type_YEAR, - querypb.Type_TEXT, querypb.Type_VARCHAR, querypb.Type_CHAR: - return value.ToString(), nil - default: - return nil, fmt.Errorf("Unsupported type: %v", typ) - } -} - -func genPKsGreaterThanPart(pkInfos []PKInfo, currentBatchStart []any) (string, error) { - curIdx := 0 - pksNum := len(pkInfos) - var equalStr, rst string - for curIdx < pksNum { - curPkName := pkInfos[curIdx].pkName - curPKType := pkInfos[curIdx].pkType - // mysql的浮点类型在比较时有精度损失,不适合作为拆分列 - if curPKType == querypb.Type_FLOAT32 || curPKType == querypb.Type_FLOAT64 { - return "", fmt.Errorf("unsupported type: %v", curPKType) - } - - placeholder, err := genPlaceholderByType(curPKType) - if err != nil { - return "", err - } - - if curIdx == 0 { - rst = fmt.Sprintf("( %s > %s )", curPkName, placeholder) - } else if curIdx != (pksNum - 1) { - rst += fmt.Sprintf(" OR ( %s AND %s > %s )", equalStr, curPkName, placeholder) - } else if curIdx == (pksNum - 1) { - rst += fmt.Sprintf(" OR ( %s AND %s >= %s )", equalStr, curPkName, placeholder) - } - rst = fmt.Sprintf(rst, currentBatchStart[curIdx]) - - if curIdx == 0 { - equalStr = fmt.Sprintf("%s = %s", curPkName, placeholder) - } else { - equalStr += fmt.Sprintf(" AND %s = %s", curPkName, placeholder) - } - equalStr = fmt.Sprintf(equalStr, currentBatchStart[curIdx]) - curIdx++ - } - return rst, nil -} - -func genPKsLessThanPart(pkInfos []PKInfo, currentBatchEnd []any) (string, error) { - curIdx := 0 - pksNum := len(pkInfos) - var equalStr, rst string - for curIdx < pksNum { - curPkName := pkInfos[curIdx].pkName - curPKType := pkInfos[curIdx].pkType - // mysql的浮点类型在比较时有精度损失,不适合作为拆分列 - if curPKType == querypb.Type_FLOAT32 || curPKType == querypb.Type_FLOAT64 { - return "", fmt.Errorf("unsupported type: %v", curPKType) - } - - placeholder, err := genPlaceholderByType(curPKType) - if err != nil { - return "", err - } - - if curIdx == 0 { - rst = fmt.Sprintf("( %s < %s )", curPkName, placeholder) - } else if curIdx != (pksNum - 1) { - rst += fmt.Sprintf(" OR ( %s AND %s < %s )", equalStr, curPkName, placeholder) - } else if curIdx == (pksNum - 1) { - rst += fmt.Sprintf(" OR ( %s AND %s <= %s )", equalStr, curPkName, placeholder) - } - rst = fmt.Sprintf(rst, currentBatchEnd[curIdx]) - - if curIdx == 0 { - equalStr = fmt.Sprintf("%s = %s", curPkName, placeholder) - } else { - equalStr += fmt.Sprintf(" AND %s = %s", curPkName, placeholder) - } - equalStr = fmt.Sprintf(equalStr, currentBatchEnd[curIdx]) - curIdx++ - } - return rst, nil -} - // 通知jobScheduler让它立刻开始一次调度。 func (jc *JobController) notifyJobScheduler() { if jc.schedulerNotifyChan == nil { @@ -1797,50 +1632,3 @@ func (jc *JobController) updateBatchStatus(batchTableSchema, batchTableName, sta _, err = jc.execQuery(context.Background(), batchTableSchema, query) return err } - -func getUserWhereExpr(stmt sqlparser.Statement) (expr sqlparser.Expr) { - switch s := stmt.(type) { - case *sqlparser.Update: - tempAndExpr, _ := s.Where.Expr.(*sqlparser.AndExpr) - expr = tempAndExpr.Left - return expr - case *sqlparser.Delete: - tempAndExpr, _ := s.Where.Expr.(*sqlparser.AndExpr) - expr = tempAndExpr.Left - return expr - default: - // the code won't reach here - return nil - } -} - -func (jc *JobController) getBatchSQLGreatThanAndLessThanExprNode(stmt sqlparser.Statement) (greatThanExpr sqlparser.Expr, lessThanExpr sqlparser.Expr) { - switch s := stmt.(type) { - case *sqlparser.Update: - // the type switch will be ok - andExpr, _ := s.Where.Expr.(*sqlparser.AndExpr) - pkConditionExpr, _ := andExpr.Right.(*sqlparser.AndExpr) - greatThanExpr = pkConditionExpr.Left - lessThanExpr = pkConditionExpr.Right - return greatThanExpr, lessThanExpr - case *sqlparser.Delete: - // the type switch will be ok - andExpr, _ := s.Where.Expr.(*sqlparser.AndExpr) - pkConditionExpr, _ := andExpr.Right.(*sqlparser.AndExpr) - greatThanExpr = pkConditionExpr.Left - lessThanExpr = pkConditionExpr.Right - return greatThanExpr, lessThanExpr - } - // the code won't reach here - return nil, nil -} - -func genExprNodeFromStr(condition string) (sqlparser.Expr, error) { - tmpSQL := fmt.Sprintf("select 1 where %s", condition) - tmpStmt, err := sqlparser.Parse(tmpSQL) - if err != nil { - return nil, err - } - tmpStmtSelect, _ := tmpStmt.(*sqlparser.Select) - return tmpStmtSelect.Where.Expr, nil -} diff --git a/go/vt/vttablet/jobcontroller/gen_sql.go b/go/vt/vttablet/jobcontroller/gen_sql.go deleted file mode 100644 index 339f9efe89..0000000000 --- a/go/vt/vttablet/jobcontroller/gen_sql.go +++ /dev/null @@ -1,156 +0,0 @@ -/* -Copyright ApeCloud, Inc. -Licensed under the Apache v2(found in the LICENSE file in the root directory). -*/ - -package jobcontroller - -import ( - "errors" - "fmt" - - "vitess.io/vitess/go/sqltypes" - "vitess.io/vitess/go/vt/sqlparser" -) - -func GenPKsGreaterEqualOrLessEqualStr(pkInfos []PKInfo, currentBatchStart []sqltypes.Value, greatEqual bool) (string, error) { - buf := sqlparser.NewTrackedBuffer(nil) - prefix := "" - // This loop handles the case for composite pks. For example, - // if lastpk was (1,2), and the greatEqual is true, then clause would be: - // (col1 > 1) or (col1 = 1 and col2 >= 2). - for curCol := 0; curCol <= len(pkInfos)-1; curCol++ { - buf.Myprintf("%s(", prefix) - prefix = " or " - for i, pk := range currentBatchStart[:curCol] { - buf.Myprintf("%s = ", pkInfos[i].pkName) - pk.EncodeSQL(buf) - buf.Myprintf(" and ") - } - if curCol == len(pkInfos)-1 { - if greatEqual { - buf.Myprintf("%s >= ", pkInfos[curCol].pkName) - } else { - buf.Myprintf("%s <= ", pkInfos[curCol].pkName) - } - } else { - if greatEqual { - buf.Myprintf("%s > ", pkInfos[curCol].pkName) - } else { - buf.Myprintf("%s < ", pkInfos[curCol].pkName) - } - } - currentBatchStart[curCol].EncodeSQL(buf) - buf.Myprintf(")") - } - return buf.String(), nil -} - -func GenPKConditionExprByStr(greatThanPart, lessThanPart string) (sqlparser.Expr, error) { - tmpSQL := fmt.Sprintf("select 1 where (%s) AND (%s)", greatThanPart, lessThanPart) - tmpStmt, err := sqlparser.Parse(tmpSQL) - if err != nil { - return nil, err - } - tmpStmtSelect, ok := tmpStmt.(*sqlparser.Select) - if !ok { - return nil, errors.New("genPKConditionExprByStr: tmpStmt is not *sqlparser.Select") - } - return tmpStmtSelect.Where.Expr, nil -} - -func GenSQLByReplaceWhereExprNode(stmt sqlparser.Statement, whereExpr sqlparser.Where) string { - switch s := stmt.(type) { - case *sqlparser.Update: - s.Where = &whereExpr - return sqlparser.String(s) - case *sqlparser.Delete: - s.Where = &whereExpr - return sqlparser.String(s) - case *sqlparser.Select: - // 针对batchCountSQL - s.Where = &whereExpr - return sqlparser.String(s) - default: - // the code won't reach here - return "" - } -} - -func ReplaceWhereExprNode(stmt sqlparser.Statement, whereExpr sqlparser.Where) sqlparser.Statement { - switch s := stmt.(type) { - case *sqlparser.Update: - s.Where = &whereExpr - return s - case *sqlparser.Delete: - s.Where = &whereExpr - return s - default: - // the code won't reach here - return nil - } -} - -// todo newborn22 对参数进行调整 -func GenBatchSQL(sql string, stmt sqlparser.Statement, whereExpr sqlparser.Expr, currentBatchStart, currentBatchEnd []sqltypes.Value, pkInfos []PKInfo) (batchSQL, finalWhereStr string, err error) { - // 1. 生成>=的部分 - greatThanPart, err := GenPKsGreaterEqualOrLessEqualStr(pkInfos, currentBatchStart, true) - if err != nil { - return "", "", err - } - - // 2.生成<=的部分 - lessThanPart, err := GenPKsGreaterEqualOrLessEqualStr(pkInfos, currentBatchEnd, false) - if err != nil { - return "", "", err - } - - // 3.将pk>= and pk <= 拼接起来并生成相应的condition expr ast node - pkConditionExpr, err := GenPKConditionExprByStr(greatThanPart, lessThanPart) - if err != nil { - return "", "", err - } - - // 4.将原本sql stmt中的where expr ast node用AND拼接上pkConditionExpr,作为batchSQL的where expr ast node - // 4.1先生成新的condition ast node - andExpr := sqlparser.Where{Expr: &sqlparser.AndExpr{Left: whereExpr, Right: pkConditionExpr}} - batchSQL = GenSQLByReplaceWhereExprNode(stmt, andExpr) - finalWhereStr = sqlparser.String(andExpr.Expr) - - return batchSQL, finalWhereStr, nil -} - -// todo newbon22 删除 -// todo newborn22 batchSQL和batchCountSQL对浮点数进行拦截,可能在获得pkInfo时就进行拦截。 -// 拆分列所支持的类型需要满足以下条件: -// 1.在sql中可以正确地使用between或>=,<=进行比较运算,且没有精度问题。 -// 2.可以转换成go中的int64,float64或string三种类型之一,且转换后,在golang中的比较规则和mysql中的比较规则相同 -func GenCountSQLOld(tableSchema, tableName, wherePart string, currentBatchStart, currentBatchEnd []sqltypes.Value, pkInfos []PKInfo) (countSQL string, err error) { - // 1. 生成>=的部分 - greatThanPart, err := GenPKsGreaterEqualOrLessEqualStr(pkInfos, currentBatchStart, true) - if err != nil { - return "", err - } - - // 2.生成<=的部分 - lessThanPart, err := GenPKsGreaterEqualOrLessEqualStr(pkInfos, currentBatchEnd, false) - if err != nil { - return "", err - } - - // 3.将各部分拼接成最终的countSQL - countSQL = fmt.Sprintf("select count(*) as count_rows from %s.%s where (%s) and ((%s) and (%s))", - tableSchema, tableName, wherePart, greatThanPart, lessThanPart) - - return countSQL, nil -} - -// todo newborn22 batchSQL和batchCountSQL对浮点数进行拦截,可能在获得pkInfo时就进行拦截。 -// 拆分列所支持的类型需要满足以下条件: -// 1.在sql中可以正确地使用between或>=,<=进行比较运算,且没有精度问题。 -// 2.可以转换成go中的int64,float64或string三种类型之一,且转换后,在golang中的比较规则和mysql中的比较规则相同 -func GenCountSQL(tableSchema, tableName, whereExpr string) (countSQL string) { - countSQL = fmt.Sprintf("select count(*) as count_rows from %s.%s where %s)", - tableSchema, tableName, whereExpr) - return countSQL -} diff --git a/go/vt/vttablet/jobcontroller/gen_sql_test.go b/go/vt/vttablet/jobcontroller/gen_sql_test.go deleted file mode 100644 index b06b7c9dff..0000000000 --- a/go/vt/vttablet/jobcontroller/gen_sql_test.go +++ /dev/null @@ -1,155 +0,0 @@ -/* -Copyright ApeCloud, Inc. -Licensed under the Apache v2(found in the LICENSE file in the root directory). -*/ - -package jobcontroller - -import ( - "testing" - - "github.com/stretchr/testify/assert" - - "vitess.io/vitess/go/sqltypes" - "vitess.io/vitess/go/vt/sqlparser" -) - -func TestGenPKsGreaterEqualOrLessEqual(t *testing.T) { - type args struct { - pkInfos []PKInfo - currentBatchStart []sqltypes.Value - greatEqual bool - } - tests := []struct { - name string - args args - want string - }{ - { - name: "Test GenPKsGreaterEqualOrLessEqualStr, Single Int", - args: args{ - pkInfos: []PKInfo{ - {pkName: "a"}, - }, - currentBatchStart: []sqltypes.Value{sqltypes.NewInt64(1)}, - greatEqual: true, - }, - want: "(a >= 1)", - }, - { - name: "Test GenPKsGreaterEqualOrLessEqualStr, Two INTs", - args: args{ - pkInfos: []PKInfo{ - {pkName: "a"}, - {pkName: "b"}, - }, - currentBatchStart: []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(2)}, - greatEqual: true, - }, - want: "(a > 1) or (a = 1 and b >= 2)", - }, - { - name: "Test GenPKsGreaterEqualOrLessEqualStr, One INT With One String", - args: args{ - pkInfos: []PKInfo{ - {pkName: "a"}, - {pkName: "b"}, - }, - currentBatchStart: []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewTimestamp("1704630977")}, - greatEqual: false, - }, - want: "(a < 1) or (a = 1 and b <= '1704630977')", - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, _ := GenPKsGreaterEqualOrLessEqualStr(tt.args.pkInfos, tt.args.currentBatchStart, tt.args.greatEqual) - assert.Equalf(t, tt.want, got, "GenPKsGreaterEqualOrLessEqualStr(%v, %v, %v)", tt.args.pkInfos, tt.args.currentBatchStart, tt.args.greatEqual) - }) - } -} - -func TestGenBatchSQL(t *testing.T) { - sql := "update t set c = 1 where 1 = 1 or 2 = 2 and 3 = 3" - stmt, _ := sqlparser.Parse(sql) - whereExpr := stmt.(*sqlparser.Update).Where - currentBatchStart := []sqltypes.Value{sqltypes.NewInt64(1)} - currentBatchEnd := []sqltypes.Value{sqltypes.NewInt64(9)} - pkInfos := []PKInfo{{pkName: "pk1"}} - batchSQL, finalWhereStr, _ := GenBatchSQL(sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) - expectedBatchSQL := "update t set c = 1 where (1 = 1 or 2 = 2 and 3 = 3) and (pk1 >= 1 and pk1 <= 9)" - expectedWhereStr := "(1 = 1 or 2 = 2 and 3 = 3) and (pk1 >= 1 and pk1 <= 9)" - assert.Equalf(t, expectedBatchSQL, batchSQL, "GenBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) - assert.Equalf(t, expectedWhereStr, finalWhereStr, "GenBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) - - sql = "update t set c = 1 where 1 = 1 or 2 = 2 " - stmt, _ = sqlparser.Parse(sql) - whereExpr = stmt.(*sqlparser.Update).Where - currentBatchStart = []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(1)} - currentBatchEnd = []sqltypes.Value{sqltypes.NewInt64(9), sqltypes.NewInt64(9)} - pkInfos = []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}} - batchSQL, finalWhereStr, _ = GenBatchSQL(sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) - expectedBatchSQL = "update t set c = 1 where (1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))" - expectedWhereStr = "(1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))" - assert.Equalf(t, expectedBatchSQL, batchSQL, "GenBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) - assert.Equalf(t, expectedWhereStr, finalWhereStr, "GenBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) - - sql = "update t set c = 1 where 1 = 1 or 2 = 2 " - stmt, _ = sqlparser.Parse(sql) - whereExpr = stmt.(*sqlparser.Update).Where - currentBatchStart = []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(1), sqltypes.NewInt64(1)} - currentBatchEnd = []sqltypes.Value{sqltypes.NewInt64(9), sqltypes.NewInt64(9), sqltypes.NewInt64(9)} - pkInfos = []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}, {pkName: "pk3"}} - batchSQL, finalWhereStr, _ = GenBatchSQL(sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) - expectedBatchSQL = "update t set c = 1 where (1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 > 1 or pk1 = 1 and pk2 = 1 and pk3 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 < 9 or pk1 = 9 and pk2 = 9 and pk3 <= 9))" - expectedWhereStr = "(1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 > 1 or pk1 = 1 and pk2 = 1 and pk3 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 < 9 or pk1 = 9 and pk2 = 9 and pk3 <= 9))" - assert.Equalf(t, expectedBatchSQL, batchSQL, "GenBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) - assert.Equalf(t, expectedWhereStr, finalWhereStr, "GenBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) -} - -//func TestGenCountSQL_old(t *testing.T) { -// type args struct { -// tableSchema string -// tableName string -// wherePart string -// currentBatchStart []sqltypes.Value -// currentBatchEnd []sqltypes.Value -// pkInfos []PKInfo -// } -// tests := []struct { -// name string -// args args -// want string -// }{ -// { -// name: "test_db", -// args: args{ -// tableSchema: "test_db", -// tableName: "test_table", -// wherePart: "id = 1", -// currentBatchStart: []sqltypes.Value{sqltypes.NewInt64(1)}, -// currentBatchEnd: []sqltypes.Value{sqltypes.NewInt64(9)}, -// pkInfos: []PKInfo{{pkName: "pk1"}}, -// }, -// want: "select count(*) as count_rows from test_db.test_table where (id = 1) and (((pk1 >= 1)) and ((pk1 <= 9)))", -// }, -// { -// name: "test_db", -// args: args{ -// tableSchema: "test_db", -// tableName: "test_table", -// wherePart: "id = 1", -// currentBatchStart: []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(1)}, -// currentBatchEnd: []sqltypes.Value{sqltypes.NewInt64(9), sqltypes.NewInt64(9)}, -// pkInfos: []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}}, -// }, -// want: "select count(*) as count_rows from test_db.test_table where (id = 1) and (((pk1 > 1) or (pk1 = 1 and pk2 >= 1)) and ((pk1 < 9) or (pk1 = 9 and pk2 <= 9)))", -// }, -// } -// for _, tt := range tests { -// t.Run(tt.name, func(t *testing.T) { -// got, _ := GenCountSQL(tt.args.tableSchema, tt.args.tableName, tt.args.wherePart, tt.args.currentBatchStart, tt.args.currentBatchEnd, tt.args.pkInfos) -// assert.Equalf(t, tt.want, got, "GenCountSQL(%v,%v,%v,%v,%v,%v)", tt.args.tableSchema, tt.args.tableName, tt.args.wherePart, tt.args.currentBatchStart, tt.args.currentBatchEnd, tt.args.pkInfos) -// }) -// } -//} diff --git a/go/vt/vttablet/jobcontroller/sql_related.go b/go/vt/vttablet/jobcontroller/sql_related.go new file mode 100644 index 0000000000..e56926d5a4 --- /dev/null +++ b/go/vt/vttablet/jobcontroller/sql_related.go @@ -0,0 +1,213 @@ +/* +Copyright ApeCloud, Inc. +Licensed under the Apache v2(found in the LICENSE file in the root directory). +*/ + +package jobcontroller + +import ( + "errors" + "fmt" + + "vitess.io/vitess/go/sqltypes" + "vitess.io/vitess/go/vt/sqlparser" +) + +func genPKsGreaterEqualOrLessEqualStr(pkInfos []PKInfo, currentBatchStart []sqltypes.Value, greatEqual bool) (string, error) { + buf := sqlparser.NewTrackedBuffer(nil) + prefix := "" + // This loop handles the case for composite pks. For example, + // if lastpk was (1,2), and the greatEqual is true, then clause would be: + // (col1 > 1) or (col1 = 1 and col2 >= 2). + for curCol := 0; curCol <= len(pkInfos)-1; curCol++ { + buf.Myprintf("%s(", prefix) + prefix = " or " + for i, pk := range currentBatchStart[:curCol] { + buf.Myprintf("%s = ", pkInfos[i].pkName) + pk.EncodeSQL(buf) + buf.Myprintf(" and ") + } + if curCol == len(pkInfos)-1 { + if greatEqual { + buf.Myprintf("%s >= ", pkInfos[curCol].pkName) + } else { + buf.Myprintf("%s <= ", pkInfos[curCol].pkName) + } + } else { + if greatEqual { + buf.Myprintf("%s > ", pkInfos[curCol].pkName) + } else { + buf.Myprintf("%s < ", pkInfos[curCol].pkName) + } + } + currentBatchStart[curCol].EncodeSQL(buf) + buf.Myprintf(")") + } + return buf.String(), nil +} + +func genPKConditionExprByStr(greatThanPart, lessThanPart string) (sqlparser.Expr, error) { + tmpSQL := fmt.Sprintf("select 1 where (%s) AND (%s)", greatThanPart, lessThanPart) + tmpStmt, err := sqlparser.Parse(tmpSQL) + if err != nil { + return nil, err + } + tmpStmtSelect, ok := tmpStmt.(*sqlparser.Select) + if !ok { + return nil, errors.New("genPKConditionExprByStr: tmpStmt is not *sqlparser.Select") + } + return tmpStmtSelect.Where.Expr, nil +} + +func genSQLByReplaceWhereExprNode(stmt sqlparser.Statement, whereExpr sqlparser.Where) string { + switch s := stmt.(type) { + case *sqlparser.Update: + s.Where = &whereExpr + return sqlparser.String(s) + case *sqlparser.Delete: + s.Where = &whereExpr + return sqlparser.String(s) + case *sqlparser.Select: + // 针对batchCountSQL + s.Where = &whereExpr + return sqlparser.String(s) + default: + // the code won't reach here + return "" + } +} + +// todo newborn22 对参数进行调整 +func genBatchSQL(sql string, stmt sqlparser.Statement, whereExpr sqlparser.Expr, currentBatchStart, currentBatchEnd []sqltypes.Value, pkInfos []PKInfo) (batchSQL, finalWhereStr string, err error) { + // 1. 生成>=的部分 + greatThanPart, err := genPKsGreaterEqualOrLessEqualStr(pkInfos, currentBatchStart, true) + if err != nil { + return "", "", err + } + + // 2.生成<=的部分 + lessThanPart, err := genPKsGreaterEqualOrLessEqualStr(pkInfos, currentBatchEnd, false) + if err != nil { + return "", "", err + } + + // 3.将pk>= and pk <= 拼接起来并生成相应的condition expr ast node + pkConditionExpr, err := genPKConditionExprByStr(greatThanPart, lessThanPart) + if err != nil { + return "", "", err + } + + // 4.将原本sql stmt中的where expr ast node用AND拼接上pkConditionExpr,作为batchSQL的where expr ast node + // 4.1先生成新的condition ast node + andExpr := sqlparser.Where{Expr: &sqlparser.AndExpr{Left: whereExpr, Right: pkConditionExpr}} + batchSQL = genSQLByReplaceWhereExprNode(stmt, andExpr) + finalWhereStr = sqlparser.String(andExpr.Expr) + + return batchSQL, finalWhereStr, nil +} + +// todo newborn22 batchSQL和batchCountSQL对浮点数进行拦截,可能在获得pkInfo时就进行拦截。 +// 拆分列所支持的类型需要满足以下条件: +// 1.在sql中可以正确地使用between或>=,<=进行比较运算,且没有精度问题。 +// 2.可以转换成go中的int64,float64或string三种类型之一,且转换后,在golang中的比较规则和mysql中的比较规则相同 +func genCountSQL(tableSchema, tableName, whereExpr string) (countSQL string) { + countSQL = fmt.Sprintf("select count(*) as count_rows from %s.%s where %s)", + tableSchema, tableName, whereExpr) + return countSQL +} + +func genBatchStartAndEndStr(currentBatchStart, currentBatchEnd []sqltypes.Value) (currentBatchStartStr string, currentBatchStartEnd string, err error) { + prefix := "" + for i := range currentBatchStart { + prefix = "," + currentBatchStartStr += prefix + currentBatchStart[i].ToString() + currentBatchStartEnd += prefix + currentBatchEnd[i].ToString() + } + return currentBatchStartStr, currentBatchStartEnd, nil +} + +func genExprNodeFromStr(condition string) (sqlparser.Expr, error) { + tmpSQL := fmt.Sprintf("select 1 where %s", condition) + tmpStmt, err := sqlparser.Parse(tmpSQL) + if err != nil { + return nil, err + } + tmpStmtSelect, _ := tmpStmt.(*sqlparser.Select) + return tmpStmtSelect.Where.Expr, nil +} +func getBatchSQLGreatThanAndLessThanExprNode(stmt sqlparser.Statement) (greatThanExpr sqlparser.Expr, lessThanExpr sqlparser.Expr) { + switch s := stmt.(type) { + case *sqlparser.Update: + // the type switch will be ok + andExpr, _ := s.Where.Expr.(*sqlparser.AndExpr) + pkConditionExpr, _ := andExpr.Right.(*sqlparser.AndExpr) + greatThanExpr = pkConditionExpr.Left + lessThanExpr = pkConditionExpr.Right + return greatThanExpr, lessThanExpr + case *sqlparser.Delete: + // the type switch will be ok + andExpr, _ := s.Where.Expr.(*sqlparser.AndExpr) + pkConditionExpr, _ := andExpr.Right.(*sqlparser.AndExpr) + greatThanExpr = pkConditionExpr.Left + lessThanExpr = pkConditionExpr.Right + return greatThanExpr, lessThanExpr + } + // the code won't reach here + return nil, nil +} + +func getUserWhereExpr(stmt sqlparser.Statement) (expr sqlparser.Expr) { + switch s := stmt.(type) { + case *sqlparser.Update: + tempAndExpr, _ := s.Where.Expr.(*sqlparser.AndExpr) + expr = tempAndExpr.Left + return expr + case *sqlparser.Delete: + tempAndExpr, _ := s.Where.Expr.(*sqlparser.AndExpr) + expr = tempAndExpr.Left + return expr + default: + // the code won't reach here + return nil + } +} + +func genNewBatchSQLsAndCountSQLsWhenSplittingBatch(batchSQLStmt, batchCountSQLStmt sqlparser.Statement, curBatchNewEnd, newBatchStart []sqltypes.Value, pkInfos []PKInfo) (curBatchSQL, newBatchSQL, newBatchCountSQL string, err error) { + // 1) 将curBatchNewEnd和newBatchStart转换成<=和>=的字符串,然后将字符串转成expr ast node + curBatchLessThanPart, err := genPKsGreaterEqualOrLessEqualStr(pkInfos, curBatchNewEnd, false) + if err != nil { + return "", "", "", err + } + curBatchLessThanExpr, err := genExprNodeFromStr(curBatchLessThanPart) + if err != nil { + return "", "", "", err + } + + newBatchGreatThanPart, err := genPKsGreaterEqualOrLessEqualStr(pkInfos, newBatchStart, true) + if err != nil { + return "", "", "", err + } + newBatchGreatThanExpr, err := genExprNodeFromStr(newBatchGreatThanPart) + if err != nil { + return "", "", "", err + } + + // 2) 通过parser,获得原先batchSQL的greatThan和lessThan的expr ast node + curBatchGreatThanExpr, newBatchLessThanExpr := getBatchSQLGreatThanAndLessThanExprNode(batchSQLStmt) + + // 3) 生成拆batchSQL和batchCountSQL + // 3.1) 先构建curBatchSQL和newBatchSQL的where expr ast node:将用户输入的where expr与上PK Condition Expr + userWhereExpr := getUserWhereExpr(batchSQLStmt) + curBatchPKConditionExpr := sqlparser.AndExpr{Left: curBatchGreatThanExpr, Right: curBatchLessThanExpr} + newBatchPKConditionExpr := sqlparser.AndExpr{Left: newBatchGreatThanExpr, Right: newBatchLessThanExpr} + curBatchWhereExpr := sqlparser.Where{Expr: &sqlparser.AndExpr{Left: userWhereExpr, Right: &curBatchPKConditionExpr}} + newBatchWhereExpr := sqlparser.Where{Expr: &sqlparser.AndExpr{Left: userWhereExpr, Right: &newBatchPKConditionExpr}} + + // 3.2) 替换原先batchSQL的where expr来生成batchSQL + curBatchSQL = genSQLByReplaceWhereExprNode(batchSQLStmt, curBatchWhereExpr) + newBatchSQL = genSQLByReplaceWhereExprNode(batchSQLStmt, newBatchWhereExpr) + + // 3.3) 同理生成batchCountSQL + newBatchCountSQL = genSQLByReplaceWhereExprNode(batchCountSQLStmt, newBatchWhereExpr) + return curBatchSQL, newBatchSQL, newBatchCountSQL, nil +} diff --git a/go/vt/vttablet/jobcontroller/sql_related_test.go b/go/vt/vttablet/jobcontroller/sql_related_test.go new file mode 100644 index 0000000000..5b80c604b7 --- /dev/null +++ b/go/vt/vttablet/jobcontroller/sql_related_test.go @@ -0,0 +1,217 @@ +/* +Copyright ApeCloud, Inc. +Licensed under the Apache v2(found in the LICENSE file in the root directory). +*/ + +package jobcontroller + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/assert" + + "vitess.io/vitess/go/sqltypes" + "vitess.io/vitess/go/vt/sqlparser" +) + +func TestGenPKsGreaterEqualOrLessEqual(t *testing.T) { + type args struct { + pkInfos []PKInfo + currentBatchStart []sqltypes.Value + greatEqual bool + } + tests := []struct { + name string + args args + want string + }{ + { + name: "Test genPKsGreaterEqualOrLessEqualStr, Single Int", + args: args{ + pkInfos: []PKInfo{ + {pkName: "a"}, + }, + currentBatchStart: []sqltypes.Value{sqltypes.NewInt64(1)}, + greatEqual: true, + }, + want: "(a >= 1)", + }, + { + name: "Test genPKsGreaterEqualOrLessEqualStr, Two INTs", + args: args{ + pkInfos: []PKInfo{ + {pkName: "a"}, + {pkName: "b"}, + }, + currentBatchStart: []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(2)}, + greatEqual: true, + }, + want: "(a > 1) or (a = 1 and b >= 2)", + }, + { + name: "Test genPKsGreaterEqualOrLessEqualStr, One INT With One String", + args: args{ + pkInfos: []PKInfo{ + {pkName: "a"}, + {pkName: "b"}, + }, + currentBatchStart: []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewTimestamp("1704630977")}, + greatEqual: false, + }, + want: "(a < 1) or (a = 1 and b <= '1704630977')", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, _ := genPKsGreaterEqualOrLessEqualStr(tt.args.pkInfos, tt.args.currentBatchStart, tt.args.greatEqual) + assert.Equalf(t, tt.want, got, "genPKsGreaterEqualOrLessEqualStr(%v, %v, %v)", tt.args.pkInfos, tt.args.currentBatchStart, tt.args.greatEqual) + }) + } +} + +func TestGenBatchSQL(t *testing.T) { + sql := "update t set c = 1 where 1 = 1 or 2 = 2 and 3 = 3" + stmt, _ := sqlparser.Parse(sql) + whereExpr := stmt.(*sqlparser.Update).Where + currentBatchStart := []sqltypes.Value{sqltypes.NewInt64(1)} + currentBatchEnd := []sqltypes.Value{sqltypes.NewInt64(9)} + pkInfos := []PKInfo{{pkName: "pk1"}} + batchSQL, finalWhereStr, _ := genBatchSQL(sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + expectedBatchSQL := "update t set c = 1 where (1 = 1 or 2 = 2 and 3 = 3) and (pk1 >= 1 and pk1 <= 9)" + expectedWhereStr := "(1 = 1 or 2 = 2 and 3 = 3) and (pk1 >= 1 and pk1 <= 9)" + assert.Equalf(t, expectedBatchSQL, batchSQL, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + assert.Equalf(t, expectedWhereStr, finalWhereStr, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + + sql = "update t set c = 1 where 1 = 1 or 2 = 2 " + stmt, _ = sqlparser.Parse(sql) + whereExpr = stmt.(*sqlparser.Update).Where + currentBatchStart = []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(1)} + currentBatchEnd = []sqltypes.Value{sqltypes.NewInt64(9), sqltypes.NewInt64(9)} + pkInfos = []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}} + batchSQL, finalWhereStr, _ = genBatchSQL(sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + expectedBatchSQL = "update t set c = 1 where (1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))" + expectedWhereStr = "(1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))" + assert.Equalf(t, expectedBatchSQL, batchSQL, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + assert.Equalf(t, expectedWhereStr, finalWhereStr, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + + sql = "update t set c = 1 where 1 = 1 or 2 = 2 " + stmt, _ = sqlparser.Parse(sql) + whereExpr = stmt.(*sqlparser.Update).Where + currentBatchStart = []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(1), sqltypes.NewInt64(1)} + currentBatchEnd = []sqltypes.Value{sqltypes.NewInt64(9), sqltypes.NewInt64(9), sqltypes.NewInt64(9)} + pkInfos = []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}, {pkName: "pk3"}} + batchSQL, finalWhereStr, _ = genBatchSQL(sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + expectedBatchSQL = "update t set c = 1 where (1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 > 1 or pk1 = 1 and pk2 = 1 and pk3 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 < 9 or pk1 = 9 and pk2 = 9 and pk3 <= 9))" + expectedWhereStr = "(1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 > 1 or pk1 = 1 and pk2 = 1 and pk3 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 < 9 or pk1 = 9 and pk2 = 9 and pk3 <= 9))" + assert.Equalf(t, expectedBatchSQL, batchSQL, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + assert.Equalf(t, expectedWhereStr, finalWhereStr, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) +} + +func TestGenNewBatchSQLsAndCountSQLsWhenSplittingBatch(t *testing.T) { + pkInfos := []PKInfo{{pkName: "pk1"}} + whereStr := "where (1 = 1 and 2 = 2) and ((pk1 >= 1) and (pk1 <= 9))" + batchSQL := fmt.Sprintf("update t set c1 = '123' %s", whereStr) + batchCountSQL := fmt.Sprintf("select count(*) from t %s", whereStr) + batchSQLStmt, _ := sqlparser.Parse(batchSQL) + batchCountSQLStmt, _ := sqlparser.Parse(batchCountSQL) + curBatchNewEnd := []sqltypes.Value{sqltypes.NewInt64(5)} + newBatchStart := []sqltypes.Value{sqltypes.NewInt64(7)} + expectedCurBatchSQL := "update t set c1 = '123' where 1 = 1 and 2 = 2 and (pk1 >= 1 and pk1 <= 5)" + expectedNewBatchSQL := "update t set c1 = '123' where 1 = 1 and 2 = 2 and (pk1 >= 7 and pk1 <= 9)" + expectedNewBatchCountSQL := "select count(*) from t where 1 = 1 and 2 = 2 and (pk1 >= 7 and pk1 <= 9)" + curBatchSQL, newBatchSQL, newBatchCountSQL, _ := genNewBatchSQLsAndCountSQLsWhenSplittingBatch(batchSQLStmt, batchCountSQLStmt, curBatchNewEnd, newBatchStart, pkInfos) + assert.Equalf(t, expectedCurBatchSQL, curBatchSQL, "genNewBatchSQLsAndCountSQLsWhenSplittingBatch(%v,%v,%v,%v,%v)", batchSQLStmt, batchCountSQLStmt, curBatchNewEnd, newBatchStart, pkInfos) + assert.Equalf(t, expectedNewBatchSQL, newBatchSQL, "genNewBatchSQLsAndCountSQLsWhenSplittingBatch(%v,%v,%v,%v,%v)", batchSQLStmt, batchCountSQLStmt, curBatchNewEnd, newBatchStart, pkInfos) + assert.Equalf(t, expectedNewBatchCountSQL, newBatchCountSQL, "genNewBatchSQLsAndCountSQLsWhenSplittingBatch(%v,%v,%v,%v,%v)", batchSQLStmt, batchCountSQLStmt, curBatchNewEnd, newBatchStart, pkInfos) + + pkInfos = []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}} + whereStr = "where (1 = 1) and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))" + batchSQL = fmt.Sprintf("update t set c1 = '123' %s", whereStr) + batchCountSQL = fmt.Sprintf("select count(*) from t %s", whereStr) + batchSQLStmt, _ = sqlparser.Parse(batchSQL) + batchCountSQLStmt, _ = sqlparser.Parse(batchCountSQL) + curBatchNewEnd = []sqltypes.Value{sqltypes.NewInt64(5), sqltypes.NewInt64(5)} + newBatchStart = []sqltypes.Value{sqltypes.NewInt64(7), sqltypes.NewInt64(7)} + expectedCurBatchSQL = "update t set c1 = '123' where 1 = 1 and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 5 or pk1 = 5 and pk2 <= 5))" + expectedNewBatchSQL = "update t set c1 = '123' where 1 = 1 and ((pk1 > 7 or pk1 = 7 and pk2 >= 7) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))" + expectedNewBatchCountSQL = "select count(*) from t where 1 = 1 and ((pk1 > 7 or pk1 = 7 and pk2 >= 7) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))" + curBatchSQL, newBatchSQL, newBatchCountSQL, _ = genNewBatchSQLsAndCountSQLsWhenSplittingBatch(batchSQLStmt, batchCountSQLStmt, curBatchNewEnd, newBatchStart, pkInfos) + assert.Equalf(t, expectedCurBatchSQL, curBatchSQL, "genNewBatchSQLsAndCountSQLsWhenSplittingBatch(%v,%v,%v,%v,%v)", batchSQLStmt, batchCountSQLStmt, curBatchNewEnd, newBatchStart, pkInfos) + assert.Equalf(t, expectedNewBatchSQL, newBatchSQL, "genNewBatchSQLsAndCountSQLsWhenSplittingBatch(%v,%v,%v,%v,%v)", batchSQLStmt, batchCountSQLStmt, curBatchNewEnd, newBatchStart, pkInfos) + assert.Equalf(t, expectedNewBatchCountSQL, newBatchCountSQL, "genNewBatchSQLsAndCountSQLsWhenSplittingBatch(%v,%v,%v,%v,%v)", batchSQLStmt, batchCountSQLStmt, curBatchNewEnd, newBatchStart, pkInfos) + +} + +func TestGetUserWhereExpr(t *testing.T) { + sql := "update t set c1 = '123' where 1 = 1 and 2 = 2 and 3 = 3 and (pk1 >= 1 and pk1 <= 9)" + stmt, _ := sqlparser.Parse(sql) + userWhereExpr := getUserWhereExpr(stmt) + userWhereStr := sqlparser.String(userWhereExpr) + expectedUserWhereStr := "1 = 1 and 2 = 2 and 3 = 3" + assert.Equalf(t, expectedUserWhereStr, userWhereStr, "getUserWhereExpr(%v)", stmt) +} + +func TestBatchSQL(t *testing.T) { + userWhereStr := "1 = 1 and 2 = 2" + pkConditionStr := "(pk1 >= 1 and pk1 <= 9)" + // 1. get batchSQL by calling genBatchSQL + sql := fmt.Sprintf("update t set c = 1 where %s", userWhereStr) + stmt, _ := sqlparser.Parse(sql) + whereExpr := stmt.(*sqlparser.Update).Where + currentBatchStart := []sqltypes.Value{sqltypes.NewInt64(1)} + currentBatchEnd := []sqltypes.Value{sqltypes.NewInt64(9)} + pkInfos := []PKInfo{{pkName: "pk1"}} + batchSQL, finalWhereStr, _ := genBatchSQL(sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + // Different from the 1st test case, here we enclose userWhereStr with parentheses because it has "or" operators. + expectedBatchSQL := fmt.Sprintf("update t set c = 1 where (%s) and %s", userWhereStr, pkConditionStr) + expectedWhereStr := fmt.Sprintf("(%s) and %s", userWhereStr, pkConditionStr) + assert.Equalf(t, expectedBatchSQL, batchSQL, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + assert.Equalf(t, expectedWhereStr, finalWhereStr, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + + batchSQLStmt, _ := sqlparser.Parse(batchSQL) + // 2. test getUserWhereExpr base on batchSQ + gotUserWhereExpr := getUserWhereExpr(batchSQLStmt) + gotUserWhereStr := sqlparser.String(gotUserWhereExpr) + expectedUserWhereStr := userWhereStr + assert.Equalf(t, expectedUserWhereStr, gotUserWhereStr, "getUserWhereExpr(%v)", stmt) + + // 3. test getBatchSQLGreatThanAndLessThanExprNode base on batchSQL + gtNode, lsNode := getBatchSQLGreatThanAndLessThanExprNode(batchSQLStmt) + gtStr := sqlparser.String(gtNode) + lsStr := sqlparser.String(lsNode) + expectedGtStr := "pk1 >= 1" + expectedLsStr := "pk1 <= 9" + assert.Equalf(t, expectedGtStr, gtStr, "getBatchSQLGreatThanAndLessThanExprNode(%v)", batchSQLStmt) + assert.Equalf(t, expectedLsStr, lsStr, "getBatchSQLGreatThanAndLessThanExprNode(%v)", batchSQLStmt) + + // repeat the same steps but with different args + userWhereStr = "1 = 1 and 2 = 2 or 3 > 2 and 1 > 3 or 3 > 4 and 1 = 1" + pkConditionStr = "((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))" + sql = fmt.Sprintf("update t set c = 1 where %s", userWhereStr) + stmt, _ = sqlparser.Parse(sql) + whereExpr = stmt.(*sqlparser.Update).Where + currentBatchStart = []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(1)} + currentBatchEnd = []sqltypes.Value{sqltypes.NewInt64(9), sqltypes.NewInt64(9)} + pkInfos = []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}} + batchSQL, finalWhereStr, _ = genBatchSQL(sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + expectedBatchSQL = fmt.Sprintf("update t set c = 1 where %s and %s", userWhereStr, pkConditionStr) + expectedWhereStr = fmt.Sprintf("%s and %s", userWhereStr, pkConditionStr) + assert.Equalf(t, expectedBatchSQL, batchSQL, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + assert.Equalf(t, expectedWhereStr, finalWhereStr, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + batchSQLStmt, _ = sqlparser.Parse(batchSQL) + gotUserWhereExpr = getUserWhereExpr(batchSQLStmt) + gotUserWhereStr = sqlparser.String(gotUserWhereExpr) + expectedUserWhereStr = userWhereStr + assert.Equalf(t, expectedUserWhereStr, gotUserWhereStr, "getUserWhereExpr(%v)", stmt) + + // 3. test getBatchSQLGreatThanAndLessThanExprNode base on batchSQL + gtNode, lsNode = getBatchSQLGreatThanAndLessThanExprNode(batchSQLStmt) + gtStr = sqlparser.String(gtNode) + lsStr = sqlparser.String(lsNode) + expectedGtStr = "pk1 > 1 or pk1 = 1 and pk2 >= 1" + expectedLsStr = "pk1 < 9 or pk1 = 9 and pk2 <= 9" + assert.Equalf(t, expectedGtStr, gtStr, "getBatchSQLGreatThanAndLessThanExprNode(%v)", batchSQLStmt) + assert.Equalf(t, expectedLsStr, lsStr, "getBatchSQLGreatThanAndLessThanExprNode(%v)", batchSQLStmt) + +} From 0519d9dd7fed3b08f4537e30dffdd167595eceae Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Tue, 9 Jan 2024 12:40:10 +0800 Subject: [PATCH 39/54] fix: solve split brain problem; fix bug in genCountSQL Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/vttablet/jobcontroller/controller.go | 52 +++++++++++++++++---- go/vt/vttablet/jobcontroller/sql_related.go | 4 +- go/vt/vttablet/jobcontroller/sqls.go | 2 + 3 files changed, 47 insertions(+), 11 deletions(-) diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index db606580a8..b340a6a7af 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -556,6 +556,10 @@ func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { defer timer.Stop() for { + // 防止vttablet不再是primary时该协程继续执行 + if jc.tabletTypeFunc() != topodatapb.TabletType_PRIMARY { + return + } select { case <-timer.C: case <-jc.schedulerNotifyChan: @@ -728,8 +732,7 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta } // 2.查询batch sql预计影响的行数,如果超过阈值,则生成新的batch ID - batchCountSQLForShare := batchCountSQL + " FOR SHARE" - // todo 检查batch status是否为completed,脑裂问题 + batchCountSQLForShare := batchCountSQL + " FOR UPDATE" qr, err := conn.Exec(ctx, batchCountSQLForShare, math.MaxInt32, true) if err != nil { return err @@ -738,6 +741,34 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta return errors.New("the len of qr of count expected batch size is not 1") } expectedRow, _ := qr.Named().Rows[0].ToInt64("count_rows") + + // 检查batch status是否为completed,防止vttablet脑裂问题导致一个batch被多次执行 + sqlGetBatchStatus := fmt.Sprintf(sqlTemplateGetBatchStatus, batchTable) + queryGetBatchStatus, err := sqlparser.ParseAndBind(sqlGetBatchStatus, sqltypes.StringBindVariable(batchID)) + if err != nil { + return err + } + qr, err = conn.Exec(ctx, queryGetBatchStatus, math.MaxInt32, true) + if err != nil { + return err + } + if len(qr.Named().Rows) != 1 { + return errors.New("the len of qr of count expected batch size is not 1") + } + batchStatus, _ := qr.Named().Rows[0].ToString("batch_status") + if batchStatus == completedStatus { + return nil + } + + // 将batchID信息记录在系统表中便于用户查看 + queryUpdateDealingBatchID, err := sqlparser.ParseAndBind(sqlUpdateDealingBatchID, + sqltypes.StringBindVariable(batchID), + sqltypes.StringBindVariable(uuid)) + _, err = conn.Exec(ctx, queryUpdateDealingBatchID, math.MaxInt32, false) + if err != nil { + return err + } + //batchSize = 30 if expectedRow > batchSize { batchSQL, err = jc.splitBatchIntoTwo(ctx, tableSchema, table, batchTable, batchSQL, batchCountSQL, batchID, conn, batchSize, expectedRow) @@ -930,6 +961,11 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, // 在一个无限循环中等待定时器触发 for range timer.C { + // 防止vttablet不再是primary时该协程继续执行 + if jc.tabletTypeFunc() != topodatapb.TabletType_PRIMARY { + return + } + // 定时器触发时执行的函数 // 检查状态是否为running,可能为paused/canceled status, err := jc.GetStrJobInfo(ctx, uuid, "status") @@ -942,6 +978,7 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, } // 检查是否在运维窗口内 + // todo,增加时区支持,以及是否可能由于脑裂问题导致错误fail掉job? if timePeriodStart != nil && timePeriodEnd != nil { currentTime := time.Now() if !(currentTime.After(*timePeriodStart) && currentTime.Before(*timePeriodEnd)) { @@ -973,13 +1010,6 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, return } - // 将batchID信息记录在系统表中便于用户查看 - err = jc.updateDealingBatchID(ctx, uuid, batchIDToExec) - if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) - return - } - batchSQL, batchCountSQL, err := jc.getBatchSQLsByID(ctx, batchIDToExec, batchTable, tableSchema) if err != nil { jc.FailJob(ctx, uuid, err.Error(), table) @@ -1303,6 +1333,10 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { defer timer.Stop() for range timer.C { + // 防止vttablet不再是primary时该协程继续执行 + if jc.tabletTypeFunc() != topodatapb.TabletType_PRIMARY { + return + } // todo, 增加对长时间未增加 rows的处理 jc.tableMutex.Lock() qr, _ := jc.execQuery(ctx, "", sqlDMLJobGetAllJobs) diff --git a/go/vt/vttablet/jobcontroller/sql_related.go b/go/vt/vttablet/jobcontroller/sql_related.go index e56926d5a4..c39847a254 100644 --- a/go/vt/vttablet/jobcontroller/sql_related.go +++ b/go/vt/vttablet/jobcontroller/sql_related.go @@ -111,7 +111,7 @@ func genBatchSQL(sql string, stmt sqlparser.Statement, whereExpr sqlparser.Expr, // 1.在sql中可以正确地使用between或>=,<=进行比较运算,且没有精度问题。 // 2.可以转换成go中的int64,float64或string三种类型之一,且转换后,在golang中的比较规则和mysql中的比较规则相同 func genCountSQL(tableSchema, tableName, whereExpr string) (countSQL string) { - countSQL = fmt.Sprintf("select count(*) as count_rows from %s.%s where %s)", + countSQL = fmt.Sprintf("select count(*) as count_rows from %s.%s where %s", tableSchema, tableName, whereExpr) return countSQL } @@ -119,9 +119,9 @@ func genCountSQL(tableSchema, tableName, whereExpr string) (countSQL string) { func genBatchStartAndEndStr(currentBatchStart, currentBatchEnd []sqltypes.Value) (currentBatchStartStr string, currentBatchStartEnd string, err error) { prefix := "" for i := range currentBatchStart { - prefix = "," currentBatchStartStr += prefix + currentBatchStart[i].ToString() currentBatchStartEnd += prefix + currentBatchEnd[i].ToString() + prefix = "," } return currentBatchStartStr, currentBatchStartEnd, nil } diff --git a/go/vt/vttablet/jobcontroller/sqls.go b/go/vt/vttablet/jobcontroller/sqls.go index 7412b98fcd..42da7b3686 100644 --- a/go/vt/vttablet/jobcontroller/sqls.go +++ b/go/vt/vttablet/jobcontroller/sqls.go @@ -112,6 +112,8 @@ const ( sqlTemplateGetBatchIDToExec = `SELECT batch_id FROM %s where batch_status = 'queued' order by CAST(SUBSTRING_INDEX(batch_id, '-', 1) AS SIGNED),id limit 1` + sqlTemplateGetBatchStatus = `SELECT batch_status FROM %s where batch_id=%%a` + sqlTemplateInsertBatchEntry = ` insert into %s ( batch_id, batch_sql, From e9c0412f7607ffbddfdb90a29ae98c09858d9ffc Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Tue, 9 Jan 2024 20:08:15 +0800 Subject: [PATCH 40/54] fix:add failpoints; divide code into files; batchID start from x-2; declare unsupported PK type; fix failpolicy bugs Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/failpointkey/failpoint_keys.go | 12 + go/vt/sqlparser/comments.go | 12 +- go/vt/vtgate/planbuilder/show.go | 2 +- .../{sql_related.go => batch_sql_related.go} | 0 ...ated_test.go => batch_sql_related_test.go} | 35 ++ go/vt/vttablet/jobcontroller/controller.go | 582 ++---------------- .../jobcontroller/running_period_time.go | 63 ++ go/vt/vttablet/jobcontroller/throttle.go | 123 ++++ go/vt/vttablet/jobcontroller/util.go | 353 +++++++++++ 9 files changed, 656 insertions(+), 526 deletions(-) rename go/vt/vttablet/jobcontroller/{sql_related.go => batch_sql_related.go} (100%) rename go/vt/vttablet/jobcontroller/{sql_related_test.go => batch_sql_related_test.go} (92%) create mode 100644 go/vt/vttablet/jobcontroller/running_period_time.go create mode 100644 go/vt/vttablet/jobcontroller/throttle.go create mode 100644 go/vt/vttablet/jobcontroller/util.go diff --git a/go/vt/failpointkey/failpoint_keys.go b/go/vt/failpointkey/failpoint_keys.go index ca7fbecfe1..9798f195af 100644 --- a/go/vt/failpointkey/failpoint_keys.go +++ b/go/vt/failpointkey/failpoint_keys.go @@ -46,6 +46,16 @@ var ( Name: "AssertRoutingTabletType", ExampleStr: "return(\"primary\")", } + ModifyBatchSize = FailpointValue{ + FullName: "vitess.io/vitess/go/vt/vttablet/jobcontroller/ModifyBatchSize", + Name: "ModifyBatchSize", + ExampleStr: "return(30)", + } + CreateErrorWhenExecutingBatch = FailpointValue{ + FullName: "vitess.io/vitess/go/vt/vttablet/jobcontroller/CreateErrorWhenExecutingBatch", + Name: "CreateErrorWhenExecutingBatch", + ExampleStr: "return(true)", + } ) func init() { @@ -60,4 +70,6 @@ func init() { FailpointTable[WaitJustBeforeStopVreplication.FullName] = WaitJustBeforeStopVreplication FailpointTable[WaitJustAfterStopVreplication.FullName] = WaitJustAfterStopVreplication FailpointTable[AssertRoutingTabletType.FullName] = AssertRoutingTabletType + FailpointTable[ModifyBatchSize.FullName] = ModifyBatchSize + FailpointTable[CreateErrorWhenExecutingBatch.FullName] = CreateErrorWhenExecutingBatch } diff --git a/go/vt/sqlparser/comments.go b/go/vt/sqlparser/comments.go index 961b6b9ec2..40f0d3c8c7 100644 --- a/go/vt/sqlparser/comments.go +++ b/go/vt/sqlparser/comments.go @@ -62,7 +62,7 @@ const ( DirectiveDMLTimeGap = "DML_TIME_GAP" DirectiveBATCHSIZE = "DML_BATCH_SIZE" DirectiveDMLPostponeLaunch = "DML_POSTPONE_LAUNCH" - DirectiveDMLAutoRetry = "DML_AUTO_RETRY" + DirectiveDMLAutoRetry = "DML_FAIL_POLICY" DirectiveDMLTimePeriodStart = "DML_TIME_PERIOD_START" DirectiveDMLTimePeriodEnd = "DML_TIME_PERIOD_END" ) @@ -197,6 +197,7 @@ func StripLeadingComments(sql string) string { func StripComments(sql string) string { var output strings.Builder inComment := false + lastByte := "" for i := 0; i < len(sql); i++ { if !inComment && i+1 < len(sql) && sql[i:i+2] == "/*" { @@ -207,12 +208,19 @@ func StripComments(sql string) string { if inComment && i+1 < len(sql) && sql[i:i+2] == "*/" { inComment = false + if lastByte != " " { + output.WriteByte(' ') + lastByte = " " + } i++ continue } if !inComment { - output.WriteByte(sql[i]) + if lastByte != " " || string(sql[i]) != " " { + output.WriteByte(sql[i]) + lastByte = string(sql[i]) + } } } return output.String() diff --git a/go/vt/vtgate/planbuilder/show.go b/go/vt/vtgate/planbuilder/show.go index f1eaad38b1..b00e249599 100644 --- a/go/vt/vtgate/planbuilder/show.go +++ b/go/vt/vtgate/planbuilder/show.go @@ -205,7 +205,7 @@ func buildShowDMLJobPlan(show *sqlparser.ShowDMLJob, vschema plancontext.VSchema } } else { UUID := strings.Replace(show.UUID, "-", "_", -1) - sql = fmt.Sprintf("SELECT * FROM batch_info_table_%s order by CAST(SUBSTRING_INDEX(batch_id, '-', 1) AS SIGNED),id", UUID) + sql = fmt.Sprintf("SELECT * FROM _vt_BATCH_%s order by CAST(SUBSTRING_INDEX(batch_id, '-', 1) AS SIGNED),id", UUID) } return &engine.Send{ diff --git a/go/vt/vttablet/jobcontroller/sql_related.go b/go/vt/vttablet/jobcontroller/batch_sql_related.go similarity index 100% rename from go/vt/vttablet/jobcontroller/sql_related.go rename to go/vt/vttablet/jobcontroller/batch_sql_related.go diff --git a/go/vt/vttablet/jobcontroller/sql_related_test.go b/go/vt/vttablet/jobcontroller/batch_sql_related_test.go similarity index 92% rename from go/vt/vttablet/jobcontroller/sql_related_test.go rename to go/vt/vttablet/jobcontroller/batch_sql_related_test.go index 5b80c604b7..5f8065b99b 100644 --- a/go/vt/vttablet/jobcontroller/sql_related_test.go +++ b/go/vt/vttablet/jobcontroller/batch_sql_related_test.go @@ -215,3 +215,38 @@ func TestBatchSQL(t *testing.T) { assert.Equalf(t, expectedLsStr, lsStr, "getBatchSQLGreatThanAndLessThanExprNode(%v)", batchSQLStmt) } + +func TestStripComments(t *testing.T) { + tests := []struct { + name string + sql string + want string + }{ + { + name: "TestStripComments-Test1", + sql: "select * from t1 where 1 = 1 /* comment */ and 2 = 2", + want: "select * from t1 where 1 = 1 and 2 = 2", + }, + { + name: "TestStripComments-Test2", + sql: "select/* comment */ * from t1 where 1 = 1 and 2 = 2", + want: "select * from t1 where 1 = 1 and 2 = 2", + }, + { + name: "TestStripComments-Test3", + sql: "update/*vt+ dml_split=true */your_table set name='brainsplit' where 1=1;", + want: "update your_table set name='brainsplit' where 1=1;", + }, + { + name: "TestStripComments-Test3", + sql: "update /*vt+ dml_split=true */ your_table set name='brainsplit' where 1=1;", + want: "update your_table set name='brainsplit' where 1=1;", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := sqlparser.StripComments(tt.sql) + assert.Equalf(t, tt.want, got, "stripComments(%v)", tt.sql) + }) + } +} diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index b340a6a7af..fb0ee2e997 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -10,22 +10,20 @@ import ( "errors" "fmt" "math" - "net/http" - "strconv" "strings" "sync" - "sync/atomic" "time" + "github.com/pingcap/failpoint" + + "vitess.io/vitess/go/vt/failpointkey" + "vitess.io/vitess/go/vt/log" - vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" - "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/vttablet/tabletserver/throttle" "vitess.io/vitess/go/vt/schema" - "vitess.io/vitess/go/mysql/collations" "vitess.io/vitess/go/pools" "vitess.io/vitess/go/sqltypes" querypb "vitess.io/vitess/go/vt/proto/query" @@ -108,7 +106,6 @@ type JobController struct { schedulerNotifyChan chan struct{} // jobScheduler每隔一段时间运行一次调度。但当它收到这个chan的消息后,会立刻开始一次调度 } -// todo newborn22 删除pktype? type PKInfo struct { pkName string pkType querypb.Type @@ -196,16 +193,14 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run } // 取用户输入的batchSize和程序的threshold的最小值作为每个batch最终的batchSize var batchSize int64 - if userBatchSize < batchSizeThreshold { batchSize = userBatchSize } else { batchSize = batchSizeThreshold } - + // 创建batchInfo表 tableName, batchInfoTable, batchSize, err := jc.createJobBatches(jobUUID, sql, tableSchema, batchSize) batchInfoTableSchema := tableSchema - if err != nil { return &sqltypes.Result{}, err } @@ -269,29 +264,17 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run return jc.buildJobSubmitResult(jobUUID, batchInfoTable, timeGapInMs, userBatchSize, postponeLaunch, failPolicy), nil } -func (jc *JobController) buildJobSubmitResult(jobUUID, jobBatchTable string, timeGap, subtaskRows int64, postponeLaunch bool, failPolicy string) *sqltypes.Result { - var rows []sqltypes.Row - row := buildVarCharRow(jobUUID, jobBatchTable, strconv.FormatInt(timeGap, 10), strconv.FormatInt(subtaskRows, 10), failPolicy, strconv.FormatBool(postponeLaunch)) - rows = append(rows, row) - submitRst := &sqltypes.Result{ - Fields: buildVarCharFields("job_uuid", "batch_info_table_name", "time_gap_in_ms", "batch_size", "fail_policy", "postpone_launch"), - Rows: rows, - RowsAffected: 1, - } - return submitRst -} - // 和cancel的区别:1.pasue不会删除元数据 2.cancel状态的job在经过一段时间后会被后台协程回收 // 和cancel的相同点:都停止了runner协程 func (jc *JobController) PauseJob(uuid string) (*sqltypes.Result, error) { var emptyResult = &sqltypes.Result{} ctx := context.Background() - status, err := jc.GetStrJobInfo(ctx, uuid, "status") + status, err := jc.getStrJobInfo(ctx, uuid, "status") if err != nil { return emptyResult, err } if status != runningStatus { - // todo,将info写回给vtgate,目前还不生效 + // todo,feat 将info写回给vtgate,目前还不生效 emptyResult.Info = " The job status is not running and can't be paused" return emptyResult, nil } @@ -309,7 +292,7 @@ func (jc *JobController) PauseJob(uuid string) (*sqltypes.Result, error) { func (jc *JobController) ResumeJob(uuid string) (*sqltypes.Result, error) { var emptyResult = &sqltypes.Result{} ctx := context.Background() - status, err := jc.GetStrJobInfo(ctx, uuid, "status") + status, err := jc.getStrJobInfo(ctx, uuid, "status") if err != nil { return emptyResult, err } @@ -348,41 +331,10 @@ func (jc *JobController) ResumeJob(uuid string) (*sqltypes.Result, error) { return emptyResult, nil } -func (jc *JobController) SetRunningTimePeriod(uuid, startTime, endTime string) (*sqltypes.Result, error) { - var emptyResult = &sqltypes.Result{} - ctx := context.Background() - - // 如果两个时间只有一个为空,则报错 - if (startTime == "" && endTime != "") || (startTime != "" && endTime == "") { - return emptyResult, errors.New("the start time and end time must be both set or not") - } - - status, err := jc.GetStrJobInfo(ctx, uuid, "status") - if err != nil { - return emptyResult, err - } - if status == runningStatus { - return emptyResult, errors.New("the job is running now, pause it first") - } - // 提交的时间段必须满足特定的格式,可以成功转换成time对象 - if startTime != "" && endTime != "" { - _, err = time.Parse(time.TimeOnly, startTime) - if err != nil { - return emptyResult, errors.New("the start time is in error format, it should be like HH:MM:SS") - } - _, err = time.Parse(time.TimeOnly, endTime) - if err != nil { - return emptyResult, errors.New("the start time is in error format, it should be like HH:MM:SS") - } - } - // 往表中插入 - return jc.updateJobPeriodTime(ctx, uuid, startTime, endTime) -} - func (jc *JobController) LaunchJob(uuid string) (*sqltypes.Result, error) { var emptyResult = &sqltypes.Result{} ctx := context.Background() - status, err := jc.GetStrJobInfo(ctx, uuid, "status") + status, err := jc.getStrJobInfo(ctx, uuid, "status") if err != nil { return emptyResult, err } @@ -397,7 +349,7 @@ func (jc *JobController) LaunchJob(uuid string) (*sqltypes.Result, error) { func (jc *JobController) CancelJob(uuid string) (*sqltypes.Result, error) { var emptyResult = &sqltypes.Result{} ctx := context.Background() - status, err := jc.GetStrJobInfo(ctx, uuid, "status") + status, err := jc.getStrJobInfo(ctx, uuid, "status") if err != nil { return emptyResult, nil } @@ -411,7 +363,7 @@ func (jc *JobController) CancelJob(uuid string) (*sqltypes.Result, error) { return emptyResult, nil } - tableName, _ := jc.GetStrJobInfo(ctx, uuid, "table_name") + tableName, _ := jc.getStrJobInfo(ctx, uuid, "table_name") // 相比于pause,cancel需要删除内存中的元数据 jc.deleteDMLJobRunningMeta(uuid, tableName) @@ -421,108 +373,6 @@ func (jc *JobController) CancelJob(uuid string) (*sqltypes.Result, error) { return qr, nil } -// 指定throttle的时长和ratio -// ratio表示限流的比例,最大为1,即完全限流 -// 时长的格式举例: -// "300ms" 表示 300 毫秒。 -// "-1.5h" 表示负1.5小时。 -// "2h45m" 表示2小时45分钟。 -func (jc *JobController) ThrottleJob(uuid, expireString string, ratioLiteral *sqlparser.Literal) (result *sqltypes.Result, err error) { - emptyResult := &sqltypes.Result{} - duration, ratio, err := jc.validateThrottleParams(expireString, ratioLiteral) - if err != nil { - return nil, err - } - if err := jc.lagThrottler.CheckIsReady(); err != nil { - return nil, err - } - expireAt := time.Now().Add(duration) - _ = jc.lagThrottler.ThrottleApp(uuid, expireAt, ratio) - - query, err := sqlparser.ParseAndBind(sqlDMLJobUpdateThrottleInfo, - sqltypes.Float64BindVariable(ratio), - sqltypes.StringBindVariable(expireAt.String()), - sqltypes.StringBindVariable(uuid)) - if err != nil { - return emptyResult, err - } - ctx := context.Background() - jc.tableMutex.Lock() - defer jc.tableMutex.Unlock() - return jc.execQuery(ctx, "", query) -} - -func (jc *JobController) UnthrottleJob(uuid string) (result *sqltypes.Result, err error) { - emptyResult := &sqltypes.Result{} - if err := jc.lagThrottler.CheckIsReady(); err != nil { - return nil, err - } - _ = jc.lagThrottler.UnthrottleApp(uuid) - - query, err := sqlparser.ParseAndBind(sqlDMLJobClearThrottleInfo, - sqltypes.StringBindVariable(uuid)) - if err != nil { - return emptyResult, err - } - ctx := context.Background() - jc.tableMutex.Lock() - defer jc.tableMutex.Unlock() - return jc.execQuery(ctx, "", query) -} - -var throttleTicks int64 -var throttleInit sync.Once - -func initThrottleTicker() { - throttleInit.Do(func() { - go func() { - tick := time.NewTicker(throttleCheckInterval) - defer tick.Stop() - for range tick.C { - atomic.AddInt64(&throttleTicks, 1) - } - }() - }) -} - -func (jc *JobController) requestThrottle(uuid string) (throttleCheckOK bool) { - if jc.lastSuccessfulThrottle >= atomic.LoadInt64(&throttleTicks) { - // if last check was OK just very recently there is no need to check again - return true - } - ctx := context.Background() - // 请求时给每一个throttle的app名都加上了dml-job前缀,这样可以通过throttle dml-job来throttle所有的dml jobs - appName := "dml-job:" + uuid - // 这里不特别设置flag - throttleCheckFlags := &throttle.CheckFlags{} - // 由于dml job子任务需要同步到集群中的各个从节点,因此throttle也依据的是集群的复制延迟 - checkType := throttle.ThrottleCheckPrimaryWrite - checkRst := jc.lagThrottler.CheckByType(ctx, appName, "", throttleCheckFlags, checkType) - if checkRst.StatusCode != http.StatusOK { - return false - } - jc.lastSuccessfulThrottle = atomic.LoadInt64(&throttleTicks) - return true -} - -func (jc *JobController) validateThrottleParams(expireString string, ratioLiteral *sqlparser.Literal) (duration time.Duration, ratio float64, err error) { - duration = time.Hour * 24 * 365 * 100 - if expireString != "" { - duration, err = time.ParseDuration(expireString) - if err != nil || duration < 0 { - return duration, ratio, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid EXPIRE value: %s. Try '120s', '30m', '1h', etc. Allowed units are (s)ec, (m)in, (h)hour", expireString) - } - } - ratio = 1.0 - if ratioLiteral != nil { - ratio, err = strconv.ParseFloat(ratioLiteral.Val, 64) - if err != nil || ratio < 0 || ratio > 1 { - return duration, ratio, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid RATIO value: %s. Try any decimal number between '0.0' (no throttle) and `1.0` (fully throttled)", ratioLiteral.Val) - } - } - return duration, ratio, nil -} - func (jc *JobController) CompleteJob(ctx context.Context, uuid, table string) (*sqltypes.Result, error) { jc.workingTablesMutex.Lock() defer jc.workingTablesMutex.Unlock() @@ -597,25 +447,7 @@ func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { } } -func getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd string) (*time.Time, *time.Time) { - if runningTimePeriodStart != "" && runningTimePeriodEnd != "" { - // 在submit job时或setRunningTimePeriod时,已经对格式进行了检查,因此这里不会出现错误 - periodStartTime, _ := time.Parse(time.TimeOnly, runningTimePeriodStart) - periodEndTime, _ := time.Parse(time.TimeOnly, runningTimePeriodEnd) - // 由于用户只提供了时间部分,因此需要将日期部分用当天的时间补齐。 - currentTime := time.Now() - periodStartTime = time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), periodStartTime.Hour(), periodStartTime.Minute(), periodStartTime.Second(), periodStartTime.Nanosecond(), currentTime.Location()) - periodEndTime = time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), periodEndTime.Hour(), periodEndTime.Minute(), periodEndTime.Second(), periodEndTime.Nanosecond(), currentTime.Location()) - // 如果EndTime早于startTime的时间,则EndTime的日期部分用明天的日期补齐 - if periodEndTime.Before(periodStartTime) { - periodEndTime = periodEndTime.Add(24 * time.Hour) - } - return &periodStartTime, &periodEndTime - } - return nil, nil -} - -// todo,可以增加并发Job数的限制 +// todo,feat 可以增加并发Job数的限制 // 调用该函数时外部必须拿tableMutex锁和workingTablesMutex锁 func (jc *JobController) checkDmlJobRunnable(jobUUID, status, table string, periodStartTime, periodEndTime *time.Time) bool { if status != queuedStatus && status != notInTimePeriodStatus { @@ -643,67 +475,6 @@ func (jc *JobController) checkDmlJobRunnable(jobUUID, status, table string, peri return true } -func (jc *JobController) getBatchIDToExec(ctx context.Context, batchTableSchema, batchTableName string) (string, error) { - getBatchIDToExecSQL := fmt.Sprintf(sqlTemplateGetBatchIDToExec, batchTableName) - qr, err := jc.execQuery(ctx, batchTableSchema, getBatchIDToExecSQL) - if err != nil { - return "", err - } - if len(qr.Named().Rows) != 1 { - return "", nil - } - return qr.Named().Rows[0].ToString("batch_id") -} - -func (jc *JobController) updateDealingBatchID(ctx context.Context, uuid string, batchID string) error { - jc.tableMutex.Lock() - defer jc.tableMutex.Unlock() - - submitQuery, err := sqlparser.ParseAndBind(sqlUpdateDealingBatchID, - sqltypes.StringBindVariable(batchID), - sqltypes.StringBindVariable(uuid)) - if err != nil { - return err - } - _, err = jc.execQuery(ctx, "", submitQuery) - if err != nil { - return err - } - return nil -} - -// todo,由于目前尚不支持一个job的batch并行,因此对job的batch表进行访问不用设锁 -func (jc *JobController) getBatchSQLsByID(ctx context.Context, batchID, batchTableName, tableSchema string) (batchSQL, batchCountSQL string, err error) { - getBatchSQLWithTableName := fmt.Sprintf(sqlTemplateGetBatchSQLsByID, batchTableName) - query, err := sqlparser.ParseAndBind(getBatchSQLWithTableName, - sqltypes.StringBindVariable(batchID)) - if err != nil { - return "", "", err - } - qr, err := jc.execQuery(ctx, tableSchema, query) - if err != nil { - return "", "", err - } - if len(qr.Named().Rows) != 1 { - return "", "", errors.New("the len of qr of getting batch sql by ID is not 1") - } - batchSQL, _ = qr.Named().Rows[0].ToString("batch_sql") - batchCountSQL, _ = qr.Named().Rows[0].ToString("batch_count_sql_when_creating_batch") - return batchSQL, batchCountSQL, nil -} - -func (jc *JobController) getMaxBatchID(ctx context.Context, batchTableName, tableSchema string) (string, error) { - getMaxBatchIDWithTableName := fmt.Sprintf(sqlTemplateGetMaxBatchID, batchTableName) - qr, err := jc.execQuery(ctx, tableSchema, getMaxBatchIDWithTableName) - if err != nil { - return "", err - } - if len(qr.Named().Rows) != 1 { - return "", errors.New("the len of qr of getting batch sql by ID is not 1") - } - return qr.Named().Rows[0].ToString("max_batch_id") -} - func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, table, batchSQL, batchCountSQL, uuid, batchTable, batchID string, batchSize int64) (err error) { defer jc.env.LogError() @@ -715,6 +486,12 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta } conn, err := jc.pool.Get(ctx, &setting) defer conn.Recycle() + failpoint.Inject(failpointkey.CreateErrorWhenExecutingBatch.Name, func(val failpoint.Value) { + temp, ok := val.(bool) + if ok && temp { + err = errors.New("error created by failpoint") + } + }) if err != nil { return err @@ -769,7 +546,13 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta return err } - //batchSize = 30 + // this failpoint is used to test splitBatchIntoTwo + failpoint.Inject(failpointkey.ModifyBatchSize.Name, func(val failpoint.Value) { + temp, ok := val.(int) + if ok { + batchSize = int64(temp) + } + }) if expectedRow > batchSize { batchSQL, err = jc.splitBatchIntoTwo(ctx, tableSchema, table, batchTable, batchSQL, batchCountSQL, batchID, conn, batchSize, expectedRow) if err != nil { @@ -922,7 +705,6 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab } // 3.2.插入新batch条目 newCurrentBatchSQL = curBatchSQL - // todo 1-1 -> 1-2开始 nextBatchID, err := genNewBatchID(batchID) if err != nil { return "", err @@ -968,7 +750,7 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, // 定时器触发时执行的函数 // 检查状态是否为running,可能为paused/canceled - status, err := jc.GetStrJobInfo(ctx, uuid, "status") + status, err := jc.getStrJobInfo(ctx, uuid, "status") if err != nil { jc.FailJob(ctx, uuid, err.Error(), table) return @@ -1026,7 +808,7 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, return case failPolicySkip: // todo,由于目前batch是串行执行,不存在多个协程同时访问batch表的情况,因此暂时不用加锁。 - _ = jc.updateBatchStatus(tableSchema, batchTable, batchIDToExec, failPolicySkip, err.Error()) + _ = jc.updateBatchStatus(tableSchema, batchTable, failPolicySkip, batchIDToExec, err.Error()) continue case failPolicyPause: msg := fmt.Sprintf("batch %s failed, pause job: %s", batchIDToExec, err.Error()) @@ -1049,25 +831,6 @@ func (jc *JobController) deleteDMLJobRunningMeta(uuid, table string) { delete(jc.workingTables, table) } -// execQuery execute sql by using connect poll,so if targetString is not empty, it will add prefix `use database` first then execute sql. -func (jc *JobController) execQuery(ctx context.Context, targetString, query string) (result *sqltypes.Result, err error) { - defer jc.env.LogError() - var setting pools.Setting - if targetString != "" { - setting.SetWithoutDBName(false) - setting.SetQuery(fmt.Sprintf("use %s", targetString)) - setting.SetResetQuery(fmt.Sprintf("use %s", jc.env.Config().DB.DBName)) - } - conn, err := jc.pool.Get(ctx, &setting) - if err != nil { - return result, err - } - qr, err := conn.Exec(ctx, query, math.MaxInt32, true) - conn.Recycle() - return qr, err - -} - func (jc *JobController) execSubtaskAndRecord(ctx context.Context, tableSchema, subtaskSQL, uuid string) (affectedRows int64, err error) { defer jc.env.LogError() @@ -1108,189 +871,10 @@ func (jc *JobController) execSubtaskAndRecord(ctx context.Context, tableSchema, return affectedRows, nil } -// 该函数拿锁 -func (jc *JobController) updateJobMessage(ctx context.Context, uuid, message string) error { - jc.tableMutex.Lock() - defer jc.tableMutex.Unlock() - - submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobUpdateMessage, - sqltypes.StringBindVariable(message), - sqltypes.StringBindVariable(uuid)) - if err != nil { - return err - } - _, err = jc.execQuery(ctx, "", submitQuery) - return err -} - -func (jc *JobController) updateJobAffectedRows(ctx context.Context, uuid string, affectedRows int64) error { - jc.tableMutex.Lock() - defer jc.tableMutex.Unlock() - - submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobUpdateAffectedRows, - sqltypes.Int64BindVariable(affectedRows), - sqltypes.StringBindVariable(uuid)) - if err != nil { - return err - } - _, err = jc.execQuery(ctx, "", submitQuery) - return err -} - -func (jc *JobController) updateJobStatus(ctx context.Context, uuid, status, statusSetTime string) (*sqltypes.Result, error) { - jc.tableMutex.Lock() - defer jc.tableMutex.Unlock() - - submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobUpdateStatus, - sqltypes.StringBindVariable(status), - sqltypes.StringBindVariable(statusSetTime), - sqltypes.StringBindVariable(uuid)) - if err != nil { - return &sqltypes.Result{}, err - } - return jc.execQuery(ctx, "", submitQuery) -} - -func (jc *JobController) updateJobPeriodTime(ctx context.Context, uuid, timePeriodStart, timePeriodEnd string) (*sqltypes.Result, error) { - jc.tableMutex.Lock() - defer jc.tableMutex.Unlock() - - submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobUpdateTimePeriod, - sqltypes.StringBindVariable(timePeriodStart), - sqltypes.StringBindVariable(timePeriodEnd), - sqltypes.StringBindVariable(uuid)) - if err != nil { - return &sqltypes.Result{}, err - } - return jc.execQuery(ctx, "", submitQuery) -} - -func (jc *JobController) GetIntJobInfo(ctx context.Context, uuid, fieldName string) (int64, error) { - jc.tableMutex.Lock() - defer jc.tableMutex.Unlock() - - submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobGetInfo, - sqltypes.StringBindVariable(uuid)) - if err != nil { - return 0, err - } - qr, err := jc.execQuery(ctx, "", submitQuery) - if err != nil { - return 0, err - } - if len(qr.Named().Rows) != 1 { - return 0, fmt.Errorf("uuid %s has %d entrys in the table instead of 1", uuid, len(qr.Named().Rows)) - } - return qr.Named().Rows[0].ToInt64(fieldName) -} - -func (jc *JobController) GetStrJobInfo(ctx context.Context, uuid, fieldName string) (string, error) { - jc.tableMutex.Lock() - defer jc.tableMutex.Unlock() - - submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobGetInfo, - sqltypes.StringBindVariable(uuid)) - if err != nil { - return "", err - } - qr, err := jc.execQuery(ctx, "", submitQuery) - if err != nil { - return "", err - } - if len(qr.Named().Rows) != 1 { - return "", fmt.Errorf("uuid %s has %d entrys in the table instead of 1", uuid, len(qr.Named().Rows)) - } - return qr.Named().Rows[0].ToString(fieldName) -} - -func buildVarCharFields(names ...string) []*querypb.Field { - fields := make([]*querypb.Field, len(names)) - for i, v := range names { - fields[i] = &querypb.Field{ - Name: v, - Type: sqltypes.VarChar, - Charset: collations.CollationUtf8ID, - Flags: uint32(querypb.MySqlFlag_NOT_NULL_FLAG), - } - } - return fields -} - -func buildVarCharRow(values ...string) []sqltypes.Value { - row := make([]sqltypes.Value, len(values)) - for i, v := range values { - row[i] = sqltypes.NewVarChar(v) - } - return row -} - -func (jc *JobController) getTablePkInfo(ctx context.Context, tableSchema, tableName string) ([]PKInfo, error) { - // 1. 先获取pks 的名字 - submitQuery, err := sqlparser.ParseAndBind(sqlGetTablePk, - sqltypes.StringBindVariable(tableSchema), - sqltypes.StringBindVariable(tableName)) - if err != nil { - return nil, err - } - qr, err := jc.execQuery(ctx, "", submitQuery) - if err != nil { - return nil, err - } - var pkNames []string - for _, row := range qr.Named().Rows { - pkNames = append(pkNames, row["COLUMN_NAME"].ToString()) - } - - // 2. 根据获得的pk列的名字,去原表中查一行数据,借助封装好的Value对象获得每个pk的类型 - pkCols := "" - firstPK := true - for _, pkName := range pkNames { - if !firstPK { - pkCols += "," - } - pkCols += pkName - firstPK = false - } - selectPKCols := fmt.Sprintf(sqlTemplateSelectPKCols, pkCols, tableSchema, tableName) - qr, err = jc.execQuery(ctx, "", selectPKCols) - if err != nil { - return nil, err - } - if len(qr.Named().Rows) != 1 { - return nil, errors.New("the len of qr of select pk cols should be 1") - } - // 获得每一列的type,并生成pkInfo切片 - var pkInfos []PKInfo - for _, pkName := range pkNames { - pkInfos = append(pkInfos, PKInfo{pkName: pkName, pkType: qr.Named().Rows[0][pkName].Type()}) - } - - return pkInfos, nil -} - -func (jc *JobController) getTableColNames(ctx context.Context, tableSchema, tableName string) ([]string, error) { - submitQuery, err := sqlparser.ParseAndBind(sqlGetTableColNames, - sqltypes.StringBindVariable(tableSchema), - sqltypes.StringBindVariable(tableName)) - if err != nil { - return nil, err - } - qr, err := jc.execQuery(ctx, "", submitQuery) - if err != nil { - return nil, err - } - var colNames []string - for _, row := range qr.Named().Rows { - colNames = append(colNames, row["COLUMN_NAME"].ToString()) - } - return colNames, nil -} - -// todo 状态机。 struct func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { ctx := context.Background() - // 用于crash后,重启时,先扫一遍running和paused的 + // 1.启动时,先检查是否有处于"running"或"paused"的job,并恢复它们在内存的状态 qr, _ := jc.execQuery(ctx, "", sqlDMLJobGetAllJobs) if qr != nil { @@ -1310,16 +894,13 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { periodStartTimePtr, periodEndTimePtr := getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd) failPolicy := row["fail_policy"].ToString() - if status == runningStatus { + switch status { + case runningStatus: jc.initDMLJobRunningMeta(uuid, table) go jc.dmlJobBatchRunner(uuid, table, tableSchema, jobBatchTable, failPolicy, batchInterval, batchSize, periodStartTimePtr, periodEndTimePtr) - } - - // 对于暂停的,不启动协程,只需要恢复内存元数据 - if status == pausedStatus { + case pausedStatus: jc.initDMLJobRunningMeta(uuid, table) } - } jc.workingTablesMutex.Unlock() @@ -1327,8 +908,10 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { } log.Info("check of running and paused done \n") + // 内存状态恢复完毕后,唤醒Job调度协程 checkBeforeSchedule <- struct{}{} + // 2.每隔一段时间轮询一次,根据job的状态进行不同的处理 timer := time.NewTicker(healthCheckInterval) defer timer.Stop() @@ -1337,7 +920,7 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { if jc.tabletTypeFunc() != topodatapb.TabletType_PRIMARY { return } - // todo, 增加对长时间未增加 rows的处理 + jc.tableMutex.Lock() qr, _ := jc.execQuery(ctx, "", sqlDMLJobGetAllJobs) if qr != nil { @@ -1348,12 +931,12 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { jobBatchTable := row["batch_info_table_name"].ToString() tableSchema := row["table_schema"].ToString() - statusSetTimeObj, err := time.Parse(time.RFC3339, statusSetTime) - if err != nil { - continue - } - - if status == canceledStatus || status == failedStatus || status == completedStatus { + switch status { + case canceledStatus, failedStatus, completedStatus: + statusSetTimeObj, err := time.Parse(time.RFC3339, statusSetTime) + if err != nil { + continue + } if time.Now().After(statusSetTimeObj.Add(tableEntryGCInterval)) { deleteJobSQL, err := sqlparser.ParseAndBind(sqlDMLJobDeleteJob, sqltypes.StringBindVariable(uuid)) @@ -1361,9 +944,10 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { continue } _, _ = jc.execQuery(ctx, "", deleteJobSQL) - _, _ = jc.execQuery(ctx, tableSchema, fmt.Sprintf(sqlTemplateDropTable, jobBatchTable)) } + case runningStatus: + // todo feat 增加对长时间未增加rows的running job的处理 } } } @@ -1408,7 +992,7 @@ func (jc *JobController) parseDML(sql, tableSchema string) (selectSQL, tableName return "", "", "", "", nil, nil, nil, errors.New("the number of table is more than one") } tableExpr, ok := s.TableExprs[0].(*sqlparser.AliasedTableExpr) - // todo 目前暂不支持join和多表 + // todo feat 目前暂不支持join和多表 if !ok { return "", "", "", "", nil, nil, nil, errors.New("don't support join table now") } @@ -1435,7 +1019,6 @@ func (jc *JobController) parseDML(sql, tableSchema string) (selectSQL, tableName return "", "", "", "", nil, nil, nil, errors.New("the number of table is more than one") } tableExpr, ok := s.TableExprs[0].(*sqlparser.AliasedTableExpr) - // todo 目前暂不支持join和多表 if !ok { return "", "", "", "", nil, nil, nil, errors.New("don't support join table now") } @@ -1458,13 +1041,16 @@ func (jc *JobController) parseDML(sql, tableSchema string) (selectSQL, tableName } default: - // todo support select...into, replace...into + // todo feat support select...into, replace...into return "", "", "", "", nil, nil, nil, errors.New("the type of sql is not supported") } // 获得该DML所相关表的PK信息,将其中的PK列组成字符串pkPart,形如"PKCol1,PKCol2,PKCol3" ctx := context.Background() pkInfos, err = jc.getTablePkInfo(ctx, tableSchema, tableName) + if existUnSupportedPK(pkInfos) { + return "", "", "", "", nil, nil, nil, errors.New("the table has unsupported PK type") + } if err != nil { return "", "", "", "", nil, nil, nil, err } @@ -1499,11 +1085,9 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, // 为每一个DML job创建一张batch表,保存着该job被拆分成batches的具体信息。 // healthCheck协程会定时对处于结束状态(completed,canceled,failed)的job的batch表进行回收 - // todo _vt_BATCH_uuid - batchTableName := "batch_info_table_" + strings.Replace(jobUUID, "-", "_", -1) + batchTableName := "_vt_BATCH_" + strings.Replace(jobUUID, "-", "_", -1) - // todo,删除batchSQL,batchCountSQL,字段,在内存中生成具体的sql - // todo mysql generate col 或者 go代码实现 + // todo feat 删除batchSQL,batchCountSQL,字段,在内存中生成具体的sql, mysql generate col 或者 go代码实现 createTableSQL := fmt.Sprintf(sqlTemplateCreateBatchTable, batchTableName) _, err = jc.execQuery(ctx, tableSchema, createTableSQL) if err != nil { @@ -1591,18 +1175,6 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, return batchTableName, nil } -func currentBatchIDInc(currentBatchID string) (string, error) { - if strings.Contains(currentBatchID, "-") { - currentBatchID = strings.Split(currentBatchID, "-")[0] - } - currentBatchIDInt64, err := strconv.ParseInt(currentBatchID, 10, 64) - if err != nil { - return "", err - } - currentBatchIDInt64++ - return strconv.FormatInt(currentBatchIDInt64, 10), nil -} - // 通知jobScheduler让它立刻开始一次调度。 func (jc *JobController) notifyJobScheduler() { if jc.schedulerNotifyChan == nil { @@ -1617,52 +1189,16 @@ func (jc *JobController) notifyJobScheduler() { } } -func (jc *JobController) getIndexCount(tableSchema, tableName string) (indexCount int64, err error) { - query, err := sqlparser.ParseAndBind(sqlGetIndexCount, - sqltypes.StringBindVariable(tableSchema), - sqltypes.StringBindVariable(tableName)) - if err != nil { - return 0, err - } - ctx := context.Background() - qr, err := jc.execQuery(ctx, "", query) - if err != nil { - return 0, err - } - if len(qr.Named().Rows) != 1 { - return 0, err - } - return qr.Named().Rows[0]["index_count"].ToInt64() -} - -func genNewBatchID(batchID string) (newBatchID string, err error) { - // 产生新的batchID - if strings.Contains(batchID, "-") { - parts := strings.Split(batchID, "-") - num, err := strconv.ParseInt(parts[1], 10, 64) - if err != nil { - return "", err +func existUnSupportedPK(pkInfos []PKInfo) bool { + for _, pk := range pkInfos { + switch pk.pkType { + case sqltypes.Float64, sqltypes.Float32, sqltypes.Decimal, + sqltypes.VarBinary, sqltypes.Blob, sqltypes.Binary, sqltypes.Bit, + sqltypes.Text, sqltypes.VarChar, sqltypes.Char, + sqltypes.Enum, sqltypes.Set, sqltypes.Tuple, sqltypes.Geometry, sqltypes.TypeJSON, sqltypes.Expression, + sqltypes.HexNum, sqltypes.HexVal, sqltypes.BitNum: + return true } - newBatchID = fmt.Sprintf("%s-%d", parts[0], num+1) - } else { - num, err := strconv.ParseInt(batchID, 10, 64) - if err != nil { - return "", err - } - newBatchID = fmt.Sprintf("%d-1", num) - } - return newBatchID, nil -} - -func (jc *JobController) updateBatchStatus(batchTableSchema, batchTableName, status, batchID, errStr string) (err error) { - updateBatchStatusAndAffectedRowsSQL := fmt.Sprintf(sqlTempalteUpdateBatchStatusAndAffectedRows, batchTableName) - query, err := sqlparser.ParseAndBind(updateBatchStatusAndAffectedRowsSQL, - sqltypes.StringBindVariable(status+": "+errStr), - sqltypes.Int64BindVariable(0), - sqltypes.StringBindVariable(batchID)) - if err != nil { - return err } - _, err = jc.execQuery(context.Background(), batchTableSchema, query) - return err + return false } diff --git a/go/vt/vttablet/jobcontroller/running_period_time.go b/go/vt/vttablet/jobcontroller/running_period_time.go new file mode 100644 index 0000000000..b0cc8b7b8c --- /dev/null +++ b/go/vt/vttablet/jobcontroller/running_period_time.go @@ -0,0 +1,63 @@ +/* +Copyright ApeCloud, Inc. +Licensed under the Apache v2(found in the LICENSE file in the root directory). +*/ + +package jobcontroller + +import ( + "context" + "errors" + "time" + + "vitess.io/vitess/go/sqltypes" +) + +func getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd string) (*time.Time, *time.Time) { + if runningTimePeriodStart != "" && runningTimePeriodEnd != "" { + // 在submit job时或setRunningTimePeriod时,已经对格式进行了检查,因此这里不会出现错误 + periodStartTime, _ := time.Parse(time.TimeOnly, runningTimePeriodStart) + periodEndTime, _ := time.Parse(time.TimeOnly, runningTimePeriodEnd) + // 由于用户只提供了时间部分,因此需要将日期部分用当天的时间补齐。 + currentTime := time.Now() + periodStartTime = time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), periodStartTime.Hour(), periodStartTime.Minute(), periodStartTime.Second(), periodStartTime.Nanosecond(), currentTime.Location()) + periodEndTime = time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), periodEndTime.Hour(), periodEndTime.Minute(), periodEndTime.Second(), periodEndTime.Nanosecond(), currentTime.Location()) + // 如果EndTime早于startTime的时间,则EndTime的日期部分用明天的日期补齐 + if periodEndTime.Before(periodStartTime) { + periodEndTime = periodEndTime.Add(24 * time.Hour) + } + return &periodStartTime, &periodEndTime + } + return nil, nil +} + +func (jc *JobController) SetRunningTimePeriod(uuid, startTime, endTime string) (*sqltypes.Result, error) { + var emptyResult = &sqltypes.Result{} + ctx := context.Background() + + // 如果两个时间只有一个为空,则报错 + if (startTime == "" && endTime != "") || (startTime != "" && endTime == "") { + return emptyResult, errors.New("the start time and end time must be both set or not") + } + + status, err := jc.getStrJobInfo(ctx, uuid, "status") + if err != nil { + return emptyResult, err + } + if status == runningStatus { + return emptyResult, errors.New("the job is running now, pause it first") + } + // 提交的时间段必须满足特定的格式,可以成功转换成time对象 + if startTime != "" && endTime != "" { + _, err = time.Parse(time.TimeOnly, startTime) + if err != nil { + return emptyResult, errors.New("the start time is in error format, it should be like HH:MM:SS") + } + _, err = time.Parse(time.TimeOnly, endTime) + if err != nil { + return emptyResult, errors.New("the start time is in error format, it should be like HH:MM:SS") + } + } + // 往表中插入 + return jc.updateJobPeriodTime(ctx, uuid, startTime, endTime) +} diff --git a/go/vt/vttablet/jobcontroller/throttle.go b/go/vt/vttablet/jobcontroller/throttle.go new file mode 100644 index 0000000000..7b66099729 --- /dev/null +++ b/go/vt/vttablet/jobcontroller/throttle.go @@ -0,0 +1,123 @@ +/* +Copyright ApeCloud, Inc. +Licensed under the Apache v2(found in the LICENSE file in the root directory). +*/ + +package jobcontroller + +import ( + "context" + "net/http" + "strconv" + "sync" + "sync/atomic" + "time" + + "vitess.io/vitess/go/sqltypes" + vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" + "vitess.io/vitess/go/vt/sqlparser" + "vitess.io/vitess/go/vt/vterrors" + "vitess.io/vitess/go/vt/vttablet/tabletserver/throttle" +) + +var throttleTicks int64 +var throttleInit sync.Once + +func initThrottleTicker() { + throttleInit.Do(func() { + go func() { + tick := time.NewTicker(throttleCheckInterval) + defer tick.Stop() + for range tick.C { + atomic.AddInt64(&throttleTicks, 1) + } + }() + }) +} + +// 指定throttle的时长和ratio +// ratio表示限流的比例,最大为1,即完全限流 +// 时长的格式举例: +// "300ms" 表示 300 毫秒。 +// "-1.5h" 表示负1.5小时。 +// "2h45m" 表示2小时45分钟。 +func (jc *JobController) ThrottleJob(uuid, expireString string, ratioLiteral *sqlparser.Literal) (result *sqltypes.Result, err error) { + emptyResult := &sqltypes.Result{} + duration, ratio, err := jc.validateThrottleParams(expireString, ratioLiteral) + if err != nil { + return nil, err + } + if err := jc.lagThrottler.CheckIsReady(); err != nil { + return nil, err + } + expireAt := time.Now().Add(duration) + _ = jc.lagThrottler.ThrottleApp(uuid, expireAt, ratio) + + query, err := sqlparser.ParseAndBind(sqlDMLJobUpdateThrottleInfo, + sqltypes.Float64BindVariable(ratio), + sqltypes.StringBindVariable(expireAt.String()), + sqltypes.StringBindVariable(uuid)) + if err != nil { + return emptyResult, err + } + ctx := context.Background() + jc.tableMutex.Lock() + defer jc.tableMutex.Unlock() + return jc.execQuery(ctx, "", query) +} + +func (jc *JobController) UnthrottleJob(uuid string) (result *sqltypes.Result, err error) { + emptyResult := &sqltypes.Result{} + if err := jc.lagThrottler.CheckIsReady(); err != nil { + return nil, err + } + _ = jc.lagThrottler.UnthrottleApp(uuid) + + query, err := sqlparser.ParseAndBind(sqlDMLJobClearThrottleInfo, + sqltypes.StringBindVariable(uuid)) + if err != nil { + return emptyResult, err + } + ctx := context.Background() + jc.tableMutex.Lock() + defer jc.tableMutex.Unlock() + return jc.execQuery(ctx, "", query) +} + +func (jc *JobController) requestThrottle(uuid string) (throttleCheckOK bool) { + if jc.lastSuccessfulThrottle >= atomic.LoadInt64(&throttleTicks) { + // if last check was OK just very recently there is no need to check again + return true + } + ctx := context.Background() + // 请求时给每一个throttle的app名都加上了dml-job前缀,这样可以通过throttle dml-job来throttle所有的dml jobs + appName := "dml-job:" + uuid + // 这里不特别设置flag + throttleCheckFlags := &throttle.CheckFlags{} + // 由于dml job子任务需要同步到集群中的各个从节点,因此throttle也依据的是集群的复制延迟 + checkType := throttle.ThrottleCheckPrimaryWrite + checkRst := jc.lagThrottler.CheckByType(ctx, appName, "", throttleCheckFlags, checkType) + if checkRst.StatusCode != http.StatusOK { + return false + } + jc.lastSuccessfulThrottle = atomic.LoadInt64(&throttleTicks) + return true +} + +func (jc *JobController) validateThrottleParams(expireString string, ratioLiteral *sqlparser.Literal) (duration time.Duration, ratio float64, err error) { + duration = time.Hour * 24 * 365 * 100 + if expireString != "" { + duration, err = time.ParseDuration(expireString) + if err != nil || duration < 0 { + return duration, ratio, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid EXPIRE value: %s. Try '120s', '30m', '1h', etc. Allowed units are (s)ec, (m)in, (h)hour", expireString) + } + } + ratio = 1.0 + if ratioLiteral != nil { + ratio, err = strconv.ParseFloat(ratioLiteral.Val, 64) + if err != nil || ratio < 0 || ratio > 1 { + return duration, ratio, vterrors.Errorf(vtrpcpb.Code_INVALID_ARGUMENT, "invalid RATIO value: %s. Try any decimal number between '0.0' (no throttle) and `1.0` (fully throttled)", ratioLiteral.Val) + } + } + return duration, ratio, nil +} diff --git a/go/vt/vttablet/jobcontroller/util.go b/go/vt/vttablet/jobcontroller/util.go new file mode 100644 index 0000000000..585511e29c --- /dev/null +++ b/go/vt/vttablet/jobcontroller/util.go @@ -0,0 +1,353 @@ +/* +Copyright ApeCloud, Inc. +Licensed under the Apache v2(found in the LICENSE file in the root directory). +*/ + +package jobcontroller + +import ( + "context" + "errors" + "fmt" + "math" + "strconv" + "strings" + + "vitess.io/vitess/go/mysql/collations" + "vitess.io/vitess/go/pools" + "vitess.io/vitess/go/sqltypes" + querypb "vitess.io/vitess/go/vt/proto/query" + "vitess.io/vitess/go/vt/sqlparser" +) + +func buildVarCharFields(names ...string) []*querypb.Field { + fields := make([]*querypb.Field, len(names)) + for i, v := range names { + fields[i] = &querypb.Field{ + Name: v, + Type: sqltypes.VarChar, + Charset: collations.CollationUtf8ID, + Flags: uint32(querypb.MySqlFlag_NOT_NULL_FLAG), + } + } + return fields +} + +func buildVarCharRow(values ...string) []sqltypes.Value { + row := make([]sqltypes.Value, len(values)) + for i, v := range values { + row[i] = sqltypes.NewVarChar(v) + } + return row +} + +func (jc *JobController) buildJobSubmitResult(jobUUID, jobBatchTable string, timeGap, subtaskRows int64, postponeLaunch bool, failPolicy string) *sqltypes.Result { + var rows []sqltypes.Row + row := buildVarCharRow(jobUUID, jobBatchTable, strconv.FormatInt(timeGap, 10), strconv.FormatInt(subtaskRows, 10), failPolicy, strconv.FormatBool(postponeLaunch)) + rows = append(rows, row) + submitRst := &sqltypes.Result{ + Fields: buildVarCharFields("job_uuid", "batch_info_table_name", "time_gap_in_ms", "batch_size", "fail_policy", "postpone_launch"), + Rows: rows, + RowsAffected: 1, + } + return submitRst +} + +// execQuery execute sql by using connect poll,so if targetString is not empty, it will add prefix `use database` first then execute sql. +func (jc *JobController) execQuery(ctx context.Context, targetString, query string) (result *sqltypes.Result, err error) { + defer jc.env.LogError() + var setting pools.Setting + if targetString != "" { + setting.SetWithoutDBName(false) + setting.SetQuery(fmt.Sprintf("use %s", targetString)) + setting.SetResetQuery(fmt.Sprintf("use %s", jc.env.Config().DB.DBName)) + } + conn, err := jc.pool.Get(ctx, &setting) + if err != nil { + return result, err + } + qr, err := conn.Exec(ctx, query, math.MaxInt32, true) + conn.Recycle() + return qr, err + +} + +// 该函数拿锁 +func (jc *JobController) updateJobMessage(ctx context.Context, uuid, message string) error { + jc.tableMutex.Lock() + defer jc.tableMutex.Unlock() + + submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobUpdateMessage, + sqltypes.StringBindVariable(message), + sqltypes.StringBindVariable(uuid)) + if err != nil { + return err + } + _, err = jc.execQuery(ctx, "", submitQuery) + return err +} + +func (jc *JobController) updateJobAffectedRows(ctx context.Context, uuid string, affectedRows int64) error { + jc.tableMutex.Lock() + defer jc.tableMutex.Unlock() + + submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobUpdateAffectedRows, + sqltypes.Int64BindVariable(affectedRows), + sqltypes.StringBindVariable(uuid)) + if err != nil { + return err + } + _, err = jc.execQuery(ctx, "", submitQuery) + return err +} + +func (jc *JobController) updateJobStatus(ctx context.Context, uuid, status, statusSetTime string) (*sqltypes.Result, error) { + jc.tableMutex.Lock() + defer jc.tableMutex.Unlock() + + submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobUpdateStatus, + sqltypes.StringBindVariable(status), + sqltypes.StringBindVariable(statusSetTime), + sqltypes.StringBindVariable(uuid)) + if err != nil { + return &sqltypes.Result{}, err + } + return jc.execQuery(ctx, "", submitQuery) +} + +func (jc *JobController) updateJobPeriodTime(ctx context.Context, uuid, timePeriodStart, timePeriodEnd string) (*sqltypes.Result, error) { + jc.tableMutex.Lock() + defer jc.tableMutex.Unlock() + + submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobUpdateTimePeriod, + sqltypes.StringBindVariable(timePeriodStart), + sqltypes.StringBindVariable(timePeriodEnd), + sqltypes.StringBindVariable(uuid)) + if err != nil { + return &sqltypes.Result{}, err + } + return jc.execQuery(ctx, "", submitQuery) +} + +func (jc *JobController) getIntJobInfo(ctx context.Context, uuid, fieldName string) (int64, error) { + jc.tableMutex.Lock() + defer jc.tableMutex.Unlock() + + submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobGetInfo, + sqltypes.StringBindVariable(uuid)) + if err != nil { + return 0, err + } + qr, err := jc.execQuery(ctx, "", submitQuery) + if err != nil { + return 0, err + } + if len(qr.Named().Rows) != 1 { + return 0, fmt.Errorf("uuid %s has %d entrys in the table instead of 1", uuid, len(qr.Named().Rows)) + } + return qr.Named().Rows[0].ToInt64(fieldName) +} + +func (jc *JobController) getStrJobInfo(ctx context.Context, uuid, fieldName string) (string, error) { + jc.tableMutex.Lock() + defer jc.tableMutex.Unlock() + + submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobGetInfo, + sqltypes.StringBindVariable(uuid)) + if err != nil { + return "", err + } + qr, err := jc.execQuery(ctx, "", submitQuery) + if err != nil { + return "", err + } + if len(qr.Named().Rows) != 1 { + return "", fmt.Errorf("uuid %s has %d entrys in the table instead of 1", uuid, len(qr.Named().Rows)) + } + return qr.Named().Rows[0].ToString(fieldName) +} + +func (jc *JobController) getBatchIDToExec(ctx context.Context, batchTableSchema, batchTableName string) (string, error) { + getBatchIDToExecSQL := fmt.Sprintf(sqlTemplateGetBatchIDToExec, batchTableName) + qr, err := jc.execQuery(ctx, batchTableSchema, getBatchIDToExecSQL) + if err != nil { + return "", err + } + if len(qr.Named().Rows) != 1 { + return "", nil + } + return qr.Named().Rows[0].ToString("batch_id") +} + +func (jc *JobController) updateDealingBatchID(ctx context.Context, uuid string, batchID string) error { + jc.tableMutex.Lock() + defer jc.tableMutex.Unlock() + + submitQuery, err := sqlparser.ParseAndBind(sqlUpdateDealingBatchID, + sqltypes.StringBindVariable(batchID), + sqltypes.StringBindVariable(uuid)) + if err != nil { + return err + } + _, err = jc.execQuery(ctx, "", submitQuery) + if err != nil { + return err + } + return nil +} + +// todo feat batch的并行执行,注意对batch表的操作 +func (jc *JobController) getBatchSQLsByID(ctx context.Context, batchID, batchTableName, tableSchema string) (batchSQL, batchCountSQL string, err error) { + getBatchSQLWithTableName := fmt.Sprintf(sqlTemplateGetBatchSQLsByID, batchTableName) + query, err := sqlparser.ParseAndBind(getBatchSQLWithTableName, + sqltypes.StringBindVariable(batchID)) + if err != nil { + return "", "", err + } + qr, err := jc.execQuery(ctx, tableSchema, query) + if err != nil { + return "", "", err + } + if len(qr.Named().Rows) != 1 { + return "", "", errors.New("the len of qr of getting batch sql by ID is not 1") + } + batchSQL, _ = qr.Named().Rows[0].ToString("batch_sql") + batchCountSQL, _ = qr.Named().Rows[0].ToString("batch_count_sql_when_creating_batch") + return batchSQL, batchCountSQL, nil +} + +func (jc *JobController) getMaxBatchID(ctx context.Context, batchTableName, tableSchema string) (string, error) { + getMaxBatchIDWithTableName := fmt.Sprintf(sqlTemplateGetMaxBatchID, batchTableName) + qr, err := jc.execQuery(ctx, tableSchema, getMaxBatchIDWithTableName) + if err != nil { + return "", err + } + if len(qr.Named().Rows) != 1 { + return "", errors.New("the len of qr of getting batch sql by ID is not 1") + } + return qr.Named().Rows[0].ToString("max_batch_id") +} + +func (jc *JobController) getTablePkInfo(ctx context.Context, tableSchema, tableName string) ([]PKInfo, error) { + // 1. 先获取pks 的名字 + submitQuery, err := sqlparser.ParseAndBind(sqlGetTablePk, + sqltypes.StringBindVariable(tableSchema), + sqltypes.StringBindVariable(tableName)) + if err != nil { + return nil, err + } + qr, err := jc.execQuery(ctx, "", submitQuery) + if err != nil { + return nil, err + } + var pkNames []string + for _, row := range qr.Named().Rows { + pkNames = append(pkNames, row["COLUMN_NAME"].ToString()) + } + + // 2. 根据获得的pk列的名字,去原表中查一行数据,借助封装好的Value对象获得每个pk的类型 + pkCols := "" + firstPK := true + for _, pkName := range pkNames { + if !firstPK { + pkCols += "," + } + pkCols += pkName + firstPK = false + } + selectPKCols := fmt.Sprintf(sqlTemplateSelectPKCols, pkCols, tableSchema, tableName) + qr, err = jc.execQuery(ctx, "", selectPKCols) + if err != nil { + return nil, err + } + if len(qr.Named().Rows) != 1 { + return nil, errors.New("the len of qr of select pk cols should be 1") + } + // 获得每一列的type,并生成pkInfo切片 + var pkInfos []PKInfo + for _, pkName := range pkNames { + pkInfos = append(pkInfos, PKInfo{pkName: pkName, pkType: qr.Named().Rows[0][pkName].Type()}) + } + + return pkInfos, nil +} + +func (jc *JobController) getTableColNames(ctx context.Context, tableSchema, tableName string) ([]string, error) { + submitQuery, err := sqlparser.ParseAndBind(sqlGetTableColNames, + sqltypes.StringBindVariable(tableSchema), + sqltypes.StringBindVariable(tableName)) + if err != nil { + return nil, err + } + qr, err := jc.execQuery(ctx, "", submitQuery) + if err != nil { + return nil, err + } + var colNames []string + for _, row := range qr.Named().Rows { + colNames = append(colNames, row["COLUMN_NAME"].ToString()) + } + return colNames, nil +} + +func currentBatchIDInc(currentBatchID string) (string, error) { + if strings.Contains(currentBatchID, "-") { + currentBatchID = strings.Split(currentBatchID, "-")[0] + } + currentBatchIDInt64, err := strconv.ParseInt(currentBatchID, 10, 64) + if err != nil { + return "", err + } + currentBatchIDInt64++ + return strconv.FormatInt(currentBatchIDInt64, 10), nil +} + +func (jc *JobController) getIndexCount(tableSchema, tableName string) (indexCount int64, err error) { + query, err := sqlparser.ParseAndBind(sqlGetIndexCount, + sqltypes.StringBindVariable(tableSchema), + sqltypes.StringBindVariable(tableName)) + if err != nil { + return 0, err + } + ctx := context.Background() + qr, err := jc.execQuery(ctx, "", query) + if err != nil { + return 0, err + } + if len(qr.Named().Rows) != 1 { + return 0, err + } + return qr.Named().Rows[0]["index_count"].ToInt64() +} + +func genNewBatchID(batchID string) (newBatchID string, err error) { + // 产生新的batchID + if strings.Contains(batchID, "-") { + parts := strings.Split(batchID, "-") + num, err := strconv.ParseInt(parts[1], 10, 64) + if err != nil { + return "", err + } + newBatchID = fmt.Sprintf("%s-%d", parts[0], num+1) + } else { + num, err := strconv.ParseInt(batchID, 10, 64) + if err != nil { + return "", err + } + newBatchID = fmt.Sprintf("%d-2", num) + } + return newBatchID, nil +} + +func (jc *JobController) updateBatchStatus(batchTableSchema, batchTableName, status, batchID, errStr string) (err error) { + updateBatchStatusAndAffectedRowsSQL := fmt.Sprintf(sqlTempalteUpdateBatchStatusAndAffectedRows, batchTableName) + query, err := sqlparser.ParseAndBind(updateBatchStatusAndAffectedRowsSQL, + sqltypes.StringBindVariable(status+": "+errStr), + sqltypes.Int64BindVariable(0), + sqltypes.StringBindVariable(batchID)) + if err != nil { + return err + } + _, err = jc.execQuery(context.Background(), batchTableSchema, query) + return err +} From 25acd729617ffcc6ff24b6888ba06e9734404841 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Wed, 10 Jan 2024 13:18:41 +0800 Subject: [PATCH 41/54] fix: split large functions into smaller ones Signed-off-by: newborn22 <953950914@qq.com> --- .../jobcontroller/batch_sql_related.go | 79 +++ .../jobcontroller/batch_sql_related_test.go | 11 + go/vt/vttablet/jobcontroller/controller.go | 487 +++++------------- go/vt/vttablet/jobcontroller/sqls.go | 6 +- go/vt/vttablet/jobcontroller/util.go | 153 ++++++ go/vt/vttablet/jobcontroller/util_test.go | 58 +++ 6 files changed, 439 insertions(+), 355 deletions(-) create mode 100644 go/vt/vttablet/jobcontroller/util_test.go diff --git a/go/vt/vttablet/jobcontroller/batch_sql_related.go b/go/vt/vttablet/jobcontroller/batch_sql_related.go index c39847a254..75fa740f46 100644 --- a/go/vt/vttablet/jobcontroller/batch_sql_related.go +++ b/go/vt/vttablet/jobcontroller/batch_sql_related.go @@ -6,8 +6,12 @@ Licensed under the Apache v2(found in the LICENSE file in the root directory). package jobcontroller import ( + "context" "errors" "fmt" + "math" + + "vitess.io/vitess/go/vt/vttablet/tabletserver/connpool" "vitess.io/vitess/go/sqltypes" "vitess.io/vitess/go/vt/sqlparser" @@ -211,3 +215,78 @@ func genNewBatchSQLsAndCountSQLsWhenSplittingBatch(batchSQLStmt, batchCountSQLSt newBatchCountSQL = genSQLByReplaceWhereExprNode(batchCountSQLStmt, newBatchWhereExpr) return curBatchSQL, newBatchSQL, newBatchCountSQL, nil } + +// replace selectExprs in batchCountSQLStmt with PK cols to generate selectPKsSQL +// the function will not change the original batchCountSQLStmt +func genSelectPKsSQL(batchCountSQLStmt sqlparser.Statement, pkInfos []PKInfo) string { + batchCountSQLStmtSelect, _ := batchCountSQLStmt.(*sqlparser.Select) + // 根据pk信息生成select exprs + var pkExprs []sqlparser.SelectExpr + for _, pkInfo := range pkInfos { + pkExprs = append(pkExprs, &sqlparser.AliasedExpr{Expr: sqlparser.NewColName(pkInfo.pkName)}) + } + oldBatchCountSQLStmtSelectExprs := batchCountSQLStmtSelect.SelectExprs + batchCountSQLStmtSelect.SelectExprs = pkExprs + batchSplitSelectSQL := sqlparser.String(batchCountSQLStmtSelect) + // undo the change of select exprs + batchCountSQLStmtSelect.SelectExprs = oldBatchCountSQLStmtSelectExprs + return batchSplitSelectSQL +} + +// get the begin and end fields of the batches newly created during splitting +func getNewBatchesBeginAndEndStr(ctx context.Context, conn *connpool.DBConn, batchTable, batchID string, curBatchNewEnd, newBatchStart []sqltypes.Value) (currentBatchNewBeginStr, currentBatchNewEndStr, newBatchBeginStr, newBatchEndStr string, err error) { + getBatchBeginAndEndSQL := fmt.Sprintf(sqlTemplateGetBatchBeginAndEnd, batchTable) + getBatchBeginAndEndQuery, err := sqlparser.ParseAndBind(getBatchBeginAndEndSQL, sqltypes.StringBindVariable(batchID)) + if err != nil { + return "", "", "", "", err + } + qr, err := conn.Exec(ctx, getBatchBeginAndEndQuery, math.MaxInt32, true) + if err != nil { + return "", "", "", "", err + } + if len(qr.Named().Rows) != 1 { + return "", "", "", "", errors.New("can not get batch begin and end") + } + currentBatchNewBeginStr = qr.Named().Rows[0]["batch_begin"].ToString() + newBatchEndStr = qr.Named().Rows[0]["batch_end"].ToString() + currentBatchNewEndStr, newBatchBeginStr, err = genBatchStartAndEndStr(curBatchNewEnd, newBatchStart) + if err != nil { + return "", "", "", "", err + } + return currentBatchNewBeginStr, currentBatchNewEndStr, newBatchBeginStr, newBatchEndStr, nil +} +func updateBatchInfoTableEntry(ctx context.Context, conn *connpool.DBConn, batchTable string, curBatchSQL, currentBatchNewBeginStr, currentBatchNewEndStr, batchID string) (err error) { + sqlUpdateBatchInfoTableEntry := fmt.Sprintf(sqlTemplateUpdateBatchSQL, batchTable) + queryUpdateBatchInfoTableEntry, err := sqlparser.ParseAndBind(sqlUpdateBatchInfoTableEntry, + sqltypes.StringBindVariable(curBatchSQL), + sqltypes.StringBindVariable(currentBatchNewBeginStr), + sqltypes.StringBindVariable(currentBatchNewEndStr), + sqltypes.StringBindVariable(batchID)) + if err != nil { + return err + } + _, err = conn.Exec(ctx, queryUpdateBatchInfoTableEntry, math.MaxInt32, false) + if err != nil { + return err + } + return nil +} + +func insertBatchInfoTableEntry(ctx context.Context, conn *connpool.DBConn, batchTable, nextBatchID, newBatchSQL, newBatchCountSQL, newBatchBeginStr, newBatchEndStr string, newBatchSize int64) (err error) { + sqlInsertBatchInfoTableEntry := fmt.Sprintf(sqlTemplateInsertBatchEntry, batchTable) + queryInsertBatchInfoTableEntry, err := sqlparser.ParseAndBind(sqlInsertBatchInfoTableEntry, + sqltypes.StringBindVariable(nextBatchID), + sqltypes.StringBindVariable(newBatchSQL), + sqltypes.StringBindVariable(newBatchCountSQL), + sqltypes.Int64BindVariable(newBatchSize), + sqltypes.StringBindVariable(newBatchBeginStr), + sqltypes.StringBindVariable(newBatchEndStr)) + if err != nil { + return err + } + _, err = conn.Exec(ctx, queryInsertBatchInfoTableEntry, math.MaxInt32, false) + if err != nil { + return err + } + return nil +} diff --git a/go/vt/vttablet/jobcontroller/batch_sql_related_test.go b/go/vt/vttablet/jobcontroller/batch_sql_related_test.go index 5f8065b99b..1a1d8d0f2f 100644 --- a/go/vt/vttablet/jobcontroller/batch_sql_related_test.go +++ b/go/vt/vttablet/jobcontroller/batch_sql_related_test.go @@ -250,3 +250,14 @@ func TestStripComments(t *testing.T) { }) } } + +func TestGenSelectPKsSQL(t *testing.T) { + batchCountSQL := "select count(*) from t where 1 = 1" + batchCountSQLStmt, _ := sqlparser.Parse(batchCountSQL) + pkInfos := []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}} + gotSQL := genSelectPKsSQL(batchCountSQLStmt, pkInfos) + expectedSQL := "select pk1, pk2 from t where 1 = 1" + assert.Equalf(t, expectedSQL, gotSQL, "genSelectPKsSQL(%v,%v)", batchCountSQLStmt, pkInfos) + // batchCountSQLStmt should not be changed + assert.Equalf(t, batchCountSQL, sqlparser.String(batchCountSQLStmt), "genSelectPKsSQL(%v,%v)", batchCountSQLStmt, pkInfos) +} diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index fb0ee2e997..8db7fa7b38 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -111,6 +111,16 @@ type PKInfo struct { pkType querypb.Type } +type JobRunnerArgs struct { + uuid, table, tableSchema, batchInfoTable, failPolicy string + batchInterval, batchSize int64 + timePeriodStart, timePeriodEnd *time.Time +} + +type JobHealthCheckArgs struct { + uuid, tableSchema, batchInfoTable, statusSetTime string +} + func (jc *JobController) Open() error { jc.initMutex.Lock() defer jc.initMutex.Unlock() @@ -178,8 +188,6 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run jc.tableMutex.Lock() defer jc.tableMutex.Unlock() - ctx := context.Background() - jobUUID, err := schema.CreateUUIDWithDelimiter("-") if err != nil { return nil, err @@ -191,22 +199,15 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run if userBatchSize == 0 { userBatchSize = int64(defaultBatchSize) } - // 取用户输入的batchSize和程序的threshold的最小值作为每个batch最终的batchSize - var batchSize int64 - if userBatchSize < batchSizeThreshold { - batchSize = userBatchSize - } else { - batchSize = batchSizeThreshold - } // 创建batchInfo表 - tableName, batchInfoTable, batchSize, err := jc.createJobBatches(jobUUID, sql, tableSchema, batchSize) - batchInfoTableSchema := tableSchema + tableName, batchInfoTable, batchSize, err := jc.createJobBatches(jobUUID, sql, tableSchema, userBatchSize) if err != nil { return &sqltypes.Result{}, err } if batchInfoTable == "" { return &sqltypes.Result{}, errors.New("this DML sql won't affect any rows") } + batchInfoTableSchema := tableSchema jobStatus := queuedStatus if postponeLaunch { @@ -236,32 +237,15 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run } } - submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobSubmit, - sqltypes.StringBindVariable(jobUUID), - sqltypes.StringBindVariable(sql), - sqltypes.StringBindVariable(tableSchema), - sqltypes.StringBindVariable(tableName), - sqltypes.StringBindVariable(batchInfoTableSchema), - sqltypes.StringBindVariable(batchInfoTable), - sqltypes.Int64BindVariable(timeGapInMs), - sqltypes.Int64BindVariable(batchSize), - sqltypes.StringBindVariable(jobStatus), - sqltypes.StringBindVariable(statusSetTime), - sqltypes.StringBindVariable(failPolicy), - sqltypes.StringBindVariable(runningTimePeriodStart), - sqltypes.StringBindVariable(runningTimePeriodEnd)) - if err != nil { - return nil, err - } - - _, err = jc.execQuery(ctx, "", submitQuery) + err = jc.insertJobEntry(jobUUID, sql, tableSchema, tableName, batchInfoTableSchema, batchInfoTable, + jobStatus, statusSetTime, failPolicy, runningTimePeriodStart, runningTimePeriodEnd, timeGapInMs, batchSize) if err != nil { return &sqltypes.Result{}, err } jc.notifyJobScheduler() - return jc.buildJobSubmitResult(jobUUID, batchInfoTable, timeGapInMs, userBatchSize, postponeLaunch, failPolicy), nil + return jc.buildJobSubmitResult(jobUUID, batchInfoTable, timeGapInMs, batchSize, postponeLaunch, failPolicy), nil } // 和cancel的区别:1.pasue不会删除元数据 2.cancel状态的job在经过一段时间后会被后台协程回收 @@ -315,18 +299,12 @@ func (jc *JobController) ResumeJob(uuid string) (*sqltypes.Result, error) { return emptyResult, errors.New("the len of qr of querying job info by uuid is not 1") } row := rst.Named().Rows[0] - tableSchema := row["table_schema"].ToString() - table := row["table_name"].ToString() - jobBatchTable := row["batch_info_table_name"].ToString() - batchInterval, _ := row["batch_interval_in_ms"].ToInt64() - batchSize, _ := row["batch_size"].ToInt64() - runningTimePeriodStart := row["running_time_period_start"].ToString() - runningTimePeriodEnd := row["running_time_period_end"].ToString() - periodStartTimePtr, periodEndTimePtr := getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd) - failPolicy := row["fail_policy"].ToString() + + runnerArgs := JobRunnerArgs{} + runnerArgs.initArgsByQueryResult(row) // 拉起runner协程,协程内会将状态改为running - go jc.dmlJobBatchRunner(uuid, table, tableSchema, jobBatchTable, failPolicy, batchInterval, batchSize, periodStartTimePtr, periodEndTimePtr) + go jc.dmlJobBatchRunner(runnerArgs.uuid, runnerArgs.table, runnerArgs.tableSchema, runnerArgs.batchInfoTable, runnerArgs.failPolicy, runnerArgs.batchInterval, runnerArgs.batchSize, runnerArgs.timePeriodStart, runnerArgs.timePeriodEnd) emptyResult.RowsAffected = 1 return emptyResult, nil } @@ -423,21 +401,13 @@ func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { if qr != nil { for _, row := range qr.Named().Rows { status := row["status"].ToString() - schema := row["table_schema"].ToString() - table := row["table_name"].ToString() - uuid := row["job_uuid"].ToString() - jobBatchTable := row["batch_info_table_name"].ToString() - batchInterval, _ := row["batch_interval_in_ms"].ToInt64() - batchSize, _ := row["batch_size"].ToInt64() - runningTimePeriodStart := row["running_time_period_start"].ToString() - runningTimePeriodEnd := row["running_time_period_end"].ToString() - periodStartTimePtr, periodEndTimePtr := getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd) - failPolicy := row["fail_policy"].ToString() - - if jc.checkDmlJobRunnable(uuid, status, table, periodStartTimePtr, periodEndTimePtr) { + runnerArgs := JobRunnerArgs{} + runnerArgs.initArgsByQueryResult(row) + + if jc.checkDmlJobRunnable(runnerArgs.uuid, status, runnerArgs.table, runnerArgs.timePeriodStart, runnerArgs.timePeriodEnd) { // 初始化Job在内存中的元数据,防止在dmlJobBatchRunner修改表中的状态前,scheduler多次启动同一个job - jc.initDMLJobRunningMeta(uuid, table) - go jc.dmlJobBatchRunner(uuid, table, schema, jobBatchTable, failPolicy, batchInterval, batchSize, periodStartTimePtr, periodEndTimePtr) + jc.initDMLJobRunningMeta(runnerArgs.uuid, runnerArgs.table) + go jc.dmlJobBatchRunner(runnerArgs.uuid, runnerArgs.table, runnerArgs.tableSchema, runnerArgs.batchInfoTable, runnerArgs.failPolicy, runnerArgs.batchInterval, runnerArgs.batchSize, runnerArgs.timePeriodStart, runnerArgs.timePeriodEnd) } } } @@ -616,41 +586,26 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab return "", err } - // 1.根据batchCountSQL生成查询pk值的select sql - // 1.1.获得PK信息 + // 1.根据batchCountSQL生成select PKs SQL pkInfos, err := jc.getTablePkInfo(ctx, tableSchema, table) if err != nil { return "", err } - - // 1.2.根据当前batch的batchCountSQL生成select sql,用于获得拆分后batch的拆分列start和end - // 只需要将batchCountSQL的投影部分(SelectExprs)从count(*)改为拆分列即可 - batchCountSQLStmtSelect, _ := batchCountSQLStmt.(*sqlparser.Select) - // 根据pk信息生成select exprs - var pkExprs []sqlparser.SelectExpr - for _, pkInfo := range pkInfos { - pkExprs = append(pkExprs, &sqlparser.AliasedExpr{Expr: sqlparser.NewColName(pkInfo.pkName)}) - } - oldBatchCountSQLStmtSelectExprs := batchCountSQLStmtSelect.SelectExprs - batchCountSQLStmtSelect.SelectExprs = pkExprs - batchSplitSelectSQL := sqlparser.String(batchCountSQLStmtSelect) - // batchCountSQLStmt在后续生成newBatchCountSQL时还需用到,因此这里将其恢复原样 - batchCountSQLStmtSelect.SelectExprs = oldBatchCountSQLStmtSelectExprs + selectPKsSQL := genSelectPKsSQL(batchCountSQLStmt, pkInfos) // 2.根据select sql将batch拆分,生成两个新的batch。 - //这里每次只将超过threshold的batch拆成两个batch而不是多个小于等于threshold的batch的原因是: + // 这里每次只将超过threshold的batch拆成两个batch而不是多个小于等于threshold的batch的原因是: // 拆成多个batch需要遍历完select的全部结果,这可能会导致超时 // 2.1.计算两个batch的batchPKStart和batchPKEnd。实际上,只要获得当前batch的新的PKEnd和新的batch的PKStart // 遍历前threshold+1条,依然使用同一个连接 - qr, err := conn.Exec(ctx, batchSplitSelectSQL, math.MaxInt32, true) - if err != nil { - return "", err - } - var curBatchNewEnd []sqltypes.Value var newBatchStart []sqltypes.Value + qr, err := conn.Exec(ctx, selectPKsSQL, math.MaxInt32, true) + if err != nil { + return "", err + } for rowCount, row := range qr.Rows { // 将原本batch的PKEnd设在threshold条数处 if int64(rowCount) == batchSize-1 { @@ -669,62 +624,29 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab } // 2.3.计算两个batch的batch start和end字段 - getBatchBeginAndEndSQL := fmt.Sprintf(sqlTemplateGetBatchBeginAndEnd, batchTable) - getBatchBeginAndEndQuery, err := sqlparser.ParseAndBind(getBatchBeginAndEndSQL, sqltypes.StringBindVariable(batchID)) - if err != nil { - return "", err - } - qr, err = conn.Exec(ctx, getBatchBeginAndEndQuery, math.MaxInt32, true) - if err != nil { - return "", err - } - if len(qr.Named().Rows) != 1 { - return "", errors.New("can not get batch begin and end") - } - currentBatchNewBeginStr := qr.Named().Rows[0]["batch_begin"].ToString() - newBatchEndStr := qr.Named().Rows[0]["batch_end"].ToString() - currentBatchNewEndStr, newBatchBeginStr, err := genBatchStartAndEndStr(curBatchNewEnd, newBatchStart) + currentBatchNewBeginStr, currentBatchNewEndStr, newBatchBeginStr, newBatchEndStr, err := getNewBatchesBeginAndEndStr(ctx, conn, batchTable, batchID, curBatchNewEnd, newBatchStart) if err != nil { return "", err } - // 3 将结果记录在表中:在batch表中更改旧的条目的sql,并插入新batch条目 - // 3.1.在表中更改旧的sql - updateBatchSQL := fmt.Sprintf(sqlTemplateUpdateBatchSQL, batchTable) - updateBatchSQLQuery, err := sqlparser.ParseAndBind(updateBatchSQL, - sqltypes.StringBindVariable(curBatchSQL), - sqltypes.StringBindVariable(currentBatchNewBeginStr), - sqltypes.StringBindVariable(currentBatchNewEndStr), - sqltypes.StringBindVariable(batchID)) - if err != nil { - return "", err - } - _, err = conn.Exec(ctx, updateBatchSQLQuery, math.MaxInt32, false) + // 3 将结果记录在表中:在batch表中更改原本batch的条目的sql,并插入新batch条目 + // 更改原本batch条目 + err = updateBatchInfoTableEntry(ctx, conn, batchTable, curBatchSQL, currentBatchNewBeginStr, currentBatchNewEndStr, batchID) if err != nil { return "", err } - // 3.2.插入新batch条目 - newCurrentBatchSQL = curBatchSQL + // 插入新batch条目 nextBatchID, err := genNewBatchID(batchID) if err != nil { return "", err } newBatchSize := expectedRow - batchSize - insertBatchSQL := fmt.Sprintf(sqlTemplateInsertBatchEntry, batchTable) - insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQL, - sqltypes.StringBindVariable(nextBatchID), - sqltypes.StringBindVariable(newBatchSQL), - sqltypes.StringBindVariable(newBatchCountSQL), - sqltypes.Int64BindVariable(newBatchSize), - sqltypes.StringBindVariable(newBatchBeginStr), - sqltypes.StringBindVariable(newBatchEndStr)) - if err != nil { - return "", err - } - _, err = conn.Exec(ctx, insertBatchSQLQuery, math.MaxInt32, false) + err = insertBatchInfoTableEntry(ctx, conn, batchTable, nextBatchID, newBatchSQL, newBatchCountSQL, newBatchBeginStr, newBatchEndStr, newBatchSize) if err != nil { return "", err } + + newCurrentBatchSQL = curBatchSQL return newCurrentBatchSQL, nil } @@ -760,7 +682,7 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, } // 检查是否在运维窗口内 - // todo,增加时区支持,以及是否可能由于脑裂问题导致错误fail掉job? + // todo feat 增加时区支持,以及是否可能由于脑裂问题导致错误fail掉job? if timePeriodStart != nil && timePeriodEnd != nil { currentTime := time.Now() if !(currentTime.After(*timePeriodStart) && currentTime.Before(*timePeriodEnd)) { @@ -802,12 +724,12 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, err = jc.execBatchAndRecord(ctx, tableSchema, table, batchSQL, batchCountSQL, uuid, batchTable, batchIDToExec, batchSize) // 如果执行batch时失败,则根据failPolicy决定处理策略 if err != nil { + // todo feat 支持batch并行时需要重新考虑逻辑 switch failPolicy { case failPolicyAbort: jc.FailJob(ctx, uuid, err.Error(), table) return case failPolicySkip: - // todo,由于目前batch是串行执行,不存在多个协程同时访问batch表的情况,因此暂时不用加锁。 _ = jc.updateBatchStatus(tableSchema, batchTable, failPolicySkip, batchIDToExec, err.Error()) continue case failPolicyPause: @@ -831,121 +753,40 @@ func (jc *JobController) deleteDMLJobRunningMeta(uuid, table string) { delete(jc.workingTables, table) } -func (jc *JobController) execSubtaskAndRecord(ctx context.Context, tableSchema, subtaskSQL, uuid string) (affectedRows int64, err error) { - defer jc.env.LogError() - - var setting pools.Setting - if tableSchema != "" { - setting.SetWithoutDBName(false) - setting.SetQuery(fmt.Sprintf("use %s", tableSchema)) - setting.SetResetQuery(fmt.Sprintf("use %s", jc.env.Config().DB.DBName)) - } - conn, err := jc.pool.Get(ctx, &setting) - defer conn.Recycle() - if err != nil { - return 0, err - } - - _, err = conn.Exec(ctx, "start transaction", math.MaxInt32, false) - if err != nil { - return 0, err - } - - qr, err := conn.Exec(ctx, subtaskSQL, math.MaxInt32, true) - affectedRows = int64(qr.RowsAffected) - - jc.tableMutex.Lock() - defer jc.tableMutex.Unlock() - recordRstSQL, err := sqlparser.ParseAndBind(sqlDMLJobUpdateAffectedRows, - sqltypes.Int64BindVariable(affectedRows), - sqltypes.StringBindVariable(uuid)) - _, err = conn.Exec(ctx, recordRstSQL, math.MaxInt32, false) - if err != nil { - return 0, err - } - _, err = conn.Exec(ctx, "commit", math.MaxInt32, false) - if err != nil { - return 0, err - } - - return affectedRows, nil -} - func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { ctx := context.Background() - // 1.启动时,先检查是否有处于"running"或"paused"的job,并恢复它们在内存的状态 - qr, _ := jc.execQuery(ctx, "", sqlDMLJobGetAllJobs) - if qr != nil { - - jc.workingTablesMutex.Lock() - jc.tableMutex.Lock() - - for _, row := range qr.Named().Rows { - status := row["status"].ToString() - tableSchema := row["table_schema"].ToString() - table := row["table_name"].ToString() - jobBatchTable := row["batch_info_table_name"].ToString() - uuid := row["job_uuid"].ToString() - batchInterval, _ := row["batch_interval_in_ms"].ToInt64() - batchSize, _ := row["batch_size"].ToInt64() - runningTimePeriodStart := row["running_time_period_start"].ToString() - runningTimePeriodEnd := row["running_time_period_end"].ToString() - periodStartTimePtr, periodEndTimePtr := getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd) - failPolicy := row["fail_policy"].ToString() - - switch status { - case runningStatus: - jc.initDMLJobRunningMeta(uuid, table) - go jc.dmlJobBatchRunner(uuid, table, tableSchema, jobBatchTable, failPolicy, batchInterval, batchSize, periodStartTimePtr, periodEndTimePtr) - case pausedStatus: - jc.initDMLJobRunningMeta(uuid, table) - } - } - - jc.workingTablesMutex.Unlock() - jc.tableMutex.Unlock() - } + jc.recoverJobsMetadata(ctx) - log.Info("check of running and paused done \n") + log.Info("jobHealthCheck: metadata of all running and paused jobs are restored to memory\n") // 内存状态恢复完毕后,唤醒Job调度协程 checkBeforeSchedule <- struct{}{} // 2.每隔一段时间轮询一次,根据job的状态进行不同的处理 timer := time.NewTicker(healthCheckInterval) defer timer.Stop() - for range timer.C { // 防止vttablet不再是primary时该协程继续执行 if jc.tabletTypeFunc() != topodatapb.TabletType_PRIMARY { return } - jc.tableMutex.Lock() + qr, _ := jc.execQuery(ctx, "", sqlDMLJobGetAllJobs) if qr != nil { for _, row := range qr.Named().Rows { status := row["status"].ToString() - statusSetTime := row["status_set_time"].ToString() - uuid := row["job_uuid"].ToString() - jobBatchTable := row["batch_info_table_name"].ToString() - tableSchema := row["table_schema"].ToString() + args := JobHealthCheckArgs{} + args.initArgsByQueryResult(row) switch status { + // 清理已经运行结束的job的表及条目 case canceledStatus, failedStatus, completedStatus: - statusSetTimeObj, err := time.Parse(time.RFC3339, statusSetTime) + err := jc.tableGC(ctx, args.uuid, args.tableSchema, args.batchInfoTable, args.statusSetTime) if err != nil { + log.Errorf("jobHealthCheck: tableGC failed, %s", err) continue } - if time.Now().After(statusSetTimeObj.Add(tableEntryGCInterval)) { - deleteJobSQL, err := sqlparser.ParseAndBind(sqlDMLJobDeleteJob, - sqltypes.StringBindVariable(uuid)) - if err != nil { - continue - } - _, _ = jc.execQuery(ctx, "", deleteJobSQL) - _, _ = jc.execQuery(ctx, tableSchema, fmt.Sprintf(sqlTemplateDropTable, jobBatchTable)) - } case runningStatus: // todo feat 增加对长时间未增加rows的running job的处理 } @@ -956,14 +797,70 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { } } +func (jc *JobController) recoverJobsMetadata(ctx context.Context) { + qr, _ := jc.execQuery(ctx, "", sqlDMLJobGetAllJobs) + if qr != nil { + jc.workingTablesMutex.Lock() + jc.tableMutex.Lock() + + for _, row := range qr.Named().Rows { + status := row["status"].ToString() + runnerArgs := JobRunnerArgs{} + runnerArgs.initArgsByQueryResult(row) + + switch status { + case runningStatus: + jc.initDMLJobRunningMeta(runnerArgs.uuid, runnerArgs.table) + go jc.dmlJobBatchRunner(runnerArgs.uuid, runnerArgs.table, runnerArgs.tableSchema, runnerArgs.batchInfoTable, runnerArgs.failPolicy, runnerArgs.batchInterval, runnerArgs.batchSize, runnerArgs.timePeriodStart, runnerArgs.timePeriodEnd) + case pausedStatus: + jc.initDMLJobRunningMeta(runnerArgs.uuid, runnerArgs.table) + } + } + + jc.workingTablesMutex.Unlock() + jc.tableMutex.Unlock() + } +} + +func (jc *JobController) tableGC(ctx context.Context, uuid, tableSchema, batchInfoTable, statusSetTime string) error { + statusSetTimeObj, err := time.Parse(time.RFC3339, statusSetTime) + if err != nil { + return err + } + // 如果Job设置结束状态的时间距离当前已经超过了一定的时间间隔,则删除该Job在表中的条目,并将其batch表删除 + if time.Now().After(statusSetTimeObj.Add(tableEntryGCInterval)) { + deleteJobSQL, err := sqlparser.ParseAndBind(sqlDMLJobDeleteJob, + sqltypes.StringBindVariable(uuid)) + if err != nil { + return err + } + _, _ = jc.execQuery(ctx, "", deleteJobSQL) + _, _ = jc.execQuery(ctx, tableSchema, fmt.Sprintf(sqlTemplateDropTable, batchInfoTable)) + } + return nil +} + func (jc *JobController) createJobBatches(jobUUID, sql, tableSchema string, userBatchSize int64) (tableName, batchTableName string, batchSize int64, err error) { - // 1.解析用户提交的DML sql,返回DML的各个部分。其中selectSQL用于确定每一个batch的pk范围,生成每一个batch所要执行的batch sql - selectSQL, tableName, wherePart, pkPart, whereExpr, pkInfos, stmt, err := jc.parseDML(sql, tableSchema) + // 1.对用户提交的DML sql进行合法性检验和解析 + tableName, whereExpr, stmt, err := parseDML(sql) + if err != nil { + return "", "", 0, err + } + // 2.检查PK列类型的合法性 + ctx := context.Background() + pkInfos, err := jc.getTablePkInfo(ctx, tableSchema, tableName) if err != nil { return "", "", 0, err } + if existUnSupportedPK(pkInfos) { + return "", "", 0, errors.New("the table has unsupported PK type") + } + // 3.拼接生成selectSQL,用于生成batch表 + pkCols := getPKColsStr(pkInfos) + selectSQL := fmt.Sprintf("select %s from %s.%s where %s order by %s", + pkCols, tableSchema, tableName, sqlparser.String(whereExpr), pkCols) - // 2.利用selectSQL为该job生成batch表,在此之前生成每个batch的batchSize + // 4.计算每个batch的batchSize // batchSize = min(userBatchSize, batchSizeThreshold / 每个表的index数量 * ratioOfBatchSizeThreshold) indexCount, err := jc.getIndexCount(tableSchema, tableName) if err != nil { @@ -975,105 +872,13 @@ func (jc *JobController) createJobBatches(jobUUID, sql, tableSchema string, user } else { batchSize = actualThreshold } - // 3.创建batchTable表,并在表中记录每个batch所要执行的sql - batchTableName, err = jc.createBatchTable(jobUUID, selectSQL, tableSchema, sql, tableName, wherePart, pkPart, whereExpr, stmt, pkInfos, batchSize) + // 5.基于selectSQL生成batch表 + batchTableName, err = jc.createBatchTable(jobUUID, selectSQL, tableSchema, sql, tableName, whereExpr, stmt, pkInfos, batchSize) return tableName, batchTableName, batchSize, err } -func (jc *JobController) parseDML(sql, tableSchema string) (selectSQL, tableName, wherePart, pkPart string, whereExpr sqlparser.Expr, pkInfos []PKInfo, stmt sqlparser.Statement, err error) { - stmt, err = sqlparser.Parse(sql) - if err != nil { - return "", "", "", "", nil, nil, nil, err - } - // 根据stmt,分析DML SQL的各个部分,包括涉及的表,where条件 - switch s := stmt.(type) { - case *sqlparser.Delete: - if len(s.TableExprs) != 1 { - return "", "", "", "", nil, nil, nil, errors.New("the number of table is more than one") - } - tableExpr, ok := s.TableExprs[0].(*sqlparser.AliasedTableExpr) - // todo feat 目前暂不支持join和多表 - if !ok { - return "", "", "", "", nil, nil, nil, errors.New("don't support join table now") - } - tableName = sqlparser.String(tableExpr) - wherePart = sqlparser.String(s.Where) - if wherePart == "" { - return "", "", "", "", nil, nil, nil, errors.New("the sql doesn't have where condition") - } - // 将where字符串中的"where"字符串删除,便于对真正的条件部分增加括号 - wherePart = wherePart[strings.Index(wherePart, "where")+5:] - whereExpr = s.Where.Expr - - limitPart := sqlparser.String(s.Limit) - if limitPart != "" { - return "", "", "", "", nil, nil, nil, errors.New("the SQL should not have limit clause") - } - orderByPart := sqlparser.String(s.OrderBy) - if orderByPart != "" { - return "", "", "", "", nil, nil, nil, errors.New("the SQL should not have order by clause") - } - - case *sqlparser.Update: - if len(s.TableExprs) != 1 { - return "", "", "", "", nil, nil, nil, errors.New("the number of table is more than one") - } - tableExpr, ok := s.TableExprs[0].(*sqlparser.AliasedTableExpr) - if !ok { - return "", "", "", "", nil, nil, nil, errors.New("don't support join table now") - } - tableName = sqlparser.String(tableExpr) - wherePart = sqlparser.String(s.Where) - if wherePart == "" { - return "", "", "", "", nil, nil, nil, errors.New("the sql doesn't have where condition") - } - // 将where字符串中的"where"字符串删除,便于对真正的条件部分增加括号 - wherePart = wherePart[strings.Index(wherePart, "where")+5:] - whereExpr = s.Where.Expr - - limitPart := sqlparser.String(s.Limit) - if limitPart != "" { - return "", "", "", "", nil, nil, nil, errors.New("the SQL should not have limit clause") - } - orderByPart := sqlparser.String(s.OrderBy) - if orderByPart != "" { - return "", "", "", "", nil, nil, nil, errors.New("the SQL should not have order by clause") - } - - default: - // todo feat support select...into, replace...into - return "", "", "", "", nil, nil, nil, errors.New("the type of sql is not supported") - } - - // 获得该DML所相关表的PK信息,将其中的PK列组成字符串pkPart,形如"PKCol1,PKCol2,PKCol3" - ctx := context.Background() - pkInfos, err = jc.getTablePkInfo(ctx, tableSchema, tableName) - if existUnSupportedPK(pkInfos) { - return "", "", "", "", nil, nil, nil, errors.New("the table has unsupported PK type") - } - if err != nil { - return "", "", "", "", nil, nil, nil, err - } - pkPart = "" - firstPK := true - for _, pkInfo := range pkInfos { - if !firstPK { - pkPart += "," - } - pkPart += pkInfo.pkName - firstPK = false - } - - // 将该DML的各部分信息组成batch select语句,用于生成每一个batch的pk范围 - selectSQL = fmt.Sprintf("select %s from %s.%s where %s order by %s", - pkPart, tableSchema, tableName, wherePart, pkPart) - - return selectSQL, tableName, wherePart, pkPart, whereExpr, pkInfos, stmt, err -} - -func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, tableName, wherePart, pkPart string, whereExpr sqlparser.Expr, stmt sqlparser.Statement, pkInfos []PKInfo, batchSize int64) (string, error) { +func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, tableName string, whereExpr sqlparser.Expr, stmt sqlparser.Statement, pkInfos []PKInfo, batchSize int64) (string, error) { ctx := context.Background() - // 执行selectSQL,获得有序的pk值结果集,以生成每一个batch要执行的batch SQL qr, err := jc.execQuery(ctx, "", selectSQL) if err != nil { @@ -1083,11 +888,10 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, return "", nil } + // todo feat 删除batchSQL,batchCountSQL,字段,在内存中生成具体的sql, mysql generate col 或者 go代码实现 // 为每一个DML job创建一张batch表,保存着该job被拆分成batches的具体信息。 // healthCheck协程会定时对处于结束状态(completed,canceled,failed)的job的batch表进行回收 batchTableName := "_vt_BATCH_" + strings.Replace(jobUUID, "-", "_", -1) - - // todo feat 删除batchSQL,batchCountSQL,字段,在内存中生成具体的sql, mysql generate col 或者 go代码实现 createTableSQL := fmt.Sprintf(sqlTemplateCreateBatchTable, batchTableName) _, err = jc.execQuery(ctx, tableSchema, createTableSQL) if err != nil { @@ -1100,7 +904,6 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, var currentBatchStart []sqltypes.Value var currentBatchEnd []sqltypes.Value currentBatchID := "1" - insertBatchSQLWithTableName := fmt.Sprintf(sqlTemplateInsertBatchEntry, batchTableName) for _, values := range qr.Rows { if currentBatchSize == 0 { @@ -1108,32 +911,12 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, } currentBatchEnd = values currentBatchSize++ - if currentBatchSize == batchSize { - batchSQL, finalWhereStr, err := genBatchSQL(sql, stmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) - if err != nil { - return "", err - } - countSQL := genCountSQL(tableSchema, tableName, finalWhereStr) - if err != nil { - return "", err - } - batchStartStr, batchEndStr, err := genBatchStartAndEndStr(currentBatchStart, currentBatchEnd) - if err != nil { - return "", err - } - currentBatchSize = 0 - insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQLWithTableName, - sqltypes.StringBindVariable(currentBatchID), - sqltypes.StringBindVariable(batchSQL), - sqltypes.StringBindVariable(countSQL), - sqltypes.Int64BindVariable(batchSize), - sqltypes.StringBindVariable(batchStartStr), - sqltypes.StringBindVariable(batchEndStr)) + batchSQL, countSQL, batchStartStr, batchEndStr, err := createBatchInfoTableEntry(tableSchema, tableName, sql, stmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) if err != nil { return "", err } - _, err = jc.execQuery(ctx, tableSchema, insertBatchSQLQuery) + err = jc.insertBatchInfoTableEntry(ctx, tableSchema, batchTableName, currentBatchID, batchSQL, countSQL, batchStartStr, batchEndStr, currentBatchSize) if err != nil { return "", err } @@ -1141,33 +924,16 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, if err != nil { return "", err } + currentBatchSize = 0 } } // 最后一个batch的行数不一定是batchSize,在循环结束时要将剩余的行数划分到最后一个batch中 if currentBatchSize != 0 { - batchSQL, finalWhereStr, err := genBatchSQL(sql, stmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) - if err != nil { - return "", err - } - countSQL := genCountSQL(tableSchema, tableName, finalWhereStr) - if err != nil { - return "", err - } - batchStartStr, batchEndStr, err := genBatchStartAndEndStr(currentBatchStart, currentBatchEnd) - if err != nil { - return "", err - } - insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQLWithTableName, - sqltypes.StringBindVariable(currentBatchID), - sqltypes.StringBindVariable(batchSQL), - sqltypes.StringBindVariable(countSQL), - sqltypes.Int64BindVariable(currentBatchSize), - sqltypes.StringBindVariable(batchStartStr), - sqltypes.StringBindVariable(batchEndStr)) + batchSQL, countSQL, batchStartStr, batchEndStr, err := createBatchInfoTableEntry(tableSchema, tableName, sql, stmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) if err != nil { return "", err } - _, err = jc.execQuery(ctx, tableSchema, insertBatchSQLQuery) + err = jc.insertBatchInfoTableEntry(ctx, tableSchema, batchTableName, currentBatchID, batchSQL, countSQL, batchStartStr, batchEndStr, currentBatchSize) if err != nil { return "", err } @@ -1175,6 +941,23 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, return batchTableName, nil } +func createBatchInfoTableEntry(tableSchema, tableName, sql string, sqlStmt sqlparser.Statement, whereExpr sqlparser.Expr, + currentBatchStart, currentBatchEnd []sqltypes.Value, pkInfos []PKInfo) (batchSQL, countSQL, batchStartStr, batchEndStr string, err error) { + batchSQL, finalWhereStr, err := genBatchSQL(sql, sqlStmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) + if err != nil { + return "", "", "", "", err + } + countSQL = genCountSQL(tableSchema, tableName, finalWhereStr) + if err != nil { + return "", "", "", "", err + } + batchStartStr, batchEndStr, err = genBatchStartAndEndStr(currentBatchStart, currentBatchEnd) + if err != nil { + return "", "", "", "", err + } + return batchSQL, countSQL, batchStartStr, batchEndStr, nil +} + // 通知jobScheduler让它立刻开始一次调度。 func (jc *JobController) notifyJobScheduler() { if jc.schedulerNotifyChan == nil { diff --git a/go/vt/vttablet/jobcontroller/sqls.go b/go/vt/vttablet/jobcontroller/sqls.go index 42da7b3686..4e776a6ffe 100644 --- a/go/vt/vttablet/jobcontroller/sqls.go +++ b/go/vt/vttablet/jobcontroller/sqls.go @@ -31,13 +31,13 @@ const ( table_name, batch_info_table_schema, batch_info_table_name, - batch_interval_in_ms, - batch_size, status, status_set_time, fail_policy, running_time_period_start, - running_time_period_end) values(%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a)` + running_time_period_end, + batch_interval_in_ms, + batch_size) values(%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a)` sqlDMLJobUpdateMessage = `update mysql.non_transactional_dml_jobs set message = %a diff --git a/go/vt/vttablet/jobcontroller/util.go b/go/vt/vttablet/jobcontroller/util.go index 585511e29c..f67dbce071 100644 --- a/go/vt/vttablet/jobcontroller/util.go +++ b/go/vt/vttablet/jobcontroller/util.go @@ -72,6 +72,87 @@ func (jc *JobController) execQuery(ctx context.Context, targetString, query stri } +func parseDML(sql string) (tableName string, whereExpr sqlparser.Expr, stmt sqlparser.Statement, err error) { + stmt, err = sqlparser.Parse(sql) + if err != nil { + return "", nil, nil, err + } + // 根据stmt,分析DML SQL的各个部分,包括涉及的表,where条件 + switch s := stmt.(type) { + case *sqlparser.Delete: + if len(s.TableExprs) != 1 { + return "", nil, nil, errors.New("the number of table is more than one") + } + tableExpr, ok := s.TableExprs[0].(*sqlparser.AliasedTableExpr) + // todo feat 目前暂不支持join和多表 + if !ok { + return "", nil, nil, errors.New("don't support join table now") + } + tableName = sqlparser.String(tableExpr) + // the sql should have where clause + if s.Where == nil { + return "", nil, nil, errors.New("the SQL should have where clause") + } + whereExpr = s.Where.Expr + // the sql should not have limit clause and order by clause + limitPart := sqlparser.String(s.Limit) + if limitPart != "" { + return "", nil, nil, errors.New("the SQL should not have limit clause") + } + orderByPart := sqlparser.String(s.OrderBy) + if orderByPart != "" { + return "", nil, nil, errors.New("the SQL should not have order by clause") + } + + case *sqlparser.Update: + if len(s.TableExprs) != 1 { + return "", nil, nil, errors.New("the number of table is more than one") + } + tableExpr, ok := s.TableExprs[0].(*sqlparser.AliasedTableExpr) + if !ok { + return "", nil, nil, errors.New("don't support join table now") + } + tableName = sqlparser.String(tableExpr) + // the sql should have where clause + if s.Where == nil { + return "", nil, nil, errors.New("the SQL should have where clause") + } + whereExpr = s.Where.Expr + // the sql should not have limit clause and order by clause + limitPart := sqlparser.String(s.Limit) + if limitPart != "" { + return "", nil, nil, errors.New("the SQL should not have limit clause") + } + orderByPart := sqlparser.String(s.OrderBy) + if orderByPart != "" { + return "", nil, nil, errors.New("the SQL should not have order by clause") + } + + default: + // todo feat support select...into, replace...into + return "", nil, nil, errors.New("the type of sql is not supported") + } + + if err != nil { + return "", nil, nil, err + } + + return tableName, whereExpr, stmt, err +} + +func getPKColsStr(pkInfos []PKInfo) string { + pkCols := "" + firstPK := true + for _, pkInfo := range pkInfos { + if !firstPK { + pkCols += "," + } + pkCols += pkInfo.pkName + firstPK = false + } + return pkCols +} + // 该函数拿锁 func (jc *JobController) updateJobMessage(ctx context.Context, uuid, message string) error { jc.tableMutex.Lock() @@ -351,3 +432,75 @@ func (jc *JobController) updateBatchStatus(batchTableSchema, batchTableName, sta _, err = jc.execQuery(context.Background(), batchTableSchema, query) return err } + +func (args *JobRunnerArgs) initArgsByQueryResult(row sqltypes.RowNamedValues) { + args.uuid = row["job_uuid"].ToString() + args.tableSchema = row["table_schema"].ToString() + args.table = row["table_name"].ToString() + args.batchInfoTable = row["batch_info_table_name"].ToString() + args.failPolicy = row["fail_policy"].ToString() + + batchInterval, _ := row["batch_interval_in_ms"].ToInt64() + batchSize, _ := row["batch_size"].ToInt64() + args.batchInterval = batchInterval + args.batchSize = batchSize + + runningTimePeriodStart := row["running_time_period_start"].ToString() + runningTimePeriodEnd := row["running_time_period_end"].ToString() + args.timePeriodStart, args.timePeriodEnd = getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd) + +} + +func (args *JobHealthCheckArgs) initArgsByQueryResult(row sqltypes.RowNamedValues) { + args.uuid = row["job_uuid"].ToString() + args.tableSchema = row["table_schema"].ToString() + args.batchInfoTable = row["batch_info_table_name"].ToString() + args.statusSetTime = row["status_set_time"].ToString() +} + +func (jc *JobController) insertBatchInfoTableEntry(ctx context.Context, tableSchema, batchTableName, currentBatchID, batchSQL, countSQL, batchStartStr, batchEndStr string, batchSize int64) (err error) { + insertBatchSQLWithTableName := fmt.Sprintf(sqlTemplateInsertBatchEntry, batchTableName) + insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQLWithTableName, + sqltypes.StringBindVariable(currentBatchID), + sqltypes.StringBindVariable(batchSQL), + sqltypes.StringBindVariable(countSQL), + sqltypes.Int64BindVariable(batchSize), + sqltypes.StringBindVariable(batchStartStr), + sqltypes.StringBindVariable(batchEndStr)) + if err != nil { + return err + } + _, err = jc.execQuery(ctx, tableSchema, insertBatchSQLQuery) + if err != nil { + return err + } + return nil +} + +func (jc *JobController) insertJobEntry(jobUUID, sql, tableSchema, tableName, batchInfoTableSchema, + batchInfoTable, jobStatus, statusSetTime, failPolicy, runningTimePeriodStart, runningTimePeriodEnd string, + timeGapInMs, batchSize int64) (err error) { + ctx := context.Background() + submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobSubmit, + sqltypes.StringBindVariable(jobUUID), + sqltypes.StringBindVariable(sql), + sqltypes.StringBindVariable(tableSchema), + sqltypes.StringBindVariable(tableName), + sqltypes.StringBindVariable(batchInfoTableSchema), + sqltypes.StringBindVariable(batchInfoTable), + sqltypes.StringBindVariable(jobStatus), + sqltypes.StringBindVariable(statusSetTime), + sqltypes.StringBindVariable(failPolicy), + sqltypes.StringBindVariable(runningTimePeriodStart), + sqltypes.StringBindVariable(runningTimePeriodEnd), + sqltypes.Int64BindVariable(timeGapInMs), + sqltypes.Int64BindVariable(batchSize)) + if err != nil { + return err + } + _, err = jc.execQuery(ctx, "", submitQuery) + if err != nil { + return err + } + return nil +} diff --git a/go/vt/vttablet/jobcontroller/util_test.go b/go/vt/vttablet/jobcontroller/util_test.go new file mode 100644 index 0000000000..be551d669a --- /dev/null +++ b/go/vt/vttablet/jobcontroller/util_test.go @@ -0,0 +1,58 @@ +/* +Copyright ApeCloud, Inc. +Licensed under the Apache v2(found in the LICENSE file in the root directory). +*/ + +package jobcontroller + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "vitess.io/vitess/go/vt/sqlparser" +) + +func TestParseDML(t *testing.T) { + // DELETE + tableName, whereExpr, _, err := parseDML("delete from t1 where id=1") + whereExprStr := sqlparser.String(whereExpr) + expectedTableName := "t1" + expectedWhereExpr := "id = 1" + assert.Equalf(t, expectedTableName, tableName, "table name") + assert.Equalf(t, expectedWhereExpr, whereExprStr, "where expr") + assert.Equal(t, nil, err) + + // UPDATE + tableName, whereExpr, _, err = parseDML("update t2 set c1 = '123' where id=2") + whereExprStr = sqlparser.String(whereExpr) + expectedTableName = "t2" + expectedWhereExpr = "id = 2" + assert.Equalf(t, expectedTableName, tableName, "table name") + assert.Equalf(t, expectedWhereExpr, whereExprStr, "where expr") + assert.Equal(t, nil, err) + + // error: the type of sql is not supported + _, _, _, err = parseDML("select * from t1") + assert.Equalf(t, "the type of sql is not supported", err.Error(), "error message: %s", err.Error()) + + // error: don't support join table now + _, _, _, err = parseDML("update t1 join t2 on t1.id = t2.id set t1.c1 = '123' where t1.id = 1") + assert.Equalf(t, "don't support join table now", err.Error(), "error message: %s", err.Error()) + + // support alias + _, _, _, err = parseDML("update t1 as mytable set mytable.c1 = '123' where mytable.id = 1") + assert.Equal(t, err, nil) + + // error: the SQL should have where clause + _, _, _, err = parseDML("delete from t1") + assert.Equalf(t, "the SQL should have where clause", err.Error(), "error message: %s", err.Error()) + + // error: the SQL should not have limit clause + _, _, _, err = parseDML("delete from t1 where id=1 limit 1") + assert.Equalf(t, "the SQL should not have limit clause", err.Error(), "error message: %s", err.Error()) + + // error: the SQL should not have order clause + _, _, _, err = parseDML("delete from t1 where id=1 order by c1") + assert.Equalf(t, "the SQL should not have order by clause", err.Error(), "error message: %s", err.Error()) +} From a528f8ad5d14c53c82486cc539ce88fa49008778 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Wed, 10 Jan 2024 15:21:20 +0800 Subject: [PATCH 42/54] fix: fix testcase Signed-off-by: newborn22 <953950914@qq.com> --- .../jobcontroller/batch_sql_related_test.go | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/go/vt/vttablet/jobcontroller/batch_sql_related_test.go b/go/vt/vttablet/jobcontroller/batch_sql_related_test.go index 1a1d8d0f2f..a7b462cf56 100644 --- a/go/vt/vttablet/jobcontroller/batch_sql_related_test.go +++ b/go/vt/vttablet/jobcontroller/batch_sql_related_test.go @@ -163,9 +163,8 @@ func TestBatchSQL(t *testing.T) { currentBatchEnd := []sqltypes.Value{sqltypes.NewInt64(9)} pkInfos := []PKInfo{{pkName: "pk1"}} batchSQL, finalWhereStr, _ := genBatchSQL(sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) - // Different from the 1st test case, here we enclose userWhereStr with parentheses because it has "or" operators. - expectedBatchSQL := fmt.Sprintf("update t set c = 1 where (%s) and %s", userWhereStr, pkConditionStr) - expectedWhereStr := fmt.Sprintf("(%s) and %s", userWhereStr, pkConditionStr) + expectedBatchSQL := fmt.Sprintf("update t set c = 1 where %s and %s", userWhereStr, pkConditionStr) + expectedWhereStr := fmt.Sprintf("%s and %s", userWhereStr, pkConditionStr) assert.Equalf(t, expectedBatchSQL, batchSQL, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) assert.Equalf(t, expectedWhereStr, finalWhereStr, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) @@ -187,7 +186,7 @@ func TestBatchSQL(t *testing.T) { // repeat the same steps but with different args userWhereStr = "1 = 1 and 2 = 2 or 3 > 2 and 1 > 3 or 3 > 4 and 1 = 1" - pkConditionStr = "((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))" + pkConditionStr = "((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))" sql = fmt.Sprintf("update t set c = 1 where %s", userWhereStr) stmt, _ = sqlparser.Parse(sql) whereExpr = stmt.(*sqlparser.Update).Where @@ -195,8 +194,9 @@ func TestBatchSQL(t *testing.T) { currentBatchEnd = []sqltypes.Value{sqltypes.NewInt64(9), sqltypes.NewInt64(9)} pkInfos = []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}} batchSQL, finalWhereStr, _ = genBatchSQL(sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) - expectedBatchSQL = fmt.Sprintf("update t set c = 1 where %s and %s", userWhereStr, pkConditionStr) - expectedWhereStr = fmt.Sprintf("%s and %s", userWhereStr, pkConditionStr) + // Different from the 1st test case, here we enclose userWhereStr with parentheses because it has "or" operators. + expectedBatchSQL = fmt.Sprintf("update t set c = 1 where (%s) and %s", userWhereStr, pkConditionStr) + expectedWhereStr = fmt.Sprintf("(%s) and %s", userWhereStr, pkConditionStr) assert.Equalf(t, expectedBatchSQL, batchSQL, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) assert.Equalf(t, expectedWhereStr, finalWhereStr, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) batchSQLStmt, _ = sqlparser.Parse(batchSQL) @@ -205,7 +205,6 @@ func TestBatchSQL(t *testing.T) { expectedUserWhereStr = userWhereStr assert.Equalf(t, expectedUserWhereStr, gotUserWhereStr, "getUserWhereExpr(%v)", stmt) - // 3. test getBatchSQLGreatThanAndLessThanExprNode base on batchSQL gtNode, lsNode = getBatchSQLGreatThanAndLessThanExprNode(batchSQLStmt) gtStr = sqlparser.String(gtNode) lsStr = sqlparser.String(lsNode) From 299bd56c6109e8bb2ef3abd182daabfd45e4243d Mon Sep 17 00:00:00 2001 From: earayu Date: Wed, 10 Jan 2024 20:27:08 +0800 Subject: [PATCH 43/54] feat: refactor DML JOB controller --- go/vt/vttablet/jobcontroller/controller.go | 150 +++++++++++---------- go/vt/vttablet/jobcontroller/util.go | 2 + 2 files changed, 78 insertions(+), 74 deletions(-) diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 8db7fa7b38..c0ea41c15c 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -98,11 +98,12 @@ type JobController struct { initMutex sync.Mutex + ctx context.Context + cancelOperation context.CancelFunc + workingTables map[string]bool // 用于调度时检测当前任务是否和正在工作的表冲突,paused、running状态的job的表都在里面 workingTablesMutex sync.Mutex - checkBeforeSchedule chan struct{} // 用于确保当healthCheck拉起crash的running job的runner协程后,job scheduler才开始运行 - schedulerNotifyChan chan struct{} // jobScheduler每隔一段时间运行一次调度。但当它收到这个chan的消息后,会立刻开始一次调度 } @@ -112,39 +113,40 @@ type PKInfo struct { } type JobRunnerArgs struct { - uuid, table, tableSchema, batchInfoTable, failPolicy string - batchInterval, batchSize int64 - timePeriodStart, timePeriodEnd *time.Time + uuid, table, tableSchema, batchInfoTable, failPolicy, status string + batchInterval, batchSize int64 + timePeriodStart, timePeriodEnd *time.Time } type JobHealthCheckArgs struct { - uuid, tableSchema, batchInfoTable, statusSetTime string + uuid, tableSchema, batchInfoTable, statusSetTime, status string } func (jc *JobController) Open() error { jc.initMutex.Lock() defer jc.initMutex.Unlock() if jc.tabletTypeFunc() == topodatapb.TabletType_PRIMARY { - jc.pool.Open(jc.env.Config().DB.AppConnector(), jc.env.Config().DB.DbaConnector(), jc.env.Config().DB.AppDebugConnector()) - - jc.workingTables = map[string]bool{} - jc.checkBeforeSchedule = make(chan struct{}) - jc.schedulerNotifyChan = make(chan struct{}, 1) - - go jc.jobHealthCheck(jc.checkBeforeSchedule) - go jc.jobScheduler(jc.checkBeforeSchedule) - initThrottleTicker() + jc.initJobController() + go jc.jobHealthCheck() } return nil } +func (jc *JobController) initJobController() { + jc.ctx, jc.cancelOperation = context.WithCancel(context.Background()) + jc.pool.Open(jc.env.Config().DB.AppConnector(), jc.env.Config().DB.DbaConnector(), jc.env.Config().DB.AppDebugConnector()) + jc.workingTables = map[string]bool{} + jc.schedulerNotifyChan = make(chan struct{}, 1) + initThrottleTicker() +} + func (jc *JobController) Close() { jc.initMutex.Lock() defer jc.initMutex.Unlock() - jc.pool.Close() - if jc.checkBeforeSchedule != nil { - close(jc.checkBeforeSchedule) + if jc.cancelOperation != nil { + jc.cancelOperation() } + jc.pool.Close() if jc.schedulerNotifyChan != nil { close(jc.schedulerNotifyChan) } @@ -252,8 +254,7 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run // 和cancel的相同点:都停止了runner协程 func (jc *JobController) PauseJob(uuid string) (*sqltypes.Result, error) { var emptyResult = &sqltypes.Result{} - ctx := context.Background() - status, err := jc.getStrJobInfo(ctx, uuid, "status") + status, err := jc.getStrJobInfo(jc.ctx, uuid, "status") if err != nil { return emptyResult, err } @@ -266,7 +267,7 @@ func (jc *JobController) PauseJob(uuid string) (*sqltypes.Result, error) { // 将job在表中的状态改为paused,runner在运行时如果检测到状态不是running,就会退出。 // pause虽然终止了runner协程,但是 statusSetTime := time.Now().Format(time.RFC3339) - qr, err := jc.updateJobStatus(ctx, uuid, pausedStatus, statusSetTime) + qr, err := jc.updateJobStatus(jc.ctx, uuid, pausedStatus, statusSetTime) if err != nil { return emptyResult, err } @@ -275,8 +276,7 @@ func (jc *JobController) PauseJob(uuid string) (*sqltypes.Result, error) { func (jc *JobController) ResumeJob(uuid string) (*sqltypes.Result, error) { var emptyResult = &sqltypes.Result{} - ctx := context.Background() - status, err := jc.getStrJobInfo(ctx, uuid, "status") + status, err := jc.getStrJobInfo(jc.ctx, uuid, "status") if err != nil { return emptyResult, err } @@ -291,7 +291,7 @@ func (jc *JobController) ResumeJob(uuid string) (*sqltypes.Result, error) { if err != nil { return emptyResult, err } - rst, err := jc.execQuery(ctx, "", query) + rst, err := jc.execQuery(jc.ctx, "", query) if err != nil { return emptyResult, err } @@ -311,8 +311,7 @@ func (jc *JobController) ResumeJob(uuid string) (*sqltypes.Result, error) { func (jc *JobController) LaunchJob(uuid string) (*sqltypes.Result, error) { var emptyResult = &sqltypes.Result{} - ctx := context.Background() - status, err := jc.getStrJobInfo(ctx, uuid, "status") + status, err := jc.getStrJobInfo(jc.ctx, uuid, "status") if err != nil { return emptyResult, err } @@ -321,13 +320,12 @@ func (jc *JobController) LaunchJob(uuid string) (*sqltypes.Result, error) { return emptyResult, nil } statusSetTime := time.Now().Format(time.RFC3339) - return jc.updateJobStatus(ctx, uuid, queuedStatus, statusSetTime) + return jc.updateJobStatus(jc.ctx, uuid, queuedStatus, statusSetTime) } func (jc *JobController) CancelJob(uuid string) (*sqltypes.Result, error) { var emptyResult = &sqltypes.Result{} - ctx := context.Background() - status, err := jc.getStrJobInfo(ctx, uuid, "status") + status, err := jc.getStrJobInfo(jc.ctx, uuid, "status") if err != nil { return emptyResult, nil } @@ -336,12 +334,12 @@ func (jc *JobController) CancelJob(uuid string) (*sqltypes.Result, error) { return emptyResult, nil } statusSetTime := time.Now().Format(time.RFC3339) - qr, err := jc.updateJobStatus(ctx, uuid, canceledStatus, statusSetTime) + qr, err := jc.updateJobStatus(jc.ctx, uuid, canceledStatus, statusSetTime) if err != nil { return emptyResult, nil } - tableName, _ := jc.getStrJobInfo(ctx, uuid, "table_name") + tableName, _ := jc.getStrJobInfo(jc.ctx, uuid, "table_name") // 相比于pause,cancel需要删除内存中的元数据 jc.deleteDMLJobRunningMeta(uuid, tableName) @@ -375,11 +373,9 @@ func (jc *JobController) FailJob(ctx context.Context, uuid, message, tableName s jc.notifyJobScheduler() } -func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { +func (jc *JobController) jobScheduler() { // 等待healthcare扫一遍后再进行 - <-checkBeforeSchedule - ctx := context.Background() timer := time.NewTicker(time.Duration(jobSchedulerRunningInterval)) defer timer.Stop() @@ -389,6 +385,8 @@ func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { return } select { + case <-jc.ctx.Done(): + return case <-timer.C: case <-jc.schedulerNotifyChan: } @@ -397,14 +395,13 @@ func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { jc.tableMutex.Lock() // 先提交的job先执行 - qr, _ := jc.execQuery(ctx, "", sqlDMLJobGetJobsToSchedule) + qr, _ := jc.execQuery(jc.ctx, "", sqlDMLJobGetJobsToSchedule) if qr != nil { for _, row := range qr.Named().Rows { - status := row["status"].ToString() runnerArgs := JobRunnerArgs{} runnerArgs.initArgsByQueryResult(row) - if jc.checkDmlJobRunnable(runnerArgs.uuid, status, runnerArgs.table, runnerArgs.timePeriodStart, runnerArgs.timePeriodEnd) { + if jc.checkDmlJobRunnable(runnerArgs.uuid, runnerArgs.status, runnerArgs.table, runnerArgs.timePeriodStart, runnerArgs.timePeriodEnd) { // 初始化Job在内存中的元数据,防止在dmlJobBatchRunner修改表中的状态前,scheduler多次启动同一个job jc.initDMLJobRunningMeta(runnerArgs.uuid, runnerArgs.table) go jc.dmlJobBatchRunner(runnerArgs.uuid, runnerArgs.table, runnerArgs.tableSchema, runnerArgs.batchInfoTable, runnerArgs.failPolicy, runnerArgs.batchInterval, runnerArgs.batchSize, runnerArgs.timePeriodStart, runnerArgs.timePeriodEnd) @@ -412,8 +409,8 @@ func (jc *JobController) jobScheduler(checkBeforeSchedule chan struct{}) { } } - jc.workingTablesMutex.Unlock() jc.tableMutex.Unlock() + jc.workingTablesMutex.Unlock() } } @@ -437,7 +434,7 @@ func (jc *JobController) checkDmlJobRunnable(jobUUID, status, table string, peri if err != nil { return false } - _, _ = jc.execQuery(context.Background(), "", submitQuery) + _, _ = jc.execQuery(jc.ctx, "", submitQuery) return false } } @@ -656,15 +653,18 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, timer := time.NewTicker(time.Duration(batchInterval * 1e6)) defer timer.Stop() - ctx := context.Background() - - _, err := jc.updateJobStatus(ctx, uuid, runningStatus, time.Now().Format(time.RFC3339)) + _, err := jc.updateJobStatus(jc.ctx, uuid, runningStatus, time.Now().Format(time.RFC3339)) if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) + jc.FailJob(jc.ctx, uuid, err.Error(), table) } // 在一个无限循环中等待定时器触发 - for range timer.C { + for { + select { + case <-jc.ctx.Done(): + return + case <-timer.C: + } // 防止vttablet不再是primary时该协程继续执行 if jc.tabletTypeFunc() != topodatapb.TabletType_PRIMARY { return @@ -672,9 +672,9 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, // 定时器触发时执行的函数 // 检查状态是否为running,可能为paused/canceled - status, err := jc.getStrJobInfo(ctx, uuid, "status") + status, err := jc.getStrJobInfo(jc.ctx, uuid, "status") if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) + jc.FailJob(jc.ctx, uuid, err.Error(), table) return } if status != runningStatus { @@ -686,9 +686,9 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, if timePeriodStart != nil && timePeriodEnd != nil { currentTime := time.Now() if !(currentTime.After(*timePeriodStart) && currentTime.Before(*timePeriodEnd)) { - _, err = jc.updateJobStatus(ctx, uuid, notInTimePeriodStatus, currentTime.Format(time.RFC3339)) + _, err = jc.updateJobStatus(jc.ctx, uuid, notInTimePeriodStatus, currentTime.Format(time.RFC3339)) if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) + jc.FailJob(jc.ctx, uuid, err.Error(), table) } return } @@ -700,42 +700,42 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, } // 获取本次要执行的batch的batchId - batchIDToExec, err := jc.getBatchIDToExec(ctx, tableSchema, batchTable) + batchIDToExec, err := jc.getBatchIDToExec(jc.ctx, tableSchema, batchTable) if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) + jc.FailJob(jc.ctx, uuid, err.Error(), table) return } if batchIDToExec == "" { // 意味着所有的batch都已经执行完毕,则退出 - _, err = jc.CompleteJob(ctx, uuid, table) + _, err = jc.CompleteJob(jc.ctx, uuid, table) if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) + jc.FailJob(jc.ctx, uuid, err.Error(), table) } return } - batchSQL, batchCountSQL, err := jc.getBatchSQLsByID(ctx, batchIDToExec, batchTable, tableSchema) + batchSQL, batchCountSQL, err := jc.getBatchSQLsByID(jc.ctx, batchIDToExec, batchTable, tableSchema) if err != nil { - jc.FailJob(ctx, uuid, err.Error(), table) + jc.FailJob(jc.ctx, uuid, err.Error(), table) return } // 执行当前batch的batch sql,并获得下一要执行的batchID - err = jc.execBatchAndRecord(ctx, tableSchema, table, batchSQL, batchCountSQL, uuid, batchTable, batchIDToExec, batchSize) + err = jc.execBatchAndRecord(jc.ctx, tableSchema, table, batchSQL, batchCountSQL, uuid, batchTable, batchIDToExec, batchSize) // 如果执行batch时失败,则根据failPolicy决定处理策略 if err != nil { // todo feat 支持batch并行时需要重新考虑逻辑 switch failPolicy { case failPolicyAbort: - jc.FailJob(ctx, uuid, err.Error(), table) + jc.FailJob(jc.ctx, uuid, err.Error(), table) return case failPolicySkip: _ = jc.updateBatchStatus(tableSchema, batchTable, failPolicySkip, batchIDToExec, err.Error()) continue case failPolicyPause: msg := fmt.Sprintf("batch %s failed, pause job: %s", batchIDToExec, err.Error()) - _ = jc.updateJobMessage(ctx, uuid, msg) - _, _ = jc.updateJobStatus(ctx, uuid, pausedStatus, time.Now().Format(time.RFC3339)) + _ = jc.updateJobMessage(jc.ctx, uuid, msg) + _, _ = jc.updateJobStatus(jc.ctx, uuid, pausedStatus, time.Now().Format(time.RFC3339)) return } } @@ -753,36 +753,39 @@ func (jc *JobController) deleteDMLJobRunningMeta(uuid, table string) { delete(jc.workingTables, table) } -func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { - ctx := context.Background() +func (jc *JobController) jobHealthCheck() { // 1.启动时,先检查是否有处于"running"或"paused"的job,并恢复它们在内存的状态 - jc.recoverJobsMetadata(ctx) + jc.recoverJobsMetadata(jc.ctx) log.Info("jobHealthCheck: metadata of all running and paused jobs are restored to memory\n") // 内存状态恢复完毕后,唤醒Job调度协程 - checkBeforeSchedule <- struct{}{} + go jc.jobScheduler() // 2.每隔一段时间轮询一次,根据job的状态进行不同的处理 timer := time.NewTicker(healthCheckInterval) defer timer.Stop() - for range timer.C { + for { + select { + case <-jc.ctx.Done(): + return + case <-timer.C: + } // 防止vttablet不再是primary时该协程继续执行 if jc.tabletTypeFunc() != topodatapb.TabletType_PRIMARY { return } jc.tableMutex.Lock() - qr, _ := jc.execQuery(ctx, "", sqlDMLJobGetAllJobs) + qr, _ := jc.execQuery(jc.ctx, "", sqlDMLJobGetAllJobs) if qr != nil { for _, row := range qr.Named().Rows { - status := row["status"].ToString() args := JobHealthCheckArgs{} args.initArgsByQueryResult(row) - switch status { + switch args.status { // 清理已经运行结束的job的表及条目 case canceledStatus, failedStatus, completedStatus: - err := jc.tableGC(ctx, args.uuid, args.tableSchema, args.batchInfoTable, args.statusSetTime) + err := jc.tableGC(jc.ctx, args.uuid, args.tableSchema, args.batchInfoTable, args.statusSetTime) if err != nil { log.Errorf("jobHealthCheck: tableGC failed, %s", err) continue @@ -794,6 +797,7 @@ func (jc *JobController) jobHealthCheck(checkBeforeSchedule chan struct{}) { } jc.tableMutex.Unlock() + } } @@ -847,8 +851,7 @@ func (jc *JobController) createJobBatches(jobUUID, sql, tableSchema string, user return "", "", 0, err } // 2.检查PK列类型的合法性 - ctx := context.Background() - pkInfos, err := jc.getTablePkInfo(ctx, tableSchema, tableName) + pkInfos, err := jc.getTablePkInfo(jc.ctx, tableSchema, tableName) if err != nil { return "", "", 0, err } @@ -878,9 +881,8 @@ func (jc *JobController) createJobBatches(jobUUID, sql, tableSchema string, user } func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, tableName string, whereExpr sqlparser.Expr, stmt sqlparser.Statement, pkInfos []PKInfo, batchSize int64) (string, error) { - ctx := context.Background() // 执行selectSQL,获得有序的pk值结果集,以生成每一个batch要执行的batch SQL - qr, err := jc.execQuery(ctx, "", selectSQL) + qr, err := jc.execQuery(jc.ctx, "", selectSQL) if err != nil { return "", err } @@ -893,7 +895,7 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, // healthCheck协程会定时对处于结束状态(completed,canceled,failed)的job的batch表进行回收 batchTableName := "_vt_BATCH_" + strings.Replace(jobUUID, "-", "_", -1) createTableSQL := fmt.Sprintf(sqlTemplateCreateBatchTable, batchTableName) - _, err = jc.execQuery(ctx, tableSchema, createTableSQL) + _, err = jc.execQuery(jc.ctx, tableSchema, createTableSQL) if err != nil { return "", err } @@ -916,7 +918,7 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, if err != nil { return "", err } - err = jc.insertBatchInfoTableEntry(ctx, tableSchema, batchTableName, currentBatchID, batchSQL, countSQL, batchStartStr, batchEndStr, currentBatchSize) + err = jc.insertBatchInfoTableEntry(jc.ctx, tableSchema, batchTableName, currentBatchID, batchSQL, countSQL, batchStartStr, batchEndStr, currentBatchSize) if err != nil { return "", err } @@ -933,7 +935,7 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, if err != nil { return "", err } - err = jc.insertBatchInfoTableEntry(ctx, tableSchema, batchTableName, currentBatchID, batchSQL, countSQL, batchStartStr, batchEndStr, currentBatchSize) + err = jc.insertBatchInfoTableEntry(jc.ctx, tableSchema, batchTableName, currentBatchID, batchSQL, countSQL, batchStartStr, batchEndStr, currentBatchSize) if err != nil { return "", err } diff --git a/go/vt/vttablet/jobcontroller/util.go b/go/vt/vttablet/jobcontroller/util.go index f67dbce071..985b525c84 100644 --- a/go/vt/vttablet/jobcontroller/util.go +++ b/go/vt/vttablet/jobcontroller/util.go @@ -439,6 +439,7 @@ func (args *JobRunnerArgs) initArgsByQueryResult(row sqltypes.RowNamedValues) { args.table = row["table_name"].ToString() args.batchInfoTable = row["batch_info_table_name"].ToString() args.failPolicy = row["fail_policy"].ToString() + args.status = row["status"].ToString() batchInterval, _ := row["batch_interval_in_ms"].ToInt64() batchSize, _ := row["batch_size"].ToInt64() @@ -456,6 +457,7 @@ func (args *JobHealthCheckArgs) initArgsByQueryResult(row sqltypes.RowNamedValue args.tableSchema = row["table_schema"].ToString() args.batchInfoTable = row["batch_info_table_name"].ToString() args.statusSetTime = row["status_set_time"].ToString() + args.status = row["status"].ToString() } func (jc *JobController) insertBatchInfoTableEntry(ctx context.Context, tableSchema, batchTableName, currentBatchID, batchSQL, countSQL, batchStartStr, batchEndStr string, batchSize int64) (err error) { From 6d9b575ab878bed042afa2691b9abdda7c86db27 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Fri, 12 Jan 2024 00:11:35 +0800 Subject: [PATCH 44/54] feat: register flag in fs; table gc Signed-off-by: newborn22 <953950914@qq.com> --- .../schema/job/non_transactional_dml_jobs.sql | 1 + go/vt/sqlparser/comments.go | 2 +- .../jobcontroller/batch_sql_related.go | 4 +- .../jobcontroller/batch_sql_related_test.go | 12 +- go/vt/vttablet/jobcontroller/controller.go | 149 ++++++++++++------ go/vt/vttablet/jobcontroller/sqls.go | 5 +- go/vt/vttablet/jobcontroller/throttle.go | 2 +- go/vt/vttablet/jobcontroller/util.go | 91 ++++++++++- go/vt/vttablet/jobcontroller/util_test.go | 68 +++++++- 9 files changed, 272 insertions(+), 62 deletions(-) diff --git a/go/vt/sidecardb/schema/job/non_transactional_dml_jobs.sql b/go/vt/sidecardb/schema/job/non_transactional_dml_jobs.sql index 6cec771ab8..7f158d3812 100644 --- a/go/vt/sidecardb/schema/job/non_transactional_dml_jobs.sql +++ b/go/vt/sidecardb/schema/job/non_transactional_dml_jobs.sql @@ -24,6 +24,7 @@ CREATE TABLE IF NOT EXISTS mysql.non_transactional_dml_jobs `batch_info_table_name` varchar(256) NOT NULL UNIQUE, `status` varchar(128) NOT NULL, `status_set_time` timestamp NOT NULL, + `time_zone` varchar(16) NOT NULL, `message` varchar(2048) NULL DEFAULT NULL, `dml_sql` text NOT NULL, `batch_interval_in_ms` bigint NOT NULL , diff --git a/go/vt/sqlparser/comments.go b/go/vt/sqlparser/comments.go index 40f0d3c8c7..8ea2a4e9bc 100644 --- a/go/vt/sqlparser/comments.go +++ b/go/vt/sqlparser/comments.go @@ -59,7 +59,7 @@ const ( DirectiveRole = "ROLE" DirectiveDMLSplit = "DML_SPLIT" - DirectiveDMLTimeGap = "DML_TIME_GAP" + DirectiveDMLTimeGap = "DML_BATCH_INTERVAL" DirectiveBATCHSIZE = "DML_BATCH_SIZE" DirectiveDMLPostponeLaunch = "DML_POSTPONE_LAUNCH" DirectiveDMLAutoRetry = "DML_FAIL_POLICY" diff --git a/go/vt/vttablet/jobcontroller/batch_sql_related.go b/go/vt/vttablet/jobcontroller/batch_sql_related.go index 75fa740f46..f0901d4d8e 100644 --- a/go/vt/vttablet/jobcontroller/batch_sql_related.go +++ b/go/vt/vttablet/jobcontroller/batch_sql_related.go @@ -81,8 +81,7 @@ func genSQLByReplaceWhereExprNode(stmt sqlparser.Statement, whereExpr sqlparser. } } -// todo newborn22 对参数进行调整 -func genBatchSQL(sql string, stmt sqlparser.Statement, whereExpr sqlparser.Expr, currentBatchStart, currentBatchEnd []sqltypes.Value, pkInfos []PKInfo) (batchSQL, finalWhereStr string, err error) { +func genBatchSQL(stmt sqlparser.Statement, whereExpr sqlparser.Expr, currentBatchStart, currentBatchEnd []sqltypes.Value, pkInfos []PKInfo) (batchSQL, finalWhereStr string, err error) { // 1. 生成>=的部分 greatThanPart, err := genPKsGreaterEqualOrLessEqualStr(pkInfos, currentBatchStart, true) if err != nil { @@ -110,7 +109,6 @@ func genBatchSQL(sql string, stmt sqlparser.Statement, whereExpr sqlparser.Expr, return batchSQL, finalWhereStr, nil } -// todo newborn22 batchSQL和batchCountSQL对浮点数进行拦截,可能在获得pkInfo时就进行拦截。 // 拆分列所支持的类型需要满足以下条件: // 1.在sql中可以正确地使用between或>=,<=进行比较运算,且没有精度问题。 // 2.可以转换成go中的int64,float64或string三种类型之一,且转换后,在golang中的比较规则和mysql中的比较规则相同 diff --git a/go/vt/vttablet/jobcontroller/batch_sql_related_test.go b/go/vt/vttablet/jobcontroller/batch_sql_related_test.go index a7b462cf56..fdf5c424e3 100644 --- a/go/vt/vttablet/jobcontroller/batch_sql_related_test.go +++ b/go/vt/vttablet/jobcontroller/batch_sql_related_test.go @@ -70,6 +70,8 @@ func TestGenPKsGreaterEqualOrLessEqual(t *testing.T) { } } +// todo 函数的参数合法性检查 +// todo 1.pk的类型 2.where not, 子查询...... func TestGenBatchSQL(t *testing.T) { sql := "update t set c = 1 where 1 = 1 or 2 = 2 and 3 = 3" stmt, _ := sqlparser.Parse(sql) @@ -77,7 +79,7 @@ func TestGenBatchSQL(t *testing.T) { currentBatchStart := []sqltypes.Value{sqltypes.NewInt64(1)} currentBatchEnd := []sqltypes.Value{sqltypes.NewInt64(9)} pkInfos := []PKInfo{{pkName: "pk1"}} - batchSQL, finalWhereStr, _ := genBatchSQL(sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + batchSQL, finalWhereStr, _ := genBatchSQL(stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) expectedBatchSQL := "update t set c = 1 where (1 = 1 or 2 = 2 and 3 = 3) and (pk1 >= 1 and pk1 <= 9)" expectedWhereStr := "(1 = 1 or 2 = 2 and 3 = 3) and (pk1 >= 1 and pk1 <= 9)" assert.Equalf(t, expectedBatchSQL, batchSQL, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) @@ -89,7 +91,7 @@ func TestGenBatchSQL(t *testing.T) { currentBatchStart = []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(1)} currentBatchEnd = []sqltypes.Value{sqltypes.NewInt64(9), sqltypes.NewInt64(9)} pkInfos = []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}} - batchSQL, finalWhereStr, _ = genBatchSQL(sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + batchSQL, finalWhereStr, _ = genBatchSQL(stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) expectedBatchSQL = "update t set c = 1 where (1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))" expectedWhereStr = "(1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))" assert.Equalf(t, expectedBatchSQL, batchSQL, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) @@ -101,7 +103,7 @@ func TestGenBatchSQL(t *testing.T) { currentBatchStart = []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(1), sqltypes.NewInt64(1)} currentBatchEnd = []sqltypes.Value{sqltypes.NewInt64(9), sqltypes.NewInt64(9), sqltypes.NewInt64(9)} pkInfos = []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}, {pkName: "pk3"}} - batchSQL, finalWhereStr, _ = genBatchSQL(sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + batchSQL, finalWhereStr, _ = genBatchSQL(stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) expectedBatchSQL = "update t set c = 1 where (1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 > 1 or pk1 = 1 and pk2 = 1 and pk3 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 < 9 or pk1 = 9 and pk2 = 9 and pk3 <= 9))" expectedWhereStr = "(1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 > 1 or pk1 = 1 and pk2 = 1 and pk3 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 < 9 or pk1 = 9 and pk2 = 9 and pk3 <= 9))" assert.Equalf(t, expectedBatchSQL, batchSQL, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) @@ -162,7 +164,7 @@ func TestBatchSQL(t *testing.T) { currentBatchStart := []sqltypes.Value{sqltypes.NewInt64(1)} currentBatchEnd := []sqltypes.Value{sqltypes.NewInt64(9)} pkInfos := []PKInfo{{pkName: "pk1"}} - batchSQL, finalWhereStr, _ := genBatchSQL(sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + batchSQL, finalWhereStr, _ := genBatchSQL(stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) expectedBatchSQL := fmt.Sprintf("update t set c = 1 where %s and %s", userWhereStr, pkConditionStr) expectedWhereStr := fmt.Sprintf("%s and %s", userWhereStr, pkConditionStr) assert.Equalf(t, expectedBatchSQL, batchSQL, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) @@ -193,7 +195,7 @@ func TestBatchSQL(t *testing.T) { currentBatchStart = []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(1)} currentBatchEnd = []sqltypes.Value{sqltypes.NewInt64(9), sqltypes.NewInt64(9)} pkInfos = []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}} - batchSQL, finalWhereStr, _ = genBatchSQL(sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + batchSQL, finalWhereStr, _ = genBatchSQL(stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) // Different from the 1st test case, here we enclose userWhereStr with parentheses because it has "or" operators. expectedBatchSQL = fmt.Sprintf("update t set c = 1 where (%s) and %s", userWhereStr, pkConditionStr) expectedWhereStr = fmt.Sprintf("(%s) and %s", userWhereStr, pkConditionStr) diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index c0ea41c15c..055e6f763d 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -14,6 +14,10 @@ import ( "sync" "time" + "github.com/spf13/pflag" + + "vitess.io/vitess/go/vt/servenv" + "github.com/pingcap/failpoint" "vitess.io/vitess/go/vt/failpointkey" @@ -33,21 +37,35 @@ import ( "vitess.io/vitess/go/vt/vttablet/tabletserver/tabletenv" ) -// config -const ( - databasePoolSize = 5 - defaultBatchSize = 100 - - healthCheckInterval = 5000 * time.Millisecond // ms - defaultBatchInterval = 1000 // 1000ms - tableEntryGCInterval = 24 * time.Hour - jobSchedulerRunningInterval = 10 * time.Second - throttleCheckInterval = 250 * time.Millisecond +var ( + databasePoolSize = 5 + defaultBatchSize = 1000 // + monitorInterval = 5000 // ms + defaultBatchInterval = 1 // ms + tableGCInterval = 10 // hour + jobSchedulerRunningInterval = 24 // second + throttleCheckInterval = 250 // ms g batchSizeThreshold = 10000 ratioOfBatchSizeThreshold = 0.5 ) +func registerFlags(fs *pflag.FlagSet) { + fs.IntVar(&databasePoolSize, "non_transactional_dml_database_pool_size", databasePoolSize, "the number of database connection to mysql") + fs.IntVar(&defaultBatchSize, "non_transactional_dml_default_batch_size", defaultBatchSize, "the number of rows to be processed in one batch by default") + fs.IntVar(&monitorInterval, "non_transactional_dml_healthcheck_interval", monitorInterval, "the loop interval of job monitor in milliseconds") + fs.IntVar(&defaultBatchInterval, "non_transactional_dml_default_batch_interval", defaultBatchInterval, "the interval of batch processing in milliseconds by default") + fs.IntVar(&tableGCInterval, "non_transactional_dml_table_gc_interval", tableGCInterval, "the interval of table GC in hours") + fs.IntVar(&jobSchedulerRunningInterval, "non_transactional_dml_job_scheduler_running_interval", jobSchedulerRunningInterval, "the interval of job scheduler running in seconds") + fs.IntVar(&throttleCheckInterval, "non_transactional_dml_throttle_check_interval", throttleCheckInterval, "the interval of throttle check in milliseconds") + fs.IntVar(&batchSizeThreshold, "non_transactional_dml_batch_size_threshold", batchSizeThreshold, "the threshold of batch size") + fs.Float64Var(&ratioOfBatchSizeThreshold, "non_transactional_dml_batch_size_threshold_ratio", ratioOfBatchSizeThreshold, "final threshold = table index numbers * ratio * non_transactional_dml_batch_size_threshold") +} + +func init() { + servenv.OnParseFor("vttablet", registerFlags) +} + // commands for DML job const ( SubmitJob = "submit_job" @@ -67,9 +85,10 @@ const ( // 当batch执行失败时的策略,需要注意的时,如果Job在执行batch之外的其他地方发生了错误,则Job会直接变成failed状态,而与failPolicy无关 const ( - failPolicySkip = "skip" // 跳过当前batch,继续执行下一个batch - failPolicyPause = "pause" // 暂停当前job - failPolicyAbort = "abort" // fail当前job + failPolicySkip = "skip" // 跳过当前batch,继续执行下一个batch + failPolicyPause = "pause" // 暂停当前job + failPolicyAbort = "abort" // fail当前job + failPolicyRetryThenPause = "retry_then_pause" defaultFailPolicy = failPolicyAbort ) @@ -118,8 +137,8 @@ type JobRunnerArgs struct { timePeriodStart, timePeriodEnd *time.Time } -type JobHealthCheckArgs struct { - uuid, tableSchema, batchInfoTable, statusSetTime, status string +type JobMonitorArgs struct { + uuid, tableSchema, batchInfoTable, statusSetTime, status, timeZone string } func (jc *JobController) Open() error { @@ -127,7 +146,7 @@ func (jc *JobController) Open() error { defer jc.initMutex.Unlock() if jc.tabletTypeFunc() == topodatapb.TabletType_PRIMARY { jc.initJobController() - go jc.jobHealthCheck() + go jc.jobMonitor() } return nil } @@ -186,7 +205,7 @@ func (jc *JobController) HandleRequest(command, sql, jobUUID, tableSchema, expir return &sqltypes.Result{}, fmt.Errorf("unknown command: %s", command) } -func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, runningTimePeriodEnd string, timeGapInMs, userBatchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { +func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, runningTimePeriodEnd string, batchIntervalInMs, userBatchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { jc.tableMutex.Lock() defer jc.tableMutex.Unlock() @@ -195,8 +214,9 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run return nil, err } sql = sqlparser.StripComments(sql) - if timeGapInMs == 0 { - timeGapInMs = int64(defaultBatchInterval) + if batchIntervalInMs == 0 { + // todo feat 不设置时间间隔,由throttle进行控制 + batchIntervalInMs = int64(defaultBatchInterval) } if userBatchSize == 0 { userBatchSize = int64(defaultBatchSize) @@ -240,14 +260,14 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run } err = jc.insertJobEntry(jobUUID, sql, tableSchema, tableName, batchInfoTableSchema, batchInfoTable, - jobStatus, statusSetTime, failPolicy, runningTimePeriodStart, runningTimePeriodEnd, timeGapInMs, batchSize) + jobStatus, statusSetTime, failPolicy, runningTimePeriodStart, runningTimePeriodEnd, batchIntervalInMs, batchSize) if err != nil { return &sqltypes.Result{}, err } jc.notifyJobScheduler() - return jc.buildJobSubmitResult(jobUUID, batchInfoTable, timeGapInMs, batchSize, postponeLaunch, failPolicy), nil + return jc.buildJobSubmitResult(jobUUID, batchInfoTable, batchIntervalInMs, batchSize, postponeLaunch, failPolicy), nil } // 和cancel的区别:1.pasue不会删除元数据 2.cancel状态的job在经过一段时间后会被后台协程回收 @@ -342,7 +362,7 @@ func (jc *JobController) CancelJob(uuid string) (*sqltypes.Result, error) { tableName, _ := jc.getStrJobInfo(jc.ctx, uuid, "table_name") // 相比于pause,cancel需要删除内存中的元数据 - jc.deleteDMLJobRunningMeta(uuid, tableName) + jc.deleteDMLJobRunningMeta(tableName) jc.notifyJobScheduler() @@ -369,14 +389,14 @@ func (jc *JobController) FailJob(ctx context.Context, uuid, message, tableName s statusSetTime := time.Now().Format(time.RFC3339) _, _ = jc.updateJobStatus(ctx, uuid, failedStatus, statusSetTime) - jc.deleteDMLJobRunningMeta(uuid, tableName) + jc.deleteDMLJobRunningMeta(tableName) jc.notifyJobScheduler() } func (jc *JobController) jobScheduler() { // 等待healthcare扫一遍后再进行 - timer := time.NewTicker(time.Duration(jobSchedulerRunningInterval)) + timer := time.NewTicker(time.Duration(jobSchedulerRunningInterval) * time.Hour) defer timer.Stop() for { @@ -403,7 +423,7 @@ func (jc *JobController) jobScheduler() { if jc.checkDmlJobRunnable(runnerArgs.uuid, runnerArgs.status, runnerArgs.table, runnerArgs.timePeriodStart, runnerArgs.timePeriodEnd) { // 初始化Job在内存中的元数据,防止在dmlJobBatchRunner修改表中的状态前,scheduler多次启动同一个job - jc.initDMLJobRunningMeta(runnerArgs.uuid, runnerArgs.table) + jc.initDMLJobRunningMeta(runnerArgs.table) go jc.dmlJobBatchRunner(runnerArgs.uuid, runnerArgs.table, runnerArgs.tableSchema, runnerArgs.batchInfoTable, runnerArgs.failPolicy, runnerArgs.batchInterval, runnerArgs.batchSize, runnerArgs.timePeriodStart, runnerArgs.timePeriodEnd) } } @@ -476,7 +496,7 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta } // 2.查询batch sql预计影响的行数,如果超过阈值,则生成新的batch ID - batchCountSQLForShare := batchCountSQL + " FOR UPDATE" + batchCountSQLForShare := batchCountSQL + " FOR SHARE" qr, err := conn.Exec(ctx, batchCountSQLForShare, math.MaxInt32, true) if err != nil { return err @@ -649,8 +669,7 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, failPolicy string, batchInterval, batchSize int64, timePeriodStart, timePeriodEnd *time.Time) { - // batchInterval 单位ms,duration输入ns,应该乘上1000000 - timer := time.NewTicker(time.Duration(batchInterval * 1e6)) + timer := time.NewTicker(time.Duration(batchInterval) * time.Millisecond) defer timer.Stop() _, err := jc.updateJobStatus(jc.ctx, uuid, runningStatus, time.Now().Format(time.RFC3339)) @@ -737,32 +756,35 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, _ = jc.updateJobMessage(jc.ctx, uuid, msg) _, _ = jc.updateJobStatus(jc.ctx, uuid, pausedStatus, time.Now().Format(time.RFC3339)) return + // todo feat 增加retryThenPause策略 + case failPolicyRetryThenPause: } } } } // 调用该函数时,需要外部要获取相关的锁 -func (jc *JobController) initDMLJobRunningMeta(uuid, table string) { +func (jc *JobController) initDMLJobRunningMeta(table string) { jc.workingTables[table] = true } -func (jc *JobController) deleteDMLJobRunningMeta(uuid, table string) { +func (jc *JobController) deleteDMLJobRunningMeta(table string) { jc.workingTablesMutex.Lock() defer jc.workingTablesMutex.Unlock() delete(jc.workingTables, table) } -func (jc *JobController) jobHealthCheck() { +func (jc *JobController) jobMonitor() { // 1.启动时,先检查是否有处于"running"或"paused"的job,并恢复它们在内存的状态 jc.recoverJobsMetadata(jc.ctx) - log.Info("jobHealthCheck: metadata of all running and paused jobs are restored to memory\n") + log.Info("jobMonitor: metadata of all running and paused jobs are restored to memory\n") // 内存状态恢复完毕后,唤醒Job调度协程 go jc.jobScheduler() // 2.每隔一段时间轮询一次,根据job的状态进行不同的处理 - timer := time.NewTicker(healthCheckInterval) + + timer := time.NewTicker(time.Duration(monitorInterval) * time.Millisecond) defer timer.Stop() for { select { @@ -779,15 +801,20 @@ func (jc *JobController) jobHealthCheck() { qr, _ := jc.execQuery(jc.ctx, "", sqlDMLJobGetAllJobs) if qr != nil { for _, row := range qr.Named().Rows { - args := JobHealthCheckArgs{} + args := JobMonitorArgs{} args.initArgsByQueryResult(row) switch args.status { // 清理已经运行结束的job的表及条目 case canceledStatus, failedStatus, completedStatus: - err := jc.tableGC(jc.ctx, args.uuid, args.tableSchema, args.batchInfoTable, args.statusSetTime) + timeZoneOffset, err := getTimeZoneOffset(args.timeZone) + if err != nil { + log.Errorf("jobMonitor: getTimeZoneOffset failed, %s", err) + continue + } + err = jc.tableGC(jc.ctx, args.uuid, args.tableSchema, args.batchInfoTable, args.statusSetTime, timeZoneOffset) if err != nil { - log.Errorf("jobHealthCheck: tableGC failed, %s", err) + log.Errorf("jobMonitor: tableGC failed, %s", err) continue } case runningStatus: @@ -814,10 +841,10 @@ func (jc *JobController) recoverJobsMetadata(ctx context.Context) { switch status { case runningStatus: - jc.initDMLJobRunningMeta(runnerArgs.uuid, runnerArgs.table) + jc.initDMLJobRunningMeta(runnerArgs.table) go jc.dmlJobBatchRunner(runnerArgs.uuid, runnerArgs.table, runnerArgs.tableSchema, runnerArgs.batchInfoTable, runnerArgs.failPolicy, runnerArgs.batchInterval, runnerArgs.batchSize, runnerArgs.timePeriodStart, runnerArgs.timePeriodEnd) case pausedStatus: - jc.initDMLJobRunningMeta(runnerArgs.uuid, runnerArgs.table) + jc.initDMLJobRunningMeta(runnerArgs.table) } } @@ -826,24 +853,50 @@ func (jc *JobController) recoverJobsMetadata(ctx context.Context) { } } -func (jc *JobController) tableGC(ctx context.Context, uuid, tableSchema, batchInfoTable, statusSetTime string) error { - statusSetTimeObj, err := time.Parse(time.RFC3339, statusSetTime) +func (jc *JobController) tableGC(ctx context.Context, uuid, tableSchema, batchInfoTable, statusSetTime string, timeZoneOffset int) error { + // job表中的类型为timestamp,其中不记录时区,格式对应着time.Datetime + statusSetTimeObj, err := time.Parse(time.DateTime, statusSetTime) + // parse默认使用UTC,故需要将时区调整为表中所记录的时区 + location := time.FixedZone("time zone", timeZoneOffset) + statusSetTimeObj = time.Date(statusSetTimeObj.Year(), statusSetTimeObj.Month(), statusSetTimeObj.Day(), + statusSetTimeObj.Hour(), statusSetTimeObj.Minute(), statusSetTimeObj.Second(), statusSetTimeObj.Nanosecond(), location) + if err != nil { return err } // 如果Job设置结束状态的时间距离当前已经超过了一定的时间间隔,则删除该Job在表中的条目,并将其batch表删除 - if time.Now().After(statusSetTimeObj.Add(tableEntryGCInterval)) { + if time.Now().After(statusSetTimeObj.Add(time.Duration(tableGCInterval) * time.Second)) { deleteJobSQL, err := sqlparser.ParseAndBind(sqlDMLJobDeleteJob, sqltypes.StringBindVariable(uuid)) if err != nil { return err } + // 通过sql删除job表中的条目 _, _ = jc.execQuery(ctx, "", deleteJobSQL) - _, _ = jc.execQuery(ctx, tableSchema, fmt.Sprintf(sqlTemplateDropTable, batchInfoTable)) + // 通过table gc的方式删除batch表,将其设置为PURGE状态(由于在任务完成后已经停留了一段时间,故不再经过HOLD状态) + _, _ = jc.gcBatchInfoTable(ctx, tableSchema, batchInfoTable, uuid, time.Now()) } return nil } +// move the table to PURGE_TABLE_GC_STATE state directly +func (jc *JobController) gcBatchInfoTable(ctx context.Context, tableSchema, artifactTable, uuid string, t time.Time) (string, error) { + tableExists, err := jc.tableExists(ctx, tableSchema, artifactTable) + if err != nil { + return "", err + } + if !tableExists { + return "", nil + } + + renameStatement, toTableName, err := schema.GenerateRenameStatementWithUUID(tableSchema, artifactTable, schema.PurgeTableGCState, nonTransactionalDMLToGCUUID(uuid), t) + if err != nil { + return toTableName, err + } + _, err = jc.execQuery(ctx, tableSchema, renameStatement) + return toTableName, err +} + func (jc *JobController) createJobBatches(jobUUID, sql, tableSchema string, userBatchSize int64) (tableName, batchTableName string, batchSize int64, err error) { // 1.对用户提交的DML sql进行合法性检验和解析 tableName, whereExpr, stmt, err := parseDML(sql) @@ -869,7 +922,7 @@ func (jc *JobController) createJobBatches(jobUUID, sql, tableSchema string, user if err != nil { return "", "", 0, err } - actualThreshold := int64(float64(batchSizeThreshold/indexCount) * ratioOfBatchSizeThreshold) + actualThreshold := int64(float64(int64(batchSizeThreshold)/indexCount) * ratioOfBatchSizeThreshold) if userBatchSize < actualThreshold { batchSize = userBatchSize } else { @@ -914,7 +967,7 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, currentBatchEnd = values currentBatchSize++ if currentBatchSize == batchSize { - batchSQL, countSQL, batchStartStr, batchEndStr, err := createBatchInfoTableEntry(tableSchema, tableName, sql, stmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) + batchSQL, countSQL, batchStartStr, batchEndStr, err := createBatchInfoTableEntry(tableSchema, tableName, stmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) if err != nil { return "", err } @@ -931,7 +984,7 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, } // 最后一个batch的行数不一定是batchSize,在循环结束时要将剩余的行数划分到最后一个batch中 if currentBatchSize != 0 { - batchSQL, countSQL, batchStartStr, batchEndStr, err := createBatchInfoTableEntry(tableSchema, tableName, sql, stmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) + batchSQL, countSQL, batchStartStr, batchEndStr, err := createBatchInfoTableEntry(tableSchema, tableName, stmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) if err != nil { return "", err } @@ -943,9 +996,9 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, return batchTableName, nil } -func createBatchInfoTableEntry(tableSchema, tableName, sql string, sqlStmt sqlparser.Statement, whereExpr sqlparser.Expr, +func createBatchInfoTableEntry(tableSchema, tableName string, sqlStmt sqlparser.Statement, whereExpr sqlparser.Expr, currentBatchStart, currentBatchEnd []sqltypes.Value, pkInfos []PKInfo) (batchSQL, countSQL, batchStartStr, batchEndStr string, err error) { - batchSQL, finalWhereStr, err := genBatchSQL(sql, sqlStmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) + batchSQL, finalWhereStr, err := genBatchSQL(sqlStmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) if err != nil { return "", "", "", "", err } @@ -979,7 +1032,7 @@ func existUnSupportedPK(pkInfos []PKInfo) bool { switch pk.pkType { case sqltypes.Float64, sqltypes.Float32, sqltypes.Decimal, sqltypes.VarBinary, sqltypes.Blob, sqltypes.Binary, sqltypes.Bit, - sqltypes.Text, sqltypes.VarChar, sqltypes.Char, + sqltypes.Text, sqltypes.Enum, sqltypes.Set, sqltypes.Tuple, sqltypes.Geometry, sqltypes.TypeJSON, sqltypes.Expression, sqltypes.HexNum, sqltypes.HexVal, sqltypes.BitNum: return true diff --git a/go/vt/vttablet/jobcontroller/sqls.go b/go/vt/vttablet/jobcontroller/sqls.go index 4e776a6ffe..0bd9025712 100644 --- a/go/vt/vttablet/jobcontroller/sqls.go +++ b/go/vt/vttablet/jobcontroller/sqls.go @@ -33,11 +33,12 @@ const ( batch_info_table_name, status, status_set_time, + time_zone, fail_policy, running_time_period_start, running_time_period_end, batch_interval_in_ms, - batch_size) values(%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a)` + batch_size) values(%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a)` sqlDMLJobUpdateMessage = `update mysql.non_transactional_dml_jobs set message = %a @@ -122,4 +123,6 @@ const ( batch_begin, batch_end ) values (%%a,%%a,%%a,%%a,%%a,%%a)` + + sqlShowTablesLike = "SHOW TABLES LIKE '%a'" ) diff --git a/go/vt/vttablet/jobcontroller/throttle.go b/go/vt/vttablet/jobcontroller/throttle.go index 7b66099729..3fe1089637 100644 --- a/go/vt/vttablet/jobcontroller/throttle.go +++ b/go/vt/vttablet/jobcontroller/throttle.go @@ -26,7 +26,7 @@ var throttleInit sync.Once func initThrottleTicker() { throttleInit.Do(func() { go func() { - tick := time.NewTicker(throttleCheckInterval) + tick := time.NewTicker(time.Duration(throttleCheckInterval) * time.Millisecond) defer tick.Stop() for range tick.C { atomic.AddInt64(&throttleTicks, 1) diff --git a/go/vt/vttablet/jobcontroller/util.go b/go/vt/vttablet/jobcontroller/util.go index 985b525c84..aad2cd4aa9 100644 --- a/go/vt/vttablet/jobcontroller/util.go +++ b/go/vt/vttablet/jobcontroller/util.go @@ -12,6 +12,7 @@ import ( "math" "strconv" "strings" + "time" "vitess.io/vitess/go/mysql/collations" "vitess.io/vitess/go/pools" @@ -452,12 +453,13 @@ func (args *JobRunnerArgs) initArgsByQueryResult(row sqltypes.RowNamedValues) { } -func (args *JobHealthCheckArgs) initArgsByQueryResult(row sqltypes.RowNamedValues) { +func (args *JobMonitorArgs) initArgsByQueryResult(row sqltypes.RowNamedValues) { args.uuid = row["job_uuid"].ToString() args.tableSchema = row["table_schema"].ToString() args.batchInfoTable = row["batch_info_table_name"].ToString() args.statusSetTime = row["status_set_time"].ToString() args.status = row["status"].ToString() + args.timeZone = row["time_zone"].ToString() } func (jc *JobController) insertBatchInfoTableEntry(ctx context.Context, tableSchema, batchTableName, currentBatchID, batchSQL, countSQL, batchStartStr, batchEndStr string, batchSize int64) (err error) { @@ -483,6 +485,9 @@ func (jc *JobController) insertJobEntry(jobUUID, sql, tableSchema, tableName, ba batchInfoTable, jobStatus, statusSetTime, failPolicy, runningTimePeriodStart, runningTimePeriodEnd string, timeGapInMs, batchSize int64) (err error) { ctx := context.Background() + _, offset := time.Now().Zone() + timeZone := getTimeZoneStr(offset) + submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobSubmit, sqltypes.StringBindVariable(jobUUID), sqltypes.StringBindVariable(sql), @@ -492,6 +497,7 @@ func (jc *JobController) insertJobEntry(jobUUID, sql, tableSchema, tableName, ba sqltypes.StringBindVariable(batchInfoTable), sqltypes.StringBindVariable(jobStatus), sqltypes.StringBindVariable(statusSetTime), + sqltypes.StringBindVariable(timeZone), sqltypes.StringBindVariable(failPolicy), sqltypes.StringBindVariable(runningTimePeriodStart), sqltypes.StringBindVariable(runningTimePeriodEnd), @@ -506,3 +512,86 @@ func (jc *JobController) insertJobEntry(jobUUID, sql, tableSchema, tableName, ba } return nil } + +func getTimeZoneStr(offset int) string { + if offset == 0 { + return "UTC" + } + timeZone := "UTC" + if offset > 0 { + timeZone = timeZone + " +" + } else { + timeZone = timeZone + " -" + offset = -offset + } + + duration := time.Second * time.Duration(offset) + startTime := time.Date(0, 1, 1, 0, 0, 0, 0, time.UTC) + resultTime := startTime.Add(duration) + timeFormat := "15:04:05" + offsetStr := resultTime.Format(timeFormat) + timeZone += offsetStr + return timeZone +} + +func getTimeZoneOffset(timeZoneStr string) (int, error) { + if timeZoneStr == "UTC" { + return 0, nil + } + if len(timeZoneStr) < 5 { + return 0, fmt.Errorf("timeZoneStr is in wrong format") + } + neg := false + if timeZoneStr[:4] != "UTC " { + return 0, fmt.Errorf("timeZoneStr is in wrong format") + } + if timeZoneStr[4] != '-' && timeZoneStr[4] != '+' { + return 0, fmt.Errorf("timeZoneStr is in wrong format") + } + if timeZoneStr[4] == '-' { + neg = true + } + timeZoneStr = timeZoneStr[5:] + parts := strings.Split(timeZoneStr, ":") + if len(parts) != 3 { + return 0, fmt.Errorf("timeZoneStr is in wrong format") + } + + hour, err := strconv.Atoi(parts[0]) + if err != nil { + return 0, err + } + + minute, err := strconv.Atoi(parts[1]) + if err != nil { + return 0, err + } + + second, err := strconv.Atoi(parts[2]) + if err != nil { + return 0, err + } + + offset := hour*3600 + minute*60 + second + if neg { + offset = -offset + } + + return offset, nil +} + +// tableExists checks if a given table exists. +func (jc *JobController) tableExists(ctx context.Context, tableSchema, tableName string) (bool, error) { + tableName = strings.ReplaceAll(tableName, `_`, `\_`) + parsed := sqlparser.BuildParsedQuery(sqlShowTablesLike, tableName) + rs, err := jc.execQuery(ctx, tableSchema, parsed.Query) + if err != nil { + return false, err + } + row := rs.Named().Row() + return (row != nil), nil +} + +func nonTransactionalDMLToGCUUID(uuid string) string { + return strings.Replace(uuid, "-", "", -1) +} diff --git a/go/vt/vttablet/jobcontroller/util_test.go b/go/vt/vttablet/jobcontroller/util_test.go index be551d669a..6113c9d3bf 100644 --- a/go/vt/vttablet/jobcontroller/util_test.go +++ b/go/vt/vttablet/jobcontroller/util_test.go @@ -6,11 +6,13 @@ Licensed under the Apache v2(found in the LICENSE file in the root directory). package jobcontroller import ( + "errors" "testing" - - "github.com/stretchr/testify/assert" + "time" "vitess.io/vitess/go/vt/sqlparser" + + "github.com/stretchr/testify/assert" ) func TestParseDML(t *testing.T) { @@ -56,3 +58,65 @@ func TestParseDML(t *testing.T) { _, _, _, err = parseDML("delete from t1 where id=1 order by c1") assert.Equalf(t, "the SQL should not have order by clause", err.Error(), "error message: %s", err.Error()) } + +func TestGetTimeZoneStr(t *testing.T) { + tests := []struct { + offset int + want string + }{ + {0, "UTC"}, + {60, "UTC +00:01:00"}, + {-60, "UTC -00:01:00"}, + {180, "UTC +00:03:00"}, + {-180, "UTC -00:03:00"}, + {3600, "UTC +01:00:00"}, + } + + for _, tt := range tests { + if got := getTimeZoneStr(tt.offset); got != tt.want { + t.Errorf("getTimeZoneStr(%d) = %s, want %s", tt.offset, got, tt.want) + } + } +} + +func TestGetTimeZoneOffset(t *testing.T) { + tests := []struct { + timeZoneStr string + wantOffset int + wantError error + }{ + {"UTC", 0, nil}, + {"UTC+01:02", 3720, errors.New("timeZoneStr is in wrong format")}, + + {"UTC +01:02:03", 3723, nil}, + {"UTC -01:02:03", -3723, nil}, + {"UTC +12:11:22", 43882, nil}, + {"UTC +23:59:59", 86399, nil}, + {"UTC -23:59:59", -86399, nil}, + } + + for _, test := range tests { + gotOffset, gotError := getTimeZoneOffset(test.timeZoneStr) + if gotError == nil && test.wantError != nil { + t.Errorf("getTimeZoneOffset(%s) didn't return error but expected it", test.timeZoneStr) + } + if gotError == nil && test.wantError == nil && gotOffset != test.wantOffset { + t.Errorf("getTimeZoneOffset(%s) return %d but want %d", test.timeZoneStr, gotOffset, test.wantOffset) + } + if gotError != nil && test.wantError == nil { + assert.Equalf(t, test.wantError.Error(), gotError.Error(), "error message: %s", gotError) + } + if gotError != nil && test.wantError != nil && gotError.Error() != test.wantError.Error() { + t.Errorf("getTimeZoneOffset(%s) return error %s but want %s", test.timeZoneStr, gotError, test.wantError) + } + + } +} + +func TestTimeZone(t *testing.T) { + utc8Offset, _ := getTimeZoneOffset("UTC +08:00:00") + utc8 := time.FixedZone("timeZone", utc8Offset) + t1 := time.Date(2019, 3, 4, 5, 6, 7, 8, utc8).Unix() + t2 := time.Date(2019, 3, 4, 5, 6, 7, 8, time.Now().Location()).Unix() + assert.Equal(t, t1, t2) +} From 2c3605955e9c672717bf03aa751d97743b9c729e Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Fri, 12 Jan 2024 10:25:46 +0800 Subject: [PATCH 45/54] fix: merge jobMonitor and JobSchduler as JobManager Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/vttablet/jobcontroller/controller.go | 156 ++++++++------------- go/vt/vttablet/jobcontroller/util.go | 13 +- 2 files changed, 64 insertions(+), 105 deletions(-) diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 055e6f763d..a13844ca36 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -38,14 +38,12 @@ import ( ) var ( - databasePoolSize = 5 - defaultBatchSize = 1000 // - monitorInterval = 5000 // ms - defaultBatchInterval = 1 // ms - tableGCInterval = 10 // hour - jobSchedulerRunningInterval = 24 // second - throttleCheckInterval = 250 // ms g - + databasePoolSize = 5 + defaultBatchSize = 1000 // + defaultBatchInterval = 1 // ms + tableGCInterval = 24 // hour todo hour + jobManagerRunningInterval = 24 // second + throttleCheckInterval = 250 // ms g batchSizeThreshold = 10000 ratioOfBatchSizeThreshold = 0.5 ) @@ -53,10 +51,9 @@ var ( func registerFlags(fs *pflag.FlagSet) { fs.IntVar(&databasePoolSize, "non_transactional_dml_database_pool_size", databasePoolSize, "the number of database connection to mysql") fs.IntVar(&defaultBatchSize, "non_transactional_dml_default_batch_size", defaultBatchSize, "the number of rows to be processed in one batch by default") - fs.IntVar(&monitorInterval, "non_transactional_dml_healthcheck_interval", monitorInterval, "the loop interval of job monitor in milliseconds") fs.IntVar(&defaultBatchInterval, "non_transactional_dml_default_batch_interval", defaultBatchInterval, "the interval of batch processing in milliseconds by default") fs.IntVar(&tableGCInterval, "non_transactional_dml_table_gc_interval", tableGCInterval, "the interval of table GC in hours") - fs.IntVar(&jobSchedulerRunningInterval, "non_transactional_dml_job_scheduler_running_interval", jobSchedulerRunningInterval, "the interval of job scheduler running in seconds") + fs.IntVar(&jobManagerRunningInterval, "non_transactional_dml_job_scheduler_running_interval", jobManagerRunningInterval, "the interval of job scheduler running in seconds") fs.IntVar(&throttleCheckInterval, "non_transactional_dml_throttle_check_interval", throttleCheckInterval, "the interval of throttle check in milliseconds") fs.IntVar(&batchSizeThreshold, "non_transactional_dml_batch_size_threshold", batchSizeThreshold, "the threshold of batch size") fs.Float64Var(&ratioOfBatchSizeThreshold, "non_transactional_dml_batch_size_threshold_ratio", ratioOfBatchSizeThreshold, "final threshold = table index numbers * ratio * non_transactional_dml_batch_size_threshold") @@ -123,7 +120,7 @@ type JobController struct { workingTables map[string]bool // 用于调度时检测当前任务是否和正在工作的表冲突,paused、running状态的job的表都在里面 workingTablesMutex sync.Mutex - schedulerNotifyChan chan struct{} // jobScheduler每隔一段时间运行一次调度。但当它收到这个chan的消息后,会立刻开始一次调度 + managerNotifyChan chan struct{} // jobManager每隔一段时间运行一次调度。但当它收到这个chan的消息后,会立刻开始一次调度 } type PKInfo struct { @@ -131,14 +128,10 @@ type PKInfo struct { pkType querypb.Type } -type JobRunnerArgs struct { - uuid, table, tableSchema, batchInfoTable, failPolicy, status string - batchInterval, batchSize int64 - timePeriodStart, timePeriodEnd *time.Time -} - -type JobMonitorArgs struct { - uuid, tableSchema, batchInfoTable, statusSetTime, status, timeZone string +type JobArgs struct { + uuid, table, tableSchema, batchInfoTable, failPolicy, status, timeZone, statusSetTime string + batchInterval, batchSize int64 + timePeriodStart, timePeriodEnd *time.Time } func (jc *JobController) Open() error { @@ -146,7 +139,7 @@ func (jc *JobController) Open() error { defer jc.initMutex.Unlock() if jc.tabletTypeFunc() == topodatapb.TabletType_PRIMARY { jc.initJobController() - go jc.jobMonitor() + jc.runJobController() } return nil } @@ -155,7 +148,7 @@ func (jc *JobController) initJobController() { jc.ctx, jc.cancelOperation = context.WithCancel(context.Background()) jc.pool.Open(jc.env.Config().DB.AppConnector(), jc.env.Config().DB.DbaConnector(), jc.env.Config().DB.AppDebugConnector()) jc.workingTables = map[string]bool{} - jc.schedulerNotifyChan = make(chan struct{}, 1) + jc.managerNotifyChan = make(chan struct{}, 1) initThrottleTicker() } @@ -166,8 +159,8 @@ func (jc *JobController) Close() { jc.cancelOperation() } jc.pool.Close() - if jc.schedulerNotifyChan != nil { - close(jc.schedulerNotifyChan) + if jc.managerNotifyChan != nil { + close(jc.managerNotifyChan) } } @@ -265,7 +258,7 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run return &sqltypes.Result{}, err } - jc.notifyJobScheduler() + jc.notifyJobManager() return jc.buildJobSubmitResult(jobUUID, batchInfoTable, batchIntervalInMs, batchSize, postponeLaunch, failPolicy), nil } @@ -320,7 +313,7 @@ func (jc *JobController) ResumeJob(uuid string) (*sqltypes.Result, error) { } row := rst.Named().Rows[0] - runnerArgs := JobRunnerArgs{} + runnerArgs := JobArgs{} runnerArgs.initArgsByQueryResult(row) // 拉起runner协程,协程内会将状态改为running @@ -364,7 +357,7 @@ func (jc *JobController) CancelJob(uuid string) (*sqltypes.Result, error) { // 相比于pause,cancel需要删除内存中的元数据 jc.deleteDMLJobRunningMeta(tableName) - jc.notifyJobScheduler() + jc.notifyJobManager() return qr, nil } @@ -380,7 +373,7 @@ func (jc *JobController) CompleteJob(ctx context.Context, uuid, table string) (* } delete(jc.workingTables, table) - jc.notifyJobScheduler() + jc.notifyJobManager() return qr, nil } @@ -390,13 +383,11 @@ func (jc *JobController) FailJob(ctx context.Context, uuid, message, tableName s _, _ = jc.updateJobStatus(ctx, uuid, failedStatus, statusSetTime) jc.deleteDMLJobRunningMeta(tableName) - jc.notifyJobScheduler() + jc.notifyJobManager() } -func (jc *JobController) jobScheduler() { - // 等待healthcare扫一遍后再进行 - - timer := time.NewTicker(time.Duration(jobSchedulerRunningInterval) * time.Hour) +func (jc *JobController) jobManager() { + timer := time.NewTicker(time.Duration(jobManagerRunningInterval) * time.Second) defer timer.Stop() for { @@ -408,25 +399,44 @@ func (jc *JobController) jobScheduler() { case <-jc.ctx.Done(): return case <-timer.C: - case <-jc.schedulerNotifyChan: + case <-jc.managerNotifyChan: } jc.workingTablesMutex.Lock() jc.tableMutex.Lock() - // 先提交的job先执行 - qr, _ := jc.execQuery(jc.ctx, "", sqlDMLJobGetJobsToSchedule) + qr, _ := jc.execQuery(jc.ctx, "", sqlDMLJobGetAllJobs) if qr != nil { for _, row := range qr.Named().Rows { - runnerArgs := JobRunnerArgs{} - runnerArgs.initArgsByQueryResult(row) - - if jc.checkDmlJobRunnable(runnerArgs.uuid, runnerArgs.status, runnerArgs.table, runnerArgs.timePeriodStart, runnerArgs.timePeriodEnd) { - // 初始化Job在内存中的元数据,防止在dmlJobBatchRunner修改表中的状态前,scheduler多次启动同一个job - jc.initDMLJobRunningMeta(runnerArgs.table) - go jc.dmlJobBatchRunner(runnerArgs.uuid, runnerArgs.table, runnerArgs.tableSchema, runnerArgs.batchInfoTable, runnerArgs.failPolicy, runnerArgs.batchInterval, runnerArgs.batchSize, runnerArgs.timePeriodStart, runnerArgs.timePeriodEnd) + jobArgs := JobArgs{} + jobArgs.initArgsByQueryResult(row) + switch jobArgs.status { + // 对处于未开始状态对job进行调度 + case queuedStatus, notInTimePeriodStatus: + if jc.checkDmlJobRunnable(jobArgs.uuid, jobArgs.status, jobArgs.table, jobArgs.timePeriodStart, jobArgs.timePeriodEnd) { + // 初始化Job在内存中的元数据,防止在dmlJobBatchRunner修改表中的状态前,scheduler多次启动同一个job + jc.initDMLJobRunningMeta(jobArgs.table) + go jc.dmlJobBatchRunner(jobArgs.uuid, jobArgs.table, jobArgs.tableSchema, jobArgs.batchInfoTable, jobArgs.failPolicy, jobArgs.batchInterval, jobArgs.batchSize, jobArgs.timePeriodStart, jobArgs.timePeriodEnd) + } + // 对处于完成态对job进行清理 + case canceledStatus, failedStatus, completedStatus: + timeZoneOffset, err := getTimeZoneOffset(jobArgs.timeZone) + if err != nil { + log.Errorf("jobManager: getTimeZoneOffset failed, %s", err) + continue + } + err = jc.tableGC(jc.ctx, jobArgs.uuid, jobArgs.tableSchema, jobArgs.batchInfoTable, jobArgs.statusSetTime, timeZoneOffset) + if err != nil { + log.Errorf("jobManager: tableGC failed, %s", err) + continue + } + // 对处于运行态的job进行监控 + case runningStatus: + // todo feat 增加对长时间未增加rows的running job的处理 } + } + } jc.tableMutex.Unlock() @@ -774,58 +784,14 @@ func (jc *JobController) deleteDMLJobRunningMeta(table string) { delete(jc.workingTables, table) } -func (jc *JobController) jobMonitor() { +func (jc *JobController) runJobController() { // 1.启动时,先检查是否有处于"running"或"paused"的job,并恢复它们在内存的状态 jc.recoverJobsMetadata(jc.ctx) - log.Info("jobMonitor: metadata of all running and paused jobs are restored to memory\n") - // 内存状态恢复完毕后,唤醒Job调度协程 - go jc.jobScheduler() - - // 2.每隔一段时间轮询一次,根据job的状态进行不同的处理 - - timer := time.NewTicker(time.Duration(monitorInterval) * time.Millisecond) - defer timer.Stop() - for { - select { - case <-jc.ctx.Done(): - return - case <-timer.C: - } - // 防止vttablet不再是primary时该协程继续执行 - if jc.tabletTypeFunc() != topodatapb.TabletType_PRIMARY { - return - } - jc.tableMutex.Lock() - - qr, _ := jc.execQuery(jc.ctx, "", sqlDMLJobGetAllJobs) - if qr != nil { - for _, row := range qr.Named().Rows { - args := JobMonitorArgs{} - args.initArgsByQueryResult(row) - - switch args.status { - // 清理已经运行结束的job的表及条目 - case canceledStatus, failedStatus, completedStatus: - timeZoneOffset, err := getTimeZoneOffset(args.timeZone) - if err != nil { - log.Errorf("jobMonitor: getTimeZoneOffset failed, %s", err) - continue - } - err = jc.tableGC(jc.ctx, args.uuid, args.tableSchema, args.batchInfoTable, args.statusSetTime, timeZoneOffset) - if err != nil { - log.Errorf("jobMonitor: tableGC failed, %s", err) - continue - } - case runningStatus: - // todo feat 增加对长时间未增加rows的running job的处理 - } - } - } - - jc.tableMutex.Unlock() + log.Info("JobController: metadata of all running and paused jobs are restored to memory\n") + // 2.交由jobManager对job进行管理 + go jc.jobManager() - } } func (jc *JobController) recoverJobsMetadata(ctx context.Context) { @@ -836,7 +802,7 @@ func (jc *JobController) recoverJobsMetadata(ctx context.Context) { for _, row := range qr.Named().Rows { status := row["status"].ToString() - runnerArgs := JobRunnerArgs{} + runnerArgs := JobArgs{} runnerArgs.initArgsByQueryResult(row) switch status { @@ -1013,16 +979,16 @@ func createBatchInfoTableEntry(tableSchema, tableName string, sqlStmt sqlparser. return batchSQL, countSQL, batchStartStr, batchEndStr, nil } -// 通知jobScheduler让它立刻开始一次调度。 -func (jc *JobController) notifyJobScheduler() { - if jc.schedulerNotifyChan == nil { +// 通知jobManager让它立刻开始一次调度。 +func (jc *JobController) notifyJobManager() { + if jc.managerNotifyChan == nil { return } // Try to send. If the channel buffer is full, it means a notification is // already pending, so we don't need to do anything. select { - case jc.schedulerNotifyChan <- struct{}{}: + case jc.managerNotifyChan <- struct{}{}: default: } } diff --git a/go/vt/vttablet/jobcontroller/util.go b/go/vt/vttablet/jobcontroller/util.go index aad2cd4aa9..0381972b45 100644 --- a/go/vt/vttablet/jobcontroller/util.go +++ b/go/vt/vttablet/jobcontroller/util.go @@ -434,13 +434,15 @@ func (jc *JobController) updateBatchStatus(batchTableSchema, batchTableName, sta return err } -func (args *JobRunnerArgs) initArgsByQueryResult(row sqltypes.RowNamedValues) { +func (args *JobArgs) initArgsByQueryResult(row sqltypes.RowNamedValues) { args.uuid = row["job_uuid"].ToString() args.tableSchema = row["table_schema"].ToString() args.table = row["table_name"].ToString() args.batchInfoTable = row["batch_info_table_name"].ToString() args.failPolicy = row["fail_policy"].ToString() args.status = row["status"].ToString() + args.statusSetTime = row["status_set_time"].ToString() + args.timeZone = row["time_zone"].ToString() batchInterval, _ := row["batch_interval_in_ms"].ToInt64() batchSize, _ := row["batch_size"].ToInt64() @@ -453,15 +455,6 @@ func (args *JobRunnerArgs) initArgsByQueryResult(row sqltypes.RowNamedValues) { } -func (args *JobMonitorArgs) initArgsByQueryResult(row sqltypes.RowNamedValues) { - args.uuid = row["job_uuid"].ToString() - args.tableSchema = row["table_schema"].ToString() - args.batchInfoTable = row["batch_info_table_name"].ToString() - args.statusSetTime = row["status_set_time"].ToString() - args.status = row["status"].ToString() - args.timeZone = row["time_zone"].ToString() -} - func (jc *JobController) insertBatchInfoTableEntry(ctx context.Context, tableSchema, batchTableName, currentBatchID, batchSQL, countSQL, batchStartStr, batchEndStr string, batchSize int64) (err error) { insertBatchSQLWithTableName := fmt.Sprintf(sqlTemplateInsertBatchEntry, batchTableName) insertBatchSQLQuery, err := sqlparser.ParseAndBind(insertBatchSQLWithTableName, From 62e8bcf1048cb6d0610d3f53562051f0504b1858 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Fri, 12 Jan 2024 13:01:15 +0800 Subject: [PATCH 46/54] feat: add time zone in feature 'running period time' Signed-off-by: newborn22 <953950914@qq.com> --- .../schema/job/non_transactional_dml_jobs.sql | 5 +- go/vt/sqlparser/comments.go | 1 + go/vt/vttablet/jobcontroller/controller.go | 16 ++-- .../jobcontroller/running_period_time.go | 74 +++++++++++++------ .../jobcontroller/running_period_time_test.go | 38 ++++++++++ go/vt/vttablet/jobcontroller/sqls.go | 6 +- go/vt/vttablet/jobcontroller/util.go | 46 ++++++++---- go/vt/vttablet/jobcontroller/util_test.go | 31 +++----- 8 files changed, 148 insertions(+), 69 deletions(-) create mode 100644 go/vt/vttablet/jobcontroller/running_period_time_test.go diff --git a/go/vt/sidecardb/schema/job/non_transactional_dml_jobs.sql b/go/vt/sidecardb/schema/job/non_transactional_dml_jobs.sql index 7f158d3812..d42716804b 100644 --- a/go/vt/sidecardb/schema/job/non_transactional_dml_jobs.sql +++ b/go/vt/sidecardb/schema/job/non_transactional_dml_jobs.sql @@ -35,8 +35,9 @@ CREATE TABLE IF NOT EXISTS mysql.non_transactional_dml_jobs `throttle_ratio` double NULL DEFAULT NULL, `throttle_expire_time` varchar(256) NULL DEFAULT NULL, `dealing_batch_id` varchar(256) NULL DEFAULT NULL, - `running_time_period_start` varchar(256) NULL DEFAULT NULL, - `running_time_period_end` varchar(256) NULL DEFAULT NULL, + `running_time_period_start` timestamp NULL DEFAULT NULL, + `running_time_period_end` timestamp NULL DEFAULT NULL, + `running_time_period_time_zone` varchar(16) NULL DEFAULT NULL, PRIMARY KEY (`id`), KEY `job_uuid_idx` (`job_uuid`), KEY `status_idx` (`status`) diff --git a/go/vt/sqlparser/comments.go b/go/vt/sqlparser/comments.go index 8ea2a4e9bc..92f9953b5f 100644 --- a/go/vt/sqlparser/comments.go +++ b/go/vt/sqlparser/comments.go @@ -65,6 +65,7 @@ const ( DirectiveDMLAutoRetry = "DML_FAIL_POLICY" DirectiveDMLTimePeriodStart = "DML_TIME_PERIOD_START" DirectiveDMLTimePeriodEnd = "DML_TIME_PERIOD_END" + DirectiveDMLTimePeriod = "DML_TIME_PERIOD_TIME_ZONE" ) func isNonSpace(r rune) bool { diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index a13844ca36..8d199ec7ed 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -176,10 +176,10 @@ func NewJobController(tableName string, tabletTypeFunc func() topodatapb.TabletT lagThrottler: lagThrottler} } -func (jc *JobController) HandleRequest(command, sql, jobUUID, tableSchema, expireString, runningTimePeriodStart, runningTimePeriodEnd string, ratioLiteral *sqlparser.Literal, timeGapInMs, usrBatchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { +func (jc *JobController) HandleRequest(command, sql, jobUUID, tableSchema, expireString, runningTimePeriodStart, runningTimePeriodEnd, runningTimePeriodTimeZone string, ratioLiteral *sqlparser.Literal, timeGapInMs, usrBatchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { switch command { case SubmitJob: - return jc.SubmitJob(sql, tableSchema, runningTimePeriodStart, runningTimePeriodEnd, timeGapInMs, usrBatchSize, postponeLaunch, failPolicy) + return jc.SubmitJob(sql, tableSchema, runningTimePeriodStart, runningTimePeriodEnd, runningTimePeriodTimeZone, timeGapInMs, usrBatchSize, postponeLaunch, failPolicy) case PauseJob: return jc.PauseJob(jobUUID) case ResumeJob: @@ -193,12 +193,12 @@ func (jc *JobController) HandleRequest(command, sql, jobUUID, tableSchema, expir case UnthrottleJob: return jc.UnthrottleJob(jobUUID) case SetRunningTimePeriod: - return jc.SetRunningTimePeriod(jobUUID, runningTimePeriodStart, runningTimePeriodEnd) + return jc.SetRunningTimePeriod(jobUUID, runningTimePeriodStart, runningTimePeriodEnd, runningTimePeriodTimeZone) } return &sqltypes.Result{}, fmt.Errorf("unknown command: %s", command) } -func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, runningTimePeriodEnd string, batchIntervalInMs, userBatchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { +func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, runningTimePeriodEnd, runningTimePeriodTimeZone string, batchIntervalInMs, userBatchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { jc.tableMutex.Lock() defer jc.tableMutex.Unlock() @@ -253,7 +253,7 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run } err = jc.insertJobEntry(jobUUID, sql, tableSchema, tableName, batchInfoTableSchema, batchInfoTable, - jobStatus, statusSetTime, failPolicy, runningTimePeriodStart, runningTimePeriodEnd, batchIntervalInMs, batchSize) + jobStatus, statusSetTime, failPolicy, runningTimePeriodStart, runningTimePeriodEnd, runningTimePeriodTimeZone, batchIntervalInMs, batchSize) if err != nil { return &sqltypes.Result{}, err } @@ -831,7 +831,7 @@ func (jc *JobController) tableGC(ctx context.Context, uuid, tableSchema, batchIn return err } // 如果Job设置结束状态的时间距离当前已经超过了一定的时间间隔,则删除该Job在表中的条目,并将其batch表删除 - if time.Now().After(statusSetTimeObj.Add(time.Duration(tableGCInterval) * time.Second)) { + if time.Now().After(statusSetTimeObj.Add(time.Duration(tableGCInterval) * time.Hour)) { deleteJobSQL, err := sqlparser.ParseAndBind(sqlDMLJobDeleteJob, sqltypes.StringBindVariable(uuid)) if err != nil { @@ -840,12 +840,12 @@ func (jc *JobController) tableGC(ctx context.Context, uuid, tableSchema, batchIn // 通过sql删除job表中的条目 _, _ = jc.execQuery(ctx, "", deleteJobSQL) // 通过table gc的方式删除batch表,将其设置为PURGE状态(由于在任务完成后已经停留了一段时间,故不再经过HOLD状态) - _, _ = jc.gcBatchInfoTable(ctx, tableSchema, batchInfoTable, uuid, time.Now()) + _, _ = jc.gcBatchInfoTable(ctx, tableSchema, batchInfoTable, uuid, time.Now().UTC()) } return nil } -// move the table to PURGE_TABLE_GC_STATE state directly +// move the table to PURGE_TABLE_GC_STATE state func (jc *JobController) gcBatchInfoTable(ctx context.Context, tableSchema, artifactTable, uuid string, t time.Time) (string, error) { tableExists, err := jc.tableExists(ctx, tableSchema, artifactTable) if err != nil { diff --git a/go/vt/vttablet/jobcontroller/running_period_time.go b/go/vt/vttablet/jobcontroller/running_period_time.go index b0cc8b7b8c..1897ffd15e 100644 --- a/go/vt/vttablet/jobcontroller/running_period_time.go +++ b/go/vt/vttablet/jobcontroller/running_period_time.go @@ -6,22 +6,24 @@ Licensed under the Apache v2(found in the LICENSE file in the root directory). package jobcontroller import ( - "context" "errors" "time" "vitess.io/vitess/go/sqltypes" ) -func getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd string) (*time.Time, *time.Time) { +// 外部调用的函数需要保证格式正确,即isTimePeriodValid函数返回true +func getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd, runningTimePeriodEndTimeZone string) (*time.Time, *time.Time) { if runningTimePeriodStart != "" && runningTimePeriodEnd != "" { // 在submit job时或setRunningTimePeriod时,已经对格式进行了检查,因此这里不会出现错误 periodStartTime, _ := time.Parse(time.TimeOnly, runningTimePeriodStart) periodEndTime, _ := time.Parse(time.TimeOnly, runningTimePeriodEnd) - // 由于用户只提供了时间部分,因此需要将日期部分用当天的时间补齐。 + // 由于用户只提供了时间部分,因此需要将日期部分用当天的时间补齐。同时加上时区 + timeZoneOffset, _ := getTimeZoneOffset(runningTimePeriodEndTimeZone) + timeZone := time.FixedZone(runningTimePeriodEndTimeZone, timeZoneOffset) currentTime := time.Now() - periodStartTime = time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), periodStartTime.Hour(), periodStartTime.Minute(), periodStartTime.Second(), periodStartTime.Nanosecond(), currentTime.Location()) - periodEndTime = time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), periodEndTime.Hour(), periodEndTime.Minute(), periodEndTime.Second(), periodEndTime.Nanosecond(), currentTime.Location()) + periodStartTime = time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), periodStartTime.Hour(), periodStartTime.Minute(), periodStartTime.Second(), periodStartTime.Nanosecond(), timeZone) + periodEndTime = time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), periodEndTime.Hour(), periodEndTime.Minute(), periodEndTime.Second(), periodEndTime.Nanosecond(), timeZone) // 如果EndTime早于startTime的时间,则EndTime的日期部分用明天的日期补齐 if periodEndTime.Before(periodStartTime) { periodEndTime = periodEndTime.Add(24 * time.Hour) @@ -31,33 +33,59 @@ func getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd string) ( return nil, nil } -func (jc *JobController) SetRunningTimePeriod(uuid, startTime, endTime string) (*sqltypes.Result, error) { +func isTimePeriodValid(startTime, endTime, timeZone string) bool { + // 合法情况:1.三者全为空 2.三者全不为空 3.时间不为空,时区为空 + validCase := (startTime == "" && endTime == "" && timeZone == "") || + (startTime != "" && endTime != "" && timeZone != "") || + (startTime != "" && endTime != "" && timeZone == "") + if !validCase { + return false + } + // 分别检查其内容的合法性 + if startTime != "" && endTime != "" { + _, err := time.Parse(time.TimeOnly, startTime) + if err != nil { + return false + } + _, err = time.Parse(time.TimeOnly, endTime) + if err != nil { + return false + } + } + + if timeZone != "" { + // 如果用户设置了时区,则检查是否是合法的时区 + _, err := getTimeZoneOffset(timeZone) + if err != nil { + return false + } + } + + return true +} + +func (jc *JobController) SetRunningTimePeriod(uuid, startTime, endTime, timeZone string) (*sqltypes.Result, error) { var emptyResult = &sqltypes.Result{} - ctx := context.Background() - // 如果两个时间只有一个为空,则报错 - if (startTime == "" && endTime != "") || (startTime != "" && endTime == "") { - return emptyResult, errors.New("the start time and end time must be both set or not") + if !isTimePeriodValid(startTime, endTime, timeZone) { + return emptyResult, errors.New("check the format, the start and end should be like 'hh:mm:ss' and time zone should be like 'UTC[\\+\\-]\\d{2}:\\d{2}:\\d{2}'") + } + + if timeZone == "" { + // 如果用户没有设置时区,则使用系统默认时区 + _, timeZoneOffset := time.Now().Zone() + timeZone = getTimeZoneStr(timeZoneOffset) } - status, err := jc.getStrJobInfo(ctx, uuid, "status") + // 为了使得用户设置的运维时间能够生效,需要先将该job设置为暂停状态 + status, err := jc.getStrJobInfo(jc.ctx, uuid, "status") if err != nil { return emptyResult, err } if status == runningStatus { return emptyResult, errors.New("the job is running now, pause it first") } - // 提交的时间段必须满足特定的格式,可以成功转换成time对象 - if startTime != "" && endTime != "" { - _, err = time.Parse(time.TimeOnly, startTime) - if err != nil { - return emptyResult, errors.New("the start time is in error format, it should be like HH:MM:SS") - } - _, err = time.Parse(time.TimeOnly, endTime) - if err != nil { - return emptyResult, errors.New("the start time is in error format, it should be like HH:MM:SS") - } - } + // 往表中插入 - return jc.updateJobPeriodTime(ctx, uuid, startTime, endTime) + return jc.updateJobPeriodTime(jc.ctx, uuid, startTime, endTime, timeZone) } diff --git a/go/vt/vttablet/jobcontroller/running_period_time_test.go b/go/vt/vttablet/jobcontroller/running_period_time_test.go new file mode 100644 index 0000000000..015391a0fc --- /dev/null +++ b/go/vt/vttablet/jobcontroller/running_period_time_test.go @@ -0,0 +1,38 @@ +/* +Copyright ApeCloud, Inc. +Licensed under the Apache v2(found in the LICENSE file in the root directory). +*/ + +package jobcontroller + +import "testing" + +func TestIsTimePeriodValid(t *testing.T) { + type testCase struct { + startTime string + endTime string + timeZone string + result bool + } + + testCases := []testCase{ + // valid + {startTime: "09:00:00", endTime: "17:00:00", timeZone: "", result: true}, + {startTime: "09:00:00", endTime: "17:00:00", timeZone: "UTC+08:00:00", result: true}, + {startTime: "", endTime: "", timeZone: "", result: true}, + // invalid + {startTime: "25:00:00", endTime: "17:00:00", timeZone: "", result: false}, + {startTime: "09:00:00", endTime: "25:00:00", timeZone: "", result: false}, + {startTime: "", endTime: "17:00:00", timeZone: "", result: false}, + {startTime: "17:00:00", endTime: "", timeZone: "", result: false}, + {startTime: "", endTime: "", timeZone: "UTC+08:00:00", result: false}, + } + + for _, test := range testCases { + t.Run("TestIsTimePeriodValid", func(t *testing.T) { + if isTimePeriodValid(test.startTime, test.endTime, test.timeZone) != test.result { + t.Errorf("isTimePeriodValid(%v, %v, %v) should return %v", test.startTime, test.endTime, test.timeZone, test.result) + } + }) + } +} diff --git a/go/vt/vttablet/jobcontroller/sqls.go b/go/vt/vttablet/jobcontroller/sqls.go index 0bd9025712..7a1ff9eae7 100644 --- a/go/vt/vttablet/jobcontroller/sqls.go +++ b/go/vt/vttablet/jobcontroller/sqls.go @@ -37,8 +37,9 @@ const ( fail_policy, running_time_period_start, running_time_period_end, + running_time_period_time_zone, batch_interval_in_ms, - batch_size) values(%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a)` + batch_size) values(%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a,%a)` sqlDMLJobUpdateMessage = `update mysql.non_transactional_dml_jobs set message = %a @@ -87,7 +88,8 @@ const ( sqlDMLJobUpdateTimePeriod = `update mysql.non_transactional_dml_jobs set running_time_period_start = %a, - running_time_period_end = %a + running_time_period_end = %a, + running_time_period_time_zone = %a where job_uuid = %a` diff --git a/go/vt/vttablet/jobcontroller/util.go b/go/vt/vttablet/jobcontroller/util.go index 0381972b45..5677834dbb 100644 --- a/go/vt/vttablet/jobcontroller/util.go +++ b/go/vt/vttablet/jobcontroller/util.go @@ -197,13 +197,14 @@ func (jc *JobController) updateJobStatus(ctx context.Context, uuid, status, stat return jc.execQuery(ctx, "", submitQuery) } -func (jc *JobController) updateJobPeriodTime(ctx context.Context, uuid, timePeriodStart, timePeriodEnd string) (*sqltypes.Result, error) { +func (jc *JobController) updateJobPeriodTime(ctx context.Context, uuid, timePeriodStart, timePeriodEnd, timeZone string) (*sqltypes.Result, error) { jc.tableMutex.Lock() defer jc.tableMutex.Unlock() submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobUpdateTimePeriod, sqltypes.StringBindVariable(timePeriodStart), sqltypes.StringBindVariable(timePeriodEnd), + sqltypes.StringBindVariable(timeZone), sqltypes.StringBindVariable(uuid)) if err != nil { return &sqltypes.Result{}, err @@ -451,7 +452,9 @@ func (args *JobArgs) initArgsByQueryResult(row sqltypes.RowNamedValues) { runningTimePeriodStart := row["running_time_period_start"].ToString() runningTimePeriodEnd := row["running_time_period_end"].ToString() - args.timePeriodStart, args.timePeriodEnd = getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd) + runningTimePeriodTimeZone := row["running_time_period_timezone"].ToString() + + args.timePeriodStart, args.timePeriodEnd = getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd, runningTimePeriodTimeZone) } @@ -475,11 +478,20 @@ func (jc *JobController) insertBatchInfoTableEntry(ctx context.Context, tableSch } func (jc *JobController) insertJobEntry(jobUUID, sql, tableSchema, tableName, batchInfoTableSchema, - batchInfoTable, jobStatus, statusSetTime, failPolicy, runningTimePeriodStart, runningTimePeriodEnd string, + batchInfoTable, jobStatus, statusSetTime, failPolicy, runningTimePeriodStart, runningTimePeriodEnd, runningTimePeriodTimeZone string, timeGapInMs, batchSize int64) (err error) { - ctx := context.Background() + + if !isTimePeriodValid(runningTimePeriodStart, runningTimePeriodEnd, runningTimePeriodTimeZone) { + return errors.New("check the format, the start and end should be like 'hh:mm:ss' and time zone should be like 'UTC[\\+\\-]\\d{2}:\\d{2}:\\d{2}'") + } + if runningTimePeriodTimeZone == "" { + // 如果用户没有设置时区,则使用系统默认时区 + _, timeZoneOffset := time.Now().Zone() + runningTimePeriodTimeZone = getTimeZoneStr(timeZoneOffset) + } + _, offset := time.Now().Zone() - timeZone := getTimeZoneStr(offset) + statusSetTimeTimeZone := getTimeZoneStr(offset) submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobSubmit, sqltypes.StringBindVariable(jobUUID), @@ -490,16 +502,18 @@ func (jc *JobController) insertJobEntry(jobUUID, sql, tableSchema, tableName, ba sqltypes.StringBindVariable(batchInfoTable), sqltypes.StringBindVariable(jobStatus), sqltypes.StringBindVariable(statusSetTime), - sqltypes.StringBindVariable(timeZone), + sqltypes.StringBindVariable(statusSetTimeTimeZone), sqltypes.StringBindVariable(failPolicy), sqltypes.StringBindVariable(runningTimePeriodStart), sqltypes.StringBindVariable(runningTimePeriodEnd), + sqltypes.StringBindVariable(runningTimePeriodTimeZone), sqltypes.Int64BindVariable(timeGapInMs), sqltypes.Int64BindVariable(batchSize)) + if err != nil { return err } - _, err = jc.execQuery(ctx, "", submitQuery) + _, err = jc.execQuery(jc.ctx, "", submitQuery) if err != nil { return err } @@ -512,9 +526,9 @@ func getTimeZoneStr(offset int) string { } timeZone := "UTC" if offset > 0 { - timeZone = timeZone + " +" + timeZone = timeZone + "+" } else { - timeZone = timeZone + " -" + timeZone = timeZone + "-" offset = -offset } @@ -531,20 +545,20 @@ func getTimeZoneOffset(timeZoneStr string) (int, error) { if timeZoneStr == "UTC" { return 0, nil } - if len(timeZoneStr) < 5 { + if len(timeZoneStr) < 4 { return 0, fmt.Errorf("timeZoneStr is in wrong format") } neg := false - if timeZoneStr[:4] != "UTC " { + if timeZoneStr[:3] != "UTC" { return 0, fmt.Errorf("timeZoneStr is in wrong format") } - if timeZoneStr[4] != '-' && timeZoneStr[4] != '+' { + if timeZoneStr[3] != '-' && timeZoneStr[3] != '+' { return 0, fmt.Errorf("timeZoneStr is in wrong format") } - if timeZoneStr[4] == '-' { + if timeZoneStr[3] == '-' { neg = true } - timeZoneStr = timeZoneStr[5:] + timeZoneStr = timeZoneStr[4:] parts := strings.Split(timeZoneStr, ":") if len(parts) != 3 { return 0, fmt.Errorf("timeZoneStr is in wrong format") @@ -565,6 +579,10 @@ func getTimeZoneOffset(timeZoneStr string) (int, error) { return 0, err } + if hour < 0 || hour > 23 || minute < 0 || minute > 59 || second < 0 || second > 59 { + return 0, fmt.Errorf("timeZoneStr is in wrong format") + } + offset := hour*3600 + minute*60 + second if neg { offset = -offset diff --git a/go/vt/vttablet/jobcontroller/util_test.go b/go/vt/vttablet/jobcontroller/util_test.go index 6113c9d3bf..c468df4bd7 100644 --- a/go/vt/vttablet/jobcontroller/util_test.go +++ b/go/vt/vttablet/jobcontroller/util_test.go @@ -8,7 +8,6 @@ package jobcontroller import ( "errors" "testing" - "time" "vitess.io/vitess/go/vt/sqlparser" @@ -65,11 +64,11 @@ func TestGetTimeZoneStr(t *testing.T) { want string }{ {0, "UTC"}, - {60, "UTC +00:01:00"}, - {-60, "UTC -00:01:00"}, - {180, "UTC +00:03:00"}, - {-180, "UTC -00:03:00"}, - {3600, "UTC +01:00:00"}, + {60, "UTC+00:01:00"}, + {-60, "UTC-00:01:00"}, + {180, "UTC+00:03:00"}, + {-180, "UTC-00:03:00"}, + {3600, "UTC+01:00:00"}, } for _, tt := range tests { @@ -86,13 +85,13 @@ func TestGetTimeZoneOffset(t *testing.T) { wantError error }{ {"UTC", 0, nil}, - {"UTC+01:02", 3720, errors.New("timeZoneStr is in wrong format")}, + {"UTC +01:02", 3720, errors.New("timeZoneStr is in wrong format")}, - {"UTC +01:02:03", 3723, nil}, - {"UTC -01:02:03", -3723, nil}, - {"UTC +12:11:22", 43882, nil}, - {"UTC +23:59:59", 86399, nil}, - {"UTC -23:59:59", -86399, nil}, + {"UTC+01:02:03", 3723, nil}, + {"UTC-01:02:03", -3723, nil}, + {"UTC+12:11:22", 43882, nil}, + {"UTC+23:59:59", 86399, nil}, + {"UTC-23:59:59", -86399, nil}, } for _, test := range tests { @@ -112,11 +111,3 @@ func TestGetTimeZoneOffset(t *testing.T) { } } - -func TestTimeZone(t *testing.T) { - utc8Offset, _ := getTimeZoneOffset("UTC +08:00:00") - utc8 := time.FixedZone("timeZone", utc8Offset) - t1 := time.Date(2019, 3, 4, 5, 6, 7, 8, utc8).Unix() - t2 := time.Date(2019, 3, 4, 5, 6, 7, 8, time.Now().Location()).Unix() - assert.Equal(t, t1, t2) -} From e2f960cac0620501b3e558b957f64f82ec7135e7 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Sat, 13 Jan 2024 23:41:58 +0800 Subject: [PATCH 47/54] test: add interation tests, from parseDML to splitBatch Signed-off-by: newborn22 <953950914@qq.com> --- .../schema/job/non_transactional_dml_jobs.sql | 4 +- .../jobcontroller/batch_sql_related.go | 12 +- .../jobcontroller/batch_sql_related_test.go | 669 ++++++++++++++---- go/vt/vttablet/jobcontroller/controller.go | 20 +- go/vt/vttablet/jobcontroller/util.go | 6 +- go/vt/vttablet/jobcontroller/util_test.go | 211 +++++- 6 files changed, 727 insertions(+), 195 deletions(-) diff --git a/go/vt/sidecardb/schema/job/non_transactional_dml_jobs.sql b/go/vt/sidecardb/schema/job/non_transactional_dml_jobs.sql index d42716804b..97ddd6fdaf 100644 --- a/go/vt/sidecardb/schema/job/non_transactional_dml_jobs.sql +++ b/go/vt/sidecardb/schema/job/non_transactional_dml_jobs.sql @@ -35,8 +35,8 @@ CREATE TABLE IF NOT EXISTS mysql.non_transactional_dml_jobs `throttle_ratio` double NULL DEFAULT NULL, `throttle_expire_time` varchar(256) NULL DEFAULT NULL, `dealing_batch_id` varchar(256) NULL DEFAULT NULL, - `running_time_period_start` timestamp NULL DEFAULT NULL, - `running_time_period_end` timestamp NULL DEFAULT NULL, + `running_time_period_start` varchar(64) NULL DEFAULT NULL, + `running_time_period_end` varchar(64) NULL DEFAULT NULL, `running_time_period_time_zone` varchar(16) NULL DEFAULT NULL, PRIMARY KEY (`id`), KEY `job_uuid_idx` (`job_uuid`), diff --git a/go/vt/vttablet/jobcontroller/batch_sql_related.go b/go/vt/vttablet/jobcontroller/batch_sql_related.go index f0901d4d8e..bcab029545 100644 --- a/go/vt/vttablet/jobcontroller/batch_sql_related.go +++ b/go/vt/vttablet/jobcontroller/batch_sql_related.go @@ -82,6 +82,10 @@ func genSQLByReplaceWhereExprNode(stmt sqlparser.Statement, whereExpr sqlparser. } func genBatchSQL(stmt sqlparser.Statement, whereExpr sqlparser.Expr, currentBatchStart, currentBatchEnd []sqltypes.Value, pkInfos []PKInfo) (batchSQL, finalWhereStr string, err error) { + if stmt == nil { + return "", "", errors.New("genBatchSQL: stmt is nil") + } + // 1. 生成>=的部分 greatThanPart, err := genPKsGreaterEqualOrLessEqualStr(pkInfos, currentBatchStart, true) if err != nil { @@ -112,9 +116,9 @@ func genBatchSQL(stmt sqlparser.Statement, whereExpr sqlparser.Expr, currentBatc // 拆分列所支持的类型需要满足以下条件: // 1.在sql中可以正确地使用between或>=,<=进行比较运算,且没有精度问题。 // 2.可以转换成go中的int64,float64或string三种类型之一,且转换后,在golang中的比较规则和mysql中的比较规则相同 -func genCountSQL(tableSchema, tableName, whereExpr string) (countSQL string) { - countSQL = fmt.Sprintf("select count(*) as count_rows from %s.%s where %s", - tableSchema, tableName, whereExpr) +func genCountSQL(tableName, whereExpr string) (countSQL string) { + countSQL = fmt.Sprintf("select count(*) as count_rows from %s where %s", + tableName, whereExpr) return countSQL } @@ -216,7 +220,7 @@ func genNewBatchSQLsAndCountSQLsWhenSplittingBatch(batchSQLStmt, batchCountSQLSt // replace selectExprs in batchCountSQLStmt with PK cols to generate selectPKsSQL // the function will not change the original batchCountSQLStmt -func genSelectPKsSQL(batchCountSQLStmt sqlparser.Statement, pkInfos []PKInfo) string { +func genSelectPKsSQLByBatchCountSQL(batchCountSQLStmt sqlparser.Statement, pkInfos []PKInfo) string { batchCountSQLStmtSelect, _ := batchCountSQLStmt.(*sqlparser.Select) // 根据pk信息生成select exprs var pkExprs []sqlparser.SelectExpr diff --git a/go/vt/vttablet/jobcontroller/batch_sql_related_test.go b/go/vt/vttablet/jobcontroller/batch_sql_related_test.go index fdf5c424e3..e8befcc954 100644 --- a/go/vt/vttablet/jobcontroller/batch_sql_related_test.go +++ b/go/vt/vttablet/jobcontroller/batch_sql_related_test.go @@ -6,7 +6,6 @@ Licensed under the Apache v2(found in the LICENSE file in the root directory). package jobcontroller import ( - "fmt" "testing" "github.com/stretchr/testify/assert" @@ -70,150 +69,233 @@ func TestGenPKsGreaterEqualOrLessEqual(t *testing.T) { } } -// todo 函数的参数合法性检查 -// todo 1.pk的类型 2.where not, 子查询...... func TestGenBatchSQL(t *testing.T) { - sql := "update t set c = 1 where 1 = 1 or 2 = 2 and 3 = 3" - stmt, _ := sqlparser.Parse(sql) - whereExpr := stmt.(*sqlparser.Update).Where - currentBatchStart := []sqltypes.Value{sqltypes.NewInt64(1)} - currentBatchEnd := []sqltypes.Value{sqltypes.NewInt64(9)} - pkInfos := []PKInfo{{pkName: "pk1"}} - batchSQL, finalWhereStr, _ := genBatchSQL(stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) - expectedBatchSQL := "update t set c = 1 where (1 = 1 or 2 = 2 and 3 = 3) and (pk1 >= 1 and pk1 <= 9)" - expectedWhereStr := "(1 = 1 or 2 = 2 and 3 = 3) and (pk1 >= 1 and pk1 <= 9)" - assert.Equalf(t, expectedBatchSQL, batchSQL, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) - assert.Equalf(t, expectedWhereStr, finalWhereStr, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) - - sql = "update t set c = 1 where 1 = 1 or 2 = 2 " - stmt, _ = sqlparser.Parse(sql) - whereExpr = stmt.(*sqlparser.Update).Where - currentBatchStart = []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(1)} - currentBatchEnd = []sqltypes.Value{sqltypes.NewInt64(9), sqltypes.NewInt64(9)} - pkInfos = []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}} - batchSQL, finalWhereStr, _ = genBatchSQL(stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) - expectedBatchSQL = "update t set c = 1 where (1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))" - expectedWhereStr = "(1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))" - assert.Equalf(t, expectedBatchSQL, batchSQL, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) - assert.Equalf(t, expectedWhereStr, finalWhereStr, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + type args struct { + sql string + currentBatchStart, currentBatchEnd []sqltypes.Value + pkInfos []PKInfo + } + tests := []struct { + name string + args args + expectedBatchSQL string + expectedWhereStr string + }{ + { + name: "Single Int PK", + args: args{ + sql: "update t set c = 1 where 1 = 1 or 2 = 2 and 3 = 3", + currentBatchStart: []sqltypes.Value{sqltypes.NewInt64(1)}, + currentBatchEnd: []sqltypes.Value{sqltypes.NewInt64(9)}, + pkInfos: []PKInfo{{pkName: "pk1"}}, + }, + expectedBatchSQL: "update t set c = 1 where (1 = 1 or 2 = 2 and 3 = 3) and (pk1 >= 1 and pk1 <= 9)", + expectedWhereStr: "(1 = 1 or 2 = 2 and 3 = 3) and (pk1 >= 1 and pk1 <= 9)", + }, + { + name: "Two Int PK", + args: args{ + sql: "update t set c = 1 where 1 = 1 or 2 = 2", + currentBatchStart: []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(1)}, + currentBatchEnd: []sqltypes.Value{sqltypes.NewInt64(9), sqltypes.NewInt64(9)}, + pkInfos: []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}}, + }, + expectedBatchSQL: "update t set c = 1 where (1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))", + expectedWhereStr: "(1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))", + }, + { + name: "Three Int PK", + args: args{ + sql: "update t set c = 1 where 1 = 1 or 2 = 2", + currentBatchStart: []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(1), sqltypes.NewInt64(1)}, + currentBatchEnd: []sqltypes.Value{sqltypes.NewInt64(9), sqltypes.NewInt64(9), sqltypes.NewInt64(9)}, + pkInfos: []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}, {pkName: "pk3"}}, + }, + expectedBatchSQL: "update t set c = 1 where (1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 > 1 or pk1 = 1 and pk2 = 1 and pk3 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 < 9 or pk1 = 9 and pk2 = 9 and pk3 <= 9))", + expectedWhereStr: "(1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 > 1 or pk1 = 1 and pk2 = 1 and pk3 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 < 9 or pk1 = 9 and pk2 = 9 and pk3 <= 9))", + }, + } - sql = "update t set c = 1 where 1 = 1 or 2 = 2 " - stmt, _ = sqlparser.Parse(sql) - whereExpr = stmt.(*sqlparser.Update).Where - currentBatchStart = []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(1), sqltypes.NewInt64(1)} - currentBatchEnd = []sqltypes.Value{sqltypes.NewInt64(9), sqltypes.NewInt64(9), sqltypes.NewInt64(9)} - pkInfos = []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}, {pkName: "pk3"}} - batchSQL, finalWhereStr, _ = genBatchSQL(stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) - expectedBatchSQL = "update t set c = 1 where (1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 > 1 or pk1 = 1 and pk2 = 1 and pk3 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 < 9 or pk1 = 9 and pk2 = 9 and pk3 <= 9))" - expectedWhereStr = "(1 = 1 or 2 = 2) and ((pk1 > 1 or pk1 = 1 and pk2 > 1 or pk1 = 1 and pk2 = 1 and pk3 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 < 9 or pk1 = 9 and pk2 = 9 and pk3 <= 9))" - assert.Equalf(t, expectedBatchSQL, batchSQL, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) - assert.Equalf(t, expectedWhereStr, finalWhereStr, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + stmt, _ := sqlparser.Parse(tt.args.sql) + var whereAst *sqlparser.Where + switch s := stmt.(type) { + case *sqlparser.Update: + whereAst = s.Where + case *sqlparser.Delete: + whereAst = s.Where + default: + t.Fatalf("unsupported statement type: %T", stmt) + } + batchSQL, finalWhereStr, _ := genBatchSQL(stmt, whereAst.Expr, tt.args.currentBatchStart, tt.args.currentBatchEnd, tt.args.pkInfos) + assert.Equalf(t, tt.expectedBatchSQL, batchSQL, "genBatchSQL(%v, %v, %v,%v)", tt.args.sql, tt.args.currentBatchStart, tt.args.currentBatchEnd, tt.args.pkInfos) + assert.Equalf(t, tt.expectedWhereStr, finalWhereStr, "genBatchSQL(%v, %v, %v,%v)", tt.args.sql, tt.args.currentBatchStart, tt.args.currentBatchEnd, tt.args.pkInfos) + }) + } } func TestGenNewBatchSQLsAndCountSQLsWhenSplittingBatch(t *testing.T) { - pkInfos := []PKInfo{{pkName: "pk1"}} - whereStr := "where (1 = 1 and 2 = 2) and ((pk1 >= 1) and (pk1 <= 9))" - batchSQL := fmt.Sprintf("update t set c1 = '123' %s", whereStr) - batchCountSQL := fmt.Sprintf("select count(*) from t %s", whereStr) - batchSQLStmt, _ := sqlparser.Parse(batchSQL) - batchCountSQLStmt, _ := sqlparser.Parse(batchCountSQL) - curBatchNewEnd := []sqltypes.Value{sqltypes.NewInt64(5)} - newBatchStart := []sqltypes.Value{sqltypes.NewInt64(7)} - expectedCurBatchSQL := "update t set c1 = '123' where 1 = 1 and 2 = 2 and (pk1 >= 1 and pk1 <= 5)" - expectedNewBatchSQL := "update t set c1 = '123' where 1 = 1 and 2 = 2 and (pk1 >= 7 and pk1 <= 9)" - expectedNewBatchCountSQL := "select count(*) from t where 1 = 1 and 2 = 2 and (pk1 >= 7 and pk1 <= 9)" - curBatchSQL, newBatchSQL, newBatchCountSQL, _ := genNewBatchSQLsAndCountSQLsWhenSplittingBatch(batchSQLStmt, batchCountSQLStmt, curBatchNewEnd, newBatchStart, pkInfos) - assert.Equalf(t, expectedCurBatchSQL, curBatchSQL, "genNewBatchSQLsAndCountSQLsWhenSplittingBatch(%v,%v,%v,%v,%v)", batchSQLStmt, batchCountSQLStmt, curBatchNewEnd, newBatchStart, pkInfos) - assert.Equalf(t, expectedNewBatchSQL, newBatchSQL, "genNewBatchSQLsAndCountSQLsWhenSplittingBatch(%v,%v,%v,%v,%v)", batchSQLStmt, batchCountSQLStmt, curBatchNewEnd, newBatchStart, pkInfos) - assert.Equalf(t, expectedNewBatchCountSQL, newBatchCountSQL, "genNewBatchSQLsAndCountSQLsWhenSplittingBatch(%v,%v,%v,%v,%v)", batchSQLStmt, batchCountSQLStmt, curBatchNewEnd, newBatchStart, pkInfos) - - pkInfos = []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}} - whereStr = "where (1 = 1) and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))" - batchSQL = fmt.Sprintf("update t set c1 = '123' %s", whereStr) - batchCountSQL = fmt.Sprintf("select count(*) from t %s", whereStr) - batchSQLStmt, _ = sqlparser.Parse(batchSQL) - batchCountSQLStmt, _ = sqlparser.Parse(batchCountSQL) - curBatchNewEnd = []sqltypes.Value{sqltypes.NewInt64(5), sqltypes.NewInt64(5)} - newBatchStart = []sqltypes.Value{sqltypes.NewInt64(7), sqltypes.NewInt64(7)} - expectedCurBatchSQL = "update t set c1 = '123' where 1 = 1 and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 5 or pk1 = 5 and pk2 <= 5))" - expectedNewBatchSQL = "update t set c1 = '123' where 1 = 1 and ((pk1 > 7 or pk1 = 7 and pk2 >= 7) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))" - expectedNewBatchCountSQL = "select count(*) from t where 1 = 1 and ((pk1 > 7 or pk1 = 7 and pk2 >= 7) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))" - curBatchSQL, newBatchSQL, newBatchCountSQL, _ = genNewBatchSQLsAndCountSQLsWhenSplittingBatch(batchSQLStmt, batchCountSQLStmt, curBatchNewEnd, newBatchStart, pkInfos) - assert.Equalf(t, expectedCurBatchSQL, curBatchSQL, "genNewBatchSQLsAndCountSQLsWhenSplittingBatch(%v,%v,%v,%v,%v)", batchSQLStmt, batchCountSQLStmt, curBatchNewEnd, newBatchStart, pkInfos) - assert.Equalf(t, expectedNewBatchSQL, newBatchSQL, "genNewBatchSQLsAndCountSQLsWhenSplittingBatch(%v,%v,%v,%v,%v)", batchSQLStmt, batchCountSQLStmt, curBatchNewEnd, newBatchStart, pkInfos) - assert.Equalf(t, expectedNewBatchCountSQL, newBatchCountSQL, "genNewBatchSQLsAndCountSQLsWhenSplittingBatch(%v,%v,%v,%v,%v)", batchSQLStmt, batchCountSQLStmt, curBatchNewEnd, newBatchStart, pkInfos) + type args struct { + batchSQL string + batchCountSQL string + curBatchNewEnd, newBatchStart []sqltypes.Value + pkInfos []PKInfo + } + tests := []struct { + name string + args args + expectedCurBatchSQL string + expectedNewBatchSQL string + expectedNewBatchCountSQL string + }{ + { + name: "Single Int PK", + args: args{ + batchSQL: "update t set c1 = '123' where (1 = 1 and 2 = 2) and ((pk1 >= 1) and (pk1 <= 9))", + batchCountSQL: "select count(*) from t where (1 = 1 and 2 = 2) and ((pk1 >= 1) and (pk1 <= 9))", + curBatchNewEnd: []sqltypes.Value{sqltypes.NewInt64(5)}, + newBatchStart: []sqltypes.Value{sqltypes.NewInt64(7)}, + pkInfos: []PKInfo{{pkName: "pk1"}}, + }, + expectedCurBatchSQL: "update t set c1 = '123' where 1 = 1 and 2 = 2 and (pk1 >= 1 and pk1 <= 5)", + expectedNewBatchSQL: "update t set c1 = '123' where 1 = 1 and 2 = 2 and (pk1 >= 7 and pk1 <= 9)", + expectedNewBatchCountSQL: "select count(*) from t where 1 = 1 and 2 = 2 and (pk1 >= 7 and pk1 <= 9)", + }, + { + name: "Two Int PK", + args: args{ + batchSQL: "update t set c1 = '123' where (1 = 1) and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))", + batchCountSQL: "select count(*) from t where (1 = 1) and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))", + curBatchNewEnd: []sqltypes.Value{sqltypes.NewInt64(5), sqltypes.NewInt64(5)}, + newBatchStart: []sqltypes.Value{sqltypes.NewInt64(7), sqltypes.NewInt64(7)}, + pkInfos: []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}}, + }, + expectedCurBatchSQL: "update t set c1 = '123' where 1 = 1 and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 5 or pk1 = 5 and pk2 <= 5))", + expectedNewBatchSQL: "update t set c1 = '123' where 1 = 1 and ((pk1 > 7 or pk1 = 7 and pk2 >= 7) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))", + expectedNewBatchCountSQL: "select count(*) from t where 1 = 1 and ((pk1 > 7 or pk1 = 7 and pk2 >= 7) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + batchSQLStmt, _ := sqlparser.Parse(tt.args.batchSQL) + batchCountSQLStmt, _ := sqlparser.Parse(tt.args.batchCountSQL) + curBatchSQL, newBatchSQL, newBatchCountSQL, _ := genNewBatchSQLsAndCountSQLsWhenSplittingBatch(batchSQLStmt, batchCountSQLStmt, tt.args.curBatchNewEnd, tt.args.newBatchStart, tt.args.pkInfos) + assert.Equalf(t, tt.expectedCurBatchSQL, curBatchSQL, "genNewBatchSQLsAndCountSQLsWhenSplittingBatch(%v,%v,%v,%v,%v)", batchSQLStmt, batchCountSQLStmt, tt.args.curBatchNewEnd, tt.args.newBatchStart, tt.args.pkInfos) + assert.Equalf(t, tt.expectedNewBatchSQL, newBatchSQL, "genNewBatchSQLsAndCountSQLsWhenSplittingBatch(%v,%v,%v,%v,%v)", batchSQLStmt, batchCountSQLStmt, tt.args.curBatchNewEnd, tt.args.newBatchStart, tt.args.pkInfos) + assert.Equalf(t, tt.expectedNewBatchCountSQL, newBatchCountSQL, "genNewBatchSQLsAndCountSQLsWhenSplittingBatch(%v,%v,%v,%v,%v)", batchSQLStmt, batchCountSQLStmt, tt.args.curBatchNewEnd, tt.args.newBatchStart, tt.args.pkInfos) + }) + } } func TestGetUserWhereExpr(t *testing.T) { - sql := "update t set c1 = '123' where 1 = 1 and 2 = 2 and 3 = 3 and (pk1 >= 1 and pk1 <= 9)" - stmt, _ := sqlparser.Parse(sql) - userWhereExpr := getUserWhereExpr(stmt) - userWhereStr := sqlparser.String(userWhereExpr) - expectedUserWhereStr := "1 = 1 and 2 = 2 and 3 = 3" - assert.Equalf(t, expectedUserWhereStr, userWhereStr, "getUserWhereExpr(%v)", stmt) + type args struct { + sql string + } + test := []struct { + name string + args args + expectedUserWhereStr string + }{ + { + name: "and", + args: args{ + sql: "update t set c1 = '123' where 1 = 1 and 2 = 2 and 3 = 3 and (pk1 >= 1 and pk1 <= 9)", + }, + expectedUserWhereStr: "1 = 1 and 2 = 2 and 3 = 3", + }, + } + for _, tt := range test { + t.Run(tt.name, func(t *testing.T) { + stmt, _ := sqlparser.Parse(tt.args.sql) + userWhereExpr := getUserWhereExpr(stmt) + userWhereStr := sqlparser.String(userWhereExpr) + assert.Equalf(t, tt.expectedUserWhereStr, userWhereStr, "getUserWhereExpr(%v)", stmt) + }) + } } func TestBatchSQL(t *testing.T) { - userWhereStr := "1 = 1 and 2 = 2" - pkConditionStr := "(pk1 >= 1 and pk1 <= 9)" - // 1. get batchSQL by calling genBatchSQL - sql := fmt.Sprintf("update t set c = 1 where %s", userWhereStr) - stmt, _ := sqlparser.Parse(sql) - whereExpr := stmt.(*sqlparser.Update).Where - currentBatchStart := []sqltypes.Value{sqltypes.NewInt64(1)} - currentBatchEnd := []sqltypes.Value{sqltypes.NewInt64(9)} - pkInfos := []PKInfo{{pkName: "pk1"}} - batchSQL, finalWhereStr, _ := genBatchSQL(stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) - expectedBatchSQL := fmt.Sprintf("update t set c = 1 where %s and %s", userWhereStr, pkConditionStr) - expectedWhereStr := fmt.Sprintf("%s and %s", userWhereStr, pkConditionStr) - assert.Equalf(t, expectedBatchSQL, batchSQL, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) - assert.Equalf(t, expectedWhereStr, finalWhereStr, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) - batchSQLStmt, _ := sqlparser.Parse(batchSQL) - // 2. test getUserWhereExpr base on batchSQ - gotUserWhereExpr := getUserWhereExpr(batchSQLStmt) - gotUserWhereStr := sqlparser.String(gotUserWhereExpr) - expectedUserWhereStr := userWhereStr - assert.Equalf(t, expectedUserWhereStr, gotUserWhereStr, "getUserWhereExpr(%v)", stmt) + type args struct { + sql string + userWhereStr string + currentBatchStart, currentBatchEnd []sqltypes.Value + pkInfos []PKInfo + } + tests := []struct { + name string + args args + expectedBatchSQL string + expectedWhereStr string + expectedGtStr string + expectedLsStr string + }{ + { + name: "Single Int PK", + args: args{ + sql: "update t set c = 1 where 1 = 1 and 2 = 2", + userWhereStr: "1 = 1 and 2 = 2", + currentBatchStart: []sqltypes.Value{sqltypes.NewInt64(5)}, + currentBatchEnd: []sqltypes.Value{sqltypes.NewInt64(7)}, + pkInfos: []PKInfo{{pkName: "pk1"}}, + }, + expectedBatchSQL: "update t set c = 1 where 1 = 1 and 2 = 2 and (pk1 >= 5 and pk1 <= 7)", + expectedWhereStr: "1 = 1 and 2 = 2 and (pk1 >= 5 and pk1 <= 7)", + expectedGtStr: "pk1 >= 5", + expectedLsStr: "pk1 <= 7", + }, + { + name: "Two Int PK", + args: args{ + sql: "update t set c = 1 where 1 = 1 and 2 = 2 or 3 > 2 and 1 > 3 or 3 > 4 and 1 = 1", + userWhereStr: "1 = 1 and 2 = 2 or 3 > 2 and 1 > 3 or 3 > 4 and 1 = 1", + currentBatchStart: []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(1)}, + currentBatchEnd: []sqltypes.Value{sqltypes.NewInt64(9), sqltypes.NewInt64(9)}, + pkInfos: []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}}, + }, + expectedBatchSQL: "update t set c = 1 where (1 = 1 and 2 = 2 or 3 > 2 and 1 > 3 or 3 > 4 and 1 = 1) and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))", + expectedWhereStr: "(1 = 1 and 2 = 2 or 3 > 2 and 1 > 3 or 3 > 4 and 1 = 1) and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))", + expectedGtStr: "pk1 > 1 or pk1 = 1 and pk2 >= 1", + expectedLsStr: "pk1 < 9 or pk1 = 9 and pk2 <= 9", + }, + } - // 3. test getBatchSQLGreatThanAndLessThanExprNode base on batchSQL - gtNode, lsNode := getBatchSQLGreatThanAndLessThanExprNode(batchSQLStmt) - gtStr := sqlparser.String(gtNode) - lsStr := sqlparser.String(lsNode) - expectedGtStr := "pk1 >= 1" - expectedLsStr := "pk1 <= 9" - assert.Equalf(t, expectedGtStr, gtStr, "getBatchSQLGreatThanAndLessThanExprNode(%v)", batchSQLStmt) - assert.Equalf(t, expectedLsStr, lsStr, "getBatchSQLGreatThanAndLessThanExprNode(%v)", batchSQLStmt) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { - // repeat the same steps but with different args - userWhereStr = "1 = 1 and 2 = 2 or 3 > 2 and 1 > 3 or 3 > 4 and 1 = 1" - pkConditionStr = "((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))" - sql = fmt.Sprintf("update t set c = 1 where %s", userWhereStr) - stmt, _ = sqlparser.Parse(sql) - whereExpr = stmt.(*sqlparser.Update).Where - currentBatchStart = []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(1)} - currentBatchEnd = []sqltypes.Value{sqltypes.NewInt64(9), sqltypes.NewInt64(9)} - pkInfos = []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}} - batchSQL, finalWhereStr, _ = genBatchSQL(stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) - // Different from the 1st test case, here we enclose userWhereStr with parentheses because it has "or" operators. - expectedBatchSQL = fmt.Sprintf("update t set c = 1 where (%s) and %s", userWhereStr, pkConditionStr) - expectedWhereStr = fmt.Sprintf("(%s) and %s", userWhereStr, pkConditionStr) - assert.Equalf(t, expectedBatchSQL, batchSQL, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) - assert.Equalf(t, expectedWhereStr, finalWhereStr, "genBatchSQL(%v, %v, %v,%v,%v, %v)", sql, stmt, whereExpr.Expr, currentBatchStart, currentBatchEnd, pkInfos) - batchSQLStmt, _ = sqlparser.Parse(batchSQL) - gotUserWhereExpr = getUserWhereExpr(batchSQLStmt) - gotUserWhereStr = sqlparser.String(gotUserWhereExpr) - expectedUserWhereStr = userWhereStr - assert.Equalf(t, expectedUserWhereStr, gotUserWhereStr, "getUserWhereExpr(%v)", stmt) + // 1. get batchSQL by calling genBatchSQL + stmt, _ := sqlparser.Parse(tt.args.sql) + var whereAst *sqlparser.Where + switch s := stmt.(type) { + case *sqlparser.Update: + whereAst = s.Where + case *sqlparser.Delete: + whereAst = s.Where + default: + t.Fatalf("unsupported statement type: %T", stmt) + } - gtNode, lsNode = getBatchSQLGreatThanAndLessThanExprNode(batchSQLStmt) - gtStr = sqlparser.String(gtNode) - lsStr = sqlparser.String(lsNode) - expectedGtStr = "pk1 > 1 or pk1 = 1 and pk2 >= 1" - expectedLsStr = "pk1 < 9 or pk1 = 9 and pk2 <= 9" - assert.Equalf(t, expectedGtStr, gtStr, "getBatchSQLGreatThanAndLessThanExprNode(%v)", batchSQLStmt) - assert.Equalf(t, expectedLsStr, lsStr, "getBatchSQLGreatThanAndLessThanExprNode(%v)", batchSQLStmt) + batchSQL, finalWhereStr, _ := genBatchSQL(stmt, whereAst.Expr, tt.args.currentBatchStart, tt.args.currentBatchEnd, tt.args.pkInfos) + assert.Equalf(t, tt.expectedBatchSQL, batchSQL, "genBatchSQL(%v, %v, %v,%v,%v, %v)", tt.args.sql, stmt, whereAst.Expr, tt.args.currentBatchStart, tt.args.currentBatchEnd, tt.args.pkInfos) + assert.Equalf(t, tt.expectedWhereStr, finalWhereStr, "genBatchSQL(%v, %v, %v,%v,%v, %v)", tt.args.sql, stmt, whereAst.Expr, tt.args.currentBatchStart, tt.args.currentBatchEnd, tt.args.pkInfos) + batchSQLStmt, _ := sqlparser.Parse(batchSQL) + + // 2. test getUserWhereExpr base on batchSQ + gotUserWhereExpr := getUserWhereExpr(batchSQLStmt) + gotUserWhereStr := sqlparser.String(gotUserWhereExpr) + expectedUserWhereStr := tt.args.userWhereStr + assert.Equalf(t, expectedUserWhereStr, gotUserWhereStr, "getUserWhereExpr(%v)", stmt) + + // 3. test getBatchSQLGreatThanAndLessThanExprNode base on batchSQL + gtNode, lsNode := getBatchSQLGreatThanAndLessThanExprNode(batchSQLStmt) + gtStr := sqlparser.String(gtNode) + lsStr := sqlparser.String(lsNode) + assert.Equalf(t, tt.expectedGtStr, gtStr, "getBatchSQLGreatThanAndLessThanExprNode(%v)", batchSQLStmt) + assert.Equalf(t, tt.expectedLsStr, lsStr, "getBatchSQLGreatThanAndLessThanExprNode(%v)", batchSQLStmt) + }) + } } @@ -253,12 +335,325 @@ func TestStripComments(t *testing.T) { } func TestGenSelectPKsSQL(t *testing.T) { - batchCountSQL := "select count(*) from t where 1 = 1" - batchCountSQLStmt, _ := sqlparser.Parse(batchCountSQL) - pkInfos := []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}} - gotSQL := genSelectPKsSQL(batchCountSQLStmt, pkInfos) - expectedSQL := "select pk1, pk2 from t where 1 = 1" - assert.Equalf(t, expectedSQL, gotSQL, "genSelectPKsSQL(%v,%v)", batchCountSQLStmt, pkInfos) - // batchCountSQLStmt should not be changed - assert.Equalf(t, batchCountSQL, sqlparser.String(batchCountSQLStmt), "genSelectPKsSQL(%v,%v)", batchCountSQLStmt, pkInfos) + type args struct { + batchCountSQL string + pkInfos []PKInfo + } + tests := []struct { + name string + args args + expectedSQL string + }{ + { + name: "basic test", + args: args{ + batchCountSQL: "select count(*) from t where 1 = 1", + pkInfos: []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}}, + }, + expectedSQL: "select pk1, pk2 from t where 1 = 1", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + batchCountSQLStmt, _ := sqlparser.Parse(tt.args.batchCountSQL) + gotSQL := genSelectPKsSQLByBatchCountSQL(batchCountSQLStmt, tt.args.pkInfos) + assert.Equalf(t, tt.expectedSQL, gotSQL, "genSelectPKsSQLByBatchCountSQL(%v,%v)", batchCountSQLStmt, tt.args.pkInfos) + // batchCountSQLStmt should not be changed + assert.Equalf(t, tt.args.batchCountSQL, sqlparser.String(batchCountSQLStmt), "genSelectPKsSQLByBatchCountSQL(%v,%v)", batchCountSQLStmt, tt.args.pkInfos) + }) + } + +} + +func TestParseDML2GenBatchSQL(t *testing.T) { + type args struct { + dmlSQL string + pkInfos []PKInfo + curBatchStart, curBatchEnd []sqltypes.Value + curBatchNewEnd, newBatchStart []sqltypes.Value + } + tests := []struct { + name string + args args + expectedTableName string + expectedWhereStr string + expectedParseDMLErr error + expectedSelectPksSQL string + expectedGenBatchSQLErr error + expectedBatchSQL, expectedBatchCountSQL string + expectedGenNewBatchSQLErr error + expectedCurBatchNewSQL, expectedNewBatchSQL, expectedNewBatchCountSQL string + }{ + { + name: "single int PK", + args: args{ + dmlSQL: "update t as mytable set c = '123' where c1 = 1", + pkInfos: []PKInfo{{pkName: "pk1"}}, + curBatchStart: []sqltypes.Value{sqltypes.NewInt64(1)}, + curBatchEnd: []sqltypes.Value{sqltypes.NewInt64(9)}, + curBatchNewEnd: []sqltypes.Value{sqltypes.NewInt64(5)}, + newBatchStart: []sqltypes.Value{sqltypes.NewInt64(7)}, + }, + expectedTableName: "t as mytable", + expectedWhereStr: "c1 = 1", + expectedParseDMLErr: nil, + expectedSelectPksSQL: "select pk1 from t as mytable where c1 = 1 order by pk1", + expectedGenBatchSQLErr: nil, + expectedBatchSQL: "update t as mytable set c = '123' where c1 = 1 and (pk1 >= 1 and pk1 <= 9)", + expectedBatchCountSQL: "select count(*) as count_rows from t as mytable where c1 = 1 and (pk1 >= 1 and pk1 <= 9)", + expectedGenNewBatchSQLErr: nil, + expectedCurBatchNewSQL: "update t as mytable set c = '123' where c1 = 1 and (pk1 >= 1 and pk1 <= 5)", + expectedNewBatchSQL: "update t as mytable set c = '123' where c1 = 1 and (pk1 >= 7 and pk1 <= 9)", + expectedNewBatchCountSQL: "select count(*) as count_rows from t as mytable where c1 = 1 and (pk1 >= 7 and pk1 <= 9)", + }, + { + name: "two int PKs", + args: args{ + dmlSQL: "update mydb.t as mytable set c = '123' where c1 = 1", + pkInfos: []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}}, + curBatchStart: []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewInt64(1)}, + curBatchEnd: []sqltypes.Value{sqltypes.NewInt64(9), sqltypes.NewInt64(9)}, + curBatchNewEnd: []sqltypes.Value{sqltypes.NewInt64(5), sqltypes.NewInt64(5)}, + newBatchStart: []sqltypes.Value{sqltypes.NewInt64(7), sqltypes.NewInt64(7)}, + }, + expectedTableName: "mydb.t as mytable", + expectedWhereStr: "c1 = 1", + expectedParseDMLErr: nil, + expectedSelectPksSQL: "select pk1,pk2 from mydb.t as mytable where c1 = 1 order by pk1,pk2", + expectedGenBatchSQLErr: nil, + expectedBatchSQL: "update mydb.t as mytable set c = '123' where c1 = 1 and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))", + expectedBatchCountSQL: "select count(*) as count_rows from mydb.t as mytable where c1 = 1 and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))", + expectedGenNewBatchSQLErr: nil, + expectedCurBatchNewSQL: "update mydb.t as mytable set c = '123' where c1 = 1 and ((pk1 > 1 or pk1 = 1 and pk2 >= 1) and (pk1 < 5 or pk1 = 5 and pk2 <= 5))", + expectedNewBatchSQL: "update mydb.t as mytable set c = '123' where c1 = 1 and ((pk1 > 7 or pk1 = 7 and pk2 >= 7) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))", + expectedNewBatchCountSQL: "select count(*) as count_rows from mydb.t as mytable where c1 = 1 and ((pk1 > 7 or pk1 = 7 and pk2 >= 7) and (pk1 < 9 or pk1 = 9 and pk2 <= 9))", + }, + { + name: "composite pk types: int and datetime", + args: args{ + dmlSQL: "update mydb.t as mytable set c = '123' where c1 = 1", + pkInfos: []PKInfo{{pkName: "pk1"}, {pkName: "pk2"}}, + curBatchStart: []sqltypes.Value{sqltypes.NewInt64(1), sqltypes.NewDatetime("2024-01-01 12:34:56")}, + curBatchEnd: []sqltypes.Value{sqltypes.NewInt64(9), sqltypes.NewDatetime("2024-01-01 12:34:56")}, + curBatchNewEnd: []sqltypes.Value{sqltypes.NewInt64(5), sqltypes.NewDatetime("2024-01-01 12:34:56")}, + newBatchStart: []sqltypes.Value{sqltypes.NewInt64(7), sqltypes.NewDatetime("2024-01-01 12:34:56")}, + }, + expectedTableName: "mydb.t as mytable", + expectedWhereStr: "c1 = 1", + expectedParseDMLErr: nil, + expectedSelectPksSQL: "select pk1,pk2 from mydb.t as mytable where c1 = 1 order by pk1,pk2", + expectedGenBatchSQLErr: nil, + expectedBatchSQL: "update mydb.t as mytable set c = '123' where c1 = 1 and ((pk1 > 1 or pk1 = 1 and pk2 >= '2024-01-01 12:34:56') and (pk1 < 9 or pk1 = 9 and pk2 <= '2024-01-01 12:34:56'))", + expectedBatchCountSQL: "select count(*) as count_rows from mydb.t as mytable where c1 = 1 and ((pk1 > 1 or pk1 = 1 and pk2 >= '2024-01-01 12:34:56') and (pk1 < 9 or pk1 = 9 and pk2 <= '2024-01-01 12:34:56'))", + expectedGenNewBatchSQLErr: nil, + expectedCurBatchNewSQL: "update mydb.t as mytable set c = '123' where c1 = 1 and ((pk1 > 1 or pk1 = 1 and pk2 >= '2024-01-01 12:34:56') and (pk1 < 5 or pk1 = 5 and pk2 <= '2024-01-01 12:34:56'))", + expectedNewBatchSQL: "update mydb.t as mytable set c = '123' where c1 = 1 and ((pk1 > 7 or pk1 = 7 and pk2 >= '2024-01-01 12:34:56') and (pk1 < 9 or pk1 = 9 and pk2 <= '2024-01-01 12:34:56'))", + expectedNewBatchCountSQL: "select count(*) as count_rows from mydb.t as mytable where c1 = 1 and ((pk1 > 7 or pk1 = 7 and pk2 >= '2024-01-01 12:34:56') and (pk1 < 9 or pk1 = 9 and pk2 <= '2024-01-01 12:34:56'))", + }, + { + name: "complex where condition", + args: args{ + dmlSQL: "update mydb.t as mytable set c = '123' where " + + "(c1 = 'v1' or c2 > 100) and " + + "(c3 like 'abc%' and c4 in ('a', 'b', 'c')) or " + + "c5 is null and c6 between 10 and 100", + pkInfos: []PKInfo{{pkName: "pk1"}}, + curBatchStart: []sqltypes.Value{sqltypes.NewInt64(1)}, + curBatchEnd: []sqltypes.Value{sqltypes.NewInt64(9)}, + curBatchNewEnd: []sqltypes.Value{sqltypes.NewInt64(5)}, + newBatchStart: []sqltypes.Value{sqltypes.NewInt64(7)}, + }, + expectedTableName: "mydb.t as mytable", + expectedWhereStr: "(c1 = 'v1' or c2 > 100) and " + + "(c3 like 'abc%' and c4 in ('a', 'b', 'c')) or " + + "c5 is null and c6 between 10 and 100", + expectedParseDMLErr: nil, + expectedSelectPksSQL: "select pk1 from mydb.t as mytable where " + + "(c1 = 'v1' or c2 > 100) and " + + "(c3 like 'abc%' and c4 in ('a', 'b', 'c')) or " + + "c5 is null and c6 between 10 and 100" + + " order by pk1", + expectedGenBatchSQLErr: nil, + expectedBatchSQL: "update mydb.t as mytable set c = '123' where " + + "((c1 = 'v1' or c2 > 100) and " + + "(c3 like 'abc%' and c4 in ('a', 'b', 'c')) or " + + "c5 is null and c6 between 10 and 100)" + + " and (pk1 >= 1 and pk1 <= 9)", + expectedBatchCountSQL: "select count(*) as count_rows from mydb.t as mytable where " + + "((c1 = 'v1' or c2 > 100) and " + + "(c3 like 'abc%' and c4 in ('a', 'b', 'c')) or " + + "c5 is null and c6 between 10 and 100)" + + " and (pk1 >= 1 and pk1 <= 9)", + expectedGenNewBatchSQLErr: nil, + expectedCurBatchNewSQL: "update mydb.t as mytable set c = '123' where " + + "((c1 = 'v1' or c2 > 100) and " + + "(c3 like 'abc%' and c4 in ('a', 'b', 'c')) or " + + "c5 is null and c6 between 10 and 100)" + + " and (pk1 >= 1 and pk1 <= 5)", + expectedNewBatchSQL: "update mydb.t as mytable set c = '123' where " + + "((c1 = 'v1' or c2 > 100) and " + + "(c3 like 'abc%' and c4 in ('a', 'b', 'c')) or " + + "c5 is null and c6 between 10 and 100)" + + " and (pk1 >= 7 and pk1 <= 9)", + expectedNewBatchCountSQL: "select count(*) as count_rows from mydb.t as mytable where " + + "((c1 = 'v1' or c2 > 100) and " + + "(c3 like 'abc%' and c4 in ('a', 'b', 'c')) or " + + "c5 is null and c6 between 10 and 100)" + + " and (pk1 >= 7 and pk1 <= 9)", + }, + { + name: "subquery in where condition", + args: args{ + dmlSQL: "update mydb.t as mytable set c1 = '123' where c2 in (select c2 from t2)", + pkInfos: []PKInfo{{pkName: "pk1"}}, + curBatchStart: []sqltypes.Value{sqltypes.NewInt64(1)}, + curBatchEnd: []sqltypes.Value{sqltypes.NewInt64(9)}, + curBatchNewEnd: []sqltypes.Value{sqltypes.NewInt64(5)}, + newBatchStart: []sqltypes.Value{sqltypes.NewInt64(7)}, + }, + expectedTableName: "mydb.t as mytable", + expectedWhereStr: "c2 in (select c2 from t2)", + expectedParseDMLErr: nil, + expectedSelectPksSQL: "select pk1 from mydb.t as mytable where c2 in (select c2 from t2) order by pk1", + expectedGenBatchSQLErr: nil, + expectedBatchSQL: "update mydb.t as mytable set c1 = '123' where c2 in (select c2 from t2) and (pk1 >= 1 and pk1 <= 9)", + expectedBatchCountSQL: "select count(*) as count_rows from mydb.t as mytable where c2 in (select c2 from t2) and (pk1 >= 1 and pk1 <= 9)", + expectedGenNewBatchSQLErr: nil, + expectedCurBatchNewSQL: "update mydb.t as mytable set c1 = '123' where c2 in (select c2 from t2) and (pk1 >= 1 and pk1 <= 5)", + expectedNewBatchSQL: "update mydb.t as mytable set c1 = '123' where c2 in (select c2 from t2) and (pk1 >= 7 and pk1 <= 9)", + expectedNewBatchCountSQL: "select count(*) as count_rows from mydb.t as mytable where c2 in (select c2 from t2) and (pk1 >= 7 and pk1 <= 9)", + }, + { + name: "subquery in set", + args: args{ + dmlSQL: "update mydb.t as mytable set c1 = (select c1 from t2 limit 1) where 1 = 1", + pkInfos: []PKInfo{{pkName: "pk1"}}, + curBatchStart: []sqltypes.Value{sqltypes.NewInt64(1)}, + curBatchEnd: []sqltypes.Value{sqltypes.NewInt64(9)}, + curBatchNewEnd: []sqltypes.Value{sqltypes.NewInt64(5)}, + newBatchStart: []sqltypes.Value{sqltypes.NewInt64(7)}, + }, + expectedTableName: "mydb.t as mytable", + expectedWhereStr: "1 = 1", + expectedParseDMLErr: nil, + expectedSelectPksSQL: "select pk1 from mydb.t as mytable where 1 = 1 order by pk1", + expectedGenBatchSQLErr: nil, + expectedBatchSQL: "update mydb.t as mytable set c1 = (select c1 from t2 limit 1) where 1 = 1 and (pk1 >= 1 and pk1 <= 9)", + expectedBatchCountSQL: "select count(*) as count_rows from mydb.t as mytable where 1 = 1 and (pk1 >= 1 and pk1 <= 9)", + expectedGenNewBatchSQLErr: nil, + expectedCurBatchNewSQL: "update mydb.t as mytable set c1 = (select c1 from t2 limit 1) where 1 = 1 and (pk1 >= 1 and pk1 <= 5)", + expectedNewBatchSQL: "update mydb.t as mytable set c1 = (select c1 from t2 limit 1) where 1 = 1 and (pk1 >= 7 and pk1 <= 9)", + expectedNewBatchCountSQL: "select count(*) as count_rows from mydb.t as mytable where 1 = 1 and (pk1 >= 7 and pk1 <= 9)", + }, + { + name: "subquery in where exsit", + args: args{ + dmlSQL: "update mydb.t as mytable set c1 = '123' where exists (select c2 from t2 where t2.c2 = mytable.c1)", + pkInfos: []PKInfo{{pkName: "pk1"}}, + curBatchStart: []sqltypes.Value{sqltypes.NewInt64(1)}, + curBatchEnd: []sqltypes.Value{sqltypes.NewInt64(9)}, + curBatchNewEnd: []sqltypes.Value{sqltypes.NewInt64(5)}, + newBatchStart: []sqltypes.Value{sqltypes.NewInt64(7)}, + }, + expectedTableName: "mydb.t as mytable", + expectedWhereStr: "exists (select c2 from t2 where t2.c2 = mytable.c1)", + expectedParseDMLErr: nil, + expectedSelectPksSQL: "select pk1 from mydb.t as mytable where exists (select c2 from t2 where t2.c2 = mytable.c1) order by pk1", + expectedGenBatchSQLErr: nil, + expectedBatchSQL: "update mydb.t as mytable set c1 = '123' where exists (select c2 from t2 where t2.c2 = mytable.c1) and (pk1 >= 1 and pk1 <= 9)", + expectedBatchCountSQL: "select count(*) as count_rows from mydb.t as mytable where exists (select c2 from t2 where t2.c2 = mytable.c1) and (pk1 >= 1 and pk1 <= 9)", + expectedGenNewBatchSQLErr: nil, + expectedCurBatchNewSQL: "update mydb.t as mytable set c1 = '123' where exists (select c2 from t2 where t2.c2 = mytable.c1) and (pk1 >= 1 and pk1 <= 5)", + expectedNewBatchSQL: "update mydb.t as mytable set c1 = '123' where exists (select c2 from t2 where t2.c2 = mytable.c1) and (pk1 >= 7 and pk1 <= 9)", + expectedNewBatchCountSQL: "select count(*) as count_rows from mydb.t as mytable where exists (select c2 from t2 where t2.c2 = mytable.c1) and (pk1 >= 7 and pk1 <= 9)", + }, + { + name: "subquery in where not exsit", + args: args{ + dmlSQL: "update mydb.t as mytable set c1 = '123' where not exists (select c2 from t2 where t2.c2 = mytable.c1)", + pkInfos: []PKInfo{{pkName: "pk1"}}, + curBatchStart: []sqltypes.Value{sqltypes.NewInt64(1)}, + curBatchEnd: []sqltypes.Value{sqltypes.NewInt64(9)}, + curBatchNewEnd: []sqltypes.Value{sqltypes.NewInt64(5)}, + newBatchStart: []sqltypes.Value{sqltypes.NewInt64(7)}, + }, + expectedTableName: "mydb.t as mytable", + expectedWhereStr: "not exists (select c2 from t2 where t2.c2 = mytable.c1)", + expectedParseDMLErr: nil, + expectedSelectPksSQL: "select pk1 from mydb.t as mytable where not exists (select c2 from t2 where t2.c2 = mytable.c1) order by pk1", + expectedGenBatchSQLErr: nil, + expectedBatchSQL: "update mydb.t as mytable set c1 = '123' where not exists (select c2 from t2 where t2.c2 = mytable.c1) and (pk1 >= 1 and pk1 <= 9)", + expectedBatchCountSQL: "select count(*) as count_rows from mydb.t as mytable where not exists (select c2 from t2 where t2.c2 = mytable.c1) and (pk1 >= 1 and pk1 <= 9)", + expectedGenNewBatchSQLErr: nil, + expectedCurBatchNewSQL: "update mydb.t as mytable set c1 = '123' where not exists (select c2 from t2 where t2.c2 = mytable.c1) and (pk1 >= 1 and pk1 <= 5)", + expectedNewBatchSQL: "update mydb.t as mytable set c1 = '123' where not exists (select c2 from t2 where t2.c2 = mytable.c1) and (pk1 >= 7 and pk1 <= 9)", + expectedNewBatchCountSQL: "select count(*) as count_rows from mydb.t as mytable where not exists (select c2 from t2 where t2.c2 = mytable.c1) and (pk1 >= 7 and pk1 <= 9)", + }, + { + name: "foreign subquery in where", + args: args{ + dmlSQL: "update mydb.t as mytable set c1 = '123' where c2 = (select max(c2) from t2 where t2.foreign_key = t1.primary_key)", + pkInfos: []PKInfo{{pkName: "pk1"}}, + curBatchStart: []sqltypes.Value{sqltypes.NewInt64(1)}, + curBatchEnd: []sqltypes.Value{sqltypes.NewInt64(9)}, + curBatchNewEnd: []sqltypes.Value{sqltypes.NewInt64(5)}, + newBatchStart: []sqltypes.Value{sqltypes.NewInt64(7)}, + }, + expectedTableName: "mydb.t as mytable", + expectedWhereStr: "c2 = (select max(c2) from t2 where t2.foreign_key = t1.primary_key)", + expectedParseDMLErr: nil, + expectedSelectPksSQL: "select pk1 from mydb.t as mytable where c2 = (select max(c2) from t2 where t2.foreign_key = t1.primary_key) order by pk1", + expectedGenBatchSQLErr: nil, + expectedBatchSQL: "update mydb.t as mytable set c1 = '123' where c2 = (select max(c2) from t2 where t2.foreign_key = t1.primary_key) and (pk1 >= 1 and pk1 <= 9)", + expectedBatchCountSQL: "select count(*) as count_rows from mydb.t as mytable where c2 = (select max(c2) from t2 where t2.foreign_key = t1.primary_key) and (pk1 >= 1 and pk1 <= 9)", + expectedGenNewBatchSQLErr: nil, + expectedCurBatchNewSQL: "update mydb.t as mytable set c1 = '123' where c2 = (select max(c2) from t2 where t2.foreign_key = t1.primary_key) and (pk1 >= 1 and pk1 <= 5)", + expectedNewBatchSQL: "update mydb.t as mytable set c1 = '123' where c2 = (select max(c2) from t2 where t2.foreign_key = t1.primary_key) and (pk1 >= 7 and pk1 <= 9)", + expectedNewBatchCountSQL: "select count(*) as count_rows from mydb.t as mytable where c2 = (select max(c2) from t2 where t2.foreign_key = t1.primary_key) and (pk1 >= 7 and pk1 <= 9)", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // 1.parse dmlsql and verify + tableName, whereExpr, stmt, err := parseDML(tt.args.dmlSQL) + if tt.expectedParseDMLErr == nil { + assert.Nil(t, err) + } else { + assert.Equalf(t, tt.expectedParseDMLErr.Error(), err.Error(), "parseDML(%v)", tt.args.dmlSQL) + } + whereStr := sqlparser.String(whereExpr) + assert.Equalf(t, tt.expectedTableName, tableName, "parseDML(%v)", tt.args.dmlSQL) + assert.Equalf(t, tt.expectedWhereStr, whereStr, "parseDML(%v)", tt.args.dmlSQL) + + // 2.get selectPksSQL + selectPksSQL := sprintfSelectPksSQL(tableName, whereStr, tt.args.pkInfos) + assert.Equalf(t, tt.expectedSelectPksSQL, selectPksSQL, "sprintfSelectPksSQL(%v,%v)", tableName, whereStr) + + // 3.get batchSQL and batchCountSQL + batchSQL, finalWhereStr, err := genBatchSQL(stmt, whereExpr, tt.args.curBatchStart, tt.args.curBatchEnd, tt.args.pkInfos) + batchCountSQL := genCountSQL(tableName, finalWhereStr) + if tt.expectedGenBatchSQLErr == nil { + assert.Nil(t, err) + } else { + assert.Equalf(t, tt.expectedGenBatchSQLErr.Error(), err.Error(), "genBatchSQL(%v,%v,%v,%v)", stmt, whereExpr, tt.args.curBatchStart, tt.args.curBatchEnd) + } + assert.Equalf(t, tt.expectedBatchSQL, batchSQL, "genBatchSQL(%v,%v,%v,%v)", stmt, whereExpr, tt.args.curBatchStart, tt.args.curBatchEnd) + assert.Equalf(t, tt.expectedBatchCountSQL, batchCountSQL, "genBatchSQL(%v,%v,%v,%v )", stmt, whereExpr, tt.args.curBatchStart, tt.args.curBatchEnd) + + // 4.split batch + batchSQLStmt, _ := sqlparser.Parse(batchSQL) + batchCountSQLStmt, _ := sqlparser.Parse(batchCountSQL) + curBatchNewSQL, newBatchSQL, newBatchCountSQL, err := genNewBatchSQLsAndCountSQLsWhenSplittingBatch(batchSQLStmt, batchCountSQLStmt, tt.args.curBatchNewEnd, tt.args.newBatchStart, tt.args.pkInfos) + if tt.expectedGenNewBatchSQLErr == nil { + assert.Nil(t, err) + } else { + assert.Equalf(t, tt.expectedGenNewBatchSQLErr.Error(), err.Error(), "genNewBatchSQLsAndCountSQLsWhenSplittingBatch(%v,%v,%v,%v)", batchSQLStmt, batchCountSQLStmt, tt.args.curBatchNewEnd, tt.args.newBatchStart) + } + assert.Equalf(t, tt.expectedCurBatchNewSQL, curBatchNewSQL, "genNewBatchSQLsAndCountSQLsWhenSplittingBatch(%v,%v,%v,%v)", batchSQLStmt, batchCountSQLStmt, tt.args.curBatchNewEnd, tt.args.newBatchStart) + assert.Equalf(t, tt.expectedNewBatchSQL, newBatchSQL, "genNewBatchSQLsAndCountSQLsWhenSplittingBatch(%v,%v,%v,%v)", batchSQLStmt, batchCountSQLStmt, tt.args.curBatchNewEnd, tt.args.newBatchStart) + assert.Equalf(t, tt.expectedNewBatchCountSQL, newBatchCountSQL, "genNewBatchSQLsAndCountSQLsWhenSplittingBatch(%v,%v,%v,%v)", batchSQLStmt, batchCountSQLStmt, tt.args.curBatchNewEnd, tt.args.newBatchStart) + }) + } } diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 8d199ec7ed..08c2013de2 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -618,7 +618,7 @@ func (jc *JobController) splitBatchIntoTwo(ctx context.Context, tableSchema, tab if err != nil { return "", err } - selectPKsSQL := genSelectPKsSQL(batchCountSQLStmt, pkInfos) + selectPKsSQL := genSelectPKsSQLByBatchCountSQL(batchCountSQLStmt, pkInfos) // 2.根据select sql将batch拆分,生成两个新的batch。 // 这里每次只将超过threshold的batch拆成两个batch而不是多个小于等于threshold的batch的原因是: @@ -877,10 +877,8 @@ func (jc *JobController) createJobBatches(jobUUID, sql, tableSchema string, user if existUnSupportedPK(pkInfos) { return "", "", 0, errors.New("the table has unsupported PK type") } - // 3.拼接生成selectSQL,用于生成batch表 - pkCols := getPKColsStr(pkInfos) - selectSQL := fmt.Sprintf("select %s from %s.%s where %s order by %s", - pkCols, tableSchema, tableName, sqlparser.String(whereExpr), pkCols) + // 3.拼接生成selectPksSQL,用于生成batch表 + selectPksSQL := sprintfSelectPksSQL(tableName, sqlparser.String(whereExpr), pkInfos) // 4.计算每个batch的batchSize // batchSize = min(userBatchSize, batchSizeThreshold / 每个表的index数量 * ratioOfBatchSizeThreshold) @@ -894,8 +892,8 @@ func (jc *JobController) createJobBatches(jobUUID, sql, tableSchema string, user } else { batchSize = actualThreshold } - // 5.基于selectSQL生成batch表 - batchTableName, err = jc.createBatchTable(jobUUID, selectSQL, tableSchema, sql, tableName, whereExpr, stmt, pkInfos, batchSize) + // 5.基于selectPksSQL生成batch表 + batchTableName, err = jc.createBatchTable(jobUUID, selectPksSQL, tableSchema, sql, tableName, whereExpr, stmt, pkInfos, batchSize) return tableName, batchTableName, batchSize, err } @@ -933,7 +931,7 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, currentBatchEnd = values currentBatchSize++ if currentBatchSize == batchSize { - batchSQL, countSQL, batchStartStr, batchEndStr, err := createBatchInfoTableEntry(tableSchema, tableName, stmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) + batchSQL, countSQL, batchStartStr, batchEndStr, err := createBatchInfoTableEntry(tableName, stmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) if err != nil { return "", err } @@ -950,7 +948,7 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, } // 最后一个batch的行数不一定是batchSize,在循环结束时要将剩余的行数划分到最后一个batch中 if currentBatchSize != 0 { - batchSQL, countSQL, batchStartStr, batchEndStr, err := createBatchInfoTableEntry(tableSchema, tableName, stmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) + batchSQL, countSQL, batchStartStr, batchEndStr, err := createBatchInfoTableEntry(tableName, stmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) if err != nil { return "", err } @@ -962,13 +960,13 @@ func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, return batchTableName, nil } -func createBatchInfoTableEntry(tableSchema, tableName string, sqlStmt sqlparser.Statement, whereExpr sqlparser.Expr, +func createBatchInfoTableEntry(tableName string, sqlStmt sqlparser.Statement, whereExpr sqlparser.Expr, currentBatchStart, currentBatchEnd []sqltypes.Value, pkInfos []PKInfo) (batchSQL, countSQL, batchStartStr, batchEndStr string, err error) { batchSQL, finalWhereStr, err := genBatchSQL(sqlStmt, whereExpr, currentBatchStart, currentBatchEnd, pkInfos) if err != nil { return "", "", "", "", err } - countSQL = genCountSQL(tableSchema, tableName, finalWhereStr) + countSQL = genCountSQL(tableName, finalWhereStr) if err != nil { return "", "", "", "", err } diff --git a/go/vt/vttablet/jobcontroller/util.go b/go/vt/vttablet/jobcontroller/util.go index 5677834dbb..ee2f930ff5 100644 --- a/go/vt/vttablet/jobcontroller/util.go +++ b/go/vt/vttablet/jobcontroller/util.go @@ -141,7 +141,7 @@ func parseDML(sql string) (tableName string, whereExpr sqlparser.Expr, stmt sqlp return tableName, whereExpr, stmt, err } -func getPKColsStr(pkInfos []PKInfo) string { +func sprintfSelectPksSQL(tableName, whereStr string, pkInfos []PKInfo) string { pkCols := "" firstPK := true for _, pkInfo := range pkInfos { @@ -151,7 +151,9 @@ func getPKColsStr(pkInfos []PKInfo) string { pkCols += pkInfo.pkName firstPK = false } - return pkCols + selectPksSQL := fmt.Sprintf("select %s from %s where %s order by %s", + pkCols, tableName, whereStr, pkCols) + return selectPksSQL } // 该函数拿锁 diff --git a/go/vt/vttablet/jobcontroller/util_test.go b/go/vt/vttablet/jobcontroller/util_test.go index c468df4bd7..dd73e82c1c 100644 --- a/go/vt/vttablet/jobcontroller/util_test.go +++ b/go/vt/vttablet/jobcontroller/util_test.go @@ -15,47 +15,181 @@ import ( ) func TestParseDML(t *testing.T) { - // DELETE - tableName, whereExpr, _, err := parseDML("delete from t1 where id=1") - whereExprStr := sqlparser.String(whereExpr) - expectedTableName := "t1" - expectedWhereExpr := "id = 1" - assert.Equalf(t, expectedTableName, tableName, "table name") - assert.Equalf(t, expectedWhereExpr, whereExprStr, "where expr") - assert.Equal(t, nil, err) - - // UPDATE - tableName, whereExpr, _, err = parseDML("update t2 set c1 = '123' where id=2") - whereExprStr = sqlparser.String(whereExpr) - expectedTableName = "t2" - expectedWhereExpr = "id = 2" - assert.Equalf(t, expectedTableName, tableName, "table name") - assert.Equalf(t, expectedWhereExpr, whereExprStr, "where expr") - assert.Equal(t, nil, err) - - // error: the type of sql is not supported - _, _, _, err = parseDML("select * from t1") - assert.Equalf(t, "the type of sql is not supported", err.Error(), "error message: %s", err.Error()) - - // error: don't support join table now - _, _, _, err = parseDML("update t1 join t2 on t1.id = t2.id set t1.c1 = '123' where t1.id = 1") - assert.Equalf(t, "don't support join table now", err.Error(), "error message: %s", err.Error()) - - // support alias - _, _, _, err = parseDML("update t1 as mytable set mytable.c1 = '123' where mytable.id = 1") - assert.Equal(t, err, nil) + type args struct { + sql string + } - // error: the SQL should have where clause - _, _, _, err = parseDML("delete from t1") - assert.Equalf(t, "the SQL should have where clause", err.Error(), "error message: %s", err.Error()) + tests := []struct { + name string + args args + expectedTableName string + expectedWhereExpr string + expectedErrMsg string + }{ + { + name: "delete", + args: args{ + sql: "delete from t1 where id=1", + }, + expectedTableName: "t1", + expectedWhereExpr: "id = 1", + expectedErrMsg: "", + }, + { + name: "update", + args: args{ + sql: "update t2 set c1 = '123' where id=2", + }, + expectedTableName: "t2", + expectedWhereExpr: "id = 2", + expectedErrMsg: "", + }, + { + name: "table alias", + args: args{ + sql: "update t3 as mytable set mytable.c1 = '123' where mytable.id = 3", + }, + expectedTableName: "t3 as mytable", + expectedWhereExpr: "mytable.id = 3", + expectedErrMsg: "", + }, + { + name: "table schema", + args: args{ + sql: "update mytableSchema.t3 as mytable set mytable.c1 = '123' where mytable.id = 3", + }, + expectedTableName: "mytableSchema.t3 as mytable", + expectedWhereExpr: "mytable.id = 3", + expectedErrMsg: "", + }, + { + name: "error: select is not supported", + args: args{ + sql: "select * from t1", + }, + expectedErrMsg: "the type of sql is not supported", + }, + { + name: "error: join is not supported", + args: args{ + sql: "update t1 join t2 on t1.id = t2.id set t1.c1 = '123' where t1.id = 1", + }, + expectedErrMsg: "don't support join table now", + }, + { + name: "error: should have where clause", + args: args{ + sql: "delete from t1", + }, + expectedErrMsg: "the SQL should have where clause", + }, + { + name: "error: should not have limit clause", + args: args{ + sql: "delete from t1 where id=1 limit 1", + }, + expectedErrMsg: "the SQL should not have limit clause", + }, + { + name: "error: should not have order clause", + args: args{ + sql: "delete from t1 where id=1 order by c1", + }, + expectedErrMsg: "the SQL should not have order by clause", + }, + { + name: "subquery in update where", + args: args{ + sql: "update t1 set c1 = '123' where c2 in (select c2 from t2)", + }, + expectedTableName: "t1", + expectedWhereExpr: "c2 in (select c2 from t2)", + expectedErrMsg: "", + }, + { + name: "subquery in delete where", + args: args{ + sql: "delete from t1 where c2 in (select c2 from t2)", + }, + expectedTableName: "t1", + expectedWhereExpr: "c2 in (select c2 from t2)", + expectedErrMsg: "", + }, + { + name: "subquery in update set", + args: args{ + sql: "update t1 set c1 = (select c1 from t2 limit 1) where 1 = 1", + }, + expectedTableName: "t1", + expectedWhereExpr: "1 = 1", + expectedErrMsg: "", + }, + { + name: "subquery in update where exist", + args: args{ + sql: "update t1 set c1 = '123' where exists (select c2 from t2 where t2.c2 = t1.c1)", + }, + expectedTableName: "t1", + expectedWhereExpr: "exists (select c2 from t2 where t2.c2 = t1.c1)", + expectedErrMsg: "", + }, + { + name: "subquery in delete where exist", + args: args{ + sql: "delete from t1 where exists (select c2 from t2 where t2.c2 = t1.c1)", + }, + expectedTableName: "t1", + expectedWhereExpr: "exists (select c2 from t2 where t2.c2 = t1.c1)", + expectedErrMsg: "", + }, + { + name: "subquery in delete where not exist", + args: args{ + sql: "delete from t1 where not exists (select c2 from t2 where t2.c2 = t1.c1)", + }, + expectedTableName: "t1", + expectedWhereExpr: "not exists (select c2 from t2 where t2.c2 = t1.c1)", + expectedErrMsg: "", + }, + { + name: "foreign subquery in update where ", + args: args{ + sql: "update t1 set c1 = '123' where c2 = (select max(c2) from t2 where t2.foreign_key = t1.primary_key)", + }, + expectedTableName: "t1", + expectedWhereExpr: "c2 = (select max(c2) from t2 where t2.foreign_key = t1.primary_key)", + expectedErrMsg: "", + }, + { + name: "foreign subquery in delete where ", + args: args{ + sql: "delete from t1 where c2 = (select max(c2) from t2 where t2.foreign_key = t1.primary_key)", + }, + expectedTableName: "t1", + expectedWhereExpr: "c2 = (select max(c2) from t2 where t2.foreign_key = t1.primary_key)", + expectedErrMsg: "", + }, + } - // error: the SQL should not have limit clause - _, _, _, err = parseDML("delete from t1 where id=1 limit 1") - assert.Equalf(t, "the SQL should not have limit clause", err.Error(), "error message: %s", err.Error()) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + tableName, whereExpr, _, err := parseDML(tt.args.sql) + whereExprStr := "" + if whereExpr != nil { + whereExprStr = sqlparser.String(whereExpr) + } + if tt.expectedErrMsg != "" { + assert.Equalf(t, "", tableName, "table name") + assert.Equalf(t, "", whereExprStr, "where expr") + assert.Equalf(t, tt.expectedErrMsg, err.Error(), "error message: %s", err.Error()) + } else { + assert.Equalf(t, tt.expectedTableName, tableName, "table name") + assert.Equalf(t, tt.expectedWhereExpr, whereExprStr, "where expr") + assert.Equal(t, nil, err) + } + }) + } - // error: the SQL should not have order clause - _, _, _, err = parseDML("delete from t1 where id=1 order by c1") - assert.Equalf(t, "the SQL should not have order by clause", err.Error(), "error message: %s", err.Error()) } func TestGetTimeZoneStr(t *testing.T) { @@ -86,7 +220,6 @@ func TestGetTimeZoneOffset(t *testing.T) { }{ {"UTC", 0, nil}, {"UTC +01:02", 3720, errors.New("timeZoneStr is in wrong format")}, - {"UTC+01:02:03", 3723, nil}, {"UTC-01:02:03", -3723, nil}, {"UTC+12:11:22", 43882, nil}, From 64526a11fb922a1183c0fd4089d426d2fed00b4a Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Tue, 16 Jan 2024 10:21:08 +0800 Subject: [PATCH 48/54] fix: complete time period feature Signed-off-by: newborn22 <953950914@qq.com> --- Makefile | 3 + .../jobcontroller/jobcontroller_basic_test.go | 22 + go/vt/proto/query/query.pb.go | 191 +- go/vt/proto/query/query_vtproto.pb.go | 43 + go/vt/sqlparser/ast.go | 13 +- go/vt/sqlparser/ast_equals.go | 1 + go/vt/sqlparser/ast_format.go | 2 +- go/vt/sqlparser/ast_format_fast.go | 9 +- go/vt/sqlparser/cached_size.go | 4 +- go/vt/sqlparser/comments.go | 24 +- go/vt/sqlparser/sql.go | 12243 +++++++++++++++- go/vt/sqlparser/sql.y | 11 + go/vt/vtgate/executor.go | 4 +- go/vt/vtgate/plan_execute.go | 4 +- go/vt/vtgate/vcursor_impl.go | 2 +- go/vt/vttablet/grpcqueryservice/server.go | 2 +- go/vt/vttablet/grpctabletconn/conn.go | 23 +- go/vt/vttablet/jobcontroller/controller.go | 20 +- .../jobcontroller/running_period_time.go | 6 +- .../jobcontroller/running_period_time_test.go | 34 +- go/vt/vttablet/jobcontroller/util.go | 12 +- go/vt/vttablet/queryservice/queryservice.go | 2 +- go/vt/vttablet/queryservice/wrapped.go | 4 +- go/vt/vttablet/sandboxconn/sandboxconn.go | 2 +- .../tabletconntest/fakequeryservice.go | 2 +- go/vt/vttablet/tabletserver/query_executor.go | 14 +- go/vt/vttablet/tabletserver/tabletserver.go | 4 +- proto/query.proto | 3 +- tools/wesql_jobcontroller.sh | 6 + 29 files changed, 12389 insertions(+), 321 deletions(-) create mode 100644 go/test/endtoend/jobcontroller/jobcontroller_basic_test.go create mode 100644 tools/wesql_jobcontroller.sh diff --git a/Makefile b/Makefile index 5656204de7..99c54fca48 100644 --- a/Makefile +++ b/Makefile @@ -211,6 +211,9 @@ e2e_test: build e2e_test_scheduler: build tools/wesql_onlineddl_scheduler.sh +e2e_test_jobcontroller: build + tools/wesql_jobcontroller.sh + e2e_test_branch: build tools/wesql_branch.sh diff --git a/go/test/endtoend/jobcontroller/jobcontroller_basic_test.go b/go/test/endtoend/jobcontroller/jobcontroller_basic_test.go new file mode 100644 index 0000000000..2a9c0118c0 --- /dev/null +++ b/go/test/endtoend/jobcontroller/jobcontroller_basic_test.go @@ -0,0 +1,22 @@ +/* +Copyright ApeCloud, Inc. +Licensed under the Apache v2(found in the LICENSE file in the root directory). +*/ + +package jobcontroller + +import ( + "testing" +) + +func TestMain(m *testing.M) { + m.Run() +} + +func TestA(t *testing.T) { + t.Log("TestA") +} + +func TestB(t *testing.T) { + t.Log("TestA") +} diff --git a/go/vt/proto/query/query.pb.go b/go/vt/proto/query/query.pb.go index 690b71da98..20a10b98e7 100644 --- a/go/vt/proto/query/query.pb.go +++ b/go/vt/proto/query/query.pb.go @@ -6133,16 +6133,17 @@ type SubmitDMLJobRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Cmd string `protobuf:"bytes,1,opt,name=cmd,proto3" json:"cmd,omitempty"` - JobUuid string `protobuf:"bytes,2,opt,name=job_uuid,json=jobUuid,proto3" json:"job_uuid,omitempty"` - Sql string `protobuf:"bytes,3,opt,name=sql,proto3" json:"sql,omitempty"` - RelatedSchema string `protobuf:"bytes,4,opt,name=related_schema,json=relatedSchema,proto3" json:"related_schema,omitempty"` - Timegap int64 `protobuf:"varint,6,opt,name=timegap,proto3" json:"timegap,omitempty"` - BatchSize int64 `protobuf:"varint,7,opt,name=batch_size,json=batchSize,proto3" json:"batch_size,omitempty"` - PostponeLaunch bool `protobuf:"varint,8,opt,name=postpone_launch,json=postponeLaunch,proto3" json:"postpone_launch,omitempty"` - TimePeriodStart string `protobuf:"bytes,9,opt,name=time_period_start,json=timePeriodStart,proto3" json:"time_period_start,omitempty"` - TimePeriodEnd string `protobuf:"bytes,10,opt,name=time_period_end,json=timePeriodEnd,proto3" json:"time_period_end,omitempty"` - FailPolicy string `protobuf:"bytes,11,opt,name=fail_policy,json=failPolicy,proto3" json:"fail_policy,omitempty"` + Cmd string `protobuf:"bytes,1,opt,name=cmd,proto3" json:"cmd,omitempty"` + JobUuid string `protobuf:"bytes,2,opt,name=job_uuid,json=jobUuid,proto3" json:"job_uuid,omitempty"` + Sql string `protobuf:"bytes,3,opt,name=sql,proto3" json:"sql,omitempty"` + RelatedSchema string `protobuf:"bytes,4,opt,name=related_schema,json=relatedSchema,proto3" json:"related_schema,omitempty"` + Timegap int64 `protobuf:"varint,6,opt,name=timegap,proto3" json:"timegap,omitempty"` + BatchSize int64 `protobuf:"varint,7,opt,name=batch_size,json=batchSize,proto3" json:"batch_size,omitempty"` + PostponeLaunch bool `protobuf:"varint,8,opt,name=postpone_launch,json=postponeLaunch,proto3" json:"postpone_launch,omitempty"` + TimePeriodStart string `protobuf:"bytes,9,opt,name=time_period_start,json=timePeriodStart,proto3" json:"time_period_start,omitempty"` + TimePeriodEnd string `protobuf:"bytes,10,opt,name=time_period_end,json=timePeriodEnd,proto3" json:"time_period_end,omitempty"` + TimePeriodTimeZone string `protobuf:"bytes,11,opt,name=time_period_time_zone,json=timePeriodTimeZone,proto3" json:"time_period_time_zone,omitempty"` + FailPolicy string `protobuf:"bytes,12,opt,name=fail_policy,json=failPolicy,proto3" json:"fail_policy,omitempty"` } func (x *SubmitDMLJobRequest) Reset() { @@ -6240,6 +6241,13 @@ func (x *SubmitDMLJobRequest) GetTimePeriodEnd() string { return "" } +func (x *SubmitDMLJobRequest) GetTimePeriodTimeZone() string { + if x != nil { + return x.TimePeriodTimeZone + } + return "" +} + func (x *SubmitDMLJobRequest) GetFailPolicy() string { if x != nil { return x.FailPolicy @@ -7313,7 +7321,7 @@ var file_query_proto_rawDesc = []byte{ 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xd2, 0x02, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x44, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x85, 0x03, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x44, 0x4d, 0x4c, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, @@ -7332,85 +7340,88 @@ var file_query_proto_rawDesc = []byte{ 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x65, 0x6e, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x50, - 0x65, 0x72, 0x69, 0x6f, 0x64, 0x45, 0x6e, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x61, 0x69, 0x6c, - 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, - 0x61, 0x69, 0x6c, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x42, 0x0a, 0x14, 0x53, 0x75, 0x62, - 0x6d, 0x69, 0x74, 0x44, 0x4d, 0x4c, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2a, 0x92, 0x03, - 0x0a, 0x09, 0x4d, 0x79, 0x53, 0x71, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x09, 0x0a, 0x05, 0x45, - 0x4d, 0x50, 0x54, 0x59, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x4e, 0x55, - 0x4c, 0x4c, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50, 0x52, 0x49, - 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x55, - 0x4e, 0x49, 0x51, 0x55, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x04, - 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x45, 0x5f, 0x4b, 0x45, 0x59, - 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x4c, 0x4f, 0x42, 0x5f, - 0x46, 0x4c, 0x41, 0x47, 0x10, 0x10, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x53, 0x49, 0x47, 0x4e, - 0x45, 0x44, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x20, 0x12, 0x11, 0x0a, 0x0d, 0x5a, 0x45, 0x52, - 0x4f, 0x46, 0x49, 0x4c, 0x4c, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x40, 0x12, 0x10, 0x0a, 0x0b, - 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x01, 0x12, 0x0e, - 0x0a, 0x09, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x02, 0x12, 0x18, - 0x0a, 0x13, 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x49, 0x4e, 0x43, 0x52, 0x45, 0x4d, 0x45, 0x4e, 0x54, - 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x04, 0x12, 0x13, 0x0a, 0x0e, 0x54, 0x49, 0x4d, 0x45, - 0x53, 0x54, 0x41, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x08, 0x12, 0x0d, 0x0a, - 0x08, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x10, 0x12, 0x1a, 0x0a, 0x15, - 0x4e, 0x4f, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, - 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x20, 0x12, 0x17, 0x0a, 0x12, 0x4f, 0x4e, 0x5f, 0x55, - 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x57, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, - 0x40, 0x12, 0x0e, 0x0a, 0x08, 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, - 0x02, 0x12, 0x13, 0x0a, 0x0d, 0x50, 0x41, 0x52, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, - 0x41, 0x47, 0x10, 0x80, 0x80, 0x01, 0x12, 0x10, 0x0a, 0x0a, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, - 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x02, 0x12, 0x11, 0x0a, 0x0b, 0x55, 0x4e, 0x49, 0x51, - 0x55, 0x45, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x04, 0x12, 0x11, 0x0a, 0x0b, 0x42, - 0x49, 0x4e, 0x43, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x08, 0x1a, 0x02, - 0x10, 0x01, 0x2a, 0x6b, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, - 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, - 0x41, 0x4c, 0x10, 0x80, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x55, 0x4e, 0x53, 0x49, 0x47, - 0x4e, 0x45, 0x44, 0x10, 0x80, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x49, 0x53, 0x46, 0x4c, 0x4f, 0x41, - 0x54, 0x10, 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x53, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x44, - 0x10, 0x80, 0x10, 0x12, 0x0b, 0x0a, 0x06, 0x49, 0x53, 0x54, 0x45, 0x58, 0x54, 0x10, 0x80, 0x20, - 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x53, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x80, 0x40, 0x2a, - 0xc0, 0x03, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x55, 0x4c, 0x4c, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x04, 0x49, 0x4e, 0x54, 0x38, 0x10, - 0x81, 0x02, 0x12, 0x0a, 0x0a, 0x05, 0x55, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x82, 0x06, 0x12, 0x0a, - 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x31, 0x36, 0x10, 0x83, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, - 0x4e, 0x54, 0x31, 0x36, 0x10, 0x84, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x32, 0x34, - 0x10, 0x85, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x32, 0x34, 0x10, 0x86, 0x06, - 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x87, 0x02, 0x12, 0x0b, 0x0a, 0x06, - 0x55, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x88, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, - 0x36, 0x34, 0x10, 0x89, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, - 0x8a, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x33, 0x32, 0x10, 0x8b, 0x08, - 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x36, 0x34, 0x10, 0x8c, 0x08, 0x12, 0x0e, - 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x8d, 0x10, 0x12, 0x09, - 0x0a, 0x04, 0x44, 0x41, 0x54, 0x45, 0x10, 0x8e, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x54, 0x49, 0x4d, - 0x45, 0x10, 0x8f, 0x10, 0x12, 0x0d, 0x0a, 0x08, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, - 0x10, 0x90, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x59, 0x45, 0x41, 0x52, 0x10, 0x91, 0x06, 0x12, 0x0b, - 0x0a, 0x07, 0x44, 0x45, 0x43, 0x49, 0x4d, 0x41, 0x4c, 0x10, 0x12, 0x12, 0x09, 0x0a, 0x04, 0x54, - 0x45, 0x58, 0x54, 0x10, 0x93, 0x30, 0x12, 0x09, 0x0a, 0x04, 0x42, 0x4c, 0x4f, 0x42, 0x10, 0x94, - 0x50, 0x12, 0x0c, 0x0a, 0x07, 0x56, 0x41, 0x52, 0x43, 0x48, 0x41, 0x52, 0x10, 0x95, 0x30, 0x12, - 0x0e, 0x0a, 0x09, 0x56, 0x41, 0x52, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x96, 0x50, 0x12, - 0x09, 0x0a, 0x04, 0x43, 0x48, 0x41, 0x52, 0x10, 0x97, 0x30, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, - 0x4e, 0x41, 0x52, 0x59, 0x10, 0x98, 0x50, 0x12, 0x08, 0x0a, 0x03, 0x42, 0x49, 0x54, 0x10, 0x99, - 0x10, 0x12, 0x09, 0x0a, 0x04, 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x9a, 0x10, 0x12, 0x08, 0x0a, 0x03, - 0x53, 0x45, 0x54, 0x10, 0x9b, 0x10, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x55, 0x50, 0x4c, 0x45, 0x10, - 0x1c, 0x12, 0x0d, 0x0a, 0x08, 0x47, 0x45, 0x4f, 0x4d, 0x45, 0x54, 0x52, 0x59, 0x10, 0x9d, 0x10, - 0x12, 0x09, 0x0a, 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x9e, 0x10, 0x12, 0x0e, 0x0a, 0x0a, 0x45, - 0x58, 0x50, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x1f, 0x12, 0x0b, 0x0a, 0x06, 0x48, - 0x45, 0x58, 0x4e, 0x55, 0x4d, 0x10, 0xa0, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x48, 0x45, 0x58, 0x56, - 0x41, 0x4c, 0x10, 0xa1, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x54, 0x4e, 0x55, 0x4d, 0x10, - 0xa2, 0x20, 0x2a, 0x46, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x45, 0x10, 0x01, - 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, - 0x52, 0x4f, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x03, 0x2a, 0x31, 0x0a, 0x0f, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, - 0x05, 0x56, 0x49, 0x45, 0x57, 0x53, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x54, 0x41, 0x42, 0x4c, - 0x45, 0x53, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x02, 0x42, 0x35, 0x0a, - 0x0f, 0x69, 0x6f, 0x2e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x5a, 0x22, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, 0x69, 0x74, 0x65, - 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x71, - 0x75, 0x65, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x45, 0x6e, 0x64, 0x12, 0x31, 0x0a, 0x15, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x7a, 0x6f, 0x6e, + 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x65, 0x72, + 0x69, 0x6f, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x66, + 0x61, 0x69, 0x6c, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x42, 0x0a, 0x14, + 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x44, 0x4d, 0x4c, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x2a, 0x92, 0x03, 0x0a, 0x09, 0x4d, 0x79, 0x53, 0x71, 0x6c, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x09, + 0x0a, 0x05, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, + 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, + 0x50, 0x52, 0x49, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x02, 0x12, 0x13, + 0x0a, 0x0f, 0x55, 0x4e, 0x49, 0x51, 0x55, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, + 0x47, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x45, 0x5f, + 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x4c, + 0x4f, 0x42, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x10, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x53, + 0x49, 0x47, 0x4e, 0x45, 0x44, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x20, 0x12, 0x11, 0x0a, 0x0d, + 0x5a, 0x45, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x4c, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x40, 0x12, + 0x10, 0x0a, 0x0b, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, + 0x01, 0x12, 0x0e, 0x0a, 0x09, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, + 0x02, 0x12, 0x18, 0x0a, 0x13, 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x49, 0x4e, 0x43, 0x52, 0x45, 0x4d, + 0x45, 0x4e, 0x54, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x04, 0x12, 0x13, 0x0a, 0x0e, 0x54, + 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x08, + 0x12, 0x0d, 0x0a, 0x08, 0x53, 0x45, 0x54, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x10, 0x12, + 0x1a, 0x0a, 0x15, 0x4e, 0x4f, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x56, 0x41, + 0x4c, 0x55, 0x45, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x20, 0x12, 0x17, 0x0a, 0x12, 0x4f, + 0x4e, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x57, 0x5f, 0x46, 0x4c, 0x41, + 0x47, 0x10, 0x80, 0x40, 0x12, 0x0e, 0x0a, 0x08, 0x4e, 0x55, 0x4d, 0x5f, 0x46, 0x4c, 0x41, 0x47, + 0x10, 0x80, 0x80, 0x02, 0x12, 0x13, 0x0a, 0x0d, 0x50, 0x41, 0x52, 0x54, 0x5f, 0x4b, 0x45, 0x59, + 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x01, 0x12, 0x10, 0x0a, 0x0a, 0x47, 0x52, 0x4f, + 0x55, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x02, 0x12, 0x11, 0x0a, 0x0b, 0x55, + 0x4e, 0x49, 0x51, 0x55, 0x45, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, 0x04, 0x12, 0x11, + 0x0a, 0x0b, 0x42, 0x49, 0x4e, 0x43, 0x4d, 0x50, 0x5f, 0x46, 0x4c, 0x41, 0x47, 0x10, 0x80, 0x80, + 0x08, 0x1a, 0x02, 0x10, 0x01, 0x2a, 0x6b, 0x0a, 0x04, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x08, 0x0a, + 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x49, 0x4e, 0x54, + 0x45, 0x47, 0x52, 0x41, 0x4c, 0x10, 0x80, 0x02, 0x12, 0x0f, 0x0a, 0x0a, 0x49, 0x53, 0x55, 0x4e, + 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, 0x10, 0x80, 0x04, 0x12, 0x0c, 0x0a, 0x07, 0x49, 0x53, 0x46, + 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x80, 0x08, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x53, 0x51, 0x55, 0x4f, + 0x54, 0x45, 0x44, 0x10, 0x80, 0x10, 0x12, 0x0b, 0x0a, 0x06, 0x49, 0x53, 0x54, 0x45, 0x58, 0x54, + 0x10, 0x80, 0x20, 0x12, 0x0d, 0x0a, 0x08, 0x49, 0x53, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, + 0x80, 0x40, 0x2a, 0xc0, 0x03, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x4e, + 0x55, 0x4c, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x04, 0x49, 0x4e, + 0x54, 0x38, 0x10, 0x81, 0x02, 0x12, 0x0a, 0x0a, 0x05, 0x55, 0x49, 0x4e, 0x54, 0x38, 0x10, 0x82, + 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x31, 0x36, 0x10, 0x83, 0x02, 0x12, 0x0b, 0x0a, + 0x06, 0x55, 0x49, 0x4e, 0x54, 0x31, 0x36, 0x10, 0x84, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, + 0x54, 0x32, 0x34, 0x10, 0x85, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x32, 0x34, + 0x10, 0x86, 0x06, 0x12, 0x0a, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x87, 0x02, 0x12, + 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x88, 0x06, 0x12, 0x0a, 0x0a, 0x05, + 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x89, 0x02, 0x12, 0x0b, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, + 0x36, 0x34, 0x10, 0x8a, 0x06, 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x33, 0x32, + 0x10, 0x8b, 0x08, 0x12, 0x0c, 0x0a, 0x07, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x36, 0x34, 0x10, 0x8c, + 0x08, 0x12, 0x0e, 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x8d, + 0x10, 0x12, 0x09, 0x0a, 0x04, 0x44, 0x41, 0x54, 0x45, 0x10, 0x8e, 0x10, 0x12, 0x09, 0x0a, 0x04, + 0x54, 0x49, 0x4d, 0x45, 0x10, 0x8f, 0x10, 0x12, 0x0d, 0x0a, 0x08, 0x44, 0x41, 0x54, 0x45, 0x54, + 0x49, 0x4d, 0x45, 0x10, 0x90, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x59, 0x45, 0x41, 0x52, 0x10, 0x91, + 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x43, 0x49, 0x4d, 0x41, 0x4c, 0x10, 0x12, 0x12, 0x09, + 0x0a, 0x04, 0x54, 0x45, 0x58, 0x54, 0x10, 0x93, 0x30, 0x12, 0x09, 0x0a, 0x04, 0x42, 0x4c, 0x4f, + 0x42, 0x10, 0x94, 0x50, 0x12, 0x0c, 0x0a, 0x07, 0x56, 0x41, 0x52, 0x43, 0x48, 0x41, 0x52, 0x10, + 0x95, 0x30, 0x12, 0x0e, 0x0a, 0x09, 0x56, 0x41, 0x52, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, + 0x96, 0x50, 0x12, 0x09, 0x0a, 0x04, 0x43, 0x48, 0x41, 0x52, 0x10, 0x97, 0x30, 0x12, 0x0b, 0x0a, + 0x06, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x98, 0x50, 0x12, 0x08, 0x0a, 0x03, 0x42, 0x49, + 0x54, 0x10, 0x99, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x9a, 0x10, 0x12, + 0x08, 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, 0x9b, 0x10, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x55, 0x50, + 0x4c, 0x45, 0x10, 0x1c, 0x12, 0x0d, 0x0a, 0x08, 0x47, 0x45, 0x4f, 0x4d, 0x45, 0x54, 0x52, 0x59, + 0x10, 0x9d, 0x10, 0x12, 0x09, 0x0a, 0x04, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x9e, 0x10, 0x12, 0x0e, + 0x0a, 0x0a, 0x45, 0x58, 0x50, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x1f, 0x12, 0x0b, + 0x0a, 0x06, 0x48, 0x45, 0x58, 0x4e, 0x55, 0x4d, 0x10, 0xa0, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x48, + 0x45, 0x58, 0x56, 0x41, 0x4c, 0x10, 0xa1, 0x20, 0x12, 0x0b, 0x0a, 0x06, 0x42, 0x49, 0x54, 0x4e, + 0x55, 0x4d, 0x10, 0xa2, 0x20, 0x2a, 0x46, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, + 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, + 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x12, + 0x0c, 0x0a, 0x08, 0x52, 0x4f, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x03, 0x2a, 0x31, 0x0a, + 0x0f, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x09, 0x0a, 0x05, 0x56, 0x49, 0x45, 0x57, 0x53, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x54, + 0x41, 0x42, 0x4c, 0x45, 0x53, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x02, + 0x42, 0x35, 0x0a, 0x0f, 0x69, 0x6f, 0x2e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x5a, 0x22, 0x76, 0x69, 0x74, 0x65, 0x73, 0x73, 0x2e, 0x69, 0x6f, 0x2f, 0x76, + 0x69, 0x74, 0x65, 0x73, 0x73, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/go/vt/proto/query/query_vtproto.pb.go b/go/vt/proto/query/query_vtproto.pb.go index d3bec78aa3..529e962a5d 100644 --- a/go/vt/proto/query/query_vtproto.pb.go +++ b/go/vt/proto/query/query_vtproto.pb.go @@ -4712,6 +4712,13 @@ func (m *SubmitDMLJobRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { copy(dAtA[i:], m.FailPolicy) i = encodeVarint(dAtA, i, uint64(len(m.FailPolicy))) i-- + dAtA[i] = 0x62 + } + if len(m.TimePeriodTimeZone) > 0 { + i -= len(m.TimePeriodTimeZone) + copy(dAtA[i:], m.TimePeriodTimeZone) + i = encodeVarint(dAtA, i, uint64(len(m.TimePeriodTimeZone))) + i-- dAtA[i] = 0x5a } if len(m.TimePeriodEnd) > 0 { @@ -6677,6 +6684,10 @@ func (m *SubmitDMLJobRequest) SizeVT() (n int) { if l > 0 { n += 1 + l + sov(uint64(l)) } + l = len(m.TimePeriodTimeZone) + if l > 0 { + n += 1 + l + sov(uint64(l)) + } l = len(m.FailPolicy) if l > 0 { n += 1 + l + sov(uint64(l)) @@ -19005,6 +19016,38 @@ func (m *SubmitDMLJobRequest) UnmarshalVT(dAtA []byte) error { m.TimePeriodEnd = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TimePeriodTimeZone", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TimePeriodTimeZone = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 12: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field FailPolicy", wireType) } diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go index bcf265a42a..fc7edbd650 100644 --- a/go/vt/sqlparser/ast.go +++ b/go/vt/sqlparser/ast.go @@ -485,12 +485,13 @@ type ( AlterDMLJobType int8 AlterDMLJob struct { - Type AlterDMLJobType - UUID string - Expire string - Ratio *Literal - TimePeriodStart string - TimePeriodEnd string + Type AlterDMLJobType + UUID string + Expire string + Ratio *Literal + TimePeriodStart string + TimePeriodEnd string + TimePeriodTimeZone string } // AlterTable represents a ALTER TABLE statement. diff --git a/go/vt/sqlparser/ast_equals.go b/go/vt/sqlparser/ast_equals.go index 2919896c27..e435d4486f 100644 --- a/go/vt/sqlparser/ast_equals.go +++ b/go/vt/sqlparser/ast_equals.go @@ -1638,6 +1638,7 @@ func (cmp *Comparator) RefOfAlterDMLJob(a, b *AlterDMLJob) bool { a.Expire == b.Expire && a.TimePeriodStart == b.TimePeriodStart && a.TimePeriodEnd == b.TimePeriodEnd && + a.TimePeriodTimeZone == b.TimePeriodTimeZone && a.Type == b.Type && cmp.RefOfLiteral(a.Ratio, b.Ratio) } diff --git a/go/vt/sqlparser/ast_format.go b/go/vt/sqlparser/ast_format.go index 400fd0784e..5964fa14dd 100644 --- a/go/vt/sqlparser/ast_format.go +++ b/go/vt/sqlparser/ast_format.go @@ -354,7 +354,7 @@ func (node *AlterDMLJob) Format(buf *TrackedBuffer) { buf.astPrintf(node, " ratio %v", node.Ratio) } if node.Type == SetRunningTimePeriodType { - buf.astPrintf(node, " '%s' '%s'", node.TimePeriodStart, node.TimePeriodEnd) + buf.astPrintf(node, " '%s' '%s' '%s'", node.TimePeriodStart, node.TimePeriodEnd, node.TimePeriodTimeZone) } } diff --git a/go/vt/sqlparser/ast_format_fast.go b/go/vt/sqlparser/ast_format_fast.go index eb2ca672e4..d1d885efa6 100644 --- a/go/vt/sqlparser/ast_format_fast.go +++ b/go/vt/sqlparser/ast_format_fast.go @@ -486,8 +486,13 @@ func (node *AlterDMLJob) formatFast(buf *TrackedBuffer) { node.Ratio.formatFast(buf) } if node.Type == SetRunningTimePeriodType { - buf.WriteString(" '" + node.TimePeriodStart + "'") - buf.WriteString(" '" + node.TimePeriodEnd + "'") + buf.WriteString(" '") + buf.WriteString(node.TimePeriodStart) + buf.WriteString("' '") + buf.WriteString(node.TimePeriodEnd) + buf.WriteString("' '") + buf.WriteString(node.TimePeriodTimeZone) + buf.WriteByte('\'') } } diff --git a/go/vt/sqlparser/cached_size.go b/go/vt/sqlparser/cached_size.go index a60b1a72cb..1a4b1f0ece 100644 --- a/go/vt/sqlparser/cached_size.go +++ b/go/vt/sqlparser/cached_size.go @@ -175,7 +175,7 @@ func (cached *AlterDMLJob) CachedSize(alloc bool) int64 { } size := int64(0) if alloc { - size += int64(80) + size += int64(96) } // field UUID string size += hack.RuntimeAllocSize(int64(len(cached.UUID))) @@ -187,6 +187,8 @@ func (cached *AlterDMLJob) CachedSize(alloc bool) int64 { size += hack.RuntimeAllocSize(int64(len(cached.TimePeriodStart))) // field TimePeriodEnd string size += hack.RuntimeAllocSize(int64(len(cached.TimePeriodEnd))) + // field TimePeriodTimeZone string + size += hack.RuntimeAllocSize(int64(len(cached.TimePeriodTimeZone))) return size } func (cached *AlterDatabase) CachedSize(alloc bool) int64 { diff --git a/go/vt/sqlparser/comments.go b/go/vt/sqlparser/comments.go index 92f9953b5f..7487f7f39e 100644 --- a/go/vt/sqlparser/comments.go +++ b/go/vt/sqlparser/comments.go @@ -58,14 +58,14 @@ const ( // DirectiveRole specifies the node type for the query. possible values are: PRIMARY/REPLICA/RDONLY DirectiveRole = "ROLE" - DirectiveDMLSplit = "DML_SPLIT" - DirectiveDMLTimeGap = "DML_BATCH_INTERVAL" - DirectiveBATCHSIZE = "DML_BATCH_SIZE" - DirectiveDMLPostponeLaunch = "DML_POSTPONE_LAUNCH" - DirectiveDMLAutoRetry = "DML_FAIL_POLICY" - DirectiveDMLTimePeriodStart = "DML_TIME_PERIOD_START" - DirectiveDMLTimePeriodEnd = "DML_TIME_PERIOD_END" - DirectiveDMLTimePeriod = "DML_TIME_PERIOD_TIME_ZONE" + DirectiveDMLSplit = "DML_SPLIT" + DirectiveDMLTimeGap = "DML_BATCH_INTERVAL" + DirectiveBATCHSIZE = "DML_BATCH_SIZE" + DirectiveDMLPostponeLaunch = "DML_POSTPONE_LAUNCH" + DirectiveDMLAutoRetry = "DML_FAIL_POLICY" + DirectiveDMLTimePeriodStart = "DML_TIME_PERIOD_START" + DirectiveDMLTimePeriodEnd = "DML_TIME_PERIOD_END" + DirectiveDMLTimePeriodTimeZone = "DML_TIME_PERIOD_TIME_ZONE" ) func isNonSpace(r rune) bool { @@ -498,7 +498,7 @@ func GetDMLJobCmd(stmt Statement) string { return str } -func GetDMLJobArgs(stmt Statement) (timeGapInMs int64, batchSize int64, postponeLaunch bool, failPolicy, timePeriodStart, timePeriodEnd string) { +func GetDMLJobArgs(stmt Statement) (timeGapInMs int64, batchSize int64, postponeLaunch bool, failPolicy, timePeriodStart, timePeriodEnd, timePeriodTimeZone string) { var comments *ParsedComments switch stmt := stmt.(type) { // todo newborn22 support insert...select, replace...select @@ -508,7 +508,7 @@ func GetDMLJobArgs(stmt Statement) (timeGapInMs int64, batchSize int64, postpone comments = stmt.Comments } if comments == nil { - return timeGapInMs, batchSize, postponeLaunch, failPolicy, timePeriodStart, timePeriodEnd + return timeGapInMs, batchSize, postponeLaunch, failPolicy, timePeriodStart, timePeriodEnd, timePeriodTimeZone } var err error @@ -544,5 +544,7 @@ func GetDMLJobArgs(stmt Statement) (timeGapInMs int64, batchSize int64, postpone timePeriodEnd, _ = directives.GetString(DirectiveDMLTimePeriodEnd, "") - return timeGapInMs, batchSize, postponeLaunch, failPolicy, timePeriodStart, timePeriodEnd + timePeriodTimeZone, _ = directives.GetString(DirectiveDMLTimePeriodTimeZone, "") + + return timeGapInMs, batchSize, postponeLaunch, failPolicy, timePeriodStart, timePeriodEnd, timePeriodTimeZone } diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index 5706e8c199..079c854b71 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -1408,6 +1408,7 @@ var yyExca = [...]int{ 14, 52, -2, 41, -1, 53, +<<<<<<< HEAD 1, 162, 682, 162, -2, 170, @@ -1476,6 +1477,91 @@ var yyExca = [...]int{ 135, 170, 176, 170, 352, 170, +======= + 135, 169, + 176, 169, + 351, 169, + -2, 523, + -1, 62, + 36, 819, + 239, 819, + 250, 819, + 285, 833, + 286, 833, + -2, 821, + -1, 67, + 241, 857, + -2, 855, + -1, 125, + 238, 1519, + -2, 135, + -1, 127, + 1, 162, + 680, 162, + -2, 169, + -1, 138, + 136, 409, + 244, 409, + -2, 512, + -1, 157, + 135, 169, + 176, 169, + 351, 169, + -2, 532, + -1, 837, + 87, 1536, + -2, 1381, + -1, 838, + 87, 1537, + 221, 1541, + -2, 1382, + -1, 839, + 221, 1540, + -2, 42, + -1, 918, + 60, 932, + -2, 947, + -1, 1006, + 249, 43, + 254, 43, + -2, 420, + -1, 1093, + 1, 580, + 680, 580, + -2, 169, + -1, 1405, + 221, 1541, + -2, 1382, + -1, 1553, + 60, 933, + -2, 952, + -1, 1554, + 60, 934, + -2, 953, + -1, 1605, + 135, 169, + 176, 169, + 351, 169, + -2, 459, + -1, 1688, + 136, 409, + 244, 409, + -2, 512, + -1, 1697, + 249, 44, + 254, 44, + -2, 421, + -1, 2086, + 221, 1545, + -2, 1539, + -1, 2087, + 221, 1541, + -2, 1537, + -1, 2186, + 135, 169, + 176, 169, + 351, 169, +>>>>>>> e439161508 (fix: complete time period feature) -2, 460, -1, 1695, 136, 410, @@ -1492,6 +1578,7 @@ var yyExca = [...]int{ 221, 1544, -2, 1540, -1, 2193, +<<<<<<< HEAD 135, 170, 176, 170, 352, 170, @@ -1513,6 +1600,24 @@ var yyExca = [...]int{ 657, 731, -2, 719, -1, 3592, +======= + 26, 190, + -2, 192, + -1, 2596, + 78, 98, + 88, 98, + -2, 1011, + -1, 2665, + 655, 731, + -2, 705, + -1, 2838, + 50, 1487, + -2, 1481, + -1, 3498, + 655, 731, + -2, 719, + -1, 3586, +>>>>>>> e439161508 (fix: complete time period feature) 90, 663, 95, 663, 105, 663, @@ -1558,11 +1663,16 @@ var yyExca = [...]int{ 217, 663, 218, 663, 219, 663, +<<<<<<< HEAD -2, 1907, +======= + -2, 1903, +>>>>>>> e439161508 (fix: complete time period feature) } const yyPrivate = 57344 +<<<<<<< HEAD const yyLast = 48365 var yyAct = [...]int{ @@ -3597,11 +3707,2103 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1394, 1393, 1395, 1396, 0, 0, 0, 0, 0, 0, 0, +======= +const yyLast = 48185 + +var yyAct = [...]int{ + 1561, 3657, 838, 848, 841, 3668, 2134, 3563, 3626, 711, + 3627, 2183, 3215, 1608, 3529, 2988, 3552, 3584, 2890, 2897, + 3072, 3479, 3463, 3411, 2115, 2939, 934, 2948, 2953, 3245, + 2950, 2949, 2947, 2952, 2951, 3246, 3247, 3461, 2851, 3202, + 2117, 1165, 803, 2496, 2854, 3275, 3451, 2530, 2797, 2968, + 690, 912, 807, 2257, 2905, 42, 693, 2855, 198, 3111, + 1899, 198, 2852, 5, 2967, 1568, 670, 2732, 3280, 3105, + 801, 676, 721, 2970, 2154, 2849, 2138, 3131, 2157, 2556, + 2839, 840, 198, 1953, 2220, 2077, 808, 2630, 2569, 3097, + 2245, 1666, 689, 2225, 2716, 2994, 2631, 198, 2662, 2632, + 691, 1038, 2288, 2581, 2171, 967, 1167, 166, 802, 43, + 41, 2159, 2562, 2548, 2266, 1555, 2158, 2532, 2048, 1968, + 1695, 2082, 1907, 935, 676, 198, 2702, 676, 914, 1138, + 2244, 2227, 2146, 2305, 2623, 2074, 152, 996, 916, 1001, + 919, 1597, 1949, 1577, 1535, 1713, 703, 1417, 2598, 2161, + 1972, 1531, 1833, 1109, 1926, 1829, 1330, 100, 1345, 937, + 975, 971, 1838, 1702, 1004, 1007, 104, 2242, 2047, 1794, + 976, 105, 1002, 2216, 1003, 1596, 952, 1014, 954, 2139, + 698, 1582, 2083, 925, 1401, 1377, 1898, 922, 2044, 1156, + 85, 2217, 1981, 1847, 1659, 1163, 1687, 921, 920, 99, + 107, 170, 130, 128, 129, 135, 136, 1087, 947, 923, + 697, 1425, 1421, 84, 93, 3488, 106, 2655, 98, 3658, + 3203, 2958, 2936, 3514, 680, 2259, 2653, 685, 2259, 2260, + 2261, 942, 946, 2303, 2955, 2685, 2684, 1779, 3195, 616, + 1346, 3610, 619, 3158, 2724, 2725, 2958, 95, 95, 3515, + 137, 3510, 1914, 95, 131, 3509, 1040, 928, 1913, 1912, + 1911, 968, 1910, 95, 119, 1043, 1346, 1909, 659, 1057, + 1058, 1059, 1929, 1062, 1063, 1064, 1065, 2956, 665, 1068, + 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, + 1079, 1080, 1081, 1082, 1083, 1084, 962, 961, 681, 915, + 929, 913, 2956, 2962, 1017, 3250, 1882, 2, 1879, 994, + 683, 993, 3250, 684, 857, 858, 859, 1018, 2112, 2113, + 3605, 936, 2384, 1044, 1047, 1048, 1341, 2528, 2962, 131, + 992, 991, 990, 2835, 2558, 964, 2675, 2292, 985, 1051, + 193, 1362, 2801, 857, 858, 859, 980, 3614, 1356, 3630, + 1060, 3612, 111, 112, 113, 3678, 116, 3510, 3625, 125, + 3648, 2678, 194, 3564, 132, 610, 154, 3077, 3076, 1562, + 3464, 2290, 3613, 2497, 1356, 1919, 3611, 175, 678, 679, + 3019, 2291, 3407, 3406, 3208, 1042, 1041, 3209, 908, 909, + 910, 911, 3249, 659, 918, 3639, 3417, 131, 3608, 3249, + 3228, 2393, 2236, 86, 1332, 3216, 3553, 86, 165, 3560, + 960, 805, 806, 2285, 153, 2959, 3416, 1958, 3589, 3039, + 1676, 86, 949, 950, 88, 2230, 960, 805, 806, 3227, + 1598, 974, 1599, 172, 3493, 2142, 173, 2529, 3570, 2886, + 2959, 2723, 984, 2692, 2693, 986, 989, 2607, 1098, 1099, + 2606, 2390, 3293, 2608, 659, 141, 142, 164, 163, 192, + 1352, 2887, 2888, 1344, 2177, 1378, 2391, 3570, 2178, 2179, + 659, 1128, 1145, 2708, 1147, 1839, 1359, 86, 1360, 1361, + 1101, 95, 3594, 2701, 660, 95, 1352, 3016, 1379, 1380, + 1381, 1382, 1383, 1384, 1385, 1387, 1386, 1388, 1389, 95, + 3592, 2572, 1891, 1892, 987, 1133, 1134, 1331, 1839, 3598, + 3599, 1160, 1144, 1146, 1116, 906, 905, 2907, 2908, 1117, + 1116, 2656, 3480, 2619, 3593, 1117, 2573, 1115, 3027, 1114, + 2114, 1129, 3025, 1086, 2893, 1092, 3108, 1122, 1342, 1890, + 1837, 2766, 2382, 989, 659, 981, 3631, 2196, 2195, 2990, + 2565, 2566, 983, 982, 659, 95, 1894, 673, 158, 139, + 161, 146, 138, 677, 159, 160, 671, 3632, 1594, 2703, + 1881, 176, 2229, 1539, 2995, 3439, 2267, 3440, 2663, 2894, + 182, 147, 2688, 659, 2983, 1540, 2142, 2385, 2386, 2388, + 2387, 2306, 2984, 3660, 1795, 150, 148, 143, 144, 145, + 149, 987, 2359, 2896, 2360, 1158, 2361, 140, 1149, 660, + 2373, 1769, 198, 1135, 198, 1137, 151, 198, 198, 2711, + 2311, 2891, 1142, 1136, 1061, 2906, 1143, 1131, 1132, 1130, + 1159, 1094, 3197, 2140, 2141, 1123, 1148, 2909, 2907, 2908, + 953, 3196, 2362, 988, 2331, 2892, 2330, 2991, 1067, 2334, + 2335, 1066, 2310, 2332, 2333, 1770, 2992, 1771, 676, 2336, + 676, 676, 3391, 1537, 2308, 3606, 1027, 2270, 1141, 617, + 660, 1025, 997, 3254, 3193, 2312, 998, 2155, 2898, 998, + 676, 198, 1036, 3672, 1035, 1034, 660, 1033, 1543, 1032, + 989, 1085, 1031, 1680, 2309, 1030, 1029, 1024, 1037, 2800, + 1351, 1348, 1349, 1350, 1355, 1357, 1354, 2909, 1353, 1405, + 167, 193, 2767, 972, 3679, 972, 3637, 970, 1347, 1016, + 1010, 972, 612, 1009, 1830, 1392, 1351, 1348, 1349, 1350, + 1355, 1357, 1354, 2243, 1353, 132, 963, 957, 955, 1392, + 988, 948, 1126, 907, 1347, 2712, 2906, 1701, 175, 1403, + 2296, 2295, 963, 957, 955, 1089, 1826, 3487, 2909, 2654, + 660, 1333, 2391, 1413, 1054, 2533, 2535, 1091, 2929, 1090, + 660, 1150, 1151, 1153, 2687, 1016, 1112, 2715, 1118, 1119, + 1120, 1121, 1674, 1016, 2140, 2141, 973, 995, 3192, 1673, + 2621, 2612, 2289, 2690, 618, 1672, 162, 2673, 1595, 660, + 1395, 1396, 1397, 1398, 172, 1161, 1162, 173, 854, 854, + 1409, 2728, 1827, 1028, 854, 3476, 1046, 1670, 1026, 2657, + 127, 1015, 1009, 615, 1323, 2405, 1045, 1009, 1012, 1013, + 192, 972, 3566, 2960, 2961, 1006, 1010, 614, 3109, 609, + 3145, 1843, 2700, 1808, 3127, 2699, 2964, 2287, 2603, 2233, + 3017, 1405, 1399, 1324, 1325, 1700, 1005, 155, 2960, 2961, + 156, 3566, 2568, 1053, 1088, 3565, 1781, 1780, 1782, 1783, + 1784, 2964, 3156, 3157, 1843, 89, 2677, 1015, 3226, 2505, + 2895, 1840, 1841, 1844, 1842, 1015, 1961, 988, 1586, 2234, + 168, 1009, 1012, 1013, 3565, 972, 2232, 180, 1494, 1006, + 1010, 1103, 3670, 2392, 2563, 3671, 1529, 3669, 198, 1393, + 1394, 3248, 676, 676, 1840, 1841, 1844, 1842, 3248, 94, + 2676, 1563, 1565, 94, 2184, 1392, 2718, 198, 1389, 1982, + 2235, 2717, 2534, 1423, 1340, 1424, 1427, 94, 188, 1544, + 2231, 2718, 176, 1983, 2885, 1125, 2717, 676, 931, 1100, + 198, 182, 956, 3597, 3061, 1157, 1127, 1097, 1113, 1799, + 3501, 1039, 676, 3188, 1530, 2752, 1546, 1547, 956, 198, + 1550, 3121, 1139, 2307, 1016, 916, 1848, 1016, 1111, 1903, + 1823, 1600, 169, 174, 171, 177, 178, 179, 181, 183, + 184, 185, 186, 94, 1973, 1973, 2422, 3596, 187, 189, + 190, 191, 2646, 1360, 1361, 1139, 3640, 676, 2347, 2343, + 2345, 2346, 2344, 2350, 2351, 1361, 1093, 2348, 2349, 2284, + 1405, 1500, 1501, 1502, 1503, 1504, 676, 676, 1530, 676, + 3289, 676, 676, 3163, 676, 676, 676, 676, 676, 676, + 1548, 2286, 3162, 104, 2274, 1549, 2282, 1405, 105, 1710, + 1405, 676, 1405, 198, 1931, 1536, 1810, 1362, 1809, 1523, + 1707, 1813, 1814, 2899, 1709, 1811, 1812, 2903, 1932, 1390, + 1391, 1930, 1980, 198, 2902, 1699, 1015, 107, 1052, 1015, + 1152, 167, 1049, 1027, 1019, 1009, 676, 1742, 198, 1021, + 1745, 2279, 1747, 1022, 1020, 1677, 1678, 1679, 1384, 1385, + 1387, 1386, 1388, 1389, 676, 123, 198, 1796, 2904, 1797, + 1693, 1764, 1798, 2900, 2022, 1362, 2279, 3633, 2901, 1140, + 1564, 1110, 120, 1849, 1025, 1362, 198, 3146, 1545, 1533, + 2283, 2412, 913, 198, 1567, 1705, 915, 1686, 927, 3674, + 3531, 2411, 198, 198, 198, 198, 198, 198, 198, 198, + 198, 676, 1140, 3469, 1746, 2281, 3680, 3399, 1591, 1592, + 1815, 3398, 1754, 1755, 1362, 1921, 1923, 1924, 1760, 1761, + 1715, 3222, 1716, 3223, 1718, 1720, 3389, 1704, 1724, 1726, + 1728, 1730, 1732, 121, 3239, 3532, 3238, 1669, 3170, 1922, + 1703, 1703, 1359, 3169, 1360, 1361, 1683, 3159, 3470, 2937, + 1789, 1696, 2397, 2398, 2399, 1684, 1682, 1787, 1362, 3420, + 1835, 2014, 2003, 2004, 2005, 2006, 2016, 2007, 2008, 2009, + 2021, 2017, 2010, 2011, 2018, 2019, 2020, 2012, 2013, 2015, + 1562, 2925, 2147, 2148, 1750, 2628, 2627, 1978, 2626, 2733, + 857, 858, 859, 3681, 1850, 1851, 1979, 2239, 3644, 1562, + 1359, 1800, 1360, 1361, 1790, 122, 1831, 1776, 1855, 2754, + 1359, 168, 1360, 1361, 1788, 1862, 1863, 1864, 180, 1774, + 1773, 1786, 1772, 1096, 1362, 1102, 1852, 1762, 1104, 1106, + 1756, 1753, 1362, 1856, 1752, 1858, 1859, 1860, 1861, 1751, + 2079, 1722, 1865, 1675, 2076, 131, 992, 991, 990, 1359, + 2079, 1360, 1361, 2078, 1877, 1878, 1108, 1880, 1107, 188, + 2318, 2314, 2316, 2317, 2315, 2321, 2322, 852, 1854, 2319, + 2320, 1775, 2987, 2735, 1327, 676, 676, 1379, 1380, 1381, + 1382, 1383, 1384, 1385, 1387, 1386, 1388, 1389, 676, 1876, + 3153, 665, 1335, 1359, 1875, 1360, 1361, 198, 2610, 665, + 2255, 2254, 665, 169, 174, 171, 177, 178, 179, 181, + 183, 184, 185, 186, 2253, 2252, 3642, 1562, 1362, 187, + 189, 190, 191, 1818, 1362, 1816, 1817, 1594, 1821, 1822, + 2251, 2250, 1819, 1820, 1016, 2554, 3659, 3120, 3634, 42, + 2449, 3496, 42, 3034, 3495, 676, 3473, 1956, 1956, 2745, + 2744, 2743, 101, 3472, 2737, 1405, 2741, 3471, 2736, 1359, + 2734, 1360, 1361, 102, 101, 2739, 676, 1359, 3394, 1360, + 1361, 103, 1405, 1976, 2738, 102, 1934, 1977, 1936, 1937, + 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, + 1948, 1571, 2740, 2742, 3378, 1403, 1362, 676, 676, 1382, + 1383, 1384, 1385, 1387, 1386, 1388, 1389, 2419, 1925, 1562, + 1927, 2040, 1974, 3377, 1803, 1529, 1801, 1802, 1562, 1806, + 1807, 3621, 1562, 1804, 1805, 1954, 1954, 1935, 1957, 3288, + 1562, 1562, 110, 1358, 1562, 3489, 1015, 1572, 2459, 2072, + 3286, 1019, 1009, 109, 3235, 108, 1021, 2087, 1358, 1562, + 1022, 1020, 3224, 1359, 1362, 1360, 1361, 2036, 1362, 1359, + 1528, 1360, 1361, 1527, 2101, 2554, 3559, 1362, 1887, 1888, + 1928, 1023, 1575, 1530, 85, 1378, 1904, 85, 2457, 1526, + 2418, 1563, 2108, 2554, 3539, 3425, 2084, 3167, 193, 3152, + 198, 2554, 3535, 3522, 1562, 3424, 676, 2461, 1379, 1380, + 1381, 1382, 1383, 1384, 1385, 1387, 1386, 1388, 1389, 3001, + 1933, 2999, 132, 1562, 3382, 2131, 3206, 3486, 3381, 198, + 3402, 1562, 676, 2996, 2126, 175, 2127, 2554, 3390, 3206, + 1562, 1359, 198, 1360, 1361, 2993, 676, 1960, 1574, 2087, + 198, 2928, 198, 1562, 198, 198, 2927, 1967, 1969, 2075, + 2706, 2086, 1562, 1362, 110, 2637, 2034, 2554, 3204, 676, + 2624, 1590, 2279, 1562, 2570, 109, 2045, 108, 2089, 2090, + 2193, 1525, 1984, 1985, 1986, 1987, 103, 2301, 2084, 1362, + 1607, 172, 3125, 1562, 173, 2300, 1998, 2470, 1562, 1359, + 2137, 1360, 1361, 1359, 2165, 1360, 1361, 2085, 1362, 2918, + 2917, 2410, 1359, 104, 1360, 1361, 2121, 192, 105, 1366, + 1367, 1368, 1369, 1370, 1371, 1372, 1364, 2120, 676, 2240, + 1883, 2130, 2915, 2916, 104, 2913, 2914, 1362, 2088, 105, + 1845, 2091, 2092, 103, 2109, 1562, 2578, 3576, 1562, 3214, + 2045, 2913, 2912, 2086, 1785, 676, 2202, 2203, 2204, 2205, + 1362, 676, 2578, 1562, 2664, 2197, 1777, 2198, 2199, 2200, + 2201, 1767, 2188, 2187, 1748, 2169, 2391, 2686, 1665, 2667, + 2660, 2661, 928, 2208, 2209, 2210, 2211, 2119, 2599, 1362, + 2107, 1763, 3574, 1562, 109, 2129, 2554, 2553, 1359, 2152, + 1360, 1361, 1562, 2222, 2268, 2550, 2191, 1759, 676, 1793, + 2132, 2415, 1562, 676, 2599, 2228, 1758, 676, 676, 1757, + 103, 3572, 1562, 2642, 1359, 2150, 1360, 1361, 1362, 176, + 2174, 2175, 2173, 962, 961, 1573, 1362, 1155, 182, 2190, + 1154, 2189, 2570, 1359, 3140, 1360, 1361, 1853, 1959, 1562, + 2880, 2600, 1665, 1664, 1857, 198, 1606, 1605, 2265, 2238, + 2391, 2602, 198, 1358, 1358, 1868, 1869, 1870, 1871, 1872, + 1873, 1874, 1359, 3091, 1360, 1361, 2577, 2600, 2415, 2280, + 2273, 2223, 2850, 2276, 2192, 2277, 3122, 2391, 198, 198, + 2219, 3527, 198, 3120, 198, 1359, 2237, 1360, 1361, 2241, + 198, 3500, 2554, 2249, 2212, 2214, 2215, 2940, 2578, 3081, + 198, 2293, 3448, 1562, 3120, 2915, 1017, 198, 2223, 2272, + 3087, 2294, 2271, 2823, 1359, 2275, 1360, 1361, 95, 1018, + 2176, 2578, 2415, 2470, 2446, 1362, 2445, 2279, 2279, 1703, + 2262, 2145, 1566, 2110, 1362, 1959, 1905, 198, 1889, 1825, + 1593, 1000, 999, 2297, 123, 3602, 676, 2298, 2299, 1378, + 3542, 3413, 1374, 1359, 1375, 1360, 1361, 1569, 167, 3379, + 1378, 1359, 2727, 1360, 1361, 2304, 3300, 3187, 1376, 1390, + 1391, 1373, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1387, + 1386, 1388, 1389, 1379, 1380, 1381, 1382, 1383, 1384, 1385, + 1387, 1386, 1388, 1389, 1380, 1381, 1382, 1383, 1384, 1385, + 1387, 1386, 1388, 1389, 3184, 3165, 3044, 3043, 3654, 3446, + 1562, 2408, 1405, 1667, 2087, 2413, 2221, 3504, 2416, 3635, + 2417, 2985, 95, 2942, 1362, 2424, 2938, 2668, 2218, 2426, + 2427, 2428, 2401, 2365, 2403, 2213, 2207, 2206, 1792, 2434, + 2435, 2436, 2437, 2438, 2439, 2440, 2441, 2442, 2443, 2371, + 1362, 3171, 2407, 2409, 2375, 2376, 1698, 1694, 1908, 2378, + 1359, 1661, 1360, 1361, 1362, 124, 2634, 1927, 2379, 1359, + 1362, 1360, 1361, 2633, 1092, 2450, 2451, 2452, 2453, 2454, + 2989, 2456, 1362, 2402, 3414, 2458, 3132, 3133, 1362, 2463, + 2464, 2236, 2465, 2124, 3652, 2468, 2381, 2469, 3628, 3508, + 3434, 2472, 3172, 3173, 3174, 2476, 1362, 1885, 3059, 2481, + 2482, 2483, 2484, 3135, 2389, 2934, 3415, 2933, 2086, 2932, + 2850, 2634, 2495, 3138, 2498, 2499, 2647, 1928, 2366, 3137, + 2869, 3175, 2501, 2503, 3055, 2400, 2868, 2136, 168, 2506, + 2507, 2508, 2509, 2510, 1738, 180, 2128, 2872, 3443, 1562, + 2517, 2518, 2873, 2519, 3429, 1562, 2522, 2524, 2131, 1359, + 2526, 1360, 1361, 198, 2085, 1570, 3096, 1562, 3468, 1886, + 2538, 198, 2421, 3484, 3126, 3279, 1956, 1362, 3176, 3177, + 3178, 676, 2828, 2429, 2870, 1359, 188, 1360, 1361, 2871, + 3089, 1562, 676, 2827, 3281, 1739, 1740, 1741, 3113, 1359, + 2444, 1360, 1361, 932, 3116, 1359, 3112, 1360, 1361, 2537, + 2874, 933, 2587, 2588, 1362, 2837, 198, 1359, 2911, 1360, + 1361, 198, 1824, 1359, 904, 1360, 1361, 2455, 2617, 2638, + 169, 174, 171, 177, 178, 179, 181, 183, 184, 185, + 186, 1359, 1056, 1360, 1361, 1982, 187, 189, 190, 191, + 1378, 1055, 2404, 3010, 1954, 2633, 2539, 42, 2540, 1983, + 2542, 3086, 1562, 2721, 2555, 2574, 2592, 686, 3270, 2594, + 3269, 1326, 1362, 1379, 1380, 1381, 1382, 1383, 1384, 1385, + 1387, 1386, 1388, 1389, 2674, 132, 1734, 3118, 103, 676, + 2147, 2148, 2593, 2149, 3666, 198, 2551, 2930, 3084, 1562, + 1362, 2153, 198, 2156, 2564, 2527, 1908, 2369, 2840, 2842, + 1536, 101, 1359, 3581, 1360, 1361, 676, 2843, 3268, 1362, + 2659, 3485, 102, 676, 1530, 2620, 2622, 3409, 2910, 1362, + 2552, 101, 676, 1735, 1736, 1737, 1362, 2547, 103, 2567, + 1362, 2597, 102, 2591, 2613, 2133, 940, 941, 1405, 1359, + 1362, 1360, 1361, 2358, 2357, 1362, 3049, 1562, 2356, 2683, + 3098, 198, 198, 198, 198, 198, 1362, 2228, 2604, 2601, + 1378, 2355, 2354, 2611, 2826, 2395, 938, 2353, 2614, 944, + 944, 2636, 2825, 3456, 3032, 1562, 2639, 2640, 2681, 2352, + 2342, 2341, 2625, 1379, 1380, 1381, 1382, 1383, 1384, 1385, + 1387, 1386, 1388, 1389, 3386, 2340, 2339, 1359, 2635, 1360, + 1361, 2338, 2337, 2525, 1562, 2329, 2328, 2327, 198, 198, + 2523, 1562, 2326, 2643, 3041, 2644, 2325, 2648, 2649, 2650, + 2324, 2323, 1362, 108, 3040, 1359, 1362, 1360, 1361, 2502, + 1562, 1362, 3455, 2680, 198, 2669, 2670, 3437, 110, 1686, + 2485, 1562, 109, 1362, 1359, 3287, 1360, 1361, 2679, 109, + 2570, 108, 3285, 3284, 1359, 676, 1360, 1361, 3277, 3276, + 103, 1359, 3185, 1360, 1361, 1359, 1362, 1360, 1361, 3117, + 2756, 2757, 2758, 2759, 2760, 1359, 3115, 1360, 1361, 110, + 1359, 2943, 1360, 1361, 2263, 1681, 939, 110, 3258, 2765, + 109, 1359, 108, 1360, 1361, 2704, 1908, 2731, 109, 3106, + 1362, 2705, 676, 2313, 3656, 3655, 2477, 1562, 2707, 2550, + 2768, 3189, 2447, 2122, 1587, 3037, 1579, 2709, 3655, 2746, + 114, 115, 3656, 3474, 2710, 3151, 930, 2521, 2713, 2363, + 2364, 123, 1902, 2368, 3, 10, 2761, 2729, 97, 1900, + 676, 2372, 9, 1, 2719, 1105, 2730, 2720, 676, 1901, + 2520, 2374, 8, 1836, 1329, 1328, 3155, 1359, 2377, 1360, + 1361, 1359, 3591, 1360, 1361, 633, 1359, 2111, 1360, 1361, + 2583, 2586, 2587, 2588, 2584, 2749, 2585, 2589, 1359, 676, + 1360, 1361, 1534, 2802, 3629, 2629, 1362, 2807, 2380, 3587, + 2804, 3588, 1778, 198, 1768, 2747, 3217, 676, 2046, 3410, + 2946, 1359, 2269, 1360, 1361, 3183, 2748, 2226, 1008, 157, + 2185, 676, 2186, 3555, 118, 1405, 2859, 965, 676, 676, + 1405, 198, 198, 198, 198, 198, 117, 1011, 1124, 2776, + 2264, 3207, 2618, 198, 2877, 1359, 2847, 1360, 1361, 198, + 2194, 198, 2770, 2165, 198, 198, 198, 1612, 1610, 2075, + 2807, 2075, 1611, 1609, 1614, 2853, 2862, 1613, 1362, 3018, + 2853, 2879, 2448, 3060, 1893, 2778, 2806, 2780, 919, 2831, + 2516, 2165, 2165, 2165, 2165, 2165, 2803, 2830, 2805, 672, + 2590, 666, 195, 2791, 2792, 2793, 2794, 1601, 1580, 2818, + 198, 2165, 3073, 1050, 2165, 2786, 2787, 2788, 2789, 2790, + 2856, 2829, 623, 676, 2919, 2302, 1405, 2832, 629, 1410, + 1884, 676, 2844, 2845, 2824, 2966, 198, 2881, 2605, 959, + 2882, 1359, 2822, 1360, 1361, 921, 920, 951, 2123, 2541, + 198, 2864, 2865, 2875, 2867, 2863, 958, 3387, 2866, 2858, + 3110, 1362, 2515, 2836, 2838, 2557, 2945, 2883, 2841, 2834, + 1835, 2819, 2820, 2821, 3467, 198, 104, 3278, 198, 3540, + 2889, 105, 2861, 2615, 1576, 3080, 2420, 3012, 1971, 2922, + 1362, 2921, 2920, 1400, 2162, 2923, 2924, 3253, 1920, 695, + 1362, 694, 692, 2543, 2571, 1365, 2974, 3029, 3030, 3031, + 1362, 3033, 3035, 1359, 842, 1360, 1361, 2531, 2228, 1362, + 1588, 2965, 2582, 1362, 2580, 3042, 2944, 2579, 2367, 2170, + 3046, 3047, 3048, 3050, 3051, 3052, 3053, 3134, 2980, 3054, + 3130, 3056, 3057, 3058, 2973, 2514, 3062, 3063, 3064, 3065, + 3066, 3067, 3068, 3069, 3070, 3071, 3583, 2164, 676, 2160, + 2997, 2998, 3006, 3000, 3078, 3002, 3003, 3082, 3005, 3083, + 3085, 2549, 3088, 3090, 2513, 3092, 3093, 3094, 3095, 793, + 3013, 792, 3023, 3101, 2512, 3020, 3021, 198, 3022, 3014, + 704, 3024, 2596, 3026, 2511, 3028, 1359, 696, 1360, 1361, + 688, 3075, 791, 2500, 790, 3148, 2972, 2494, 3079, 3567, + 2583, 2586, 2587, 2588, 2584, 2689, 2585, 2589, 3123, 3124, + 3132, 3133, 3128, 1362, 2986, 1359, 2691, 1360, 1361, 2616, + 2982, 1343, 1362, 3008, 3009, 1359, 1362, 1360, 1361, 1552, + 1560, 1556, 682, 198, 979, 1359, 3015, 1360, 1361, 3491, + 2394, 3038, 1551, 2001, 1359, 1557, 1360, 1361, 1359, 1362, + 1360, 1361, 2002, 1362, 3498, 1363, 2645, 2954, 3201, 3102, + 3099, 3100, 198, 1362, 3107, 2935, 2665, 2256, 3104, 3114, + 1662, 1663, 1559, 70, 1558, 46, 3462, 3119, 3528, 789, + 786, 1362, 198, 2165, 1418, 198, 198, 198, 3255, 1362, + 3256, 3257, 3139, 2798, 3136, 676, 676, 2493, 1362, 3190, + 3191, 3129, 2799, 3511, 3141, 1362, 2492, 3512, 785, 3142, + 2491, 3513, 2029, 1339, 2974, 1362, 3149, 3150, 3205, 1336, + 3143, 3144, 2694, 2695, 2696, 2697, 2698, 3604, 1895, 96, + 3211, 3212, 37, 2490, 1560, 1556, 36, 2489, 35, 3166, + 34, 3168, 676, 676, 676, 676, 1362, 2488, 1359, 1557, + 1360, 1361, 2973, 1362, 33, 3160, 3161, 1359, 27, 1360, + 1361, 1359, 1362, 1360, 1361, 2487, 3225, 1362, 26, 3229, + 25, 1362, 24, 2486, 1553, 1554, 1559, 1362, 1558, 1908, + 2714, 23, 2480, 20, 1359, 30, 1360, 1361, 1359, 2479, + 1360, 1361, 22, 21, 19, 18, 3240, 3213, 1359, 2478, + 1360, 1361, 2957, 3624, 3665, 2722, 126, 55, 3194, 52, + 50, 3244, 3198, 3199, 3200, 3234, 1359, 134, 1360, 1361, + 133, 53, 49, 3252, 1359, 1095, 1360, 1361, 47, 32, + 2475, 3259, 31, 1359, 17, 1360, 1361, 2474, 16, 15, + 1359, 1362, 1360, 1361, 14, 13, 2473, 12, 3230, 11, + 1359, 2471, 1360, 1361, 198, 2467, 7, 6, 40, 39, + 29, 2466, 38, 1362, 28, 4, 2652, 2258, 0, 0, + 0, 0, 0, 1405, 0, 0, 3273, 0, 676, 3251, + 676, 1359, 0, 1360, 1361, 0, 0, 0, 1359, 0, + 1360, 1361, 0, 0, 1956, 0, 0, 1359, 0, 1360, + 1361, 0, 1359, 0, 1360, 1361, 1359, 1578, 1360, 1361, + 0, 0, 1359, 2853, 1360, 1361, 0, 0, 0, 853, + 3283, 3296, 87, 0, 3274, 2462, 0, 42, 3282, 0, + 3292, 3298, 0, 3290, 0, 3294, 0, 0, 0, 1362, + 676, 0, 0, 1362, 3388, 0, 1668, 2460, 0, 0, + 0, 0, 3401, 198, 0, 0, 676, 3242, 3306, 2856, + 0, 3408, 0, 2856, 0, 0, 0, 0, 0, 676, + 0, 0, 1954, 0, 3302, 0, 1359, 0, 1360, 1361, + 3303, 3304, 3418, 3419, 0, 3421, 0, 3422, 3423, 3385, + 0, 3400, 3426, 3427, 3428, 3383, 3430, 3433, 1359, 3384, + 1360, 1361, 0, 0, 1956, 917, 3405, 87, 3412, 3404, + 0, 0, 3442, 3444, 3445, 3447, 3449, 3450, 3452, 0, + 676, 0, 0, 2425, 676, 676, 917, 2414, 0, 0, + 3392, 3431, 3432, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 978, 0, 0, 3395, 3396, 3397, + 0, 0, 0, 676, 3438, 3436, 3482, 3478, 3441, 0, + 0, 2931, 0, 0, 0, 0, 0, 0, 3457, 3458, + 3460, 3459, 0, 0, 1359, 3477, 1360, 1361, 1359, 1846, + 1360, 1361, 1954, 0, 3435, 0, 0, 2969, 3475, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2981, 0, 0, 0, 3481, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3004, 0, 0, 3007, + 2856, 0, 676, 0, 0, 0, 3483, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 676, 198, 0, 0, + 3502, 0, 0, 0, 0, 0, 0, 0, 0, 3466, + 0, 0, 3507, 0, 0, 0, 3494, 0, 0, 0, + 0, 0, 3497, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3523, 0, 0, 0, 0, 0, 3524, 3525, + 0, 0, 42, 0, 0, 0, 0, 676, 0, 0, + 3499, 0, 0, 0, 0, 0, 0, 1405, 3490, 676, + 3536, 0, 3517, 0, 0, 3518, 0, 0, 3103, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3526, 0, + 0, 0, 0, 676, 676, 0, 3561, 3562, 3538, 0, + 0, 0, 0, 3533, 3543, 0, 0, 2853, 3568, 0, + 3571, 3573, 3575, 3569, 3554, 676, 3546, 3551, 0, 3548, + 3547, 3545, 3550, 3549, 0, 0, 0, 0, 42, 198, + 676, 0, 3412, 3556, 0, 3603, 3541, 0, 0, 0, + 3579, 0, 0, 0, 0, 0, 0, 0, 3600, 3590, + 3595, 3582, 0, 0, 0, 0, 0, 0, 0, 3568, + 0, 0, 3609, 3164, 3569, 3607, 1915, 1916, 1917, 1918, + 0, 3506, 0, 676, 3620, 0, 0, 0, 0, 3516, + 0, 0, 0, 3179, 0, 3618, 3180, 3181, 3182, 3623, + 0, 0, 0, 0, 0, 676, 0, 0, 0, 3636, + 0, 0, 0, 0, 0, 0, 3641, 3643, 3645, 0, + 3638, 1413, 676, 0, 676, 1962, 1963, 0, 1956, 0, + 1965, 0, 944, 944, 1970, 3649, 3653, 3651, 1975, 3647, + 3646, 0, 0, 0, 0, 3568, 0, 3664, 3661, 0, + 3569, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, + 1997, 3675, 3673, 3676, 3677, 2023, 2024, 2025, 2026, 2027, + 2028, 2030, 3667, 2035, 0, 2037, 2038, 2039, 0, 2041, + 2042, 2043, 1956, 2049, 2050, 2051, 2052, 2053, 2054, 2055, + 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, + 2066, 2067, 2068, 2069, 2070, 2071, 1954, 2073, 3650, 2080, + 2081, 944, 3683, 944, 944, 944, 944, 944, 3684, 3685, + 3432, 0, 0, 2093, 2094, 2095, 2096, 2097, 2098, 2099, + 2100, 0, 2102, 2103, 2104, 2105, 2106, 0, 0, 0, + 0, 855, 0, 2079, 0, 0, 856, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1955, 0, 0, 0, + 1954, 0, 3682, 0, 0, 0, 0, 0, 0, 0, + 944, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2143, 2144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2182, 0, + 0, 0, 0, 0, 0, 1164, 0, 1164, 1164, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, + 903, 0, 0, 0, 0, 917, 1402, 1407, 1408, 2224, + 1411, 0, 1412, 1414, 1415, 1416, 0, 1419, 1420, 1422, + 1422, 0, 1422, 1426, 1426, 1428, 1429, 1430, 1431, 1432, + 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, + 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, + 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, + 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, + 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, + 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, + 0, 0, 0, 0, 1493, 0, 1495, 1496, 1497, 1498, + 1499, 0, 0, 0, 0, 665, 0, 0, 0, 1426, + 1426, 1426, 1426, 1426, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1505, 1506, 1507, 1508, 1509, 1510, 1511, + 1512, 1513, 1514, 1515, 1516, 1517, 1518, 0, 3324, 3326, + 3325, 3343, 3344, 3345, 3346, 3347, 3348, 3349, 743, 659, + 0, 0, 0, 0, 1532, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 656, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1538, 3503, 0, + 0, 0, 0, 917, 0, 0, 0, 917, 0, 0, + 0, 0, 917, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 635, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 837, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, + 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 645, 0, 0, 0, + 0, 2423, 0, 0, 0, 0, 0, 0, 642, 648, + 644, 0, 2430, 2431, 2432, 2433, 0, 0, 0, 0, + 655, 0, 0, 0, 0, 0, 675, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 660, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1418, 3330, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3338, 3339, 0, 0, 3622, 622, 675, + 624, 638, 675, 662, 0, 661, 628, 1629, 626, 630, + 639, 631, 0, 625, 0, 636, 0, 0, 627, 640, + 641, 647, 651, 652, 653, 649, 646, 654, 620, 621, + 643, 0, 634, 663, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1164, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 809, 0, 722, 813, 724, 810, 811, + 0, 720, 723, 812, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1578, 0, 0, 0, 0, 0, 741, + 742, 3323, 3327, 3328, 3329, 3340, 3341, 3342, 3350, 3352, + 774, 3351, 3353, 3354, 3355, 3358, 3359, 3360, 3361, 3356, + 3357, 3362, 3307, 3311, 3308, 3309, 3310, 3322, 3312, 3313, + 3314, 3315, 3316, 3317, 3318, 3319, 3320, 3321, 3363, 3364, + 3365, 3366, 3367, 3368, 3333, 3337, 3336, 3334, 3335, 3331, + 3332, 1617, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 814, 0, 815, 0, 0, 819, 0, + 0, 0, 821, 820, 0, 822, 788, 787, 0, 0, + 816, 817, 0, 818, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1164, 1164, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1630, 87, 0, 0, 87, + 0, 0, 0, 0, 0, 0, 0, 664, 3369, 3370, + 3371, 3372, 3373, 3374, 3375, 3376, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1643, 1646, 1647, 1648, 1649, 1650, 1651, + 0, 1652, 1653, 1655, 1656, 1654, 1657, 1658, 1631, 1632, + 1633, 1634, 1615, 1616, 1644, 0, 1618, 0, 1619, 1620, + 1621, 1622, 1623, 1624, 1625, 1626, 1627, 0, 1629, 1628, + 1635, 1636, 1637, 1638, 2726, 1639, 1640, 1641, 1642, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 944, 0, 0, 2750, 2751, 0, 0, + 2753, 0, 0, 2755, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2762, 2763, 2764, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2769, 0, 0, 2771, 2772, + 2773, 0, 0, 0, 2774, 2775, 0, 0, 2049, 2777, + 0, 0, 2779, 0, 0, 2781, 2782, 2783, 2784, 0, + 0, 0, 0, 2785, 2049, 2049, 2049, 2049, 2049, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 944, 0, 0, 0, 0, 0, 0, 2808, + 2809, 2810, 2811, 2812, 2813, 0, 0, 0, 2814, 2815, + 0, 2816, 0, 2817, 193, 0, 0, 0, 0, 0, + 0, 0, 1617, 0, 0, 2658, 0, 0, 0, 0, + 0, 2163, 0, 0, 0, 0, 0, 1645, 132, 0, + 154, 0, 0, 193, 0, 0, 0, 0, 0, 0, + 0, 175, 0, 0, 1685, 0, 0, 0, 2848, 0, + 0, 0, 0, 0, 0, 0, 0, 132, 0, 154, + 0, 0, 0, 675, 1322, 675, 675, 0, 0, 0, + 175, 0, 165, 2878, 0, 0, 0, 0, 153, 0, + 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 978, 1630, 172, 0, 0, + 173, 165, 0, 0, 0, 0, 0, 153, 0, 0, + 0, 0, 0, 0, 1404, 0, 0, 0, 0, 1689, + 1690, 164, 163, 192, 0, 0, 172, 0, 978, 173, + 0, 0, 0, 0, 2941, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1689, 1690, + 164, 163, 192, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1643, 1646, 1647, 1648, 1649, 1650, + 1651, 0, 1652, 1653, 1655, 1656, 1654, 1657, 1658, 1631, + 1632, 1633, 1634, 1615, 1616, 1644, 0, 1618, 0, 1619, + 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 0, 0, + 1628, 1635, 1636, 1637, 1638, 0, 1639, 1640, 1641, 1642, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 158, 1691, 161, 0, 1688, 0, 159, 160, + 0, 0, 3036, 0, 0, 176, 0, 0, 0, 0, + 0, 0, 0, 0, 182, 0, 3045, 0, 0, 0, + 0, 158, 1691, 161, 0, 1688, 1404, 159, 160, 0, + 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, + 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 675, 675, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2396, + 0, 0, 675, 0, 0, 0, 0, 0, 1645, 0, + 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, + 0, 0, 0, 0, 167, 0, 0, 0, 1660, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2406, 1671, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, + 0, 0, 675, 0, 1697, 0, 3186, 0, 0, 0, + 0, 0, 1706, 0, 0, 1404, 1708, 0, 0, 1711, + 1712, 675, 675, 0, 675, 0, 675, 675, 0, 675, + 675, 675, 675, 675, 675, 0, 0, 0, 0, 3210, + 0, 0, 1404, 1743, 1744, 1404, 675, 1404, 0, 1749, + 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 794, 0, 0, 162, + 0, 675, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1828, 0, 0, 675, + 3231, 0, 3232, 0, 2504, 3233, 0, 0, 3236, 3237, + 0, 155, 0, 0, 156, 0, 0, 3241, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3243, 0, 0, + 0, 0, 0, 0, 0, 0, 2536, 0, 0, 0, + 155, 0, 0, 156, 168, 674, 675, 0, 0, 3260, + 0, 180, 3261, 917, 3262, 3263, 0, 3264, 0, 3265, + 0, 0, 0, 0, 3266, 0, 0, 0, 0, 0, + 0, 0, 0, 168, 2575, 2576, 0, 0, 0, 0, + 180, 0, 0, 2163, 0, 0, 917, 2595, 0, 3291, + 0, 0, 188, 0, 0, 0, 0, 0, 969, 0, + 3299, 977, 0, 3301, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3305, 0, 0, 0, 0, + 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3380, 0, 0, 169, 174, 171, 177, + 178, 179, 181, 183, 184, 185, 186, 0, 0, 0, + 0, 0, 187, 189, 190, 191, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 169, 174, 171, 177, 178, + 179, 181, 183, 184, 185, 186, 0, 0, 0, 0, + 0, 187, 189, 190, 191, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2672, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 675, 675, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 675, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3465, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 95, 0, 0, 855, 0, + 0, 0, 843, 856, 857, 858, 859, 844, 0, 0, + 845, 846, 0, 847, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 852, 860, 861, + 675, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1404, 0, 0, 0, 0, 0, 0, 0, 0, 1964, + 0, 675, 0, 0, 0, 0, 0, 1404, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2975, 2976, 0, 0, 0, 0, + 0, 0, 675, 675, 0, 0, 862, 863, 864, 865, + 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, + 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 3505, 0, + 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3519, 0, 0, 3520, 0, 3521, 2795, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2977, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 675, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, + 2163, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 675, 0, 0, 675, 0, 0, 0, 0, 0, + 0, 0, 0, 2857, 0, 87, 0, 0, 2163, 2163, + 2163, 2163, 2163, 0, 675, 0, 0, 0, 0, 0, + 3601, 0, 2978, 2979, 0, 0, 0, 0, 2163, 0, + 0, 2163, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3615, 0, 3616, 0, 3617, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 675, 0, 0, 0, 0, 0, 0, + 2246, 2247, 2248, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2963, 0, 0, 0, 0, + 675, 0, 0, 0, 0, 2971, 675, 1706, 0, 0, + 1706, 809, 1706, 0, 813, 0, 810, 811, 2278, 0, + 3662, 812, 3663, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1166, 0, 1166, 1166, 0, 0, 0, 0, + 0, 0, 0, 675, 0, 0, 0, 0, 675, 0, + 0, 0, 675, 675, 1334, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 86, 44, 45, 88, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 92, 0, 0, 0, 48, + 77, 78, 0, 75, 79, 0, 795, 0, 0, 0, + 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, + 0, 0, 196, 0, 0, 613, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, + 0, 675, 0, 0, 0, 0, 0, 0, 0, 0, + 2163, 926, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3147, 0, 0, 0, 0, 945, 945, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 855, 0, 0, 0, 0, 856, 1404, 0, 675, + 0, 0, 0, 0, 0, 0, 1955, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1541, 1542, 0, 0, + 0, 51, 54, 57, 56, 59, 0, 74, 0, 0, + 83, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, + 0, 1584, 0, 0, 62, 91, 90, 0, 0, 72, + 73, 58, 0, 0, 0, 0, 1602, 81, 82, 862, + 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, + 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, + 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, + 903, 969, 0, 0, 0, 64, 65, 0, 66, 67, + 68, 69, 0, 0, 0, 0, 0, 0, 0, 0, + 1714, 1714, 0, 1714, 0, 1714, 1714, 0, 1723, 1714, + 1714, 1714, 1714, 1714, 0, 0, 0, 3267, 0, 3271, + 3272, 0, 0, 0, 0, 969, 675, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, + 0, 0, 2857, 0, 87, 0, 2857, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1791, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1832, 0, + 0, 0, 2609, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3393, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1166, 0, 0, 0, 89, + 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 675, 0, 0, 0, 0, 0, 0, 675, 0, + 0, 0, 1706, 1706, 0, 0, 0, 675, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 94, 0, 1404, 2682, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2857, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1428, 1429, 1430, + 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, + 1441, 1442, 1443, 1447, 1448, 1449, 1450, 1451, 1452, 1453, + 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, + 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, + 1474, 1475, 1476, 1478, 1479, 1480, 1481, 1482, 1483, 1484, + 1485, 1486, 1487, 1505, 1506, 1507, 1508, 1509, 1510, 1511, + 1512, 1513, 1514, 1515, 1516, 1517, 1518, 71, 0, 1166, + 1166, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 675, 3492, 1896, 0, 0, 0, 613, 0, 613, 0, + 0, 613, 613, 0, 0, 0, 0, 0, 0, 87, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1950, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, + 1966, 0, 0, 0, 0, 675, 0, 0, 0, 0, + 3537, 0, 0, 675, 0, 87, 0, 0, 0, 0, + 0, 0, 0, 1406, 0, 0, 0, 0, 0, 0, + 0, 1999, 2000, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 675, 0, 0, 0, + 1404, 1166, 0, 675, 675, 1404, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3619, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2125, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2926, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2135, 0, 0, 0, + 0, 0, 0, 0, 0, 1406, 0, 0, 675, 0, + 1584, 1404, 0, 1166, 0, 0, 675, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 969, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3011, 0, 0, 0, 0, 0, 0, + 0, 926, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 977, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 969, + 0, 0, 0, 613, 0, 977, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 675, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 969, 0, 1406, 0, 0, 1950, 0, 0, + 0, 1950, 1950, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1406, 0, 0, 1406, 0, 1406, 613, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1765, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 613, 0, 0, 0, 3154, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1834, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 613, 0, 0, 0, 0, 0, 0, 613, 0, 0, + 675, 675, 0, 0, 0, 0, 1866, 1867, 613, 613, + 613, 613, 613, 613, 613, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 95, 0, 0, 855, + 2383, 0, 0, 843, 856, 857, 858, 859, 844, 0, + 0, 845, 846, 0, 847, 0, 0, 675, 675, 675, + 675, 0, 0, 0, 0, 0, 0, 0, 852, 860, + 861, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1166, 0, + 0, 0, 0, 0, 0, 2975, 2976, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 862, 863, 864, + 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, + 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, + 895, 896, 897, 898, 899, 900, 901, 902, 903, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1404, 0, + 0, 0, 0, 675, 0, 675, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2977, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 675, 0, 0, 0, 2544, 0, 0, 0, 1406, + 0, 0, 0, 0, 675, 0, 2559, 0, 0, 0, + 0, 945, 945, 2978, 2979, 0, 1406, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 675, 0, 0, 0, 675, + 675, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 675, 0, + 945, 1834, 945, 945, 945, 945, 945, 0, 0, 0, + 0, 0, 0, 2641, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2135, 0, 0, 0, 1765, 0, 0, 2666, 0, 0, + 0, 0, 0, 0, 0, 0, 2671, 0, 0, 945, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 926, 0, 0, 0, 675, 0, 0, + 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, + 0, 0, 0, 1834, 613, 0, 613, 0, 613, 2172, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 675, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1404, 0, 675, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1950, + 0, 0, 0, 0, 0, 0, 0, 0, 675, 675, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 675, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 675, 1950, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2796, 0, 0, 0, 675, 0, + 0, 0, 1166, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, + 675, 0, 0, 0, 0, 0, 613, 0, 0, 0, + 0, 0, 0, 1714, 0, 0, 0, 675, 0, 675, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2833, 613, 613, 0, 0, 613, 0, 2370, 0, + 0, 0, 0, 0, 613, 1166, 0, 0, 0, 0, + 0, 0, 2860, 1714, 613, 0, 0, 0, 0, 0, + 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 969, 0, 0, + 0, 0, 0, 0, 0, 2135, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1406, 0, 1834, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3074, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, + 0, 0, 0, 0, 0, 1765, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 613, 0, 0, 0, 0, 613, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2135, + 2135, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, + 0, 0, 0, 0, 0, 0, 2651, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3218, 3219, 3220, 3221, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1406, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 613, 613, 613, 613, 613, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 613, 613, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 613, 0, + 0, 0, 3295, 0, 3297, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 945, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2135, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3403, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1166, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 945, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3453, 0, 0, 0, 3453, 3453, + 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2135, 0, 1406, + 0, 0, 0, 0, 1406, 613, 613, 613, 613, 613, + 0, 0, 0, 0, 0, 0, 0, 2876, 0, 0, + 0, 0, 0, 1765, 0, 613, 0, 0, 613, 2884, + 1834, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 613, 0, 2135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1406, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2135, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, + 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3530, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1166, 1166, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3577, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3585, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3530, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2135, + 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, + 0, 0, 0, 0, 0, 0, 3074, 0, 3585, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 613, 0, 0, 613, + 613, 613, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1765, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1406, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1765, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, + 0, 0, 1300, 1285, 511, 0, 1228, 1303, 1197, 1216, + 1313, 1219, 1222, 1264, 1176, 1242, 409, 1213, 1169, 1201, + 1171, 1208, 1172, 1199, 1230, 267, 1196, 1287, 1246, 1302, + 360, 264, 1178, 1202, 423, 1218, 205, 1266, 480, 251, + 371, 368, 519, 279, 270, 266, 249, 313, 379, 421, + 501, 415, 1309, 364, 1252, 0, 490, 394, 0, 0, + 0, 1232, 1291, 1240, 1278, 1227, 1265, 1186, 1251, 1304, + 1214, 1261, 1305, 319, 247, 321, 204, 406, 491, 283, + 0, 0, 1765, 0, 3557, 665, 0, 0, 0, 0, + 3558, 0, 0, 0, 0, 237, 0, 0, 244, 0, + 0, 613, 345, 354, 353, 334, 335, 337, 339, 344, + 351, 357, 1210, 1258, 1299, 1211, 1260, 262, 317, 269, + 261, 516, 1310, 1290, 1175, 1239, 1298, 0, 0, 228, + 1301, 1234, 0, 1263, 0, 1316, 1170, 1254, 0, 1173, + 1177, 1312, 1294, 1205, 272, 0, 0, 0, 0, 0, + 0, 0, 1231, 1241, 1275, 1279, 1225, 0, 0, 0, + 0, 1406, 0, 0, 1203, 0, 1250, 0, 0, 0, + 1182, 1174, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1229, 0, 0, 0, 0, 1185, + 0, 1204, 1276, 1765, 1168, 294, 1179, 395, 254, 0, + 447, 1283, 1293, 1226, 558, 1297, 1224, 1223, 1270, 1183, + 1289, 1217, 359, 1181, 326, 200, 224, 0, 1215, 405, + 455, 467, 1288, 1200, 1209, 252, 1207, 465, 419, 536, + 232, 281, 452, 425, 463, 435, 284, 1249, 1268, 464, + 366, 521, 445, 533, 559, 560, 260, 399, 545, 505, + 553, 585, 225, 257, 413, 498, 539, 487, 391, 517, + 518, 325, 486, 292, 203, 363, 565, 223, 473, 365, + 241, 230, 523, 542, 286, 450, 429, 430, 567, 580, + 568, 570, 571, 212, 500, 531, 238, 477, 0, 0, + 587, 246, 497, 214, 528, 496, 387, 322, 323, 213, + 0, 451, 265, 290, 0, 0, 255, 408, 525, 526, + 253, 588, 227, 552, 219, 1180, 551, 401, 520, 529, + 388, 377, 218, 527, 386, 376, 330, 349, 350, 277, + 303, 442, 369, 443, 302, 304, 397, 396, 398, 207, + 540, 0, 208, 0, 492, 541, 589, 233, 234, 236, + 1195, 276, 280, 288, 291, 299, 300, 309, 361, 412, + 441, 437, 446, 1284, 515, 534, 546, 557, 563, 564, + 566, 572, 573, 574, 575, 581, 579, 576, 577, 578, + 569, 400, 307, 488, 329, 367, 1273, 1315, 418, 466, + 239, 538, 489, 1318, 1319, 1320, 1321, 1190, 1194, 1188, + 1255, 1189, 1244, 1245, 1191, 1306, 1307, 1308, 590, 591, + 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 0, 1277, 1184, 0, + 1192, 1193, 1286, 1295, 1296, 608, 378, 479, 535, 331, + 343, 346, 336, 355, 0, 356, 332, 333, 338, 340, + 341, 342, 347, 348, 352, 358, 248, 210, 384, 392, + 514, 308, 215, 216, 217, 507, 508, 509, 510, 549, + 550, 554, 456, 457, 458, 459, 289, 544, 305, 462, + 461, 327, 328, 373, 444, 1248, 199, 220, 362, 1311, + 448, 285, 586, 548, 543, 206, 222, 1187, 259, 1198, + 1206, 0, 1212, 1220, 1221, 1233, 1235, 1236, 1237, 1238, + 1256, 1257, 1259, 1267, 1269, 1272, 1274, 1281, 1292, 1314, + 201, 202, 209, 221, 231, 235, 242, 258, 273, 275, + 282, 295, 306, 314, 315, 318, 324, 374, 380, 381, + 382, 383, 402, 403, 404, 407, 410, 411, 414, 416, + 417, 420, 424, 428, 431, 432, 434, 436, 438, 449, + 454, 468, 469, 470, 471, 472, 475, 476, 481, 482, + 483, 484, 485, 493, 494, 499, 522, 524, 537, 555, + 561, 474, 297, 298, 439, 440, 310, 311, 583, 584, + 296, 532, 562, 530, 582, 556, 433, 372, 1247, 1317, + 1253, 375, 278, 301, 316, 1262, 547, 495, 226, 460, + 287, 250, 1280, 1282, 211, 245, 229, 256, 271, 274, + 320, 385, 393, 422, 427, 293, 268, 243, 453, 240, + 478, 502, 503, 504, 506, 389, 263, 426, 1243, 1271, + 370, 512, 513, 312, 390, 0, 0, 0, 1300, 1285, + 511, 0, 1228, 1303, 1197, 1216, 1313, 1219, 1222, 1264, + 1176, 1242, 409, 1213, 1169, 1201, 1171, 1208, 1172, 1199, + 1230, 267, 1196, 1287, 1246, 1302, 360, 264, 1178, 1202, + 423, 1218, 205, 1266, 480, 251, 371, 368, 519, 279, + 270, 266, 249, 313, 379, 421, 501, 415, 1309, 364, + 1252, 0, 490, 394, 0, 0, 0, 1232, 1291, 1240, + 1278, 1227, 1265, 1186, 1251, 1304, 1214, 1261, 1305, 319, + 247, 321, 204, 406, 491, 283, 0, 0, 0, 0, + 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 237, 0, 0, 244, 0, 0, 0, 345, 354, + 353, 334, 335, 337, 339, 344, 351, 357, 1210, 1258, + 1299, 1211, 1260, 262, 317, 269, 261, 516, 1310, 1290, + 1175, 1239, 1298, 0, 0, 228, 1301, 1234, 0, 1263, + 0, 1316, 1170, 1254, 0, 1173, 1177, 1312, 1294, 1205, + 272, 0, 0, 0, 0, 0, 0, 0, 1231, 1241, + 1275, 1279, 1225, 0, 0, 0, 0, 0, 2885, 0, + 1203, 0, 1250, 0, 0, 0, 1182, 1174, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1229, 0, 0, 0, 0, 1185, 0, 1204, 1276, 0, + 1168, 294, 1179, 395, 254, 0, 447, 1283, 1293, 1226, + 558, 1297, 1224, 1223, 1270, 1183, 1289, 1217, 359, 1181, + 326, 200, 224, 0, 1215, 405, 455, 467, 1288, 1200, + 1209, 252, 1207, 465, 419, 536, 232, 281, 452, 425, + 463, 435, 284, 1249, 1268, 464, 366, 521, 445, 533, + 559, 560, 260, 399, 545, 505, 553, 585, 225, 257, + 413, 498, 539, 487, 391, 517, 518, 325, 486, 292, + 203, 363, 565, 223, 473, 365, 241, 230, 523, 542, + 286, 450, 429, 430, 567, 580, 568, 570, 571, 212, + 500, 531, 238, 477, 0, 0, 587, 246, 497, 214, + 528, 496, 387, 322, 323, 213, 0, 451, 265, 290, + 0, 0, 255, 408, 525, 526, 253, 588, 227, 552, + 219, 1180, 551, 401, 520, 529, 388, 377, 218, 527, + 386, 376, 330, 349, 350, 277, 303, 442, 369, 443, + 302, 304, 397, 396, 398, 207, 540, 0, 208, 0, + 492, 541, 589, 233, 234, 236, 1195, 276, 280, 288, + 291, 299, 300, 309, 361, 412, 441, 437, 446, 1284, + 515, 534, 546, 557, 563, 564, 566, 572, 573, 574, + 575, 581, 579, 576, 577, 578, 569, 400, 307, 488, + 329, 367, 1273, 1315, 418, 466, 239, 538, 489, 1318, + 1319, 1320, 1321, 1190, 1194, 1188, 1255, 1189, 1244, 1245, + 1191, 1306, 1307, 1308, 590, 591, 592, 593, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 0, 1277, 1184, 0, 1192, 1193, 1286, 1295, + 1296, 608, 378, 479, 535, 331, 343, 346, 336, 355, + 0, 356, 332, 333, 338, 340, 341, 342, 347, 348, + 352, 358, 248, 210, 384, 392, 514, 308, 215, 216, + 217, 507, 508, 509, 510, 549, 550, 554, 456, 457, + 458, 459, 289, 544, 305, 462, 461, 327, 328, 373, + 444, 1248, 199, 220, 362, 1311, 448, 285, 586, 548, + 543, 206, 222, 1187, 259, 1198, 1206, 0, 1212, 1220, + 1221, 1233, 1235, 1236, 1237, 1238, 1256, 1257, 1259, 1267, + 1269, 1272, 1274, 1281, 1292, 1314, 201, 202, 209, 221, + 231, 235, 242, 258, 273, 275, 282, 295, 306, 314, + 315, 318, 324, 374, 380, 381, 382, 383, 402, 403, + 404, 407, 410, 411, 414, 416, 417, 420, 424, 428, + 431, 432, 434, 436, 438, 449, 454, 468, 469, 470, + 471, 472, 475, 476, 481, 482, 483, 484, 485, 493, + 494, 499, 522, 524, 537, 555, 561, 474, 297, 298, + 439, 440, 310, 311, 583, 584, 296, 532, 562, 530, + 582, 556, 433, 372, 1247, 1317, 1253, 375, 278, 301, + 316, 1262, 547, 495, 226, 460, 287, 250, 1280, 1282, + 211, 245, 229, 256, 271, 274, 320, 385, 393, 422, + 427, 293, 268, 243, 453, 240, 478, 502, 503, 504, + 506, 389, 263, 426, 1243, 1271, 370, 512, 513, 312, + 390, 0, 0, 0, 1300, 1285, 511, 0, 1228, 1303, + 1197, 1216, 1313, 1219, 1222, 1264, 1176, 1242, 409, 1213, + 1169, 1201, 1171, 1208, 1172, 1199, 1230, 267, 1196, 1287, + 1246, 1302, 360, 264, 1178, 1202, 423, 1218, 205, 1266, + 480, 251, 371, 368, 519, 279, 270, 266, 249, 313, + 379, 421, 501, 415, 1309, 364, 1252, 0, 490, 394, + 0, 0, 0, 1232, 1291, 1240, 1278, 1227, 1265, 1186, + 1251, 1304, 1214, 1261, 1305, 319, 247, 321, 204, 406, + 491, 283, 0, 0, 0, 0, 0, 665, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, + 244, 0, 0, 0, 345, 354, 353, 334, 335, 337, + 339, 344, 351, 357, 1210, 1258, 1299, 1211, 1260, 262, + 317, 269, 261, 516, 1310, 1290, 1175, 1239, 1298, 0, + 0, 228, 1301, 1234, 0, 1263, 0, 1316, 1170, 1254, + 0, 1173, 1177, 1312, 1294, 1205, 272, 0, 0, 0, + 0, 0, 0, 0, 1231, 1241, 1275, 1279, 1225, 0, + 0, 0, 0, 0, 2846, 0, 1203, 0, 1250, 0, + 0, 0, 1182, 1174, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1229, 0, 0, 0, + 0, 1185, 0, 1204, 1276, 0, 1168, 294, 1179, 395, + 254, 0, 447, 1283, 1293, 1226, 558, 1297, 1224, 1223, + 1270, 1183, 1289, 1217, 359, 1181, 326, 200, 224, 0, + 1215, 405, 455, 467, 1288, 1200, 1209, 252, 1207, 465, + 419, 536, 232, 281, 452, 425, 463, 435, 284, 1249, + 1268, 464, 366, 521, 445, 533, 559, 560, 260, 399, + 545, 505, 553, 585, 225, 257, 413, 498, 539, 487, + 391, 517, 518, 325, 486, 292, 203, 363, 565, 223, + 473, 365, 241, 230, 523, 542, 286, 450, 429, 430, + 567, 580, 568, 570, 571, 212, 500, 531, 238, 477, + 0, 0, 587, 246, 497, 214, 528, 496, 387, 322, + 323, 213, 0, 451, 265, 290, 0, 0, 255, 408, + 525, 526, 253, 588, 227, 552, 219, 1180, 551, 401, + 520, 529, 388, 377, 218, 527, 386, 376, 330, 349, + 350, 277, 303, 442, 369, 443, 302, 304, 397, 396, + 398, 207, 540, 0, 208, 0, 492, 541, 589, 233, + 234, 236, 1195, 276, 280, 288, 291, 299, 300, 309, + 361, 412, 441, 437, 446, 1284, 515, 534, 546, 557, + 563, 564, 566, 572, 573, 574, 575, 581, 579, 576, + 577, 578, 569, 400, 307, 488, 329, 367, 1273, 1315, + 418, 466, 239, 538, 489, 1318, 1319, 1320, 1321, 1190, + 1194, 1188, 1255, 1189, 1244, 1245, 1191, 1306, 1307, 1308, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 0, 1277, + 1184, 0, 1192, 1193, 1286, 1295, 1296, 608, 378, 479, + 535, 331, 343, 346, 336, 355, 0, 356, 332, 333, + 338, 340, 341, 342, 347, 348, 352, 358, 248, 210, + 384, 392, 514, 308, 215, 216, 217, 507, 508, 509, + 510, 549, 550, 554, 456, 457, 458, 459, 289, 544, + 305, 462, 461, 327, 328, 373, 444, 1248, 199, 220, + 362, 1311, 448, 285, 586, 548, 543, 206, 222, 1187, + 259, 1198, 1206, 0, 1212, 1220, 1221, 1233, 1235, 1236, + 1237, 1238, 1256, 1257, 1259, 1267, 1269, 1272, 1274, 1281, + 1292, 1314, 201, 202, 209, 221, 231, 235, 242, 258, + 273, 275, 282, 295, 306, 314, 315, 318, 324, 374, + 380, 381, 382, 383, 402, 403, 404, 407, 410, 411, + 414, 416, 417, 420, 424, 428, 431, 432, 434, 436, + 438, 449, 454, 468, 469, 470, 471, 472, 475, 476, + 481, 482, 483, 484, 485, 493, 494, 499, 522, 524, + 537, 555, 561, 474, 297, 298, 439, 440, 310, 311, + 583, 584, 296, 532, 562, 530, 582, 556, 433, 372, + 1247, 1317, 1253, 375, 278, 301, 316, 1262, 547, 495, + 226, 460, 287, 250, 1280, 1282, 211, 245, 229, 256, + 271, 274, 320, 385, 393, 422, 427, 293, 268, 243, + 453, 240, 478, 502, 503, 504, 506, 389, 263, 426, + 1243, 1271, 370, 512, 513, 312, 390, 0, 0, 0, + 1300, 1285, 511, 0, 1228, 1303, 1197, 1216, 1313, 1219, + 1222, 1264, 1176, 1242, 409, 1213, 1169, 1201, 1171, 1208, + 1172, 1199, 1230, 267, 1196, 1287, 1246, 1302, 360, 264, + 1178, 1202, 423, 1218, 205, 1266, 480, 251, 371, 368, + 519, 279, 270, 266, 249, 313, 379, 421, 501, 415, + 1309, 364, 1252, 0, 490, 394, 0, 0, 0, 1232, + 1291, 1240, 1278, 1227, 1265, 1186, 1251, 1304, 1214, 1261, + 1305, 319, 247, 321, 204, 406, 491, 283, 0, 0, + 0, 0, 0, 839, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 237, 0, 0, 244, 0, 0, 0, + 345, 354, 353, 334, 335, 337, 339, 344, 351, 357, + 1210, 1258, 1299, 1211, 1260, 262, 317, 269, 261, 516, + 1310, 1290, 1175, 1239, 1298, 0, 0, 228, 1301, 1234, + 0, 1263, 0, 1316, 1170, 1254, 0, 1173, 1177, 1312, + 1294, 1205, 272, 0, 0, 0, 0, 0, 0, 0, + 1231, 1241, 1275, 1279, 1225, 0, 0, 0, 0, 0, + 2151, 0, 1203, 0, 1250, 0, 0, 0, 1182, 1174, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1229, 0, 0, 0, 0, 1185, 0, 1204, + 1276, 0, 1168, 294, 1179, 395, 254, 0, 447, 1283, + 1293, 1226, 558, 1297, 1224, 1223, 1270, 1183, 1289, 1217, + 359, 1181, 326, 200, 224, 0, 1215, 405, 455, 467, + 1288, 1200, 1209, 252, 1207, 465, 419, 536, 232, 281, + 452, 425, 463, 435, 284, 1249, 1268, 464, 366, 521, + 445, 533, 559, 560, 260, 399, 545, 505, 553, 585, + 225, 257, 413, 498, 539, 487, 391, 517, 518, 325, + 486, 292, 203, 363, 565, 223, 473, 365, 241, 230, + 523, 542, 286, 450, 429, 430, 567, 580, 568, 570, + 571, 212, 500, 531, 238, 477, 0, 0, 587, 246, + 497, 214, 528, 496, 387, 322, 323, 213, 0, 451, + 265, 290, 0, 0, 255, 408, 525, 526, 253, 588, + 227, 552, 219, 1180, 551, 401, 520, 529, 388, 377, + 218, 527, 386, 376, 330, 349, 350, 277, 303, 442, + 369, 443, 302, 304, 397, 396, 398, 207, 540, 0, + 208, 0, 492, 541, 589, 233, 234, 236, 1195, 276, + 280, 288, 291, 299, 300, 309, 361, 412, 441, 437, + 446, 1284, 515, 534, 546, 557, 563, 564, 566, 572, + 573, 574, 575, 581, 579, 576, 577, 578, 569, 400, + 307, 488, 329, 367, 1273, 1315, 418, 466, 239, 538, + 489, 1318, 1319, 1320, 1321, 1190, 1194, 1188, 1255, 1189, + 1244, 1245, 1191, 1306, 1307, 1308, 590, 591, 592, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 0, 1277, 1184, 0, 1192, 1193, + 1286, 1295, 1296, 608, 378, 479, 535, 331, 343, 346, + 336, 355, 0, 356, 332, 333, 338, 340, 341, 342, + 347, 348, 352, 358, 248, 210, 384, 392, 514, 308, + 215, 216, 217, 507, 508, 509, 510, 549, 550, 554, + 456, 457, 458, 459, 289, 544, 305, 462, 461, 327, + 328, 373, 444, 1248, 199, 220, 362, 1311, 448, 285, + 586, 548, 543, 206, 222, 1187, 259, 1198, 1206, 0, + 1212, 1220, 1221, 1233, 1235, 1236, 1237, 1238, 1256, 1257, + 1259, 1267, 1269, 1272, 1274, 1281, 1292, 1314, 201, 202, + 209, 221, 231, 235, 242, 258, 273, 275, 282, 295, + 306, 314, 315, 318, 324, 374, 380, 381, 382, 383, + 402, 403, 404, 407, 410, 411, 414, 416, 417, 420, + 424, 428, 431, 432, 434, 436, 438, 449, 454, 468, + 469, 470, 471, 472, 475, 476, 481, 482, 483, 484, + 485, 493, 494, 499, 522, 524, 537, 555, 561, 474, + 297, 298, 439, 440, 310, 311, 583, 584, 296, 532, + 562, 530, 582, 556, 433, 372, 1247, 1317, 1253, 375, + 278, 301, 316, 1262, 547, 495, 226, 460, 287, 250, + 1280, 1282, 211, 245, 229, 256, 271, 274, 320, 385, + 393, 422, 427, 293, 268, 243, 453, 240, 478, 502, + 503, 504, 506, 389, 263, 426, 1243, 1271, 370, 512, + 513, 312, 390, 0, 0, 0, 1300, 1285, 511, 0, + 1228, 1303, 1197, 1216, 1313, 1219, 1222, 1264, 1176, 1242, + 409, 1213, 1169, 1201, 1171, 1208, 1172, 1199, 1230, 267, + 1196, 1287, 1246, 1302, 360, 264, 1178, 1202, 423, 1218, + 205, 1266, 480, 251, 371, 368, 519, 279, 270, 266, + 249, 313, 379, 421, 501, 415, 1309, 364, 1252, 0, + 490, 394, 0, 0, 0, 1232, 1291, 1240, 1278, 1227, + 1265, 1186, 1251, 1304, 1214, 1261, 1305, 319, 247, 321, + 204, 406, 491, 283, 0, 95, 0, 0, 0, 665, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, + 0, 0, 244, 0, 0, 0, 345, 354, 353, 334, + 335, 337, 339, 344, 351, 357, 1210, 1258, 1299, 1211, + 1260, 262, 317, 269, 261, 516, 1310, 1290, 1175, 1239, + 1298, 0, 0, 228, 1301, 1234, 0, 1263, 0, 1316, + 1170, 1254, 0, 1173, 1177, 1312, 1294, 1205, 272, 0, + 0, 0, 0, 0, 0, 0, 1231, 1241, 1275, 1279, + 1225, 0, 0, 0, 0, 0, 0, 0, 1203, 0, + 1250, 0, 0, 0, 1182, 1174, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1229, 0, + 0, 0, 0, 1185, 0, 1204, 1276, 0, 1168, 294, + 1179, 395, 254, 0, 447, 1283, 1293, 1226, 558, 1297, + 1224, 1223, 1270, 1183, 1289, 1217, 359, 1181, 326, 200, + 224, 0, 1215, 405, 455, 467, 1288, 1200, 1209, 252, + 1207, 465, 419, 536, 232, 281, 452, 425, 463, 435, + 284, 1249, 1268, 464, 366, 521, 445, 533, 559, 560, + 260, 399, 545, 505, 553, 585, 225, 257, 413, 498, + 539, 487, 391, 517, 518, 325, 486, 292, 203, 363, + 565, 223, 473, 365, 241, 230, 523, 542, 286, 450, + 429, 430, 567, 580, 568, 570, 571, 212, 500, 531, + 238, 477, 0, 0, 587, 246, 497, 214, 528, 496, + 387, 322, 323, 213, 0, 451, 265, 290, 0, 0, + 255, 408, 525, 526, 253, 588, 227, 552, 219, 1180, + 551, 401, 520, 529, 388, 377, 218, 527, 386, 376, + 330, 349, 350, 277, 303, 442, 369, 443, 302, 304, + 397, 396, 398, 207, 540, 0, 208, 0, 492, 541, + 589, 233, 234, 236, 1195, 276, 280, 288, 291, 299, + 300, 309, 361, 412, 441, 437, 446, 1284, 515, 534, + 546, 557, 563, 564, 566, 572, 573, 574, 575, 581, + 579, 576, 577, 578, 569, 400, 307, 488, 329, 367, + 1273, 1315, 418, 466, 239, 538, 489, 1318, 1319, 1320, + 1321, 1190, 1194, 1188, 1255, 1189, 1244, 1245, 1191, 1306, + 1307, 1308, 590, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 0, 1277, 1184, 0, 1192, 1193, 1286, 1295, 1296, 608, + 378, 479, 535, 331, 343, 346, 336, 355, 0, 356, + 332, 333, 338, 340, 341, 342, 347, 348, 352, 358, + 248, 210, 384, 392, 514, 308, 215, 216, 217, 507, + 508, 509, 510, 549, 550, 554, 456, 457, 458, 459, + 289, 544, 305, 462, 461, 327, 328, 373, 444, 1248, + 199, 220, 362, 1311, 448, 285, 586, 548, 543, 206, + 222, 1187, 259, 1198, 1206, 0, 1212, 1220, 1221, 1233, + 1235, 1236, 1237, 1238, 1256, 1257, 1259, 1267, 1269, 1272, + 1274, 1281, 1292, 1314, 201, 202, 209, 221, 231, 235, + 242, 258, 273, 275, 282, 295, 306, 314, 315, 318, + 324, 374, 380, 381, 382, 383, 402, 403, 404, 407, + 410, 411, 414, 416, 417, 420, 424, 428, 431, 432, + 434, 436, 438, 449, 454, 468, 469, 470, 471, 472, + 475, 476, 481, 482, 483, 484, 485, 493, 494, 499, + 522, 524, 537, 555, 561, 474, 297, 298, 439, 440, + 310, 311, 583, 584, 296, 532, 562, 530, 582, 556, + 433, 372, 1247, 1317, 1253, 375, 278, 301, 316, 1262, + 547, 495, 226, 460, 287, 250, 1280, 1282, 211, 245, + 229, 256, 271, 274, 320, 385, 393, 422, 427, 293, + 268, 243, 453, 240, 478, 502, 503, 504, 506, 389, + 263, 426, 1243, 1271, 370, 512, 513, 312, 390, 0, + 0, 0, 1300, 1285, 511, 0, 1228, 1303, 1197, 1216, + 1313, 1219, 1222, 1264, 1176, 1242, 409, 1213, 1169, 1201, + 1171, 1208, 1172, 1199, 1230, 267, 1196, 1287, 1246, 1302, + 360, 264, 1178, 1202, 423, 1218, 205, 1266, 480, 251, + 371, 368, 519, 279, 270, 266, 249, 313, 379, 421, + 501, 415, 1309, 364, 1252, 0, 490, 394, 0, 0, + 0, 1232, 1291, 1240, 1278, 1227, 1265, 1186, 1251, 1304, + 1214, 1261, 1305, 319, 247, 321, 204, 406, 491, 283, + 0, 0, 0, 0, 0, 665, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 237, 0, 0, 244, 0, + 0, 0, 345, 354, 353, 334, 335, 337, 339, 344, + 351, 357, 1210, 1258, 1299, 1211, 1260, 262, 317, 269, + 261, 516, 1310, 1290, 1175, 1239, 1298, 0, 0, 228, + 1301, 1234, 0, 1263, 0, 1316, 1170, 1254, 0, 1173, + 1177, 1312, 1294, 1205, 272, 0, 0, 0, 0, 0, + 0, 0, 1231, 1241, 1275, 1279, 1225, 0, 0, 0, + 0, 0, 0, 0, 1203, 0, 1250, 0, 0, 0, + 1182, 1174, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1229, 0, 0, 0, 0, 1185, + 0, 1204, 1276, 0, 1168, 294, 1179, 395, 254, 0, + 447, 1283, 1293, 1226, 558, 1297, 1224, 1223, 1270, 1183, + 1289, 1217, 359, 1181, 326, 200, 224, 0, 1215, 405, + 455, 467, 1288, 1200, 1209, 252, 1207, 465, 419, 536, + 232, 281, 452, 425, 463, 435, 284, 1249, 1268, 464, + 366, 521, 445, 533, 559, 560, 260, 399, 545, 505, + 553, 585, 225, 257, 413, 498, 539, 487, 391, 517, + 518, 325, 486, 292, 203, 363, 565, 223, 473, 365, + 241, 230, 523, 542, 286, 450, 429, 430, 567, 580, + 568, 570, 571, 212, 500, 531, 238, 477, 0, 0, + 587, 246, 497, 214, 528, 496, 387, 322, 323, 213, + 0, 451, 265, 290, 0, 0, 255, 408, 525, 526, + 253, 588, 227, 552, 219, 1180, 551, 401, 520, 529, + 388, 377, 218, 527, 386, 376, 330, 349, 350, 277, + 303, 442, 369, 443, 302, 304, 397, 396, 398, 207, + 540, 0, 208, 0, 492, 541, 589, 233, 234, 236, + 1195, 276, 280, 288, 291, 299, 300, 309, 361, 412, + 441, 437, 446, 1284, 515, 534, 546, 557, 563, 564, + 566, 572, 573, 574, 575, 581, 579, 576, 577, 578, + 569, 400, 307, 488, 329, 367, 1273, 1315, 418, 466, + 239, 538, 489, 1318, 1319, 1320, 1321, 1190, 1194, 1188, + 1255, 1189, 1244, 1245, 1191, 1306, 1307, 1308, 590, 591, + 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 0, 1277, 1184, 0, + 1192, 1193, 1286, 1295, 1296, 608, 378, 479, 535, 331, + 343, 346, 336, 355, 0, 356, 332, 333, 338, 340, + 341, 342, 347, 348, 352, 358, 248, 210, 384, 392, + 514, 308, 215, 216, 217, 507, 508, 509, 510, 549, + 550, 554, 456, 457, 458, 459, 289, 544, 305, 462, + 461, 327, 328, 373, 444, 1248, 199, 220, 362, 1311, + 448, 285, 586, 548, 543, 206, 222, 1187, 259, 1198, + 1206, 0, 1212, 1220, 1221, 1233, 1235, 1236, 1237, 1238, + 1256, 1257, 1259, 1267, 1269, 1272, 1274, 1281, 1292, 1314, + 201, 202, 209, 221, 231, 235, 242, 258, 273, 275, + 282, 295, 306, 314, 315, 318, 324, 374, 380, 381, + 382, 383, 402, 403, 404, 407, 410, 411, 414, 416, + 417, 420, 424, 428, 431, 432, 434, 436, 438, 449, + 454, 468, 469, 470, 471, 472, 475, 476, 481, 482, + 483, 484, 485, 493, 494, 499, 522, 524, 537, 555, + 561, 474, 297, 298, 439, 440, 310, 311, 583, 584, + 296, 532, 562, 530, 582, 556, 433, 372, 1247, 1317, + 1253, 375, 278, 301, 316, 1262, 547, 495, 226, 460, + 287, 250, 1280, 1282, 211, 245, 229, 256, 271, 274, + 320, 385, 393, 422, 427, 293, 268, 243, 453, 240, + 478, 502, 503, 504, 506, 389, 263, 426, 1243, 1271, + 370, 512, 513, 312, 390, 0, 0, 0, 1300, 1285, + 511, 0, 1228, 1303, 1197, 1216, 1313, 1219, 1222, 1264, + 1176, 1242, 409, 1213, 1169, 1201, 1171, 1208, 1172, 1199, + 1230, 267, 1196, 1287, 1246, 1302, 360, 264, 1178, 1202, + 423, 1218, 205, 1266, 480, 251, 371, 368, 519, 279, + 270, 266, 249, 313, 379, 421, 501, 415, 1309, 364, + 1252, 0, 490, 394, 0, 0, 0, 1232, 1291, 1240, + 1278, 1227, 1265, 1186, 1251, 1304, 1214, 1261, 1305, 319, + 247, 321, 204, 406, 491, 283, 0, 0, 0, 0, + 0, 839, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 237, 0, 0, 244, 0, 0, 0, 345, 354, + 353, 334, 335, 337, 339, 344, 351, 357, 1210, 1258, + 1299, 1211, 1260, 262, 317, 269, 261, 516, 1310, 1290, + 1175, 1239, 1298, 0, 0, 228, 1301, 1234, 0, 1263, + 0, 1316, 1170, 1254, 0, 1173, 1177, 1312, 1294, 1205, + 272, 0, 0, 0, 0, 0, 0, 0, 1231, 1241, + 1275, 1279, 1225, 0, 0, 0, 0, 0, 0, 0, + 1203, 0, 1250, 0, 0, 0, 1182, 1174, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1229, 0, 0, 0, 0, 1185, 0, 1204, 1276, 0, + 1168, 294, 1179, 395, 254, 0, 447, 1283, 1293, 1226, + 558, 1297, 1224, 1223, 1270, 1183, 1289, 1217, 359, 1181, + 326, 200, 224, 0, 1215, 405, 455, 467, 1288, 1200, + 1209, 252, 1207, 465, 419, 536, 232, 281, 452, 425, + 463, 435, 284, 1249, 1268, 464, 366, 521, 445, 533, + 559, 560, 260, 399, 545, 505, 553, 585, 225, 257, + 413, 498, 539, 487, 391, 517, 518, 325, 486, 292, + 203, 363, 565, 223, 473, 365, 241, 230, 523, 542, + 286, 450, 429, 430, 567, 580, 568, 570, 571, 212, + 500, 531, 238, 477, 0, 0, 587, 246, 497, 214, + 528, 496, 387, 322, 323, 213, 0, 451, 265, 290, + 0, 0, 255, 408, 525, 526, 253, 588, 227, 552, + 219, 1180, 551, 401, 520, 529, 388, 377, 218, 527, + 386, 376, 330, 349, 350, 277, 303, 442, 369, 443, + 302, 304, 397, 396, 398, 207, 540, 0, 208, 0, + 492, 541, 589, 233, 234, 236, 1195, 276, 280, 288, + 291, 299, 300, 309, 361, 412, 441, 437, 446, 1284, + 515, 534, 546, 557, 563, 564, 566, 572, 573, 574, + 575, 581, 579, 576, 577, 578, 569, 400, 307, 488, + 329, 367, 1273, 1315, 418, 466, 239, 538, 489, 1318, + 1319, 1320, 1321, 1190, 1194, 1188, 1255, 1189, 1244, 1245, + 1191, 1306, 1307, 1308, 590, 591, 592, 593, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 0, 1277, 1184, 0, 1192, 1193, 1286, 1295, + 1296, 608, 378, 479, 535, 331, 343, 346, 336, 355, + 0, 356, 332, 333, 338, 340, 341, 342, 347, 348, + 352, 358, 248, 210, 384, 392, 514, 308, 215, 216, + 217, 507, 508, 509, 510, 549, 550, 554, 456, 457, + 458, 459, 289, 544, 305, 462, 461, 327, 328, 373, + 444, 1248, 199, 220, 362, 1311, 448, 285, 586, 548, + 543, 206, 222, 1187, 259, 1198, 1206, 0, 1212, 1220, + 1221, 1233, 1235, 1236, 1237, 1238, 1256, 1257, 1259, 1267, + 1269, 1272, 1274, 1281, 1292, 1314, 201, 202, 209, 221, + 231, 235, 242, 258, 273, 275, 282, 295, 306, 314, + 315, 318, 324, 374, 380, 381, 382, 383, 402, 403, + 404, 407, 410, 411, 414, 416, 417, 420, 424, 428, + 431, 432, 434, 436, 438, 449, 454, 468, 469, 470, + 471, 472, 475, 476, 481, 482, 483, 484, 485, 493, + 494, 499, 522, 524, 537, 555, 561, 474, 297, 298, + 439, 440, 310, 311, 583, 584, 296, 532, 562, 530, + 582, 556, 433, 372, 1247, 1317, 1253, 375, 278, 301, + 316, 1262, 547, 495, 226, 460, 287, 250, 1280, 1282, + 211, 245, 229, 256, 271, 274, 320, 385, 393, 422, + 427, 293, 268, 243, 453, 240, 478, 502, 503, 504, + 506, 389, 263, 426, 1243, 1271, 370, 512, 513, 312, + 390, 0, 0, 0, 1300, 1285, 511, 0, 1228, 1303, + 1197, 1216, 1313, 1219, 1222, 1264, 1176, 1242, 409, 1213, + 1169, 1201, 1171, 1208, 1172, 1199, 1230, 267, 1196, 1287, + 1246, 1302, 360, 264, 1178, 1202, 423, 1218, 205, 1266, + 480, 251, 371, 368, 519, 279, 270, 266, 249, 313, + 379, 421, 501, 415, 1309, 364, 1252, 0, 490, 394, + 0, 0, 0, 1232, 1291, 1240, 1278, 1227, 1265, 1186, + 1251, 1304, 1214, 1261, 1305, 319, 247, 321, 204, 406, + 491, 283, 0, 0, 0, 0, 0, 197, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, + 244, 0, 0, 0, 345, 354, 353, 334, 335, 337, + 339, 344, 351, 357, 1210, 1258, 1299, 1211, 1260, 262, + 317, 269, 261, 516, 1310, 1290, 1175, 1239, 1298, 0, + 0, 228, 1301, 1234, 0, 1263, 0, 1316, 1170, 1254, + 0, 1173, 1177, 1312, 1294, 1205, 272, 0, 0, 0, + 0, 0, 0, 0, 1231, 1241, 1275, 1279, 1225, 0, + 0, 0, 0, 0, 0, 0, 1203, 0, 1250, 0, + 0, 0, 1182, 1174, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1229, 0, 0, 0, + 0, 1185, 0, 1204, 1276, 0, 1168, 294, 1179, 395, + 254, 0, 447, 1283, 1293, 1226, 558, 1297, 1224, 1223, + 1270, 1183, 1289, 1217, 359, 1181, 326, 200, 224, 0, + 1215, 405, 455, 467, 1288, 1200, 1209, 252, 1207, 465, + 419, 536, 232, 281, 452, 425, 463, 435, 284, 1249, + 1268, 464, 366, 521, 445, 533, 559, 560, 260, 399, + 545, 505, 553, 585, 225, 257, 413, 498, 539, 487, + 391, 517, 518, 325, 486, 292, 203, 363, 565, 223, + 473, 365, 241, 230, 523, 542, 286, 450, 429, 430, + 567, 580, 568, 570, 571, 212, 500, 531, 238, 477, + 0, 0, 587, 246, 497, 214, 528, 496, 387, 322, + 323, 213, 0, 451, 265, 290, 0, 0, 255, 408, + 525, 526, 253, 588, 227, 552, 219, 1180, 551, 401, + 520, 529, 388, 377, 218, 527, 386, 376, 330, 349, + 350, 277, 303, 442, 369, 443, 302, 304, 397, 396, + 398, 207, 540, 0, 208, 0, 492, 541, 589, 233, + 234, 236, 1195, 276, 280, 288, 291, 299, 300, 309, + 361, 412, 441, 437, 446, 1284, 515, 534, 546, 557, + 563, 564, 566, 572, 573, 574, 575, 581, 579, 576, + 577, 578, 569, 400, 307, 488, 329, 367, 1273, 1315, + 418, 466, 239, 538, 489, 1318, 1319, 1320, 1321, 1190, + 1194, 1188, 1255, 1189, 1244, 1245, 1191, 1306, 1307, 1308, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 0, 1277, + 1184, 0, 1192, 1193, 1286, 1295, 1296, 608, 378, 479, + 535, 331, 343, 346, 336, 355, 0, 356, 332, 333, + 338, 340, 341, 342, 347, 348, 352, 358, 248, 210, + 384, 392, 514, 308, 215, 216, 217, 507, 508, 509, + 510, 549, 550, 554, 456, 457, 458, 459, 289, 544, + 305, 462, 461, 327, 328, 373, 444, 1248, 199, 220, + 362, 1311, 448, 285, 586, 548, 543, 206, 222, 1187, + 259, 1198, 1206, 0, 1212, 1220, 1221, 1233, 1235, 1236, + 1237, 1238, 1256, 1257, 1259, 1267, 1269, 1272, 1274, 1281, + 1292, 1314, 201, 202, 209, 221, 231, 235, 242, 258, + 273, 275, 282, 295, 306, 314, 315, 318, 324, 374, + 380, 381, 382, 383, 402, 403, 404, 407, 410, 411, + 414, 416, 417, 420, 424, 428, 431, 432, 434, 436, + 438, 449, 454, 468, 469, 470, 471, 472, 475, 476, + 481, 482, 483, 484, 485, 493, 494, 499, 522, 524, + 537, 555, 561, 474, 297, 298, 439, 440, 310, 311, + 583, 584, 296, 532, 562, 530, 582, 556, 433, 372, + 1247, 1317, 1253, 375, 278, 301, 316, 1262, 547, 495, + 226, 460, 287, 250, 1280, 1282, 211, 245, 229, 256, + 271, 274, 320, 385, 393, 422, 427, 293, 268, 243, + 453, 240, 478, 502, 503, 504, 506, 389, 263, 426, + 1243, 1271, 370, 512, 513, 312, 390, 0, 0, 0, + 0, 0, 511, 0, 718, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 409, 0, 0, 0, 0, 705, + 0, 0, 0, 267, 710, 0, 0, 0, 360, 264, + 0, 0, 423, 0, 205, 0, 480, 251, 371, 368, + 519, 279, 270, 266, 249, 313, 379, 421, 501, 415, + 717, 364, 0, 0, 490, 394, 0, 0, 0, 0, + 0, 713, 714, 0, 0, 0, 0, 0, 0, 0, + 0, 319, 247, 321, 204, 406, 491, 283, 0, 95, + 0, 0, 855, 839, 805, 806, 843, 856, 857, 858, + 859, 844, 0, 237, 845, 846, 244, 847, 0, 804, + 745, 747, 746, 764, 765, 766, 767, 768, 769, 770, + 743, 852, 860, 861, 0, 262, 317, 269, 261, 516, + 0, 0, 2031, 2032, 2033, 0, 0, 228, 0, 0, + 0, 0, 0, 0, 0, 687, 702, 0, 716, 0, + 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 699, 700, + 0, 0, 0, 0, 799, 0, 701, 0, 0, 709, + 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, + 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, + 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, + 902, 903, 712, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 294, 0, 395, 254, 0, 447, 798, + 0, 0, 558, 0, 0, 796, 0, 0, 0, 0, + 359, 0, 326, 200, 224, 0, 0, 405, 455, 467, + 0, 0, 0, 849, 0, 465, 419, 536, 232, 281, + 452, 425, 463, 435, 284, 0, 0, 464, 366, 521, + 445, 533, 559, 560, 260, 399, 545, 505, 553, 585, + 225, 257, 413, 498, 539, 487, 391, 517, 518, 325, + 486, 292, 203, 363, 565, 223, 473, 365, 241, 230, + 523, 542, 286, 450, 429, 430, 567, 580, 568, 570, + 571, 212, 500, 531, 238, 477, 0, 0, 587, 246, + 497, 214, 528, 496, 387, 322, 323, 213, 0, 451, + 265, 290, 0, 0, 255, 408, 850, 851, 253, 588, + 751, 552, 219, 0, 551, 401, 520, 529, 388, 377, + 218, 527, 386, 376, 330, 759, 760, 277, 303, 442, + 369, 443, 302, 304, 397, 396, 398, 207, 540, 0, + 208, 0, 492, 541, 589, 233, 234, 236, 0, 276, + 280, 288, 291, 299, 300, 309, 361, 412, 441, 437, + 446, 0, 515, 534, 546, 557, 563, 564, 566, 572, + 573, 574, 575, 581, 579, 576, 577, 578, 569, 400, + 307, 488, 329, 367, 0, 0, 418, 466, 239, 538, + 489, 0, 0, 0, 0, 809, 797, 722, 813, 724, + 810, 811, 719, 720, 723, 812, 590, 591, 592, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 0, 800, 708, 707, 0, 715, + 0, 741, 742, 744, 748, 749, 750, 761, 762, 763, + 771, 773, 774, 772, 775, 776, 777, 780, 781, 782, + 783, 778, 779, 784, 725, 729, 726, 727, 728, 740, + 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 823, 824, 825, 826, 827, 828, 754, 758, 757, 755, + 756, 752, 753, 706, 199, 220, 362, 0, 448, 285, + 586, 548, 543, 206, 222, 814, 259, 815, 0, 0, + 819, 0, 0, 0, 821, 820, 0, 822, 788, 787, + 0, 0, 816, 817, 0, 818, 0, 0, 201, 202, + 209, 221, 231, 235, 242, 258, 273, 275, 282, 295, + 306, 314, 315, 318, 324, 374, 380, 381, 382, 383, + 402, 403, 404, 407, 410, 411, 414, 416, 417, 420, + 424, 428, 431, 432, 434, 436, 438, 449, 454, 468, + 469, 470, 471, 472, 475, 476, 481, 482, 483, 484, + 485, 493, 494, 499, 522, 524, 537, 555, 561, 474, + 829, 830, 831, 832, 833, 834, 835, 836, 296, 532, + 562, 530, 582, 556, 433, 372, 0, 0, 0, 375, + 278, 301, 316, 0, 547, 495, 226, 460, 287, 250, + 854, 0, 211, 245, 229, 256, 271, 274, 320, 385, + 393, 422, 427, 293, 268, 243, 453, 240, 478, 502, + 503, 504, 506, 389, 263, 426, 390, 0, 370, 512, + 513, 312, 511, 0, 718, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 409, 0, 0, 0, 0, 705, + 0, 0, 0, 267, 710, 0, 0, 0, 360, 264, + 0, 0, 423, 0, 205, 0, 480, 251, 371, 368, + 519, 279, 270, 266, 249, 313, 379, 421, 501, 415, + 717, 364, 0, 0, 490, 394, 0, 0, 0, 0, + 0, 713, 714, 0, 0, 0, 0, 0, 0, 2180, + 0, 319, 247, 321, 204, 406, 491, 283, 0, 95, + 0, 0, 855, 839, 805, 806, 843, 856, 857, 858, + 859, 844, 0, 237, 845, 846, 244, 847, 0, 804, + 745, 747, 746, 764, 765, 766, 767, 768, 769, 770, + 743, 852, 860, 861, 2181, 262, 317, 269, 261, 516, + 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, + 0, 0, 0, 0, 0, 687, 702, 0, 716, 0, + 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 699, 700, + 0, 0, 0, 0, 799, 0, 701, 0, 0, 709, + 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, + 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, + 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, + 902, 903, 712, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 294, 0, 395, 254, 0, 447, 798, + 0, 0, 558, 0, 0, 796, 0, 0, 0, 0, + 359, 0, 326, 200, 224, 0, 0, 405, 455, 467, + 0, 0, 0, 849, 0, 465, 419, 536, 232, 281, + 452, 425, 463, 435, 284, 0, 0, 464, 366, 521, + 445, 533, 559, 560, 260, 399, 545, 505, 553, 585, + 225, 257, 413, 498, 539, 487, 391, 517, 518, 325, + 486, 292, 203, 363, 565, 223, 473, 365, 241, 230, + 523, 542, 286, 450, 429, 430, 567, 580, 568, 570, + 571, 212, 500, 531, 238, 477, 0, 0, 587, 246, + 497, 214, 528, 496, 387, 322, 323, 213, 0, 451, + 265, 290, 0, 0, 255, 408, 850, 851, 253, 588, + 751, 552, 219, 0, 551, 401, 520, 529, 388, 377, + 218, 527, 386, 376, 330, 759, 760, 277, 303, 442, + 369, 443, 302, 304, 397, 396, 398, 207, 540, 0, + 208, 0, 492, 541, 589, 233, 234, 236, 0, 276, + 280, 288, 291, 299, 300, 309, 361, 412, 441, 437, + 446, 0, 515, 534, 546, 557, 563, 564, 566, 572, + 573, 574, 575, 581, 579, 576, 577, 578, 569, 400, + 307, 488, 329, 367, 0, 0, 418, 466, 239, 538, + 489, 0, 0, 0, 0, 809, 797, 722, 813, 724, + 810, 811, 719, 720, 723, 812, 590, 591, 592, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 0, 800, 708, 707, 0, 715, + 0, 741, 742, 744, 748, 749, 750, 761, 762, 763, + 771, 773, 774, 772, 775, 776, 777, 780, 781, 782, + 783, 778, 779, 784, 725, 729, 726, 727, 728, 740, + 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, + 823, 824, 825, 826, 827, 828, 754, 758, 757, 755, + 756, 752, 753, 706, 199, 220, 362, 0, 448, 285, + 586, 548, 543, 206, 222, 814, 259, 815, 0, 0, + 819, 0, 0, 0, 821, 820, 0, 822, 788, 787, + 0, 0, 816, 817, 0, 818, 0, 0, 201, 202, + 209, 221, 231, 235, 242, 258, 273, 275, 282, 295, + 306, 314, 315, 318, 324, 374, 380, 381, 382, 383, + 402, 403, 404, 407, 410, 411, 414, 416, 417, 420, + 424, 428, 431, 432, 434, 436, 438, 449, 454, 468, + 469, 470, 471, 472, 475, 476, 481, 482, 483, 484, + 485, 493, 494, 499, 522, 524, 537, 555, 561, 474, + 829, 830, 831, 832, 833, 834, 835, 836, 296, 532, + 562, 530, 582, 556, 433, 372, 0, 0, 0, 375, + 278, 301, 316, 0, 547, 495, 226, 460, 287, 250, + 854, 0, 211, 245, 229, 256, 271, 274, 320, 385, + 393, 422, 427, 293, 268, 243, 453, 240, 478, 502, + 503, 504, 506, 389, 263, 426, 0, 390, 370, 512, + 513, 312, 86, 511, 0, 718, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, + 705, 0, 0, 0, 267, 710, 0, 0, 0, 360, + 264, 0, 0, 423, 0, 205, 0, 480, 251, 371, + 368, 519, 279, 270, 266, 249, 313, 379, 421, 501, + 415, 717, 364, 0, 0, 490, 394, 0, 0, 0, + 0, 0, 713, 714, 0, 0, 0, 0, 0, 0, + 0, 0, 319, 247, 321, 204, 406, 491, 283, 0, + 95, 0, 0, 855, 839, 805, 806, 843, 856, 857, + 858, 859, 844, 0, 237, 845, 846, 244, 847, 0, + 804, 745, 747, 746, 764, 765, 766, 767, 768, 769, + 770, 743, 852, 860, 861, 0, 262, 317, 269, 261, + 516, 0, 0, 0, 0, 0, 0, 0, 228, 0, + 0, 0, 0, 0, 0, 0, 687, 702, 0, 716, + 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, + 700, 0, 0, 0, 0, 799, 0, 701, 0, 0, + 709, 862, 863, 864, 865, 866, 867, 868, 869, 870, + 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, + 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, + 901, 902, 903, 712, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 294, 0, 395, 254, 0, 447, + 798, 0, 0, 558, 0, 0, 796, 0, 0, 0, + 0, 359, 0, 326, 200, 224, 0, 0, 405, 455, + 467, 0, 0, 0, 849, 0, 465, 419, 536, 232, + 281, 452, 425, 463, 435, 284, 0, 0, 464, 366, + 521, 445, 533, 559, 560, 260, 399, 545, 505, 553, + 585, 225, 257, 413, 498, 539, 487, 391, 517, 518, + 325, 486, 292, 203, 363, 565, 223, 473, 365, 241, + 230, 523, 542, 286, 450, 429, 430, 567, 580, 568, + 570, 571, 212, 500, 531, 238, 477, 0, 0, 587, + 246, 497, 214, 528, 496, 387, 322, 323, 213, 0, + 451, 265, 290, 0, 0, 255, 408, 850, 851, 253, + 588, 751, 552, 219, 0, 551, 401, 520, 529, 388, + 377, 218, 527, 386, 376, 330, 759, 760, 277, 303, + 442, 369, 443, 302, 304, 397, 396, 398, 207, 540, + 0, 208, 0, 492, 541, 589, 233, 234, 236, 0, + 276, 280, 288, 291, 299, 300, 309, 361, 412, 441, + 437, 446, 0, 515, 534, 546, 557, 563, 564, 566, + 572, 573, 574, 575, 581, 579, 576, 577, 578, 569, + 400, 307, 488, 329, 367, 0, 0, 418, 466, 239, + 538, 489, 0, 0, 0, 0, 809, 797, 722, 813, + 724, 810, 811, 719, 720, 723, 812, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 0, 800, 708, 707, 0, + 715, 0, 741, 742, 744, 748, 749, 750, 761, 762, + 763, 771, 773, 774, 772, 775, 776, 777, 780, 781, + 782, 783, 778, 779, 784, 725, 729, 726, 727, 728, + 740, 730, 731, 732, 733, 734, 735, 736, 737, 738, + 739, 823, 824, 825, 826, 827, 828, 754, 758, 757, + 755, 756, 752, 753, 706, 199, 220, 362, 94, 448, + 285, 586, 548, 543, 206, 222, 814, 259, 815, 0, + 0, 819, 0, 0, 0, 821, 820, 0, 822, 788, + 787, 0, 0, 816, 817, 0, 818, 0, 0, 201, + 202, 209, 221, 231, 235, 242, 258, 273, 275, 282, + 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, + 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, + 420, 424, 428, 431, 432, 434, 436, 438, 449, 454, + 468, 469, 470, 471, 472, 475, 476, 481, 482, 483, + 484, 485, 493, 494, 499, 522, 524, 537, 555, 561, + 474, 829, 830, 831, 832, 833, 834, 835, 836, 296, + 532, 562, 530, 582, 556, 433, 372, 0, 0, 0, + 375, 278, 301, 316, 0, 547, 495, 226, 460, 287, + 250, 854, 0, 211, 245, 229, 256, 271, 274, 320, + 385, 393, 422, 427, 293, 268, 243, 453, 240, 478, + 502, 503, 504, 506, 389, 263, 426, 390, 0, 370, + 512, 513, 312, 511, 0, 718, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, + 705, 0, 0, 0, 267, 710, 0, 0, 0, 360, + 264, 0, 0, 423, 0, 205, 0, 480, 251, 371, + 368, 519, 279, 270, 266, 249, 313, 379, 421, 501, + 415, 717, 364, 0, 0, 490, 394, 0, 0, 0, + 0, 0, 713, 714, 0, 0, 0, 0, 0, 0, + 0, 0, 319, 247, 321, 204, 406, 491, 283, 0, + 95, 0, 0, 855, 839, 805, 806, 843, 856, 857, + 858, 859, 844, 0, 237, 845, 846, 244, 847, 0, + 804, 745, 747, 746, 764, 765, 766, 767, 768, 769, + 770, 743, 852, 860, 861, 0, 262, 317, 269, 261, + 516, 0, 0, 0, 0, 0, 0, 0, 228, 0, + 0, 0, 0, 0, 0, 0, 687, 702, 0, 716, + 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, + 700, 0, 0, 0, 0, 799, 0, 701, 0, 0, + 709, 862, 863, 864, 865, 866, 867, 868, 869, 870, + 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, + 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, + 901, 902, 903, 712, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 294, 0, 395, 254, 0, 447, + 798, 0, 0, 558, 0, 0, 796, 0, 0, 0, + 0, 359, 0, 326, 200, 224, 0, 0, 405, 455, + 467, 0, 0, 0, 849, 0, 465, 419, 536, 232, + 281, 452, 425, 463, 435, 284, 3544, 0, 464, 366, + 521, 445, 533, 559, 560, 260, 399, 545, 505, 553, + 585, 225, 257, 413, 498, 539, 487, 391, 517, 518, + 325, 486, 292, 203, 363, 565, 223, 473, 365, 241, + 230, 523, 542, 286, 450, 429, 430, 567, 580, 568, + 570, 571, 212, 500, 531, 238, 477, 0, 0, 587, + 246, 497, 214, 528, 496, 387, 322, 323, 213, 0, + 451, 265, 290, 0, 0, 255, 408, 850, 851, 253, + 588, 751, 552, 219, 0, 551, 401, 520, 529, 388, + 377, 218, 527, 386, 376, 330, 759, 760, 277, 303, + 442, 369, 443, 302, 304, 397, 396, 398, 207, 540, + 0, 208, 0, 492, 541, 589, 233, 234, 236, 0, + 276, 280, 288, 291, 299, 300, 309, 361, 412, 441, + 437, 446, 0, 515, 534, 546, 557, 563, 564, 566, + 572, 573, 574, 575, 581, 579, 576, 577, 578, 569, + 400, 307, 488, 329, 367, 0, 0, 418, 466, 239, + 538, 489, 0, 0, 0, 0, 809, 797, 722, 813, + 724, 810, 811, 719, 720, 723, 812, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 0, 800, 708, 707, 0, + 715, 0, 741, 742, 744, 748, 749, 750, 761, 762, + 763, 771, 773, 774, 772, 775, 776, 777, 780, 781, + 782, 783, 778, 779, 784, 725, 729, 726, 727, 728, + 740, 730, 731, 732, 733, 734, 735, 736, 737, 738, + 739, 823, 824, 825, 826, 827, 828, 754, 758, 757, + 755, 756, 752, 753, 706, 199, 220, 362, 0, 448, + 285, 586, 548, 543, 206, 222, 814, 259, 815, 0, + 0, 819, 0, 0, 0, 821, 820, 0, 822, 788, + 787, 0, 0, 816, 817, 0, 818, 0, 0, 201, + 202, 209, 221, 231, 235, 242, 258, 273, 275, 282, + 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, + 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, + 420, 424, 428, 431, 432, 434, 436, 438, 449, 454, + 468, 469, 470, 471, 472, 475, 476, 481, 482, 483, + 484, 485, 493, 494, 499, 522, 524, 537, 555, 561, + 474, 829, 830, 831, 832, 833, 834, 835, 836, 296, + 532, 562, 530, 582, 556, 433, 372, 0, 0, 0, + 375, 278, 301, 316, 0, 547, 495, 226, 460, 287, + 250, 854, 0, 211, 245, 229, 256, 271, 274, 320, + 385, 393, 422, 427, 293, 268, 243, 453, 240, 478, + 502, 503, 504, 506, 389, 263, 426, 390, 0, 370, + 512, 513, 312, 511, 0, 718, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, + 705, 0, 0, 0, 267, 710, 0, 0, 0, 360, + 264, 0, 0, 423, 0, 205, 0, 480, 251, 371, + 368, 519, 279, 270, 266, 249, 313, 379, 421, 501, + 415, 717, 364, 0, 0, 490, 394, 0, 0, 0, + 0, 0, 713, 714, 0, 0, 0, 0, 0, 0, + 0, 0, 319, 247, 321, 204, 406, 491, 283, 0, + 95, 0, 1562, 855, 839, 805, 806, 843, 856, 857, + 858, 859, 844, 0, 237, 845, 846, 244, 847, 0, + 804, 745, 747, 746, 764, 765, 766, 767, 768, 769, + 770, 743, 852, 860, 861, 0, 262, 317, 269, 261, + 516, 0, 0, 0, 0, 0, 0, 0, 228, 0, + 0, 0, 0, 0, 0, 0, 687, 702, 0, 716, + 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, + 700, 0, 0, 0, 0, 799, 0, 701, 0, 0, + 709, 862, 863, 864, 865, 866, 867, 868, 869, 870, + 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, + 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, + 901, 902, 903, 712, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 294, 0, 395, 254, 0, 447, + 798, 0, 0, 558, 0, 0, 796, 0, 0, 0, + 0, 359, 0, 326, 200, 224, 0, 0, 405, 455, + 467, 0, 0, 0, 849, 0, 465, 419, 536, 232, + 281, 452, 425, 463, 435, 284, 0, 0, 464, 366, + 521, 445, 533, 559, 560, 260, 399, 545, 505, 553, + 585, 225, 257, 413, 498, 539, 487, 391, 517, 518, + 325, 486, 292, 203, 363, 565, 223, 473, 365, 241, + 230, 523, 542, 286, 450, 429, 430, 567, 580, 568, + 570, 571, 212, 500, 531, 238, 477, 0, 0, 587, + 246, 497, 214, 528, 496, 387, 322, 323, 213, 0, + 451, 265, 290, 0, 0, 255, 408, 850, 851, 253, + 588, 751, 552, 219, 0, 551, 401, 520, 529, 388, + 377, 218, 527, 386, 376, 330, 759, 760, 277, 303, + 442, 369, 443, 302, 304, 397, 396, 398, 207, 540, + 0, 208, 0, 492, 541, 589, 233, 234, 236, 0, + 276, 280, 288, 291, 299, 300, 309, 361, 412, 441, + 437, 446, 0, 515, 534, 546, 557, 563, 564, 566, + 572, 573, 574, 575, 581, 579, 576, 577, 578, 569, + 400, 307, 488, 329, 367, 0, 0, 418, 466, 239, + 538, 489, 0, 0, 0, 0, 809, 797, 722, 813, + 724, 810, 811, 719, 720, 723, 812, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 0, 800, 708, 707, 0, + 715, 0, 741, 742, 744, 748, 749, 750, 761, 762, + 763, 771, 773, 774, 772, 775, 776, 777, 780, 781, + 782, 783, 778, 779, 784, 725, 729, 726, 727, 728, + 740, 730, 731, 732, 733, 734, 735, 736, 737, 738, + 739, 823, 824, 825, 826, 827, 828, 754, 758, 757, + 755, 756, 752, 753, 706, 199, 220, 362, 0, 448, + 285, 586, 548, 543, 206, 222, 814, 259, 815, 0, + 0, 819, 0, 0, 0, 821, 820, 0, 822, 788, + 787, 0, 0, 816, 817, 0, 818, 0, 0, 201, + 202, 209, 221, 231, 235, 242, 258, 273, 275, 282, + 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, + 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, + 420, 424, 428, 431, 432, 434, 436, 438, 449, 454, + 468, 469, 470, 471, 472, 475, 476, 481, 482, 483, + 484, 485, 493, 494, 499, 522, 524, 537, 555, 561, + 474, 829, 830, 831, 832, 833, 834, 835, 836, 296, + 532, 562, 530, 582, 556, 433, 372, 0, 0, 0, + 375, 278, 301, 316, 0, 547, 495, 226, 460, 287, + 250, 854, 0, 211, 245, 229, 256, 271, 274, 320, + 385, 393, 422, 427, 293, 268, 243, 453, 240, 478, + 502, 503, 504, 506, 389, 263, 426, 390, 0, 370, + 512, 513, 312, 511, 0, 718, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, + 705, 0, 0, 0, 267, 710, 0, 0, 0, 360, + 264, 0, 0, 423, 0, 205, 0, 480, 251, 371, + 368, 519, 279, 270, 266, 249, 313, 379, 421, 501, + 415, 717, 364, 0, 0, 490, 394, 0, 0, 0, + 0, 0, 713, 714, 0, 0, 0, 0, 0, 0, + 0, 0, 319, 247, 321, 204, 406, 491, 283, 0, + 95, 0, 0, 855, 839, 805, 806, 843, 856, 857, + 858, 859, 844, 0, 237, 845, 846, 244, 847, 0, + 804, 745, 747, 746, 764, 765, 766, 767, 768, 769, + 770, 743, 852, 860, 861, 0, 262, 317, 269, 261, + 516, 0, 0, 0, 0, 0, 0, 0, 228, 0, + 0, 0, 0, 0, 0, 0, 687, 702, 0, 716, + 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, + 700, 943, 0, 0, 0, 799, 0, 701, 0, 0, + 709, 862, 863, 864, 865, 866, 867, 868, 869, 870, + 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, + 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, + 901, 902, 903, 712, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 294, 0, 395, 254, 0, 447, + 798, 0, 0, 558, 0, 0, 796, 0, 0, 0, + 0, 359, 0, 326, 200, 224, 0, 0, 405, 455, + 467, 0, 0, 0, 849, 0, 465, 419, 536, 232, + 281, 452, 425, 463, 435, 284, 0, 0, 464, 366, + 521, 445, 533, 559, 560, 260, 399, 545, 505, 553, + 585, 225, 257, 413, 498, 539, 487, 391, 517, 518, + 325, 486, 292, 203, 363, 565, 223, 473, 365, 241, + 230, 523, 542, 286, 450, 429, 430, 567, 580, 568, + 570, 571, 212, 500, 531, 238, 477, 0, 0, 587, + 246, 497, 214, 528, 496, 387, 322, 323, 213, 0, + 451, 265, 290, 0, 0, 255, 408, 850, 851, 253, + 588, 751, 552, 219, 0, 551, 401, 520, 529, 388, + 377, 218, 527, 386, 376, 330, 759, 760, 277, 303, + 442, 369, 443, 302, 304, 397, 396, 398, 207, 540, + 0, 208, 0, 492, 541, 589, 233, 234, 236, 0, + 276, 280, 288, 291, 299, 300, 309, 361, 412, 441, + 437, 446, 0, 515, 534, 546, 557, 563, 564, 566, + 572, 573, 574, 575, 581, 579, 576, 577, 578, 569, + 400, 307, 488, 329, 367, 0, 0, 418, 466, 239, + 538, 489, 0, 0, 0, 0, 809, 797, 722, 813, + 724, 810, 811, 719, 720, 723, 812, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 0, 800, 708, 707, 0, + 715, 0, 741, 742, 744, 748, 749, 750, 761, 762, + 763, 771, 773, 774, 772, 775, 776, 777, 780, 781, + 782, 783, 778, 779, 784, 725, 729, 726, 727, 728, + 740, 730, 731, 732, 733, 734, 735, 736, 737, 738, + 739, 823, 824, 825, 826, 827, 828, 754, 758, 757, + 755, 756, 752, 753, 706, 199, 220, 362, 0, 448, + 285, 586, 548, 543, 206, 222, 814, 259, 815, 0, + 0, 819, 0, 0, 0, 821, 820, 0, 822, 788, + 787, 0, 0, 816, 817, 0, 818, 0, 0, 201, + 202, 209, 221, 231, 235, 242, 258, 273, 275, 282, + 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, + 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, + 420, 424, 428, 431, 432, 434, 436, 438, 449, 454, + 468, 469, 470, 471, 472, 475, 476, 481, 482, 483, + 484, 485, 493, 494, 499, 522, 524, 537, 555, 561, + 474, 829, 830, 831, 832, 833, 834, 835, 836, 296, + 532, 562, 530, 582, 556, 433, 372, 0, 0, 0, + 375, 278, 301, 316, 0, 547, 495, 226, 460, 287, + 250, 854, 0, 211, 245, 229, 256, 271, 274, 320, + 385, 393, 422, 427, 293, 268, 243, 453, 240, 478, + 502, 503, 504, 506, 389, 263, 426, 390, 0, 370, + 512, 513, 312, 511, 0, 718, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, + 705, 0, 0, 0, 267, 710, 0, 0, 0, 360, + 264, 0, 0, 423, 0, 205, 0, 480, 251, 371, + 368, 519, 279, 270, 266, 249, 313, 379, 421, 501, + 415, 717, 364, 0, 0, 490, 394, 0, 0, 0, + 0, 0, 713, 714, 0, 0, 0, 0, 0, 0, + 0, 0, 319, 247, 321, 204, 406, 491, 283, 0, + 95, 0, 0, 855, 839, 805, 806, 843, 856, 857, + 858, 859, 844, 0, 237, 845, 846, 244, 847, 0, + 804, 745, 747, 746, 764, 765, 766, 767, 768, 769, + 770, 743, 852, 860, 861, 0, 262, 317, 269, 261, + 516, 0, 0, 0, 0, 0, 0, 0, 228, 0, + 0, 0, 0, 0, 0, 0, 687, 702, 0, 716, + 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, + 700, 0, 0, 0, 0, 799, 0, 701, 0, 0, + 709, 862, 863, 864, 865, 866, 867, 868, 869, 870, + 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, + 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, + 901, 902, 903, 712, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 294, 0, 395, 254, 0, 447, + 798, 0, 0, 558, 0, 0, 796, 0, 0, 0, + 0, 359, 0, 326, 200, 224, 0, 0, 405, 455, + 467, 0, 0, 0, 849, 0, 465, 419, 536, 232, + 281, 452, 425, 463, 435, 284, 0, 0, 464, 366, + 521, 445, 533, 559, 560, 260, 399, 545, 505, 553, + 585, 225, 257, 413, 498, 539, 487, 391, 517, 518, + 325, 486, 292, 203, 363, 565, 223, 473, 365, 241, + 230, 523, 542, 286, 450, 429, 430, 567, 580, 568, + 570, 571, 212, 500, 531, 238, 477, 0, 0, 587, + 246, 497, 214, 528, 496, 387, 322, 323, 213, 0, + 451, 265, 290, 0, 0, 255, 408, 850, 851, 253, + 588, 751, 552, 219, 0, 551, 401, 520, 529, 388, + 377, 218, 527, 386, 376, 330, 759, 760, 277, 303, + 442, 369, 443, 302, 304, 397, 396, 398, 207, 540, + 0, 208, 0, 492, 541, 589, 233, 234, 236, 0, + 276, 280, 288, 291, 299, 300, 309, 361, 412, 441, + 437, 446, 0, 515, 534, 546, 557, 563, 564, 566, + 572, 573, 574, 575, 581, 579, 576, 577, 578, 569, + 400, 307, 488, 329, 367, 0, 0, 418, 466, 239, + 538, 489, 0, 0, 0, 0, 809, 797, 722, 813, + 724, 810, 811, 719, 720, 723, 812, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 0, 800, 708, 707, 0, + 715, 0, 741, 742, 744, 748, 749, 750, 761, 762, + 763, 771, 773, 774, 772, 775, 776, 777, 780, 781, + 782, 783, 778, 779, 784, 725, 729, 726, 727, 728, + 740, 730, 731, 732, 733, 734, 735, 736, 737, 738, + 739, 823, 824, 825, 826, 827, 828, 754, 758, 757, + 755, 756, 752, 753, 706, 199, 220, 362, 0, 448, + 285, 586, 548, 543, 206, 222, 814, 259, 815, 0, + 0, 819, 0, 0, 0, 821, 820, 0, 822, 788, + 787, 0, 0, 816, 817, 0, 818, 0, 0, 201, + 202, 209, 221, 231, 235, 242, 258, 273, 275, 282, + 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, + 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, + 420, 424, 428, 431, 432, 434, 436, 438, 449, 454, + 468, 469, 470, 471, 472, 475, 476, 481, 482, 483, + 484, 485, 493, 494, 499, 522, 524, 537, 555, 561, + 474, 829, 830, 831, 832, 833, 834, 835, 836, 296, + 532, 562, 530, 582, 556, 433, 372, 0, 0, 0, + 375, 278, 301, 316, 0, 547, 495, 226, 460, 287, + 250, 854, 0, 211, 245, 229, 256, 271, 274, 320, + 385, 393, 422, 427, 293, 268, 243, 453, 240, 478, + 502, 503, 504, 506, 389, 263, 426, 390, 0, 370, + 512, 513, 312, 511, 0, 718, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, + 705, 0, 0, 0, 267, 710, 0, 0, 0, 360, + 264, 0, 0, 423, 0, 205, 0, 480, 251, 371, + 368, 519, 279, 270, 266, 249, 313, 379, 421, 501, + 415, 717, 364, 0, 0, 490, 394, 0, 0, 0, + 0, 0, 713, 714, 0, 0, 0, 0, 0, 0, + 0, 0, 319, 247, 321, 204, 406, 491, 283, 0, + 95, 0, 0, 855, 839, 805, 806, 843, 856, 857, + 858, 859, 844, 0, 237, 845, 846, 244, 847, 0, + 804, 745, 747, 746, 764, 765, 766, 767, 768, 769, + 770, 743, 852, 860, 861, 0, 262, 317, 269, 261, + 516, 0, 0, 0, 0, 0, 0, 0, 228, 0, + 0, 0, 0, 0, 0, 0, 0, 702, 0, 716, + 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, + 700, 0, 0, 0, 0, 799, 0, 701, 0, 0, + 709, 862, 863, 864, 865, 866, 867, 868, 869, 870, + 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, + 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, + 901, 902, 903, 712, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 294, 0, 395, 254, 0, 447, + 798, 0, 0, 558, 0, 0, 796, 0, 0, 0, + 0, 359, 0, 326, 200, 224, 0, 0, 405, 455, + 467, 0, 0, 0, 849, 0, 465, 419, 536, 232, + 281, 452, 425, 463, 435, 284, 0, 0, 464, 366, + 521, 445, 533, 559, 560, 260, 399, 545, 505, 553, + 585, 225, 257, 413, 498, 539, 487, 391, 517, 518, + 325, 486, 292, 203, 363, 565, 223, 473, 365, 241, + 230, 523, 542, 286, 450, 429, 430, 567, 580, 568, + 570, 571, 212, 500, 531, 238, 477, 0, 0, 587, + 246, 497, 214, 528, 496, 387, 322, 323, 213, 0, + 451, 265, 290, 0, 0, 255, 408, 850, 851, 253, + 588, 751, 552, 219, 0, 551, 401, 520, 529, 388, + 377, 218, 527, 386, 376, 330, 759, 760, 277, 303, + 442, 369, 443, 302, 304, 397, 396, 398, 207, 540, + 0, 208, 0, 492, 541, 589, 233, 234, 236, 0, + 276, 280, 288, 291, 299, 300, 309, 361, 412, 441, + 437, 446, 0, 515, 534, 546, 557, 563, 564, 566, + 572, 573, 574, 575, 581, 579, 576, 577, 578, 569, + 400, 307, 488, 329, 367, 0, 0, 418, 466, 239, + 538, 489, 0, 0, 0, 0, 809, 797, 722, 813, + 724, 810, 811, 719, 720, 723, 812, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 0, 800, 708, 707, 0, + 715, 0, 741, 742, 744, 748, 749, 750, 761, 762, + 763, 771, 773, 774, 772, 775, 776, 777, 780, 781, + 782, 783, 778, 779, 784, 725, 729, 726, 727, 728, + 740, 730, 731, 732, 733, 734, 735, 736, 737, 738, + 739, 823, 824, 825, 826, 827, 828, 754, 758, 757, + 755, 756, 752, 753, 706, 199, 220, 362, 0, 448, + 285, 586, 548, 543, 206, 222, 814, 259, 815, 0, + 0, 819, 0, 0, 0, 821, 820, 0, 822, 788, + 787, 0, 0, 816, 817, 0, 818, 0, 0, 201, + 202, 209, 221, 231, 235, 242, 258, 273, 275, 282, + 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, + 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, + 420, 424, 428, 431, 432, 434, 436, 438, 449, 454, + 468, 469, 470, 471, 472, 475, 476, 481, 482, 483, + 484, 485, 493, 494, 499, 522, 524, 537, 555, 561, + 474, 829, 830, 831, 832, 833, 834, 835, 836, 296, + 532, 562, 530, 582, 556, 433, 372, 0, 0, 0, + 375, 278, 301, 316, 0, 547, 495, 226, 460, 287, + 250, 854, 0, 211, 245, 229, 256, 271, 274, 320, + 385, 393, 422, 427, 293, 268, 243, 453, 240, 478, + 502, 503, 504, 506, 389, 263, 426, 390, 0, 370, + 512, 513, 312, 511, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, + 0, 0, 0, 0, 267, 0, 0, 0, 0, 360, + 264, 0, 0, 423, 0, 205, 0, 480, 251, 371, + 368, 519, 279, 270, 266, 249, 313, 379, 421, 501, + 415, 0, 364, 0, 0, 490, 394, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 319, 247, 321, 204, 406, 491, 283, 0, + 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 237, 0, 0, 244, 0, 0, + 0, 345, 354, 353, 334, 335, 337, 339, 344, 351, + 357, 0, 0, 0, 0, 0, 262, 317, 269, 261, + 516, 0, 0, 0, 0, 0, 0, 0, 228, 0, + 0, 0, 0, 1378, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1379, 1380, 1381, 1382, + 1383, 1384, 1385, 1387, 1386, 1388, 1389, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 294, 0, 395, 254, 0, 447, + 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, + 0, 359, 0, 326, 200, 224, 0, 0, 405, 455, + 467, 0, 0, 0, 252, 0, 465, 419, 536, 232, + 281, 452, 425, 463, 435, 284, 0, 0, 464, 366, + 521, 445, 533, 559, 560, 260, 399, 545, 505, 553, + 585, 225, 257, 413, 498, 539, 487, 391, 517, 518, + 325, 486, 292, 203, 363, 565, 223, 473, 365, 241, + 230, 523, 542, 286, 450, 429, 430, 567, 580, 568, + 570, 571, 212, 500, 531, 238, 477, 0, 0, 587, + 246, 497, 214, 528, 496, 387, 322, 323, 213, 0, + 451, 265, 290, 0, 0, 255, 408, 525, 526, 253, + 588, 227, 552, 219, 0, 551, 401, 520, 529, 388, + 377, 218, 527, 386, 376, 330, 349, 350, 277, 303, + 442, 369, 443, 302, 304, 397, 396, 398, 207, 540, + 0, 208, 0, 492, 541, 589, 233, 234, 236, 0, + 276, 280, 288, 291, 299, 300, 309, 361, 412, 441, + 437, 446, 0, 515, 534, 546, 557, 563, 564, 566, + 572, 573, 574, 575, 581, 579, 576, 577, 578, 569, + 400, 307, 488, 329, 367, 0, 0, 418, 466, 239, + 538, 489, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 608, 378, 479, 535, 331, 343, + 346, 336, 355, 0, 356, 332, 333, 338, 340, 341, + 342, 347, 348, 352, 358, 248, 210, 384, 392, 514, + 308, 215, 216, 217, 507, 508, 509, 510, 549, 550, + 554, 456, 457, 458, 459, 289, 544, 305, 462, 461, + 327, 328, 373, 444, 0, 199, 220, 362, 0, 448, + 285, 586, 548, 543, 206, 222, 0, 259, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, + 202, 209, 221, 231, 235, 242, 258, 273, 275, 282, + 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, + 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, + 420, 424, 428, 431, 432, 434, 436, 438, 449, 454, + 468, 469, 470, 471, 472, 475, 476, 481, 482, 483, + 484, 485, 493, 494, 499, 522, 524, 537, 555, 561, + 474, 297, 298, 439, 440, 310, 311, 583, 584, 296, + 532, 562, 530, 582, 556, 433, 372, 0, 0, 0, + 375, 278, 301, 316, 0, 547, 495, 226, 460, 287, + 250, 0, 0, 211, 245, 229, 256, 271, 274, 320, + 385, 393, 422, 427, 293, 268, 243, 453, 240, 478, + 502, 503, 504, 506, 389, 263, 426, 390, 0, 370, + 512, 513, 312, 511, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, + 0, 0, 0, 0, 267, 0, 0, 0, 0, 360, + 264, 0, 0, 423, 0, 205, 0, 480, 251, 371, + 368, 519, 279, 270, 266, 249, 313, 379, 421, 501, + 415, 0, 364, 0, 0, 490, 394, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 319, 247, 321, 204, 406, 491, 283, 0, + 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 237, 0, 0, 244, 0, 0, + 0, 345, 354, 353, 334, 335, 337, 339, 344, 351, + 357, 0, 0, 0, 0, 0, 262, 317, 269, 261, + 516, 0, 0, 0, 0, 0, 0, 0, 228, 0, + 1016, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, +>>>>>>> e439161508 (fix: complete time period feature) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +<<<<<<< HEAD 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, @@ -3662,13 +5864,78 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 230, 0, 1021, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +======= + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 294, 0, 395, 254, 0, 447, + 0, 0, 1015, 558, 0, 0, 0, 0, 0, 1012, + 1013, 359, 972, 326, 200, 224, 1006, 1010, 405, 455, + 467, 0, 0, 0, 252, 0, 465, 419, 536, 232, + 281, 452, 425, 463, 435, 284, 0, 0, 464, 366, + 521, 445, 533, 559, 560, 260, 399, 545, 505, 553, + 585, 225, 257, 413, 498, 539, 487, 391, 517, 518, + 325, 486, 292, 203, 363, 565, 223, 473, 365, 241, + 230, 523, 542, 286, 450, 429, 430, 567, 580, 568, + 570, 571, 212, 500, 531, 238, 477, 0, 0, 587, + 246, 497, 214, 528, 496, 387, 322, 323, 213, 0, + 451, 265, 290, 0, 0, 255, 408, 525, 526, 253, + 588, 227, 552, 219, 0, 551, 401, 520, 529, 388, + 377, 218, 527, 386, 376, 330, 349, 350, 277, 303, + 442, 369, 443, 302, 304, 397, 396, 398, 207, 540, + 0, 208, 0, 492, 541, 589, 233, 234, 236, 0, + 276, 280, 288, 291, 299, 300, 309, 361, 412, 441, + 437, 446, 0, 515, 534, 546, 557, 563, 564, 566, + 572, 573, 574, 575, 581, 579, 576, 577, 578, 569, + 400, 307, 488, 329, 367, 0, 0, 418, 466, 239, + 538, 489, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 608, 378, 479, 535, 331, 343, + 346, 336, 355, 0, 356, 332, 333, 338, 340, 341, + 342, 347, 348, 352, 358, 248, 210, 384, 392, 514, + 308, 215, 216, 217, 507, 508, 509, 510, 549, 550, + 554, 456, 457, 458, 459, 289, 544, 305, 462, 461, + 327, 328, 373, 444, 0, 199, 220, 362, 0, 448, + 285, 586, 548, 543, 206, 222, 0, 259, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, + 202, 209, 221, 231, 235, 242, 258, 273, 275, 282, + 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, + 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, + 420, 424, 428, 431, 432, 434, 436, 438, 449, 454, + 468, 469, 470, 471, 472, 475, 476, 481, 482, 483, + 484, 485, 493, 494, 499, 522, 524, 537, 555, 561, + 474, 297, 298, 439, 440, 310, 311, 583, 584, 296, + 532, 562, 530, 582, 556, 433, 372, 0, 0, 0, + 375, 278, 301, 316, 0, 547, 495, 226, 460, 287, + 250, 0, 0, 211, 245, 229, 256, 271, 274, 320, + 385, 393, 422, 427, 293, 268, 243, 453, 240, 478, + 502, 503, 504, 506, 389, 263, 426, 390, 0, 370, + 512, 513, 312, 511, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, + 0, 0, 0, 0, 267, 0, 0, 0, 0, 360, + 264, 0, 0, 423, 0, 205, 0, 480, 251, 371, + 368, 519, 279, 270, 266, 249, 313, 379, 421, 501, + 415, 0, 364, 0, 0, 490, 394, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 319, 247, 321, 204, 406, 491, 283, 0, + 0, 0, 0, 1525, 839, 0, 0, 1522, 0, 0, + 0, 0, 1520, 0, 237, 1521, 1519, 244, 1524, 0, + 804, 345, 354, 353, 334, 335, 337, 339, 344, 351, + 357, 0, 0, 0, 0, 0, 262, 317, 269, 261, + 516, 0, 0, 0, 0, 0, 0, 0, 228, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, +>>>>>>> e439161508 (fix: complete time period feature) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +<<<<<<< HEAD 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, 1020, 561, 0, 0, 0, 0, 0, 1017, 1018, 361, 977, 328, 202, 226, 1011, 1015, 407, 457, 469, @@ -3700,6 +5967,202 @@ var yyAct = [...]int{ 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, +======= + 0, 0, 0, 0, 294, 0, 395, 254, 0, 447, + 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, + 0, 359, 0, 326, 200, 224, 0, 0, 405, 455, + 467, 0, 0, 0, 252, 0, 465, 419, 536, 232, + 281, 452, 425, 463, 435, 284, 0, 0, 464, 366, + 521, 445, 533, 559, 560, 260, 399, 545, 505, 553, + 585, 225, 257, 413, 498, 539, 487, 391, 517, 518, + 325, 486, 292, 203, 363, 565, 223, 473, 365, 241, + 230, 523, 542, 286, 450, 429, 430, 567, 580, 568, + 570, 571, 212, 500, 531, 238, 477, 0, 0, 587, + 246, 497, 214, 528, 496, 387, 322, 323, 213, 0, + 451, 265, 290, 0, 0, 255, 408, 525, 526, 253, + 588, 227, 552, 219, 0, 551, 401, 520, 529, 388, + 377, 218, 527, 386, 376, 330, 349, 350, 277, 303, + 442, 369, 443, 302, 304, 397, 396, 398, 207, 540, + 0, 208, 0, 492, 541, 589, 233, 234, 236, 0, + 276, 280, 288, 291, 299, 300, 309, 361, 412, 441, + 437, 446, 0, 515, 534, 546, 557, 563, 564, 566, + 572, 573, 574, 575, 581, 579, 576, 577, 578, 569, + 400, 307, 488, 329, 367, 0, 0, 418, 466, 239, + 538, 489, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 590, 591, 592, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 608, 378, 479, 535, 331, 343, + 346, 336, 355, 0, 356, 332, 333, 338, 340, 341, + 342, 347, 348, 352, 358, 248, 210, 384, 392, 514, + 308, 215, 216, 217, 507, 508, 509, 510, 549, 550, + 554, 456, 457, 458, 459, 289, 544, 305, 462, 461, + 327, 328, 373, 444, 0, 199, 220, 362, 0, 448, + 285, 586, 548, 543, 206, 222, 0, 259, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, + 202, 209, 221, 231, 235, 242, 258, 273, 275, 282, + 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, + 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, + 420, 424, 428, 431, 432, 434, 436, 438, 449, 454, + 468, 469, 470, 471, 472, 475, 476, 481, 482, 483, + 484, 485, 493, 494, 499, 522, 524, 537, 555, 561, + 474, 297, 298, 439, 440, 310, 311, 583, 584, 296, + 532, 562, 530, 582, 556, 433, 372, 0, 0, 0, + 375, 278, 301, 316, 0, 547, 495, 226, 460, 287, + 250, 0, 0, 211, 245, 229, 256, 271, 274, 320, + 385, 393, 422, 427, 293, 268, 243, 453, 240, 478, + 502, 503, 504, 506, 389, 263, 426, 0, 390, 370, + 512, 513, 312, 86, 511, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, + 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, + 360, 264, 0, 0, 423, 0, 205, 0, 480, 251, + 371, 368, 519, 279, 270, 266, 249, 313, 379, 421, + 501, 415, 0, 364, 0, 0, 490, 394, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 319, 247, 321, 204, 406, 491, 283, + 0, 95, 0, 0, 0, 197, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 237, 0, 0, 244, 0, + 0, 0, 345, 354, 353, 334, 335, 337, 339, 344, + 351, 357, 0, 0, 0, 0, 0, 262, 317, 269, + 261, 516, 0, 0, 0, 0, 0, 0, 0, 228, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 294, 0, 395, 254, 0, + 447, 0, 0, 0, 558, 0, 0, 0, 0, 0, + 0, 0, 359, 0, 326, 200, 224, 0, 0, 405, + 455, 467, 0, 0, 0, 252, 0, 465, 419, 536, + 232, 281, 452, 425, 463, 435, 284, 0, 0, 464, + 366, 521, 445, 533, 559, 560, 260, 399, 545, 505, + 553, 585, 225, 257, 413, 498, 539, 487, 391, 517, + 518, 325, 486, 292, 203, 363, 565, 223, 473, 365, + 241, 230, 523, 542, 286, 450, 429, 430, 567, 580, + 568, 570, 571, 212, 500, 531, 238, 477, 0, 0, + 587, 246, 497, 214, 528, 496, 387, 322, 323, 213, + 0, 451, 265, 290, 0, 0, 255, 408, 525, 526, + 253, 588, 227, 552, 219, 0, 551, 401, 520, 529, + 388, 377, 218, 527, 386, 376, 330, 349, 350, 277, + 303, 442, 369, 443, 302, 304, 397, 396, 398, 207, + 540, 0, 208, 0, 492, 541, 589, 233, 234, 236, + 0, 276, 280, 288, 291, 299, 300, 309, 361, 412, + 441, 437, 446, 0, 515, 534, 546, 557, 563, 564, + 566, 572, 573, 574, 575, 581, 579, 576, 577, 578, + 569, 400, 307, 488, 329, 367, 0, 0, 418, 466, + 239, 538, 489, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 590, 591, + 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 608, 378, 479, 535, 331, + 343, 346, 336, 355, 0, 356, 332, 333, 338, 340, + 341, 342, 347, 348, 352, 358, 248, 210, 384, 392, + 514, 308, 215, 216, 217, 507, 508, 509, 510, 549, + 550, 554, 456, 457, 458, 459, 289, 544, 305, 462, + 461, 327, 328, 373, 444, 0, 199, 220, 362, 94, + 448, 285, 586, 548, 543, 206, 222, 0, 259, 0, + 0, 0, 0, 0, 0, 2167, 0, 0, 2166, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 201, 202, 209, 221, 231, 235, 242, 258, 273, 275, + 282, 295, 306, 314, 315, 318, 324, 374, 380, 381, + 382, 383, 402, 403, 404, 407, 410, 411, 414, 416, + 417, 420, 424, 428, 431, 432, 434, 436, 438, 449, + 454, 468, 469, 470, 471, 472, 475, 476, 481, 482, + 483, 484, 485, 493, 494, 499, 522, 524, 537, 555, + 561, 474, 297, 298, 439, 440, 310, 311, 583, 584, + 296, 532, 562, 530, 582, 556, 433, 372, 0, 0, + 0, 375, 278, 301, 316, 0, 547, 495, 226, 460, + 287, 250, 0, 0, 211, 245, 229, 256, 271, 274, + 320, 385, 393, 422, 427, 293, 268, 243, 453, 240, + 478, 502, 503, 504, 506, 389, 263, 426, 1581, 0, + 370, 512, 513, 312, 511, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, + 1583, 0, 0, 0, 0, 267, 0, 0, 0, 0, + 360, 264, 0, 0, 423, 0, 205, 0, 480, 251, + 371, 368, 519, 279, 270, 266, 249, 313, 379, 421, + 501, 415, 0, 364, 0, 0, 490, 394, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 319, 247, 321, 204, 406, 491, 283, + 0, 0, 0, 0, 1585, 665, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 237, 0, 0, 244, 0, + 0, 0, 345, 354, 353, 334, 335, 337, 339, 344, + 351, 357, 0, 0, 0, 0, 0, 262, 317, 269, + 261, 516, 0, 0, 0, 0, 0, 0, 0, 228, + 0, 0, 0, 1359, 0, 1360, 1361, 0, 0, 0, + 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 294, 0, 395, 254, 0, + 447, 0, 0, 0, 558, 0, 0, 0, 0, 0, + 0, 0, 359, 0, 326, 200, 224, 0, 0, 405, + 455, 467, 0, 0, 0, 252, 0, 465, 419, 536, + 232, 281, 452, 425, 463, 435, 284, 0, 0, 464, + 366, 521, 445, 533, 559, 560, 260, 399, 545, 505, + 553, 585, 225, 257, 413, 498, 539, 487, 391, 517, + 518, 325, 486, 292, 203, 363, 565, 223, 473, 365, + 241, 230, 523, 542, 286, 450, 429, 430, 567, 580, + 568, 570, 571, 212, 500, 531, 238, 477, 0, 0, + 587, 246, 497, 214, 528, 496, 387, 322, 323, 213, + 0, 451, 265, 290, 0, 0, 255, 408, 525, 526, + 253, 588, 227, 552, 219, 0, 551, 401, 520, 529, + 388, 377, 218, 527, 386, 376, 330, 349, 350, 277, + 303, 442, 369, 443, 302, 304, 397, 396, 398, 207, + 540, 0, 208, 0, 492, 541, 589, 233, 234, 236, + 0, 276, 280, 288, 291, 299, 300, 309, 361, 412, + 441, 437, 446, 0, 515, 534, 546, 557, 563, 564, + 566, 572, 573, 574, 575, 581, 579, 576, 577, 578, + 569, 400, 307, 488, 329, 367, 0, 0, 418, 466, + 239, 538, 489, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 590, 591, + 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 608, 378, 479, 535, 331, + 343, 346, 336, 355, 0, 356, 332, 333, 338, 340, + 341, 342, 347, 348, 352, 358, 248, 210, 384, 392, + 514, 308, 215, 216, 217, 507, 508, 509, 510, 549, + 550, 554, 456, 457, 458, 459, 289, 544, 305, 462, + 461, 327, 328, 373, 444, 0, 199, 220, 362, 0, + 448, 285, 586, 548, 543, 206, 222, 0, 259, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 201, 202, 209, 221, 231, 235, 242, 258, 273, 275, + 282, 295, 306, 314, 315, 318, 324, 374, 380, 381, + 382, 383, 402, 403, 404, 407, 410, 411, 414, 416, + 417, 420, 424, 428, 431, 432, 434, 436, 438, 449, + 454, 468, 469, 470, 471, 472, 475, 476, 481, 482, + 483, 484, 485, 493, 494, 499, 522, 524, 537, 555, + 561, 474, 297, 298, 439, 440, 310, 311, 583, 584, + 296, 532, 562, 530, 582, 556, 433, 372, 0, 0, + 0, 375, 278, 301, 316, 0, 547, 495, 226, 460, + 287, 250, 0, 0, 211, 245, 229, 256, 271, 274, + 320, 385, 393, 422, 427, 293, 268, 243, 453, 240, + 478, 502, 503, 504, 506, 389, 263, 426, 0, 390, + 370, 512, 513, 312, 86, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 95, 0, 1562, 0, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, +>>>>>>> e439161508 (fix: complete time period feature) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, @@ -3728,6 +6191,7 @@ var yyAct = [...]int{ 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +<<<<<<< HEAD 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6426,7 +8890,2493 @@ var yyPact = [...]int{ 745, 745, 413, 745, 745, 745, 745, 350, 349, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, 470, 2176, 331, -1000, +======= + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 94, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 95, 0, 0, 0, 197, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 2167, 0, 0, 2166, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 2118, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 1766, 197, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 2116, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 966, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 972, 326, 200, 224, 970, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 2118, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 1766, 197, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 1562, 0, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 3454, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 1951, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1952, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 2560, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2561, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, + 0, 2545, 0, 0, 0, 0, 237, 0, 0, 244, + 2546, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 1604, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 1603, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 0, 667, 668, 669, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 3578, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 1766, 197, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 3454, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 95, 0, 0, 0, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 2168, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 0, 197, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 1585, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 0, 197, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 1906, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 1897, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 1733, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 1731, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 1729, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 1727, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 1725, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 1721, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 1719, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 1717, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 1692, 0, 0, 0, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 1589, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 0, 197, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 95, 0, 0, 0, 839, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 0, 197, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1338, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 1337, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 0, 197, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 924, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 0, 197, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 611, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 3586, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 0, 839, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, + 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, + 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, + 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, + 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, + 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, + 283, 0, 0, 0, 0, 0, 197, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, + 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, + 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, + 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, + 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, + 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, + 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, + 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, + 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, + 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, + 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, + 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, + 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, + 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, + 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, + 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, + 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, + 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, + 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, + 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, + 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, + 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, + 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, + 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, + 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, + 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, + 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, + 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, + 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, + 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, + 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, + 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, + 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, + 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, + 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, + 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, + 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, + 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, + 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, + 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, + 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, + 240, 478, 502, 503, 504, 506, 389, 263, 426, 0, + 0, 370, 512, 513, 312, +} + +var yyPact = [...]int{ + -1000, -1000, 5916, -1000, -462, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 2258, 2390, -1000, -1000, -1000, -1000, 2467, -1000, 1096, + 1928, -1000, 2203, 332, -1000, 47505, 601, -1000, 44825, 599, + 585, 143, 3884, 30085, -1000, 245, -1000, 231, 46165, 239, + -1000, -1000, -1000, -1000, -323, 18693, 2129, 116, 115, 47505, + -1000, -1000, -1000, -1000, 2439, 1885, -1000, 398, -1000, -1000, + -1000, -1000, -1000, -1000, 44155, -1000, 1038, -1000, -1000, 2208, + 2238, 2473, 786, 2110, -1000, 2362, 1885, -1000, 18693, 2426, + 2272, 18023, 18023, 499, -1000, -1000, 319, -1000, -1000, -1000, + 2482, 25395, 47505, -1000, 32765, 306, -1000, 2203, -1000, -1000, + -1000, 133, -1000, 402, 1804, -1000, 1803, -1000, 582, 1247, + 423, 544, 539, 422, 421, 418, 415, 413, 411, 410, + 408, 429, -1000, 810, 810, -143, -144, 1530, 577, 478, + 478, 837, 523, 2165, 2156, -1000, -1000, 810, 810, 810, + 448, 810, 810, 810, 810, 369, 366, 810, 810, 810, + 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, + 810, 810, 810, 810, 453, 2203, 347, -1000, -1000, -1000, +>>>>>>> e439161508 (fix: complete time period feature) -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -6467,6 +11417,36 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, +<<<<<<< HEAD +======= + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 47505, + 209, 47505, -1000, 680, 47505, 47505, -1000, 1212, 1210, 962, + -1000, -1000, 962, 129, 962, 962, 962, 962, 252, 706, + 71, -1000, 246, 342, 220, 330, 957, 234, -1000, -1000, + 322, 957, 990, 957, 1690, 1687, -1000, 796, 320, 230, + -1000, 962, 962, -1000, -1000, 11968, 187, 11968, 11968, -1000, + 2188, -1000, -1000, -1000, -1000, -1000, 1232, -1000, -1000, -1000, + -1000, -18, 520, -1000, -1000, -1000, -1000, 46165, 43485, 302, + -1000, -1000, 63, -1000, -1000, 1716, 1270, 18693, 1508, -1000, + 1759, 749, -1000, -1000, -1000, -1000, -1000, 686, -1000, 19363, + 19363, 19363, 19363, -1000, -1000, 1781, 42815, 1781, 1781, 19363, + 1781, -1000, 19363, 1781, 1781, 1781, 18693, 1781, 1781, 1781, + 1781, -1000, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + -1000, -1000, -1000, -1000, 1781, 677, 1781, 1781, 1781, 1781, + 1781, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1781, + 1781, 1781, 1781, 1781, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 21373, 1439, + 1423, 1420, -1000, 16013, 1781, -1000, -1000, -1000, -1000, -1000, +>>>>>>> e439161508 (fix: complete time period feature) + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 47683, 253, 47683, -1000, 652, 47683, 47683, -1000, 1175, 1173, -1000, -1000, 892, -1000, -1000, 892, 123, 892, 892, 892, 892, 240, 669, 111, -1000, 235, 314, 218, @@ -6495,6 +11475,36 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, +<<<<<<< HEAD +======= + -1000, -1000, -1000, -1000, -1000, 47505, -1000, 1781, 271, 46165, + 46165, 417, 2362, 1885, -1000, 2439, 2431, 398, 2960, 1596, + 1391, 1392, 1885, 1794, 47505, -1000, 1820, -1000, -1000, -1000, + -1000, 2053, 1397, 1685, -1000, -1000, -1000, -1000, 1500, 18693, + -1000, -1000, 2461, -1000, 22714, 667, 2459, 42145, -1000, 499, + 499, 1802, 477, 10, -1000, -1000, -1000, -1000, 830, 29415, + -1000, -1000, -1000, -1000, -1000, 1708, 47505, -1000, -1000, 4575, + 1261, -1000, 1924, -1000, 2856, 1704, -1000, 1876, 18693, 1942, + 579, 1261, 556, 550, 543, -1000, -43, -1000, -1000, -1000, + -1000, -1000, -1000, 810, 810, 810, -1000, 424, 2425, 332, + 4765, -1000, -1000, -1000, 41475, 1920, 1261, -1000, 1919, -1000, + 938, 611, 638, 638, 1261, -1000, -1000, 46835, 1261, 927, + 912, 1261, 1261, 46165, 46165, -1000, 40805, -1000, 40135, 39465, + 1195, 46165, 38795, 38125, 37455, 36785, 36115, -1000, 2204, -1000, + 2062, -1000, -1000, -1000, 46835, 1261, 1261, 46835, 46165, 46835, + 47505, 1261, -1000, -1000, 419, -1000, -1000, 1193, 1188, 1185, + 810, 810, 1184, 1669, 1666, 1657, 810, 810, 1181, 1641, + 31425, 1621, 356, 1176, 1174, 1173, 1225, 1616, 205, 1604, + 1175, 1168, 1158, 46165, 1901, 47505, -1000, 305, 882, 1161, + 753, 1070, 829, 2203, 2127, 1801, 515, 574, 1261, 481, + 481, 46165, -1000, 13996, -1000, 452, -1000, -1000, -1000, -1000, + 1590, 18693, -1000, 961, 957, 957, -1000, -1000, -1000, -1000, + -1000, -1000, 962, 47505, 961, -1000, -1000, -1000, 957, 962, + 47505, 962, 962, 962, 962, 957, 957, 957, 962, 47505, + 47505, 47505, 47505, 47505, 47505, 47505, 47505, 47505, 11968, 796, + 962, 962, -329, 962, 253, -331, -1000, 1580, -1000, -1000, + 2042, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, +>>>>>>> e439161508 (fix: complete time period feature) -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 47683, -1000, 1424, 259, 46339, 46339, 367, 2339, 1814, -1000, @@ -6536,6 +11546,7 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, +<<<<<<< HEAD -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 12040, 12040, @@ -6825,6 +11836,294 @@ var yyPgo = [...]int{ } //line sql.y:8409 +======= + -1000, -1000, 11968, 11968, -1000, -1000, -1000, -1000, -1000, 1800, + -1000, 212, 79, 232, -1000, 35445, 412, 828, -1000, 412, + -1000, -1000, -1000, 1798, 34775, -1000, -370, -375, -377, -378, + -1000, -1000, -1000, -379, -385, -1000, -1000, -1000, 18693, 18693, + 18693, 18693, -173, -1000, 1046, 19363, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 166, 909, 19363, 19363, 19363, 19363, 19363, + 19363, 19363, 19363, 19363, 19363, 19363, 19363, 19363, 19363, 19363, + -1000, -1000, 27405, 6011, 6011, 749, 749, 749, 749, -1000, + -105, 1797, 46835, -1000, -1000, -1000, 665, 18693, 18693, 749, + -1000, 1261, 16013, 20033, 18023, 18023, 18693, 848, 1270, 46835, + 18693, -1000, 1392, -1000, -1000, -1000, 1141, -1000, 904, 2170, + 2170, 2170, 2170, 18693, 18693, 18693, 18693, 18693, 18693, 18693, + 18693, 18693, 18693, 2170, 46165, 46165, 767, 18693, 18693, 18693, + 18693, 18693, 18693, 14672, 18693, 18693, 19363, 18693, 18693, 18693, + 1392, 18693, 18693, 18693, 18693, 18693, 18693, 18693, 18693, 18693, + 18693, 18693, 18693, 18693, 18693, 18693, 18693, 18693, 18693, 18693, + 18693, 18693, 18693, 18693, 18693, 18693, 18693, 18693, 1392, 18693, + 1198, 18693, 18693, 18023, 13320, 18023, 18023, 18023, 18023, 18023, + -1000, -1000, -1000, -1000, -1000, 18693, 18693, 18693, 18693, 18693, + 18693, 18693, 18693, 1392, 18693, 18693, 18693, 18693, 18693, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1474, + 1379, 1395, 18693, -1000, 1795, -1000, -104, 24725, 18693, 1577, + 1566, 2458, 1965, 46165, -1000, -1000, -1000, 2362, -1000, 2362, + 1474, 2036, 18023, -1000, -1000, 2856, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 1653, -1000, 47505, 1794, 2269, 46165, + 2024, 1550, 409, -1000, 18693, 18693, 1793, -1000, 1204, 47505, + -1000, -173, -1000, 34105, -1000, -1000, 11292, 47505, 403, 47505, + -1000, 24055, 33435, 335, -1000, 10, 1782, -1000, 43, 45, + 15342, 748, -1000, -1000, -1000, 1530, 20703, 1735, 748, 167, + -1000, -1000, -1000, 1876, -1000, 1876, 1876, 1876, 1876, 409, + 409, 409, 409, -1000, -1000, -1000, -1000, -1000, 1900, 1899, + -1000, 1876, 1876, 1876, 1876, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 1898, 1898, 1898, 1891, 1891, 1879, 1879, 472, + -1000, 18693, -1000, -1000, 324, 32765, 2212, 1151, 1504, 305, + 490, 1963, 1261, 1261, 1261, 490, -1000, 1290, 1274, 1260, + -1000, -446, 1792, -1000, -1000, 2424, -1000, -1000, 646, 997, + 956, 840, 46165, 277, 393, -1000, 466, -1000, 32765, 1261, + 907, 638, 1261, -1000, 1261, -1000, -1000, -1000, -1000, -1000, + 1261, -1000, -1000, 1790, -1000, 1789, 1028, 919, 1003, 892, + 1790, -1000, -1000, -112, 1790, -1000, 1790, -1000, 1790, -1000, + 1790, -1000, 1790, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 814, 228, -235, 46165, 277, 510, -1000, 509, + 27405, -1000, -1000, -1000, 27405, 27405, -1000, -1000, -1000, -1000, + 1545, 1537, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -437, 47505, -1000, 300, 822, 384, 414, 382, 47505, + 1007, 2357, 2356, 2352, 2348, 2343, 2342, 2341, 341, 2338, + 2337, 2332, 2331, 2317, 2316, 705, 2315, 2303, 2298, 2297, + 2284, 2280, 2279, 310, 360, 47505, 47505, 481, 2001, 47505, + 2230, 47505, -1000, -1000, -1000, -1000, 485, 47505, -1000, 326, + -1000, -1000, -1000, -1000, -1000, -1000, 1270, 47505, -1000, -1000, + 962, 962, -1000, -1000, 47505, 962, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 962, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 47505, -1000, -1000, -1000, -1000, -18, + 214, -1000, -1000, 46165, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -40, -1000, 89, 29, 378, -1000, -1000, + -1000, -1000, -1000, 2302, -1000, 1270, 862, 873, -1000, 1781, + -1000, -1000, 1083, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 166, 19363, 19363, 19363, 2060, 563, 2180, 1164, 1780, 1283, + 1283, 930, 930, 755, 755, 755, 755, 755, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 1531, -1000, 1781, 46835, + 1700, 13320, 1625, 1053, 1392, 3189, -1000, 1663, -1000, 1663, + 1442, 847, -1000, 18693, 1392, 3185, -1000, -1000, 1392, 1392, + 1392, 18693, -1000, -1000, 18693, 18693, 18693, 18693, 1504, 1504, + 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 18693, 1788, + 1786, 2457, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 1364, 1504, 1504, 1504, 1504, 1504, 18693, + 1513, -1000, -1000, -1000, 1410, 3109, 1385, 3087, 1504, 1504, + -1000, 1504, 3023, 3017, 1392, 1716, 1392, 1785, -1000, 3013, + 1504, 3008, 2999, 2992, 2378, 2961, 2951, 2944, 1504, 1504, + 1504, 2312, 2935, 2927, 2909, 2899, 2895, 2872, 2868, 2859, + 2759, 1504, -176, 1504, 1392, -1000, -1000, -1000, -1000, -1000, + 2755, 2301, 1392, 1784, 1781, 658, -1000, -1000, 1663, 1392, + 1392, 1663, 1663, 2746, 2736, 2726, 2697, 2614, 2542, 1504, + 1504, -1000, 1504, 2422, 2399, 2282, 2275, 1392, -1000, 1395, + 47505, -1000, -306, -1000, 14, 690, 1781, -1000, 31425, 1392, + -1000, -1000, 3651, -1000, 1208, -1000, -1000, -1000, 28745, 1730, + 2856, -1000, -1000, 1781, 1648, -1000, -1000, 409, 135, 28075, + 727, 727, 175, 1270, 1270, 18693, -1000, -1000, -1000, -1000, + -1000, -1000, 641, 2394, 468, 1781, -1000, 1783, 2463, -1000, + -1000, -1000, 2267, 22044, -1000, -1000, 1781, 1781, 47505, 1739, + 1713, -1000, 627, -1000, 1286, 1782, 10, 25, -1000, -1000, + -1000, -1000, 1270, -1000, 1258, 405, 703, -1000, 464, -1000, + -1000, -1000, -1000, 2137, 141, -1000, -1000, -1000, 258, 409, + -1000, -1000, -1000, -1000, -1000, -1000, 1520, 1520, -1000, -1000, + -1000, -1000, -1000, 1142, -1000, -1000, -1000, -1000, 1140, -1000, + -1000, 1139, -1000, -1000, 2456, 1989, 324, -1000, -1000, 810, + 1515, -1000, -1000, 2139, 810, 810, 46165, -1000, -1000, 1674, + 2212, 300, 47505, 859, 1999, -1000, 1963, 1963, 1963, 47505, + -1000, -1000, -1000, -1000, -1000, -1000, -447, 80, 434, -1000, + -1000, -1000, 4736, 46165, 1632, -1000, 278, -1000, 1615, -1000, + 46165, -1000, 1630, 1890, 1261, 1261, -1000, -1000, -1000, 46165, + 1781, -1000, -1000, -1000, -1000, 559, 2202, 304, -1000, -1000, + -203, -1000, -1000, 277, 278, 46835, 1261, 748, -1000, -1000, + -1000, -1000, -1000, -436, 1628, 534, 284, 353, 47505, 47505, + 47505, 47505, 47505, 615, -1000, -1000, 75, -1000, -1000, -1000, + -1000, 259, -1000, -1000, -1000, -1000, -1000, -1000, 259, -1000, + -1000, -1000, -1000, -1000, 259, -1000, 1510, -1000, -1000, -1000, + -1000, 259, -1000, -1000, -1000, 65, -1000, -1000, -1000, -1000, + 259, -1000, -1000, -1000, -1000, -1000, -1000, 259, -1000, -1000, + -1000, -1000, 336, 504, -1000, 47505, 47505, 689, -1000, -1000, + -1000, -1000, -1000, -1000, 957, -1000, -1000, 957, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 2179, 47505, 19, -402, -1000, -399, 18693, -1000, -1000, -1000, + -1000, 1770, 549, 2180, 19363, 19363, 19363, -1000, -1000, -1000, + 1062, 1062, 27405, -1000, 18693, 18023, -1000, -1000, 18693, 18693, + 815, -1000, 18693, 1111, -1000, 18693, -1000, -1000, -1000, 1395, + 1504, 1504, 1504, 1504, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 1715, 18693, 18693, 18693, 1392, 364, + -1000, -1000, -1000, -1000, -1000, 2455, -1000, 18693, -1000, 27405, + 18693, 18693, 18693, -1000, -1000, -1000, 18693, 18693, -1000, -1000, + 18693, 18693, -1000, 18693, 18693, 18693, -1000, 18693, 18693, 18693, + 18693, -1000, -1000, -1000, -1000, 18693, 18693, 18693, 18693, 18693, + 18693, 18693, 18693, 18693, 18693, -1000, -1000, 32765, 100, -176, + 1198, 100, 1198, -1000, 18023, 12644, -1000, -1000, -1000, -1000, + -1000, 18693, 18693, 18693, 18693, 18693, 18693, -1000, -1000, -1000, + 18693, 18693, -1000, 18693, -1000, 18693, -1000, -1000, -1000, -1000, + -1000, 690, -1000, 638, 638, 638, 46165, -1000, -1000, -1000, + -1000, 1775, -1000, 2309, -1000, 2085, 2074, 2454, 2394, -1000, + 24055, 2856, -1000, -1000, 46165, -293, -1000, 2118, 2210, 727, + 727, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 10616, 2362, + 18693, 1993, 46835, 160, -1000, 23385, 46165, 46835, 24055, 24055, + 24055, 24055, 24055, -1000, 2019, 2013, -1000, 2067, 2030, 2093, + 47505, -1000, 1474, 1614, -1000, 18693, 26065, 1712, 24055, -1000, + -1000, 24055, 47505, 9940, -1000, -1000, 17, 35, -1000, -1000, + -1000, -1000, 1530, -1000, -1000, 502, 2252, 2126, -1000, -1000, + -1000, -1000, -1000, 1603, -1000, 1587, 1767, 1584, 1561, 228, + -1000, 1934, 2171, 810, 810, -1000, 1135, -1000, 1261, 1506, + 1501, -1000, -1000, -1000, 528, -1000, 2220, 47505, 1992, 1990, + 1988, -1000, -455, 1103, 1889, 1765, 18693, 1886, 2421, 1754, + 46165, -1000, -1000, 46835, -1000, 176, -1000, 324, 46165, -1000, + -1000, -1000, 393, 47505, -1000, 7029, -1000, -1000, -1000, 278, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 47505, 295, -1000, + 1884, 1230, -1000, -1000, 1952, -1000, -1000, -1000, -1000, 269, + 376, 1495, 263, 1483, 263, 263, 1471, 263, 1469, 263, + 263, -1000, 47505, 674, 1989, 47505, -1000, -1000, -1000, 962, + 962, -1000, -1000, 2169, -1000, 1261, 1504, 19363, 19363, -1000, + 749, 325, -151, 1876, 1876, -1000, 1876, 1879, -1000, 1876, + 198, 1876, 194, 1876, -1000, -1000, 1392, 1392, 1395, -1000, + 2246, 1370, -1000, 1270, 18693, 2387, -1000, -1000, -1000, -1000, + -1000, -49, 2296, 2286, 1504, -1000, 1870, 1869, 18693, 1504, + 1392, 2218, 1504, 1504, 1504, 1504, -1000, 1270, 1395, 1996, + 1395, 1504, 1504, 1970, 337, 1504, 1549, 1549, 1549, 1549, + 1549, 1395, 1395, 1395, 1395, 46165, -1000, -176, -1000, -1000, + -213, -214, -1000, 1392, -176, 1761, 1392, -1000, 2160, 2123, + 1772, 2052, 1504, 1725, 1504, 1504, 1504, 2028, -1000, 2287, + 2287, 2287, 1524, 1208, 47505, -1000, -1000, -1000, -1000, 2394, + 2442, 1760, -1000, -1000, 135, 484, -1000, 2100, 2210, -1000, + 2416, 2104, 2409, -1000, -1000, -1000, -1000, -1000, 1270, -1000, + 2206, 1745, -1000, 820, 1738, -1000, -1000, 17353, 1544, 2066, + 623, 1524, 1766, 2463, 1959, 1986, 2783, -1000, -1000, -1000, + -1000, 2012, -1000, 2006, -1000, -1000, 1820, -1000, 1696, 403, + 24055, 1598, 1598, -1000, 619, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 1008, 5418, 2472, -1000, 1449, -1000, 1250, 211, + 1101, -1000, -1000, 810, 810, -1000, 905, 896, -1000, 47505, + 1868, -1000, 409, 1447, 409, 1097, -1000, -1000, 1092, -1000, + -1000, -1000, -1000, 1969, 2049, -1000, -1000, -1000, -1000, 47505, + -1000, -1000, 47505, 47505, 47505, 1867, 2402, -1000, 18693, 1830, + 812, 2382, 46165, 46165, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 512, 810, -417, 359, 350, + 810, 810, 810, -457, -1000, -1000, 1519, 1491, -1000, -141, + -1000, 18693, -1000, -1000, -1000, 1144, 1144, 1439, 1423, 1420, + -1000, 1820, -1000, -1000, -1000, 1600, -1000, -1000, -120, 46165, + 46165, 46165, 46165, -1000, -1000, 1075, -1000, -1000, -1000, 1412, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 749, 1392, 355, -126, 1392, -1000, + -1000, 409, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 18693, -1000, 18693, -1000, 1270, 18693, 2362, 1404, + 18693, 18693, -1000, 1090, 1088, 1504, -1000, -1000, -1000, 18693, + -1000, -1000, -1000, -1000, -1000, 18693, -1000, -1000, -1000, 18693, + 280, 1062, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 1392, 399, -1000, -1000, -1000, -1000, 2433, -1000, + 1392, 18693, -1000, -1000, 18693, -1000, 18693, 18693, -1000, 18693, + -1000, 18693, -1000, -1000, -1000, -1000, 18693, 1781, 2201, 1781, + 1781, 26065, -1000, -1000, 2442, 2401, 2398, 2071, 2091, 2091, + 2100, -1000, 2393, 2392, -1000, 1400, 2385, 1389, 893, -1000, + 46835, 18693, 160, -1000, 394, 46165, 160, 46165, -1000, 2383, + -1000, -1000, 18693, 1829, -1000, 18693, -1000, -1000, -1000, -1000, + 6011, 2394, 1598, -1000, -1000, 776, -1000, 18693, -1000, -1000, + -1000, 3900, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 1373, 1354, -1000, -1000, 1822, 18693, -1000, -1000, -1000, 1479, + 1475, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1820, + -1000, -1000, -1000, -1000, 393, -449, 2265, 46165, 1080, -1000, + 1489, 1754, 385, 160, 1328, 810, 810, 810, 1065, 1061, + 31425, 1482, -1000, 46165, 451, -1000, 393, -1000, -146, -147, + 1504, -1000, -1000, 2251, -1000, -1000, 12644, -1000, -1000, 1814, + 1956, -1000, -1000, -1000, -1000, -1000, 2003, -108, -131, -1000, + -1000, 1504, 1504, 1121, 1392, -1000, 1504, 1504, 1456, 1446, + -1000, 1504, 1395, 2016, -1000, 280, 1392, 1973, -1000, -1000, + 6011, -1000, -1000, 2383, 2377, 100, -1000, -1000, 276, 100, + 1270, 2010, 1504, 1871, 1764, 1504, 1504, 26735, -1000, 2372, + 2313, 32095, 32095, 690, 2401, -185, 18693, 18693, 2063, 1076, + -1000, -1000, -1000, -1000, 1317, 1313, -1000, 1306, -1000, 2470, + -1000, 1270, -1000, 160, -1000, 594, 1738, -1000, 2362, 1270, + 46165, 1270, 137, 2383, -1000, 1504, -1000, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, + 1781, 1781, 1781, 1781, 1781, 1781, 1781, -1000, -1000, 46165, + 2034, -1000, -1000, 2245, 1478, 78, -1000, 1396, 1754, -1000, + -1000, 161, -1000, 18693, -1000, 31425, 1304, 1301, -1000, -1000, + -1000, -1000, -457, -1000, -1000, -1000, -1000, -1000, -1000, 398, + 1753, -1000, 809, 46165, 47505, -1000, 1904, -1000, -1000, -1000, + 18693, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 18693, + -1000, 1392, 1972, -1000, -281, -1000, -426, 18693, -176, -1000, + -1000, -176, -1000, 18693, -1000, -1000, 18693, -1000, 18693, -1000, + -1000, 1455, -1000, -1000, -1000, -1000, -1000, 1455, 1455, -1000, + -185, -1000, 1743, -1000, 46165, 1270, 1716, -1000, 1063, -1000, + -1000, -1000, -1000, -1000, 46835, 1738, 46165, -1000, 1453, 1392, + 1781, 2362, -1000, 1445, -1000, 398, -1000, 1813, 1765, -1000, + -1000, -1000, 16683, -1000, -1000, -1000, -1000, -1000, 201, -119, + 12644, 9264, 1427, -1000, -116, 1504, 1395, -1000, -387, -1000, + -1000, -1000, -1000, 218, -1000, -1000, 1716, -1000, -1000, 1673, + 1644, 1599, 30755, -1000, -1000, -1000, -1000, -185, -1000, -1000, + 2237, -1000, -1000, 1299, -1000, -1000, 26065, 45495, -1000, -103, + 381, -119, 18693, 1808, 1392, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 32, -1000, -1000, -1000, -1000, -1000, 1952, + -128, -1000, -1000, -1000, 247, -407, -216, -220, -1000, -1000, + 19363, -1000, 18693, -1000, 18693, -1000, 18693, -1000, -1000, -1000, + 46165, 1781, -1000, 1383, -1000, 4244, -231, 1971, -1000, -42, + -1000, -1000, -1000, 998, 1298, -1000, -1000, -1000, -1000, -1000, + -1000, 1880, 46165, -1000, 467, -1000, -1000, -120, -132, 864, + -1000, -1000, -1000, -1000, -1000, 1278, 1160, 1504, -1000, 46165, + -1000, 45495, -225, 748, 6011, -1000, 1967, 1881, 2451, -1000, + -1000, -1000, -1000, -1000, -1000, -459, 1297, 303, -1000, -1000, + 247, -1000, 18693, -1000, 18693, -1000, 1392, -1000, -1000, 2217, + 137, -1000, 2469, -1000, 2464, 650, 650, -1000, 1043, -459, + -1000, -1000, 1504, 1504, -1000, -234, -1000, -1000, -1000, -1000, + -1000, 463, 1124, -1000, -1000, -1000, -1000, -1000, 6011, -1000, + -1000, -1000, 273, 273, -1000, -1000, +} + +var yyPgo = [...]int{ + 0, 3117, 3116, 25, 1, 34, 33, 3115, 52, 110, + 213, 60, 214, 109, 3114, 186, 3112, 3110, 3109, 3108, + 3107, 3106, 2509, 2499, 2492, 3099, 3097, 3095, 3094, 3089, + 3088, 3084, 3082, 3079, 3078, 187, 183, 209, 3075, 3072, + 3071, 136, 196, 96, 99, 206, 3070, 3067, 87, 3060, + 3059, 3057, 204, 203, 202, 820, 3056, 201, 114, 53, + 3054, 3053, 3052, 3045, 3044, 3043, 3042, 3035, 3033, 3031, + 3022, 3020, 3018, 3008, 3004, 2990, 2988, 2986, 2982, 307, + 2979, 2978, 16, 2977, 94, 2969, 2963, 2962, 2961, 2958, + 7, 2957, 2953, 20, 43, 2952, 2943, 48, 2941, 2940, + 2938, 2930, 2929, 14, 2928, 22, 2926, 37, 2925, 2923, + 137, 2917, 2916, 2915, 39, 2908, 2907, 2904, 2902, 2893, + 2892, 2891, 158, 2890, 2889, 2886, 192, 216, 2884, 2882, + 182, 121, 119, 2879, 2871, 115, 207, 2870, 133, 2869, + 2866, 2864, 169, 2855, 2217, 2849, 2846, 73, 108, 2845, + 50, 2844, 2842, 9, 100, 70, 4, 81, 83, 2840, + 2837, 72, 92, 2830, 135, 2821, 2819, 113, 78, 2811, + 116, 111, 2799, 2797, 17, 21, 2796, 35, 29, 36, + 77, 2780, 2777, 122, 2769, 2768, 2767, 103, 2764, 2762, + 663, 2760, 104, 149, 117, 89, 2757, 47, 88, 2754, + 2745, 2744, 2743, 2742, 56, 2741, 2739, 2738, 154, 151, + 188, 2737, 44, 86, 57, 146, 2734, 42, 98, 210, + 184, 2733, 2728, 150, 147, 2726, 2725, 69, 45, 51, + 2724, 128, 143, 132, 26, 123, 157, 2723, 2719, 68, + 79, 2717, 2714, 2709, 2708, 185, 2705, 2704, 80, 2703, + 59, 2700, 199, 2699, 6, 65, 2697, 46, 180, 2696, + 85, 2689, 2688, 74, 145, 75, 38, 2687, 175, 178, + 141, 179, 2679, 2678, 62, 2674, 2670, 2669, 208, 334, + 2668, 2665, 153, 189, 155, 167, 102, 2664, 346, 2662, + 2653, 106, 2, 5226, 2652, 41, 181, 2648, 2647, 5956, + 152, 40, 24, 2642, 129, 2641, 2640, 2639, 2624, 224, + 195, 142, 176, 67, 2623, 2622, 2619, 13, 2617, 2614, + 2613, 2612, 2608, 2607, 91, 32, 31, 30, 211, 76, + 11, 112, 191, 173, 84, 2600, 2592, 2591, 134, 105, + 2590, 174, 172, 139, 177, 2588, 193, 163, 120, 2587, + 101, 28, 2586, 2577, 2574, 2573, 107, 2572, 2570, 2569, + 2568, 170, 160, 131, 90, 2567, 93, 130, 165, 161, + 64, 2565, 49, 2562, 2560, 27, 205, 23, 2559, 12, + 118, 168, 2558, 4147, 194, 2556, 15, 338, 164, 2554, + 2552, 5, 8, 10, 2551, 2549, 2544, 2542, 144, 2527, + 2525, 2522, 2516, 19, 54, 18, 3, 126, 95, 2515, + 2514, 156, 162, 2513, 2505, 2503, 2498, 3169, 0, 148, + 2494, 212, +} + +//line sql.y:8400 +>>>>>>> e439161508 (fix: complete time period feature) type yySymType struct { union any empty struct{} @@ -7624,6 +12923,7 @@ var yyR1 = [...]int{ 246, 246, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, +<<<<<<< HEAD 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 154, 222, 222, 221, 221, 88, 88, 88, 89, 89, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, @@ -7669,6 +12969,153 @@ var yyR1 = [...]int{ 276, 276, 289, 289, 285, 285, 286, 286, 279, 279, 291, 291, 291, 78, 211, 211, 368, 368, 365, 294, 294, 296, 296, 300, 300, 304, 304, 301, 301, 292, +======= + 155, 155, 406, 406, 406, 406, 406, 406, 406, 406, + 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, + 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, + 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, + 406, 406, 406, 406, 160, 160, 156, 156, 156, 157, + 157, 157, 158, 158, 403, 403, 403, 403, 317, 317, + 317, 317, 320, 320, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 319, 319, 319, 319, 319, 319, 319, + 321, 321, 321, 321, 321, 322, 322, 322, 322, 322, + 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, + 322, 323, 323, 323, 323, 323, 323, 323, 323, 338, + 338, 324, 324, 332, 332, 333, 333, 334, 334, 334, + 335, 335, 335, 336, 336, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 331, 331, 330, 330, 330, 341, + 366, 366, 365, 365, 363, 363, 363, 363, 363, 363, + 363, 363, 350, 350, 360, 360, 360, 360, 360, 349, + 349, 345, 345, 345, 346, 346, 347, 347, 344, 344, + 348, 348, 362, 362, 361, 361, 342, 342, 343, 343, + 368, 404, 404, 404, 404, 404, 405, 405, 369, 394, + 396, 396, 396, 395, 395, 392, 393, 391, 391, 391, + 391, 391, 84, 84, 84, 286, 286, 287, 287, 358, + 358, 357, 357, 357, 359, 359, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 281, 281, 281, + 390, 390, 390, 390, 390, 390, 389, 389, 389, 355, + 355, 355, 388, 388, 58, 58, 218, 218, 407, 407, + 408, 408, 408, 46, 46, 46, 46, 46, 46, 45, + 45, 45, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 47, 47, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 110, 110, + 111, 111, 111, 111, 113, 113, 113, 371, 371, 59, + 59, 3, 3, 173, 175, 176, 176, 174, 174, 174, + 174, 174, 174, 61, 61, 60, 60, 178, 177, 179, + 179, 179, 1, 1, 2, 2, 4, 4, 376, 376, + 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, + 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, + 337, 337, 337, 370, 370, 372, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 116, 115, 115, 114, + 117, 117, 117, 117, 117, 117, 117, 117, 374, 374, + 374, 62, 62, 375, 325, 326, 327, 5, 6, 351, + 373, 124, 124, 29, 38, 38, 30, 30, 30, 30, + 31, 31, 63, 64, 414, 414, 68, 68, 68, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 280, + 280, 289, 289, 279, 279, 304, 304, 304, 282, 282, + 282, 283, 283, 400, 400, 400, 276, 276, 66, 66, + 66, 305, 305, 305, 305, 69, 69, 409, 409, 410, + 410, 411, 411, 411, 70, 71, 71, 307, 307, 308, + 308, 72, 73, 85, 85, 85, 85, 85, 85, 85, + 86, 86, 86, 86, 109, 109, 109, 15, 15, 15, + 15, 81, 81, 81, 14, 14, 17, 67, 67, 75, + 397, 397, 398, 399, 399, 399, 399, 76, 78, 78, + 32, 32, 32, 32, 32, 32, 134, 134, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 129, 129, 129, 123, 123, 420, 79, 80, 80, 127, + 127, 127, 120, 120, 120, 126, 126, 126, 16, 16, + 18, 262, 262, 19, 19, 131, 131, 133, 133, 133, + 133, 133, 135, 135, 135, 135, 135, 135, 135, 130, + 130, 132, 132, 132, 132, 297, 297, 297, 296, 296, + 167, 167, 169, 168, 168, 170, 170, 171, 171, 171, + 171, 216, 216, 193, 193, 255, 255, 256, 256, 254, + 254, 261, 261, 257, 257, 257, 257, 264, 264, 172, + 172, 172, 172, 180, 180, 181, 181, 182, 182, 306, + 306, 302, 302, 302, 301, 301, 186, 186, 186, 188, + 187, 187, 187, 187, 189, 189, 191, 191, 190, 190, + 192, 197, 197, 196, 196, 194, 194, 194, 194, 195, + 195, 195, 195, 198, 198, 144, 144, 144, 144, 144, + 144, 144, 159, 159, 159, 159, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 162, 245, 245, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 153, 221, 221, + 220, 220, 87, 87, 87, 88, 88, 89, 89, 89, + 89, 89, 90, 90, 90, 90, 90, 145, 145, 92, + 92, 91, 91, 211, 211, 294, 294, 93, 94, 94, + 97, 97, 96, 95, 95, 101, 101, 98, 98, 100, + 100, 99, 102, 102, 103, 104, 104, 277, 277, 199, + 199, 207, 207, 207, 207, 200, 200, 200, 200, 200, + 200, 200, 208, 208, 208, 215, 209, 209, 205, 205, + 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, + 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 164, 164, 164, 164, + 226, 226, 151, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 151, 152, 152, 165, + 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, + 314, 314, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 421, 421, 328, 328, 328, 328, 206, + 206, 206, 206, 206, 125, 125, 125, 125, 125, 311, + 311, 311, 315, 315, 315, 313, 313, 313, 313, 313, + 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, + 316, 316, 224, 224, 121, 121, 222, 222, 223, 225, + 225, 217, 217, 217, 217, 219, 219, 202, 202, 202, + 227, 227, 228, 228, 105, 106, 106, 107, 107, 229, + 229, 231, 230, 230, 232, 233, 233, 233, 234, 234, + 235, 235, 235, 48, 48, 48, 48, 48, 43, 43, + 43, 43, 44, 44, 44, 44, 136, 136, 136, 136, + 138, 138, 137, 137, 82, 82, 83, 83, 83, 413, + 413, 413, 412, 412, 412, 412, 412, 412, 142, 142, + 143, 143, 143, 140, 140, 141, 141, 252, 252, 236, + 236, 236, 243, 243, 243, 239, 239, 241, 241, 241, + 242, 242, 242, 240, 249, 249, 251, 251, 250, 250, + 246, 246, 247, 247, 248, 248, 248, 244, 244, 201, + 201, 201, 201, 201, 253, 253, 253, 253, 265, 265, + 212, 212, 214, 214, 213, 213, 163, 266, 266, 274, + 271, 271, 272, 272, 298, 298, 298, 275, 275, 288, + 288, 284, 284, 285, 285, 278, 278, 290, 290, 290, + 77, 210, 210, 367, 367, 364, 293, 293, 295, 295, + 299, 299, 303, 303, 300, 300, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, + 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, +>>>>>>> e439161508 (fix: complete time period feature) 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, @@ -7684,6 +13131,7 @@ var yyR1 = [...]int{ 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, +<<<<<<< HEAD 292, 292, 292, 292, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, @@ -7727,6 +13175,35 @@ var yyR1 = [...]int{ 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 418, 419, 310, 311, 311, 311, +======= + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, + 417, 418, 309, 310, 310, 310, +>>>>>>> e439161508 (fix: complete time period feature) } var yyR2 = [...]int{ @@ -7779,6 +13256,7 @@ var yyR2 = [...]int{ 0, 1, 1, 3, 2, 1, 2, 3, 3, 3, 4, 4, 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, +<<<<<<< HEAD 3, 3, 3, 3, 3, 3, 4, 5, 0, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 2, 0, @@ -7793,6 +13271,22 @@ var yyR2 = [...]int{ 5, 5, 5, 5, 7, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 7, 5, 5, 7, 5, 5, 5, 7, 5, 5, 5, 5, 5, +======= + 3, 3, 3, 3, 3, 4, 5, 0, 2, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 1, 0, 1, 0, 2, 0, 2, + 0, 2, 2, 0, 1, 5, 1, 3, 7, 1, + 3, 3, 1, 2, 2, 2, 5, 5, 5, 6, + 8, 5, 5, 4, 4, 4, 6, 5, 5, 5, + 2, 2, 2, 2, 3, 3, 3, 4, 3, 3, + 1, 3, 5, 1, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 2, 3, 4, 4, 2, 11, + 3, 6, 8, 6, 6, 6, 13, 8, 6, 10, + 5, 5, 5, 7, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 7, 7, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 7, 7, 5, 5, 7, + 8, 5, 5, 5, 7, 5, 5, 5, 5, 5, +>>>>>>> e439161508 (fix: complete time period feature) 5, 5, 5, 5, 7, 7, 5, 5, 0, 6, 5, 6, 4, 5, 0, 8, 9, 0, 3, 0, 1, 0, 3, 8, 4, 1, 3, 3, 6, 7, @@ -7805,6 +13299,7 @@ var yyR2 = [...]int{ 0, 2, 2, 2, 2, 2, 2, 2, 4, 4, 3, 0, 1, 4, 3, 4, 4, 3, 3, 3, 2, 1, 3, 3, 3, 5, 7, 7, 6, 5, +<<<<<<< HEAD 3, 2, 3, 4, 1, 3, 2, 3, 3, 2, 2, 3, 2, 2, 3, 7, 3, 3, 3, 3, 4, 7, 5, 2, 4, 4, 4, 4, 4, 5, @@ -7885,6 +13380,88 @@ var yyR2 = [...]int{ 1, 1, 0, 1, 0, 2, 0, 3, 0, 1, 0, 1, 1, 5, 0, 1, 0, 1, 2, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, +======= + 3, 2, 3, 4, 1, 3, 2, 3, 3, 3, + 2, 2, 3, 7, 3, 3, 3, 3, 4, 7, + 5, 2, 4, 4, 4, 4, 4, 5, 5, 4, + 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, + 4, 4, 4, 4, 4, 3, 4, 4, 4, 2, + 3, 3, 3, 3, 5, 2, 3, 3, 2, 2, + 3, 4, 4, 4, 3, 4, 4, 5, 3, 0, + 1, 0, 1, 1, 1, 0, 2, 2, 0, 2, + 2, 0, 2, 0, 1, 1, 1, 1, 2, 1, + 3, 1, 1, 1, 1, 1, 3, 0, 1, 1, + 3, 3, 2, 2, 1, 1, 5, 0, 1, 0, + 1, 2, 3, 0, 3, 3, 3, 3, 3, 1, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 0, 1, 1, 4, 4, 4, 2, 2, 3, + 1, 3, 2, 1, 2, 1, 2, 2, 4, 4, + 3, 3, 6, 4, 7, 6, 1, 3, 2, 2, + 2, 2, 1, 1, 1, 3, 2, 1, 1, 1, + 0, 1, 1, 0, 3, 0, 2, 0, 2, 1, + 2, 2, 0, 1, 1, 0, 1, 1, 5, 5, + 4, 0, 2, 4, 4, 0, 1, 0, 1, 2, + 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 1, 2, 3, 5, 0, 1, 2, 1, 1, + 0, 1, 2, 1, 3, 1, 1, 1, 4, 3, + 1, 1, 2, 3, 7, 0, 3, 0, 1, 1, + 3, 1, 3, 1, 1, 3, 3, 1, 3, 4, + 4, 4, 3, 2, 4, 0, 1, 0, 2, 0, + 1, 0, 1, 2, 1, 1, 1, 2, 2, 1, + 2, 3, 2, 3, 2, 2, 2, 1, 1, 3, + 3, 0, 1, 1, 2, 6, 5, 6, 6, 0, + 2, 3, 3, 0, 2, 3, 3, 3, 2, 3, + 1, 6, 3, 4, 3, 1, 3, 4, 5, 6, + 3, 4, 5, 6, 3, 4, 1, 1, 1, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, + 2, 2, 2, 2, 1, 1, 2, 7, 7, 6, + 6, 2, 2, 1, 6, 3, 3, 3, 1, 3, + 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 1, 1, 0, + 1, 2, 5, 0, 3, 0, 1, 4, 4, 2, + 0, 1, 1, 2, 2, 1, 1, 2, 2, 0, + 1, 1, 1, 1, 5, 1, 3, 0, 3, 1, + 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 3, 4, 6, + 4, 4, 8, 6, 8, 6, 5, 4, 10, 2, + 2, 1, 2, 2, 2, 4, 5, 5, 5, 5, + 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 8, 8, 8, 6, 5, 4, 4, 4, 4, + 4, 7, 4, 4, 6, 6, 6, 8, 6, 6, + 4, 4, 3, 4, 6, 6, 4, 4, 4, 6, + 8, 6, 4, 6, 6, 8, 10, 7, 8, 8, + 9, 4, 4, 4, 4, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 4, 4, 6, 5, 9, + 6, 9, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 2, 6, 8, 10, 12, 14, 6, 8, 8, + 10, 12, 14, 6, 8, 10, 12, 6, 8, 4, + 4, 3, 4, 6, 6, 4, 6, 4, 6, 8, + 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 2, 0, 2, 3, 3, 4, + 4, 4, 4, 4, 0, 3, 4, 7, 3, 1, + 1, 1, 0, 5, 5, 2, 3, 1, 2, 2, + 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, + 0, 1, 0, 1, 0, 2, 1, 2, 4, 0, + 2, 1, 1, 3, 5, 1, 1, 1, 2, 2, + 0, 3, 0, 2, 2, 1, 3, 0, 1, 0, + 1, 3, 1, 3, 2, 0, 1, 1, 0, 1, + 2, 4, 4, 0, 2, 2, 1, 1, 3, 3, + 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, + 0, 3, 1, 1, 0, 4, 0, 1, 1, 0, + 1, 2, 2, 1, 1, 1, 1, 1, 0, 3, + 1, 3, 2, 1, 1, 0, 1, 2, 4, 9, + 3, 5, 0, 3, 3, 0, 1, 0, 2, 2, + 0, 2, 2, 2, 0, 2, 1, 2, 3, 3, + 0, 2, 1, 2, 3, 4, 3, 0, 1, 2, + 1, 5, 4, 4, 1, 3, 3, 5, 0, 5, + 1, 3, 1, 2, 3, 4, 1, 1, 3, 3, + 1, 2, 1, 1, 1, 1, 1, 1, 1, 0, + 1, 0, 2, 0, 3, 0, 1, 0, 1, 1, + 5, 0, 1, 0, 1, 2, 1, 1, 1, 1, + 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, +>>>>>>> e439161508 (fix: complete time period feature) 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -7941,13 +13518,18 @@ var yyR2 = [...]int{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +<<<<<<< HEAD 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, +======= + 1, 1, 0, 0, 1, 1, +>>>>>>> e439161508 (fix: complete time period feature) } var yyChk = [...]int{ -1000, -416, -80, -421, -7, -11, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30, -31, -63, -64, +<<<<<<< HEAD -68, -69, -65, -66, -70, -71, -72, -73, -74, -14, -17, -67, -32, -33, -75, -76, -77, -78, -79, -16, -18, -19, -9, -8, -13, 10, 11, -109, -34, 33, @@ -8651,12 +14233,716 @@ var yyDef = [...]int{ 0, 0, 1487, 0, 1489, 0, 1511, 1512, 1504, 0, 1496, 1499, 1495, 1498, 1411, 1006, 0, 1011, 0, 1402, 92, 0, 198, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +======= + -68, -65, -66, -69, -70, -71, -72, -73, -14, -17, + -67, -32, -33, -74, -75, -76, -77, -78, -16, -18, + -19, -9, -8, -13, 10, 11, -108, -34, 33, -39, + -49, 225, -50, -40, 226, -51, 228, 227, 265, 229, + 249, 635, 258, 75, 319, 320, 322, 323, 324, 325, + -109, 631, 263, 264, 231, 37, 46, 34, 35, 38, + 235, 271, 272, 234, -10, -35, 9, -417, 12, 463, + 260, 259, 29, -12, 525, 87, -80, -416, 680, -252, + -236, 23, 34, 30, -235, -231, -127, -236, 21, 19, + 8, -79, -79, -79, 13, 14, -79, -352, -354, -12, + 26, 87, 159, 9, 87, -79, -56, -55, -53, -52, + -54, -57, 32, -46, -47, -376, -45, -42, 230, 227, + 275, 123, 124, 265, 266, 267, 229, 249, 264, 268, + 263, 284, -41, 82, 34, 525, 528, -359, 226, 232, + 233, 228, 464, 126, 125, 76, -356, 378, 558, 650, + -57, 652, 101, 104, 651, 45, 239, 653, 654, 655, + 565, 656, 248, 657, 658, 659, 660, 666, 606, 667, + 668, 669, 127, 8, -79, -303, -299, 91, -292, 522, + 251, 556, 557, 300, 82, 42, 531, 375, 378, 558, + 493, 650, 319, 335, 329, 498, 499, 500, 358, 350, + 523, 559, 532, 303, 252, 288, 644, 348, 135, 652, + 307, 560, 266, 383, 384, 561, 385, 101, 322, 426, + 665, 306, 562, 663, 104, 651, 327, 80, 492, 52, + 647, 45, 261, 346, 234, 342, 653, 289, 563, 534, + 282, 126, 123, 672, 37, 338, 51, 31, 662, 125, + 50, 654, 150, 564, 655, 565, 387, 365, 638, 49, + 388, 267, 566, 85, 272, 527, 310, 646, 389, 512, + 339, 390, 299, 661, 231, 567, 626, 618, 619, 391, + 392, 639, 370, 366, 371, 514, 568, 418, 497, 393, + 622, 623, 679, 53, 569, 570, 640, 124, 571, 79, + 656, 81, 333, 334, 572, 297, 250, 517, 518, 420, + 362, 475, 482, 483, 111, 112, 478, 113, 484, 114, + 485, 486, 487, 476, 115, 108, 477, 488, 489, 363, + 364, 116, 490, 110, 109, 479, 481, 117, 491, 248, + 36, 394, 524, 301, 59, 305, 276, 421, 47, 368, + 676, 46, 633, 519, 573, 637, 361, 357, 472, 54, + 574, 575, 576, 577, 494, 657, 360, 332, 356, 671, + 4, 294, 495, 658, 63, 233, 373, 372, 374, 283, + 417, 353, 578, 579, 580, 255, 83, 581, 343, 22, + 582, 583, 395, 290, 584, 57, 585, 586, 424, 264, + 587, 55, 659, 40, 588, 269, 673, 660, 589, 312, + 313, 590, 591, 632, 592, 271, 593, 397, 594, 620, + 621, 396, 367, 369, 520, 278, 398, 236, 526, 595, + 311, 337, 268, 664, 596, 256, 508, 509, 510, 511, + 645, 516, 515, 270, 275, 263, 425, 257, 597, 598, + 599, 600, 601, 304, 617, 602, 603, 323, 666, 473, + 44, 604, 605, 606, 607, 608, 298, 293, 419, 428, + 62, 84, 380, 609, 610, 643, 331, 328, 291, 611, + 320, 56, 667, 668, 669, 285, 670, 501, 502, 503, + 504, 10, 677, 678, 496, 400, 127, 295, 296, 48, + 354, 277, 612, 308, 613, 344, 345, 359, 330, 355, + 629, 321, 627, 279, 401, 474, 265, 614, 427, 292, + 376, 381, 309, 530, 513, 284, 402, 642, 529, 505, + 506, 352, 349, 286, 507, 615, 631, 403, 240, 280, + 281, 616, 628, 404, 405, 302, 406, 314, 316, 416, + 317, 318, 407, 408, 409, 410, 413, 414, 415, 412, + 315, 411, 630, 624, 625, 287, 528, 326, 347, 382, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 471, 238, + -79, 238, -190, -299, 238, 238, 96, 526, 651, -271, + 414, 415, 384, -289, 386, 399, 394, 404, 392, -280, + 395, 397, 278, -400, 418, 238, 401, 225, 387, 396, + 405, 406, 314, 416, 316, 302, 412, 407, 315, 411, + 287, 408, 409, 410, 413, -383, 177, 655, 670, 135, + 351, 391, 389, 419, 633, 91, -305, 91, 92, 93, + -292, 321, -307, 326, -293, -383, -292, 324, -79, -79, + -309, -309, -129, 633, 636, -209, -144, 143, -159, -162, + -150, -154, -203, -204, -205, -206, -160, -219, -258, 166, + 167, 174, 144, -215, -163, 27, 521, 465, 464, 177, + 32, -153, 220, 69, 70, 467, 146, 58, 12, 440, + 441, -161, 435, 442, 437, 492, 494, 495, 496, 493, + 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 497, 469, 470, 118, 471, 108, 110, 109, 472, 473, + 474, 348, 519, 520, 514, 517, 518, 516, 515, 363, + 364, 475, 476, 477, 111, 112, 113, 114, 115, 116, + 117, 478, 481, 479, 480, 482, 483, 484, 489, 490, + 485, 486, 487, 488, 491, -89, -101, 547, 546, -102, + -151, -152, -165, -166, -293, -299, 243, 434, 237, 172, + 463, -155, -148, -217, 107, 92, 93, -8, -213, 433, + 438, 439, 443, 436, 533, 535, 550, 551, 553, 538, + 543, 542, 545, 508, 509, 510, 511, 512, 513, 618, + 619, 620, 621, 622, 623, 624, 625, -383, -292, 91, + -157, -156, -199, 94, 99, 102, 103, 105, -406, 261, + 344, 345, 119, -417, 648, 90, 95, 96, 97, 98, + 120, 121, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 45, 400, 400, -190, -79, -79, + -79, -79, -229, -127, -231, -10, -8, -417, -79, -8, + -9, -13, -35, -37, 552, -36, -299, 100, -236, -252, + 13, 162, 43, 51, -234, -235, -12, -8, -144, 20, + 24, 25, -132, 168, -144, -299, -132, -278, 242, -79, + -79, -267, -312, 321, -269, 419, 633, 418, -259, -272, + 91, -258, -271, 417, -12, -353, 159, -339, -343, -293, + 253, -369, 249, -190, -79, -362, -361, -293, -417, -128, + -288, 239, 247, 246, 136, -387, 139, 295, 434, 237, + -52, -53, -54, -271, 176, 654, -110, 270, 274, 88, + 88, -343, -342, -341, -388, 274, 253, -368, -360, 245, + 254, -349, 246, 247, -344, 239, 137, -388, -344, 244, + 254, 249, 253, 274, 274, 127, 274, 127, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 269, -350, 151, + -350, 529, 529, -356, -388, 249, 239, -388, -388, 245, + -290, -344, 241, 26, 241, 36, 36, -350, -350, -350, + -271, 176, -350, -350, -350, -350, 282, 282, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, 238, -387, -136, 411, 302, + 316, 314, 82, -55, 284, -38, -190, -288, 239, 240, + -387, 271, -190, 221, -190, -414, -190, 96, 96, -282, + 159, 16, -282, -279, 400, 398, 385, 390, -282, -282, + -282, -282, 285, 383, -345, 239, 36, 250, 400, 285, + 383, 285, 286, 285, 286, 393, 403, 285, -304, 15, + 162, 434, 388, 392, 278, 238, 279, 240, 402, 286, + -304, -304, 90, -304, 90, 90, -283, 159, 285, 400, + 281, -282, -282, -310, -417, -295, -293, -291, 230, 24, + 142, 26, 28, 145, 177, 130, 20, 146, 38, 232, + 351, 249, 176, 245, 464, 225, 73, 533, 435, 437, + 433, 440, 466, 467, 434, 386, 32, 14, 535, 29, + 259, 25, 39, 170, 227, 149, 536, 262, 27, 260, + 118, 121, 538, 23, 76, 254, 15, 247, 41, 17, + 539, 540, 18, 243, 242, 162, 239, 71, 12, 220, + 30, 158, 67, 541, 137, 542, 543, 544, 545, 131, + 69, 159, 21, 674, 438, 439, 34, 634, 521, 273, + 172, 74, 60, 636, 143, 436, 546, 547, 119, 548, + 122, 77, 641, 139, 19, 72, 43, 549, 274, 550, + 244, 675, 551, 422, 552, 160, 228, 463, 70, 161, + 648, 553, 649, 237, 399, 9, 468, 33, 258, 246, + 129, 68, 554, 238, 148, 469, 470, 241, 132, 120, + 8, 136, 35, 13, 75, 78, 441, 442, 443, 58, + 128, 525, 147, 16, 555, 423, 141, 635, 429, 430, + 431, 432, -383, 637, -310, -310, 33, 92, -409, -410, + -411, 525, 422, 241, -293, -190, -85, 626, 229, -86, + 632, 24, 236, -134, 400, -122, 177, 655, 638, 639, + 640, 637, 397, 645, 643, 641, 285, 642, 88, 139, + 141, 142, 4, -144, 158, -200, 151, 152, 153, 154, + 155, 156, 157, 162, 143, 145, 159, -245, 140, 163, + 164, 165, 166, 167, 168, 169, 171, 170, 172, 173, + 160, 161, 176, 223, 224, -154, -154, -154, -154, -215, + -221, -220, -417, -217, -383, -292, -299, -417, -417, -154, + -277, -417, -417, -150, -417, -417, -417, -224, -144, -417, + -417, -421, -417, -421, -421, -328, -417, -328, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, 221, -417, -417, -417, -417, -417, + -328, -328, -328, -328, -328, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, 103, + 99, 102, 94, -219, 105, 90, 90, 90, 90, -8, + -9, -209, -417, -309, -397, -398, -193, -190, -417, 302, + 314, -293, -293, 271, -234, -12, -8, -229, -235, -231, + -8, -120, -133, 64, 65, -135, 25, 39, 68, 66, + 24, -418, 89, -418, -252, -418, 88, -37, -255, 87, + 62, 44, 90, 90, 88, 22, -230, -232, -144, 15, + -297, 4, -296, 26, -293, 90, 221, 15, -191, 30, + -190, -278, -278, 88, 91, 321, -268, -270, 420, 422, + 151, -298, -293, 90, 32, 89, 88, -190, -317, -320, + -322, -321, -323, -318, -319, 348, 349, 177, 352, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 365, 33, + 261, 344, 345, 346, 347, 366, 367, 368, 369, 371, + 372, 373, 374, 329, 350, 523, 330, 331, 332, 333, + 334, 335, 337, 338, 341, 339, 340, 342, 343, -384, + -383, 87, 64, 65, 89, 88, -324, 87, -144, -136, + 238, -383, 239, 239, 239, -79, 463, -350, -350, -350, + 269, 20, -45, -42, -376, 19, -41, -42, 230, 123, + 124, 227, 87, -339, 87, -348, -384, -383, 87, 137, + 244, 136, -347, -344, -347, -348, -383, -217, -383, 137, + 137, -383, -383, -264, -293, -264, -264, 24, -264, 24, + -264, 24, 96, -293, -264, 24, -264, 24, -264, 24, + -264, 24, -264, 24, 32, 79, 80, 81, 32, 83, + 84, 85, -217, -383, -383, -217, -339, -217, -190, -383, + -271, 96, 96, 96, -350, -350, 96, 90, 90, 90, + -350, -350, 96, 90, -301, -299, 90, 90, -389, 255, + 299, 301, 96, 96, 96, 96, 32, 90, -390, 32, + 662, 661, 663, 664, 665, 90, 96, 32, 96, 32, + 96, -293, 87, -190, -142, 289, 225, 227, 230, 77, + 90, 305, 306, 303, 312, 313, 308, 309, 90, 305, + 303, 312, 313, 308, 309, 90, 305, 306, 303, 312, + 313, 308, 309, 151, 45, 88, 241, 238, -383, -284, + 243, -284, -293, -300, -299, -291, -413, 88, -412, 23, + 429, 430, 432, 389, 431, 90, -144, -346, 15, 162, + -304, -304, -282, -190, -346, -304, -282, -190, -282, -282, + -282, -282, -304, -304, -304, -282, -299, -299, -190, -190, + -190, -190, -190, -190, -190, -310, -283, -282, -282, 637, + -282, 317, 637, 90, -276, 15, 77, -310, -310, 88, + 327, 423, 424, -308, 324, -81, -293, 90, -15, -11, + -23, -22, -24, 151, -15, 88, 525, -183, -190, 637, + 637, 637, 637, 637, 637, -144, -144, -144, -144, 548, + -207, 119, 143, 120, 121, -162, -208, -213, -215, 106, + 162, 145, 159, -245, -150, -154, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -311, + -293, 90, 177, -158, -157, 105, -406, -158, 522, 88, + -220, 221, -144, -144, -383, -144, -293, -130, -132, -130, + -144, -222, -223, 147, -217, -144, -418, -418, 96, 105, + 168, -126, 25, 39, -126, -126, -126, -126, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -126, -293, + -293, -119, -118, 445, 446, 447, 448, 450, 451, 452, + 455, 456, 460, 461, 444, 462, 449, 454, 457, 458, + 459, 453, 347, -144, -144, -144, -144, -144, -144, -87, + -144, 130, 131, 132, -209, -144, -150, -144, -144, -144, + -418, -144, -144, -144, -210, -209, -382, -381, -380, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -418, -144, -164, -148, 96, -260, 105, 92, + -144, -144, -131, -130, -295, -300, -291, -292, -130, -131, + -131, -130, -130, -144, -144, -144, -144, -144, -144, -144, + -144, -418, -144, -144, -144, -144, -144, -252, -418, -209, + 88, -399, 422, 423, 634, -302, 274, -301, 26, -210, + 90, 90, 15, -262, 78, -293, -234, -234, 60, -130, + -135, -418, -36, 26, -254, -293, 63, 90, -329, -271, + 375, 376, 177, -144, -144, 88, -233, 28, 29, -190, + -296, 168, -300, -190, -263, 274, -190, -168, -170, -171, + -172, -193, -216, -417, -173, -8, 544, 541, 15, -183, + -184, -192, -299, -269, -312, -268, 88, 421, 423, 424, + 77, 122, -144, -330, 176, -358, -357, -356, -339, -341, + -342, -343, 89, -330, -335, 381, 380, -324, -324, -324, + -324, -324, -329, -329, -329, -329, 87, 87, -324, -324, + -324, -324, -332, 87, -332, -332, -333, -332, 87, -333, + -334, 87, -334, -369, -144, -366, -365, -363, -364, 248, + 101, 616, 572, 525, 565, 606, 78, -361, -233, 96, + -418, -142, -285, 243, -367, -364, -383, -383, -383, -285, + 91, 90, 91, 90, 91, 90, -111, -59, -1, 674, + 675, 676, 88, 20, -340, -339, -58, 299, -372, -373, + 274, -368, -362, -348, 137, -347, -348, -348, -383, 88, + 30, 127, 127, 127, 127, 525, 227, 33, -286, 564, + 143, 616, 572, -339, -58, 241, 241, -311, -311, -311, + 90, 90, -281, 670, -183, -138, 291, 151, 280, 280, + 238, 238, 293, -190, 304, 307, 305, 306, 303, 312, + 313, 308, 309, 24, 24, 24, 24, 24, 24, 24, + 305, 303, 312, 313, 308, 309, 318, 24, 24, 24, + 24, 24, 24, 304, 307, 305, 306, 303, 312, 313, + 308, 309, 24, 24, 24, 24, 24, 24, 24, 292, + 294, 296, 282, -190, -190, -284, 77, -185, -190, 27, + -299, -412, -190, 284, -190, -282, -282, -190, -282, -282, + -190, -411, 328, -293, 362, 627, 628, 630, 629, -122, + 422, 88, 525, 23, -123, 23, -417, 119, 120, 121, + -208, -150, -154, -150, 142, 262, -417, -217, -418, -295, + 26, 88, 78, -418, 88, 88, -418, -418, 88, 15, + -225, -223, 149, -144, -418, 88, -418, -418, -418, -209, + -144, -144, -144, -144, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -209, 88, 88, 15, -315, 26, + -418, -418, -418, -418, -418, -224, -418, 15, -418, 78, + 88, 162, 88, -418, -418, -418, 88, 88, -418, -418, + 88, 88, -418, 88, 88, 88, -418, 88, 88, 88, + 88, -418, -418, -418, -418, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, -418, -94, 549, -418, -418, + 88, -418, 88, -418, -417, 221, -418, -418, -418, -418, + -418, 88, 88, 88, 88, 88, 88, -418, -418, -418, + 88, 88, -418, 88, -418, 88, -418, -398, 633, 423, + -197, -196, -194, 75, 242, 76, -417, -301, -418, -158, + -260, -261, -260, -202, -293, 96, 105, -236, -167, -169, + 15, -135, -215, 89, 88, -329, -240, -246, -279, -293, + 90, 177, -331, 177, -331, 375, 376, -232, 221, -198, + 16, -201, 33, 58, -11, -417, -417, 33, 88, -186, + -188, -187, -189, 67, 71, 73, 68, 69, 70, 74, + -306, 26, -8, -168, -8, -417, -190, -183, -419, 15, + 78, -419, 88, 221, -270, -273, 425, 422, 428, -383, + 90, -110, 88, -356, -343, -237, -139, 41, -336, 382, + -329, 532, -329, -338, 90, -338, 96, 96, 96, 89, + -48, -43, -44, 34, 82, -363, -350, 90, 40, -350, + -350, -293, 89, -233, -138, -190, 143, 77, -367, -367, + -367, -299, -2, 673, 679, 137, 87, 385, 19, -254, + 88, 89, -218, 300, 89, -112, -293, 89, 87, -348, + -348, -293, -417, 238, 32, 32, 616, 572, 564, -58, + -218, -217, -383, -330, 672, 671, 89, 240, 298, -143, + 440, -140, 90, 91, -190, -190, -190, -190, -190, 230, + 227, 408, -407, 310, -407, -407, 90, -407, 408, -407, + -407, 283, 241, -183, -190, 88, -84, 257, 252, -304, + -304, 34, -190, 422, 646, 644, -144, 142, 262, -162, + -154, -150, -313, 177, 348, 261, 346, 342, 362, 353, + 380, 344, 381, 339, 338, 337, -313, -311, -209, -132, + -144, -144, 150, -144, 148, -144, -418, -418, -418, -418, + -418, -229, -144, -144, -144, -418, 177, 348, 15, -144, + -311, -144, -144, -144, -144, -144, -380, -144, -209, -144, + -209, -144, -144, -144, -144, -144, -381, -381, -381, -381, + -381, -209, -209, -209, -209, -417, -293, -97, -96, -95, + 599, 242, -94, -164, -97, -164, -131, -295, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -194, -344, + -344, -344, -264, 88, -275, 23, 15, 58, 58, -167, + -198, -168, -135, -293, -243, 626, -249, 47, -247, -248, + 48, -244, 49, 57, -331, -331, 168, -234, -144, -265, + 77, -266, -274, -217, -212, -214, -213, -417, -253, -418, + -293, -264, -266, -170, -171, -171, -170, -171, 67, 67, + 67, 72, 67, 72, 67, -187, -299, -418, -144, -302, + 78, -168, -168, -192, -299, 168, 422, 426, 427, -356, + -405, 119, 143, 32, 77, 378, 101, -403, 176, 561, + 611, 616, 572, 565, 606, -404, 244, 136, 137, 256, + 26, 42, 89, 88, 89, 88, 89, 89, 88, -287, + -286, -44, -43, -350, -350, 96, -383, 90, 90, 240, + 27, -190, 77, 77, 77, -113, 677, 96, 87, -3, + 82, -144, 87, 20, -339, -217, -374, -325, -375, -326, + -327, -5, -6, -351, -116, 58, 101, -62, 45, 239, + 657, 658, 127, -417, 670, -366, -254, -370, -372, -190, + -147, -417, -146, -148, -155, 166, 167, 261, 344, 345, + -218, -190, -137, 289, 297, 87, -141, 92, -386, 78, + 280, 378, 280, 90, -408, 311, 90, -408, -408, 90, + -408, 90, -408, -408, -190, -84, -48, -190, -282, -282, + 34, -383, -418, -162, -154, -125, 162, 525, -316, 531, + -324, -324, -324, -334, -324, 334, -324, 334, -324, -418, + -418, -418, 88, -418, 23, -418, -144, 88, -121, 468, + 88, 88, -418, 87, 87, -144, -418, -418, -418, 88, + -418, -418, -418, -418, -418, 88, -418, -418, -418, 88, + -314, 617, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -93, -294, -293, -94, 581, 581, -418, -94, + -226, 88, -418, -418, 88, -418, 88, 88, -418, 88, + -418, 88, -418, -418, -418, -418, 88, -195, 23, -195, + -195, -418, -260, -190, -198, -227, 17, -240, 52, 354, + -251, -250, 56, 48, -248, 20, 50, 20, 31, -265, + 88, 151, 88, -418, -418, 88, 58, 221, -418, -198, + -181, -180, 77, 78, -182, 77, -180, 67, 67, -255, + 88, -263, -168, -198, -198, 221, 119, -417, -149, -161, + -147, 13, 90, 90, -383, -402, 661, 662, 32, 96, + -350, -350, 137, 137, -190, 87, -329, 90, -329, 96, + 96, 32, 83, 84, 85, 32, 79, 80, 81, -190, + -190, -190, -190, -371, 87, 20, -144, 87, 151, 89, + -254, -254, 276, 162, -350, 655, 282, 282, -350, -350, + -350, -115, -114, 677, 89, -418, 88, -337, 525, 528, + -144, -156, -156, -255, 89, -379, 525, -385, -293, -293, + -293, -293, 96, 98, 90, -418, 523, 74, 526, -418, + -329, -144, -144, -144, -234, 90, -144, -144, 96, 96, + -418, -144, -209, -144, -418, -178, -177, -179, 638, 119, + 32, -313, -418, -211, 274, -100, -99, -98, 15, -418, + -144, -144, -144, -144, -144, -144, -144, -417, 67, 19, + 17, -417, -417, -302, -227, -228, 18, 20, -241, 54, + -239, 53, -239, -250, 20, 20, 90, 20, 90, 137, + -274, -144, -214, 58, -11, -293, -212, -293, -229, -144, + 87, -144, -158, -198, -198, -144, -204, 492, 494, 495, + 496, 493, 498, 499, 500, 501, 502, 503, 504, 505, + 506, 507, 497, 471, 108, 110, 109, 472, 473, 474, + 348, 519, 520, 514, 517, 518, 516, 515, 363, 364, + 475, 476, 477, 111, 112, 113, 114, 115, 116, 117, + 478, 481, 479, 482, 483, 484, 489, 490, 485, 486, + 487, 488, 491, 508, 509, 510, 511, 512, 513, 618, + 619, 620, 621, 622, 623, 624, 625, 90, 90, 87, + -144, 89, 89, -255, -370, -59, 89, -256, -254, 96, + 89, 277, -213, -417, 90, -350, -350, -350, 96, 96, + -301, -418, 88, -293, -404, -372, 529, 529, -418, 26, + -378, -377, -295, 87, 78, 63, 524, 527, -418, -418, + 88, -418, -418, -418, 89, 89, -418, -418, -418, 88, + -418, -177, -179, -418, 77, -158, -229, 20, -97, 299, + 301, -97, -418, 88, -418, -418, 88, -418, 88, -418, + -418, -257, -418, -293, 244, 20, 20, -257, -257, -197, + -228, -107, -106, -105, 555, -144, -209, -242, 55, 77, + 122, 90, 90, 90, 13, -212, 221, -234, -254, -175, + 385, -229, -418, -254, 89, 26, 89, 679, 137, 89, + -213, -124, -417, 273, -301, 90, 90, -114, -117, -11, + 88, 151, -254, -190, 63, -144, -209, -418, 77, 536, + 638, -92, -91, -88, 649, 675, -209, -94, -94, -144, + -144, -144, 88, -418, -418, -418, -107, 88, -104, -103, + -293, 77, 122, -266, -293, 89, -418, -417, -234, 89, + -238, -11, 87, -3, 273, -325, -375, -326, -327, -5, + -6, -351, -82, 525, -377, -355, -295, 90, 96, 89, + 525, -418, -418, -90, 145, 647, 614, -145, -156, -153, + 220, -418, 88, -418, 88, -418, 88, -293, 244, -105, + 88, 26, -302, -176, -174, -293, 578, -395, -394, 521, + -405, -401, 119, 143, 101, -403, 616, 572, 128, 129, + -82, -144, 87, -418, -83, 288, 633, -386, 526, -90, + 648, 592, 567, 592, 567, -144, -144, -144, -103, -417, + -418, 88, 23, -317, -61, 589, -392, -393, 77, -396, + 391, 588, 609, 119, 90, 89, -254, 249, -379, 527, + 142, -418, 88, -418, 88, -418, -93, -174, 585, -330, + -158, -393, 77, -392, 77, 14, 13, -4, 678, 89, + 290, -90, -144, -144, -418, -60, 27, -175, -391, 257, + 252, 255, 33, -391, 96, -4, -418, -418, 589, 251, + 32, 119, -158, -178, -177, -177, +} + +var yyDef = [...]int{ + 925, -2, -2, 927, 2, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 72, 74, 75, 925, 925, 925, 0, 925, 0, + 0, 925, -2, -2, 925, 1542, 0, 925, 0, 0, + 0, 0, -2, 839, 845, 0, 854, -2, 0, 0, + 925, 925, 2112, 2112, 920, 0, 0, 0, 0, 0, + 925, 925, 925, 925, 1399, 52, 925, 0, 87, 88, + 874, 875, 876, 67, 0, 2110, 926, 1, 3, 73, + 77, 0, 0, 0, 60, 1408, 0, 80, 0, 0, + 929, 0, 0, 1525, 925, 925, 0, 128, 129, 130, + 0, 0, 0, 925, 0, -2, 134, -2, 163, 164, + 165, 0, 170, 638, 526, 578, 524, 563, -2, 512, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 529, 402, 402, 0, 0, -2, 512, 512, + 512, 1527, 0, 0, 0, 560, 464, 402, 402, 402, + 0, 402, 402, 402, 402, 0, 0, 402, 402, 402, + 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, + 402, 402, 402, 402, 1426, 169, 1543, 1540, 1541, 1700, + 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, + 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, + 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, + 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, + 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, + 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, + 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, + 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, + 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, + 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, + 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, + 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, + 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, + 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, + 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, + 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, + 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, + 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, + 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, + 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, + 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, + 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, + 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, + 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, + 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, + 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, + 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, + 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, + 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, + 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, + 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, + 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, + 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, + 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, + 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, + 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, + 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, + 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, + 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, + 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, + 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 0, + 1519, 0, 751, 1028, 0, 0, 756, 0, 0, 828, + 760, 761, 828, 0, 828, 828, 828, 828, 0, 0, + 0, 771, 0, 0, 0, 0, 825, 0, 787, 788, + 0, 825, 825, 825, 0, 0, 799, 831, 0, 0, + 805, 828, 828, 808, 809, 2113, 0, 2113, 2113, 1510, + 0, 822, 820, 834, 835, 42, 838, 841, 842, 843, + 844, 847, 0, 858, 861, 1536, 1537, 0, 863, 870, + 887, 888, 0, 921, 922, 47, 1176, 0, 1050, 1055, + 1066, 1081, 1082, 1083, 1084, 1085, 1087, 1088, 1089, 0, + 0, 0, 0, 1094, 1095, 0, 0, 0, 0, 0, + 1157, 1103, 0, 0, 0, 0, 1372, 0, 0, 1333, + 1333, 1191, 1333, 1335, 1335, 1749, 1885, 1893, 2015, 1711, + 1716, 1717, 1718, 2008, 2009, 2010, 2011, 2050, 2051, 2055, + 1809, 0, 0, 0, 2109, 1846, 1854, 1855, 1879, 1980, + 2036, 1728, 1874, 1945, 1806, 1828, 1829, 1962, 1963, 1850, + 1851, 1832, 1844, 1847, 1835, 1836, 1838, 1840, 1845, 1852, + 1858, 1837, 1857, 1856, 0, 1833, 1834, 1839, 1849, 1853, + 1841, 1842, 1843, 1848, 1859, 0, 0, 0, 0, 0, + 1272, 1273, 1274, 1275, 0, 0, 0, 0, 0, 0, + 0, 294, 295, 1385, 1386, 45, 46, 1175, 1506, 1335, + 1335, 1335, 1335, 1335, 1117, 1118, 1119, 1120, 1121, 1145, + 1146, 1152, 1153, 1957, 1958, 1959, 1960, 1790, 2045, 1798, + 1799, 1940, 1941, 1811, 1812, 2084, 2085, -2, -2, -2, + 235, 236, 237, 238, 239, 240, 241, 242, 0, 1753, + 2026, 2027, 231, 0, 0, 299, 300, 296, 297, 298, + 1159, 1160, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 2112, 0, 897, 0, 0, 0, + 0, 0, 1408, 0, 1400, 1399, 65, 0, -2, 0, + 0, 0, 0, 49, 0, 54, 985, 928, 79, 78, + 1457, 0, 0, 0, 61, 1409, 69, 71, 1410, 0, + 930, 931, 0, 961, 965, 0, 0, 0, 1526, 1525, + 1525, 104, 0, 0, 105, 125, 126, 127, 0, 0, + 111, 112, 1512, 1513, 131, 0, 0, 181, 182, 0, + 43, 429, 0, 177, 947, 0, 422, 361, 0, 1426, + 0, 0, 0, 0, 0, 925, 0, 1520, 158, 159, + 166, 167, 168, 402, 402, 402, 575, 0, 0, 169, + 169, 533, 534, 535, 0, 0, -2, 427, 0, 513, + 0, 0, 416, 416, 420, 418, 419, 0, 0, 0, + 0, 0, 0, 0, 0, 552, 0, 553, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 699, 0, 403, + 0, 573, 574, 465, 0, 0, 0, 0, 0, 0, + 0, 0, 1528, 1529, 0, 550, 551, 0, 0, 0, + 402, 402, 0, 0, 0, 0, 402, 402, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 157, 1448, 0, 0, + 0, 0, 0, -2, 0, 743, 0, 0, 0, 1521, + 1521, 0, 750, 0, 752, 1439, 754, 757, 758, 759, + 0, 0, 762, 0, 825, 825, 823, 824, 764, 765, + 766, 767, 828, 0, 0, 411, 412, 413, 825, 828, + 0, 828, 828, 828, 828, 825, 825, 825, 828, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2113, 831, + 828, 828, 0, 828, 795, 0, 800, 0, 801, 802, + 803, 806, 807, 810, 2114, 2115, 1538, 1539, 1546, 1547, + 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, + 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, + 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, + 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, + 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, + 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, + 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, + 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, + 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, + 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, + 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, + 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, + 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, + 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, + 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, + 1698, 1699, 2113, 2113, 814, 818, 1511, 840, 846, 848, + 849, 0, 0, 859, 862, 881, 51, 1797, 869, 51, + 871, 872, 873, 900, 901, 906, 0, 0, 0, 0, + 912, 913, 914, 0, 0, 917, 918, 919, 0, 0, + 0, 0, 0, 1048, 0, 0, 1165, 1166, 1167, 1168, + 1169, 1170, 1171, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1067, 1068, 0, 0, 0, 1090, 1091, 1092, 1093, 1096, + 0, 1108, 0, 1110, 1381, -2, 0, 0, 0, 1101, + 1102, 0, 0, 0, 0, 0, 0, 0, 1373, 0, + 0, 1189, 0, 1190, 1192, 1193, 0, 1194, 935, 935, + 935, 935, 935, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 935, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1531, 145, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 945, 0, 0, 945, 945, 0, 0, + 224, 225, 226, 227, 228, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, + 244, 245, 246, 247, 248, 301, 249, 250, 251, 1175, + 0, 0, 0, 48, 889, 890, 0, 1011, 1531, 0, + 0, 0, 941, 0, 59, 68, 70, 1408, 63, 1408, + 0, 0, 0, -2, -2, 948, 954, 955, 956, 957, + 958, 56, 2111, 57, 0, 76, 0, 50, 0, 0, + 0, 0, 375, 1460, 0, 0, 1401, 1402, 1405, 0, + 962, 1891, 966, 0, 968, 969, 0, 0, 102, 0, + 1027, 0, 0, 0, 113, 0, 115, 116, 0, 0, + 0, 386, 1514, 1515, 1516, -2, 409, 0, 386, 370, + 309, 310, 311, 361, 313, 361, 361, 361, 361, 375, + 375, 375, 375, 344, 345, 346, 347, 348, 0, 0, + 330, 361, 361, 361, 361, 351, 352, 353, 354, 355, + 356, 357, 358, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 363, 363, 363, 363, 363, 367, 367, 0, + 44, 0, 952, 953, 390, 0, 1405, 0, 0, 1448, + 1523, 1533, 0, 0, 0, 1523, 136, 0, 0, 0, + 576, 649, 527, 564, 577, 0, 530, 531, -2, 0, + 0, 512, 0, 514, 0, 410, 0, -2, 0, 420, + 0, 416, 420, 417, 420, 408, 421, 554, 555, 556, + 0, 558, 559, 679, 997, 0, 0, 0, 0, 0, + 685, 686, 687, 0, 689, 690, 691, 692, 693, 694, + 695, 696, 697, 698, 565, 566, 567, 568, 569, 570, + 571, 572, 0, 0, 0, 0, 514, 0, 561, 0, + 0, 466, 467, 468, 0, 0, 471, 472, 473, 474, + 0, 0, 477, 478, 479, 1014, 1015, 480, 481, 506, + 507, 508, 482, 483, 484, 485, 486, 487, 488, 500, + 501, 502, 503, 504, 505, 489, 490, 491, 492, 493, + 494, 497, 0, 151, 1430, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1521, 0, 0, + 0, 0, 944, 1029, 1544, 1545, 753, 0, 1440, 0, + 1443, 1444, 1445, 1446, 1447, 829, 830, 0, 414, 415, + 828, 828, 768, 815, 0, 828, 772, 816, 773, 775, + 774, 776, 789, 790, 828, 779, 826, 827, 780, 781, + 782, 783, 784, 785, 786, 811, 791, 792, 793, 798, + 794, 796, 797, 832, 0, 836, 837, 812, 813, 0, + 0, 852, 853, 0, 860, 884, 882, 883, 885, 877, + 878, 879, 880, 0, 886, 0, 0, 903, 98, 908, + 909, 910, 911, 923, 916, 1177, 1045, 1046, 1047, 0, + 1049, 1052, 0, 1161, 1163, 1054, 1056, 1172, 1173, 1174, + 0, 0, 0, 0, 0, 1060, 1064, 1069, 1070, 1071, + 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1086, + 1349, 1350, 1351, 1105, 302, 303, 0, 1106, 0, 0, + 0, 0, 0, 0, 0, 1176, 1107, 0, 959, 0, + 0, 1379, 1376, 0, 0, 0, 1334, 1336, 0, 0, + 0, 0, 936, 937, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, + 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, + 1330, 1331, 1332, 1352, 0, 0, 0, 0, 0, 1372, + 0, 1112, 1113, 1114, 0, 0, 0, 0, 0, 0, + 1232, 0, 0, 0, 0, 1532, 0, 146, 147, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1276, 1277, 1278, 1279, 41, + 0, 0, 0, 946, 1383, 0, -2, -2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1301, 0, 0, 0, 0, 0, 0, 1504, 0, + 0, 892, 893, 895, 0, 1031, 0, 1012, 0, 0, + 898, 899, 0, 940, 0, 943, 62, 64, 0, 970, + 949, 58, 53, 0, 0, 989, 1458, 375, 1480, 0, + 384, 384, 381, 1411, 1412, 0, 1404, 1406, 1407, 81, + 967, 963, 0, 1043, 0, 0, 1026, 0, 973, 975, + 976, 977, 1009, 0, 980, 981, 0, 0, 0, 0, + 0, 100, 1028, 106, 0, 114, 0, 0, 119, 120, + 107, 108, 109, 110, 0, 638, -2, 461, 183, 185, + 186, 187, 178, -2, 373, 371, 372, 312, 375, 375, + 338, 339, 340, 341, 342, 343, 0, 0, 331, 332, + 333, 334, 323, 0, 324, 325, 326, 365, 0, 327, + 328, 0, 329, 428, 0, 1413, 391, 392, 394, 402, + 0, 397, 398, 0, 402, 402, 0, 423, 424, 0, + 1405, 1430, 0, 0, 0, 1534, 1533, 1533, 1533, 0, + 171, 172, 173, 174, 175, 176, 674, 0, 0, 650, + 672, 673, 169, 0, 0, 179, 516, 515, 0, 706, + 0, 426, 0, 0, 420, 420, 405, 406, 557, 0, + 0, 681, 682, 683, 684, 0, 0, 0, 543, 455, + 0, 544, 545, 514, 516, 0, 0, 386, 469, 470, + 475, 476, 495, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 590, 591, 592, 595, 597, 598, + 599, 518, 605, 594, 596, 600, 601, 602, 518, 606, + 607, 609, 610, 611, 518, 617, 0, 608, 612, 613, + 614, 518, 618, 621, 622, 623, 626, 628, 629, 630, + 518, 636, 625, 627, 631, 632, 633, 518, 637, 1427, + 1428, 1429, 0, 0, 744, 0, 0, 452, 96, 1522, + 749, 1441, 755, 1442, 825, 778, 817, 825, 770, 777, + 804, 850, 851, 856, 864, 865, 866, 867, 868, 907, + 0, 0, 0, 0, 915, 0, 0, 1053, 1162, 1164, + 1057, 0, 1061, 1065, 0, 0, 0, 1111, 1109, 1383, + 0, 0, 0, 1158, 0, 0, 1180, 1181, 0, 0, + 0, 1377, 0, 0, 1187, 0, 1337, 1338, 1195, 0, + 0, 0, 0, 0, 1201, 1202, 1203, 1204, 1205, 1206, + 1207, 1208, 1209, 1210, 1399, 0, 0, 0, 0, 0, + 1216, 1217, 1218, 1219, 1220, 0, 1222, 0, 1223, 0, + 0, 0, 0, 1230, 1231, 1233, 0, 0, 1236, 1237, + 0, 0, 1238, 0, 0, 0, 1242, 0, 0, 0, + 0, 1251, 1252, 1253, 1254, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1265, 1266, 0, 1140, 0, + 0, 1140, 0, 1178, 945, 0, 1339, 1340, 1341, 1342, + 1343, 0, 0, 0, 0, 0, 0, 1299, 1300, 1302, + 0, 0, 1305, 0, 1307, 0, 1505, 891, 894, 896, + 983, 1032, 1033, 0, 0, 0, 0, 1013, 1530, 938, + 939, 942, 991, 0, 1387, 0, 0, 970, 1043, 971, + 0, 950, 55, 986, 0, 1462, 1461, 1474, 1487, 384, + 384, 378, 379, 385, 380, 382, 383, 1403, 0, 1408, + 0, 1498, 0, 0, 1490, 0, 0, 0, 0, 0, + 0, 0, 0, 1016, 0, 0, 1019, 0, 0, 0, + 0, 1010, 981, 0, 982, 0, -2, 0, 0, 94, + 95, 0, 0, 0, 117, 118, 0, 0, 124, 387, + 388, 160, 169, 463, 184, 436, 0, 0, 308, 374, + 335, 336, 337, 0, 359, 0, 0, 0, 0, 457, + 132, 1417, 1416, 402, 402, 393, 0, 396, 0, 0, + 0, 1535, 362, 425, 0, 150, 0, 0, 0, 0, + 0, 156, 644, 0, 0, 651, 0, 0, 0, 525, + 0, 536, 537, 0, 678, -2, 740, 390, 0, 404, + 407, 998, 0, 0, 538, 0, 541, 542, 456, 516, + 547, 548, 562, 549, 498, 499, 496, 0, 0, 1449, + 1450, 1455, 1453, 1454, 137, 583, 585, 584, 588, 0, + 0, 0, 520, 0, 520, 520, 0, 520, 0, 520, + 520, 581, 0, 452, 1413, 0, 748, 453, 454, 828, + 828, 902, 99, 0, 905, 0, 0, 0, 0, 1058, + 1062, 1344, 1370, 361, 361, 1357, 361, 367, 1360, 361, + 1362, 361, 1365, 361, 1368, 1369, 0, 0, 0, 960, + 0, 0, 1186, 1380, 0, 0, 1196, 1197, 1198, 1199, + 1200, 1374, 0, 0, 0, 1215, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 148, 149, 0, 0, + 0, 0, 0, 0, 1310, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1135, 1139, 0, 1141, 1142, + 0, 0, 1268, 0, 0, 1280, 0, 1384, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1034, 1039, + 1039, 1039, 0, 0, 0, 1517, 1518, 1388, 1389, 1043, + 1390, 972, 951, 990, 1480, 0, 1473, 0, -2, 1482, + 0, 0, 0, 1488, 376, 377, 964, 82, 1044, 85, + 0, 1498, 1507, 0, 1489, 1500, 1502, 0, 0, 0, + 1494, 0, 1043, 974, 1005, 1007, 0, 1002, 1017, 1018, + 1020, 0, 1022, 0, 1024, 1025, 985, 979, 0, 102, + 0, 1043, 1043, 101, 0, 1030, 121, 122, 123, 462, + 188, 193, 0, 0, 0, 198, 0, 200, 0, 0, + 0, 205, 206, 402, 402, 437, 0, 305, 307, 0, + 0, 191, 375, 0, 375, 0, 366, 368, 0, 438, + 458, 1414, 1415, 0, 0, 395, 399, 400, 401, 0, + 1524, 152, 0, 0, 0, 647, 0, 675, 0, 0, + 0, 0, 0, 0, 180, 517, 707, 708, 709, 710, + 711, 712, 713, 714, 715, 0, 402, 0, 0, 0, + 402, 402, 402, 0, 732, 389, 0, 0, 703, 700, + 539, 0, 229, 230, 232, 0, 0, 0, 0, 0, + 546, 985, 1431, 1432, 1433, 0, 1452, 1456, 140, 0, + 0, 0, 0, 593, 603, 0, 519, 604, 615, 619, + 616, 624, 634, 635, 745, 746, 747, 97, 763, 769, + 904, 924, 1051, 1059, 1063, 0, 0, 0, 0, 1371, + 1355, 375, 1358, 1359, 1361, 1363, 1364, 1366, 1367, 1099, + 1100, 1104, 0, 1183, 0, 1185, 1378, 0, 1408, 0, + 0, 0, 1214, 0, 0, 0, 1225, 1224, 1226, 0, + 1228, 1229, 1234, 1235, 1239, 0, 1241, 1243, 1244, 0, + 0, 0, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, + 1263, 1264, 0, 1133, 1136, 1267, 1143, 1144, 1149, 1270, + 0, 0, 1179, 1282, 0, 1287, 0, 0, 1293, 0, + 1297, 0, 1303, 1304, 1306, 1308, 0, 0, 0, 0, + 0, 1011, 992, 66, 1390, 1392, 0, 1467, 1465, 1465, + 1475, 1476, 0, 0, 1483, 0, 0, 0, 0, 86, + 0, 0, 0, 1503, 0, 0, 0, 0, 103, 1399, + 999, 1006, 0, 0, 1000, 0, 1001, 1021, 1023, 978, + 0, 1043, 1043, 92, 93, 0, 194, 0, 196, 222, + 223, 0, 199, 201, 202, 203, 209, 210, 211, 204, + 0, 0, 304, 306, 0, 0, 349, 360, 350, 0, + 0, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 985, + 153, 154, 155, 639, 0, 649, 0, 987, 0, 642, + 0, 528, 0, 0, 0, 402, 402, 402, 0, 0, + 0, 0, 717, 0, 0, 680, 0, 688, 0, 0, + 0, 233, 234, 0, 1451, 582, 0, 138, 139, 0, + 0, 587, 521, 522, 620, 1097, 0, 0, 0, 1098, + 1356, 0, 0, 0, 0, 1375, 0, 0, 0, 0, + 1221, 0, 0, 0, 1247, 0, 0, 0, 669, 670, + 0, 1311, 1138, 1399, 0, 1140, 1150, 1151, 0, 1140, + 1281, 0, 0, 0, 0, 0, 0, 0, 1040, 0, + 0, 0, 0, 1031, 1392, 1397, 0, 0, 1470, 0, + 1463, 1466, 1464, 1477, 0, 0, 1484, 0, 1486, 0, + 1508, 1509, 1501, 0, 1493, 1496, 1492, 1495, 1408, 1003, + 0, 1008, 0, 1399, 91, 0, 197, 0, 0, 0, +>>>>>>> e439161508 (fix: complete time period feature) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +<<<<<<< HEAD 0, 0, 0, 208, 209, 0, 0, 365, 370, 0, 0, 0, 640, 0, 991, 652, 643, 0, 730, 0, 734, 0, 0, 0, 737, 738, 739, 716, 0, 720, @@ -8689,6 +14975,40 @@ var yyDef = [...]int{ 1157, 0, 666, 662, 446, 448, 449, 0, 0, 447, 677, 646, 1289, 1295, 0, 450, 451, 452, 658, 659, 660, 661, +======= + 0, 0, 0, 0, 0, 0, 0, 207, 208, 0, + 0, 364, 369, 0, 0, 0, 640, 0, 988, 652, + 643, 0, 730, 0, 734, 0, 0, 0, 737, 738, + 739, 716, 0, 720, 430, 704, 701, 702, 540, 0, + 141, 142, 0, 0, 0, 1345, 0, 1348, 1182, 1184, + 0, 1211, 1212, 1213, 1353, 1354, 1227, 1240, 1245, 0, + 1248, 0, 0, 1249, 0, 671, 1129, 0, 0, 1147, + 1148, 0, 1283, 0, 1288, 1289, 0, 1294, 0, 1298, + 1309, 0, 1036, 993, 994, 1041, 1042, 0, 0, 984, + 1397, 84, 1398, 1395, 0, 1393, 1391, 1459, 0, 1468, + 1469, 1478, 1479, 1485, 0, 1491, 0, 89, 0, 0, + 0, 1408, 195, 0, 214, 0, 648, 0, 651, 641, + 728, 729, 0, 741, 733, 735, 736, 718, -2, 1434, + 0, 0, 0, 589, 1346, 0, 0, 1250, 0, 667, + 668, 1137, 1130, 0, 1115, 1116, 1134, 1269, 1271, 0, + 0, 0, 0, 1035, 1037, 1038, 83, 0, 1394, 1155, + 0, 1471, 1472, 1499, 1497, 1004, 1011, 0, 90, 443, + 436, 1434, 0, 0, 0, 721, 722, 723, 724, 725, + 726, 727, 579, 1436, 143, 144, 509, 510, 511, 137, + 0, 1188, 1246, 1131, 0, 0, 0, 0, 1127, 1128, + 0, 1284, 0, 1290, 0, 1295, 0, 995, 996, 1396, + 0, 0, 653, 0, 655, 0, -2, 431, 444, 0, + 189, 215, 216, 0, 0, 219, 220, 221, 212, 213, + 133, 0, 0, 742, 0, 1437, 1438, 140, 0, 0, + 1122, 1123, 1124, 1125, 1126, 0, 0, 0, 1156, 1135, + 654, 0, 0, 386, 0, 664, 432, 433, 0, 439, + 440, 441, 442, 217, 218, 676, 0, 0, 586, 1347, + 0, 1285, 0, 1291, 0, 1296, 0, 656, 657, 665, + 0, 434, 0, 435, 0, 0, 0, 645, 0, 676, + 1435, 1132, 0, 0, 1154, 0, 666, 662, 445, 447, + 448, 0, 0, 446, 677, 646, 1286, 1292, 0, 449, + 450, 451, 658, 659, 660, 661, +>>>>>>> e439161508 (fix: complete time period feature) } var yyTok1 = [...]int{ @@ -13586,10 +19906,31 @@ yydefault: } } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 621: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement //line sql.y:3520 +======= + case 620: + yyDollar = yyS[yypt-8 : yypt+1] + var yyLOCAL Statement +//line sql.y:3514 + { + yyLOCAL = &AlterDMLJob{ + Type: SetRunningTimePeriodType, + UUID: string(yyDollar[4].str), + TimePeriodStart: string(yyDollar[6].str), + TimePeriodEnd: string(yyDollar[7].str), + TimePeriodTimeZone: string(yyDollar[8].str), + } + } + yyVAL.union = yyLOCAL + case 621: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Statement +//line sql.y:3527 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &AlterMigration{ Type: RetryMigrationType, @@ -13600,7 +19941,11 @@ yydefault: case 622: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:3527 +======= +//line sql.y:3534 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &AlterMigration{ Type: CleanupMigrationType, @@ -13611,7 +19956,11 @@ yydefault: case 623: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:3534 +======= +//line sql.y:3541 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &AlterMigration{ Type: LaunchMigrationType, @@ -13622,7 +19971,11 @@ yydefault: case 624: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:3541 +======= +//line sql.y:3548 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &AlterMigration{ Type: LaunchMigrationType, @@ -13634,7 +19987,11 @@ yydefault: case 625: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:3549 +======= +//line sql.y:3556 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &AlterMigration{ Type: LaunchAllMigrationType, @@ -13644,7 +20001,11 @@ yydefault: case 626: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:3555 +======= +//line sql.y:3562 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &AlterMigration{ Type: CompleteMigrationType, @@ -13655,7 +20016,11 @@ yydefault: case 627: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:3562 +======= +//line sql.y:3569 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &AlterMigration{ Type: CompleteAllMigrationType, @@ -13665,7 +20030,11 @@ yydefault: case 628: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:3568 +======= +//line sql.y:3575 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &AlterMigration{ Type: CancelMigrationType, @@ -13676,7 +20045,11 @@ yydefault: case 629: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:3575 +======= +//line sql.y:3582 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &AlterMigration{ Type: PauseMigrationType, @@ -13687,7 +20060,11 @@ yydefault: case 630: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:3582 +======= +//line sql.y:3589 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &AlterMigration{ Type: ResumeMigrationType, @@ -13698,7 +20075,11 @@ yydefault: case 631: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:3589 +======= +//line sql.y:3596 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &AlterMigration{ Type: CancelAllMigrationType, @@ -13708,7 +20089,11 @@ yydefault: case 632: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:3595 +======= +//line sql.y:3602 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &AlterMigration{ Type: PauseAllMigrationType, @@ -13718,7 +20103,11 @@ yydefault: case 633: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:3601 +======= +//line sql.y:3608 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &AlterMigration{ Type: ResumeAllMigrationType, @@ -13728,7 +20117,11 @@ yydefault: case 634: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:3607 +======= +//line sql.y:3614 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &AlterMigration{ Type: ThrottleMigrationType, @@ -13741,7 +20134,11 @@ yydefault: case 635: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:3616 +======= +//line sql.y:3623 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &AlterMigration{ Type: ThrottleAllMigrationType, @@ -13753,7 +20150,11 @@ yydefault: case 636: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:3624 +======= +//line sql.y:3631 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &AlterMigration{ Type: UnthrottleMigrationType, @@ -13764,7 +20165,11 @@ yydefault: case 637: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:3631 +======= +//line sql.y:3638 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &AlterMigration{ Type: UnthrottleAllMigrationType, @@ -13774,7 +20179,11 @@ yydefault: case 638: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *PartitionOption +<<<<<<< HEAD //line sql.y:3639 +======= +//line sql.y:3646 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = nil } @@ -13782,7 +20191,11 @@ yydefault: case 639: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *PartitionOption +<<<<<<< HEAD //line sql.y:3643 +======= +//line sql.y:3650 +>>>>>>> e439161508 (fix: complete time period feature) { yyDollar[3].partitionOptionUnion().Partitions = yyDollar[4].integerUnion() yyDollar[3].partitionOptionUnion().SubPartition = yyDollar[5].subPartitionUnion() @@ -13793,7 +20206,11 @@ yydefault: case 640: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionOption +<<<<<<< HEAD //line sql.y:3652 +======= +//line sql.y:3659 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &PartitionOption{ IsLinear: yyDollar[1].booleanUnion(), @@ -13805,7 +20222,11 @@ yydefault: case 641: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *PartitionOption +<<<<<<< HEAD //line sql.y:3660 +======= +//line sql.y:3667 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &PartitionOption{ IsLinear: yyDollar[1].booleanUnion(), @@ -13818,7 +20239,11 @@ yydefault: case 642: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionOption +<<<<<<< HEAD //line sql.y:3669 +======= +//line sql.y:3676 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &PartitionOption{ Type: yyDollar[1].partitionByTypeUnion(), @@ -13829,7 +20254,11 @@ yydefault: case 643: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionOption +<<<<<<< HEAD //line sql.y:3676 +======= +//line sql.y:3683 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &PartitionOption{ Type: yyDollar[1].partitionByTypeUnion(), @@ -13840,7 +20269,11 @@ yydefault: case 644: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *SubPartition +<<<<<<< HEAD //line sql.y:3684 +======= +//line sql.y:3691 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = nil } @@ -13848,7 +20281,11 @@ yydefault: case 645: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *SubPartition +<<<<<<< HEAD //line sql.y:3688 +======= +//line sql.y:3695 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &SubPartition{ IsLinear: yyDollar[3].booleanUnion(), @@ -13861,7 +20298,11 @@ yydefault: case 646: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL *SubPartition +<<<<<<< HEAD //line sql.y:3697 +======= +//line sql.y:3704 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &SubPartition{ IsLinear: yyDollar[3].booleanUnion(), @@ -13875,7 +20316,11 @@ yydefault: case 647: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*PartitionDefinition +<<<<<<< HEAD //line sql.y:3708 +======= +//line sql.y:3715 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = nil } @@ -13883,7 +20328,11 @@ yydefault: case 648: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*PartitionDefinition +<<<<<<< HEAD //line sql.y:3712 +======= +//line sql.y:3719 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[2].partDefsUnion() } @@ -13891,7 +20340,11 @@ yydefault: case 649: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool +<<<<<<< HEAD //line sql.y:3717 +======= +//line sql.y:3724 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = false } @@ -13899,7 +20352,11 @@ yydefault: case 650: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool +<<<<<<< HEAD //line sql.y:3721 +======= +//line sql.y:3728 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = true } @@ -13907,7 +20364,11 @@ yydefault: case 651: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int +<<<<<<< HEAD //line sql.y:3726 +======= +//line sql.y:3733 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = 0 } @@ -13915,7 +20376,11 @@ yydefault: case 652: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int +<<<<<<< HEAD //line sql.y:3730 +======= +//line sql.y:3737 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = convertStringToInt(yyDollar[3].str) } @@ -13923,7 +20388,11 @@ yydefault: case 653: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL TableExpr +<<<<<<< HEAD //line sql.y:3736 +======= +//line sql.y:3743 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &JSONTableExpr{Expr: yyDollar[3].exprUnion(), Filter: yyDollar[5].exprUnion(), Columns: yyDollar[6].jtColumnListUnion(), Alias: yyDollar[8].identifierCS} } @@ -13931,7 +20400,11 @@ yydefault: case 654: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL []*JtColumnDefinition +<<<<<<< HEAD //line sql.y:3742 +======= +//line sql.y:3749 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[3].jtColumnListUnion() } @@ -13939,14 +20412,22 @@ yydefault: case 655: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*JtColumnDefinition +<<<<<<< HEAD //line sql.y:3748 +======= +//line sql.y:3755 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = []*JtColumnDefinition{yyDollar[1].jtColumnDefinitionUnion()} } yyVAL.union = yyLOCAL case 656: yyDollar = yyS[yypt-3 : yypt+1] +<<<<<<< HEAD //line sql.y:3752 +======= +//line sql.y:3759 +>>>>>>> e439161508 (fix: complete time period feature) { yySLICE := (*[]*JtColumnDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].jtColumnDefinitionUnion()) @@ -13954,7 +20435,11 @@ yydefault: case 657: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtColumnDefinition +<<<<<<< HEAD //line sql.y:3758 +======= +//line sql.y:3765 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &JtColumnDefinition{JtOrdinal: &JtOrdinalColDef{Name: yyDollar[1].identifierCI}} } @@ -13962,7 +20447,11 @@ yydefault: case 658: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *JtColumnDefinition +<<<<<<< HEAD //line sql.y:3762 +======= +//line sql.y:3769 +>>>>>>> e439161508 (fix: complete time period feature) { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion()} @@ -13972,7 +20461,11 @@ yydefault: case 659: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *JtColumnDefinition +<<<<<<< HEAD //line sql.y:3768 +======= +//line sql.y:3775 +>>>>>>> e439161508 (fix: complete time period feature) { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()} @@ -13982,7 +20475,11 @@ yydefault: case 660: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *JtColumnDefinition +<<<<<<< HEAD //line sql.y:3774 +======= +//line sql.y:3781 +>>>>>>> e439161508 (fix: complete time period feature) { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()} @@ -13992,7 +20489,11 @@ yydefault: case 661: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *JtColumnDefinition +<<<<<<< HEAD //line sql.y:3780 +======= +//line sql.y:3787 +>>>>>>> e439161508 (fix: complete time period feature) { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()} @@ -14002,7 +20503,11 @@ yydefault: case 662: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *JtColumnDefinition +<<<<<<< HEAD //line sql.y:3786 +======= +//line sql.y:3793 +>>>>>>> e439161508 (fix: complete time period feature) { jtNestedPath := &JtNestedPathColDef{Path: yyDollar[3].exprUnion(), Columns: yyDollar[4].jtColumnListUnion()} yyLOCAL = &JtColumnDefinition{JtNestedPath: jtNestedPath} @@ -14011,12 +20516,17 @@ yydefault: case 663: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool +<<<<<<< HEAD //line sql.y:3792 +======= +//line sql.y:3799 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = false } yyVAL.union = yyLOCAL case 664: +<<<<<<< HEAD yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool //line sql.y:3796 @@ -14036,14 +20546,42 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool //line sql.y:3804 +======= + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL bool +//line sql.y:3803 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = true } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 667: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtOnResponse //line sql.y:3810 +======= + case 665: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL bool +//line sql.y:3807 + { + yyLOCAL = false + } + yyVAL.union = yyLOCAL + case 666: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL bool +//line sql.y:3811 + { + yyLOCAL = true + } + yyVAL.union = yyLOCAL + case 667: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL *JtOnResponse +//line sql.y:3817 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].jtOnResponseUnion() } @@ -14051,7 +20589,11 @@ yydefault: case 668: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtOnResponse +<<<<<<< HEAD //line sql.y:3816 +======= +//line sql.y:3823 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].jtOnResponseUnion() } @@ -14059,19 +20601,33 @@ yydefault: case 669: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3822 +//line sql.y:3829 + { + yyLOCAL = &JtOnResponse{ResponseType: ErrorJSONType} + } + yyVAL.union = yyLOCAL + case 670: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL *JtOnResponse +//line sql.y:3833 { yyLOCAL = &JtOnResponse{ResponseType: ErrorJSONType} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 670: yyDollar = yyS[yypt-1 : yypt+1] +======= + case 671: + yyDollar = yyS[yypt-2 : yypt+1] +>>>>>>> e439161508 (fix: complete time period feature) var yyLOCAL *JtOnResponse -//line sql.y:3826 +//line sql.y:3837 { yyLOCAL = &JtOnResponse{ResponseType: NullJSONType} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 671: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *JtOnResponse @@ -14080,22 +20636,40 @@ yydefault: yyLOCAL = &JtOnResponse{ResponseType: DefaultJSONType, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL +======= +>>>>>>> e439161508 (fix: complete time period feature) case 672: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL PartitionByType -//line sql.y:3836 +//line sql.y:3843 + { + yyLOCAL = RangeType + } + yyVAL.union = yyLOCAL + case 673: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL PartitionByType +//line sql.y:3847 { yyLOCAL = RangeType } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 673: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL PartitionByType //line sql.y:3840 +======= + case 674: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL int +//line sql.y:3852 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = ListType } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 674: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int @@ -14108,6 +20682,12 @@ yydefault: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL int //line sql.y:3849 +======= + case 675: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL int +//line sql.y:3856 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = convertStringToInt(yyDollar[2].str) } @@ -14115,7 +20695,11 @@ yydefault: case 676: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int +<<<<<<< HEAD //line sql.y:3854 +======= +//line sql.y:3861 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = -1 } @@ -14123,7 +20707,11 @@ yydefault: case 677: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL int +<<<<<<< HEAD //line sql.y:3858 +======= +//line sql.y:3865 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = convertStringToInt(yyDollar[2].str) } @@ -14131,7 +20719,11 @@ yydefault: case 678: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionSpec +<<<<<<< HEAD //line sql.y:3864 +======= +//line sql.y:3871 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &PartitionSpec{Action: AddAction, Definitions: []*PartitionDefinition{yyDollar[4].partDefUnion()}} } @@ -14139,7 +20731,11 @@ yydefault: case 679: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec +<<<<<<< HEAD //line sql.y:3868 +======= +//line sql.y:3875 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &PartitionSpec{Action: DropAction, Names: yyDollar[3].partitionsUnion()} } @@ -14147,7 +20743,11 @@ yydefault: case 680: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *PartitionSpec +<<<<<<< HEAD //line sql.y:3872 +======= +//line sql.y:3879 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &PartitionSpec{Action: ReorganizeAction, Names: yyDollar[3].partitionsUnion(), Definitions: yyDollar[6].partDefsUnion()} } @@ -14155,7 +20755,7 @@ yydefault: case 681: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3876 +//line sql.y:3883 { yyLOCAL = &PartitionSpec{Action: DiscardAction, Names: yyDollar[3].partitionsUnion()} } @@ -14163,7 +20763,7 @@ yydefault: case 682: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3880 +//line sql.y:3887 { yyLOCAL = &PartitionSpec{Action: DiscardAction, IsAll: true} } @@ -14171,7 +20771,7 @@ yydefault: case 683: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3884 +//line sql.y:3891 { yyLOCAL = &PartitionSpec{Action: ImportAction, Names: yyDollar[3].partitionsUnion()} } @@ -14179,7 +20779,7 @@ yydefault: case 684: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3888 +//line sql.y:3895 { yyLOCAL = &PartitionSpec{Action: ImportAction, IsAll: true} } @@ -14187,7 +20787,7 @@ yydefault: case 685: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3892 +//line sql.y:3899 { yyLOCAL = &PartitionSpec{Action: TruncateAction, Names: yyDollar[3].partitionsUnion()} } @@ -14195,19 +20795,33 @@ yydefault: case 686: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3896 +//line sql.y:3903 + { + yyLOCAL = &PartitionSpec{Action: TruncateAction, IsAll: true} + } + yyVAL.union = yyLOCAL + case 687: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL *PartitionSpec +//line sql.y:3907 { yyLOCAL = &PartitionSpec{Action: TruncateAction, IsAll: true} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 687: yyDollar = yyS[yypt-3 : yypt+1] +======= + case 688: + yyDollar = yyS[yypt-7 : yypt+1] +>>>>>>> e439161508 (fix: complete time period feature) var yyLOCAL *PartitionSpec -//line sql.y:3900 +//line sql.y:3911 { yyLOCAL = &PartitionSpec{Action: CoalesceAction, Number: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 688: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *PartitionSpec @@ -14216,10 +20830,12 @@ yydefault: yyLOCAL = &PartitionSpec{Action: ExchangeAction, Names: Partitions{yyDollar[3].identifierCI}, TableName: yyDollar[6].tableName, WithoutValidation: yyDollar[7].booleanUnion()} } yyVAL.union = yyLOCAL +======= +>>>>>>> e439161508 (fix: complete time period feature) case 689: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3908 +//line sql.y:3915 { yyLOCAL = &PartitionSpec{Action: AnalyzeAction, Names: yyDollar[3].partitionsUnion()} } @@ -14227,7 +20843,7 @@ yydefault: case 690: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3912 +//line sql.y:3919 { yyLOCAL = &PartitionSpec{Action: AnalyzeAction, IsAll: true} } @@ -14235,7 +20851,7 @@ yydefault: case 691: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3916 +//line sql.y:3923 { yyLOCAL = &PartitionSpec{Action: CheckAction, Names: yyDollar[3].partitionsUnion()} } @@ -14243,7 +20859,7 @@ yydefault: case 692: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3920 +//line sql.y:3927 { yyLOCAL = &PartitionSpec{Action: CheckAction, IsAll: true} } @@ -14251,7 +20867,7 @@ yydefault: case 693: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3924 +//line sql.y:3931 { yyLOCAL = &PartitionSpec{Action: OptimizeAction, Names: yyDollar[3].partitionsUnion()} } @@ -14259,7 +20875,7 @@ yydefault: case 694: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3928 +//line sql.y:3935 { yyLOCAL = &PartitionSpec{Action: OptimizeAction, IsAll: true} } @@ -14267,7 +20883,7 @@ yydefault: case 695: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3932 +//line sql.y:3939 { yyLOCAL = &PartitionSpec{Action: RebuildAction, Names: yyDollar[3].partitionsUnion()} } @@ -14275,7 +20891,7 @@ yydefault: case 696: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3936 +//line sql.y:3943 { yyLOCAL = &PartitionSpec{Action: RebuildAction, IsAll: true} } @@ -14283,15 +20899,28 @@ yydefault: case 697: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3940 +//line sql.y:3947 + { + yyLOCAL = &PartitionSpec{Action: RepairAction, Names: yyDollar[3].partitionsUnion()} + } + yyVAL.union = yyLOCAL + case 698: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL *PartitionSpec +//line sql.y:3951 { yyLOCAL = &PartitionSpec{Action: RepairAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 698: yyDollar = yyS[yypt-3 : yypt+1] +======= + case 699: + yyDollar = yyS[yypt-2 : yypt+1] +>>>>>>> e439161508 (fix: complete time period feature) var yyLOCAL *PartitionSpec -//line sql.y:3944 +//line sql.y:3955 { yyLOCAL = &PartitionSpec{Action: RepairAction, IsAll: true} } @@ -14307,7 +20936,11 @@ yydefault: case 700: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool +<<<<<<< HEAD //line sql.y:3953 +======= +//line sql.y:3960 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = false } @@ -14315,11 +20948,20 @@ yydefault: case 701: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:3957 +//line sql.y:3964 + { + yyLOCAL = false + } + yyVAL.union = yyLOCAL + case 702: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL bool +//line sql.y:3968 { yyLOCAL = false } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 702: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool @@ -14332,27 +20974,45 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*PartitionDefinition //line sql.y:3967 +======= + case 703: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL []*PartitionDefinition +//line sql.y:3974 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = []*PartitionDefinition{yyDollar[1].partDefUnion()} } yyVAL.union = yyLOCAL case 704: yyDollar = yyS[yypt-3 : yypt+1] +<<<<<<< HEAD //line sql.y:3971 +======= +//line sql.y:3978 +>>>>>>> e439161508 (fix: complete time period feature) { yySLICE := (*[]*PartitionDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].partDefUnion()) } case 705: yyDollar = yyS[yypt-2 : yypt+1] +<<<<<<< HEAD //line sql.y:3977 +======= +//line sql.y:3984 +>>>>>>> e439161508 (fix: complete time period feature) { yyVAL.partDefUnion().Options = yyDollar[2].partitionDefinitionOptionsUnion() } case 706: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *PartitionDefinitionOptions +<<<<<<< HEAD //line sql.y:3982 +======= +//line sql.y:3989 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &PartitionDefinitionOptions{} } @@ -14360,7 +21020,11 @@ yydefault: case 707: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions +<<<<<<< HEAD //line sql.y:3986 +======= +//line sql.y:3993 +>>>>>>> e439161508 (fix: complete time period feature) { yyDollar[1].partitionDefinitionOptionsUnion().ValueRange = yyDollar[2].partitionValueRangeUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() @@ -14369,7 +21033,11 @@ yydefault: case 708: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions +<<<<<<< HEAD //line sql.y:3991 +======= +//line sql.y:3998 +>>>>>>> e439161508 (fix: complete time period feature) { yyDollar[1].partitionDefinitionOptionsUnion().Comment = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() @@ -14378,7 +21046,11 @@ yydefault: case 709: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions +<<<<<<< HEAD //line sql.y:3996 +======= +//line sql.y:4003 +>>>>>>> e439161508 (fix: complete time period feature) { yyDollar[1].partitionDefinitionOptionsUnion().Engine = yyDollar[2].partitionEngineUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() @@ -14387,7 +21059,11 @@ yydefault: case 710: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions +<<<<<<< HEAD //line sql.y:4001 +======= +//line sql.y:4008 +>>>>>>> e439161508 (fix: complete time period feature) { yyDollar[1].partitionDefinitionOptionsUnion().DataDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() @@ -14396,7 +21072,11 @@ yydefault: case 711: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions +<<<<<<< HEAD //line sql.y:4006 +======= +//line sql.y:4013 +>>>>>>> e439161508 (fix: complete time period feature) { yyDollar[1].partitionDefinitionOptionsUnion().IndexDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() @@ -14405,7 +21085,11 @@ yydefault: case 712: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions +<<<<<<< HEAD //line sql.y:4011 +======= +//line sql.y:4018 +>>>>>>> e439161508 (fix: complete time period feature) { val := yyDollar[2].integerUnion() yyDollar[1].partitionDefinitionOptionsUnion().MaxRows = &val @@ -14415,7 +21099,11 @@ yydefault: case 713: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions +<<<<<<< HEAD //line sql.y:4017 +======= +//line sql.y:4024 +>>>>>>> e439161508 (fix: complete time period feature) { val := yyDollar[2].integerUnion() yyDollar[1].partitionDefinitionOptionsUnion().MinRows = &val @@ -14425,7 +21113,11 @@ yydefault: case 714: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions +<<<<<<< HEAD //line sql.y:4023 +======= +//line sql.y:4030 +>>>>>>> e439161508 (fix: complete time period feature) { yyDollar[1].partitionDefinitionOptionsUnion().TableSpace = yyDollar[2].str yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() @@ -14434,7 +21126,11 @@ yydefault: case 715: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions +<<<<<<< HEAD //line sql.y:4028 +======= +//line sql.y:4035 +>>>>>>> e439161508 (fix: complete time period feature) { yyDollar[1].partitionDefinitionOptionsUnion().SubPartitionDefinitions = yyDollar[2].subPartitionDefinitionsUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() @@ -14443,7 +21139,11 @@ yydefault: case 716: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SubPartitionDefinitions +<<<<<<< HEAD //line sql.y:4034 +======= +//line sql.y:4041 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[2].subPartitionDefinitionsUnion() } @@ -14451,14 +21151,22 @@ yydefault: case 717: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SubPartitionDefinitions +<<<<<<< HEAD //line sql.y:4040 +======= +//line sql.y:4047 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = SubPartitionDefinitions{yyDollar[1].subPartitionDefinitionUnion()} } yyVAL.union = yyLOCAL case 718: yyDollar = yyS[yypt-3 : yypt+1] +<<<<<<< HEAD //line sql.y:4044 +======= +//line sql.y:4051 +>>>>>>> e439161508 (fix: complete time period feature) { yySLICE := (*SubPartitionDefinitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].subPartitionDefinitionUnion()) @@ -14466,7 +21174,11 @@ yydefault: case 719: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SubPartitionDefinition +<<<<<<< HEAD //line sql.y:4050 +======= +//line sql.y:4057 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &SubPartitionDefinition{Name: yyDollar[2].identifierCI, Options: yyDollar[3].subPartitionDefinitionOptionsUnion()} } @@ -14474,7 +21186,11 @@ yydefault: case 720: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions +<<<<<<< HEAD //line sql.y:4055 +======= +//line sql.y:4062 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &SubPartitionDefinitionOptions{} } @@ -14482,7 +21198,11 @@ yydefault: case 721: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions +<<<<<<< HEAD //line sql.y:4059 +======= +//line sql.y:4066 +>>>>>>> e439161508 (fix: complete time period feature) { yyDollar[1].subPartitionDefinitionOptionsUnion().Comment = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() @@ -14491,7 +21211,11 @@ yydefault: case 722: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions +<<<<<<< HEAD //line sql.y:4064 +======= +//line sql.y:4071 +>>>>>>> e439161508 (fix: complete time period feature) { yyDollar[1].subPartitionDefinitionOptionsUnion().Engine = yyDollar[2].partitionEngineUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() @@ -14500,7 +21224,11 @@ yydefault: case 723: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions +<<<<<<< HEAD //line sql.y:4069 +======= +//line sql.y:4076 +>>>>>>> e439161508 (fix: complete time period feature) { yyDollar[1].subPartitionDefinitionOptionsUnion().DataDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() @@ -14509,7 +21237,11 @@ yydefault: case 724: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions +<<<<<<< HEAD //line sql.y:4074 +======= +//line sql.y:4081 +>>>>>>> e439161508 (fix: complete time period feature) { yyDollar[1].subPartitionDefinitionOptionsUnion().IndexDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() @@ -14518,7 +21250,11 @@ yydefault: case 725: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions +<<<<<<< HEAD //line sql.y:4079 +======= +//line sql.y:4086 +>>>>>>> e439161508 (fix: complete time period feature) { val := yyDollar[2].integerUnion() yyDollar[1].subPartitionDefinitionOptionsUnion().MaxRows = &val @@ -14528,7 +21264,11 @@ yydefault: case 726: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions +<<<<<<< HEAD //line sql.y:4085 +======= +//line sql.y:4092 +>>>>>>> e439161508 (fix: complete time period feature) { val := yyDollar[2].integerUnion() yyDollar[1].subPartitionDefinitionOptionsUnion().MinRows = &val @@ -14538,7 +21278,11 @@ yydefault: case 727: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions +<<<<<<< HEAD //line sql.y:4091 +======= +//line sql.y:4098 +>>>>>>> e439161508 (fix: complete time period feature) { yyDollar[1].subPartitionDefinitionOptionsUnion().TableSpace = yyDollar[2].str yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() @@ -14547,7 +21291,11 @@ yydefault: case 728: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionValueRange +<<<<<<< HEAD //line sql.y:4098 +======= +//line sql.y:4105 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &PartitionValueRange{ Type: LessThanType, @@ -14558,7 +21306,11 @@ yydefault: case 729: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionValueRange +<<<<<<< HEAD //line sql.y:4105 +======= +//line sql.y:4112 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &PartitionValueRange{ Type: LessThanType, @@ -14569,7 +21321,11 @@ yydefault: case 730: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionValueRange +<<<<<<< HEAD //line sql.y:4112 +======= +//line sql.y:4119 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &PartitionValueRange{ Type: InType, @@ -14580,7 +21336,11 @@ yydefault: case 731: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool +<<<<<<< HEAD //line sql.y:4120 +======= +//line sql.y:4127 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = false } @@ -14588,7 +21348,11 @@ yydefault: case 732: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool +<<<<<<< HEAD //line sql.y:4124 +======= +//line sql.y:4131 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = true } @@ -14596,7 +21360,11 @@ yydefault: case 733: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionEngine +<<<<<<< HEAD //line sql.y:4130 +======= +//line sql.y:4137 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &PartitionEngine{Storage: yyDollar[1].booleanUnion(), Name: yyDollar[4].identifierCS.String()} } @@ -14604,7 +21372,11 @@ yydefault: case 734: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Literal +<<<<<<< HEAD //line sql.y:4136 +======= +//line sql.y:4143 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = NewStrLiteral(yyDollar[3].str) } @@ -14612,7 +21384,11 @@ yydefault: case 735: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Literal +<<<<<<< HEAD //line sql.y:4142 +======= +//line sql.y:4149 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = NewStrLiteral(yyDollar[4].str) } @@ -14620,7 +21396,11 @@ yydefault: case 736: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Literal +<<<<<<< HEAD //line sql.y:4148 +======= +//line sql.y:4155 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = NewStrLiteral(yyDollar[4].str) } @@ -14628,7 +21408,11 @@ yydefault: case 737: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int +<<<<<<< HEAD //line sql.y:4154 +======= +//line sql.y:4161 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = convertStringToInt(yyDollar[3].str) } @@ -14636,41 +21420,65 @@ yydefault: case 738: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int +<<<<<<< HEAD //line sql.y:4160 +======= +//line sql.y:4167 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = convertStringToInt(yyDollar[3].str) } yyVAL.union = yyLOCAL case 739: yyDollar = yyS[yypt-3 : yypt+1] +<<<<<<< HEAD //line sql.y:4166 +======= +//line sql.y:4173 +>>>>>>> e439161508 (fix: complete time period feature) { yyVAL.str = yyDollar[3].identifierCS.String() } case 740: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinition +<<<<<<< HEAD //line sql.y:4172 +======= +//line sql.y:4179 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &PartitionDefinition{Name: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL case 741: yyDollar = yyS[yypt-1 : yypt+1] +<<<<<<< HEAD //line sql.y:4178 +======= +//line sql.y:4185 +>>>>>>> e439161508 (fix: complete time period feature) { yyVAL.str = "" } case 742: yyDollar = yyS[yypt-3 : yypt+1] +<<<<<<< HEAD //line sql.y:4182 +======= +//line sql.y:4189 +>>>>>>> e439161508 (fix: complete time period feature) { yyVAL.str = "" } case 743: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4188 +======= +//line sql.y:4195 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &RenameTable{TablePairs: yyDollar[3].renameTablePairsUnion()} } @@ -14678,22 +21486,41 @@ yydefault: case 744: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*RenameTablePair +<<<<<<< HEAD //line sql.y:4194 +======= +//line sql.y:4201 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = []*RenameTablePair{{FromTable: yyDollar[1].tableName, ToTable: yyDollar[3].tableName}} } yyVAL.union = yyLOCAL case 745: yyDollar = yyS[yypt-5 : yypt+1] +<<<<<<< HEAD //line sql.y:4198 +======= +//line sql.y:4205 +>>>>>>> e439161508 (fix: complete time period feature) { yySLICE := (*[]*RenameTablePair)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, &RenameTablePair{FromTable: yyDollar[3].tableName, ToTable: yyDollar[5].tableName}) } case 746: +<<<<<<< HEAD +======= + yyDollar = yyS[yypt-7 : yypt+1] + var yyLOCAL Statement +//line sql.y:4211 + { + yyLOCAL = &DropTable{FromTables: yyDollar[6].tableNamesUnion(), IfExists: yyDollar[5].booleanUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), Temp: yyDollar[3].booleanUnion()} + } + yyVAL.union = yyLOCAL + case 747: +>>>>>>> e439161508 (fix: complete time period feature) yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4204 +//line sql.y:4215 { yyLOCAL = &DropTable{FromTables: yyDollar[6].tableNamesUnion(), IfExists: yyDollar[5].booleanUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), Temp: yyDollar[3].booleanUnion()} } @@ -14714,7 +21541,11 @@ yydefault: case 748: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4217 +======= +//line sql.y:4224 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &DropView{FromTables: yyDollar[5].tableNamesUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), IfExists: yyDollar[4].booleanUnion()} } @@ -14722,7 +21553,11 @@ yydefault: case 749: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4221 +======= +//line sql.y:4228 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &DropDatabase{Comments: Comments(yyDollar[2].strs).Parsed(), DBName: yyDollar[5].identifierCS, IfExists: yyDollar[4].booleanUnion()} } @@ -14730,7 +21565,11 @@ yydefault: case 750: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4227 +======= +//line sql.y:4234 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &TruncateTable{Table: yyDollar[3].tableName} } @@ -14738,7 +21577,11 @@ yydefault: case 751: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4231 +======= +//line sql.y:4238 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &TruncateTable{Table: yyDollar[2].tableName} } @@ -14746,7 +21589,11 @@ yydefault: case 752: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4237 +======= +//line sql.y:4244 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &OtherRead{} } @@ -14754,7 +21601,11 @@ yydefault: case 753: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4243 +======= +//line sql.y:4250 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &CheckTable{Tables: yyDollar[3].tableNamesUnion(), Options: yyDollar[4].checkOptionsUnion()} } @@ -14762,14 +21613,22 @@ yydefault: case 754: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableNames +<<<<<<< HEAD //line sql.y:4249 +======= +//line sql.y:4256 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = TableNames{yyDollar[1].tableName} } yyVAL.union = yyLOCAL case 755: yyDollar = yyS[yypt-3 : yypt+1] +<<<<<<< HEAD //line sql.y:4253 +======= +//line sql.y:4260 +>>>>>>> e439161508 (fix: complete time period feature) { yySLICE := (*TableNames)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableName) @@ -14777,7 +21636,11 @@ yydefault: case 756: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4259 +======= +//line sql.y:4266 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Kill{Type: KillConnection, ConnID: NewIntLiteral(yyDollar[2].str)} } @@ -14785,7 +21648,7 @@ yydefault: case 757: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4263 +//line sql.y:4270 { yyLOCAL = &Kill{Type: KillQuery, ConnID: NewIntLiteral(yyDollar[3].str)} } @@ -14793,43 +21656,77 @@ yydefault: case 758: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4267 +======= +//line sql.y:4274 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Kill{Type: KillConnection, ConnID: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL case 759: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4273 { yyLOCAL = &Reload{Type: ReloadUsers} +======= +//line sql.y:4281 + { + yyLOCAL = &Show{&ShowBasic{Command: Charset, Filter: yyDollar[3].showFilterUnion()}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 760: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4277 +======= +//line sql.y:4285 { - yyLOCAL = &Reload{Type: ReloadPrivileges} + yyLOCAL = &Show{&ShowBasic{Command: LastSeenGTID}} } yyVAL.union = yyLOCAL case 761: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Statement +//line sql.y:4289 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = &Reload{Type: ReloadPrivileges} + } + yyVAL.union = yyLOCAL + case 762: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4283 +======= +//line sql.y:4293 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowBasic{Command: Charset, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 762: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement //line sql.y:4287 +======= + case 763: + yyDollar = yyS[yypt-7 : yypt+1] + var yyLOCAL Statement +//line sql.y:4297 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowBasic{Command: LastSeenGTID}} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 763: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement @@ -14842,6 +21739,12 @@ yydefault: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4295 +======= + case 764: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Statement +//line sql.y:4301 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowBasic{Command: Collation, Filter: yyDollar[3].showFilterUnion()}} } @@ -14849,14 +21752,21 @@ yydefault: case 765: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4299 { yyLOCAL = &Show{&ShowBasic{Full: yyDollar[2].booleanUnion(), Command: Column, Tbl: yyDollar[5].tableName, DbName: yyDollar[6].identifierCS, Filter: yyDollar[7].showFilterUnion()}} +======= +//line sql.y:4305 + { + yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 766: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4303 { yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}} @@ -14874,198 +21784,367 @@ yydefault: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4311 +======= +//line sql.y:4309 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 769: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4315 +======= + case 767: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Statement +//line sql.y:4313 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 770: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement //line sql.y:4319 +======= + case 768: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Statement +//line sql.y:4317 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowBasic{Command: Function, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 771: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement //line sql.y:4323 +======= + case 769: + yyDollar = yyS[yypt-7 : yypt+1] + var yyLOCAL Statement +//line sql.y:4321 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowBasic{Command: Index, Tbl: yyDollar[5].tableName, DbName: yyDollar[6].identifierCS, Filter: yyDollar[7].showFilterUnion()}} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 772: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement //line sql.y:4327 +======= + case 770: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Statement +//line sql.y:4325 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowBasic{Command: OpenTable, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 773: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement //line sql.y:4331 +======= + case 771: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Statement +//line sql.y:4329 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowBasic{Command: Privilege}} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 774: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement //line sql.y:4335 { yyLOCAL = &Show{&ShowBasic{Command: Procedure, Filter: yyDollar[4].showFilterUnion()}} +======= + case 772: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Statement +//line sql.y:4333 + { + yyLOCAL = &Show{&ShowBasic{Command: Procedure, Filter: yyDollar[4].showFilterUnion()}} + } + yyVAL.union = yyLOCAL + case 773: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Statement +//line sql.y:4337 + { + yyLOCAL = &Show{&ShowBasic{Command: StatusSession, Filter: yyDollar[4].showFilterUnion()}} + } + yyVAL.union = yyLOCAL + case 774: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Statement +//line sql.y:4341 + { + yyLOCAL = &Show{&ShowBasic{Command: StatusGlobal, Filter: yyDollar[4].showFilterUnion()}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 775: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4339 { yyLOCAL = &Show{&ShowBasic{Command: StatusSession, Filter: yyDollar[4].showFilterUnion()}} +======= +//line sql.y:4345 + { + yyLOCAL = &Show{&ShowBasic{Command: VariableSession, Filter: yyDollar[4].showFilterUnion()}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 776: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4343 { yyLOCAL = &Show{&ShowBasic{Command: StatusGlobal, Filter: yyDollar[4].showFilterUnion()}} +======= +//line sql.y:4349 + { + yyLOCAL = &Show{&ShowBasic{Command: VariableGlobal, Filter: yyDollar[4].showFilterUnion()}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 777: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4347 { yyLOCAL = &Show{&ShowBasic{Command: VariableSession, Filter: yyDollar[4].showFilterUnion()}} +======= +//line sql.y:4353 + { + yyLOCAL = &Show{&ShowBasic{Command: TableStatus, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 778: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4351 { yyLOCAL = &Show{&ShowBasic{Command: VariableGlobal, Filter: yyDollar[4].showFilterUnion()}} +======= +//line sql.y:4357 + { + yyLOCAL = &Show{&ShowBasic{Command: Table, Full: yyDollar[2].booleanUnion(), DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 779: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4355 { yyLOCAL = &Show{&ShowBasic{Command: TableStatus, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} +======= +//line sql.y:4361 + { + yyLOCAL = &Show{&ShowBasic{Command: Trigger, DbName: yyDollar[3].identifierCS, Filter: yyDollar[4].showFilterUnion()}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 780: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4359 { yyLOCAL = &Show{&ShowBasic{Command: Table, Full: yyDollar[2].booleanUnion(), DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} +======= +//line sql.y:4365 + { + yyLOCAL = &Show{&ShowCreate{Command: CreateDb, Op: yyDollar[4].tableName}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 781: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4363 { yyLOCAL = &Show{&ShowBasic{Command: Trigger, DbName: yyDollar[3].identifierCS, Filter: yyDollar[4].showFilterUnion()}} +======= +//line sql.y:4369 + { + yyLOCAL = &Show{&ShowCreate{Command: CreateE, Op: yyDollar[4].tableName}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 782: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4367 { yyLOCAL = &Show{&ShowCreate{Command: CreateDb, Op: yyDollar[4].tableName}} +======= +//line sql.y:4373 + { + yyLOCAL = &Show{&ShowCreate{Command: CreateF, Op: yyDollar[4].tableName}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 783: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4371 { yyLOCAL = &Show{&ShowCreate{Command: CreateE, Op: yyDollar[4].tableName}} +======= +//line sql.y:4377 + { + yyLOCAL = &Show{&ShowCreate{Command: CreateProc, Op: yyDollar[4].tableName}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 784: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4375 { yyLOCAL = &Show{&ShowCreate{Command: CreateF, Op: yyDollar[4].tableName}} +======= +//line sql.y:4381 + { + yyLOCAL = &Show{&ShowCreate{Command: CreateTbl, Op: yyDollar[4].tableName}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 785: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4379 { yyLOCAL = &Show{&ShowCreate{Command: CreateProc, Op: yyDollar[4].tableName}} +======= +//line sql.y:4385 + { + yyLOCAL = &Show{&ShowCreate{Command: CreateTr, Op: yyDollar[4].tableName}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 786: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4383 { yyLOCAL = &Show{&ShowCreate{Command: CreateTbl, Op: yyDollar[4].tableName}} +======= +//line sql.y:4389 + { + yyLOCAL = &Show{&ShowCreate{Command: CreateV, Op: yyDollar[4].tableName}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 787: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4387 { yyLOCAL = &Show{&ShowCreate{Command: CreateTr, Op: yyDollar[4].tableName}} +======= +//line sql.y:4393 + { + yyLOCAL = &Show{&ShowBasic{Command: Engines}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 788: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4391 { yyLOCAL = &Show{&ShowCreate{Command: CreateV, Op: yyDollar[4].tableName}} +======= +//line sql.y:4397 + { + yyLOCAL = &Show{&ShowBasic{Command: Plugins}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 789: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4395 { yyLOCAL = &Show{&ShowBasic{Command: Engines}} +======= +//line sql.y:4401 + { + yyLOCAL = &Show{&ShowBasic{Command: GtidExecGlobal, DbName: yyDollar[4].identifierCS}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 790: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4399 { yyLOCAL = &Show{&ShowBasic{Command: Plugins}} +======= +//line sql.y:4405 + { + yyLOCAL = &Show{&ShowBasic{Command: VGtidExecGlobal, DbName: yyDollar[4].identifierCS}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 791: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4403 { yyLOCAL = &Show{&ShowBasic{Command: GtidExecGlobal, DbName: yyDollar[4].identifierCS}} +======= +//line sql.y:4409 + { + yyLOCAL = &Show{&ShowBasic{Command: VitessVariables, Filter: yyDollar[4].showFilterUnion()}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 792: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4407 +======= +//line sql.y:4413 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowBasic{Command: VGtidExecGlobal, DbName: yyDollar[4].identifierCS}} } @@ -15073,19 +22152,39 @@ yydefault: case 793: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4411 +======= +//line sql.y:4417 + { + yyLOCAL = &Show{&ShowBasic{Command: VitessMigrations, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}} + } + yyVAL.union = yyLOCAL + case 794: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Statement +//line sql.y:4421 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowBasic{Command: VitessVariables, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 794: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement //line sql.y:4415 +======= + case 795: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Statement +//line sql.y:4425 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowBasic{Command: VitessMigrations, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 795: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement @@ -15100,6 +22199,14 @@ yydefault: //line sql.y:4423 { yyLOCAL = &Show{&ShowBasic{Command: DMLJobs, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}} +======= + case 796: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Statement +//line sql.y:4429 + { + yyLOCAL = &Show{&ShowDMLJob{UUID: yyDollar[3].str, Detail: true}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 797: @@ -15113,6 +22220,7 @@ yydefault: case 798: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4431 { yyLOCAL = &Show{&ShowDMLJob{UUID: yyDollar[3].str, Detail: true}} @@ -15122,50 +22230,111 @@ yydefault: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement //line sql.y:4435 +======= +//line sql.y:4433 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)} + } + yyVAL.union = yyLOCAL +<<<<<<< HEAD +======= + case 798: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Statement +//line sql.y:4437 { yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL + case 799: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Statement +//line sql.y:4441 + { + yyLOCAL = &ShowThrottledApps{} + } + yyVAL.union = yyLOCAL +>>>>>>> e439161508 (fix: complete time period feature) case 800: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4439 { yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)} +======= +//line sql.y:4445 + { + yyLOCAL = &Show{&ShowBasic{Command: VitessReplicationStatus, Filter: yyDollar[3].showFilterUnion()}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 801: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4443 { yyLOCAL = &ShowThrottledApps{} +======= +//line sql.y:4449 + { + yyLOCAL = &ShowThrottlerStatus{} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 802: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4447 +======= +//line sql.y:4453 + { + yyLOCAL = &Show{&ShowBasic{Command: VschemaTables}} + } + yyVAL.union = yyLOCAL + case 803: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Statement +//line sql.y:4457 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowBasic{Command: VitessReplicationStatus, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 803: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4451 +======= + case 804: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Statement +//line sql.y:4461 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ShowThrottlerStatus{} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 804: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4455 +======= + case 805: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Statement +//line sql.y:4465 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowBasic{Command: VschemaTables}} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 805: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement @@ -15174,33 +22343,60 @@ yydefault: yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes}} } yyVAL.union = yyLOCAL +======= +>>>>>>> e439161508 (fix: complete time period feature) case 806: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4463 { yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes, Tbl: yyDollar[5].tableName}} +======= +//line sql.y:4469 + { + yyLOCAL = &Show{&ShowBasic{Command: VitessShards, Filter: yyDollar[3].showFilterUnion()}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 807: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4467 { yyLOCAL = &Show{&ShowBasic{Command: Warnings}} +======= +//line sql.y:4473 + { + yyLOCAL = &Show{&ShowBasic{Command: VitessTablets, Filter: yyDollar[3].showFilterUnion()}} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 808: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4471 +======= +//line sql.y:4477 { - yyLOCAL = &Show{&ShowBasic{Command: VitessShards, Filter: yyDollar[3].showFilterUnion()}} + yyLOCAL = &Show{&ShowBasic{Command: VitessTarget}} } yyVAL.union = yyLOCAL case 809: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Statement +//line sql.y:4481 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = &Show{&ShowBasic{Command: VitessShards, Filter: yyDollar[3].showFilterUnion()}} + } + yyVAL.union = yyLOCAL + case 810: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4475 { yyLOCAL = &Show{&ShowBasic{Command: VitessTablets, Filter: yyDollar[3].showFilterUnion()}} @@ -15226,18 +22422,53 @@ yydefault: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4490 +======= +//line sql.y:4488 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].identifierCI.String())}} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 813: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement //line sql.y:4494 +======= + case 811: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Statement +//line sql.y:4492 + { + yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} + } + yyVAL.union = yyLOCAL + case 812: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Statement +//line sql.y:4496 + { + yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String()}} + } + yyVAL.union = yyLOCAL + case 813: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Statement +//line sql.y:4500 + { + yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} + } + yyVAL.union = yyLOCAL + case 814: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Statement +//line sql.y:4504 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 814: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement @@ -15250,18 +22481,47 @@ yydefault: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement //line sql.y:4502 +======= + case 815: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Statement +//line sql.y:4508 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL case 816: +<<<<<<< HEAD yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4506 +======= + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Statement +//line sql.y:4512 + { + yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}} + } + yyVAL.union = yyLOCAL + case 817: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Statement +//line sql.y:4516 + { + yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[3].str)}} + } + yyVAL.union = yyLOCAL + case 818: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Statement +//line sql.y:4520 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 817: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement @@ -15310,18 +22570,44 @@ yydefault: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool //line sql.y:4538 +======= + case 819: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:4526 + { + yyVAL.str = "" + } + case 820: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:4530 + { + yyVAL.str = "extended " + } + case 821: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL bool +//line sql.y:4536 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = false } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 824: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool //line sql.y:4542 +======= + case 822: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL bool +//line sql.y:4540 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = true } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 825: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:4548 @@ -15331,15 +22617,50 @@ yydefault: case 826: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:4552 +======= + case 823: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:4546 + { + yyVAL.str = string(yyDollar[1].str) + } + case 824: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:4550 + { + yyVAL.str = string(yyDollar[1].str) + } + case 825: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:4556 + { + yyVAL.identifierCS = NewIdentifierCS("") + } + case 826: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:4560 +>>>>>>> e439161508 (fix: complete time period feature) { yyVAL.str = string(yyDollar[1].str) } case 827: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:4564 + { + yyVAL.identifierCS = yyDollar[2].identifierCS + } + case 828: yyDollar = yyS[yypt-0 : yypt+1] +<<<<<<< HEAD //line sql.y:4558 +======= + var yyLOCAL *ShowFilter +//line sql.y:4570 +>>>>>>> e439161508 (fix: complete time period feature) { yyVAL.identifierCS = NewIdentifierCS("") } +<<<<<<< HEAD case 828: yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:4562 @@ -15364,27 +22685,64 @@ yydefault: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter //line sql.y:4576 +======= + yyVAL.union = yyLOCAL + case 829: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *ShowFilter +//line sql.y:4574 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 832: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter //line sql.y:4580 +======= + case 830: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *ShowFilter +//line sql.y:4578 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ShowFilter{Filter: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 833: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ShowFilter //line sql.y:4586 +======= + case 831: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL *ShowFilter +//line sql.y:4584 + { + yyLOCAL = nil + } + yyVAL.union = yyLOCAL + case 832: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *ShowFilter +//line sql.y:4588 + { + yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)} + } + yyVAL.union = yyLOCAL + case 833: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:4594 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = nil } yyVAL.union = yyLOCAL case 834: +<<<<<<< HEAD yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter //line sql.y:4590 @@ -15426,34 +22784,96 @@ yydefault: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement //line sql.y:4620 +======= + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:4598 + { + yyVAL.empty = struct{}{} + } + case 835: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:4602 + { + yyVAL.empty = struct{}{} + } + case 836: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:4608 + { + yyVAL.str = string(yyDollar[1].str) + } + case 837: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:4612 + { + yyVAL.str = string(yyDollar[1].str) + } + case 838: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Statement +//line sql.y:4618 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Use{DBName: yyDollar[2].identifierCS} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 841: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement //line sql.y:4624 +======= + case 839: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Statement +//line sql.y:4622 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Use{DBName: IdentifierCS{v: ""}} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 842: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4628 +======= + case 840: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Statement +//line sql.y:4626 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Use{DBName: NewIdentifierCS(yyDollar[2].identifierCS.String() + "@" + string(yyDollar[3].str))} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 843: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:4635 +======= + case 841: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:4633 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } + case 842: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:4637 + { + yyVAL.identifierCS = NewIdentifierCS("@" + string(yyDollar[1].str)) + } + case 843: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:4641 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyVAL.identifierCS = NewIdentifierCS("@@" + string(yyDollar[1].str)) + } case 844: yyDollar = yyS[yypt-1 : yypt+1] +<<<<<<< HEAD //line sql.y:4639 { yyVAL.identifierCS = NewIdentifierCS("@" + string(yyDollar[1].str)) @@ -15474,26 +22894,51 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement //line sql.y:4654 +======= +//line sql.y:4645 + { + yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) + } + case 845: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Statement +//line sql.y:4652 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Begin{} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 848: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4658 +======= + case 846: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Statement +//line sql.y:4656 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Begin{TxAccessModes: yyDollar[3].txAccessModesUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 849: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []TxAccessMode //line sql.y:4663 +======= + case 847: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL []TxAccessMode +//line sql.y:4661 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = nil } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 850: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []TxAccessMode @@ -15506,25 +22951,53 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []TxAccessMode //line sql.y:4673 +======= + case 848: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL []TxAccessMode +//line sql.y:4665 + { + yyLOCAL = yyDollar[1].txAccessModesUnion() + } + yyVAL.union = yyLOCAL + case 849: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL []TxAccessMode +//line sql.y:4671 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = []TxAccessMode{yyDollar[1].txAccessModeUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 852: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:4677 +======= + case 850: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:4675 +>>>>>>> e439161508 (fix: complete time period feature) { yySLICE := (*[]TxAccessMode)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].txAccessModeUnion()) } +<<<<<<< HEAD case 853: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TxAccessMode //line sql.y:4683 +======= + case 851: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL TxAccessMode +//line sql.y:4681 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = WithConsistentSnapshot } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 854: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TxAccessMode @@ -15537,52 +23010,106 @@ yydefault: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TxAccessMode //line sql.y:4691 +======= + case 852: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL TxAccessMode +//line sql.y:4685 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = ReadOnly + yyLOCAL = ReadWrite } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 856: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement //line sql.y:4698 +======= + case 853: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL TxAccessMode +//line sql.y:4689 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &Commit{} + yyLOCAL = ReadOnly } yyVAL.union = yyLOCAL case 857: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4704 +======= +//line sql.y:4696 + { + yyLOCAL = &Commit{} + } + yyVAL.union = yyLOCAL + case 855: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Statement +//line sql.y:4702 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Rollback{} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 858: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement //line sql.y:4708 +======= + case 856: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Statement +//line sql.y:4706 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &SRollback{Name: yyDollar[5].identifierCI} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 859: yyDollar = yyS[yypt-0 : yypt+1] //line sql.y:4713 +======= + case 857: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:4711 + { + yyVAL.empty = struct{}{} + } + case 858: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:4713 + { + yyVAL.empty = struct{}{} + } + case 859: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:4716 +>>>>>>> e439161508 (fix: complete time period feature) { yyVAL.empty = struct{}{} } case 860: yyDollar = yyS[yypt-1 : yypt+1] +<<<<<<< HEAD //line sql.y:4715 { yyVAL.empty = struct{}{} } case 861: yyDollar = yyS[yypt-0 : yypt+1] +======= +>>>>>>> e439161508 (fix: complete time period feature) //line sql.y:4718 { yyVAL.empty = struct{}{} } +<<<<<<< HEAD case 862: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:4720 @@ -15593,45 +23120,97 @@ yydefault: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement //line sql.y:4724 +======= + case 861: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Statement +//line sql.y:4722 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Savepoint{Name: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 864: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4730 +======= + case 862: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Statement +//line sql.y:4728 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Release{Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 865: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL ExplainType //line sql.y:4735 +======= + case 863: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL ExplainType +//line sql.y:4733 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = EmptyType } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 866: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType //line sql.y:4739 { yyLOCAL = JSONType +======= + case 864: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL ExplainType +//line sql.y:4737 + { + yyLOCAL = JSONType + } + yyVAL.union = yyLOCAL + case 865: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL ExplainType +//line sql.y:4741 + { + yyLOCAL = TreeType + } + yyVAL.union = yyLOCAL + case 866: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL ExplainType +//line sql.y:4745 + { + yyLOCAL = VitessType +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 867: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType +<<<<<<< HEAD //line sql.y:4743 { yyLOCAL = TreeType +======= +//line sql.y:4749 + { + yyLOCAL = VTExplainType +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 868: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType +<<<<<<< HEAD //line sql.y:4747 { yyLOCAL = VitessType @@ -15649,44 +23228,91 @@ yydefault: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType //line sql.y:4755 +======= +//line sql.y:4753 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = TraditionalType } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 871: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ExplainType //line sql.y:4759 +======= + case 869: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL ExplainType +//line sql.y:4757 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = AnalyzeType } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 872: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL VExplainType //line sql.y:4764 +======= + case 870: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL VExplainType +//line sql.y:4762 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = PlanVExplainType } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 873: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType //line sql.y:4768 { yyLOCAL = PlanVExplainType - } - yyVAL.union = yyLOCAL - case 874: +======= + case 871: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType +//line sql.y:4766 + { + yyLOCAL = PlanVExplainType + } + yyVAL.union = yyLOCAL + case 872: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL VExplainType +//line sql.y:4770 + { + yyLOCAL = AllVExplainType + } + yyVAL.union = yyLOCAL + case 873: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL VExplainType +//line sql.y:4774 + { + yyLOCAL = QueriesVExplainType +>>>>>>> e439161508 (fix: complete time period feature) + } + yyVAL.union = yyLOCAL + case 874: + yyDollar = yyS[yypt-1 : yypt+1] +<<<<<<< HEAD + var yyLOCAL VExplainType //line sql.y:4772 +======= +//line sql.y:4780 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = AllVExplainType } yyVAL.union = yyLOCAL case 875: yyDollar = yyS[yypt-1 : yypt+1] +<<<<<<< HEAD var yyLOCAL VExplainType //line sql.y:4776 { @@ -15696,6 +23322,9 @@ yydefault: case 876: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:4782 +======= +//line sql.y:4784 +>>>>>>> e439161508 (fix: complete time period feature) { yyVAL.str = yyDollar[1].str } @@ -15713,16 +23342,57 @@ yydefault: } case 879: yyDollar = yyS[yypt-1 : yypt+1] +<<<<<<< HEAD var yyLOCAL Statement //line sql.y:4796 +======= +//line sql.y:4788 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyVAL.str = yyDollar[1].str + } +<<<<<<< HEAD +======= + case 877: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Statement +//line sql.y:4794 { yyLOCAL = yyDollar[1].selStmtUnion() } yyVAL.union = yyLOCAL + case 878: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Statement +//line sql.y:4798 + { + yyLOCAL = yyDollar[1].statementUnion() + } + yyVAL.union = yyLOCAL + case 879: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Statement +//line sql.y:4802 + { + yyLOCAL = yyDollar[1].statementUnion() + } +>>>>>>> e439161508 (fix: complete time period feature) + yyVAL.union = yyLOCAL case 880: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4800 +======= +//line sql.y:4806 + { + yyLOCAL = yyDollar[1].statementUnion() + } + yyVAL.union = yyLOCAL + case 881: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:4811 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].statementUnion() } @@ -15749,6 +23419,7 @@ yydefault: { yyVAL.str = "" } +<<<<<<< HEAD case 884: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:4817 @@ -15773,105 +23444,209 @@ yydefault: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement //line sql.y:4831 +======= + case 882: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:4815 { - yyLOCAL = &ExplainStmt{Type: yyDollar[3].explainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()} + yyVAL.str = yyDollar[1].identifierCI.val + } + case 883: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:4819 + { + yyVAL.str = encodeSQLString(yyDollar[1].str) + } + case 884: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Statement +//line sql.y:4825 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = &ExplainTab{Table: yyDollar[3].tableName, Wild: yyDollar[4].str} } yyVAL.union = yyLOCAL case 888: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4837 +======= +//line sql.y:4829 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &VExplainStmt{Type: yyDollar[3].vexplainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()} + yyLOCAL = &ExplainStmt{Type: yyDollar[3].explainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 889: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement //line sql.y:4843 +======= + case 886: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Statement +//line sql.y:4835 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &OtherAdmin{} + yyLOCAL = &VExplainStmt{Type: yyDollar[3].vexplainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()} } yyVAL.union = yyLOCAL case 890: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4847 +======= +//line sql.y:4841 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &OtherAdmin{} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 891: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4853 +======= + case 888: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Statement +//line sql.y:4845 + { + yyLOCAL = &OtherAdmin{} + } + yyVAL.union = yyLOCAL + case 889: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Statement +//line sql.y:4851 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &LockTables{Tables: yyDollar[3].tableAndLockTypesUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 892: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableAndLockTypes //line sql.y:4859 +======= + case 890: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL TableAndLockTypes +//line sql.y:4857 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = TableAndLockTypes{yyDollar[1].tableAndLockTypeUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 893: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:4863 +======= + case 891: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:4861 +>>>>>>> e439161508 (fix: complete time period feature) { yySLICE := (*TableAndLockTypes)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableAndLockTypeUnion()) } +<<<<<<< HEAD case 894: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *TableAndLockType //line sql.y:4869 +======= + case 892: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *TableAndLockType +//line sql.y:4867 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &TableAndLockType{Table: yyDollar[1].aliasedTableNameUnion(), Lock: yyDollar[2].lockTypeUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 895: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LockType //line sql.y:4875 +======= + case 893: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL LockType +//line sql.y:4873 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = Read } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 896: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL LockType //line sql.y:4879 +======= + case 894: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL LockType +//line sql.y:4877 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = ReadLocal } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 897: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LockType //line sql.y:4883 +======= + case 895: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL LockType +//line sql.y:4881 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = Write } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 898: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL LockType //line sql.y:4887 +======= + case 896: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL LockType +//line sql.y:4885 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = LowPriorityWrite } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 899: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement //line sql.y:4893 +======= + case 897: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Statement +//line sql.y:4891 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &UnlockTables{} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 900: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement @@ -15884,26 +23659,52 @@ yydefault: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement //line sql.y:4903 +======= + case 898: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Statement +//line sql.y:4897 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &RevertMigration{Comments: Comments(yyDollar[2].strs).Parsed(), UUID: string(yyDollar[4].str)} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 902: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4909 +======= + case 899: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Statement +//line sql.y:4901 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), FlushOptions: yyDollar[3].strs} + yyLOCAL = &RevertMigration{Comments: Comments(yyDollar[2].strs).Parsed(), UUID: string(yyDollar[4].str)} } yyVAL.union = yyLOCAL case 903: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:4913 +======= +//line sql.y:4907 + { + yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), FlushOptions: yyDollar[3].strs} + } + yyVAL.union = yyLOCAL + case 901: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Statement +//line sql.y:4911 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 904: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement @@ -15932,10 +23733,41 @@ yydefault: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement //line sql.y:4929 +======= + case 902: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Statement +//line sql.y:4915 + { + yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), WithLock: true} + } + yyVAL.union = yyLOCAL + case 903: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Statement +//line sql.y:4919 + { + yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion()} + } + yyVAL.union = yyLOCAL + case 904: + yyDollar = yyS[yypt-7 : yypt+1] + var yyLOCAL Statement +//line sql.y:4923 + { + yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), WithLock: true} + } + yyVAL.union = yyLOCAL + case 905: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Statement +//line sql.y:4927 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), ForExport: true} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 908: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:4935 @@ -15951,16 +23783,50 @@ yydefault: case 910: yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:4945 +======= + case 906: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:4933 + { + yyVAL.strs = []string{yyDollar[1].str} + } + case 907: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:4937 + { + yyVAL.strs = append(yyDollar[1].strs, yyDollar[3].str) + } + case 908: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:4943 + { + yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) + } + case 909: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:4947 + { + yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) + } + case 910: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:4951 +>>>>>>> e439161508 (fix: complete time period feature) { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 911: yyDollar = yyS[yypt-2 : yypt+1] +<<<<<<< HEAD //line sql.y:4949 +======= +//line sql.y:4955 +>>>>>>> e439161508 (fix: complete time period feature) { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 912: +<<<<<<< HEAD yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:4953 { @@ -15987,12 +23853,44 @@ yydefault: case 916: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:4969 +======= + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:4959 + { + yyVAL.str = string(yyDollar[1].str) + } + case 913: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:4963 + { + yyVAL.str = string(yyDollar[1].str) + } + case 914: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:4967 +>>>>>>> e439161508 (fix: complete time period feature) { yyVAL.str = string(yyDollar[1].str) } + case 915: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:4971 + { + yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) + yyDollar[3].str + } + case 916: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:4975 + { + yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) + } case 917: yyDollar = yyS[yypt-1 : yypt+1] +<<<<<<< HEAD //line sql.y:4973 +======= +//line sql.y:4979 +>>>>>>> e439161508 (fix: complete time period feature) { yyVAL.str = string(yyDollar[1].str) } @@ -16010,6 +23908,7 @@ yydefault: } case 920: yyDollar = yyS[yypt-1 : yypt+1] +<<<<<<< HEAD //line sql.y:4985 { yyVAL.str = string(yyDollar[1].str) @@ -16030,10 +23929,27 @@ yydefault: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool //line sql.y:4998 +======= +//line sql.y:4983 + { + yyVAL.str = string(yyDollar[1].str) + } + case 919: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:4987 + { + yyVAL.str = string(yyDollar[1].str) + } + case 920: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL bool +//line sql.y:4992 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = false } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 924: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool @@ -16046,10 +23962,17 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool //line sql.y:5006 +======= + case 921: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL bool +//line sql.y:4996 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = true } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 926: yyDollar = yyS[yypt-0 : yypt+1] //line sql.y:5011 @@ -16091,18 +24014,77 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool //line sql.y:5040 +======= + case 922: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL bool +//line sql.y:5000 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = true } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 933: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool //line sql.y:5044 +======= + case 923: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:5005 + { + yyVAL.str = "" + } + case 924: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:5009 + { + yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String() + } + case 925: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:5014 + { + setAllowComments(yylex, true) + } + case 926: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:5018 + { + yyVAL.strs = yyDollar[2].strs + setAllowComments(yylex, false) + } + case 927: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:5024 + { + yyVAL.strs = nil + } + case 928: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:5028 + { + yyVAL.strs = append(yyDollar[1].strs, yyDollar[2].str) + } + case 929: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL bool +//line sql.y:5034 + { + yyLOCAL = true + } + yyVAL.union = yyLOCAL + case 930: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL bool +//line sql.y:5038 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = false } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 934: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool @@ -16114,20 +24096,60 @@ yydefault: case 935: yyDollar = yyS[yypt-0 : yypt+1] //line sql.y:5053 +======= + case 931: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL bool +//line sql.y:5042 +>>>>>>> e439161508 (fix: complete time period feature) { yyVAL.str = "" } +<<<<<<< HEAD case 936: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:5057 +======= + yyVAL.union = yyLOCAL + case 932: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:5047 { - yyVAL.str = SQLNoCacheStr + yyVAL.str = "" } - case 937: + case 933: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5061 +//line sql.y:5051 { - yyVAL.str = SQLCacheStr + yyVAL.str = SQLNoCacheStr + } + case 934: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:5055 + { + yyVAL.str = SQLCacheStr + } + case 935: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL bool +//line sql.y:5060 + { + yyLOCAL = false + } + yyVAL.union = yyLOCAL + case 936: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL bool +//line sql.y:5064 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyVAL.str = SQLNoCacheStr + } + case 937: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:5061 + { + yyVAL.str = SQLCacheStr } case 938: yyDollar = yyS[yypt-0 : yypt+1] @@ -16145,6 +24167,7 @@ yydefault: yyLOCAL = true } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 940: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool @@ -16157,14 +24180,32 @@ yydefault: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement //line sql.y:5080 +======= + case 937: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL bool +//line sql.y:5068 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &PrepareStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Statement: yyDollar[5].exprUnion()} + yyLOCAL = true } yyVAL.union = yyLOCAL case 942: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement +<<<<<<< HEAD //line sql.y:5084 +======= +//line sql.y:5074 + { + yyLOCAL = &PrepareStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Statement: yyDollar[5].exprUnion()} + } + yyVAL.union = yyLOCAL + case 939: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Statement +//line sql.y:5078 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &PrepareStmt{ Name: yyDollar[3].identifierCI, @@ -16173,22 +24214,69 @@ yydefault: } } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 943: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement //line sql.y:5094 +======= + case 940: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Statement +//line sql.y:5088 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ExecuteStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Arguments: yyDollar[4].variablesUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 944: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*Variable //line sql.y:5099 +======= + case 941: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL []*Variable +//line sql.y:5093 + { + yyLOCAL = nil + } + yyVAL.union = yyLOCAL + case 942: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL []*Variable +//line sql.y:5097 + { + yyLOCAL = yyDollar[2].variablesUnion() + } + yyVAL.union = yyLOCAL + case 943: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Statement +//line sql.y:5103 + { + yyLOCAL = &DeallocateStmt{Type: DeallocateType, Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI} + } + yyVAL.union = yyLOCAL + case 944: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Statement +//line sql.y:5107 + { + yyLOCAL = &DeallocateStmt{Type: DropType, Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI} + } + yyVAL.union = yyLOCAL + case 945: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL SelectExprs +//line sql.y:5112 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = nil } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 945: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []*Variable @@ -16225,10 +24313,17 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExprs //line sql.y:5122 +======= + case 946: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL SelectExprs +//line sql.y:5116 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].selectExprsUnion() } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 950: yyDollar = yyS[yypt-0 : yypt+1] //line sql.y:5127 @@ -16305,49 +24400,162 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExprs //line sql.y:5179 +======= + case 947: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:5121 + { + yyVAL.strs = nil + } + case 948: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:5125 + { + yyVAL.strs = []string{yyDollar[1].str} + } + case 949: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:5129 + { // TODO: This is a hack since I couldn't get it to work in a nicer way. I got 'conflicts: 8 shift/reduce' + yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str} + } + case 950: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:5133 + { + yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str} + } + case 951: + yyDollar = yyS[yypt-4 : yypt+1] +//line sql.y:5137 + { + yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str, yyDollar[4].str} + } + case 952: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:5143 + { + yyVAL.str = SQLNoCacheStr + } + case 953: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:5147 + { + yyVAL.str = SQLCacheStr + } + case 954: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:5151 + { + yyVAL.str = DistinctStr + } + case 955: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:5155 + { + yyVAL.str = DistinctStr + } + case 956: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:5159 + { + yyVAL.str = StraightJoinHint + } + case 957: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:5163 + { + yyVAL.str = SQLCalcFoundRowsStr + } + case 958: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:5167 + { + yyVAL.str = AllStr // These are not picked up by NewSelect, and so ALL will be dropped. But this is OK, since it's redundant anyway + } + case 959: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL SelectExprs +//line sql.y:5173 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = SelectExprs{yyDollar[1].selectExprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 963: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:5183 +======= + case 960: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:5177 +>>>>>>> e439161508 (fix: complete time period feature) { yySLICE := (*SelectExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].selectExprUnion()) } +<<<<<<< HEAD case 964: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExpr //line sql.y:5189 +======= + case 961: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL SelectExpr +//line sql.y:5183 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &StarExpr{} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 965: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL SelectExpr //line sql.y:5193 +======= + case 962: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL SelectExpr +//line sql.y:5187 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &AliasedExpr{Expr: yyDollar[1].exprUnion(), As: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 966: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectExpr //line sql.y:5197 +======= + case 963: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL SelectExpr +//line sql.y:5191 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &StarExpr{TableName: TableName{Name: yyDollar[1].identifierCS}} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 967: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL SelectExpr //line sql.y:5201 +======= + case 964: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL SelectExpr +//line sql.y:5195 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &StarExpr{TableName: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 968: yyDollar = yyS[yypt-0 : yypt+1] //line sql.y:5206 @@ -16367,154 +24575,329 @@ yydefault: yyVAL.identifierCI = yyDollar[2].identifierCI } case 972: +======= + case 965: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:5200 + { + yyVAL.identifierCI = IdentifierCI{} + } + case 966: +>>>>>>> e439161508 (fix: complete time period feature) yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:5221 { - yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) + yyVAL.identifierCI = yyDollar[1].identifierCI + } + case 967: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:5208 + { + yyVAL.identifierCI = yyDollar[2].identifierCI } +<<<<<<< HEAD case 973: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL TableExprs //line sql.y:5226 +======= + case 969: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:5215 + { + yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) + } + case 970: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL TableExprs +//line sql.y:5220 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = TableExprs{&AliasedTableExpr{Expr: TableName{Name: NewIdentifierCS("dual")}}} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 974: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExprs //line sql.y:5230 +======= + case 971: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL TableExprs +//line sql.y:5224 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].tableExprsUnion() } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 975: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TableExprs //line sql.y:5236 +======= + case 972: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL TableExprs +//line sql.y:5230 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[2].tableExprsUnion() } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 976: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExprs //line sql.y:5242 +======= + case 973: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL TableExprs +//line sql.y:5236 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = TableExprs{yyDollar[1].tableExprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 977: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:5246 +======= + case 974: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:5240 +>>>>>>> e439161508 (fix: complete time period feature) { yySLICE := (*TableExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableExprUnion()) } +<<<<<<< HEAD case 980: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExpr //line sql.y:5256 +======= + case 977: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL TableExpr +//line sql.y:5250 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].aliasedTableNameUnion() } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 981: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr //line sql.y:5260 +======= + case 978: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL TableExpr +//line sql.y:5254 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].derivedTableUnion(), As: yyDollar[3].identifierCS, Columns: yyDollar[4].columnsUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 982: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableExpr //line sql.y:5264 +======= + case 979: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL TableExpr +//line sql.y:5258 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ParenTableExpr{Exprs: yyDollar[2].tableExprsUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 983: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExpr //line sql.y:5268 +======= + case 980: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL TableExpr +//line sql.y:5262 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].tableExprUnion() } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 984: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *DerivedTable //line sql.y:5274 +======= + case 981: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL *DerivedTable +//line sql.y:5268 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &DerivedTable{Lateral: false, Select: yyDollar[1].selStmtUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 985: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *DerivedTable //line sql.y:5278 +======= + case 982: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *DerivedTable +//line sql.y:5272 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &DerivedTable{Lateral: true, Select: yyDollar[2].selStmtUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 986: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *AliasedTableExpr //line sql.y:5284 +======= + case 983: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL *AliasedTableExpr +//line sql.y:5278 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, As: yyDollar[2].identifierCS, Hints: yyDollar[3].indexHintsUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 987: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *AliasedTableExpr //line sql.y:5288 +======= + case 984: + yyDollar = yyS[yypt-7 : yypt+1] + var yyLOCAL *AliasedTableExpr +//line sql.y:5282 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, Partitions: yyDollar[4].partitionsUnion(), As: yyDollar[6].identifierCS, Hints: yyDollar[7].indexHintsUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD +======= + case 985: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL Columns +//line sql.y:5287 + { + yyLOCAL = nil + } + yyVAL.union = yyLOCAL + case 986: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Columns +//line sql.y:5291 + { + yyLOCAL = yyDollar[2].columnsUnion() + } + yyVAL.union = yyLOCAL + case 987: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL Columns +//line sql.y:5296 + { + yyLOCAL = nil + } + yyVAL.union = yyLOCAL +>>>>>>> e439161508 (fix: complete time period feature) case 988: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Columns +<<<<<<< HEAD //line sql.y:5293 +======= +//line sql.y:5300 { - yyLOCAL = nil + yyLOCAL = yyDollar[1].columnsUnion() } yyVAL.union = yyLOCAL case 989: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Columns +//line sql.y:5306 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = nil + } + yyVAL.union = yyLOCAL + case 990: yyDollar = yyS[yypt-3 : yypt+1] +<<<<<<< HEAD var yyLOCAL Columns //line sql.y:5297 +======= +//line sql.y:5310 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[2].columnsUnion() } +<<<<<<< HEAD yyVAL.union = yyLOCAL case 990: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Columns //line sql.y:5302 +======= + case 991: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL []*Variable +//line sql.y:5316 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = nil } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 991: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns //line sql.y:5306 +======= + case 992: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:5320 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].columnsUnion() } +<<<<<<< HEAD yyVAL.union = yyLOCAL case 992: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns //line sql.y:5312 +======= + case 993: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Columns +//line sql.y:5326 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 993: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:5316 @@ -16549,39 +24932,71 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns //line sql.y:5336 - { - yyLOCAL = Columns{NewIdentifierCI(string(yyDollar[1].str))} +======= + case 994: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Columns +//line sql.y:5330 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = Columns{NewIdentifierCI(string(yyDollar[1].str))} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 998: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:5340 +======= + case 995: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:5334 +>>>>>>> e439161508 (fix: complete time period feature) { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } +<<<<<<< HEAD case 999: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:5344 +======= + case 996: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:5338 +>>>>>>> e439161508 (fix: complete time period feature) { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, NewIdentifierCI(string(yyDollar[3].str))) } +<<<<<<< HEAD case 1000: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Partitions //line sql.y:5350 +======= + case 997: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Partitions +//line sql.y:5344 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = Partitions{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1001: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:5354 +======= + case 998: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:5348 +>>>>>>> e439161508 (fix: complete time period feature) { yySLICE := (*Partitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } +<<<<<<< HEAD case 1002: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr @@ -16594,6 +25009,12 @@ yydefault: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr //line sql.y:5371 +======= + case 999: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL TableExpr +//line sql.y:5361 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } @@ -16601,19 +25022,39 @@ yydefault: case 1004: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr +<<<<<<< HEAD //line sql.y:5375 +======= +//line sql.y:5365 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1005: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableExpr //line sql.y:5379 +======= + case 1001: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL TableExpr +//line sql.y:5369 + { + yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} + } + yyVAL.union = yyLOCAL + case 1002: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL TableExpr +//line sql.y:5373 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1006: yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:5385 @@ -16627,19 +25068,62 @@ yydefault: yyVAL.joinCondition = &JoinCondition{Using: yyDollar[3].columnsUnion()} } case 1008: +======= + case 1003: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:5379 + { + yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()} + } + case 1004: + yyDollar = yyS[yypt-4 : yypt+1] +//line sql.y:5381 + { + yyVAL.joinCondition = &JoinCondition{Using: yyDollar[3].columnsUnion()} + } + case 1005: +>>>>>>> e439161508 (fix: complete time period feature) yyDollar = yyS[yypt-0 : yypt+1] //line sql.y:5391 { yyVAL.joinCondition = &JoinCondition{} } - case 1009: + case 1006: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:5393 { yyVAL.joinCondition = yyDollar[1].joinCondition +<<<<<<< HEAD +======= + } + case 1007: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:5391 + { + yyVAL.joinCondition = &JoinCondition{} + } + case 1008: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:5393 + { + yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()} + } + case 1009: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:5396 + { + yyVAL.empty = struct{}{} +>>>>>>> e439161508 (fix: complete time period feature) } case 1010: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:5398 + { + yyVAL.empty = struct{}{} + } + case 1011: yyDollar = yyS[yypt-0 : yypt+1] +<<<<<<< HEAD //line sql.y:5397 { yyVAL.joinCondition = &JoinCondition{} @@ -16681,11 +25165,25 @@ yydefault: yyVAL.identifierCS = yyDollar[2].identifierCS } case 1018: +======= +//line sql.y:5401 + { + yyVAL.identifierCS = NewIdentifierCS("") + } + case 1012: +>>>>>>> e439161508 (fix: complete time period feature) yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:5422 { - yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) + yyVAL.identifierCS = yyDollar[1].identifierCS + } + case 1013: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:5409 + { + yyVAL.identifierCS = yyDollar[2].identifierCS } +<<<<<<< HEAD case 1019: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL JoinType @@ -16698,13 +25196,58 @@ yydefault: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType //line sql.y:5432 +======= + case 1015: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:5416 + { + yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) + } + case 1016: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL JoinType +//line sql.y:5422 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL - case 1021: + case 1017: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL JoinType +//line sql.y:5426 + { + yyLOCAL = NormalJoinType + } + yyVAL.union = yyLOCAL + case 1018: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL JoinType +//line sql.y:5430 + { + yyLOCAL = NormalJoinType + } + yyVAL.union = yyLOCAL + case 1019: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL JoinType +//line sql.y:5436 + { + yyLOCAL = StraightJoinType + } + yyVAL.union = yyLOCAL + case 1020: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType +//line sql.y:5442 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = NormalJoinType + } + yyVAL.union = yyLOCAL + case 1021: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL JoinType +<<<<<<< HEAD //line sql.y:5436 { yyLOCAL = NormalJoinType @@ -16714,13 +25257,25 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL JoinType //line sql.y:5442 +======= +//line sql.y:5446 + { + yyLOCAL = LeftJoinType + } + yyVAL.union = yyLOCAL + case 1022: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL JoinType +//line sql.y:5450 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = StraightJoinType } yyVAL.union = yyLOCAL case 1023: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL JoinType +<<<<<<< HEAD //line sql.y:5448 { yyLOCAL = LeftJoinType @@ -16754,14 +25309,29 @@ yydefault: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType //line sql.y:5466 +======= +//line sql.y:5454 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = NaturalJoinType + yyLOCAL = RightJoinType } yyVAL.union = yyLOCAL case 1028: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType +<<<<<<< HEAD //line sql.y:5470 +======= +//line sql.y:5460 + { + yyLOCAL = NaturalJoinType + } + yyVAL.union = yyLOCAL + case 1025: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL JoinType +//line sql.y:5464 +>>>>>>> e439161508 (fix: complete time period feature) { if yyDollar[2].joinTypeUnion() == LeftJoinType { yyLOCAL = NaturalLeftJoinType @@ -16770,6 +25340,7 @@ yydefault: } } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1029: yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:5480 @@ -16804,10 +25375,47 @@ yydefault: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL IndexHints //line sql.y:5505 +======= + case 1026: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:5474 + { + yyVAL.tableName = yyDollar[2].tableName + } + case 1027: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:5478 + { + yyVAL.tableName = yyDollar[1].tableName + } + case 1028: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:5484 + { + yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS} + } + case 1029: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:5488 + { + yyVAL.tableName = TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS} + } + case 1030: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:5494 + { + yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS} + } + case 1031: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL IndexHints +//line sql.y:5499 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = nil } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1035: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IndexHints @@ -16820,33 +25428,68 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IndexHints //line sql.y:5515 +======= + case 1032: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL IndexHints +//line sql.y:5503 + { + yyLOCAL = yyDollar[1].indexHintsUnion() + } + yyVAL.union = yyLOCAL + case 1033: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL IndexHints +//line sql.y:5509 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = IndexHints{yyDollar[1].indexHintUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1037: yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:5519 +======= + case 1034: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:5513 +>>>>>>> e439161508 (fix: complete time period feature) { yySLICE := (*IndexHints)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].indexHintUnion()) } +<<<<<<< HEAD case 1038: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint //line sql.y:5525 +======= + case 1035: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL *IndexHint +//line sql.y:5519 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1039: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *IndexHint //line sql.y:5529 +======= + case 1036: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL *IndexHint +//line sql.y:5523 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1040: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint @@ -16859,26 +25502,55 @@ yydefault: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint //line sql.y:5537 +======= + case 1037: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL *IndexHint +//line sql.y:5527 + { + yyLOCAL = &IndexHint{Type: IgnoreOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} + } + yyVAL.union = yyLOCAL + case 1038: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL *IndexHint +//line sql.y:5531 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &IndexHint{Type: ForceOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1042: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL IndexHintForType //line sql.y:5542 +======= + case 1039: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL IndexHintForType +//line sql.y:5536 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = NoForType } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1043: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IndexHintForType //line sql.y:5546 +======= + case 1040: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL IndexHintForType +//line sql.y:5540 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = JoinForType } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1044: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL IndexHintForType @@ -16891,29 +25563,90 @@ yydefault: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL IndexHintForType //line sql.y:5554 +======= + case 1041: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL IndexHintForType +//line sql.y:5544 + { + yyLOCAL = OrderByForType + } + yyVAL.union = yyLOCAL + case 1042: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL IndexHintForType +//line sql.y:5548 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = GroupByForType } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1046: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr //line sql.y:5560 +======= + case 1043: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL Expr +//line sql.y:5554 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = nil } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1047: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr //line sql.y:5564 +======= + case 1044: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Expr +//line sql.y:5558 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL + case 1045: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Expr +//line sql.y:5565 + { + yyLOCAL = &OrExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1046: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Expr +//line sql.y:5569 + { + yyLOCAL = &XorExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1047: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Expr +//line sql.y:5573 + { + yyLOCAL = &AndExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} + } + yyVAL.union = yyLOCAL case 1048: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Expr +//line sql.y:5577 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = yyDollar[2].exprUnion() + } + yyVAL.union = yyLOCAL + case 1049: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5571 { yyLOCAL = &OrExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} @@ -16947,101 +25680,193 @@ yydefault: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr //line sql.y:5587 +======= +//line sql.y:5581 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].isExprOperatorUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1053: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr //line sql.y:5591 +======= + case 1050: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Expr +//line sql.y:5585 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1054: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:5595 +======= + case 1051: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:5589 { yyLOCAL = &MemberOfExpr{Value: yyDollar[1].exprUnion(), JSONArr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1055: + case 1052: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5601 +//line sql.y:5595 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNullOp} } yyVAL.union = yyLOCAL - case 1056: + case 1053: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:5599 + { + yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNotNullOp} + } + yyVAL.union = yyLOCAL + case 1054: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Expr +//line sql.y:5603 + { + yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Right: yyDollar[3].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1055: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Expr +//line sql.y:5607 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = &MemberOfExpr{Value: yyDollar[1].exprUnion(), JSONArr: yyDollar[5].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1056: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Expr +<<<<<<< HEAD +//line sql.y:5601 +======= +//line sql.y:5613 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNullOp} + } + yyVAL.union = yyLOCAL + case 1057: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5605 +======= +//line sql.y:5617 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNotNullOp} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1057: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr //line sql.y:5609 +======= + case 1058: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Expr +//line sql.y:5621 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1058: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr //line sql.y:5613 +======= + case 1059: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:5625 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1059: + case 1060: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5619 +======= +//line sql.y:5629 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: InOp, Right: yyDollar[3].colTupleUnion()} } yyVAL.union = yyLOCAL - case 1060: + case 1061: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5623 +======= +//line sql.y:5633 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotInOp, Right: yyDollar[4].colTupleUnion()} } yyVAL.union = yyLOCAL - case 1061: + case 1062: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5627 +======= +//line sql.y:5637 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: true, From: yyDollar[3].exprUnion(), To: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1062: + case 1063: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5631 +======= +//line sql.y:5641 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: false, From: yyDollar[4].exprUnion(), To: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 1063: + case 1064: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5635 +======= +//line sql.y:5645 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1064: + case 1065: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5639 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion()} @@ -17075,104 +25900,207 @@ yydefault: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:5655 +======= +//line sql.y:5649 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotRegexpOp, Right: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1069: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr //line sql.y:5659 +======= + case 1066: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Expr +//line sql.y:5653 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1070: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:5665 { +======= + case 1067: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:5659 + { + } + case 1068: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:5662 + { + } + case 1069: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Expr +//line sql.y:5668 + { + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitOrOp, Right: yyDollar[3].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1070: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Expr +//line sql.y:5672 + { + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitAndOp, Right: yyDollar[3].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } case 1071: +<<<<<<< HEAD yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:5668 { +======= + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Expr +//line sql.y:5676 + { + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftLeftOp, Right: yyDollar[3].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } case 1072: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5674 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitOrOp, Right: yyDollar[3].exprUnion()} +======= +//line sql.y:5680 + { + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftRightOp, Right: yyDollar[3].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1073: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5678 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitAndOp, Right: yyDollar[3].exprUnion()} +======= +//line sql.y:5684 + { + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: PlusOp, Right: yyDollar[3].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1074: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5682 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftLeftOp, Right: yyDollar[3].exprUnion()} +======= +//line sql.y:5688 + { + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MinusOp, Right: yyDollar[3].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1075: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5686 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftRightOp, Right: yyDollar[3].exprUnion()} +======= +//line sql.y:5692 + { + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MultOp, Right: yyDollar[3].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1076: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5690 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: PlusOp, Right: yyDollar[3].exprUnion()} +======= +//line sql.y:5696 + { + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: DivOp, Right: yyDollar[3].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1077: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5694 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MinusOp, Right: yyDollar[3].exprUnion()} +======= +//line sql.y:5700 + { + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1078: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5698 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MultOp, Right: yyDollar[3].exprUnion()} +======= +//line sql.y:5704 + { + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: IntDivOp, Right: yyDollar[3].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1079: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5702 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: DivOp, Right: yyDollar[3].exprUnion()} +======= +//line sql.y:5708 + { + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1080: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5706 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} +======= +//line sql.y:5712 + { + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitXorOp, Right: yyDollar[3].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1081: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5710 +======= +//line sql.y:5716 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: IntDivOp, Right: yyDollar[3].exprUnion()} } @@ -17180,7 +26108,11 @@ yydefault: case 1082: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5714 +======= +//line sql.y:5722 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} } @@ -17188,7 +26120,11 @@ yydefault: case 1083: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5718 +======= +//line sql.y:5726 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitXorOp, Right: yyDollar[3].exprUnion()} } @@ -17196,7 +26132,11 @@ yydefault: case 1084: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5722 +======= +//line sql.y:5730 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].exprUnion() } @@ -17204,23 +26144,35 @@ yydefault: case 1085: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5728 +======= +//line sql.y:5734 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL case 1086: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5732 +======= +//line sql.y:5738 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = yyDollar[1].exprUnion() + yyLOCAL = &CollateExpr{Expr: yyDollar[1].exprUnion(), Collation: yyDollar[3].str} } yyVAL.union = yyLOCAL case 1087: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5736 +======= +//line sql.y:5742 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].exprUnion() } @@ -17228,6 +26180,7 @@ yydefault: case 1088: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5740 { yyLOCAL = yyDollar[1].exprUnion() @@ -17261,26 +26214,41 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr //line sql.y:5756 +======= +//line sql.y:5746 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = yyDollar[1].variableUnion() + yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1093: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr //line sql.y:5760 +======= + case 1089: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Expr +//line sql.y:5750 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = yyDollar[2].exprUnion() // TODO: do we really want to ignore unary '+' before any kind of literals? + yyLOCAL = yyDollar[1].variableUnion() } yyVAL.union = yyLOCAL case 1094: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5764 +======= +//line sql.y:5754 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &UnaryExpr{Operator: UMinusOp, Expr: yyDollar[2].exprUnion()} + yyLOCAL = yyDollar[2].exprUnion() // TODO: do we really want to ignore unary '+' before any kind of literals? } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1095: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr @@ -17317,10 +26285,57 @@ yydefault: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr //line sql.y:5784 +======= + case 1091: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Expr +//line sql.y:5758 + { + yyLOCAL = &UnaryExpr{Operator: UMinusOp, Expr: yyDollar[2].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1092: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Expr +//line sql.y:5762 + { + yyLOCAL = &UnaryExpr{Operator: TildaOp, Expr: yyDollar[2].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1093: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Expr +//line sql.y:5766 + { + yyLOCAL = &UnaryExpr{Operator: BangOp, Expr: yyDollar[2].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1094: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Expr +//line sql.y:5770 + { + yyLOCAL = yyDollar[1].subqueryUnion() + } + yyVAL.union = yyLOCAL + case 1095: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Expr +//line sql.y:5774 + { + yyLOCAL = yyDollar[1].exprUnion() + } + yyVAL.union = yyLOCAL + case 1096: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Expr +//line sql.y:5778 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ExistsExpr{Subquery: yyDollar[2].subqueryUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1100: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr @@ -17333,30 +26348,62 @@ yydefault: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr //line sql.y:5792 +======= + case 1097: + yyDollar = yyS[yypt-7 : yypt+1] + var yyLOCAL Expr +//line sql.y:5782 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &CastExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion(), Array: yyDollar[6].booleanUnion()} + yyLOCAL = &MatchExpr{Columns: yyDollar[2].colNamesUnion(), Expr: yyDollar[5].exprUnion(), Option: yyDollar[6].matchExprOptionUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1102: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:5796 +======= + case 1098: + yyDollar = yyS[yypt-7 : yypt+1] + var yyLOCAL Expr +//line sql.y:5786 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &ConvertExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion()} + yyLOCAL = &CastExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion(), Array: yyDollar[6].booleanUnion()} } yyVAL.union = yyLOCAL case 1103: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5800 +======= +//line sql.y:5790 + { + yyLOCAL = &ConvertExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion()} + } + yyVAL.union = yyLOCAL + case 1100: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:5794 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ConvertUsingExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].str} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1104: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr //line sql.y:5804 +======= + case 1101: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Expr +//line sql.y:5798 +>>>>>>> e439161508 (fix: complete time period feature) { // From: https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#operator_binary // To convert a string expression to a binary string, these constructs are equivalent: @@ -17365,18 +26412,32 @@ yydefault: yyLOCAL = &ConvertExpr{Expr: yyDollar[2].exprUnion(), Type: &ConvertType{Type: yyDollar[1].str}} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1105: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr //line sql.y:5812 +======= + case 1102: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Expr +//line sql.y:5806 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Default{ColName: yyDollar[2].str} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1106: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr //line sql.y:5816 +======= + case 1103: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Expr +//line sql.y:5810 +>>>>>>> e439161508 (fix: complete time period feature) { // INTERVAL can trigger a shift / reduce conflict. We want // to shift here for the interval rule. In case we do have @@ -17385,14 +26446,22 @@ yydefault: yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1107: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:5824 +======= + case 1104: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:5818 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &IntervalFuncExpr{Expr: yyDollar[3].exprUnion(), Exprs: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1108: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr @@ -17405,49 +26474,95 @@ yydefault: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr //line sql.y:5832 +======= + case 1105: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Expr +//line sql.y:5822 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: JSONUnquoteExtractOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: JSONExtractOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1110: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:5838 +======= +//line sql.y:5826 + { + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: JSONUnquoteExtractOp, Right: yyDollar[3].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1107: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Expr +//line sql.y:5832 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &IntervalExpr{Expr: yyDollar[2].exprUnion(), Unit: yyDollar[3].identifierCI.String()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1111: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColName //line sql.y:5844 +======= + case 1108: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL []*ColName +//line sql.y:5838 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].colNamesUnion() } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1112: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*ColName //line sql.y:5848 +======= + case 1109: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL []*ColName +//line sql.y:5842 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[2].colNamesUnion() } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1113: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColName //line sql.y:5854 +======= + case 1110: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL []*ColName +//line sql.y:5848 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = []*ColName{yyDollar[1].colNameUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1114: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:5858 +======= + case 1111: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:5852 +>>>>>>> e439161508 (fix: complete time period feature) { yySLICE := (*[]*ColName)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].colNameUnion()) } +<<<<<<< HEAD case 1115: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType @@ -17460,45 +26575,108 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType //line sql.y:5868 +======= + case 1112: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL TrimType +//line sql.y:5858 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = LeadingTrimType + yyLOCAL = BothTrimType } yyVAL.union = yyLOCAL case 1117: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType +<<<<<<< HEAD //line sql.y:5872 +======= +//line sql.y:5862 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = TrailingTrimType + yyLOCAL = LeadingTrimType } yyVAL.union = yyLOCAL case 1118: yyDollar = yyS[yypt-1 : yypt+1] +<<<<<<< HEAD var yyLOCAL FrameUnitType //line sql.y:5878 +======= + var yyLOCAL TrimType +//line sql.y:5866 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = FrameRowsType + yyLOCAL = TrailingTrimType } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1119: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FrameUnitType //line sql.y:5882 { yyLOCAL = FrameRangeType +======= + case 1115: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL FrameUnitType +//line sql.y:5872 + { + yyLOCAL = FrameRowsType + } + yyVAL.union = yyLOCAL + case 1116: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL FrameUnitType +//line sql.y:5876 + { + yyLOCAL = FrameRangeType + } + yyVAL.union = yyLOCAL + case 1117: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL ArgumentLessWindowExprType +//line sql.y:5883 + { + yyLOCAL = CumeDistExprType + } + yyVAL.union = yyLOCAL + case 1118: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL ArgumentLessWindowExprType +//line sql.y:5887 + { + yyLOCAL = DenseRankExprType + } + yyVAL.union = yyLOCAL + case 1119: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL ArgumentLessWindowExprType +//line sql.y:5891 + { + yyLOCAL = PercentRankExprType +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1120: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType +<<<<<<< HEAD //line sql.y:5889 { yyLOCAL = CumeDistExprType +======= +//line sql.y:5895 + { + yyLOCAL = RankExprType +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1121: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType +<<<<<<< HEAD //line sql.y:5893 { yyLOCAL = DenseRankExprType @@ -17526,12 +26704,42 @@ yydefault: //line sql.y:5905 { yyLOCAL = RowNumberExprType +======= +//line sql.y:5899 + { + yyLOCAL = RowNumberExprType } yyVAL.union = yyLOCAL - case 1125: + case 1122: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5911 +//line sql.y:5905 + { + yyLOCAL = &FramePoint{Type: CurrentRowType} + } + yyVAL.union = yyLOCAL + case 1123: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *FramePoint +//line sql.y:5909 + { + yyLOCAL = &FramePoint{Type: UnboundedPrecedingType} + } + yyVAL.union = yyLOCAL + case 1124: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *FramePoint +//line sql.y:5913 + { + yyLOCAL = &FramePoint{Type: UnboundedFollowingType} +>>>>>>> e439161508 (fix: complete time period feature) + } + yyVAL.union = yyLOCAL + case 1125: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *FramePoint +<<<<<<< HEAD +//line sql.y:5911 { yyLOCAL = &FramePoint{Type: CurrentRowType} } @@ -17564,34 +26772,97 @@ yydefault: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint //line sql.y:5927 +======= +//line sql.y:5917 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &FramePoint{Type: ExprFollowingType, Expr: yyDollar[1].exprUnion()} + yyLOCAL = &FramePoint{Type: ExprPrecedingType, Expr: yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1130: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr //line sql.y:5933 +======= + case 1126: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *FramePoint +//line sql.y:5921 + { + yyLOCAL = &FramePoint{Type: ExprFollowingType, Expr: yyDollar[1].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1127: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Expr +//line sql.y:5927 + { + yyLOCAL = yyDollar[1].exprUnion() + } + yyVAL.union = yyLOCAL + case 1128: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Expr +//line sql.y:5931 + { + yyLOCAL = yyDollar[1].exprUnion() + } + yyVAL.union = yyLOCAL + case 1129: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL *FrameClause +//line sql.y:5936 + { + yyLOCAL = nil + } + yyVAL.union = yyLOCAL + case 1130: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL *FrameClause +//line sql.y:5940 + { + yyLOCAL = yyDollar[1].frameClauseUnion() + } + yyVAL.union = yyLOCAL + case 1131: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *FrameClause +//line sql.y:5946 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1131: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr //line sql.y:5937 +======= + case 1132: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL *FrameClause +//line sql.y:5950 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1132: + case 1133: yyDollar = yyS[yypt-0 : yypt+1] +<<<<<<< HEAD var yyLOCAL *FrameClause //line sql.y:5942 +======= + var yyLOCAL Exprs +//line sql.y:5955 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = nil } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1133: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *FrameClause @@ -17628,10 +26899,17 @@ yydefault: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Exprs //line sql.y:5965 +======= + case 1134: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Exprs +//line sql.y:5959 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[3].exprsUnion() } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1138: yyDollar = yyS[yypt-0 : yypt+1] //line sql.y:5970 @@ -17647,36 +26925,101 @@ yydefault: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *WindowSpecification //line sql.y:5979 +======= + case 1135: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:5964 + { + } + case 1136: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:5967 + { + yyVAL.identifierCI = yyDollar[1].identifierCI + } + case 1137: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL *WindowSpecification +//line sql.y:5973 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &WindowSpecification{Name: yyDollar[1].identifierCI, PartitionClause: yyDollar[2].exprsUnion(), OrderClause: yyDollar[3].orderByUnion(), FrameClause: yyDollar[4].frameClauseUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1141: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *OverClause //line sql.y:5985 +======= + case 1138: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL *OverClause +//line sql.y:5979 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &OverClause{WindowSpec: yyDollar[3].windowSpecificationUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1142: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *OverClause //line sql.y:5989 +======= + case 1139: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *OverClause +//line sql.y:5983 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &OverClause{WindowName: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1143: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *NullTreatmentClause //line sql.y:5994 { yyLOCAL = nil +======= + case 1140: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL *NullTreatmentClause +//line sql.y:5988 + { + yyLOCAL = nil + } + yyVAL.union = yyLOCAL + case 1142: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL *NullTreatmentClause +//line sql.y:5995 + { + yyLOCAL = &NullTreatmentClause{yyDollar[1].nullTreatmentTypeUnion()} + } + yyVAL.union = yyLOCAL + case 1143: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL NullTreatmentType +//line sql.y:6001 + { + yyLOCAL = RespectNullsType + } + yyVAL.union = yyLOCAL + case 1144: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL NullTreatmentType +//line sql.y:6005 + { + yyLOCAL = IgnoreNullsType +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1145: yyDollar = yyS[yypt-1 : yypt+1] +<<<<<<< HEAD var yyLOCAL *NullTreatmentClause //line sql.y:6001 { @@ -17689,6 +27032,20 @@ yydefault: //line sql.y:6007 { yyLOCAL = RespectNullsType +======= + var yyLOCAL FirstOrLastValueExprType +//line sql.y:6011 + { + yyLOCAL = FirstValueExprType + } + yyVAL.union = yyLOCAL + case 1146: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL FirstOrLastValueExprType +//line sql.y:6015 + { + yyLOCAL = LastValueExprType +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1147: @@ -17718,27 +27075,46 @@ yydefault: case 1150: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL FromFirstLastType +<<<<<<< HEAD //line sql.y:6027 +======= +//line sql.y:6021 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = FromFirstType } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1151: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL FromFirstLastType //line sql.y:6031 +======= + case 1148: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL FromFirstLastType +//line sql.y:6025 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = FromLastType } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1152: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *FromFirstLastClause //line sql.y:6036 +======= + case 1149: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL *FromFirstLastClause +//line sql.y:6030 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = nil } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1154: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *FromFirstLastClause @@ -17751,41 +27127,80 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LagLeadExprType //line sql.y:6049 +======= + case 1151: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL *FromFirstLastClause +//line sql.y:6037 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = LagExprType + yyLOCAL = &FromFirstLastClause{yyDollar[1].fromFirstLastTypeUnion()} } yyVAL.union = yyLOCAL case 1156: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LagLeadExprType +<<<<<<< HEAD //line sql.y:6053 +======= +//line sql.y:6043 + { + yyLOCAL = LagExprType + } + yyVAL.union = yyLOCAL + case 1153: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL LagLeadExprType +//line sql.y:6047 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = LeadExprType } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1157: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *WindowDefinition //line sql.y:6059 +======= + case 1154: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL *WindowDefinition +//line sql.y:6053 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &WindowDefinition{Name: yyDollar[1].identifierCI, WindowSpec: yyDollar[4].windowSpecificationUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1158: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL WindowDefinitions //line sql.y:6065 +======= + case 1155: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL WindowDefinitions +//line sql.y:6059 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = WindowDefinitions{yyDollar[1].windowDefinitionUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1159: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:6069 +======= + case 1156: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:6063 +>>>>>>> e439161508 (fix: complete time period feature) { yySLICE := (*WindowDefinitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].windowDefinitionUnion()) } +<<<<<<< HEAD case 1160: yyDollar = yyS[yypt-0 : yypt+1] //line sql.y:6075 @@ -17802,88 +27217,199 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL BoolVal //line sql.y:6085 +======= + case 1157: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:6069 + { + yyVAL.str = "" + } + case 1158: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:6073 + { + yyVAL.str = string(yyDollar[2].identifierCI.String()) + } + case 1159: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL BoolVal +//line sql.y:6079 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = BoolVal(true) } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1163: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL BoolVal //line sql.y:6089 +======= + case 1160: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL BoolVal +//line sql.y:6083 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = BoolVal(false) } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1164: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IsExprOperator //line sql.y:6096 +======= + case 1161: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL IsExprOperator +//line sql.y:6090 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = IsTrueOp } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1165: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IsExprOperator //line sql.y:6100 +======= + case 1162: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL IsExprOperator +//line sql.y:6094 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = IsNotTrueOp } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1166: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IsExprOperator //line sql.y:6104 +======= + case 1163: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL IsExprOperator +//line sql.y:6098 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = IsFalseOp } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1167: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IsExprOperator //line sql.y:6108 +======= + case 1164: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL IsExprOperator +//line sql.y:6102 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = IsNotFalseOp } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1168: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator //line sql.y:6114 { yyLOCAL = EqualOp +======= + case 1165: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL ComparisonExprOperator +//line sql.y:6108 + { + yyLOCAL = EqualOp + } + yyVAL.union = yyLOCAL + case 1166: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL ComparisonExprOperator +//line sql.y:6112 + { + yyLOCAL = LessThanOp + } + yyVAL.union = yyLOCAL + case 1167: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL ComparisonExprOperator +//line sql.y:6116 + { + yyLOCAL = GreaterThanOp + } + yyVAL.union = yyLOCAL + case 1168: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL ComparisonExprOperator +//line sql.y:6120 + { + yyLOCAL = LessEqualOp +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1169: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator +<<<<<<< HEAD //line sql.y:6118 { yyLOCAL = LessThanOp +======= +//line sql.y:6124 + { + yyLOCAL = GreaterEqualOp +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1170: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator +<<<<<<< HEAD //line sql.y:6122 { yyLOCAL = GreaterThanOp +======= +//line sql.y:6128 + { + yyLOCAL = NotEqualOp +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1171: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator +<<<<<<< HEAD //line sql.y:6126 { yyLOCAL = LessEqualOp +======= +//line sql.y:6132 + { + yyLOCAL = NullSafeEqualOp +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1172: yyDollar = yyS[yypt-1 : yypt+1] +<<<<<<< HEAD var yyLOCAL ComparisonExprOperator //line sql.y:6130 { yyLOCAL = GreaterEqualOp +======= + var yyLOCAL ColTuple +//line sql.y:6138 + { + yyLOCAL = yyDollar[1].valTupleUnion() +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1173: @@ -17905,6 +27431,7 @@ yydefault: case 1175: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple +<<<<<<< HEAD //line sql.y:6144 { yyLOCAL = yyDollar[1].valTupleUnion() @@ -17914,58 +27441,103 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple //line sql.y:6148 +======= +//line sql.y:6142 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].subqueryUnion() } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1177: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple //line sql.y:6152 +======= + case 1174: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL ColTuple +//line sql.y:6146 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = ListArg(yyDollar[1].str[2:]) bindVariable(yylex, yyDollar[1].str[2:]) } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1178: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Subquery //line sql.y:6159 +======= + case 1175: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL *Subquery +//line sql.y:6153 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Subquery{yyDollar[1].selStmtUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1179: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Exprs //line sql.y:6165 +======= + case 1176: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Exprs +//line sql.y:6159 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = Exprs{yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1180: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:6169 +======= + case 1177: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:6163 +>>>>>>> e439161508 (fix: complete time period feature) { yySLICE := (*Exprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].exprUnion()) } +<<<<<<< HEAD case 1181: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6179 +======= + case 1178: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6173 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &FuncExpr{Name: yyDollar[1].identifierCI, Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1182: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6183 +======= + case 1179: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6177 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &FuncExpr{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCI, Exprs: yyDollar[5].selectExprsUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1183: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr @@ -17994,61 +27566,160 @@ yydefault: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6205 +======= + case 1180: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6187 { - yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()} + yyLOCAL = &FuncExpr{Name: NewIdentifierCI("left"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1187: - yyDollar = yyS[yypt-8 : yypt+1] + case 1181: + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6209 +//line sql.y:6191 { - yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} + yyLOCAL = &FuncExpr{Name: NewIdentifierCI("right"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL + case 1182: + yyDollar = yyS[yypt-8 : yypt+1] + var yyLOCAL Expr +//line sql.y:6195 + { + yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1183: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6199 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()} + } + yyVAL.union = yyLOCAL +<<<<<<< HEAD + case 1187: + yyDollar = yyS[yypt-8 : yypt+1] + var yyLOCAL Expr +//line sql.y:6209 +======= + case 1184: + yyDollar = yyS[yypt-8 : yypt+1] + var yyLOCAL Expr +//line sql.y:6203 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} + } + yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1188: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6213 +======= + case 1185: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6207 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1189: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr //line sql.y:6217 +======= + case 1186: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Expr +//line sql.y:6211 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &CaseExpr{Expr: yyDollar[2].exprUnion(), Whens: yyDollar[3].whensUnion(), Else: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1190: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6221 +======= + case 1187: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6215 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ValuesFuncExpr{Name: yyDollar[3].colNameUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1191: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr //line sql.y:6225 +======= + case 1188: + yyDollar = yyS[yypt-10 : yypt+1] + var yyLOCAL Expr +//line sql.y:6219 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &InsertExpr{Str: yyDollar[3].exprUnion(), Pos: yyDollar[5].exprUnion(), Len: yyDollar[7].exprUnion(), NewStr: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1192: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr //line sql.y:6229 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI(yyDollar[1].str)} +======= + case 1189: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Expr +//line sql.y:6223 + { + yyLOCAL = &FuncExpr{Name: NewIdentifierCI(yyDollar[1].str)} + } + yyVAL.union = yyLOCAL + case 1190: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Expr +//line sql.y:6234 + { + yyLOCAL = &FuncExpr{Name: NewIdentifierCI("utc_date")} + } + yyVAL.union = yyLOCAL + case 1191: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Expr +//line sql.y:6238 + { + yyLOCAL = yyDollar[1].exprUnion() + } + yyVAL.union = yyLOCAL + case 1192: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Expr +//line sql.y:6244 + { + yyLOCAL = &FuncExpr{Name: NewIdentifierCI("current_date")} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1193: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6240 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("utc_date")} @@ -18074,109 +27745,214 @@ yydefault: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr //line sql.y:6254 +======= +//line sql.y:6248 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("utc_time"), Fsp: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1197: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr //line sql.y:6259 +======= + case 1194: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Expr +//line sql.y:6253 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("current_time"), Fsp: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1198: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6263 +======= + case 1195: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6257 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &CountStar{} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1199: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr //line sql.y:6267 { yyLOCAL = &Count{Distinct: yyDollar[3].booleanUnion(), Args: yyDollar[4].exprsUnion()} +======= + case 1196: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Expr +//line sql.y:6261 + { + yyLOCAL = &Count{Distinct: yyDollar[3].booleanUnion(), Args: yyDollar[4].exprsUnion()} + } + yyVAL.union = yyLOCAL + case 1197: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Expr +//line sql.y:6265 + { + yyLOCAL = &Max{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1198: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Expr +//line sql.y:6269 + { + yyLOCAL = &Min{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1199: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Expr +//line sql.y:6273 + { + yyLOCAL = &Sum{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1200: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6271 { yyLOCAL = &Max{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} +======= +//line sql.y:6277 + { + yyLOCAL = &Avg{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1201: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6275 { yyLOCAL = &Min{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} +======= +//line sql.y:6281 + { + yyLOCAL = &BitAnd{Arg: yyDollar[3].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1202: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6279 { yyLOCAL = &Sum{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} +======= +//line sql.y:6285 + { + yyLOCAL = &BitOr{Arg: yyDollar[3].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1203: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6283 { yyLOCAL = &Avg{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} +======= +//line sql.y:6289 + { + yyLOCAL = &BitXor{Arg: yyDollar[3].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1204: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6287 { yyLOCAL = &BitAnd{Arg: yyDollar[3].exprUnion()} +======= +//line sql.y:6293 + { + yyLOCAL = &Std{Arg: yyDollar[3].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1205: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6291 { yyLOCAL = &BitOr{Arg: yyDollar[3].exprUnion()} +======= +//line sql.y:6297 + { + yyLOCAL = &StdDev{Arg: yyDollar[3].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1206: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6295 { yyLOCAL = &BitXor{Arg: yyDollar[3].exprUnion()} +======= +//line sql.y:6301 + { + yyLOCAL = &StdPop{Arg: yyDollar[3].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1207: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6299 { yyLOCAL = &Std{Arg: yyDollar[3].exprUnion()} +======= +//line sql.y:6305 + { + yyLOCAL = &StdSamp{Arg: yyDollar[3].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1208: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6303 { yyLOCAL = &StdDev{Arg: yyDollar[3].exprUnion()} +======= +//line sql.y:6309 + { + yyLOCAL = &VarPop{Arg: yyDollar[3].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1209: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6307 { yyLOCAL = &StdPop{Arg: yyDollar[3].exprUnion()} @@ -18210,66 +27986,153 @@ yydefault: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6323 +======= +//line sql.y:6313 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &Variance{Arg: yyDollar[3].exprUnion()} + yyLOCAL = &VarSamp{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1214: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr //line sql.y:6327 +======= + case 1210: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6317 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &GroupConcatExpr{Distinct: yyDollar[3].booleanUnion(), Exprs: yyDollar[4].exprsUnion(), OrderBy: yyDollar[5].orderByUnion(), Separator: yyDollar[6].str, Limit: yyDollar[7].limitUnion()} + yyLOCAL = &Variance{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1215: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6331 +======= +//line sql.y:6321 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &TimestampFuncExpr{Name: string("timestampadd"), Unit: yyDollar[3].identifierCI.String(), Expr1: yyDollar[5].exprUnion(), Expr2: yyDollar[7].exprUnion()} + yyLOCAL = &GroupConcatExpr{Distinct: yyDollar[3].booleanUnion(), Exprs: yyDollar[4].exprsUnion(), OrderBy: yyDollar[5].orderByUnion(), Separator: yyDollar[6].str, Limit: yyDollar[7].limitUnion()} } yyVAL.union = yyLOCAL case 1216: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6335 +======= +//line sql.y:6325 + { + yyLOCAL = &TimestampFuncExpr{Name: string("timestampadd"), Unit: yyDollar[3].identifierCI.String(), Expr1: yyDollar[5].exprUnion(), Expr2: yyDollar[7].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1213: + yyDollar = yyS[yypt-8 : yypt+1] + var yyLOCAL Expr +//line sql.y:6329 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &TimestampFuncExpr{Name: string("timestampdiff"), Unit: yyDollar[3].identifierCI.String(), Expr1: yyDollar[5].exprUnion(), Expr2: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1217: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6339 +======= + case 1214: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6333 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ExtractFuncExpr{IntervalTypes: yyDollar[3].intervalTypeUnion(), Expr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1218: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr //line sql.y:6343 +======= + case 1215: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Expr +//line sql.y:6337 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &WeightStringFuncExpr{Expr: yyDollar[3].exprUnion(), As: yyDollar[4].convertTypeUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1219: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6347 +======= + case 1216: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6341 + { + yyLOCAL = &JSONPrettyExpr{JSONVal: yyDollar[3].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1217: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6345 + { + yyLOCAL = &JSONStorageFreeExpr{JSONVal: yyDollar[3].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1218: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6349 + { + yyLOCAL = &JSONStorageSizeExpr{JSONVal: yyDollar[3].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1219: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6353 + { + yyLOCAL = &TrimFuncExpr{TrimFuncType: LTrimType, StringArg: yyDollar[3].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1220: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6357 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &JSONPrettyExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1220: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6351 +======= + case 1221: + yyDollar = yyS[yypt-7 : yypt+1] + var yyLOCAL Expr +//line sql.y:6361 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &JSONStorageFreeExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1221: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr @@ -18284,27 +28147,48 @@ yydefault: //line sql.y:6359 { yyLOCAL = &TrimFuncExpr{TrimFuncType: LTrimType, StringArg: yyDollar[3].exprUnion()} +======= + case 1222: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6365 + { + yyLOCAL = &TrimFuncExpr{StringArg: yyDollar[3].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1223: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6363 { yyLOCAL = &TrimFuncExpr{TrimFuncType: RTrimType, StringArg: yyDollar[3].exprUnion()} +======= +//line sql.y:6369 + { + yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1224: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6367 { yyLOCAL = &TrimFuncExpr{Type: yyDollar[3].trimTypeUnion(), TrimArg: yyDollar[4].exprUnion(), StringArg: yyDollar[6].exprUnion()} +======= +//line sql.y:6373 + { + yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion(), Charset: yyDollar[5].str} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1225: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6371 { yyLOCAL = &TrimFuncExpr{StringArg: yyDollar[3].exprUnion()} @@ -18316,19 +28200,39 @@ yydefault: //line sql.y:6375 { yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion()} +======= +//line sql.y:6377 + { + yyLOCAL = &TrimFuncExpr{TrimArg: yyDollar[3].exprUnion(), StringArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1227: + case 1226: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr +//line sql.y:6381 + { + yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) + } + yyVAL.union = yyLOCAL + case 1227: + yyDollar = yyS[yypt-8 : yypt+1] + var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6379 { yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion(), Charset: yyDollar[5].str} +======= +//line sql.y:6385 + { + yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion(), Pos: yyDollar[7].exprUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1228: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6383 { yyLOCAL = &TrimFuncExpr{TrimArg: yyDollar[3].exprUnion(), StringArg: yyDollar[5].exprUnion()} @@ -18362,82 +28266,179 @@ yydefault: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6399 +======= +//line sql.y:6389 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &LockingFunc{Type: GetLock, Name: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} + yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1233: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6403 +======= + case 1229: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6393 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &LockingFunc{Type: IsFreeLock, Name: yyDollar[3].exprUnion()} + yyLOCAL = &LockingFunc{Type: GetLock, Name: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL case 1234: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6407 +======= +//line sql.y:6397 + { + yyLOCAL = &LockingFunc{Type: IsFreeLock, Name: yyDollar[3].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1231: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6401 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &LockingFunc{Type: IsUsedLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1235: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr //line sql.y:6411 +======= + case 1232: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Expr +//line sql.y:6405 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &LockingFunc{Type: ReleaseAllLocks} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1236: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6415 { yyLOCAL = &LockingFunc{Type: ReleaseLock, Name: yyDollar[3].exprUnion()} +======= + case 1233: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6409 + { + yyLOCAL = &LockingFunc{Type: ReleaseLock, Name: yyDollar[3].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1234: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6413 + { + yyLOCAL = &JSONSchemaValidFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1235: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6417 + { + yyLOCAL = &JSONSchemaValidationReportFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1236: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6421 + { + yyLOCAL = &JSONArrayExpr{Params: yyDollar[3].exprsUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1237: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6419 +======= +//line sql.y:6425 { - yyLOCAL = &JSONSchemaValidFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} + yyLOCAL = &JSONObjectExpr{Params: yyDollar[3].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL case 1238: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6429 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = &JSONSchemaValidFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1239: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6423 +======= +//line sql.y:6433 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &JSONSchemaValidationReportFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1239: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6427 +======= + case 1240: + yyDollar = yyS[yypt-8 : yypt+1] + var yyLOCAL Expr +//line sql.y:6437 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &JSONArrayExpr{Params: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1240: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6431 +======= + case 1241: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6441 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &JSONObjectExpr{Params: yyDollar[3].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL - case 1241: + case 1242: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6435 +======= +//line sql.y:6445 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &JSONQuoteExpr{StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1242: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr @@ -18482,10 +28483,25 @@ yydefault: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6459 +======= + case 1243: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6449 { - yyLOCAL = &JSONOverlapsExpr{JSONDoc1: yyDollar[3].exprUnion(), JSONDoc2: yyDollar[5].exprUnion()} + yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1244: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6453 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = &JSONOverlapsExpr{JSONDoc1: yyDollar[3].exprUnion(), JSONDoc2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1248: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr @@ -18514,26 +28530,71 @@ yydefault: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr //line sql.y:6475 +======= + case 1245: + yyDollar = yyS[yypt-8 : yypt+1] + var yyLOCAL Expr +//line sql.y:6457 + { + yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1246: + yyDollar = yyS[yypt-10 : yypt+1] + var yyLOCAL Expr +//line sql.y:6461 + { + yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion(), EscapeChar: yyDollar[9].exprsUnion()[0], PathList: yyDollar[9].exprsUnion()[1:]} + } + yyVAL.union = yyLOCAL + case 1247: + yyDollar = yyS[yypt-7 : yypt+1] + var yyLOCAL Expr +//line sql.y:6465 + { + yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion()} + } + yyVAL.union = yyLOCAL + case 1248: + yyDollar = yyS[yypt-8 : yypt+1] + var yyLOCAL Expr +//line sql.y:6469 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1252: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr //line sql.y:6479 +======= + case 1249: + yyDollar = yyS[yypt-8 : yypt+1] + var yyLOCAL Expr +//line sql.y:6473 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1253: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr //line sql.y:6483 +======= + case 1250: + yyDollar = yyS[yypt-9 : yypt+1] + var yyLOCAL Expr +//line sql.y:6477 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1254: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr @@ -18546,93 +28607,197 @@ yydefault: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6491 +======= + case 1251: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6481 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &JSONAttributesExpr{Type: ValidAttributeType, JSONDoc: yyDollar[3].exprUnion()} + yyLOCAL = &JSONAttributesExpr{Type: DepthAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1256: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6495 +======= +//line sql.y:6485 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &JSONAttributesExpr{Type: TypeAttributeType, JSONDoc: yyDollar[3].exprUnion()} + yyLOCAL = &JSONAttributesExpr{Type: ValidAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1257: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6499 +======= +//line sql.y:6489 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion()} + yyLOCAL = &JSONAttributesExpr{Type: TypeAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1258: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6503 { yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} +======= + case 1254: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6493 + { + yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1255: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6497 + { + yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1256: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6501 + { + yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayAppendType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} + } + yyVAL.union = yyLOCAL + case 1257: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6505 + { + yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} + } + yyVAL.union = yyLOCAL + case 1258: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6509 + { + yyLOCAL = &JSONValueModifierExpr{Type: JSONInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1259: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6507 { yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayAppendType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} +======= +//line sql.y:6513 + { + yyLOCAL = &JSONValueModifierExpr{Type: JSONReplaceType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1260: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6511 { yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} +======= +//line sql.y:6517 + { + yyLOCAL = &JSONValueModifierExpr{Type: JSONSetType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1261: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6515 { yyLOCAL = &JSONValueModifierExpr{Type: JSONInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} +======= +//line sql.y:6521 + { + yyLOCAL = &JSONValueMergeExpr{Type: JSONMergeType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1262: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6519 { yyLOCAL = &JSONValueModifierExpr{Type: JSONReplaceType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} +======= +//line sql.y:6525 + { + yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePatchType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1263: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6523 { yyLOCAL = &JSONValueModifierExpr{Type: JSONSetType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} +======= +//line sql.y:6529 + { + yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePreserveType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1264: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6527 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergeType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} +======= +//line sql.y:6533 + { + yyLOCAL = &JSONRemoveExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1265: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6531 +======= +//line sql.y:6537 { - yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePatchType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} + yyLOCAL = &JSONUnquoteExpr{JSONValue: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1266: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6541 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePatchType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} + } + yyVAL.union = yyLOCAL + case 1267: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6535 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePreserveType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} @@ -18666,42 +28831,74 @@ yydefault: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6551 +======= +//line sql.y:6545 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &FirstOrLastValueExpr{Type: yyDollar[1].firstOrLastValueExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1271: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr //line sql.y:6555 +======= + case 1268: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Expr +//line sql.y:6549 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &NtileExpr{N: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1272: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr //line sql.y:6559 +======= + case 1269: + yyDollar = yyS[yypt-9 : yypt+1] + var yyLOCAL Expr +//line sql.y:6553 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &NTHValueExpr{Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), FromFirstLastClause: yyDollar[7].fromFirstLastClauseUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1273: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6563 +======= + case 1270: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6557 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1274: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr //line sql.y:6567 +======= + case 1271: + yyDollar = yyS[yypt-9 : yypt+1] + var yyLOCAL Expr +//line sql.y:6561 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), Default: yyDollar[6].exprUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1279: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr @@ -18714,92 +28911,171 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr //line sql.y:6581 +======= + case 1276: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Expr +//line sql.y:6571 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = NewIntLiteral(yyDollar[1].str) + yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL case 1281: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6585 +======= +//line sql.y:6575 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = yyDollar[1].variableUnion() + yyLOCAL = NewIntLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL case 1282: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6589 +======= +//line sql.y:6579 + { + yyLOCAL = yyDollar[1].variableUnion() + } + yyVAL.union = yyLOCAL + case 1279: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Expr +//line sql.y:6583 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = NewArgument(yyDollar[1].str[1:]) bindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1283: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr //line sql.y:6595 +======= + case 1280: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL Expr +//line sql.y:6589 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = nil } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1284: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr //line sql.y:6599 +======= + case 1281: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Expr +//line sql.y:6593 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1285: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6605 +======= + case 1282: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6599 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1286: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr //line sql.y:6609 +======= + case 1283: + yyDollar = yyS[yypt-8 : yypt+1] + var yyLOCAL Expr +//line sql.y:6603 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1287: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr //line sql.y:6613 +======= + case 1284: + yyDollar = yyS[yypt-10 : yypt+1] + var yyLOCAL Expr +//line sql.y:6607 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1288: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr //line sql.y:6617 +======= + case 1285: + yyDollar = yyS[yypt-12 : yypt+1] + var yyLOCAL Expr +//line sql.y:6611 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1289: yyDollar = yyS[yypt-14 : yypt+1] var yyLOCAL Expr //line sql.y:6621 +======= + case 1286: + yyDollar = yyS[yypt-14 : yypt+1] + var yyLOCAL Expr +//line sql.y:6615 +>>>>>>> e439161508 (fix: complete time period feature) { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1290: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6626 +======= + case 1287: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6620 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1291: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr @@ -18812,46 +29088,122 @@ yydefault: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr //line sql.y:6634 +======= + case 1288: + yyDollar = yyS[yypt-8 : yypt+1] + var yyLOCAL Expr +//line sql.y:6624 + { + yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), MatchType: yyDollar[7].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1289: + yyDollar = yyS[yypt-8 : yypt+1] + var yyLOCAL Expr +//line sql.y:6628 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1293: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr //line sql.y:6638 +======= + case 1290: + yyDollar = yyS[yypt-10 : yypt+1] + var yyLOCAL Expr +//line sql.y:6632 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1294: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr //line sql.y:6642 +======= + case 1291: + yyDollar = yyS[yypt-12 : yypt+1] + var yyLOCAL Expr +//line sql.y:6636 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1295: yyDollar = yyS[yypt-14 : yypt+1] var yyLOCAL Expr //line sql.y:6646 +======= + case 1292: + yyDollar = yyS[yypt-14 : yypt+1] + var yyLOCAL Expr +//line sql.y:6640 +>>>>>>> e439161508 (fix: complete time period feature) { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1296: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6651 +======= + case 1293: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6645 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL + case 1294: + yyDollar = yyS[yypt-8 : yypt+1] + var yyLOCAL Expr +//line sql.y:6649 + { + yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1295: + yyDollar = yyS[yypt-10 : yypt+1] + var yyLOCAL Expr +//line sql.y:6653 + { + yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1296: + yyDollar = yyS[yypt-12 : yypt+1] + var yyLOCAL Expr +//line sql.y:6657 + { + // Match type is kept expression as TRIM( ' m ') is accepted + yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), MatchType: yyDollar[11].exprUnion()} + } + yyVAL.union = yyLOCAL case 1297: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6664 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1298: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6655 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()} @@ -18886,10 +29238,14 @@ yydefault: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr //line sql.y:6674 +======= +//line sql.y:6668 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &UpdateXMLExpr{Target: yyDollar[3].exprUnion(), XPathExpr: yyDollar[5].exprUnion(), NewXML: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1302: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr @@ -18902,34 +29258,70 @@ yydefault: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6684 +======= + case 1299: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6674 + { + yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatBytesType, Argument: yyDollar[3].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1300: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6678 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatPicoTimeType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1304: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr //line sql.y:6688 +======= + case 1301: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Expr +//line sql.y:6682 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsCurrentThreadIDType} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1305: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6692 +======= + case 1302: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6686 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsThreadIDType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1306: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6698 +======= + case 1303: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6692 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = >IDFuncExpr{Type: GTIDSubsetType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1307: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr @@ -18966,170 +29358,356 @@ yydefault: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6718 +======= + case 1304: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6696 { - yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} + yyLOCAL = >IDFuncExpr{Type: GTIDSubtractType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1312: - yyDollar = yyS[yypt-8 : yypt+1] + case 1305: + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6722 +//line sql.y:6700 { - yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion(), Channel: yyDollar[7].exprUnion()} + yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1313: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL *ConvertType -//line sql.y:6727 + case 1306: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6704 { - yyLOCAL = nil + yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1314: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *ConvertType -//line sql.y:6731 + case 1307: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6708 { - yyLOCAL = yyDollar[2].convertTypeUnion() + yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1315: - yyDollar = yyS[yypt-1 : yypt+1] + case 1308: + yyDollar = yyS[yypt-6 : yypt+1] + var yyLOCAL Expr +//line sql.y:6712 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} + } + yyVAL.union = yyLOCAL +<<<<<<< HEAD + case 1312: + yyDollar = yyS[yypt-8 : yypt+1] + var yyLOCAL Expr +//line sql.y:6722 +======= + case 1309: + yyDollar = yyS[yypt-8 : yypt+1] + var yyLOCAL Expr +//line sql.y:6716 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion(), Channel: yyDollar[7].exprUnion()} + } + yyVAL.union = yyLOCAL +<<<<<<< HEAD + case 1313: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL *ConvertType +//line sql.y:6727 +======= + case 1310: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL *ConvertType +//line sql.y:6721 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = nil + } + yyVAL.union = yyLOCAL +<<<<<<< HEAD + case 1314: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *ConvertType +//line sql.y:6731 +======= + case 1311: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *ConvertType +//line sql.y:6725 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = yyDollar[2].convertTypeUnion() + } + yyVAL.union = yyLOCAL +<<<<<<< HEAD + case 1315: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:6737 + { +======= + case 1312: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:6731 + { + } + case 1313: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL IntervalTypes +//line sql.y:6733 + { + yyLOCAL = IntervalDayHour + } + yyVAL.union = yyLOCAL + case 1314: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL IntervalTypes //line sql.y:6737 { + yyLOCAL = IntervalDayMicrosecond + } + yyVAL.union = yyLOCAL + case 1315: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL IntervalTypes +//line sql.y:6741 + { + yyLOCAL = IntervalDayMinute +>>>>>>> e439161508 (fix: complete time period feature) } case 1316: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes +<<<<<<< HEAD //line sql.y:6739 { yyLOCAL = IntervalDayHour +======= +//line sql.y:6745 + { + yyLOCAL = IntervalDaySecond +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1317: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes +<<<<<<< HEAD //line sql.y:6743 { yyLOCAL = IntervalDayMicrosecond +======= +//line sql.y:6749 + { + yyLOCAL = IntervalHourMicrosecond +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1318: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes +<<<<<<< HEAD //line sql.y:6747 { yyLOCAL = IntervalDayMinute +======= +//line sql.y:6753 + { + yyLOCAL = IntervalHourMinute +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1319: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes +<<<<<<< HEAD //line sql.y:6751 { yyLOCAL = IntervalDaySecond +======= +//line sql.y:6757 + { + yyLOCAL = IntervalHourSecond +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1320: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes +<<<<<<< HEAD //line sql.y:6755 { yyLOCAL = IntervalHourMicrosecond +======= +//line sql.y:6761 + { + yyLOCAL = IntervalMinuteMicrosecond +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1321: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes +<<<<<<< HEAD //line sql.y:6759 { yyLOCAL = IntervalHourMinute +======= +//line sql.y:6765 + { + yyLOCAL = IntervalMinuteSecond +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1322: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes +<<<<<<< HEAD //line sql.y:6763 { yyLOCAL = IntervalHourSecond +======= +//line sql.y:6769 + { + yyLOCAL = IntervalSecondMicrosecond +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1323: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes +<<<<<<< HEAD //line sql.y:6767 { yyLOCAL = IntervalMinuteMicrosecond +======= +//line sql.y:6773 + { + yyLOCAL = IntervalYearMonth +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1324: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes +<<<<<<< HEAD //line sql.y:6771 { yyLOCAL = IntervalMinuteSecond +======= +//line sql.y:6779 + { + yyLOCAL = IntervalDay +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1325: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes +<<<<<<< HEAD //line sql.y:6775 { yyLOCAL = IntervalSecondMicrosecond +======= +//line sql.y:6783 + { + yyLOCAL = IntervalWeek +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1326: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes +<<<<<<< HEAD //line sql.y:6779 { yyLOCAL = IntervalYearMonth +======= +//line sql.y:6787 + { + yyLOCAL = IntervalHour +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1327: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes +<<<<<<< HEAD //line sql.y:6785 { yyLOCAL = IntervalDay +======= +//line sql.y:6791 + { + yyLOCAL = IntervalMinute +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1328: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes +<<<<<<< HEAD //line sql.y:6789 { yyLOCAL = IntervalWeek +======= +//line sql.y:6795 + { + yyLOCAL = IntervalMonth +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1329: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes +<<<<<<< HEAD //line sql.y:6793 { yyLOCAL = IntervalHour +======= +//line sql.y:6799 + { + yyLOCAL = IntervalQuarter +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1330: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes +<<<<<<< HEAD //line sql.y:6797 { yyLOCAL = IntervalMinute +======= +//line sql.y:6803 + { + yyLOCAL = IntervalSecond +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1331: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes +<<<<<<< HEAD //line sql.y:6801 { yyLOCAL = IntervalMonth +======= +//line sql.y:6807 + { + yyLOCAL = IntervalMicrosecond +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1332: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes +<<<<<<< HEAD //line sql.y:6805 { yyLOCAL = IntervalQuarter @@ -19155,10 +29733,14 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes //line sql.y:6817 +======= +//line sql.y:6811 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = IntervalYear } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1338: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr @@ -19171,27 +29753,53 @@ yydefault: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr //line sql.y:6831 +======= + case 1335: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL Expr +//line sql.y:6821 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = nil } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1340: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr //line sql.y:6835 +======= + case 1336: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Expr +//line sql.y:6825 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = NewIntLiteral(yyDollar[2].str) + yyLOCAL = nil } yyVAL.union = yyLOCAL case 1341: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6839 +======= +//line sql.y:6829 + { + yyLOCAL = NewIntLiteral(yyDollar[2].str) + } + yyVAL.union = yyLOCAL + case 1338: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Expr +//line sql.y:6833 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = NewArgument(yyDollar[2].str[1:]) bindVariable(yylex, yyDollar[2].str[1:]) } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1342: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr @@ -19204,74 +29812,136 @@ yydefault: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6854 +======= + case 1339: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6844 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &FuncExpr{Name: NewIdentifierCI("database"), Exprs: yyDollar[3].selectExprsUnion()} + yyLOCAL = &FuncExpr{Name: NewIdentifierCI("if"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL case 1344: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6858 +======= +//line sql.y:6848 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &FuncExpr{Name: NewIdentifierCI("schema"), Exprs: yyDollar[3].selectExprsUnion()} + yyLOCAL = &FuncExpr{Name: NewIdentifierCI("database"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL case 1345: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6862 +======= +//line sql.y:6852 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &FuncExpr{Name: NewIdentifierCI("mod"), Exprs: yyDollar[3].selectExprsUnion()} + yyLOCAL = &FuncExpr{Name: NewIdentifierCI("schema"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL case 1346: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:6866 +======= +//line sql.y:6856 + { + yyLOCAL = &FuncExpr{Name: NewIdentifierCI("mod"), Exprs: yyDollar[3].selectExprsUnion()} + } + yyVAL.union = yyLOCAL + case 1343: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Expr +//line sql.y:6860 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("replace"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1347: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL MatchExprOption //line sql.y:6872 +======= + case 1344: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL MatchExprOption +//line sql.y:6866 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = NoOption } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1348: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL MatchExprOption //line sql.y:6876 +======= + case 1345: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL MatchExprOption +//line sql.y:6870 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = BooleanModeOpt } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1349: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL MatchExprOption //line sql.y:6880 +======= + case 1346: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL MatchExprOption +//line sql.y:6874 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = NaturalLanguageModeOpt } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1350: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL MatchExprOption //line sql.y:6884 +======= + case 1347: + yyDollar = yyS[yypt-7 : yypt+1] + var yyLOCAL MatchExprOption +//line sql.y:6878 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = NaturalLanguageModeWithQueryExpansionOpt } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1351: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL MatchExprOption //line sql.y:6888 +======= + case 1348: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL MatchExprOption +//line sql.y:6882 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = QueryExpansionOpt } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1352: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:6894 @@ -19294,18 +29964,82 @@ yydefault: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ConvertType //line sql.y:6908 +======= + case 1349: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:6888 + { + yyVAL.str = string(yyDollar[1].identifierCI.String()) + } + case 1350: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:6892 + { + yyVAL.str = string(yyDollar[1].str) + } + case 1351: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:6896 + { + yyVAL.str = string(yyDollar[1].str) + } + case 1352: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL *ConvertType +//line sql.y:6902 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = nil } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1356: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ConvertType //line sql.y:6912 +======= + case 1353: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL *ConvertType +//line sql.y:6906 + { + yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: NewIntLiteral(yyDollar[4].str)} + } + yyVAL.union = yyLOCAL + case 1354: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL *ConvertType +//line sql.y:6910 + { + yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: NewIntLiteral(yyDollar[4].str)} + } + yyVAL.union = yyLOCAL + case 1355: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *ConvertType +//line sql.y:6916 + { + yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} + } + yyVAL.union = yyLOCAL + case 1356: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL *ConvertType +//line sql.y:6920 + { + yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion(), Charset: yyDollar[3].columnCharset} + } + yyVAL.union = yyLOCAL + case 1357: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL *ConvertType +//line sql.y:6924 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: NewIntLiteral(yyDollar[4].str)} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1357: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ConvertType @@ -19318,11 +30052,18 @@ yydefault: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType //line sql.y:6922 +======= + case 1358: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *ConvertType +//line sql.y:6928 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL case 1359: +<<<<<<< HEAD yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ConvertType //line sql.y:6926 @@ -19350,15 +30091,48 @@ yydefault: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType //line sql.y:6938 +======= + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *ConvertType +//line sql.y:6932 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} yyLOCAL.Length = yyDollar[2].LengthScaleOption.Length yyLOCAL.Scale = yyDollar[2].LengthScaleOption.Scale } yyVAL.union = yyLOCAL +<<<<<<< HEAD +======= + case 1360: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL *ConvertType +//line sql.y:6938 + { + yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} + } + yyVAL.union = yyLOCAL + case 1361: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *ConvertType +//line sql.y:6942 + { + yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} + } + yyVAL.union = yyLOCAL + case 1362: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL *ConvertType +//line sql.y:6946 + { + yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} + } + yyVAL.union = yyLOCAL +>>>>>>> e439161508 (fix: complete time period feature) case 1363: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType +<<<<<<< HEAD //line sql.y:6944 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} @@ -19368,14 +30142,32 @@ yydefault: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType //line sql.y:6948 +======= +//line sql.y:6950 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1365: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType //line sql.y:6952 +======= + case 1364: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *ConvertType +//line sql.y:6954 + { + yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} + } + yyVAL.union = yyLOCAL + case 1365: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL *ConvertType +//line sql.y:6958 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } @@ -19383,7 +30175,11 @@ yydefault: case 1366: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType +<<<<<<< HEAD //line sql.y:6956 +======= +//line sql.y:6962 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } @@ -19391,7 +30187,11 @@ yydefault: case 1367: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType +<<<<<<< HEAD //line sql.y:6960 +======= +//line sql.y:6966 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } @@ -19399,67 +30199,144 @@ yydefault: case 1368: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType +<<<<<<< HEAD //line sql.y:6964 +======= +//line sql.y:6970 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL case 1369: +<<<<<<< HEAD yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType //line sql.y:6968 +======= + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL *ConvertType +//line sql.y:6974 + { + yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} + } + yyVAL.union = yyLOCAL + case 1370: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL bool +//line sql.y:6980 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1370: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType //line sql.y:6972 +======= + case 1371: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL bool +//line sql.y:6984 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1371: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType //line sql.y:6976 +======= + case 1372: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL Expr +//line sql.y:6989 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1372: + case 1373: yyDollar = yyS[yypt-1 : yypt+1] +<<<<<<< HEAD var yyLOCAL *ConvertType //line sql.y:6980 +======= + var yyLOCAL Expr +//line sql.y:6993 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1373: + case 1374: yyDollar = yyS[yypt-0 : yypt+1] +<<<<<<< HEAD var yyLOCAL bool //line sql.y:6986 +======= +//line sql.y:6998 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = false } +<<<<<<< HEAD yyVAL.union = yyLOCAL case 1374: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool //line sql.y:6990 +======= + case 1375: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:7002 + { + yyVAL.str = " separator " + encodeSQLString(yyDollar[2].str) + } + case 1376: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL []*When +//line sql.y:7008 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = true } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1375: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr //line sql.y:6995 +======= + case 1377: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:7012 + { + yySLICE := (*[]*When)(yyIaddr(yyVAL.union)) + *yySLICE = append(*yySLICE, yyDollar[2].whenUnion()) + } + case 1378: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL *When +//line sql.y:7018 + { + yyLOCAL = &When{Cond: yyDollar[2].exprUnion(), Val: yyDollar[4].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1379: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL Expr +//line sql.y:7023 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = nil } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1376: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr @@ -19515,10 +30392,17 @@ yydefault: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr //line sql.y:7033 +======= + case 1380: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Expr +//line sql.y:7027 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1384: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ColName @@ -19531,26 +30415,55 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ColName //line sql.y:7043 +======= + case 1381: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL *ColName +//line sql.y:7033 + { + yyLOCAL = &ColName{Name: yyDollar[1].identifierCI} + } + yyVAL.union = yyLOCAL + case 1382: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL *ColName +//line sql.y:7037 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ColName{Name: NewIdentifierCI(string(yyDollar[1].str))} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1386: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColName //line sql.y:7047 +======= + case 1383: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL *ColName +//line sql.y:7041 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ColName{Qualifier: TableName{Name: yyDollar[1].identifierCS}, Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1387: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ColName //line sql.y:7051 +======= + case 1384: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL *ColName +//line sql.y:7045 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}, Name: yyDollar[5].identifierCI} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1388: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr @@ -19563,14 +30476,32 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr //line sql.y:7061 +======= + case 1385: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Expr +//line sql.y:7051 +>>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &Offset{V: convertStringToInt(yyDollar[1].str)} + yyLOCAL = yyDollar[1].colNameUnion() } yyVAL.union = yyLOCAL case 1390: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr +<<<<<<< HEAD //line sql.y:7067 +======= +//line sql.y:7055 + { + yyLOCAL = &Offset{V: convertStringToInt(yyDollar[1].str)} + } + yyVAL.union = yyLOCAL + case 1387: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Expr +//line sql.y:7061 +>>>>>>> e439161508 (fix: complete time period feature) { // TODO(sougou): Deprecate this construct. if yyDollar[1].identifierCI.Lowered() != "value" { @@ -19580,47 +30511,83 @@ yydefault: yyLOCAL = NewIntLiteral("1") } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1391: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr //line sql.y:7076 +======= + case 1388: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Expr +//line sql.y:7070 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = NewIntLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1392: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr //line sql.y:7080 +======= + case 1389: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Expr +//line sql.y:7074 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = NewArgument(yyDollar[1].str[1:]) bindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1393: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Exprs //line sql.y:7086 +======= + case 1390: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL Exprs +//line sql.y:7080 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = nil } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1394: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Exprs //line sql.y:7090 +======= + case 1391: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Exprs +//line sql.y:7084 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[3].exprsUnion() } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1395: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr //line sql.y:7095 +======= + case 1392: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL Expr +//line sql.y:7089 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = nil } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1396: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr @@ -19630,60 +30597,146 @@ yydefault: } yyVAL.union = yyLOCAL case 1397: +======= + case 1393: +>>>>>>> e439161508 (fix: complete time period feature) + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Expr +//line sql.y:7093 + { + yyLOCAL = yyDollar[2].exprUnion() + } + yyVAL.union = yyLOCAL + case 1394: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *NamedWindow +<<<<<<< HEAD //line sql.y:7105 +======= +//line sql.y:7099 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &NamedWindow{yyDollar[2].windowDefinitionsUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1398: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL NamedWindows //line sql.y:7111 +======= + case 1395: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL NamedWindows +//line sql.y:7105 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = NamedWindows{yyDollar[1].namedWindowUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1399: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:7115 +======= + case 1396: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:7109 +>>>>>>> e439161508 (fix: complete time period feature) { yySLICE := (*NamedWindows)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].namedWindowUnion()) } +<<<<<<< HEAD case 1400: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL NamedWindows //line sql.y:7120 +======= + case 1397: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL NamedWindows +//line sql.y:7114 { yyLOCAL = nil } yyVAL.union = yyLOCAL + case 1398: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL NamedWindows +//line sql.y:7118 + { + yyLOCAL = yyDollar[1].namedWindowsUnion() + } + yyVAL.union = yyLOCAL + case 1399: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL OrderBy +//line sql.y:7123 + { + yyLOCAL = nil + } + yyVAL.union = yyLOCAL + case 1400: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL OrderBy +//line sql.y:7127 + { + yyLOCAL = yyDollar[1].orderByUnion() + } + yyVAL.union = yyLOCAL case 1401: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL OrderBy +//line sql.y:7133 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = nil + } + yyVAL.union = yyLOCAL + case 1402: yyDollar = yyS[yypt-1 : yypt+1] +<<<<<<< HEAD var yyLOCAL NamedWindows //line sql.y:7124 +======= + var yyLOCAL OrderBy +//line sql.y:7139 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].namedWindowsUnion() } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1402: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL OrderBy //line sql.y:7129 +======= + case 1403: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:7143 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = nil } +<<<<<<< HEAD yyVAL.union = yyLOCAL case 1403: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderBy //line sql.y:7133 +======= + case 1404: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *Order +//line sql.y:7149 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].orderByUnion() } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1404: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL OrderBy @@ -19719,6 +30772,12 @@ yydefault: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL OrderDirection //line sql.y:7160 +======= + case 1405: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL OrderDirection +//line sql.y:7154 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = AscOrder } @@ -19726,43 +30785,76 @@ yydefault: case 1409: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderDirection +<<<<<<< HEAD //line sql.y:7164 +======= +//line sql.y:7158 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = AscOrder } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1410: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderDirection //line sql.y:7168 +======= + case 1407: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL OrderDirection +//line sql.y:7162 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = DescOrder } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1411: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Limit //line sql.y:7173 +======= + case 1408: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL *Limit +//line sql.y:7167 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = nil } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1412: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Limit //line sql.y:7177 +======= + case 1409: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL *Limit +//line sql.y:7171 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].limitUnion() } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1413: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Limit //line sql.y:7183 +======= + case 1410: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *Limit +//line sql.y:7177 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Limit{Rowcount: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1414: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Limit @@ -19775,18 +30867,40 @@ yydefault: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Limit //line sql.y:7191 +======= + case 1411: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL *Limit +//line sql.y:7181 + { + yyLOCAL = &Limit{Offset: yyDollar[2].exprUnion(), Rowcount: yyDollar[4].exprUnion()} + } + yyVAL.union = yyLOCAL + case 1412: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL *Limit +//line sql.y:7185 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Limit{Offset: yyDollar[4].exprUnion(), Rowcount: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1416: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []AlterOption //line sql.y:7196 +======= + case 1413: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL []AlterOption +//line sql.y:7190 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = nil } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1417: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []AlterOption @@ -19817,20 +30931,86 @@ yydefault: //line sql.y:7212 { yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} +======= + case 1414: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL []AlterOption +//line sql.y:7194 + { + yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} + } + yyVAL.union = yyLOCAL + case 1415: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL []AlterOption +//line sql.y:7198 + { + yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} + } + yyVAL.union = yyLOCAL + case 1416: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL []AlterOption +//line sql.y:7202 + { + yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} + } + yyVAL.union = yyLOCAL + case 1417: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL []AlterOption +//line sql.y:7206 + { + yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} + } + yyVAL.union = yyLOCAL + case 1418: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL AlterOption +//line sql.y:7216 + { + yyLOCAL = &LockOption{Type: DefaultType} + } + yyVAL.union = yyLOCAL + case 1419: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL AlterOption +//line sql.y:7220 + { + yyLOCAL = &LockOption{Type: NoneType} + } + yyVAL.union = yyLOCAL + case 1420: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL AlterOption +//line sql.y:7224 + { + yyLOCAL = &LockOption{Type: SharedType} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1421: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption +<<<<<<< HEAD //line sql.y:7222 { yyLOCAL = &LockOption{Type: DefaultType} +======= +//line sql.y:7228 + { + yyLOCAL = &LockOption{Type: ExclusiveType} +>>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL case 1422: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption +<<<<<<< HEAD //line sql.y:7226 +======= +//line sql.y:7234 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &LockOption{Type: NoneType} } @@ -19838,7 +31018,11 @@ yydefault: case 1423: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption +<<<<<<< HEAD //line sql.y:7230 +======= +//line sql.y:7238 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &LockOption{Type: SharedType} } @@ -19846,6 +31030,7 @@ yydefault: case 1424: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption +<<<<<<< HEAD //line sql.y:7234 { yyLOCAL = &LockOption{Type: ExclusiveType} @@ -19855,46 +31040,79 @@ yydefault: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption //line sql.y:7240 +======= +//line sql.y:7242 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1426: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption //line sql.y:7244 +======= + case 1425: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL AlterOption +//line sql.y:7246 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1427: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption //line sql.y:7248 +======= + case 1426: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:7251 + { + yyVAL.str = "" + } + case 1427: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:7255 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL case 1428: yyDollar = yyS[yypt-3 : yypt+1] +<<<<<<< HEAD var yyLOCAL AlterOption //line sql.y:7252 +======= +//line sql.y:7259 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL case 1429: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:7263 + { + yyVAL.str = string(yyDollar[3].str) + } + case 1430: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7257 +//line sql.y:7268 { yyVAL.str = "" } - case 1430: + case 1431: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7261 +//line sql.y:7272 { yyVAL.str = string(yyDollar[3].str) } +<<<<<<< HEAD case 1431: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:7265 @@ -19904,10 +31122,16 @@ yydefault: case 1432: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:7269 +======= + case 1432: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:7278 +>>>>>>> e439161508 (fix: complete time period feature) { yyVAL.str = string(yyDollar[3].str) } case 1433: +<<<<<<< HEAD yyDollar = yyS[yypt-0 : yypt+1] //line sql.y:7274 { @@ -19928,12 +31152,39 @@ yydefault: case 1436: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:7288 +======= + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:7282 +>>>>>>> e439161508 (fix: complete time period feature) { yyVAL.str = string(yyDollar[1].str) } + case 1434: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:7287 + { + yyVAL.str = "" + } + case 1435: + yyDollar = yyS[yypt-4 : yypt+1] +//line sql.y:7291 + { + yyVAL.str = yyDollar[2].str + } + case 1436: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:7296 + { + yyVAL.str = "cascaded" + } case 1437: +<<<<<<< HEAD yyDollar = yyS[yypt-0 : yypt+1] //line sql.y:7293 +======= + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:7300 +>>>>>>> e439161508 (fix: complete time period feature) { yyVAL.str = "" } @@ -19955,6 +31206,7 @@ yydefault: { yyVAL.str = string(yyDollar[1].str) } +<<<<<<< HEAD case 1441: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:7310 @@ -19965,59 +31217,145 @@ yydefault: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL CheckOptions //line sql.y:7315 +======= + case 1438: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:7304 + { + yyVAL.str = string(yyDollar[1].str) + } + case 1439: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL CheckOptions +//line sql.y:7309 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = nil } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1443: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckOptions //line sql.y:7319 +======= + case 1440: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL CheckOptions +//line sql.y:7313 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = CheckOptions{yyDollar[1].checkTypeUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1444: yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:7323 +======= + case 1441: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:7317 +>>>>>>> e439161508 (fix: complete time period feature) { yySLICE := (*CheckOptions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].checkTypeUnion()) } +<<<<<<< HEAD case 1445: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL CheckType //line sql.y:7329 +======= + case 1442: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL CheckType +//line sql.y:7323 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = Forupgrade } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1446: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType //line sql.y:7333 +======= + case 1443: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL CheckType +//line sql.y:7327 { yyLOCAL = Fast } yyVAL.union = yyLOCAL + case 1444: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL CheckType +//line sql.y:7331 + { + yyLOCAL = Quick + } + yyVAL.union = yyLOCAL + case 1445: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL CheckType +//line sql.y:7335 + { + yyLOCAL = Medium + } + yyVAL.union = yyLOCAL + case 1446: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL CheckType +//line sql.y:7339 + { + yyLOCAL = Extended + } + yyVAL.union = yyLOCAL + case 1447: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL CheckType +//line sql.y:7343 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = Fast + } + yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1447: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType //line sql.y:7337 +======= + case 1448: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL *Definer +//line sql.y:7349 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = Quick } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1448: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType //line sql.y:7341 +======= + case 1449: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL *Definer +//line sql.y:7353 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = Medium } yyVAL.union = yyLOCAL - case 1449: + case 1450: yyDollar = yyS[yypt-1 : yypt+1] +<<<<<<< HEAD var yyLOCAL CheckType //line sql.y:7345 { @@ -20052,26 +31390,44 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Definer //line sql.y:7365 +======= + var yyLOCAL *Definer +//line sql.y:7359 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Definer{ Name: string(yyDollar[1].str), } } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1454: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Definer //line sql.y:7371 +======= + case 1451: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL *Definer +//line sql.y:7365 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Definer{ Name: string(yyDollar[1].str), } } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1455: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Definer //line sql.y:7377 +======= + case 1452: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *Definer +//line sql.y:7371 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Definer{ Name: yyDollar[1].str, @@ -20079,6 +31435,7 @@ yydefault: } } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1456: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:7386 @@ -20107,42 +31464,101 @@ yydefault: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Lock //line sql.y:7405 +======= + case 1453: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:7380 + { + yyVAL.str = encodeSQLString(yyDollar[1].str) + } + case 1454: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:7384 + { + yyVAL.str = formatIdentifier(yyDollar[1].str) + } + case 1455: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:7389 + { + yyVAL.str = "" + } + case 1456: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:7393 + { + yyVAL.str = formatAddress(yyDollar[1].str) + } + case 1457: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL Lock +//line sql.y:7399 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = ForUpdateLock } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1461: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Lock //line sql.y:7409 +======= + case 1458: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL Lock +//line sql.y:7403 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = ShareModeLock } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1462: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL *SelectInto //line sql.y:7415 +======= + case 1459: + yyDollar = yyS[yypt-9 : yypt+1] + var yyLOCAL *SelectInto +//line sql.y:7409 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &SelectInto{Type: IntoOutfileS3, FileName: encodeSQLString(yyDollar[4].str), Charset: yyDollar[5].columnCharset, FormatOption: yyDollar[6].str, ExportOption: yyDollar[7].str, Manifest: yyDollar[8].str, Overwrite: yyDollar[9].str} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1463: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SelectInto //line sql.y:7419 +======= + case 1460: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL *SelectInto +//line sql.y:7413 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &SelectInto{Type: IntoDumpfile, FileName: encodeSQLString(yyDollar[3].str), Charset: ColumnCharset{}, FormatOption: "", ExportOption: "", Manifest: "", Overwrite: ""} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1464: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *SelectInto //line sql.y:7423 +======= + case 1461: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL *SelectInto +//line sql.y:7417 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &SelectInto{Type: IntoOutfile, FileName: encodeSQLString(yyDollar[3].str), Charset: yyDollar[4].columnCharset, FormatOption: "", ExportOption: yyDollar[5].str, Manifest: "", Overwrite: ""} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1465: yyDollar = yyS[yypt-0 : yypt+1] //line sql.y:7428 @@ -20176,57 +31592,167 @@ yydefault: case 1470: yyDollar = yyS[yypt-0 : yypt+1] //line sql.y:7450 +======= + case 1462: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:7422 + { + yyVAL.str = "" + } + case 1463: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:7426 + { + yyVAL.str = " format csv" + yyDollar[3].str + } + case 1464: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:7430 + { + yyVAL.str = " format text" + yyDollar[3].str + } + case 1465: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:7435 + { + yyVAL.str = "" + } + case 1466: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:7439 + { + yyVAL.str = " header" + } + case 1467: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:7444 + { + yyVAL.str = "" + } + case 1468: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:7448 + { + yyVAL.str = " manifest on" + } + case 1469: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:7452 + { + yyVAL.str = " manifest off" + } + case 1470: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:7457 +>>>>>>> e439161508 (fix: complete time period feature) { yyVAL.str = "" } case 1471: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7454 +//line sql.y:7461 { +<<<<<<< HEAD yyVAL.str = " manifest on" } case 1472: yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:7458 +======= + yyVAL.str = " overwrite on" + } + case 1472: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:7465 { - yyVAL.str = " manifest off" + yyVAL.str = " overwrite off" } case 1473: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:7471 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyVAL.str = " manifest off" + } + case 1474: yyDollar = yyS[yypt-0 : yypt+1] +<<<<<<< HEAD //line sql.y:7463 +======= +//line sql.y:7476 +>>>>>>> e439161508 (fix: complete time period feature) { yyVAL.str = "" } - case 1474: + case 1475: yyDollar = yyS[yypt-2 : yypt+1] +<<<<<<< HEAD //line sql.y:7467 +======= +//line sql.y:7480 +>>>>>>> e439161508 (fix: complete time period feature) { yyVAL.str = " overwrite on" } +<<<<<<< HEAD case 1475: yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:7471 +======= + case 1476: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:7486 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyVAL.str = " overwrite off" + } + case 1477: + yyDollar = yyS[yypt-2 : yypt+1] +<<<<<<< HEAD +//line sql.y:7477 + { + yyVAL.str = yyDollar[1].str + yyDollar[2].str + } + case 1477: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:7482 + { + yyVAL.str = "" + } + case 1478: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:7486 +======= +//line sql.y:7490 + { + yyVAL.str = yyDollar[1].str + yyDollar[2].str + } + case 1478: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:7496 { - yyVAL.str = " overwrite off" + yyVAL.str = " starting by " + encodeSQLString(yyDollar[3].str) } - case 1476: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7477 + case 1479: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:7500 { - yyVAL.str = yyDollar[1].str + yyDollar[2].str + yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str) } - case 1477: + case 1480: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7482 +//line sql.y:7505 { yyVAL.str = "" } - case 1478: + case 1481: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7486 +//line sql.y:7509 +>>>>>>> e439161508 (fix: complete time period feature) { yyVAL.str = " lines" + yyDollar[2].str } +<<<<<<< HEAD case 1479: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:7492 @@ -20278,6 +31804,47 @@ yydefault: case 1487: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:7531 +======= + case 1482: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:7515 + { + yyVAL.str = yyDollar[1].str + } + case 1483: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:7519 + { + yyVAL.str = yyDollar[1].str + yyDollar[2].str + } + case 1484: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:7525 + { + yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str) + } + case 1485: + yyDollar = yyS[yypt-4 : yypt+1] +//line sql.y:7529 + { + yyVAL.str = yyDollar[1].str + " enclosed by " + encodeSQLString(yyDollar[4].str) + } + case 1486: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:7533 + { + yyVAL.str = " escaped by " + encodeSQLString(yyDollar[3].str) + } + case 1487: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:7538 + { + yyVAL.str = "" + } + case 1488: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:7542 +>>>>>>> e439161508 (fix: complete time period feature) { yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str) } @@ -20305,30 +31872,52 @@ yydefault: { yyVAL.str = " optionally" } +<<<<<<< HEAD case 1492: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Insert //line sql.y:7561 +======= + case 1489: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *Insert +//line sql.y:7555 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Insert{Rows: yyDollar[2].valuesUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1493: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Insert //line sql.y:7565 +======= + case 1490: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL *Insert +//line sql.y:7559 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Insert{Rows: yyDollar[1].selStmtUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1494: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *Insert //line sql.y:7569 +======= + case 1491: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL *Insert +//line sql.y:7563 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[5].valuesUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1495: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Insert @@ -20341,107 +31930,209 @@ yydefault: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Insert //line sql.y:7577 +======= + case 1492: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL *Insert +//line sql.y:7567 + { + yyLOCAL = &Insert{Columns: []IdentifierCI{}, Rows: yyDollar[4].valuesUnion()} + } + yyVAL.union = yyLOCAL + case 1493: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL *Insert +//line sql.y:7571 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[4].selStmtUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1497: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns //line sql.y:7583 +======= + case 1494: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Columns +//line sql.y:7577 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1498: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Columns //line sql.y:7587 +======= + case 1495: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL Columns +//line sql.y:7581 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = Columns{yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1499: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:7591 +======= + case 1496: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:7585 +>>>>>>> e439161508 (fix: complete time period feature) { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } +<<<<<<< HEAD case 1500: yyDollar = yyS[yypt-5 : yypt+1] //line sql.y:7595 +======= + case 1497: + yyDollar = yyS[yypt-5 : yypt+1] +//line sql.y:7589 +>>>>>>> e439161508 (fix: complete time period feature) { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[5].identifierCI) } +<<<<<<< HEAD case 1501: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL UpdateExprs //line sql.y:7600 +======= + case 1498: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL UpdateExprs +//line sql.y:7594 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = nil } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1502: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL UpdateExprs //line sql.y:7604 +======= + case 1499: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL UpdateExprs +//line sql.y:7598 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[5].updateExprsUnion() } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1503: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Values //line sql.y:7610 +======= + case 1500: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Values +//line sql.y:7604 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = Values{yyDollar[1].valTupleUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1504: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:7614 +======= + case 1501: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:7608 +>>>>>>> e439161508 (fix: complete time period feature) { yySLICE := (*Values)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].valTupleUnion()) } +<<<<<<< HEAD case 1505: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ValTuple //line sql.y:7620 +======= + case 1502: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL ValTuple +//line sql.y:7614 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].valTupleUnion() } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1506: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ValTuple //line sql.y:7624 +======= + case 1503: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL ValTuple +//line sql.y:7618 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = ValTuple{} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1507: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ValTuple //line sql.y:7630 +======= + case 1504: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL ValTuple +//line sql.y:7624 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = ValTuple(yyDollar[2].exprsUnion()) } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1508: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL ValTuple //line sql.y:7634 +======= + case 1505: + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL ValTuple +//line sql.y:7628 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = ValTuple(yyDollar[3].exprsUnion()) } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1509: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr //line sql.y:7639 +======= + case 1506: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Expr +//line sql.y:7633 +>>>>>>> e439161508 (fix: complete time period feature) { if len(yyDollar[1].valTupleUnion()) == 1 { yyLOCAL = yyDollar[1].valTupleUnion()[0] @@ -20450,29 +32141,50 @@ yydefault: } } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1510: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL UpdateExprs //line sql.y:7649 +======= + case 1507: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL UpdateExprs +//line sql.y:7643 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = UpdateExprs{yyDollar[1].updateExprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1511: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:7653 +======= + case 1508: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:7647 +>>>>>>> e439161508 (fix: complete time period feature) { yySLICE := (*UpdateExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].updateExprUnion()) } +<<<<<<< HEAD case 1512: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *UpdateExpr //line sql.y:7659 +======= + case 1509: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL *UpdateExpr +//line sql.y:7653 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &UpdateExpr{Name: yyDollar[1].colNameUnion(), Expr: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1514: yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:7666 @@ -20491,27 +32203,85 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr //line sql.y:7680 +======= + case 1511: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:7660 { - yyLOCAL = NewStrLiteral(yyDollar[1].str) + yyVAL.str = "charset" + } + case 1514: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Expr +//line sql.y:7670 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = NewStrLiteral(yyDollar[1].identifierCI.String()) } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1519: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr //line sql.y:7684 { yyLOCAL = &Default{} +======= + case 1515: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Expr +//line sql.y:7674 + { + yyLOCAL = NewStrLiteral(yyDollar[1].str) + } + yyVAL.union = yyLOCAL + case 1516: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Expr +//line sql.y:7678 + { + yyLOCAL = &Default{} } yyVAL.union = yyLOCAL - case 1522: + case 1519: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7693 +//line sql.y:7687 + { + yyLOCAL = false + } + yyVAL.union = yyLOCAL + case 1520: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL bool +//line sql.y:7689 + { + yyLOCAL = true + } + yyVAL.union = yyLOCAL + case 1521: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL bool +//line sql.y:7692 { yyLOCAL = false +>>>>>>> e439161508 (fix: complete time period feature) + } + yyVAL.union = yyLOCAL + case 1522: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL bool +<<<<<<< HEAD +//line sql.y:7693 +======= +//line sql.y:7694 +>>>>>>> e439161508 (fix: complete time period feature) + { + yyLOCAL = true } yyVAL.union = yyLOCAL case 1523: +<<<<<<< HEAD yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool //line sql.y:7695 @@ -20523,59 +32293,135 @@ yydefault: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool //line sql.y:7698 +======= + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL bool +//line sql.y:7697 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = false } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1525: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool //line sql.y:7700 +======= + case 1524: + yyDollar = yyS[yypt-3 : yypt+1] + var yyLOCAL bool +//line sql.y:7699 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1526: + case 1525: yyDollar = yyS[yypt-0 : yypt+1] +<<<<<<< HEAD var yyLOCAL bool //line sql.y:7703 +======= + var yyLOCAL Ignore +//line sql.y:7702 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = false } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1527: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL bool //line sql.y:7705 +======= + case 1526: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Ignore +//line sql.y:7704 + { + yyLOCAL = true + } + yyVAL.union = yyLOCAL + case 1527: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:7707 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = true } yyVAL.union = yyLOCAL case 1528: +<<<<<<< HEAD yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Ignore //line sql.y:7708 +======= + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:7709 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = false } yyVAL.union = yyLOCAL case 1529: yyDollar = yyS[yypt-1 : yypt+1] +<<<<<<< HEAD var yyLOCAL Ignore //line sql.y:7710 +======= +//line sql.y:7711 + { + yyVAL.empty = struct{}{} + } + case 1530: + yyDollar = yyS[yypt-5 : yypt+1] + var yyLOCAL Statement +//line sql.y:7715 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1530: + case 1531: yyDollar = yyS[yypt-0 : yypt+1] +<<<<<<< HEAD //line sql.y:7713 +======= + var yyLOCAL Exprs +//line sql.y:7720 + { + yyLOCAL = nil + } + yyVAL.union = yyLOCAL + case 1532: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Exprs +//line sql.y:7724 +>>>>>>> e439161508 (fix: complete time period feature) { yyVAL.empty = struct{}{} } +<<<<<<< HEAD case 1531: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:7715 +======= + yyVAL.union = yyLOCAL + case 1533: + yyDollar = yyS[yypt-0 : yypt+1] + var yyLOCAL []*IndexOption +//line sql.y:7729 + { + yyLOCAL = nil + } + yyVAL.union = yyLOCAL + case 1534: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL []*IndexOption +//line sql.y:7731 +>>>>>>> e439161508 (fix: complete time period feature) { yyVAL.empty = struct{}{} } @@ -20593,21 +32439,33 @@ yydefault: yyLOCAL = &CallProc{Name: yyDollar[2].tableName, Params: yyDollar[4].exprsUnion()} } yyVAL.union = yyLOCAL +<<<<<<< HEAD case 1534: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Exprs //line sql.y:7726 +======= + case 1535: + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *IndexOption +//line sql.y:7735 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1535: + case 1536: yyDollar = yyS[yypt-1 : yypt+1] +<<<<<<< HEAD var yyLOCAL Exprs //line sql.y:7730 +======= +//line sql.y:7741 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].exprsUnion() } +<<<<<<< HEAD yyVAL.union = yyLOCAL case 1536: yyDollar = yyS[yypt-0 : yypt+1] @@ -20629,20 +32487,30 @@ yydefault: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *IndexOption //line sql.y:7741 +======= + case 1537: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:7745 +>>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), String: string(yyDollar[2].identifierCI.String())} } yyVAL.union = yyLOCAL case 1539: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7747 +//line sql.y:7752 { +<<<<<<< HEAD yyVAL.identifierCI = yyDollar[1].identifierCI +======= + yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) +>>>>>>> e439161508 (fix: complete time period feature) } case 1540: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7751 +//line sql.y:7758 { +<<<<<<< HEAD yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } case 1542: @@ -20684,12 +32552,44 @@ yydefault: case 2115: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:8379 +======= + yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) + } + case 1541: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:7762 + { + yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) + } + case 1542: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:7768 + { + yyVAL.identifierCS = NewIdentifierCS("") + } + case 1543: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:7772 + { + yyVAL.identifierCS = yyDollar[1].identifierCS + } + case 1545: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:7779 + { + yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) + } + case 2110: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:8370 +>>>>>>> e439161508 (fix: complete time period feature) { if incNesting(yylex) { yylex.Error("max nesting level reached") return 1 } } +<<<<<<< HEAD case 2116: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:8388 @@ -20711,12 +32611,39 @@ yydefault: case 2119: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:8402 +======= + case 2111: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:8379 + { + decNesting(yylex) + } + case 2112: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:8384 + { + skipToEnd(yylex) + } + case 2113: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:8389 +>>>>>>> e439161508 (fix: complete time period feature) { skipToEnd(yylex) } case 2120: yyDollar = yyS[yypt-1 : yypt+1] +<<<<<<< HEAD //line sql.y:8406 +======= +//line sql.y:8393 + { + skipToEnd(yylex) + } + case 2115: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:8397 +>>>>>>> e439161508 (fix: complete time period feature) { skipToEnd(yylex) } diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index a2845738ec..347aaff031 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -3514,6 +3514,17 @@ alter_statement: } } + | ALTER comment_opt DML_JOB STRING TIME_PERIOD STRING STRING STRING + { + $$ = &AlterDMLJob{ + Type: SetRunningTimePeriodType, + UUID: string($4), + TimePeriodStart: string($6), + TimePeriodEnd: string($7), + TimePeriodTimeZone: string($8), + } + } + | ALTER comment_opt SCHEMA_MIGRATION STRING RETRY diff --git a/go/vt/vtgate/executor.go b/go/vt/vtgate/executor.go index c2c0eb81ec..eee115e212 100644 --- a/go/vt/vtgate/executor.go +++ b/go/vt/vtgate/executor.go @@ -1556,7 +1556,7 @@ func (e *Executor) SetFailPoint(command string, key string, value string) error return nil } -func (e *Executor) SubmitDMLJob(command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { +func (e *Executor) SubmitDMLJob(command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd, timePeriodTimeZone string, timeGapInMs, batchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { ctx := context.Background() healthyTablets := e.scatterConn.gateway.hc.GetAllHealthyTabletStats() var th *discovery.TabletHealth @@ -1566,7 +1566,7 @@ func (e *Executor) SubmitDMLJob(command, sql, uuid, tableSchema, timePeriodStart break } } - return th.Conn.SubmitDMLJob(ctx, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd, timeGapInMs, batchSize, postponeLaunch, failPolicy) + return th.Conn.SubmitDMLJob(ctx, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd, timePeriodTimeZone, timeGapInMs, batchSize, postponeLaunch, failPolicy) } func (e *Executor) checkThatPlanIsValid(stmt sqlparser.Statement, plan *engine.Plan) error { diff --git a/go/vt/vtgate/plan_execute.go b/go/vt/vtgate/plan_execute.go index b741bc48a8..a318cf2b5e 100644 --- a/go/vt/vtgate/plan_execute.go +++ b/go/vt/vtgate/plan_execute.go @@ -450,8 +450,8 @@ func HandleDMLJobSubmit(stmt sqlparser.Statement, vcursor *vcursorImpl, sql stri return nil, errors.New("cannot submit DML job in transaction") } - timeGapInMs, batchSize, postponeLaunch, failPolicy, timePeriodStart, timePeriodEnd := sqlparser.GetDMLJobArgs(stmt) - qr, err := vcursor.executor.SubmitDMLJob("submit_job", sql, "", vcursor.keyspace, timePeriodStart, timePeriodEnd, timeGapInMs, batchSize, postponeLaunch, failPolicy) + timeGapInMs, batchSize, postponeLaunch, failPolicy, timePeriodStart, timePeriodEnd, timePeriodTimeZone := sqlparser.GetDMLJobArgs(stmt) + qr, err := vcursor.executor.SubmitDMLJob("submit_job", sql, "", vcursor.keyspace, timePeriodStart, timePeriodEnd, timePeriodTimeZone, timeGapInMs, batchSize, postponeLaunch, failPolicy) if qr != nil { if qr.RowsAffected == 1 { qr.Info = "job submitted successfully" diff --git a/go/vt/vtgate/vcursor_impl.go b/go/vt/vtgate/vcursor_impl.go index a4a493ede3..27d29234b6 100644 --- a/go/vt/vtgate/vcursor_impl.go +++ b/go/vt/vtgate/vcursor_impl.go @@ -93,7 +93,7 @@ type iExecute interface { reloadExec(ctx context.Context, reloadType *sqlparser.ReloadType) error VSchema() *vindexes.VSchema SetFailPoint(command string, key string, value string) error - SubmitDMLJob(command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch bool, autoRetry string) (*sqltypes.Result, error) + SubmitDMLJob(command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd, timePeriodTimeZone string, timeGapInMs, batchSize int64, postponeLaunch bool, autoRetry string) (*sqltypes.Result, error) } // VSchemaOperator is an interface to Vschema Operations diff --git a/go/vt/vttablet/grpcqueryservice/server.go b/go/vt/vttablet/grpcqueryservice/server.go index 585c7e33f6..a4c9384d89 100644 --- a/go/vt/vttablet/grpcqueryservice/server.go +++ b/go/vt/vttablet/grpcqueryservice/server.go @@ -529,7 +529,7 @@ func (q *query) SetFailPoint(ctx context.Context, request *querypb.SetFailPointR } func (q *query) SubmitDMLJob(ctx context.Context, request *querypb.SubmitDMLJobRequest) (*querypb.SubmitDMLJobResponse, error) { - rst, err := q.server.SubmitDMLJob(ctx, request.Cmd, request.Sql, request.JobUuid, request.RelatedSchema, request.TimePeriodStart, request.TimePeriodEnd, request.Timegap, request.BatchSize, request.PostponeLaunch, request.FailPolicy) + rst, err := q.server.SubmitDMLJob(ctx, request.Cmd, request.Sql, request.JobUuid, request.RelatedSchema, request.TimePeriodStart, request.TimePeriodEnd, request.TimePeriodTimeZone, request.Timegap, request.BatchSize, request.PostponeLaunch, request.FailPolicy) return &querypb.SubmitDMLJobResponse{Result: sqltypes.ResultToProto3(rst)}, err } diff --git a/go/vt/vttablet/grpctabletconn/conn.go b/go/vt/vttablet/grpctabletconn/conn.go index 260c2eb4da..e852d6d8e8 100644 --- a/go/vt/vttablet/grpctabletconn/conn.go +++ b/go/vt/vttablet/grpctabletconn/conn.go @@ -1133,23 +1133,24 @@ func (conn *gRPCQueryClient) SetFailPoint(ctx context.Context, command string, k return nil } -func (conn *gRPCQueryClient) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { +func (conn *gRPCQueryClient) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd, timePeriodTimeZone string, timeGapInMs, batchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { conn.mu.RLock() defer conn.mu.RUnlock() if conn.cc == nil { return nil, tabletconn.ConnClosed } req := querypb.SubmitDMLJobRequest{ - Cmd: command, - Sql: sql, - JobUuid: uuid, - RelatedSchema: tableSchema, - Timegap: timeGapInMs, - BatchSize: batchSize, - PostponeLaunch: postponeLaunch, - FailPolicy: failPolicy, - TimePeriodStart: timePeriodStart, - TimePeriodEnd: timePeriodEnd, + Cmd: command, + Sql: sql, + JobUuid: uuid, + RelatedSchema: tableSchema, + Timegap: timeGapInMs, + BatchSize: batchSize, + PostponeLaunch: postponeLaunch, + FailPolicy: failPolicy, + TimePeriodStart: timePeriodStart, + TimePeriodEnd: timePeriodEnd, + TimePeriodTimeZone: timePeriodTimeZone, } er, err := conn.c.SubmitDMLJob(ctx, &req) if err != nil { diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 08c2013de2..86c040731e 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -230,20 +230,6 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run } statusSetTime := time.Now().Format(time.RFC3339) - // 对runningTimePeriodStart, runningTimePeriodEnd进行有效性检查,需要能够转换成time - // 当用户没有提交该信息时,默认两个值都为"" - // 当用户用hint提交运维时间时,有可能出现一个为"",一个不为""的情况,因此这里需要用||而不是&& - if runningTimePeriodStart != "" || runningTimePeriodEnd != "" { - _, err = time.Parse(time.TimeOnly, runningTimePeriodStart) - if err != nil { - return &sqltypes.Result{}, err - } - _, err = time.Parse(time.TimeOnly, runningTimePeriodEnd) - if err != nil { - return &sqltypes.Result{}, err - } - } - if failPolicy == "" { failPolicy = defaultFailPolicy } else { @@ -893,13 +879,13 @@ func (jc *JobController) createJobBatches(jobUUID, sql, tableSchema string, user batchSize = actualThreshold } // 5.基于selectPksSQL生成batch表 - batchTableName, err = jc.createBatchTable(jobUUID, selectPksSQL, tableSchema, sql, tableName, whereExpr, stmt, pkInfos, batchSize) + batchTableName, err = jc.createBatchTable(jobUUID, selectPksSQL, tableSchema, tableName, whereExpr, stmt, pkInfos, batchSize) return tableName, batchTableName, batchSize, err } -func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, sql, tableName string, whereExpr sqlparser.Expr, stmt sqlparser.Statement, pkInfos []PKInfo, batchSize int64) (string, error) { +func (jc *JobController) createBatchTable(jobUUID, selectSQL, tableSchema, tableName string, whereExpr sqlparser.Expr, stmt sqlparser.Statement, pkInfos []PKInfo, batchSize int64) (string, error) { // 执行selectSQL,获得有序的pk值结果集,以生成每一个batch要执行的batch SQL - qr, err := jc.execQuery(jc.ctx, "", selectSQL) + qr, err := jc.execQuery(jc.ctx, tableSchema, selectSQL) if err != nil { return "", err } diff --git a/go/vt/vttablet/jobcontroller/running_period_time.go b/go/vt/vttablet/jobcontroller/running_period_time.go index 1897ffd15e..3d94a36cff 100644 --- a/go/vt/vttablet/jobcontroller/running_period_time.go +++ b/go/vt/vttablet/jobcontroller/running_period_time.go @@ -43,6 +43,7 @@ func isTimePeriodValid(startTime, endTime, timeZone string) bool { } // 分别检查其内容的合法性 if startTime != "" && endTime != "" { + // 如果用户提交的字符串为"'hh:mm:ss'",则将'字符去掉 _, err := time.Parse(time.TimeOnly, startTime) if err != nil { return false @@ -55,6 +56,7 @@ func isTimePeriodValid(startTime, endTime, timeZone string) bool { if timeZone != "" { // 如果用户设置了时区,则检查是否是合法的时区 + // 如果用户提交的字符串为包含了多余的'',则将'字符去掉 _, err := getTimeZoneOffset(timeZone) if err != nil { return false @@ -87,5 +89,7 @@ func (jc *JobController) SetRunningTimePeriod(uuid, startTime, endTime, timeZone } // 往表中插入 - return jc.updateJobPeriodTime(jc.ctx, uuid, startTime, endTime, timeZone) + qr, err := jc.updateJobPeriodTime(jc.ctx, uuid, startTime, endTime, timeZone) + jc.notifyJobManager() + return qr, err } diff --git a/go/vt/vttablet/jobcontroller/running_period_time_test.go b/go/vt/vttablet/jobcontroller/running_period_time_test.go index 015391a0fc..5947880ecd 100644 --- a/go/vt/vttablet/jobcontroller/running_period_time_test.go +++ b/go/vt/vttablet/jobcontroller/running_period_time_test.go @@ -5,7 +5,11 @@ Licensed under the Apache v2(found in the LICENSE file in the root directory). package jobcontroller -import "testing" +import ( + "testing" + + "github.com/magiconair/properties/assert" +) func TestIsTimePeriodValid(t *testing.T) { type testCase struct { @@ -26,6 +30,7 @@ func TestIsTimePeriodValid(t *testing.T) { {startTime: "", endTime: "17:00:00", timeZone: "", result: false}, {startTime: "17:00:00", endTime: "", timeZone: "", result: false}, {startTime: "", endTime: "", timeZone: "UTC+08:00:00", result: false}, + {startTime: "'09:00:00'", endTime: "'17:00:00'", timeZone: "'UTC+08:00:00'", result: false}, } for _, test := range testCases { @@ -36,3 +41,30 @@ func TestIsTimePeriodValid(t *testing.T) { }) } } + +func TestTimeZone(t *testing.T) { + type testCase struct { + startTime string + endTime string + timeZone string + startTime2 string + endTime2 string + timeZone2 string + } + + testCases := []testCase{ + {startTime: "09:00:00", endTime: "17:00:00", timeZone: "UTC+08:00:00", + startTime2: "09:10:00", endTime2: "17:10:00", timeZone2: "UTC+08:10:00"}, + {startTime: "09:00:00", endTime: "17:00:00", timeZone: "UTC+08:00:00", + startTime2: "08:45:00", endTime2: "16:45:00", timeZone2: "UTC+07:45:00"}, + } + + for _, test := range testCases { + t.Run("TestIsTimePeriodValid", func(t *testing.T) { + startTime, endTime := getRunningPeriodTime(test.startTime, test.endTime, test.timeZone) + startTime2, endTime2 := getRunningPeriodTime(test.startTime2, test.endTime2, test.timeZone2) + assert.Equal(t, startTime.Unix(), startTime2.Unix()) + assert.Equal(t, endTime.Unix(), endTime2.Unix()) + }) + } +} diff --git a/go/vt/vttablet/jobcontroller/util.go b/go/vt/vttablet/jobcontroller/util.go index ee2f930ff5..1763e23edc 100644 --- a/go/vt/vttablet/jobcontroller/util.go +++ b/go/vt/vttablet/jobcontroller/util.go @@ -454,7 +454,7 @@ func (args *JobArgs) initArgsByQueryResult(row sqltypes.RowNamedValues) { runningTimePeriodStart := row["running_time_period_start"].ToString() runningTimePeriodEnd := row["running_time_period_end"].ToString() - runningTimePeriodTimeZone := row["running_time_period_timezone"].ToString() + runningTimePeriodTimeZone := row["running_time_period_time_zone"].ToString() args.timePeriodStart, args.timePeriodEnd = getRunningPeriodTime(runningTimePeriodStart, runningTimePeriodEnd, runningTimePeriodTimeZone) @@ -483,6 +483,9 @@ func (jc *JobController) insertJobEntry(jobUUID, sql, tableSchema, tableName, ba batchInfoTable, jobStatus, statusSetTime, failPolicy, runningTimePeriodStart, runningTimePeriodEnd, runningTimePeriodTimeZone string, timeGapInMs, batchSize int64) (err error) { + runningTimePeriodStart = stripApostrophe(runningTimePeriodStart) + runningTimePeriodEnd = stripApostrophe(runningTimePeriodEnd) + runningTimePeriodTimeZone = stripApostrophe(runningTimePeriodTimeZone) if !isTimePeriodValid(runningTimePeriodStart, runningTimePeriodEnd, runningTimePeriodTimeZone) { return errors.New("check the format, the start and end should be like 'hh:mm:ss' and time zone should be like 'UTC[\\+\\-]\\d{2}:\\d{2}:\\d{2}'") } @@ -522,6 +525,13 @@ func (jc *JobController) insertJobEntry(jobUUID, sql, tableSchema, tableName, ba return nil } +func stripApostrophe(s string) string { + if len(s) > 1 && s[0] == '\'' && s[len(s)-1] == '\'' { + return s[1 : len(s)-1] + } + return s +} + func getTimeZoneStr(offset int) string { if offset == 0 { return "UTC" diff --git a/go/vt/vttablet/queryservice/queryservice.go b/go/vt/vttablet/queryservice/queryservice.go index 4e66bd3e0c..e51e62b536 100644 --- a/go/vt/vttablet/queryservice/queryservice.go +++ b/go/vt/vttablet/queryservice/queryservice.go @@ -115,7 +115,7 @@ type QueryService interface { SetFailPoint(ctx context.Context, command string, key string, value string) error - SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, subtaskRows int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) + SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd, timePeriodTimeZone string, timeGapInMs, subtaskRows int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) // HandlePanic will be called if any of the functions panic. HandlePanic(err *error) diff --git a/go/vt/vttablet/queryservice/wrapped.go b/go/vt/vttablet/queryservice/wrapped.go index fb47617cca..1bfc93b5a2 100644 --- a/go/vt/vttablet/queryservice/wrapped.go +++ b/go/vt/vttablet/queryservice/wrapped.go @@ -375,10 +375,10 @@ func (ws *wrappedService) SetFailPoint(ctx context.Context, command string, key }) } -func (ws *wrappedService) SubmitDMLJob(ctx context.Context, cmd, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch bool, failPolicy string) (qr *sqltypes.Result, err error) { +func (ws *wrappedService) SubmitDMLJob(ctx context.Context, cmd, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd, timePeriodTimeZone string, timeGapInMs, batchSize int64, postponeLaunch bool, failPolicy string) (qr *sqltypes.Result, err error) { err = ws.wrapper(ctx, nil, ws.impl, "SubmitDMLJob", false, nil, func(ctx context.Context, target *querypb.Target, conn QueryService) (bool, error) { var innerErr error - qr, innerErr = conn.SubmitDMLJob(ctx, cmd, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd, timeGapInMs, batchSize, postponeLaunch, failPolicy) + qr, innerErr = conn.SubmitDMLJob(ctx, cmd, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd, timePeriodTimeZone, timeGapInMs, batchSize, postponeLaunch, failPolicy) return canRetry(ctx, innerErr), innerErr }) return qr, err diff --git a/go/vt/vttablet/sandboxconn/sandboxconn.go b/go/vt/vttablet/sandboxconn/sandboxconn.go index 38db4dcdf8..e9287129e9 100644 --- a/go/vt/vttablet/sandboxconn/sandboxconn.go +++ b/go/vt/vttablet/sandboxconn/sandboxconn.go @@ -625,7 +625,7 @@ func (sbc *SandboxConn) SetFailPoint(ctx context.Context, command string, key st return err } -func (sbc *SandboxConn) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { +func (sbc *SandboxConn) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd, timePeriodTimeZone string, timeGapInMs, batchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { return nil, nil } diff --git a/go/vt/vttablet/tabletconntest/fakequeryservice.go b/go/vt/vttablet/tabletconntest/fakequeryservice.go index 5c384ee9cd..1fc9554cf2 100644 --- a/go/vt/vttablet/tabletconntest/fakequeryservice.go +++ b/go/vt/vttablet/tabletconntest/fakequeryservice.go @@ -71,7 +71,7 @@ func (f *FakeQueryService) SetFailPoint(ctx context.Context, command string, key return nil } -func (f *FakeQueryService) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { +func (f *FakeQueryService) SubmitDMLJob(ctx context.Context, command, sql, uuid, tableSchema, timePeriodStart, timePeriodEnd, timePeriodTimeZone string, timeGapInMs, batchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { panic("implement me") } diff --git a/go/vt/vttablet/tabletserver/query_executor.go b/go/vt/vttablet/tabletserver/query_executor.go index 10a9881974..768d169f72 100644 --- a/go/vt/vttablet/tabletserver/query_executor.go +++ b/go/vt/vttablet/tabletserver/query_executor.go @@ -1163,19 +1163,19 @@ func (qre *QueryExecutor) execAlterDMLJob() (*sqltypes.Result, error) { uuid := alterDMLJob.UUID switch alterDMLJob.Type { case sqlparser.PauseDMLJobType: - return qre.tsv.dmlJonController.HandleRequest(jobcontroller.PauseJob, "", uuid, "", "", "", "", nil, 0, 0, false, "") + return qre.tsv.dmlJonController.HandleRequest(jobcontroller.PauseJob, "", uuid, "", "", "", "", "", nil, 0, 0, false, "") case sqlparser.ResumeDMLJobType: - return qre.tsv.dmlJonController.HandleRequest(jobcontroller.ResumeJob, "", uuid, "", "", "", "", nil, 0, 0, false, "") + return qre.tsv.dmlJonController.HandleRequest(jobcontroller.ResumeJob, "", uuid, "", "", "", "", "", nil, 0, 0, false, "") case sqlparser.LaunchDMLJobType: - return qre.tsv.dmlJonController.HandleRequest(jobcontroller.LaunchJob, "", uuid, "", "", "", "", nil, 0, 0, false, "") + return qre.tsv.dmlJonController.HandleRequest(jobcontroller.LaunchJob, "", uuid, "", "", "", "", "", nil, 0, 0, false, "") case sqlparser.CancelDMLJobType: - return qre.tsv.dmlJonController.HandleRequest(jobcontroller.CancelJob, "", uuid, "", "", "", "", nil, 0, 0, false, "") + return qre.tsv.dmlJonController.HandleRequest(jobcontroller.CancelJob, "", uuid, "", "", "", "", "", nil, 0, 0, false, "") case sqlparser.ThrottleDMLJobType: - return qre.tsv.dmlJonController.HandleRequest(jobcontroller.ThrottleJob, "", uuid, "", "", "", alterDMLJob.Expire, alterDMLJob.Ratio, 0, 0, false, "") + return qre.tsv.dmlJonController.HandleRequest(jobcontroller.ThrottleJob, "", uuid, "", "", "", "", alterDMLJob.Expire, alterDMLJob.Ratio, 0, 0, false, "") case sqlparser.UnthrottleDMLJobType: - return qre.tsv.dmlJonController.HandleRequest(jobcontroller.UnthrottleJob, "", uuid, "", "", "", "", nil, 0, 0, false, "") + return qre.tsv.dmlJonController.HandleRequest(jobcontroller.UnthrottleJob, "", uuid, "", "", "", "", "", nil, 0, 0, false, "") case sqlparser.SetRunningTimePeriodType: - return qre.tsv.dmlJonController.HandleRequest(jobcontroller.SetRunningTimePeriod, "", uuid, "", "", alterDMLJob.TimePeriodStart, alterDMLJob.TimePeriodEnd, nil, 0, 0, false, "") + return qre.tsv.dmlJonController.HandleRequest(jobcontroller.SetRunningTimePeriod, "", uuid, "", "", alterDMLJob.TimePeriodStart, alterDMLJob.TimePeriodEnd, alterDMLJob.TimePeriodTimeZone, nil, 0, 0, false, "") } return nil, vterrors.New(vtrpcpb.Code_UNIMPLEMENTED, "ALTER DML_JOB not implemented") } diff --git a/go/vt/vttablet/tabletserver/tabletserver.go b/go/vt/vttablet/tabletserver/tabletserver.go index 20d75506ab..73dc521680 100644 --- a/go/vt/vttablet/tabletserver/tabletserver.go +++ b/go/vt/vttablet/tabletserver/tabletserver.go @@ -1496,8 +1496,8 @@ func (tsv *TabletServer) SetFailPoint(ctx context.Context, command string, key s return err } -func (tsv *TabletServer) SubmitDMLJob(ctx context.Context, command, sql, jobUUID, tableSchema, timePeriodStart, timePeriodEnd string, timeGapInMs, batchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { - return tsv.dmlJonController.HandleRequest(command, sql, jobUUID, tableSchema, "", timePeriodStart, timePeriodEnd, nil, timeGapInMs, batchSize, postponeLaunch, failPolicy) +func (tsv *TabletServer) SubmitDMLJob(ctx context.Context, command, sql, jobUUID, tableSchema, timePeriodStart, timePeriodEnd, timePeriodTimeZone string, timeGapInMs, batchSize int64, postponeLaunch bool, failPolicy string) (*sqltypes.Result, error) { + return tsv.dmlJonController.HandleRequest(command, sql, jobUUID, tableSchema, "", timePeriodStart, timePeriodEnd, timePeriodTimeZone, nil, timeGapInMs, batchSize, postponeLaunch, failPolicy) } // execRequest performs verifications, sets up the necessary environments diff --git a/proto/query.proto b/proto/query.proto index 4a9fa96641..0f7063f320 100644 --- a/proto/query.proto +++ b/proto/query.proto @@ -1095,7 +1095,8 @@ message SubmitDMLJobRequest{ bool postpone_launch = 8; string time_period_start = 9; string time_period_end = 10; - string fail_policy = 11; + string time_period_time_zone = 11; + string fail_policy = 12; } message SubmitDMLJobResponse { QueryResult result = 1; diff --git a/tools/wesql_jobcontroller.sh b/tools/wesql_jobcontroller.sh new file mode 100644 index 0000000000..83008669a2 --- /dev/null +++ b/tools/wesql_jobcontroller.sh @@ -0,0 +1,6 @@ +#!/bin/bash +export VTDATAROOT="/tmp/" +source build.env +find `pwd`/ -type d | grep -vE "(\.git|tools)" | xargs tools/bin/failpoint-ctl enable +go run test.go -docker=false -follow -shard jobcontroller +find `pwd`/ -type d | grep -vE "(\.git|tools)" | xargs tools/bin/failpoint-ctl disable \ No newline at end of file From 3f289163750470ab47c27747df73d84565941635 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Thu, 18 Jan 2024 11:30:49 +0800 Subject: [PATCH 49/54] test: e2e test single pk int passed; add github ci Signed-off-by: newborn22 <953950914@qq.com> --- .../cluster_endtoend_jobcontroller.yml | 131 ++++++++++++++++ ...cluster_endtoend_jobcontroller_mysql57.yml | 141 ++++++++++++++++++ .../cluster_endtoend_jobcontroller.yml | 131 ++++++++++++++++ ...cluster_endtoend_jobcontroller_mysql57.yml | 141 ++++++++++++++++++ .../jobcontroller/jobcontroller_basic_test.go | 85 ++++++++++- go/test/endtoend/jobcontroller/main_test.go | 97 ++++++++++++ go/test/endtoend/jobcontroller/util.go | 92 ++++++++++++ go/vt/vttablet/jobcontroller/controller.go | 85 +++++------ .../jobcontroller/running_period_time.go | 2 +- go/vt/vttablet/jobcontroller/sqls.go | 8 +- go/vt/vttablet/jobcontroller/util.go | 35 ++--- test/ci_workflow_gen.go | 3 + test/config.json | 9 ++ tools/wesql_jobcontroller.sh | 0 14 files changed, 879 insertions(+), 81 deletions(-) create mode 100644 .github/workflows/archive/cluster_endtoend_jobcontroller.yml create mode 100644 .github/workflows/archive/cluster_endtoend_jobcontroller_mysql57.yml create mode 100644 .github/workflows/cluster_endtoend_jobcontroller.yml create mode 100644 .github/workflows/cluster_endtoend_jobcontroller_mysql57.yml create mode 100644 go/test/endtoend/jobcontroller/main_test.go create mode 100644 go/test/endtoend/jobcontroller/util.go mode change 100644 => 100755 tools/wesql_jobcontroller.sh diff --git a/.github/workflows/archive/cluster_endtoend_jobcontroller.yml b/.github/workflows/archive/cluster_endtoend_jobcontroller.yml new file mode 100644 index 0000000000..4cc021752d --- /dev/null +++ b/.github/workflows/archive/cluster_endtoend_jobcontroller.yml @@ -0,0 +1,131 @@ +# DO NOT MODIFY: THIS FILE IS GENERATED USING "make generate_ci_workflows" + +name: Cluster (jobcontroller) +on: +# pull_request: + workflow_dispatch: + push: + branches: + - main +concurrency: + group: format('{0}-{1}', ${{ github.ref }}, 'Cluster (jobcontroller)') + cancel-in-progress: true + +env: + GITHUB_PR_HEAD_SHA: "${{ github.event.pull_request.head.sha }}" + +jobs: + build: + name: Run endtoend tests on Cluster (jobcontroller) + runs-on: ubuntu-22.04 + + steps: + - name: Skip CI + run: | + if [[ "${{contains( github.event.pull_request.labels.*.name, 'Skip CI')}}" == "true" ]]; then + echo "skipping CI due to the 'Skip CI' label" + exit 1 + fi + + - name: Check if workflow needs to be skipped + id: skip-workflow + run: | + skip='false' + if [[ "${{github.event.pull_request}}" == "" ]] && [[ "${{github.ref}}" != "refs/heads/main" ]] && [[ ! "${{github.ref}}" =~ ^refs/heads/release-[0-9]+\.[0-9]$ ]] && [[ ! "${{github.ref}}" =~ "refs/tags/.*" ]]; then + skip='true' + fi + echo Skip ${skip} + echo "skip-workflow=${skip}" >> $GITHUB_OUTPUT + + - name: Check out code + if: steps.skip-workflow.outputs.skip-workflow == 'false' + uses: actions/checkout@v3 + + - name: Check for changes in relevant files + if: steps.skip-workflow.outputs.skip-workflow == 'false' + uses: frouioui/paths-filter@main + id: changes + with: + token: '' + filters: | + end_to_end: + - 'go/**/*.go' + - 'test.go' + - 'Makefile' + - 'build.env' + - 'go.sum' + - 'go.mod' + - 'proto/*.proto' + - 'tools/**' + - 'config/**' + - 'bootstrap.sh' + - '.github/workflows/cluster_endtoend_jobcontroller.yml' + + - name: Set up Go + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + uses: actions/setup-go@v3 + with: + go-version: 1.20.1 + + - name: Set up python + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + uses: actions/setup-python@v4 + + - name: Tune the OS + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + run: | + # Limit local port range to not use ports that overlap with server side + # ports that we listen on. + sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" + # Increase the asynchronous non-blocking I/O. More information at https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_use_native_aio + echo "fs.aio-max-nr = 1048576" | sudo tee -a /etc/sysctl.conf + sudo sysctl -p /etc/sysctl.conf + + - name: Get dependencies + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + run: | + + # Get key to latest MySQL repo + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C + # Setup MySQL 8.0 + wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb + echo mysql-apt-config mysql-apt-config/select-server select mysql-8.0 | sudo debconf-set-selections + sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config* + sudo apt-get update + # Install everything else we need, and configure + sudo apt-get install -y mysql-server mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5 + + sudo service mysql stop + sudo service etcd stop + sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/ + sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld + go mod download + + # install JUnit report formatter + go install github.com/vitessio/go-junit-report@HEAD + + - name: Run cluster endtoend test + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 45 + run: | + # We set the VTDATAROOT to the /tmp folder to reduce the file path of mysql.sock file + # which musn't be more than 107 characters long. + export VTDATAROOT="/tmp/" + source build.env + + set -x + + # run the tests however you normally do, then produce a JUnit XML file + # failpoint + chmod 755 ./test/failpoint/failpoints.sh && source ./test/failpoint/failpoints.sh + echo "GO_FAILPOINTS=$GO_FAILPOINTS" >> $GITHUB_OUTPUT + make failpoint-enable + eatmydata -- go run test.go -docker=false -follow -shard jobcontroller | tee -a output.txt | go-junit-report -set-exit-code > report.xml + make failpoint-disable + + - name: Print test output and Record test result + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' && always() + run: | + + # print test output + cat output.txt diff --git a/.github/workflows/archive/cluster_endtoend_jobcontroller_mysql57.yml b/.github/workflows/archive/cluster_endtoend_jobcontroller_mysql57.yml new file mode 100644 index 0000000000..9ecad0c8c5 --- /dev/null +++ b/.github/workflows/archive/cluster_endtoend_jobcontroller_mysql57.yml @@ -0,0 +1,141 @@ +# DO NOT MODIFY: THIS FILE IS GENERATED USING "make generate_ci_workflows" + +name: Cluster (jobcontroller) mysql57 +on: +# pull_request: + workflow_dispatch: + push: + branches: + - main +concurrency: + group: format('{0}-{1}', ${{ github.ref }}, 'Cluster (jobcontroller) mysql57') + cancel-in-progress: true + +env: + GITHUB_PR_HEAD_SHA: "${{ github.event.pull_request.head.sha }}" + +jobs: + build: + name: Run endtoend tests on Cluster (jobcontroller) mysql57 + runs-on: ubuntu-22.04 + + steps: + - name: Skip CI + run: | + if [[ "${{contains( github.event.pull_request.labels.*.name, 'Skip CI')}}" == "true" ]]; then + echo "skipping CI due to the 'Skip CI' label" + exit 1 + fi + + - name: Check if workflow needs to be skipped + id: skip-workflow + run: | + skip='false' + if [[ "${{github.event.pull_request}}" == "" ]] && [[ "${{github.ref}}" != "refs/heads/main" ]] && [[ ! "${{github.ref}}" =~ ^refs/heads/release-[0-9]+\.[0-9]$ ]] && [[ ! "${{github.ref}}" =~ "refs/tags/.*" ]]; then + skip='true' + fi + echo Skip ${skip} + echo "skip-workflow=${skip}" >> $GITHUB_OUTPUT + + - name: Check out code + if: steps.skip-workflow.outputs.skip-workflow == 'false' + uses: actions/checkout@v3 + + - name: Check for changes in relevant files + if: steps.skip-workflow.outputs.skip-workflow == 'false' + uses: frouioui/paths-filter@main + id: changes + with: + token: '' + filters: | + end_to_end: + - 'go/**/*.go' + - 'test.go' + - 'Makefile' + - 'build.env' + - 'go.sum' + - 'go.mod' + - 'proto/*.proto' + - 'tools/**' + - 'config/**' + - 'bootstrap.sh' + - '.github/workflows/cluster_endtoend_jobcontroller_mysql57.yml' + + - name: Set up Go + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + uses: actions/setup-go@v3 + with: + go-version: 1.20.1 + + - name: Set up python + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + uses: actions/setup-python@v4 + + - name: Tune the OS + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + run: | + sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" + # Increase the asynchronous non-blocking I/O. More information at https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_use_native_aio + echo "fs.aio-max-nr = 1048576" | sudo tee -a /etc/sysctl.conf + sudo sysctl -p /etc/sysctl.conf + + - name: Get dependencies + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + run: | + sudo apt-get update + + # Uninstall any previously installed MySQL first + sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/ + sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld + + sudo systemctl stop apparmor + sudo DEBIAN_FRONTEND="noninteractive" apt-get remove -y --purge mysql-server mysql-client mysql-common + sudo apt-get -y autoremove + sudo apt-get -y autoclean + sudo deluser mysql + sudo rm -rf /var/lib/mysql + sudo rm -rf /etc/mysql + + # Get key to latest MySQL repo + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C + + wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb + # Bionic packages are still compatible for Jammy since there's no MySQL 5.7 + # packages for Jammy. + echo mysql-apt-config mysql-apt-config/repo-codename select bionic | sudo debconf-set-selections + echo mysql-apt-config mysql-apt-config/select-server select mysql-5.7 | sudo debconf-set-selections + sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config* + sudo apt-get update + sudo DEBIAN_FRONTEND="noninteractive" apt-get install -y mysql-client=5.7* mysql-community-server=5.7* mysql-server=5.7* libncurses5 + + sudo apt-get install -y make unzip g++ etcd curl git wget eatmydata + sudo service mysql stop + sudo service etcd stop + + # install JUnit report formatter + go install github.com/vitessio/go-junit-report@HEAD + + - name: Run cluster endtoend test + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 45 + run: | + # We set the VTDATAROOT to the /tmp folder to reduce the file path of mysql.sock file + # which musn't be more than 107 characters long. + export VTDATAROOT="/tmp/" + source build.env + + set -x + + # run the tests however you normally do, then produce a JUnit XML file + # failpoint + chmod 755 ./test/failpoint/failpoints.sh && source ./test/failpoint/failpoints.sh + echo "GO_FAILPOINTS=$GO_FAILPOINTS" >> $GITHUB_OUTPUT + make failpoint-enable + eatmydata -- go run test.go -docker=false -follow -shard jobcontroller | tee -a output.txt | go-junit-report -set-exit-code > report.xml + make failpoint-disable + + - name: Print test output and Record test result + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' && always() + run: | + # print test output + cat output.txt diff --git a/.github/workflows/cluster_endtoend_jobcontroller.yml b/.github/workflows/cluster_endtoend_jobcontroller.yml new file mode 100644 index 0000000000..4cc021752d --- /dev/null +++ b/.github/workflows/cluster_endtoend_jobcontroller.yml @@ -0,0 +1,131 @@ +# DO NOT MODIFY: THIS FILE IS GENERATED USING "make generate_ci_workflows" + +name: Cluster (jobcontroller) +on: +# pull_request: + workflow_dispatch: + push: + branches: + - main +concurrency: + group: format('{0}-{1}', ${{ github.ref }}, 'Cluster (jobcontroller)') + cancel-in-progress: true + +env: + GITHUB_PR_HEAD_SHA: "${{ github.event.pull_request.head.sha }}" + +jobs: + build: + name: Run endtoend tests on Cluster (jobcontroller) + runs-on: ubuntu-22.04 + + steps: + - name: Skip CI + run: | + if [[ "${{contains( github.event.pull_request.labels.*.name, 'Skip CI')}}" == "true" ]]; then + echo "skipping CI due to the 'Skip CI' label" + exit 1 + fi + + - name: Check if workflow needs to be skipped + id: skip-workflow + run: | + skip='false' + if [[ "${{github.event.pull_request}}" == "" ]] && [[ "${{github.ref}}" != "refs/heads/main" ]] && [[ ! "${{github.ref}}" =~ ^refs/heads/release-[0-9]+\.[0-9]$ ]] && [[ ! "${{github.ref}}" =~ "refs/tags/.*" ]]; then + skip='true' + fi + echo Skip ${skip} + echo "skip-workflow=${skip}" >> $GITHUB_OUTPUT + + - name: Check out code + if: steps.skip-workflow.outputs.skip-workflow == 'false' + uses: actions/checkout@v3 + + - name: Check for changes in relevant files + if: steps.skip-workflow.outputs.skip-workflow == 'false' + uses: frouioui/paths-filter@main + id: changes + with: + token: '' + filters: | + end_to_end: + - 'go/**/*.go' + - 'test.go' + - 'Makefile' + - 'build.env' + - 'go.sum' + - 'go.mod' + - 'proto/*.proto' + - 'tools/**' + - 'config/**' + - 'bootstrap.sh' + - '.github/workflows/cluster_endtoend_jobcontroller.yml' + + - name: Set up Go + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + uses: actions/setup-go@v3 + with: + go-version: 1.20.1 + + - name: Set up python + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + uses: actions/setup-python@v4 + + - name: Tune the OS + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + run: | + # Limit local port range to not use ports that overlap with server side + # ports that we listen on. + sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" + # Increase the asynchronous non-blocking I/O. More information at https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_use_native_aio + echo "fs.aio-max-nr = 1048576" | sudo tee -a /etc/sysctl.conf + sudo sysctl -p /etc/sysctl.conf + + - name: Get dependencies + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + run: | + + # Get key to latest MySQL repo + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C + # Setup MySQL 8.0 + wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb + echo mysql-apt-config mysql-apt-config/select-server select mysql-8.0 | sudo debconf-set-selections + sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config* + sudo apt-get update + # Install everything else we need, and configure + sudo apt-get install -y mysql-server mysql-client make unzip g++ etcd curl git wget eatmydata xz-utils libncurses5 + + sudo service mysql stop + sudo service etcd stop + sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/ + sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld + go mod download + + # install JUnit report formatter + go install github.com/vitessio/go-junit-report@HEAD + + - name: Run cluster endtoend test + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 45 + run: | + # We set the VTDATAROOT to the /tmp folder to reduce the file path of mysql.sock file + # which musn't be more than 107 characters long. + export VTDATAROOT="/tmp/" + source build.env + + set -x + + # run the tests however you normally do, then produce a JUnit XML file + # failpoint + chmod 755 ./test/failpoint/failpoints.sh && source ./test/failpoint/failpoints.sh + echo "GO_FAILPOINTS=$GO_FAILPOINTS" >> $GITHUB_OUTPUT + make failpoint-enable + eatmydata -- go run test.go -docker=false -follow -shard jobcontroller | tee -a output.txt | go-junit-report -set-exit-code > report.xml + make failpoint-disable + + - name: Print test output and Record test result + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' && always() + run: | + + # print test output + cat output.txt diff --git a/.github/workflows/cluster_endtoend_jobcontroller_mysql57.yml b/.github/workflows/cluster_endtoend_jobcontroller_mysql57.yml new file mode 100644 index 0000000000..9ecad0c8c5 --- /dev/null +++ b/.github/workflows/cluster_endtoend_jobcontroller_mysql57.yml @@ -0,0 +1,141 @@ +# DO NOT MODIFY: THIS FILE IS GENERATED USING "make generate_ci_workflows" + +name: Cluster (jobcontroller) mysql57 +on: +# pull_request: + workflow_dispatch: + push: + branches: + - main +concurrency: + group: format('{0}-{1}', ${{ github.ref }}, 'Cluster (jobcontroller) mysql57') + cancel-in-progress: true + +env: + GITHUB_PR_HEAD_SHA: "${{ github.event.pull_request.head.sha }}" + +jobs: + build: + name: Run endtoend tests on Cluster (jobcontroller) mysql57 + runs-on: ubuntu-22.04 + + steps: + - name: Skip CI + run: | + if [[ "${{contains( github.event.pull_request.labels.*.name, 'Skip CI')}}" == "true" ]]; then + echo "skipping CI due to the 'Skip CI' label" + exit 1 + fi + + - name: Check if workflow needs to be skipped + id: skip-workflow + run: | + skip='false' + if [[ "${{github.event.pull_request}}" == "" ]] && [[ "${{github.ref}}" != "refs/heads/main" ]] && [[ ! "${{github.ref}}" =~ ^refs/heads/release-[0-9]+\.[0-9]$ ]] && [[ ! "${{github.ref}}" =~ "refs/tags/.*" ]]; then + skip='true' + fi + echo Skip ${skip} + echo "skip-workflow=${skip}" >> $GITHUB_OUTPUT + + - name: Check out code + if: steps.skip-workflow.outputs.skip-workflow == 'false' + uses: actions/checkout@v3 + + - name: Check for changes in relevant files + if: steps.skip-workflow.outputs.skip-workflow == 'false' + uses: frouioui/paths-filter@main + id: changes + with: + token: '' + filters: | + end_to_end: + - 'go/**/*.go' + - 'test.go' + - 'Makefile' + - 'build.env' + - 'go.sum' + - 'go.mod' + - 'proto/*.proto' + - 'tools/**' + - 'config/**' + - 'bootstrap.sh' + - '.github/workflows/cluster_endtoend_jobcontroller_mysql57.yml' + + - name: Set up Go + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + uses: actions/setup-go@v3 + with: + go-version: 1.20.1 + + - name: Set up python + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + uses: actions/setup-python@v4 + + - name: Tune the OS + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + run: | + sudo sysctl -w net.ipv4.ip_local_port_range="22768 65535" + # Increase the asynchronous non-blocking I/O. More information at https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_use_native_aio + echo "fs.aio-max-nr = 1048576" | sudo tee -a /etc/sysctl.conf + sudo sysctl -p /etc/sysctl.conf + + - name: Get dependencies + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + run: | + sudo apt-get update + + # Uninstall any previously installed MySQL first + sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/ + sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld + + sudo systemctl stop apparmor + sudo DEBIAN_FRONTEND="noninteractive" apt-get remove -y --purge mysql-server mysql-client mysql-common + sudo apt-get -y autoremove + sudo apt-get -y autoclean + sudo deluser mysql + sudo rm -rf /var/lib/mysql + sudo rm -rf /etc/mysql + + # Get key to latest MySQL repo + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A8D3785C + + wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb + # Bionic packages are still compatible for Jammy since there's no MySQL 5.7 + # packages for Jammy. + echo mysql-apt-config mysql-apt-config/repo-codename select bionic | sudo debconf-set-selections + echo mysql-apt-config mysql-apt-config/select-server select mysql-5.7 | sudo debconf-set-selections + sudo DEBIAN_FRONTEND="noninteractive" dpkg -i mysql-apt-config* + sudo apt-get update + sudo DEBIAN_FRONTEND="noninteractive" apt-get install -y mysql-client=5.7* mysql-community-server=5.7* mysql-server=5.7* libncurses5 + + sudo apt-get install -y make unzip g++ etcd curl git wget eatmydata + sudo service mysql stop + sudo service etcd stop + + # install JUnit report formatter + go install github.com/vitessio/go-junit-report@HEAD + + - name: Run cluster endtoend test + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' + timeout-minutes: 45 + run: | + # We set the VTDATAROOT to the /tmp folder to reduce the file path of mysql.sock file + # which musn't be more than 107 characters long. + export VTDATAROOT="/tmp/" + source build.env + + set -x + + # run the tests however you normally do, then produce a JUnit XML file + # failpoint + chmod 755 ./test/failpoint/failpoints.sh && source ./test/failpoint/failpoints.sh + echo "GO_FAILPOINTS=$GO_FAILPOINTS" >> $GITHUB_OUTPUT + make failpoint-enable + eatmydata -- go run test.go -docker=false -follow -shard jobcontroller | tee -a output.txt | go-junit-report -set-exit-code > report.xml + make failpoint-disable + + - name: Print test output and Record test result + if: steps.skip-workflow.outputs.skip-workflow == 'false' && steps.changes.outputs.end_to_end == 'true' && always() + run: | + # print test output + cat output.txt diff --git a/go/test/endtoend/jobcontroller/jobcontroller_basic_test.go b/go/test/endtoend/jobcontroller/jobcontroller_basic_test.go index 2a9c0118c0..c15a4b8e36 100644 --- a/go/test/endtoend/jobcontroller/jobcontroller_basic_test.go +++ b/go/test/endtoend/jobcontroller/jobcontroller_basic_test.go @@ -6,17 +6,90 @@ Licensed under the Apache v2(found in the LICENSE file in the root directory). package jobcontroller import ( + "fmt" "testing" + "time" + + "github.com/stretchr/testify/require" + + "vitess.io/vitess/go/mysql" + "vitess.io/vitess/go/sqltypes" + "vitess.io/vitess/go/test/endtoend/cluster" + "vitess.io/vitess/go/vt/sqlparser" + "vitess.io/vitess/go/vt/vttablet/jobcontroller" ) -func TestMain(m *testing.M) { - m.Run() +func TestJobControllerBasic(t *testing.T) { + t.Run("create user db", createUserDB) + t.Run("single int pk", singleIntPK) } -func TestA(t *testing.T) { - t.Log("TestA") +func createUserDB(t *testing.T) { + defer cluster.PanicHandler(t) + vtParams := mysql.ConnParams{ + Host: clusterInstance.Hostname, + Port: clusterInstance.VtgateMySQLPort, + } + + _, err := VtgateExecQuery(t, &vtParams, fmt.Sprintf(CreateSchemaSQL, UserTableSchema)) + require.Nil(t, err) } -func TestB(t *testing.T) { - t.Log("TestA") +func singleIntPK(t *testing.T) { + defer cluster.PanicHandler(t) + vtParams := mysql.ConnParams{ + Host: clusterInstance.Hostname, + Port: clusterInstance.VtgateMySQLPort, + DbName: UserTableSchema, + } + + query, err := VtgateExecQuery(t, &vtParams, "select version() as v") + require.Nil(t, err) + v, err := query.Named().Rows[0].ToString("v") + require.Nil(t, err) + fmt.Printf("version: %s\n", v) + + // create table + tableName := "mytable" + _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(SingleIntPKCreatTeableSQL, tableName)) + require.Nil(t, err) + require.Equal(t, true, CheckTableExist(t, &vtParams, tableName)) + + // insert some data into table + insertDataSQLTemplate := fmt.Sprintf(SingleIntPKInsertDataSQL, tableName) + totalRows := 10000 + for i := 0; i < totalRows; i++ { + insertDataSQL, err := sqlparser.ParseAndBind(insertDataSQLTemplate, + sqltypes.StringBindVariable(fmt.Sprintf("name_%d", i)), + sqltypes.Int64BindVariable(int64(i))) + require.NoError(t, err) + query, err = VtgateExecQuery(t, &vtParams, insertDataSQL) + require.NoError(t, err) + require.Equal(t, 1, int(query.RowsAffected)) + } + + query, err = VtgateExecQuery(t, &vtParams, "select count(*) as cnt from mytable;") + require.Nil(t, err) + row, _ := query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("row inserted is %d\n", row) + + // submit a DML job + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(SingleIntPKDMLSQL, tableName)) + require.Nil(t, err) + jobUUID := query.Named().Rows[0]["jobUUID"].ToString() + fmt.Printf("job %s submitted", jobUUID) + + // wait for job to complete + require.Equal(t, jobcontroller.CompletedStatus, WaitForJobStatus(t, &vtParams, jobUUID, 10*time.Minute, jobcontroller.CompletedStatus)) + + // verify that all the table rows satisfy the where condition have been updated + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(SingleIntPKVerifySQL, tableName)) + require.Nil(t, err) + rowsNotUpdated, _ := query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("row not updated is %d\n", rowsNotUpdated) + require.Equal(t, int64(0), rowsNotUpdated) + + // drop table + _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(DropTableSQL, UserTableSchema, tableName)) + require.Nil(t, err) } diff --git a/go/test/endtoend/jobcontroller/main_test.go b/go/test/endtoend/jobcontroller/main_test.go new file mode 100644 index 0000000000..cfa1d5c0dc --- /dev/null +++ b/go/test/endtoend/jobcontroller/main_test.go @@ -0,0 +1,97 @@ +/* +Copyright ApeCloud, Inc. +Licensed under the Apache v2(found in the LICENSE file in the root directory). +*/ + +package jobcontroller + +import ( + "flag" + "fmt" + "os" + "path" + "testing" + + "vitess.io/vitess/go/mysql" + "vitess.io/vitess/go/test/endtoend/cluster" +) + +var ( + clusterInstance *cluster.LocalProcessCluster + shards []cluster.Shard + vtParams mysql.ConnParams + + hostname = "localhost" + keyspaceName = "mysql" + cell = "zone1" + schemaChangeDirectory = "" +) + +var mysqlConn *mysql.Conn + +func TestMain(m *testing.M) { + defer cluster.PanicHandler(nil) + flag.Parse() + + exitcode, err := func() (int, error) { + clusterInstance = cluster.NewCluster(cell, hostname) + schemaChangeDirectory = path.Join("/tmp", fmt.Sprintf("schema_change_dir_%d", clusterInstance.GetAndReserveTabletUID())) + defer os.RemoveAll(schemaChangeDirectory) + defer clusterInstance.Teardown() + + if _, err := os.Stat(schemaChangeDirectory); os.IsNotExist(err) { + _ = os.Mkdir(schemaChangeDirectory, 0700) + } + + clusterInstance.VtctldExtraArgs = []string{ + "--schema_change_dir", schemaChangeDirectory, + "--schema_change_controller", "local", + "--schema_change_check_interval", "1"} + + clusterInstance.VtTabletExtraArgs = []string{ + "--enable-lag-throttler", + "--throttle_threshold", "1s", + "--heartbeat_enable", + "--heartbeat_interval", "250ms", + "--heartbeat_on_demand_duration", "5s", + "--watch_replication_stream", + } + clusterInstance.VtGateExtraArgs = []string{ + "--tablet_types_to_wait", "PRIMARY,REPLICA", + } + + if err := clusterInstance.StartTopo(); err != nil { + return 1, err + } + + // Start keyspace + keyspace := &cluster.Keyspace{ + Name: keyspaceName, + } + + // No need for replicas in this stress test + if err := clusterInstance.StartKeyspace(*keyspace, []string{"0"}, 0, false); err != nil { + return 1, err + } + + vtgateInstance := clusterInstance.NewVtgateInstance() + // Start vtgate + if err := vtgateInstance.Setup(); err != nil { + return 1, err + } + // ensure it is torn down during cluster TearDown + clusterInstance.VtgateProcess = *vtgateInstance + vtParams = mysql.ConnParams{ + Host: clusterInstance.Hostname, + Port: clusterInstance.VtgateMySQLPort, + DbName: keyspaceName, + } + return m.Run(), nil + }() + if err != nil { + fmt.Printf("%v\n", err) + os.Exit(1) + } else { + os.Exit(exitcode) + } +} diff --git a/go/test/endtoend/jobcontroller/util.go b/go/test/endtoend/jobcontroller/util.go new file mode 100644 index 0000000000..f653f78790 --- /dev/null +++ b/go/test/endtoend/jobcontroller/util.go @@ -0,0 +1,92 @@ +/* +Copyright ApeCloud, Inc. +Licensed under the Apache v2(found in the LICENSE file in the root directory). +*/ + +package jobcontroller + +import ( + "context" + "fmt" + "math" + "testing" + "time" + + "github.com/stretchr/testify/require" + + "vitess.io/vitess/go/mysql" + "vitess.io/vitess/go/sqltypes" + "vitess.io/vitess/go/test/endtoend/onlineddl" + "vitess.io/vitess/go/vt/schema" + "vitess.io/vitess/go/vt/sqlparser" + "vitess.io/vitess/go/vt/vttablet/jobcontroller" +) + +const ( + UserTableSchema = "testdb666" + CreateSchemaSQL = "create database if not exists %s" + SingleIntPKCreatTeableSQL = ` create table if not exists %s ( + id int auto_increment primary key, + name varchar(256) not null, + age int + );` + SingleIntPKInsertDataSQL = `insert into %s (name, age) values (%%a, %%a);` + SingleIntPKDMLSQL = `update /*vt+ dml_split=true */ %s set name='123' where age>50;` + SingleIntPKVerifySQL = `select count(*) as cnt from %s where name!='123' and age > 50;` + DropTableSQL = "drop table if exists %s.%s" +) + +// WaitForJobStatus waits for a job to reach either provided statuses (returns immediately), or eventually time out +func WaitForJobStatus(t *testing.T, vtParams *mysql.ConnParams, uuid string, timeout time.Duration, expectStatuses ...schema.OnlineDDLStatus) string { + query, err := sqlparser.ParseAndBind("show dml_job %a", + sqltypes.StringBindVariable(uuid), + ) + require.NoError(t, err) + + statusesMap := map[string]bool{} + for _, status := range expectStatuses { + statusesMap[string(status)] = true + } + startTime := time.Now() + lastKnownStatus := "" + for time.Since(startTime) < timeout { + r := onlineddl.VtgateExecQuery(t, vtParams, query, "") + for _, row := range r.Named().Rows { + lastKnownStatus = row["status"].ToString() + message := row["message"].ToString() + if lastKnownStatus == string(jobcontroller.FailedStatus) { + t.Logf("Job fail, message : %v", message) + } + if row["job_uuid"].ToString() == uuid && statusesMap[lastKnownStatus] { + return lastKnownStatus + } + } + + time.Sleep(1 * time.Second) + } + return lastKnownStatus +} + +// CheckTableExist checks the number of tables in the first two shards. +func CheckTableExist(t *testing.T, vtParams *mysql.ConnParams, tableName string) bool { + ctx := context.Background() + conn, err := mysql.Connect(ctx, vtParams) + require.Nil(t, err) + defer conn.Close() + + qr, err := conn.ExecuteFetch(fmt.Sprintf("show tables like '%s'", tableName), math.MaxInt64, true) + require.Nil(t, err) + return len(qr.Rows) > 0 +} + +func VtgateExecQuery(t *testing.T, vtParams *mysql.ConnParams, query string) (*sqltypes.Result, error) { + t.Helper() + + ctx := context.Background() + conn, err := mysql.Connect(ctx, vtParams) + require.Nil(t, err) + defer conn.Close() + + qr, err := conn.ExecuteFetch(query, math.MaxInt64, true) + return qr, err +} diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 86c040731e..266706cf35 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -93,14 +93,14 @@ const ( // possible status of DML job // batch is status is in ('queued', 'completed') const ( - postponeLaunchStatus = "postpone-launch" - queuedStatus = "queued" - runningStatus = "running" - pausedStatus = "paused" - canceledStatus = "canceled" - failedStatus = "failed" - completedStatus = "completed" - notInTimePeriodStatus = "not-in-time-period" + PostponeLaunchStatus = "postpone-launch" + QueuedStatus = "queued" + RunningStatus = "running" + PausedStatus = "paused" + CanceledStatus = "canceled" + FailedStatus = "failed" + CompletedStatus = "completed" + NotInTimePeriodStatus = "not-in-time-period" ) type JobController struct { @@ -137,10 +137,9 @@ type JobArgs struct { func (jc *JobController) Open() error { jc.initMutex.Lock() defer jc.initMutex.Unlock() - if jc.tabletTypeFunc() == topodatapb.TabletType_PRIMARY { - jc.initJobController() - jc.runJobController() - } + jc.initJobController() + jc.runJobController() + return nil } @@ -204,7 +203,7 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run jobUUID, err := schema.CreateUUIDWithDelimiter("-") if err != nil { - return nil, err + return &sqltypes.Result{}, err } sql = sqlparser.StripComments(sql) if batchIntervalInMs == 0 { @@ -224,9 +223,9 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run } batchInfoTableSchema := tableSchema - jobStatus := queuedStatus + jobStatus := QueuedStatus if postponeLaunch { - jobStatus = postponeLaunchStatus + jobStatus = PostponeLaunchStatus } statusSetTime := time.Now().Format(time.RFC3339) @@ -237,7 +236,6 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run return &sqltypes.Result{}, errors.New("failPolicy must be one of 'abort', 'skip' or 'pause'") } } - err = jc.insertJobEntry(jobUUID, sql, tableSchema, tableName, batchInfoTableSchema, batchInfoTable, jobStatus, statusSetTime, failPolicy, runningTimePeriodStart, runningTimePeriodEnd, runningTimePeriodTimeZone, batchIntervalInMs, batchSize) if err != nil { @@ -257,7 +255,7 @@ func (jc *JobController) PauseJob(uuid string) (*sqltypes.Result, error) { if err != nil { return emptyResult, err } - if status != runningStatus { + if status != RunningStatus { // todo,feat 将info写回给vtgate,目前还不生效 emptyResult.Info = " The job status is not running and can't be paused" return emptyResult, nil @@ -266,7 +264,7 @@ func (jc *JobController) PauseJob(uuid string) (*sqltypes.Result, error) { // 将job在表中的状态改为paused,runner在运行时如果检测到状态不是running,就会退出。 // pause虽然终止了runner协程,但是 statusSetTime := time.Now().Format(time.RFC3339) - qr, err := jc.updateJobStatus(jc.ctx, uuid, pausedStatus, statusSetTime) + qr, err := jc.updateJobStatus(jc.ctx, uuid, PausedStatus, statusSetTime) if err != nil { return emptyResult, err } @@ -279,7 +277,7 @@ func (jc *JobController) ResumeJob(uuid string) (*sqltypes.Result, error) { if err != nil { return emptyResult, err } - if status != pausedStatus { + if status != PausedStatus { emptyResult.Info = " The job status is not paused and don't need resume" return emptyResult, nil } @@ -314,12 +312,12 @@ func (jc *JobController) LaunchJob(uuid string) (*sqltypes.Result, error) { if err != nil { return emptyResult, err } - if status != postponeLaunchStatus { + if status != PostponeLaunchStatus { emptyResult.Info = " The job status is not postpone-launch and don't need launch" return emptyResult, nil } statusSetTime := time.Now().Format(time.RFC3339) - return jc.updateJobStatus(jc.ctx, uuid, queuedStatus, statusSetTime) + return jc.updateJobStatus(jc.ctx, uuid, QueuedStatus, statusSetTime) } func (jc *JobController) CancelJob(uuid string) (*sqltypes.Result, error) { @@ -328,12 +326,12 @@ func (jc *JobController) CancelJob(uuid string) (*sqltypes.Result, error) { if err != nil { return emptyResult, nil } - if status == canceledStatus || status == failedStatus || status == completedStatus { + if status == CanceledStatus || status == FailedStatus || status == CompletedStatus { emptyResult.Info = fmt.Sprintf(" The job status is %s and can't canceld", status) return emptyResult, nil } statusSetTime := time.Now().Format(time.RFC3339) - qr, err := jc.updateJobStatus(jc.ctx, uuid, canceledStatus, statusSetTime) + qr, err := jc.updateJobStatus(jc.ctx, uuid, CanceledStatus, statusSetTime) if err != nil { return emptyResult, nil } @@ -353,7 +351,7 @@ func (jc *JobController) CompleteJob(ctx context.Context, uuid, table string) (* defer jc.workingTablesMutex.Unlock() statusSetTime := time.Now().Format(time.RFC3339) - qr, err := jc.updateJobStatus(ctx, uuid, completedStatus, statusSetTime) + qr, err := jc.updateJobStatus(ctx, uuid, CompletedStatus, statusSetTime) if err != nil { return &sqltypes.Result{}, err } @@ -366,7 +364,7 @@ func (jc *JobController) CompleteJob(ctx context.Context, uuid, table string) (* func (jc *JobController) FailJob(ctx context.Context, uuid, message, tableName string) { _ = jc.updateJobMessage(ctx, uuid, message) statusSetTime := time.Now().Format(time.RFC3339) - _, _ = jc.updateJobStatus(ctx, uuid, failedStatus, statusSetTime) + _, _ = jc.updateJobStatus(ctx, uuid, FailedStatus, statusSetTime) jc.deleteDMLJobRunningMeta(tableName) jc.notifyJobManager() @@ -377,10 +375,6 @@ func (jc *JobController) jobManager() { defer timer.Stop() for { - // 防止vttablet不再是primary时该协程继续执行 - if jc.tabletTypeFunc() != topodatapb.TabletType_PRIMARY { - return - } select { case <-jc.ctx.Done(): return @@ -398,14 +392,14 @@ func (jc *JobController) jobManager() { jobArgs.initArgsByQueryResult(row) switch jobArgs.status { // 对处于未开始状态对job进行调度 - case queuedStatus, notInTimePeriodStatus: + case QueuedStatus, NotInTimePeriodStatus: if jc.checkDmlJobRunnable(jobArgs.uuid, jobArgs.status, jobArgs.table, jobArgs.timePeriodStart, jobArgs.timePeriodEnd) { // 初始化Job在内存中的元数据,防止在dmlJobBatchRunner修改表中的状态前,scheduler多次启动同一个job jc.initDMLJobRunningMeta(jobArgs.table) go jc.dmlJobBatchRunner(jobArgs.uuid, jobArgs.table, jobArgs.tableSchema, jobArgs.batchInfoTable, jobArgs.failPolicy, jobArgs.batchInterval, jobArgs.batchSize, jobArgs.timePeriodStart, jobArgs.timePeriodEnd) } // 对处于完成态对job进行清理 - case canceledStatus, failedStatus, completedStatus: + case CanceledStatus, FailedStatus, CompletedStatus: timeZoneOffset, err := getTimeZoneOffset(jobArgs.timeZone) if err != nil { log.Errorf("jobManager: getTimeZoneOffset failed, %s", err) @@ -417,7 +411,7 @@ func (jc *JobController) jobManager() { continue } // 对处于运行态的job进行监控 - case runningStatus: + case RunningStatus: // todo feat 增加对长时间未增加rows的running job的处理 } @@ -433,7 +427,7 @@ func (jc *JobController) jobManager() { // todo,feat 可以增加并发Job数的限制 // 调用该函数时外部必须拿tableMutex锁和workingTablesMutex锁 func (jc *JobController) checkDmlJobRunnable(jobUUID, status, table string, periodStartTime, periodEndTime *time.Time) bool { - if status != queuedStatus && status != notInTimePeriodStatus { + if status != QueuedStatus && status != NotInTimePeriodStatus { return false } if _, exit := jc.workingTables[table]; exit { @@ -444,7 +438,7 @@ func (jc *JobController) checkDmlJobRunnable(jobUUID, status, table string, peri if !(timeNow.After(*periodStartTime) && timeNow.Before(*periodEndTime)) { // 更新状态 submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobUpdateStatus, - sqltypes.StringBindVariable(notInTimePeriodStatus), + sqltypes.StringBindVariable(NotInTimePeriodStatus), sqltypes.StringBindVariable(timeNow.Format(time.RFC3339)), sqltypes.StringBindVariable(jobUUID)) if err != nil { @@ -516,7 +510,7 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta return errors.New("the len of qr of count expected batch size is not 1") } batchStatus, _ := qr.Named().Rows[0].ToString("batch_status") - if batchStatus == completedStatus { + if batchStatus == CompletedStatus { return nil } @@ -553,7 +547,7 @@ func (jc *JobController) execBatchAndRecord(ctx context.Context, tableSchema, ta // 4.1在batch table中记录 updateBatchStatus := fmt.Sprintf(sqlTempalteUpdateBatchStatusAndAffectedRows, batchTable) updateBatchStatusDoneSQL, err := sqlparser.ParseAndBind(updateBatchStatus, - sqltypes.StringBindVariable(completedStatus), + sqltypes.StringBindVariable(CompletedStatus), sqltypes.Int64BindVariable(int64(qr.RowsAffected)), sqltypes.StringBindVariable(batchID)) if err != nil { @@ -668,7 +662,7 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, timer := time.NewTicker(time.Duration(batchInterval) * time.Millisecond) defer timer.Stop() - _, err := jc.updateJobStatus(jc.ctx, uuid, runningStatus, time.Now().Format(time.RFC3339)) + _, err := jc.updateJobStatus(jc.ctx, uuid, RunningStatus, time.Now().Format(time.RFC3339)) if err != nil { jc.FailJob(jc.ctx, uuid, err.Error(), table) } @@ -680,11 +674,6 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, return case <-timer.C: } - // 防止vttablet不再是primary时该协程继续执行 - if jc.tabletTypeFunc() != topodatapb.TabletType_PRIMARY { - return - } - // 定时器触发时执行的函数 // 检查状态是否为running,可能为paused/canceled status, err := jc.getStrJobInfo(jc.ctx, uuid, "status") @@ -692,7 +681,7 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, jc.FailJob(jc.ctx, uuid, err.Error(), table) return } - if status != runningStatus { + if status != RunningStatus { return } @@ -701,7 +690,7 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, if timePeriodStart != nil && timePeriodEnd != nil { currentTime := time.Now() if !(currentTime.After(*timePeriodStart) && currentTime.Before(*timePeriodEnd)) { - _, err = jc.updateJobStatus(jc.ctx, uuid, notInTimePeriodStatus, currentTime.Format(time.RFC3339)) + _, err = jc.updateJobStatus(jc.ctx, uuid, NotInTimePeriodStatus, currentTime.Format(time.RFC3339)) if err != nil { jc.FailJob(jc.ctx, uuid, err.Error(), table) } @@ -750,7 +739,7 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, case failPolicyPause: msg := fmt.Sprintf("batch %s failed, pause job: %s", batchIDToExec, err.Error()) _ = jc.updateJobMessage(jc.ctx, uuid, msg) - _, _ = jc.updateJobStatus(jc.ctx, uuid, pausedStatus, time.Now().Format(time.RFC3339)) + _, _ = jc.updateJobStatus(jc.ctx, uuid, PausedStatus, time.Now().Format(time.RFC3339)) return // todo feat 增加retryThenPause策略 case failPolicyRetryThenPause: @@ -792,10 +781,10 @@ func (jc *JobController) recoverJobsMetadata(ctx context.Context) { runnerArgs.initArgsByQueryResult(row) switch status { - case runningStatus: + case RunningStatus: jc.initDMLJobRunningMeta(runnerArgs.table) go jc.dmlJobBatchRunner(runnerArgs.uuid, runnerArgs.table, runnerArgs.tableSchema, runnerArgs.batchInfoTable, runnerArgs.failPolicy, runnerArgs.batchInterval, runnerArgs.batchSize, runnerArgs.timePeriodStart, runnerArgs.timePeriodEnd) - case pausedStatus: + case PausedStatus: jc.initDMLJobRunningMeta(runnerArgs.table) } } @@ -872,7 +861,7 @@ func (jc *JobController) createJobBatches(jobUUID, sql, tableSchema string, user if err != nil { return "", "", 0, err } - actualThreshold := int64(float64(int64(batchSizeThreshold)/indexCount) * ratioOfBatchSizeThreshold) + actualThreshold := int64(float64(batchSizeThreshold/indexCount) * ratioOfBatchSizeThreshold) if userBatchSize < actualThreshold { batchSize = userBatchSize } else { diff --git a/go/vt/vttablet/jobcontroller/running_period_time.go b/go/vt/vttablet/jobcontroller/running_period_time.go index 3d94a36cff..d712ab2627 100644 --- a/go/vt/vttablet/jobcontroller/running_period_time.go +++ b/go/vt/vttablet/jobcontroller/running_period_time.go @@ -84,7 +84,7 @@ func (jc *JobController) SetRunningTimePeriod(uuid, startTime, endTime, timeZone if err != nil { return emptyResult, err } - if status == runningStatus { + if status == RunningStatus { return emptyResult, errors.New("the job is running now, pause it first") } diff --git a/go/vt/vttablet/jobcontroller/sqls.go b/go/vt/vttablet/jobcontroller/sqls.go index 7a1ff9eae7..495612fe33 100644 --- a/go/vt/vttablet/jobcontroller/sqls.go +++ b/go/vt/vttablet/jobcontroller/sqls.go @@ -61,11 +61,7 @@ const ( where job_uuid = %a` - sqlGetTablePk = ` SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE - WHERE - TABLE_SCHEMA = %a - AND TABLE_NAME = %a - AND CONSTRAINT_NAME = 'PRIMARY'` + sqlGetTablePk = ` show index from %s where key_name = 'primary'` sqlGetTableColNames = `SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE @@ -93,7 +89,7 @@ const ( where job_uuid = %a` - sqlGetIndexCount = `select count(*) as index_count from information_schema.statistics where table_schema = %a and table_name = %a` + sqlGetIndexCount = `show index from %s` sqlGetDealingBatchID = `select dealing_batch_id from mysql.non_transactional_dml_jobs where job_uuid = %a` diff --git a/go/vt/vttablet/jobcontroller/util.go b/go/vt/vttablet/jobcontroller/util.go index 1763e23edc..1f30854007 100644 --- a/go/vt/vttablet/jobcontroller/util.go +++ b/go/vt/vttablet/jobcontroller/util.go @@ -47,7 +47,7 @@ func (jc *JobController) buildJobSubmitResult(jobUUID, jobBatchTable string, tim row := buildVarCharRow(jobUUID, jobBatchTable, strconv.FormatInt(timeGap, 10), strconv.FormatInt(subtaskRows, 10), failPolicy, strconv.FormatBool(postponeLaunch)) rows = append(rows, row) submitRst := &sqltypes.Result{ - Fields: buildVarCharFields("job_uuid", "batch_info_table_name", "time_gap_in_ms", "batch_size", "fail_policy", "postpone_launch"), + Fields: buildVarCharFields("job_uuid", "batch_info_table_name", "batch_interval_in_ms", "batch_size", "fail_policy", "postpone_launch"), Rows: rows, RowsAffected: 1, } @@ -64,11 +64,11 @@ func (jc *JobController) execQuery(ctx context.Context, targetString, query stri setting.SetResetQuery(fmt.Sprintf("use %s", jc.env.Config().DB.DBName)) } conn, err := jc.pool.Get(ctx, &setting) + defer conn.Recycle() if err != nil { return result, err } qr, err := conn.Exec(ctx, query, math.MaxInt32, true) - conn.Recycle() return qr, err } @@ -315,19 +315,17 @@ func (jc *JobController) getMaxBatchID(ctx context.Context, batchTableName, tabl func (jc *JobController) getTablePkInfo(ctx context.Context, tableSchema, tableName string) ([]PKInfo, error) { // 1. 先获取pks 的名字 - submitQuery, err := sqlparser.ParseAndBind(sqlGetTablePk, - sqltypes.StringBindVariable(tableSchema), - sqltypes.StringBindVariable(tableName)) + submitQuery := fmt.Sprintf(sqlGetTablePk, tableName) + qr, err := jc.execQuery(ctx, tableSchema, submitQuery) if err != nil { return nil, err } - qr, err := jc.execQuery(ctx, "", submitQuery) - if err != nil { - return nil, err + if len(qr.Named().Rows) == 0 { + return nil, errors.New("the len of qr of getting pk info is 0") } var pkNames []string for _, row := range qr.Named().Rows { - pkNames = append(pkNames, row["COLUMN_NAME"].ToString()) + pkNames = append(pkNames, row["Column_name"].ToString()) } // 2. 根据获得的pk列的名字,去原表中查一行数据,借助封装好的Value对象获得每个pk的类型 @@ -387,22 +385,19 @@ func currentBatchIDInc(currentBatchID string) (string, error) { return strconv.FormatInt(currentBatchIDInt64, 10), nil } -func (jc *JobController) getIndexCount(tableSchema, tableName string) (indexCount int64, err error) { - query, err := sqlparser.ParseAndBind(sqlGetIndexCount, - sqltypes.StringBindVariable(tableSchema), - sqltypes.StringBindVariable(tableName)) - if err != nil { - return 0, err - } +func (jc *JobController) getIndexCount(tableSchema, tableName string) (indexCount int, err error) { + query := fmt.Sprintf(sqlGetIndexCount, tableName) + ctx := context.Background() - qr, err := jc.execQuery(ctx, "", query) + qr, err := jc.execQuery(ctx, tableSchema, query) if err != nil { return 0, err } - if len(qr.Named().Rows) != 1 { - return 0, err + indexCount = len(qr.Named().Rows) + if indexCount == 0 { + return 0, errors.New("index count is 0") } - return qr.Named().Rows[0]["index_count"].ToInt64() + return indexCount, nil } func genNewBatchID(batchID string) (newBatchID string, err error) { diff --git a/test/ci_workflow_gen.go b/test/ci_workflow_gen.go index fb567ac3de..35932ccc0b 100644 --- a/test/ci_workflow_gen.go +++ b/test/ci_workflow_gen.go @@ -128,6 +128,7 @@ var ( "topo_connection_cache", "vtgate_partial_keyspace", "vttablet_prscomplex", + "jobcontroller", } clusterSelfHostedList = []string{} @@ -180,6 +181,8 @@ func clusterMySQLVersions(clusterName string) mysqlVersions { return allMySQLVersions case clusterName == "xb_recovery": return allMySQLVersions + case clusterName == "jobcontroller": + return allMySQLVersions default: return defaultMySQLVersions } diff --git a/test/config.json b/test/config.json index 5ca2dc0df6..1330836a58 100644 --- a/test/config.json +++ b/test/config.json @@ -100,6 +100,15 @@ "RetryMax": 1, "Tags": [] }, + "wesql_jobcontroller": { + "File": "unused.go", + "Args": ["vitess.io/vitess/go/test/endtoend/jobcontroller", "-timeout", "30m"], + "Command": [], + "Manual": false, + "Shard": "jobcontroller", + "RetryMax": 1, + "Tags": [] + }, "wesql_auth": { "File": "unused.go", "Args": ["vitess.io/vitess/go/test/endtoend/wesql/auth", "-timeout", "30m"], diff --git a/tools/wesql_jobcontroller.sh b/tools/wesql_jobcontroller.sh old mode 100644 new mode 100755 From 6dc02520cd417b4313fa346f1822af5b341d6cd7 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Thu, 18 Jan 2024 12:36:30 +0800 Subject: [PATCH 50/54] fix: refacor e2e test Signed-off-by: newborn22 <953950914@qq.com> --- .../jobcontroller/jobcontroller_basic_test.go | 19 ++++++++++++------- go/test/endtoend/jobcontroller/util.go | 12 +----------- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/go/test/endtoend/jobcontroller/jobcontroller_basic_test.go b/go/test/endtoend/jobcontroller/jobcontroller_basic_test.go index c15a4b8e36..9eb23911b3 100644 --- a/go/test/endtoend/jobcontroller/jobcontroller_basic_test.go +++ b/go/test/endtoend/jobcontroller/jobcontroller_basic_test.go @@ -31,7 +31,7 @@ func createUserDB(t *testing.T) { Port: clusterInstance.VtgateMySQLPort, } - _, err := VtgateExecQuery(t, &vtParams, fmt.Sprintf(CreateSchemaSQL, UserTableSchema)) + _, err := VtgateExecQuery(t, &vtParams, fmt.Sprintf("create database if not exists %s", UserTableSchema)) require.Nil(t, err) } @@ -51,12 +51,17 @@ func singleIntPK(t *testing.T) { // create table tableName := "mytable" - _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(SingleIntPKCreatTeableSQL, tableName)) + _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf( + `create table if not exists %s ( + id int auto_increment primary key, + name varchar(256) not null, + age int + )`, tableName)) require.Nil(t, err) require.Equal(t, true, CheckTableExist(t, &vtParams, tableName)) // insert some data into table - insertDataSQLTemplate := fmt.Sprintf(SingleIntPKInsertDataSQL, tableName) + insertDataSQLTemplate := fmt.Sprintf(`insert into %s (name, age) values (%%a, %%a);`, tableName) totalRows := 10000 for i := 0; i < totalRows; i++ { insertDataSQL, err := sqlparser.ParseAndBind(insertDataSQLTemplate, @@ -74,22 +79,22 @@ func singleIntPK(t *testing.T) { fmt.Printf("row inserted is %d\n", row) // submit a DML job - query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(SingleIntPKDMLSQL, tableName)) + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("update /*vt+ dml_split=true */ %s set name='123' where age > 50;", tableName)) require.Nil(t, err) - jobUUID := query.Named().Rows[0]["jobUUID"].ToString() + jobUUID := query.Named().Rows[0]["job_uuid"].ToString() fmt.Printf("job %s submitted", jobUUID) // wait for job to complete require.Equal(t, jobcontroller.CompletedStatus, WaitForJobStatus(t, &vtParams, jobUUID, 10*time.Minute, jobcontroller.CompletedStatus)) // verify that all the table rows satisfy the where condition have been updated - query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(SingleIntPKVerifySQL, tableName)) + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(`select count(*) as cnt from %s where name!='123' and age > 50;`, tableName)) require.Nil(t, err) rowsNotUpdated, _ := query.Named().Rows[0]["cnt"].ToInt64() fmt.Printf("row not updated is %d\n", rowsNotUpdated) require.Equal(t, int64(0), rowsNotUpdated) // drop table - _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(DropTableSQL, UserTableSchema, tableName)) + _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, tableName)) require.Nil(t, err) } diff --git a/go/test/endtoend/jobcontroller/util.go b/go/test/endtoend/jobcontroller/util.go index f653f78790..4806e85203 100644 --- a/go/test/endtoend/jobcontroller/util.go +++ b/go/test/endtoend/jobcontroller/util.go @@ -23,17 +23,7 @@ import ( ) const ( - UserTableSchema = "testdb666" - CreateSchemaSQL = "create database if not exists %s" - SingleIntPKCreatTeableSQL = ` create table if not exists %s ( - id int auto_increment primary key, - name varchar(256) not null, - age int - );` - SingleIntPKInsertDataSQL = `insert into %s (name, age) values (%%a, %%a);` - SingleIntPKDMLSQL = `update /*vt+ dml_split=true */ %s set name='123' where age>50;` - SingleIntPKVerifySQL = `select count(*) as cnt from %s where name!='123' and age > 50;` - DropTableSQL = "drop table if exists %s.%s" + UserTableSchema = "testdb666" ) // WaitForJobStatus waits for a job to reach either provided statuses (returns immediately), or eventually time out From 844a047be44af149ba6122e6a91fbffe508ce71d Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Thu, 18 Jan 2024 23:50:17 +0800 Subject: [PATCH 51/54] test: enrich e2e test Signed-off-by: newborn22 <953950914@qq.com> --- .../jobcontroller/jobcontroller_basic_test.go | 597 + go/vt/sqlparser/sql.go | 20517 ++++------------ go/vt/sqlparser/sql.y | 1 - 3 files changed, 4902 insertions(+), 16213 deletions(-) diff --git a/go/test/endtoend/jobcontroller/jobcontroller_basic_test.go b/go/test/endtoend/jobcontroller/jobcontroller_basic_test.go index 9eb23911b3..e46c2a148c 100644 --- a/go/test/endtoend/jobcontroller/jobcontroller_basic_test.go +++ b/go/test/endtoend/jobcontroller/jobcontroller_basic_test.go @@ -22,6 +22,13 @@ import ( func TestJobControllerBasic(t *testing.T) { t.Run("create user db", createUserDB) t.Run("single int pk", singleIntPK) + t.Run("double int pk", doubleIntPK) + t.Run("dateTime and int pk", datetimeAndIntPK) + t.Run("complex where condition", complexWhereCondition) + t.Run("subquery in where condition", subqueryInWhereCondition) + t.Run("subquery in set", subqueryInSet) + t.Run("subquery in where exist", subqueryInWhereExist) + t.Run("foreign subquery inw where", foreignSubqueryInWhere) } func createUserDB(t *testing.T) { @@ -78,6 +85,149 @@ func singleIntPK(t *testing.T) { row, _ := query.Named().Rows[0]["cnt"].ToInt64() fmt.Printf("row inserted is %d\n", row) + // rows has not been updated + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(`select count(*) as cnt from %s where name!='123' and age > 50;`, tableName)) + require.Nil(t, err) + rowsNotUpdated, _ := query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("row not updated is %d\n", rowsNotUpdated) + require.Equal(t, int64(totalRows-50-1), rowsNotUpdated) + + // submit a DML job + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("update /*vt+ dml_split=true */ %s set name='123' where age > 50;", tableName)) + require.Nil(t, err) + jobUUID := query.Named().Rows[0]["job_uuid"].ToString() + fmt.Printf("job %s submitted", jobUUID) + + // wait for job to complete + require.Equal(t, jobcontroller.CompletedStatus, WaitForJobStatus(t, &vtParams, jobUUID, 10*time.Minute, jobcontroller.CompletedStatus)) + + // verify that all the table rows satisfy the where condition have been updated + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(`select count(*) as cnt from %s where name!='123' and age > 50;`, tableName)) + require.Nil(t, err) + rowsNotUpdated, _ = query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("row not updated is %d\n", rowsNotUpdated) + require.Equal(t, int64(0), rowsNotUpdated) + + // drop table + _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, tableName)) + require.Nil(t, err) +} + +func doubleIntPK(t *testing.T) { + defer cluster.PanicHandler(t) + vtParams := mysql.ConnParams{ + Host: clusterInstance.Hostname, + Port: clusterInstance.VtgateMySQLPort, + DbName: UserTableSchema, + } + + // create table + tableName := "mytable" + _, err := VtgateExecQuery(t, &vtParams, fmt.Sprintf( + `create table if not exists %s ( + id1 int , + id2 int, + name varchar(256) not null, + age int, + primary key(id1,id2) + )`, tableName)) + require.Nil(t, err) + require.Equal(t, true, CheckTableExist(t, &vtParams, tableName)) + + // insert some data into table + insertDataSQLTemplate := fmt.Sprintf(`insert into %s (id1, id2, name, age) values (%%a,%%a,%%a, %%a);`, tableName) + totalRows := 10000 + for i := 0; i < totalRows/100; i++ { + for j := 0; j < 100; j++ { + insertDataSQL, err := sqlparser.ParseAndBind(insertDataSQLTemplate, + sqltypes.Int64BindVariable(int64(i)), + sqltypes.Int64BindVariable(int64(j)), + sqltypes.StringBindVariable(fmt.Sprintf("name_%d_%d", i, j)), + sqltypes.Int64BindVariable(int64(i*100+j))) + require.NoError(t, err) + query, err := VtgateExecQuery(t, &vtParams, insertDataSQL) + require.NoError(t, err) + require.Equal(t, 1, int(query.RowsAffected)) + } + } + + query, err := VtgateExecQuery(t, &vtParams, "select count(*) as cnt from mytable;") + require.Nil(t, err) + row, _ := query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("row inserted is %d\n", row) + + // submit a DML job + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("update /*vt+ dml_split=true */ %s set name='123' where age > 50;", tableName)) + require.Nil(t, err) + jobUUID := query.Named().Rows[0]["job_uuid"].ToString() + fmt.Printf("job %s submitted", jobUUID) + + // wait for job to complete + require.Equal(t, jobcontroller.CompletedStatus, WaitForJobStatus(t, &vtParams, jobUUID, 10*time.Minute, jobcontroller.CompletedStatus)) + + // verify that all the table rows satisfy the where condition have been updated + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(`select count(*) as cnt from %s where name!='123' and age > 50;`, tableName)) + require.Nil(t, err) + rowsNotUpdated, _ := query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("row not updated is %d\n", rowsNotUpdated) + require.Equal(t, int64(0), rowsNotUpdated) + + // drop table + _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, tableName)) + require.Nil(t, err) +} + +func datetimeAndIntPK(t *testing.T) { + defer cluster.PanicHandler(t) + vtParams := mysql.ConnParams{ + Host: clusterInstance.Hostname, + Port: clusterInstance.VtgateMySQLPort, + DbName: UserTableSchema, + } + + // create table + tableName := "mytable" + _, err := VtgateExecQuery(t, &vtParams, fmt.Sprintf( + `create table if not exists %s ( + id1 datetime , + id2 int, + name varchar(256) not null, + age int, + primary key(id1,id2) + )`, tableName)) + require.Nil(t, err) + require.Equal(t, true, CheckTableExist(t, &vtParams, tableName)) + + // insert some data into table + insertDataSQLTemplate := fmt.Sprintf(`insert into %s (id1, id2, name, age) values (%%a,%%a,%%a, %%a);`, tableName) + totalRows := 10000 + currentTime := time.Now() + for i := 0; i < totalRows/100; i++ { + dateTime := currentTime.Add(time.Duration(i*24) * time.Hour).Format(time.DateTime) + for j := 0; j < 100; j++ { + insertDataSQL, err := sqlparser.ParseAndBind(insertDataSQLTemplate, + sqltypes.StringBindVariable(dateTime), + sqltypes.Int64BindVariable(int64(j)), + sqltypes.StringBindVariable(fmt.Sprintf("name_%d_%d", i, j)), + sqltypes.Int64BindVariable(int64(i*100+j))) + require.NoError(t, err) + query, err := VtgateExecQuery(t, &vtParams, insertDataSQL) + require.NoError(t, err) + require.Equal(t, 1, int(query.RowsAffected)) + } + } + + query, err := VtgateExecQuery(t, &vtParams, "select count(*) as cnt from mytable;") + require.Nil(t, err) + row, _ := query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("row inserted is %d\n", row) + + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(`select count(*) as cnt from %s where name!='123' and age > 50;`, tableName)) + require.Nil(t, err) + rowsNotUpdated, _ := query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("row not updated is %d\n", rowsNotUpdated) + require.Equal(t, int64(totalRows-50-1), rowsNotUpdated) + // submit a DML job query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("update /*vt+ dml_split=true */ %s set name='123' where age > 50;", tableName)) require.Nil(t, err) @@ -90,11 +240,458 @@ func singleIntPK(t *testing.T) { // verify that all the table rows satisfy the where condition have been updated query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(`select count(*) as cnt from %s where name!='123' and age > 50;`, tableName)) require.Nil(t, err) + rowsNotUpdated, _ = query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("row not updated is %d\n", rowsNotUpdated) + require.Equal(t, int64(0), rowsNotUpdated) + + // drop table + _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, tableName)) + require.Nil(t, err) +} + +func complexWhereCondition(t *testing.T) { + defer cluster.PanicHandler(t) + vtParams := mysql.ConnParams{ + Host: clusterInstance.Hostname, + Port: clusterInstance.VtgateMySQLPort, + DbName: UserTableSchema, + } + + query, err := VtgateExecQuery(t, &vtParams, "select version() as v") + require.Nil(t, err) + v, err := query.Named().Rows[0].ToString("v") + require.Nil(t, err) + fmt.Printf("version: %s\n", v) + + // create table + tableName := "mytable" + _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf( + `create table if not exists %s ( + id int auto_increment primary key, + name varchar(256) not null, + c1 varchar(32), + c2 int, + c3 varchar(32), + c4 varchar(32), + c5 int default null, + c6 int + )`, tableName)) + require.Nil(t, err) + require.Equal(t, true, CheckTableExist(t, &vtParams, tableName)) + + // insert some data into table + insertDataSQLTemplate := fmt.Sprintf(`insert into %s (name,c1,c2,c3,c4,c6) values (%%a, %%a, %%a, %%a, %%a, %%a);`, tableName) + totalRows := 10000 + for i := 0; i < totalRows; i++ { + insertDataSQL, err := sqlparser.ParseAndBind(insertDataSQLTemplate, + sqltypes.StringBindVariable(fmt.Sprintf("name_%d", i)), + sqltypes.StringBindVariable("v1"), + sqltypes.Int64BindVariable(int64(101)), + sqltypes.StringBindVariable("abcdefg"), + sqltypes.StringBindVariable("a"), + sqltypes.Int64BindVariable(int64(50))) + require.NoError(t, err) + query, err = VtgateExecQuery(t, &vtParams, insertDataSQL) + require.NoError(t, err) + require.Equal(t, 1, int(query.RowsAffected)) + } + + query, err = VtgateExecQuery(t, &vtParams, "select count(*) as cnt from mytable;") + require.Nil(t, err) + row, _ := query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("row inserted is %d\n", row) + + // all rows has not been updated + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(`select count(*) as cnt from %s where name!='123';`, tableName)) + require.Nil(t, err) rowsNotUpdated, _ := query.Named().Rows[0]["cnt"].ToInt64() fmt.Printf("row not updated is %d\n", rowsNotUpdated) + require.Equal(t, int64(totalRows), rowsNotUpdated) + + // submit a DML job + query, err = VtgateExecQuery(t, &vtParams, + fmt.Sprintf(`update /*vt+ dml_split=true */ %s set name='123' where + (c1 = 'v1' or c2 > 100) and + (c3 like 'abc%%' and c4 in ('a', 'b', 'c')) or + c5 is null and c6 between 10 and 100;`, tableName)) + require.Nil(t, err) + jobUUID := query.Named().Rows[0]["job_uuid"].ToString() + fmt.Printf("job %s submitted\n", jobUUID) + + // wait for job to complete + require.Equal(t, jobcontroller.CompletedStatus, WaitForJobStatus(t, &vtParams, jobUUID, 10*time.Minute, jobcontroller.CompletedStatus)) + + // verify that all rows has been updated + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(`select count(*) as cnt from %s where name!='123';`, tableName)) + require.Nil(t, err) + rowsNotUpdated, _ = query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("row not updated is %d\n", rowsNotUpdated) require.Equal(t, int64(0), rowsNotUpdated) // drop table _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, tableName)) require.Nil(t, err) } + +func subqueryInWhereCondition(t *testing.T) { + defer cluster.PanicHandler(t) + vtParams := mysql.ConnParams{ + Host: clusterInstance.Hostname, + Port: clusterInstance.VtgateMySQLPort, + DbName: UserTableSchema, + } + + query, err := VtgateExecQuery(t, &vtParams, "select version() as v") + require.Nil(t, err) + v, err := query.Named().Rows[0].ToString("v") + require.Nil(t, err) + fmt.Printf("version: %s\n", v) + + // create table + tableName := "mytable" + _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf( + `create table if not exists %s ( + id int auto_increment primary key, + name varchar(256) not null, + c2 int + )`, tableName)) + require.Nil(t, err) + require.Equal(t, true, CheckTableExist(t, &vtParams, tableName)) + + // create table t2 + _, err = VtgateExecQuery(t, &vtParams, + `create table if not exists t2 ( + id int auto_increment primary key, + c2 int + )`) + require.Nil(t, err) + require.Equal(t, true, CheckTableExist(t, &vtParams, "t2")) + + // insert some data into table + insertDataSQLTemplate := fmt.Sprintf(`insert into %s (name,c2) values (%%a,%%a);`, tableName) + totalRows := 10000 + for i := 0; i < totalRows; i++ { + insertDataSQL, err := sqlparser.ParseAndBind(insertDataSQLTemplate, + sqltypes.StringBindVariable(fmt.Sprintf("name_%d", i)), + sqltypes.Int64BindVariable(int64(1))) + require.NoError(t, err) + query, err = VtgateExecQuery(t, &vtParams, insertDataSQL) + require.NoError(t, err) + require.Equal(t, 1, int(query.RowsAffected)) + } + + query, err = VtgateExecQuery(t, &vtParams, "select count(*) as cnt from mytable;") + require.Nil(t, err) + row, _ := query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("row inserted is %d\n", row) + + // insert data into t2 + query, err = VtgateExecQuery(t, &vtParams, "insert into t2 (c2) values (1);") + require.NoError(t, err) + require.Equal(t, 1, int(query.RowsAffected)) + + // all row should not be updated yet + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(`select count(*) as cnt from %s where name!='123 and c2 in (select c2 from t2)'`, tableName)) + require.Nil(t, err) + rowsNotUpdated, _ := query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("row not updated is %d\n", rowsNotUpdated) + require.Equal(t, int64(totalRows), rowsNotUpdated) + + // submit a DML job + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("update /*vt+ dml_split=true */ %s set name='123' where c2 in (select c2 from t2) ;", tableName)) + require.Nil(t, err) + jobUUID := query.Named().Rows[0]["job_uuid"].ToString() + fmt.Printf("job %s submitted", jobUUID) + + // wait for job to complete + require.Equal(t, jobcontroller.CompletedStatus, WaitForJobStatus(t, &vtParams, jobUUID, 10*time.Minute, jobcontroller.CompletedStatus)) + + // verify that all the table rows satisfy the where condition have been updated + // all rows should be updated + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(`select count(*) as cnt from %s where name!='123' and c2 in (select c2 from t2)`, tableName)) + require.Nil(t, err) + rowsNotUpdated, _ = query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("row not updated is %d\n", rowsNotUpdated) + require.Equal(t, int64(0), rowsNotUpdated) + + // drop table + _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, tableName)) + require.Nil(t, err) + _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, "t2")) + require.Nil(t, err) +} + +func subqueryInSet(t *testing.T) { + defer cluster.PanicHandler(t) + vtParams := mysql.ConnParams{ + Host: clusterInstance.Hostname, + Port: clusterInstance.VtgateMySQLPort, + DbName: UserTableSchema, + } + + query, err := VtgateExecQuery(t, &vtParams, "select version() as v") + require.Nil(t, err) + v, err := query.Named().Rows[0].ToString("v") + require.Nil(t, err) + fmt.Printf("version: %s\n", v) + + // create table + tableName := "mytable" + _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf( + `create table if not exists %s ( + id int auto_increment primary key, + name varchar(256) not null, + age int + )`, tableName)) + require.Nil(t, err) + require.Equal(t, true, CheckTableExist(t, &vtParams, tableName)) + + // create t2 + _, err = VtgateExecQuery(t, &vtParams, + `create table if not exists t2 ( + id int auto_increment primary key, + c1 varchar(256) not null + )`) + require.Nil(t, err) + require.Equal(t, true, CheckTableExist(t, &vtParams, tableName)) + + // insert some data into table + insertDataSQLTemplate := fmt.Sprintf(`insert into %s (name, age) values (%%a, %%a);`, tableName) + totalRows := 10000 + for i := 0; i < totalRows; i++ { + insertDataSQL, err := sqlparser.ParseAndBind(insertDataSQLTemplate, + sqltypes.StringBindVariable(fmt.Sprintf("name_%d", i)), + sqltypes.Int64BindVariable(int64(i))) + require.NoError(t, err) + query, err = VtgateExecQuery(t, &vtParams, insertDataSQL) + require.NoError(t, err) + require.Equal(t, 1, int(query.RowsAffected)) + } + + query, err = VtgateExecQuery(t, &vtParams, "select count(*) as cnt from mytable;") + require.Nil(t, err) + row, _ := query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("row inserted is %d\n", row) + + // insert data into t2 + query, err = VtgateExecQuery(t, &vtParams, "insert into t2 (c1) values ('123');") + require.NoError(t, err) + require.Equal(t, 1, int(query.RowsAffected)) + + // rows has not been updated + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(`select count(*) as cnt from %s where name!='123' and age > 50;`, tableName)) + require.Nil(t, err) + rowsNotUpdated, _ := query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("row not updated is %d\n", rowsNotUpdated) + require.Equal(t, int64(totalRows-50-1), rowsNotUpdated) + + // submit a DML job + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("update /*vt+ dml_split=true */ %s set name = (select c1 from t2 limit 1) where age > 50;", tableName)) + require.Nil(t, err) + jobUUID := query.Named().Rows[0]["job_uuid"].ToString() + fmt.Printf("job %s submitted", jobUUID) + + // wait for job to complete + require.Equal(t, jobcontroller.CompletedStatus, WaitForJobStatus(t, &vtParams, jobUUID, 10*time.Minute, jobcontroller.CompletedStatus)) + + // verify that all the table rows satisfy the where condition have been updated + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(`select count(*) as cnt from %s where name!='123' and age > 50;`, tableName)) + require.Nil(t, err) + rowsNotUpdated, _ = query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("row not updated is %d\n", rowsNotUpdated) + require.Equal(t, int64(0), rowsNotUpdated) + + // drop table + _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, tableName)) + require.Nil(t, err) + _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, "t2")) + require.Nil(t, err) +} + +func subqueryInWhereExist(t *testing.T) { + defer cluster.PanicHandler(t) + vtParams := mysql.ConnParams{ + Host: clusterInstance.Hostname, + Port: clusterInstance.VtgateMySQLPort, + DbName: UserTableSchema, + } + + query, err := VtgateExecQuery(t, &vtParams, "select version() as v") + require.Nil(t, err) + v, err := query.Named().Rows[0].ToString("v") + require.Nil(t, err) + fmt.Printf("version: %s\n", v) + + // create table + tableName := "mytable" + _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf( + `create table if not exists %s ( + id int auto_increment primary key, + name varchar(256) not null + )`, tableName)) + require.Nil(t, err) + require.Equal(t, true, CheckTableExist(t, &vtParams, tableName)) + + // create t2 + _, err = VtgateExecQuery(t, &vtParams, + `create table if not exists t2 ( + id int auto_increment primary key, + c2 varchar(256) not null + )`) + require.Nil(t, err) + require.Equal(t, true, CheckTableExist(t, &vtParams, tableName)) + + // insert some data into table + insertDataSQLTemplate := fmt.Sprintf(`insert into %s (name) values (%%a);`, tableName) + totalRows := 10000 + for i := 0; i < totalRows; i++ { + insertDataSQL, err := sqlparser.ParseAndBind(insertDataSQLTemplate, + sqltypes.StringBindVariable(fmt.Sprintf("name_%d", i))) + require.NoError(t, err) + query, err = VtgateExecQuery(t, &vtParams, insertDataSQL) + require.NoError(t, err) + require.Equal(t, 1, int(query.RowsAffected)) + } + + query, err = VtgateExecQuery(t, &vtParams, "select count(*) as cnt from mytable;") + require.Nil(t, err) + row, _ := query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("row inserted is %d\n", row) + + // insert data into t2 + insertDataSQLTemplate = fmt.Sprintf(`insert into %s (c2) values (%%a);`, "t2") + for i := 0; i < 500; i++ { + insertDataSQL, err := sqlparser.ParseAndBind(insertDataSQLTemplate, + sqltypes.StringBindVariable(fmt.Sprintf("name_%d", i))) + require.NoError(t, err) + query, err = VtgateExecQuery(t, &vtParams, insertDataSQL) + require.NoError(t, err) + require.Equal(t, 1, int(query.RowsAffected)) + } + + // rows has not been updated + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(`select count(*) as cnt from %s where name!='123';`, tableName)) + require.Nil(t, err) + rowsNotUpdated, _ := query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("row not updated is %d\n", rowsNotUpdated) + require.Equal(t, int64(totalRows), rowsNotUpdated) + + // submit a DML job + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("update /*vt+ dml_split=true */ %s set name = '123' where exists (select c2 from t2 where t2.c2 = mytable.name);", tableName)) + require.Nil(t, err) + jobUUID := query.Named().Rows[0]["job_uuid"].ToString() + fmt.Printf("job %s submitted", jobUUID) + + // wait for job to complete + require.Equal(t, jobcontroller.CompletedStatus, WaitForJobStatus(t, &vtParams, jobUUID, 10*time.Minute, jobcontroller.CompletedStatus)) + + // verify that all the table rows satisfy the where condition have been updated + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(`select count(*) as cnt from %s where name!='123' and exists (select c2 from t2 where t2.c2 = mytable.name);`, tableName)) + require.Nil(t, err) + rowsNotUpdated, _ = query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("rows not updated is %d\n", rowsNotUpdated) + require.Equal(t, int64(0), rowsNotUpdated) + + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(`select count(*) as cnt from %s where name!='123'`, tableName)) + require.Nil(t, err) + rowsNotUpdated, _ = query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("rows which name not equal '123' %d\n", rowsNotUpdated) + require.Equal(t, int64(totalRows-500), rowsNotUpdated) + + // drop table + _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, tableName)) + require.Nil(t, err) + _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, "t2")) + require.Nil(t, err) +} + +func foreignSubqueryInWhere(t *testing.T) { + defer cluster.PanicHandler(t) + vtParams := mysql.ConnParams{ + Host: clusterInstance.Hostname, + Port: clusterInstance.VtgateMySQLPort, + DbName: UserTableSchema, + } + + query, err := VtgateExecQuery(t, &vtParams, "select version() as v") + require.Nil(t, err) + v, err := query.Named().Rows[0].ToString("v") + require.Nil(t, err) + fmt.Printf("version: %s\n", v) + + // create table + _, err = VtgateExecQuery(t, &vtParams, + `create table if not exists mytable ( + id int auto_increment primary key, + name varchar(256) not null + )`) + require.Nil(t, err) + require.Equal(t, true, CheckTableExist(t, &vtParams, "mytable")) + + // create t2 + _, err = VtgateExecQuery(t, &vtParams, + `create table if not exists t2 ( + id int auto_increment primary key, + mytable_id int not null, + foreign key (mytable_id) references mytable(id) + )`) + require.Nil(t, err) + require.Equal(t, true, CheckTableExist(t, &vtParams, "t2")) + + // insert some data into table + totalRows := 10000 + for i := 0; i < totalRows; i++ { + insertDataSQL, err := sqlparser.ParseAndBind("insert into mytable (name) values (%a)", + sqltypes.StringBindVariable(fmt.Sprintf("name_%d", i))) + require.NoError(t, err) + query, err = VtgateExecQuery(t, &vtParams, insertDataSQL) + require.NoError(t, err) + require.Equal(t, 1, int(query.RowsAffected)) + } + + query, err = VtgateExecQuery(t, &vtParams, "select count(*) as cnt from mytable;") + require.Nil(t, err) + row, _ := query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("row inserted is %d\n", row) + require.Equal(t, int64(totalRows), row) + + // insert data into t2 + query, err = VtgateExecQuery(t, &vtParams, "insert into t2(mytable_id) select id from mytable where mytable.id>1000;") + require.NoError(t, err) + require.Equal(t, 9000, int(query.RowsAffected)) + + // rows has not been updated + query, err = VtgateExecQuery(t, &vtParams, `select count(*) as cnt from mytable where name!='123';`) + require.Nil(t, err) + rowsNotUpdated, _ := query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("row not updated is %d\n", rowsNotUpdated) + require.Equal(t, int64(totalRows), rowsNotUpdated) + + // submit a DML job + query, err = VtgateExecQuery(t, &vtParams, "update /*vt+ dml_split=true */ mytable set name = '123' where id = (select mytable_id from t2 where t2.mytable_id = mytable.id);") + require.Nil(t, err) + jobUUID := query.Named().Rows[0]["job_uuid"].ToString() + fmt.Printf("job %s submitted", jobUUID) + + // wait for job to complete + require.Equal(t, jobcontroller.CompletedStatus, WaitForJobStatus(t, &vtParams, jobUUID, 10*time.Minute, jobcontroller.CompletedStatus)) + + // verify that all the table rows satisfy the where condition have been updated + query, err = VtgateExecQuery(t, &vtParams, `select count(*) as cnt from mytable where name!='123' and id > (select min(mytable_id) from t2 where t2.mytable_id = mytable.id);`) + require.Nil(t, err) + rowsNotUpdated, _ = query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("rows not updated is %d\n", rowsNotUpdated) + require.Equal(t, int64(0), rowsNotUpdated) + + query, err = VtgateExecQuery(t, &vtParams, `select count(*) as cnt from mytable where name!='123'`) + require.Nil(t, err) + rowsNotUpdated, _ = query.Named().Rows[0]["cnt"].ToInt64() + fmt.Printf("rows which name not equal '123' %d\n", rowsNotUpdated) + require.Equal(t, int64(1000), rowsNotUpdated) + + // drop table + _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.t2", UserTableSchema)) + require.Nil(t, err) + _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.mytable", UserTableSchema)) + require.Nil(t, err) +} diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index 079c854b71..acd2c0c824 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -1,3 +1,8 @@ +/* +Copyright ApeCloud, Inc. +Licensed under the Apache v2(found in the LICENSE file in the root directory). +*/ + // Code generated by goyacc -fo sql.go sql.y. DO NOT EDIT. //line sql.y:23 @@ -1408,7 +1413,6 @@ var yyExca = [...]int{ 14, 52, -2, 41, -1, 53, -<<<<<<< HEAD 1, 162, 682, 162, -2, 170, @@ -1418,17 +1422,17 @@ var yyExca = [...]int{ 352, 170, -2, 524, -1, 64, - 36, 821, - 240, 821, - 251, 821, - 286, 835, - 287, 835, - -2, 823, + 36, 822, + 240, 822, + 251, 822, + 286, 836, + 287, 836, + -2, 824, -1, 69, - 242, 859, - -2, 857, + 242, 860, + -2, 858, -1, 127, - 239, 1522, + 239, 1523, -2, 136, -1, 129, 1, 163, @@ -1444,18 +1448,18 @@ var yyExca = [...]int{ 352, 170, -2, 533, -1, 842, - 87, 1539, - -2, 1384, - -1, 843, 87, 1540, - 221, 1544, -2, 1385, + -1, 843, + 87, 1541, + 221, 1545, + -2, 1386, -1, 844, - 221, 1543, + 221, 1544, -2, 43, -1, 923, - 60, 935, - -2, 950, + 60, 936, + -2, 951, -1, 1011, 250, 44, 255, 44, @@ -1465,103 +1469,18 @@ var yyExca = [...]int{ 682, 581, -2, 170, -1, 1412, - 221, 1544, - -2, 1385, + 221, 1545, + -2, 1386, -1, 1560, - 60, 936, - -2, 955, - -1, 1561, 60, 937, -2, 956, + -1, 1561, + 60, 938, + -2, 957, -1, 1612, 135, 170, 176, 170, 352, 170, -======= - 135, 169, - 176, 169, - 351, 169, - -2, 523, - -1, 62, - 36, 819, - 239, 819, - 250, 819, - 285, 833, - 286, 833, - -2, 821, - -1, 67, - 241, 857, - -2, 855, - -1, 125, - 238, 1519, - -2, 135, - -1, 127, - 1, 162, - 680, 162, - -2, 169, - -1, 138, - 136, 409, - 244, 409, - -2, 512, - -1, 157, - 135, 169, - 176, 169, - 351, 169, - -2, 532, - -1, 837, - 87, 1536, - -2, 1381, - -1, 838, - 87, 1537, - 221, 1541, - -2, 1382, - -1, 839, - 221, 1540, - -2, 42, - -1, 918, - 60, 932, - -2, 947, - -1, 1006, - 249, 43, - 254, 43, - -2, 420, - -1, 1093, - 1, 580, - 680, 580, - -2, 169, - -1, 1405, - 221, 1541, - -2, 1382, - -1, 1553, - 60, 933, - -2, 952, - -1, 1554, - 60, 934, - -2, 953, - -1, 1605, - 135, 169, - 176, 169, - 351, 169, - -2, 459, - -1, 1688, - 136, 409, - 244, 409, - -2, 512, - -1, 1697, - 249, 44, - 254, 44, - -2, 421, - -1, 2086, - 221, 1545, - -2, 1539, - -1, 2087, - 221, 1541, - -2, 1537, - -1, 2186, - 135, 169, - 176, 169, - 351, 169, ->>>>>>> e439161508 (fix: complete time period feature) -2, 460, -1, 1695, 136, 410, @@ -1572,13 +1491,12 @@ var yyExca = [...]int{ 255, 45, -2, 422, -1, 2093, - 221, 1548, - -2, 1542, + 221, 1549, + -2, 1543, -1, 2094, - 221, 1544, - -2, 1540, + 221, 1545, + -2, 1541, -1, 2193, -<<<<<<< HEAD 135, 170, 176, 170, 352, 170, @@ -1589,995 +1507,967 @@ var yyExca = [...]int{ -1, 2603, 78, 99, 88, 99, - -2, 1014, + -2, 1015, -1, 2672, - 657, 731, - -2, 705, + 657, 732, + -2, 706, -1, 2845, - 50, 1490, - -2, 1484, - -1, 3504, - 657, 731, - -2, 719, - -1, 3592, -======= - 26, 190, - -2, 192, - -1, 2596, - 78, 98, - 88, 98, - -2, 1011, - -1, 2665, - 655, 731, - -2, 705, - -1, 2838, - 50, 1487, - -2, 1481, - -1, 3498, - 655, 731, - -2, 719, - -1, 3586, ->>>>>>> e439161508 (fix: complete time period feature) - 90, 663, - 95, 663, - 105, 663, - 178, 663, - 179, 663, - 180, 663, - 181, 663, - 182, 663, - 183, 663, - 184, 663, - 185, 663, - 186, 663, - 187, 663, - 188, 663, - 189, 663, - 190, 663, - 191, 663, - 192, 663, - 193, 663, - 194, 663, - 195, 663, - 196, 663, - 197, 663, - 198, 663, - 199, 663, - 200, 663, - 201, 663, - 202, 663, - 203, 663, - 204, 663, - 205, 663, - 206, 663, - 207, 663, - 208, 663, - 209, 663, - 210, 663, - 211, 663, - 212, 663, - 213, 663, - 214, 663, - 215, 663, - 216, 663, - 217, 663, - 218, 663, - 219, 663, -<<<<<<< HEAD - -2, 1907, -======= - -2, 1903, ->>>>>>> e439161508 (fix: complete time period feature) + 50, 1491, + -2, 1485, + -1, 3505, + 657, 732, + -2, 720, + -1, 3593, + 90, 664, + 95, 664, + 105, 664, + 178, 664, + 179, 664, + 180, 664, + 181, 664, + 182, 664, + 183, 664, + 184, 664, + 185, 664, + 186, 664, + 187, 664, + 188, 664, + 189, 664, + 190, 664, + 191, 664, + 192, 664, + 193, 664, + 194, 664, + 195, 664, + 196, 664, + 197, 664, + 198, 664, + 199, 664, + 200, 664, + 201, 664, + 202, 664, + 203, 664, + 204, 664, + 205, 664, + 206, 664, + 207, 664, + 208, 664, + 209, 664, + 210, 664, + 211, 664, + 212, 664, + 213, 664, + 214, 664, + 215, 664, + 216, 664, + 217, 664, + 218, 664, + 219, 664, + -2, 1908, } const yyPrivate = 57344 -<<<<<<< HEAD -const yyLast = 48365 +const yyLast = 48371 var yyAct = [...]int{ - 1568, 3663, 843, 853, 846, 3674, 2141, 3569, 3632, 716, - 3633, 2190, 3222, 1615, 3535, 2995, 3558, 3590, 2897, 2904, - 3079, 3485, 3469, 3417, 2122, 2946, 939, 2955, 2960, 3251, - 2957, 2956, 2954, 2959, 2958, 3252, 3253, 2858, 3467, 3209, - 1170, 2861, 2503, 2124, 917, 3281, 813, 2975, 2804, 3457, - 695, 2912, 812, 2974, 2537, 43, 698, 2862, 1906, 200, - 2859, 5, 200, 2739, 2264, 3118, 3112, 1575, 675, 3286, - 806, 1538, 726, 681, 808, 2977, 2145, 2161, 2576, 2846, - 3138, 845, 2856, 1960, 200, 2563, 2164, 2084, 807, 2723, - 696, 1673, 3104, 2637, 2252, 1043, 2227, 2669, 2232, 200, - 2638, 1114, 694, 2639, 2295, 1172, 972, 2178, 168, 2588, - 42, 2166, 2569, 940, 2165, 1562, 2555, 2539, 2089, 44, - 1975, 2081, 1914, 919, 2055, 2709, 681, 200, 1956, 681, - 2273, 3001, 2251, 154, 1143, 2234, 2153, 2630, 1702, 1006, - 921, 2312, 924, 1720, 1584, 1604, 1001, 2605, 2168, 690, - 708, 2054, 1542, 1424, 1840, 102, 1979, 106, 1351, 1336, - 1836, 942, 1845, 1933, 980, 976, 1009, 107, 1019, 1709, - 1012, 2249, 1801, 981, 2223, 1007, 1008, 2146, 1603, 703, - 1589, 957, 2224, 959, 930, 1408, 2090, 1384, 2051, 1905, - 1161, 101, 1988, 1854, 927, 1168, 172, 87, 1666, 109, - 925, 132, 137, 130, 131, 1092, 1694, 138, 952, 926, - 928, 702, 108, 86, 1428, 100, 3494, 2662, 3664, 2266, - 2267, 2268, 3520, 3210, 685, 2943, 2266, 2692, 2691, 2310, - 2660, 3165, 1352, 664, 947, 951, 3202, 1786, 97, 2965, - 3616, 97, 624, 619, 2731, 97, 95, 2732, 3521, 3256, - 133, 1432, 1045, 3515, 3516, 1921, 1920, 933, 1352, 1919, - 1936, 139, 670, 973, 1918, 1062, 1063, 1064, 1048, 1067, - 1068, 1069, 1070, 3256, 999, 1073, 1074, 1075, 1076, 1077, - 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, - 1088, 1089, 2, 1917, 934, 2963, 967, 121, 966, 918, - 686, 920, 862, 863, 864, 1916, 1569, 2965, 1022, 1889, - 1023, 998, 862, 863, 864, 1886, 623, 3611, 688, 1347, - 2962, 2969, 689, 2119, 2120, 2391, 133, 1049, 1052, 1053, - 2535, 997, 1056, 996, 995, 2565, 3255, 2842, 113, 114, - 115, 1363, 118, 1369, 2299, 127, 195, 990, 196, 97, - 1065, 613, 965, 810, 811, 941, 3516, 3636, 2682, 985, - 3255, 3570, 2808, 2963, 3600, 683, 684, 1363, 3620, 969, - 134, 3684, 156, 3618, 3631, 913, 914, 915, 916, 3654, - 3084, 923, 3598, 177, 3083, 2685, 3470, 2297, 2298, 2969, - 2243, 3604, 3605, 3619, 133, 2504, 664, 1926, 3617, 2914, - 2915, 664, 3026, 3413, 3412, 3215, 3599, 1047, 3216, 954, - 955, 1046, 3645, 2237, 167, 965, 810, 811, 979, 88, - 155, 88, 90, 3423, 3614, 3499, 3576, 2400, 3234, 3223, - 1338, 3559, 3566, 88, 2966, 2292, 3576, 88, 3422, 174, - 3233, 3595, 175, 2149, 1385, 1965, 3046, 1683, 2894, 2895, - 665, 2699, 2700, 1358, 2185, 2186, 1350, 2579, 1605, 664, - 1606, 143, 144, 166, 165, 194, 3023, 1386, 1387, 1388, - 1389, 1390, 1391, 1392, 1394, 1393, 1395, 1396, 1366, 1358, - 1367, 1368, 2580, 2536, 1846, 2893, 3299, 1150, 2730, 1152, - 2397, 994, 2398, 1103, 1104, 2614, 2184, 97, 2613, 97, - 2715, 2615, 2966, 2708, 1138, 1139, 1898, 1899, 2913, 1121, - 1165, 97, 1133, 911, 1122, 97, 910, 2663, 1121, 3486, - 2916, 1134, 1120, 1122, 1119, 1106, 1127, 1149, 1151, 2626, - 2203, 2202, 1348, 1337, 3115, 2121, 2997, 3034, 664, 2572, - 2573, 2773, 3032, 989, 1091, 1901, 991, 1897, 664, 992, - 664, 2389, 1097, 678, 3637, 622, 682, 1601, 676, 3002, - 1888, 2236, 1546, 2710, 160, 141, 163, 148, 140, 2670, - 161, 162, 2274, 2990, 1547, 3638, 2695, 2313, 178, 1846, - 2149, 2991, 3666, 958, 1776, 2318, 1802, 184, 149, 1066, - 2392, 2393, 2395, 2394, 3445, 2366, 3446, 2367, 1154, 2368, - 1136, 1137, 152, 150, 145, 146, 147, 151, 1163, 1142, - 2380, 2718, 1140, 665, 142, 200, 1099, 200, 665, 1135, - 200, 200, 1141, 153, 1128, 1815, 3204, 3203, 1777, 1164, - 1778, 2369, 1072, 1071, 2998, 2317, 2999, 1147, 2315, 1550, - 2319, 1148, 2147, 2148, 1844, 994, 3397, 986, 3200, 1002, - 2277, 1153, 3260, 1003, 988, 987, 2162, 1003, 1032, 1041, - 1040, 1039, 3612, 681, 1030, 681, 681, 1038, 1037, 1036, - 1035, 1687, 1034, 1029, 620, 1042, 665, 2316, 3678, 968, - 962, 960, 1399, 1146, 1399, 681, 200, 977, 993, 2916, - 3685, 975, 1359, 1014, 1357, 1354, 1355, 1356, 1362, 1364, - 1361, 977, 1360, 992, 3643, 1131, 1015, 977, 994, 1090, - 1708, 1837, 1353, 2774, 1412, 1021, 2250, 169, 1359, 2807, - 1357, 1354, 1355, 1356, 1362, 1364, 1361, 195, 1360, 1117, - 1051, 1123, 1124, 1125, 1126, 953, 1014, 2398, 1353, 2719, - 1050, 2303, 968, 962, 960, 2722, 2302, 2338, 2936, 2337, - 2694, 134, 2341, 2342, 1000, 665, 2339, 2340, 1166, 1167, - 3493, 2661, 2343, 3199, 177, 665, 1833, 665, 1420, 2735, - 1339, 2412, 1059, 1094, 1021, 3482, 1681, 2570, 1680, 2147, - 2148, 1155, 1156, 1158, 1679, 1096, 1410, 1095, 1602, 2680, - 1834, 1677, 2540, 2542, 618, 1402, 1403, 1404, 1405, 2628, - 621, 859, 2697, 164, 859, 1416, 1033, 2619, 859, 2296, - 1329, 617, 1031, 3152, 612, 3134, 2664, 2294, 1020, 1707, - 174, 3572, 2610, 175, 1014, 1017, 1018, 2575, 977, 1806, - 3024, 3572, 1011, 1015, 1400, 1401, 3603, 3116, 2240, 1817, - 2707, 1816, 993, 2706, 1820, 1821, 194, 2512, 1818, 1819, - 1968, 1850, 1593, 2967, 2968, 3571, 1412, 3254, 1330, 1331, - 1501, 1406, 3163, 3164, 157, 3571, 2971, 158, 1788, 1787, - 1789, 1790, 1791, 1108, 91, 2191, 129, 1020, 2241, 1399, - 3602, 3254, 1093, 1396, 2892, 2239, 1989, 936, 1162, 3507, - 3232, 1847, 1848, 1851, 1849, 961, 1044, 170, 3676, 2684, - 1990, 3677, 2725, 3675, 182, 993, 3195, 2724, 1116, 1130, - 2725, 1536, 3128, 200, 2314, 2724, 1058, 681, 681, 2242, - 1132, 2967, 2968, 1910, 1144, 1855, 1570, 1572, 1346, 2238, - 2399, 1830, 200, 1607, 2971, 2759, 96, 1980, 96, 2429, - 1430, 1980, 1431, 2683, 1551, 190, 1850, 2653, 3646, 1369, - 96, 1368, 681, 3295, 96, 200, 3170, 3068, 961, 178, - 2541, 1105, 1367, 1368, 1118, 1554, 3169, 681, 184, 1537, - 2281, 1553, 1021, 1102, 200, 1557, 1717, 1803, 1144, 1804, - 921, 1434, 1805, 1716, 1706, 2286, 1847, 1848, 1851, 1849, - 171, 176, 173, 179, 180, 181, 183, 185, 186, 187, - 188, 1822, 1928, 1930, 1931, 1021, 189, 191, 192, 193, - 2286, 2293, 681, 2354, 2350, 2352, 2353, 2351, 2357, 2358, - 2291, 2289, 2355, 2356, 2290, 1412, 1929, 1021, 3686, 1987, - 1032, 681, 681, 1537, 681, 1555, 681, 681, 106, 681, - 681, 681, 681, 681, 681, 1556, 1938, 1030, 107, 2288, - 3639, 1115, 1412, 1157, 3153, 1412, 681, 1412, 200, 1543, - 1939, 1397, 1398, 1937, 932, 1530, 1507, 1508, 1509, 1510, - 1511, 1145, 1856, 1807, 1098, 1020, 3537, 3229, 200, 3230, - 109, 1014, 1017, 1018, 1366, 977, 1367, 1368, 3680, 1011, - 1015, 681, 3475, 200, 1684, 1685, 1686, 1714, 169, 1389, - 1390, 1391, 1392, 1394, 1393, 1395, 1396, 3405, 1020, 681, - 1010, 200, 1796, 1024, 1014, 3687, 1700, 1571, 1026, 1771, - 3404, 3538, 1027, 1025, 1749, 1145, 1369, 1752, 3395, 1754, - 1020, 200, 1057, 918, 1540, 1794, 1054, 3476, 200, 1693, - 1574, 920, 3245, 1028, 2404, 2405, 2406, 200, 200, 200, - 200, 200, 200, 200, 200, 200, 681, 2086, 1712, 3244, - 1753, 1761, 1762, 1598, 1599, 1552, 3177, 1767, 1768, 862, - 863, 864, 3176, 1722, 3166, 1723, 1795, 1725, 1727, 1783, - 2740, 1731, 1733, 1735, 1737, 1739, 1710, 1710, 1711, 2944, - 1676, 2325, 2321, 2323, 2324, 2322, 2328, 2329, 1021, 1793, - 2326, 2327, 1369, 2932, 2635, 2634, 125, 1691, 2633, 2246, - 1703, 1690, 1689, 2426, 1842, 1825, 1797, 1823, 1824, 1781, - 1828, 1829, 1780, 122, 1826, 1827, 1779, 1769, 1763, 1859, - 1391, 1392, 1394, 1393, 1395, 1396, 1863, 1757, 1865, 1866, - 1867, 1868, 1760, 1782, 1759, 1872, 1373, 1374, 1375, 1376, - 1377, 1378, 1379, 1371, 1857, 1858, 1758, 1884, 1885, 1729, - 1887, 1366, 1369, 1367, 1368, 2742, 1838, 195, 1862, 1113, - 2761, 1112, 1569, 1369, 2994, 1869, 1870, 1871, 170, 1985, - 1333, 3041, 670, 1682, 123, 182, 2425, 1810, 1986, 1808, - 1809, 134, 1813, 1814, 1601, 133, 1811, 1812, 3160, 670, - 997, 1020, 996, 995, 177, 3640, 1024, 1014, 2086, 2617, - 670, 1026, 2083, 2262, 2261, 1027, 1025, 2260, 2259, 2258, - 2257, 2085, 1578, 1861, 3502, 112, 190, 2561, 3665, 3627, - 1569, 681, 681, 1365, 1569, 857, 111, 1366, 110, 1367, - 1368, 2752, 2751, 2750, 681, 1883, 2744, 1569, 2748, 1882, - 2743, 2466, 2741, 200, 2561, 3565, 124, 2746, 1569, 103, - 174, 1365, 1569, 175, 3501, 1369, 2745, 3479, 1579, 3478, - 104, 171, 176, 173, 179, 180, 181, 183, 185, 186, - 187, 188, 2561, 3545, 2747, 2749, 194, 189, 191, 192, - 193, 2561, 3541, 3528, 1569, 43, 3477, 1366, 43, 1367, - 1368, 3400, 681, 3384, 1963, 1963, 1569, 1569, 1366, 3383, - 1367, 1368, 1412, 1387, 1388, 1389, 1390, 1391, 1392, 1394, - 1393, 1395, 1396, 681, 3294, 1569, 3495, 1934, 3292, 1412, - 1983, 3213, 3492, 1941, 1984, 1943, 1944, 1945, 1946, 1947, - 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 3241, 3650, - 1569, 3408, 1569, 3431, 681, 681, 1386, 1387, 1388, 1389, - 1390, 1391, 1392, 1394, 1393, 1395, 1396, 112, 2047, 1535, - 103, 1534, 1536, 1533, 1942, 1932, 3174, 105, 111, 3159, - 110, 104, 1961, 1961, 1410, 1964, 2561, 3396, 3430, 105, - 3213, 1569, 2561, 3211, 2286, 1569, 2079, 3008, 1369, 178, - 1366, 1981, 1367, 1368, 2094, 3132, 1569, 1369, 184, 2477, - 1569, 97, 3006, 3003, 2043, 3000, 2935, 2934, 2925, 2924, - 1369, 2108, 2154, 2155, 1894, 1895, 2922, 2923, 1369, 2713, - 1537, 1935, 1385, 2041, 2734, 1911, 1569, 87, 1570, 2115, - 87, 2644, 2091, 2052, 2631, 1369, 1532, 200, 1569, 2920, - 2921, 2920, 2919, 681, 2308, 1386, 1387, 1388, 1389, 1390, - 1391, 1392, 1394, 1393, 1395, 1396, 2307, 2456, 2144, 1940, - 2585, 1569, 2138, 2398, 2693, 2557, 200, 1672, 2674, 681, - 2128, 2133, 105, 2134, 2667, 2668, 2082, 2127, 1369, 200, - 105, 3648, 1569, 681, 1890, 1967, 2094, 200, 1852, 200, - 1369, 200, 200, 1792, 3582, 1569, 1369, 2093, 1974, 1976, - 1784, 2116, 3580, 1569, 2606, 1774, 681, 2052, 2561, 2560, - 2422, 1569, 2096, 2097, 1966, 1569, 3388, 2200, 1770, 1991, - 1992, 1993, 1994, 1366, 2091, 1367, 1368, 2606, 169, 1369, - 1766, 1569, 1366, 2005, 1367, 1368, 1765, 1764, 2422, 1580, - 106, 2172, 1672, 1671, 3387, 1366, 2092, 1367, 1368, 1160, - 107, 1613, 1612, 1366, 1159, 1367, 1368, 2577, 3221, 2671, - 1369, 106, 3578, 1569, 2649, 681, 2247, 2607, 2137, 1369, - 1366, 107, 1367, 1368, 3454, 1569, 2199, 2609, 1582, 2095, - 3452, 1569, 2098, 2099, 2287, 3127, 2857, 2577, 1365, 2093, - 2607, 2887, 681, 2209, 2210, 2211, 2212, 3127, 681, 3129, - 2398, 2398, 2204, 3533, 2205, 2206, 2207, 2208, 1369, 3506, - 2195, 2194, 2176, 1366, 3641, 1367, 1368, 933, 2584, 2114, - 2215, 2216, 2217, 2218, 2126, 1366, 2561, 1367, 1368, 2585, - 2585, 1366, 111, 1367, 1368, 1369, 2136, 3088, 2159, 2275, - 1369, 2922, 2286, 2198, 1581, 681, 2830, 2183, 2139, 2422, - 681, 2477, 2229, 3426, 681, 681, 2235, 1369, 1385, 3127, - 2411, 2157, 2417, 2453, 1366, 3178, 1367, 1368, 967, 2452, - 966, 2182, 2181, 2585, 2180, 2286, 2269, 2152, 1369, 2197, - 2196, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1394, 1393, - 1395, 1396, 200, 3490, 1573, 1366, 2272, 1367, 1368, 200, - 2245, 1365, 2117, 1966, 1366, 1369, 1367, 1368, 170, 1912, - 1896, 1832, 1600, 125, 1005, 182, 3179, 3180, 3181, 3449, - 1569, 3608, 2230, 1004, 2029, 200, 200, 3548, 2226, 200, - 3419, 200, 2219, 2221, 2222, 2280, 2244, 200, 2283, 2248, - 2284, 3435, 1569, 1366, 2256, 1367, 1368, 200, 1576, 2300, - 3385, 3306, 3194, 3191, 200, 1022, 190, 1023, 3172, 2230, - 2279, 2996, 3103, 1569, 2278, 3051, 3050, 1710, 2282, 1674, - 1366, 2228, 1367, 1368, 2301, 1366, 2304, 1367, 1368, 2992, - 2305, 2306, 2949, 2945, 200, 2675, 2225, 2220, 2947, 3096, - 1569, 97, 1366, 681, 1367, 1368, 2214, 2213, 1799, 1705, - 1745, 171, 176, 173, 179, 180, 181, 183, 185, 186, - 187, 188, 2311, 1366, 1701, 1367, 1368, 189, 191, 192, - 193, 2021, 2010, 2011, 2012, 2013, 2023, 2014, 2015, 2016, - 2028, 2024, 2017, 2018, 2025, 2026, 2027, 2019, 2020, 2022, - 1366, 1668, 1367, 1368, 126, 2641, 1097, 3139, 3140, 2382, - 2383, 1746, 1747, 1748, 2385, 3420, 2243, 2131, 2415, 1412, - 3660, 2094, 2420, 2386, 1369, 2423, 2640, 2424, 3182, 3658, - 3634, 1369, 2431, 3514, 1934, 2464, 2433, 2434, 2435, 2408, - 1385, 2410, 3440, 3142, 2941, 2372, 2441, 2442, 2443, 2444, - 2445, 2446, 2447, 2448, 2449, 2450, 2378, 1369, 1892, 2416, - 2940, 2939, 2468, 1386, 1387, 1388, 1389, 1390, 1391, 1392, - 1394, 1393, 1395, 1396, 2641, 3183, 3184, 3185, 2857, 2654, - 2409, 2373, 2457, 2458, 2459, 2460, 2461, 1369, 2463, 2879, - 3145, 2414, 2465, 2877, 2880, 1369, 2470, 2471, 2878, 2472, - 3144, 2876, 2475, 2875, 2476, 2419, 2388, 1741, 2479, 1569, - 2436, 2881, 2483, 2594, 2595, 2418, 2488, 2489, 2490, 2491, - 1893, 2396, 3510, 3421, 2093, 2143, 3276, 2451, 3275, 2502, - 1577, 2505, 2506, 2135, 2847, 2849, 3474, 3133, 1935, 2508, - 2510, 3093, 1569, 2850, 1369, 2835, 2513, 2514, 2515, 2516, - 2517, 2407, 1369, 2834, 1742, 1743, 1744, 2524, 2525, 1366, + 1568, 846, 843, 716, 853, 3664, 2190, 3570, 3633, 1615, + 3634, 3486, 3079, 3222, 2995, 3536, 3675, 3559, 3591, 2897, + 2141, 2904, 3470, 3254, 2122, 3418, 3252, 2946, 2955, 2960, + 2957, 2956, 2954, 2959, 2958, 2858, 3253, 3468, 3209, 2124, + 1170, 917, 2503, 2861, 3282, 3458, 2537, 2975, 2804, 1575, + 1906, 2912, 939, 5, 695, 2264, 2862, 698, 3118, 200, + 2974, 2859, 200, 3287, 807, 2739, 806, 3112, 675, 2161, + 2856, 2576, 726, 681, 3138, 2977, 2145, 813, 2164, 2846, + 2563, 2084, 2227, 694, 200, 3104, 2723, 2669, 2637, 2252, + 696, 3001, 2232, 2638, 1673, 2295, 2639, 2178, 845, 200, + 2165, 168, 1172, 1043, 1114, 940, 2588, 1960, 972, 44, + 1562, 2555, 2166, 808, 2569, 2539, 2081, 2055, 1975, 2153, + 2273, 2089, 2709, 919, 1914, 2251, 681, 200, 42, 681, + 1956, 1143, 2234, 154, 2312, 2630, 2605, 1001, 1006, 1584, + 1604, 1702, 2168, 2054, 102, 1424, 708, 1720, 1542, 106, + 1979, 1538, 1840, 1933, 1336, 976, 1836, 1351, 1012, 1709, + 980, 1009, 1845, 2249, 981, 1801, 2223, 107, 1007, 1008, + 1603, 2224, 1589, 957, 1019, 959, 930, 2051, 1408, 1384, + 1988, 1168, 1905, 703, 1161, 2146, 927, 1854, 109, 87, + 172, 132, 1666, 1694, 137, 130, 131, 138, 1092, 926, + 928, 1432, 101, 952, 95, 702, 2090, 1428, 3495, 2662, + 100, 3665, 3210, 86, 2266, 2267, 2268, 3521, 925, 108, + 2943, 2266, 2692, 2691, 2310, 2660, 664, 1786, 3202, 690, + 3617, 97, 947, 951, 685, 3165, 619, 97, 862, 863, + 864, 97, 2731, 3522, 133, 2732, 933, 3257, 139, 3516, + 624, 3517, 1921, 670, 1920, 121, 1936, 1919, 2965, 1918, + 1045, 1048, 973, 1917, 1916, 1889, 1886, 999, 862, 863, + 864, 623, 688, 1062, 1063, 1064, 689, 1067, 1068, 1069, + 1070, 3612, 3257, 1073, 1074, 1075, 1076, 1077, 1078, 1079, + 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, + 2, 920, 966, 1022, 967, 934, 918, 2119, 2120, 2535, + 686, 1347, 812, 941, 2963, 43, 1023, 3571, 2565, 998, + 133, 997, 1049, 1052, 1053, 996, 995, 969, 2842, 3621, + 2682, 195, 2299, 670, 3256, 2391, 990, 2808, 1056, 1569, + 2969, 3685, 3637, 985, 3632, 3619, 113, 114, 115, 1369, + 118, 3655, 3517, 127, 3620, 134, 196, 156, 1065, 613, + 3084, 3083, 3577, 2297, 965, 810, 811, 2685, 177, 3256, + 3618, 3471, 2504, 683, 684, 1926, 2298, 664, 3026, 3414, + 3413, 2965, 1047, 913, 914, 915, 916, 3215, 133, 923, + 3216, 88, 3577, 88, 2962, 1046, 90, 3646, 3424, 167, + 921, 3615, 924, 3235, 1338, 155, 3223, 88, 664, 3560, + 3423, 88, 3567, 2292, 1965, 2579, 3596, 954, 955, 661, + 3046, 942, 1683, 97, 174, 3234, 979, 175, 3500, 2894, + 2895, 2400, 2699, 2700, 2185, 2186, 994, 2963, 1103, 1104, + 2580, 1898, 1899, 665, 2536, 2893, 143, 144, 166, 165, + 194, 2730, 2397, 2966, 88, 45, 46, 90, 2614, 2184, + 3300, 2613, 2715, 2969, 2615, 2708, 664, 642, 1133, 97, + 1106, 97, 3487, 1605, 94, 1606, 1352, 911, 49, 79, + 80, 640, 77, 81, 1366, 97, 1367, 1368, 1165, 97, + 910, 78, 1121, 2663, 992, 1134, 2398, 1122, 1138, 1139, + 1127, 1121, 2626, 965, 810, 811, 1122, 1337, 2149, 664, + 622, 2203, 2202, 2997, 1120, 3115, 1119, 2572, 2573, 2121, + 65, 637, 3034, 664, 1348, 3032, 2389, 2773, 1897, 678, + 655, 1546, 97, 1091, 1150, 1901, 1152, 1888, 3002, 3638, + 676, 682, 1601, 1547, 2710, 650, 3446, 664, 3447, 160, + 141, 163, 148, 140, 2670, 161, 162, 647, 653, 649, + 3639, 2274, 2990, 178, 1066, 2695, 1776, 664, 2318, 2313, + 2991, 3667, 184, 149, 1149, 1151, 2966, 2366, 1802, 2367, + 1154, 2368, 1136, 1137, 3204, 1363, 1163, 152, 150, 145, + 146, 147, 151, 1135, 665, 958, 2380, 1846, 1128, 142, + 2392, 2393, 2395, 2394, 1142, 1099, 1140, 1164, 153, 2149, + 1777, 2998, 1778, 2999, 2718, 200, 1141, 200, 3203, 2315, + 200, 200, 2369, 2319, 1072, 665, 3613, 627, 1032, 629, + 643, 1071, 667, 993, 666, 633, 2317, 631, 635, 644, + 636, 3398, 630, 3200, 641, 2277, 3261, 632, 645, 646, + 652, 656, 657, 658, 654, 651, 659, 625, 626, 648, + 1097, 639, 668, 681, 1002, 681, 681, 620, 1003, 2162, + 52, 55, 58, 57, 60, 1030, 76, 1550, 2316, 85, + 63, 82, 1003, 665, 1147, 681, 200, 1687, 1148, 1041, + 1040, 968, 962, 960, 2807, 61, 1039, 1358, 1153, 2774, + 1350, 1038, 169, 1037, 64, 93, 92, 2147, 2148, 74, + 75, 59, 1846, 1036, 1412, 1035, 1034, 83, 84, 195, + 1042, 1029, 2398, 1399, 989, 2243, 665, 991, 2916, 3686, + 1146, 1708, 1117, 1399, 1123, 1124, 1125, 1126, 977, 977, + 665, 3644, 975, 134, 1015, 1051, 2722, 1000, 2237, 977, + 1131, 1014, 3494, 2661, 1014, 1050, 177, 3573, 3199, 1837, + 2250, 1166, 1167, 953, 665, 66, 67, 2719, 68, 69, + 70, 71, 1420, 1602, 2303, 2302, 1033, 1844, 1155, 1156, + 1158, 2540, 2542, 2697, 665, 2296, 1833, 3573, 164, 2680, + 2936, 3572, 2664, 621, 859, 1402, 1403, 1404, 1405, 2619, + 859, 1329, 1339, 1059, 859, 1416, 2694, 1681, 2147, 2148, + 2735, 1680, 174, 1679, 1834, 175, 994, 1090, 3116, 1021, + 2412, 3572, 1677, 1031, 618, 1410, 994, 2294, 986, 617, + 968, 962, 960, 612, 2707, 988, 987, 2706, 194, 1352, + 1707, 1400, 1401, 3483, 1330, 1331, 3152, 3134, 91, 157, + 2610, 2575, 158, 2512, 1968, 3255, 1412, 1406, 1788, 1787, + 1789, 1790, 1791, 3679, 2628, 1593, 3163, 3164, 2570, 1501, + 3601, 2684, 2967, 2968, 1108, 3233, 669, 2191, 1399, 936, + 1396, 1094, 170, 2892, 992, 2971, 129, 2725, 3599, 182, + 3255, 1144, 2724, 1096, 1162, 1095, 2236, 3605, 3606, 662, + 1144, 3508, 1855, 1044, 3195, 2914, 2915, 961, 96, 91, + 96, 2725, 3600, 200, 663, 2683, 2724, 681, 681, 1116, + 1346, 3128, 1020, 2314, 96, 1910, 1570, 1572, 96, 1830, + 190, 1434, 200, 1430, 2399, 1431, 1359, 1607, 1357, 1354, + 1355, 1356, 1362, 1364, 1361, 2759, 1360, 1118, 1363, 2541, + 1105, 178, 681, 1980, 1130, 200, 1353, 1102, 2653, 1980, + 184, 2429, 1554, 3068, 1850, 1132, 1157, 681, 1367, 1368, + 1551, 96, 3296, 3647, 200, 171, 176, 173, 179, 180, + 181, 183, 185, 186, 187, 188, 1989, 1537, 1368, 3170, + 1093, 189, 191, 192, 193, 2967, 2968, 3169, 1822, 2281, + 1990, 1717, 1716, 1706, 1847, 1848, 1851, 1849, 2971, 2291, + 1815, 2286, 681, 993, 2913, 2286, 1507, 1508, 1509, 1510, + 1511, 2293, 2289, 993, 1032, 1412, 2916, 1555, 1030, 3538, + 106, 681, 681, 3640, 681, 3476, 681, 681, 1145, 681, + 681, 681, 681, 681, 681, 1556, 961, 1145, 107, 1856, + 2290, 1537, 1412, 1543, 2288, 1412, 681, 1412, 200, 1530, + 1358, 2338, 1115, 2337, 3153, 932, 2341, 2342, 3681, 109, + 2339, 2340, 3406, 3687, 3539, 1806, 2343, 73, 200, 1850, + 3477, 62, 2086, 3677, 1098, 3229, 3678, 3230, 3676, 3405, + 169, 681, 1021, 200, 1389, 1390, 1391, 1392, 1394, 1393, + 1395, 1396, 1684, 1685, 1686, 2404, 2405, 2406, 1796, 681, + 1569, 200, 1369, 3396, 3246, 1771, 125, 1985, 1700, 1847, + 1848, 1851, 1849, 1552, 3245, 3177, 1986, 1058, 1571, 1987, + 1574, 200, 1807, 122, 3176, 3166, 1714, 2994, 200, 1693, + 918, 920, 2944, 2932, 1540, 2635, 1333, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 681, 2634, 1598, 1599, + 3688, 1712, 1753, 1749, 2633, 2246, 1752, 1797, 1754, 1761, + 1762, 1536, 1795, 2240, 1781, 1767, 1768, 1722, 1711, 1723, + 1780, 1725, 1727, 1676, 1779, 1731, 1733, 1735, 1737, 1739, + 1769, 1794, 1710, 1710, 123, 1020, 1763, 670, 1690, 1691, + 1024, 1014, 1689, 1783, 1703, 1026, 862, 863, 864, 1027, + 1025, 1842, 1825, 2241, 1823, 1824, 1760, 1828, 1829, 1759, + 2239, 1826, 1827, 1803, 1817, 1804, 1816, 2740, 1805, 1820, + 1821, 1553, 1859, 1818, 1819, 1557, 1758, 1729, 1021, 1863, + 921, 1865, 1866, 1867, 1868, 1757, 1113, 1366, 1872, 1367, + 1368, 1857, 1858, 1112, 2242, 1793, 2761, 3160, 670, 1601, + 1884, 1885, 1838, 1887, 2238, 1862, 124, 1782, 2617, 670, + 170, 3641, 1869, 1870, 1871, 2262, 2261, 182, 2354, 2350, + 2352, 2353, 2351, 2357, 2358, 2260, 2259, 2355, 2356, 133, + 997, 1682, 2258, 2257, 996, 995, 2561, 3666, 1021, 1359, + 2466, 1357, 1354, 1355, 1356, 1362, 1364, 1361, 1578, 1360, + 1365, 1569, 2742, 1928, 1930, 1931, 3503, 1861, 190, 1353, + 2325, 2321, 2323, 2324, 2322, 2328, 2329, 1369, 3502, 2326, + 2327, 681, 681, 3480, 103, 1882, 3479, 1929, 3478, 1883, + 3401, 1020, 3604, 1057, 681, 104, 1810, 1054, 1808, 1809, + 3385, 1813, 1814, 200, 1579, 1811, 1812, 3628, 1569, 1569, + 1021, 1938, 3384, 171, 176, 173, 179, 180, 181, 183, + 185, 186, 187, 188, 3295, 1939, 1397, 1398, 1937, 189, + 191, 192, 193, 2086, 1365, 1569, 3603, 2083, 2752, 2751, + 2750, 2561, 3566, 2744, 3293, 2748, 2085, 2743, 3242, 2741, + 1569, 1020, 681, 3231, 2746, 1963, 1963, 1014, 1017, 1018, + 857, 977, 1412, 2745, 112, 1011, 1015, 1021, 2561, 3546, + 3496, 1369, 1535, 681, 1534, 111, 1533, 110, 3174, 1412, + 1983, 2747, 2749, 3159, 1984, 3008, 1010, 1941, 3006, 1943, + 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, + 1954, 1955, 2561, 3542, 681, 681, 1932, 1385, 1934, 3529, + 1569, 3432, 1366, 1020, 1367, 1368, 3213, 3493, 2047, 1014, + 1017, 1018, 3003, 977, 1942, 3409, 1569, 1011, 1015, 3023, + 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1394, 1393, 1395, + 1396, 2561, 3397, 3213, 1569, 1569, 2079, 3000, 1369, 1961, + 1961, 2935, 1369, 2934, 2094, 3651, 1569, 2561, 3211, 1964, + 1894, 1895, 1391, 1392, 1394, 1393, 1395, 1396, 2043, 2713, + 1020, 2108, 2644, 1410, 2631, 1024, 1014, 1935, 1911, 87, + 1026, 1532, 87, 2308, 1027, 1025, 2286, 1569, 1570, 2115, + 1981, 2307, 2091, 3132, 1569, 1369, 2144, 200, 1537, 105, + 1369, 2477, 1569, 681, 2128, 1028, 1366, 1369, 1367, 1368, + 2127, 1940, 2082, 1373, 1374, 1375, 1376, 1377, 1378, 1379, + 1371, 1890, 2138, 1852, 2154, 2155, 200, 2925, 2924, 681, + 2922, 2923, 3649, 1569, 2920, 2921, 3583, 1569, 1967, 200, + 2920, 2919, 1369, 681, 2585, 1569, 2094, 200, 1792, 200, + 1784, 200, 200, 1774, 2093, 2398, 2693, 2133, 1569, 2134, + 1770, 3041, 1766, 2041, 1672, 2674, 681, 1991, 1992, 1993, + 1994, 1765, 2200, 2052, 1764, 2096, 2097, 2606, 1974, 1976, + 1569, 2005, 1580, 1366, 2091, 1367, 1368, 1366, 2606, 1367, + 1368, 3427, 106, 1387, 1388, 1389, 1390, 1391, 1392, 1394, + 1393, 1395, 1396, 1369, 2092, 43, 1160, 1369, 43, 103, + 107, 1369, 1159, 106, 2667, 2668, 105, 2561, 2560, 1369, + 104, 3431, 2426, 2137, 2557, 681, 2247, 1569, 2422, 1569, + 1366, 107, 1367, 1368, 3389, 1366, 1369, 1367, 1368, 105, + 2607, 2116, 1366, 3388, 1367, 1368, 2093, 2052, 1966, 1569, + 2609, 2607, 681, 2209, 2210, 2211, 2212, 2577, 681, 2095, + 3221, 2398, 2098, 2099, 2194, 2204, 933, 2205, 2206, 2207, + 2208, 2887, 2195, 2126, 2176, 1569, 2671, 1366, 2577, 1367, + 1368, 2398, 1536, 2215, 2216, 2217, 2218, 3581, 1569, 2649, + 2114, 3579, 1569, 2287, 1369, 2425, 2159, 2422, 2229, 2275, + 2139, 2857, 2198, 3455, 1569, 681, 1672, 1671, 1613, 1612, + 681, 2235, 3127, 2157, 681, 681, 2136, 1369, 2199, 3127, + 3453, 1569, 1369, 2182, 2181, 111, 2180, 1365, 2464, 2585, + 3129, 3534, 2197, 2196, 966, 3507, 967, 1385, 1366, 2734, + 1367, 1368, 1366, 2245, 1367, 1368, 1366, 2561, 1367, 1368, + 3127, 2286, 200, 2584, 1366, 2585, 1367, 1368, 2272, 200, + 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1394, 1393, 1395, + 1396, 1366, 2230, 1367, 1368, 3178, 3088, 112, 2029, 3642, + 2226, 2219, 2221, 2222, 2922, 200, 200, 2244, 111, 200, + 110, 200, 2248, 3024, 1365, 2830, 2256, 200, 2280, 105, + 2183, 2283, 1569, 2284, 2422, 2477, 3147, 200, 2585, 2230, + 1022, 2300, 2278, 2453, 200, 2452, 2279, 2286, 2282, 2947, + 2269, 2152, 1573, 1023, 2301, 1369, 3179, 3180, 3181, 1366, + 2117, 1367, 1368, 1710, 1966, 1912, 1896, 1832, 2304, 1600, + 1385, 1005, 2305, 2306, 200, 125, 1004, 97, 3609, 3549, + 3420, 1576, 1366, 681, 1367, 1368, 1369, 1366, 1569, 1367, + 1368, 2172, 2468, 1386, 1387, 1388, 1389, 1390, 1391, 1392, + 1394, 1393, 1395, 1396, 2311, 2021, 2010, 2011, 2012, 2013, + 2023, 2014, 2015, 2016, 2028, 2024, 2017, 2018, 2025, 2026, + 2027, 2019, 2020, 2022, 1386, 1387, 1388, 1389, 1390, 1391, + 1392, 1394, 1393, 1395, 1396, 3386, 3307, 3194, 2641, 3450, + 1569, 3191, 2382, 2383, 3172, 3051, 1369, 2385, 2415, 1412, + 3050, 2094, 2420, 97, 1369, 2423, 2386, 2424, 1674, 2228, + 2419, 1369, 2431, 2992, 1582, 2949, 2433, 2434, 2435, 1097, + 2418, 2372, 2945, 2408, 1385, 2410, 2441, 2442, 2443, 2444, + 2445, 2446, 2447, 2448, 2449, 2450, 2378, 2675, 1369, 2416, + 1366, 2225, 1367, 1368, 2220, 1934, 2214, 1386, 1387, 1388, + 1389, 1390, 1391, 1392, 1394, 1393, 1395, 1396, 2213, 1799, + 2409, 1705, 2457, 2458, 2459, 2460, 2461, 1701, 2463, 1668, + 126, 1366, 2465, 1367, 1368, 2996, 2470, 2471, 3661, 2472, + 1581, 2388, 2475, 3421, 2476, 3139, 3140, 2243, 2479, 3491, + 2131, 3659, 2483, 3635, 3515, 3098, 2488, 2489, 2490, 2491, + 2396, 2093, 1745, 3441, 3142, 2941, 2940, 1892, 2640, 2502, + 2414, 2505, 2506, 2939, 1935, 2857, 2654, 1369, 3182, 2508, + 2510, 2407, 3436, 1569, 2373, 1369, 2513, 2514, 2515, 2516, + 2517, 1366, 2135, 1367, 1368, 1741, 3145, 2524, 2525, 1366, 2526, 1367, 1368, 2529, 2531, 2138, 1366, 2533, 1367, 1368, - 200, 3091, 1569, 2092, 3120, 1369, 3274, 2545, 200, 3056, - 1569, 1385, 3119, 1963, 1381, 2428, 1382, 1369, 681, 3285, - 3287, 1369, 1366, 3123, 1367, 1368, 2844, 1831, 909, 681, - 1383, 1397, 1398, 1380, 1386, 1387, 1388, 1389, 1390, 1391, - 1392, 1394, 1393, 1395, 1396, 2918, 1369, 2624, 1385, 2544, - 2645, 1369, 1366, 200, 1367, 1368, 1061, 937, 200, 3392, - 1366, 1060, 1367, 1368, 3017, 938, 3039, 1569, 1989, 2640, - 2462, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1394, 1393, - 1395, 1396, 1990, 2728, 103, 1332, 3672, 2681, 134, 2532, - 1569, 1961, 1369, 2546, 43, 104, 691, 2547, 3125, 2549, - 2581, 2562, 3196, 2599, 105, 3147, 2601, 1369, 2937, 1366, - 2376, 1367, 1368, 1369, 2154, 2155, 3587, 1366, 3491, 1367, - 1368, 2590, 2593, 2594, 2595, 2591, 681, 2592, 2596, 2365, - 2530, 1569, 200, 2558, 3415, 2509, 1569, 2600, 1369, 200, - 1366, 2571, 1367, 1368, 2917, 2598, 1543, 1369, 2140, 2364, - 2534, 1369, 1366, 681, 1367, 1368, 1366, 2666, 1367, 1368, - 681, 1537, 2627, 2629, 945, 946, 2833, 3105, 1369, 681, - 2363, 2559, 2554, 2362, 2832, 1369, 3098, 2574, 2604, 2361, - 2360, 1366, 2620, 1367, 1368, 1412, 1366, 1369, 1367, 1368, - 2359, 2492, 1569, 1369, 2349, 2402, 2690, 3094, 200, 200, - 200, 200, 200, 2348, 2347, 2608, 2346, 943, 2235, 2611, - 949, 949, 2643, 1369, 103, 2621, 2345, 2646, 2647, 2618, - 1369, 105, 2484, 1569, 2344, 104, 2336, 1366, 2335, 1367, - 1368, 3066, 2632, 2577, 2334, 3062, 2333, 2332, 2331, 2330, - 110, 3462, 1366, 1369, 1367, 1368, 3461, 3443, 1366, 2642, - 1367, 1368, 3048, 1369, 3293, 200, 200, 2688, 3291, 3047, - 3290, 112, 3283, 3192, 2650, 3124, 2655, 2656, 2657, 1369, - 2651, 3044, 111, 1366, 110, 1367, 1368, 1369, 2636, 2687, - 3122, 200, 1366, 1693, 1367, 1368, 1366, 1369, 1367, 1368, - 2950, 2270, 1688, 3282, 944, 111, 112, 2528, 3113, 3264, - 2676, 2677, 681, 1366, 2527, 1367, 1368, 111, 1369, 2557, - 1366, 2686, 1367, 1368, 3662, 3661, 3661, 2763, 2764, 2765, - 2766, 2767, 1366, 2775, 1367, 1368, 2454, 2523, 1366, 2129, - 1367, 1368, 1594, 1586, 116, 117, 2772, 2522, 3662, 3480, - 3158, 2711, 935, 125, 2738, 3, 99, 2712, 1366, 681, - 1367, 1368, 1, 2521, 2714, 1366, 1909, 1367, 1368, 10, - 1110, 2520, 2753, 2716, 1907, 1908, 1843, 9, 8, 1335, - 2717, 2519, 1334, 2755, 3162, 2720, 2768, 3597, 1366, 638, - 1367, 1368, 2118, 2737, 1541, 3635, 3593, 681, 1366, 112, - 1367, 1368, 2518, 3594, 2736, 681, 2726, 1785, 1775, 2727, - 111, 3224, 110, 2053, 1366, 1369, 1367, 1368, 3416, 2953, - 1369, 105, 1366, 2276, 1367, 1368, 3190, 2233, 1013, 159, - 2192, 2193, 1366, 2756, 1367, 1368, 681, 3561, 2754, 2809, - 120, 970, 2785, 2814, 2787, 119, 1016, 2811, 1129, 2271, - 200, 3214, 2625, 1366, 681, 1367, 1368, 2201, 1619, 1617, - 2798, 2799, 2800, 2801, 1618, 1616, 1621, 1620, 681, 1567, - 1563, 3025, 1412, 2866, 2455, 681, 681, 1412, 200, 200, - 200, 200, 200, 3067, 1564, 2777, 2082, 1900, 2082, 677, - 200, 2884, 2783, 2854, 2597, 671, 200, 197, 200, 2507, - 2172, 200, 200, 200, 2501, 1608, 2814, 1587, 3080, 1669, - 1670, 1566, 2869, 1565, 1055, 628, 2926, 2863, 2886, 2810, - 2813, 2812, 2309, 634, 2837, 924, 1417, 1891, 2172, 2172, - 2172, 2172, 2172, 2831, 2838, 2793, 2794, 2795, 2796, 2797, - 2612, 964, 956, 2130, 2860, 2548, 2825, 200, 2172, 2860, - 1366, 2172, 1367, 1368, 963, 1366, 3393, 1367, 1368, 2865, - 681, 2836, 3117, 1412, 2839, 2843, 2845, 2564, 681, 2851, - 2852, 2848, 2973, 200, 2841, 3473, 3284, 2829, 3546, 1567, - 1563, 2622, 2888, 925, 1583, 2889, 3087, 200, 2871, 2872, - 2870, 2874, 926, 2873, 1564, 2427, 2882, 1978, 1407, 2826, - 2827, 2828, 2169, 106, 3259, 1927, 1842, 2890, 700, 699, - 1369, 697, 200, 107, 1369, 200, 2550, 2868, 2896, 1560, - 1561, 1566, 2578, 1565, 3019, 1372, 2930, 2931, 847, 2538, - 2929, 2927, 2928, 1595, 2589, 2952, 2587, 1369, 2586, 2374, - 2177, 3141, 3137, 2981, 3036, 3037, 3038, 3589, 3040, 3042, - 2171, 2167, 2556, 798, 797, 709, 1369, 701, 693, 2235, - 796, 2980, 3049, 2972, 2951, 795, 3155, 3053, 3054, 3055, - 3057, 3058, 3059, 3060, 2987, 2979, 3061, 3573, 3063, 3064, - 3065, 2900, 2696, 3069, 3070, 3071, 3072, 3073, 3074, 3075, - 3076, 3077, 3078, 2993, 2500, 681, 2698, 2623, 2499, 2989, - 3012, 3085, 1349, 1559, 3089, 3013, 3090, 3092, 687, 3095, - 3097, 984, 3099, 3100, 3101, 3102, 3021, 3022, 3015, 3016, - 3108, 2498, 3027, 3028, 200, 3029, 2901, 3020, 3031, 3497, - 3033, 3030, 3035, 3004, 3005, 1369, 3007, 3082, 3009, 3010, - 2497, 2401, 3045, 1558, 3086, 1366, 2008, 1367, 1368, 1366, - 2903, 1367, 1368, 2009, 3504, 3130, 3131, 2961, 3208, 3135, - 2942, 2672, 2263, 72, 1369, 47, 3468, 3534, 2898, 794, - 791, 3261, 1366, 3262, 1367, 1368, 3263, 2805, 2806, 3517, - 200, 3518, 790, 1369, 3519, 2914, 2915, 1369, 2036, 1345, - 1342, 1366, 2899, 1367, 1368, 3610, 1369, 1902, 98, 1370, - 1369, 38, 37, 36, 35, 3111, 34, 28, 3109, 200, - 3106, 3107, 27, 26, 25, 3121, 24, 3114, 21, 2496, - 20, 31, 23, 22, 19, 2905, 1369, 18, 1425, 200, - 2172, 3126, 200, 200, 200, 2964, 3630, 3671, 3136, 1369, - 128, 3146, 681, 681, 3143, 1369, 3197, 3198, 2495, 56, - 53, 51, 1369, 136, 3148, 135, 1369, 3150, 3151, 54, - 50, 2981, 1100, 3156, 3149, 3212, 3157, 2494, 1369, 48, - 1366, 2493, 1367, 1368, 33, 1369, 32, 3218, 3219, 2980, - 2487, 1369, 17, 16, 2486, 15, 3173, 14, 3175, 681, - 681, 681, 681, 13, 2913, 1369, 3167, 3168, 12, 1366, - 1369, 1367, 1368, 11, 7, 6, 2916, 41, 1369, 40, - 2485, 30, 39, 3231, 29, 4, 3235, 2659, 1366, 2265, - 1367, 1368, 1366, 2482, 1367, 1368, 0, 0, 0, 2481, - 0, 1366, 0, 1367, 1368, 1366, 2480, 1367, 1368, 0, - 2478, 0, 0, 3246, 0, 0, 3220, 0, 0, 3201, - 0, 0, 2474, 3205, 3206, 3207, 0, 0, 3250, 2473, - 0, 1366, 3240, 1367, 1368, 2469, 0, 0, 0, 0, - 3258, 0, 0, 0, 1366, 0, 1367, 1368, 3265, 2467, - 1366, 0, 1367, 1368, 2432, 0, 0, 1366, 0, 1367, - 1368, 1366, 2421, 1367, 1368, 3236, 0, 0, 0, 0, - 0, 200, 0, 1366, 0, 1367, 1368, 0, 0, 0, - 1366, 0, 1367, 1368, 0, 0, 1366, 0, 1367, 1368, - 1412, 0, 3257, 3279, 3248, 681, 0, 681, 2902, 0, - 1366, 0, 1367, 1368, 0, 1366, 0, 1367, 1368, 0, - 0, 1963, 0, 1366, 0, 1367, 1368, 0, 0, 0, - 0, 1585, 0, 0, 1544, 0, 0, 0, 858, 0, - 0, 89, 0, 0, 0, 3302, 2863, 0, 3280, 0, - 2863, 3304, 0, 3289, 43, 0, 3288, 3298, 3296, 0, - 3300, 0, 0, 0, 0, 0, 0, 681, 0, 0, - 1675, 3394, 2860, 0, 0, 0, 0, 0, 0, 3407, - 200, 0, 0, 681, 0, 3312, 0, 0, 3414, 0, - 0, 0, 0, 0, 615, 0, 681, 3309, 3310, 1961, - 0, 3308, 0, 0, 0, 0, 0, 0, 3424, 3425, - 0, 3427, 0, 3428, 3429, 3390, 912, 3398, 3432, 3433, - 3434, 3406, 3436, 3439, 3389, 0, 922, 3391, 89, 0, - 1963, 3411, 0, 3410, 3418, 0, 0, 0, 3448, 3450, - 3451, 3453, 3455, 3456, 3458, 0, 681, 922, 0, 0, - 681, 681, 0, 0, 0, 0, 0, 3437, 3438, 978, - 0, 0, 0, 0, 0, 983, 0, 0, 3401, 3402, - 3403, 0, 0, 0, 3442, 0, 0, 0, 0, 681, - 3444, 0, 3488, 3484, 3447, 0, 0, 0, 0, 0, - 0, 2906, 0, 0, 0, 2910, 3466, 3463, 3464, 0, - 0, 3483, 2909, 1853, 3465, 0, 0, 0, 1961, 0, - 3441, 3481, 0, 0, 0, 0, 2863, 0, 0, 0, - 0, 0, 0, 0, 3487, 3472, 0, 2590, 2593, 2594, - 2595, 2591, 0, 2592, 2596, 0, 2911, 3139, 3140, 0, - 0, 2907, 0, 0, 0, 0, 2908, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 681, 0, - 0, 0, 3489, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 681, 200, 0, 0, 3508, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3513, 0, - 0, 0, 0, 0, 3496, 3500, 0, 0, 3503, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3529, 0, - 0, 0, 0, 0, 3530, 3531, 0, 0, 43, 0, - 0, 0, 0, 681, 3505, 0, 0, 0, 0, 0, - 0, 0, 0, 1412, 0, 681, 3542, 3523, 0, 0, - 3524, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3532, 0, 3512, 0, 681, - 681, 0, 3567, 3568, 3544, 3522, 0, 0, 3539, 0, - 3549, 0, 0, 0, 3574, 0, 3577, 3579, 3581, 3575, - 3560, 681, 3552, 3557, 0, 3554, 3553, 3551, 3556, 3555, - 0, 0, 0, 0, 43, 200, 681, 3418, 3562, 0, - 3547, 3609, 0, 0, 0, 2860, 3585, 0, 0, 0, - 0, 0, 0, 0, 3606, 3596, 3601, 3588, 0, 0, - 0, 0, 0, 0, 0, 3574, 0, 0, 3615, 0, - 3575, 3613, 1922, 1923, 1924, 1925, 0, 0, 0, 681, - 3626, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3624, 0, 0, 0, 3629, 0, 0, 0, 0, - 0, 681, 0, 0, 0, 3642, 0, 0, 0, 0, - 0, 0, 3647, 3649, 3651, 0, 3644, 1420, 681, 0, - 681, 1969, 1970, 0, 1963, 0, 1972, 0, 949, 949, - 1977, 3655, 3659, 3657, 1982, 3653, 3652, 0, 0, 0, - 0, 3574, 0, 3670, 3667, 0, 3575, 1995, 1996, 1997, - 1998, 1999, 2000, 2001, 2002, 2003, 2004, 3681, 3679, 3682, - 3683, 2030, 2031, 2032, 2033, 2034, 2035, 2037, 3673, 2042, - 0, 2044, 2045, 2046, 0, 2048, 2049, 2050, 1963, 2056, - 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, - 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, - 2077, 2078, 1961, 2080, 3656, 2087, 2088, 949, 3689, 949, - 949, 949, 949, 949, 3690, 3691, 3438, 0, 0, 2100, - 2101, 2102, 2103, 2104, 2105, 2106, 2107, 0, 2109, 2110, - 2111, 2112, 2113, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1961, 0, 3688, 0, - 0, 0, 0, 0, 0, 0, 949, 1101, 0, 1107, - 0, 0, 1109, 1111, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2150, 2151, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2189, 0, 0, 0, 0, 1169, - 0, 1169, 1169, 0, 3628, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1636, 0, 0, 0, 1341, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 922, - 1409, 1414, 1415, 0, 1418, 2231, 1419, 1421, 1422, 1423, - 0, 1426, 1427, 1429, 1429, 0, 1429, 1433, 1433, 1435, - 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, - 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, - 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, - 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, - 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, - 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, - 1496, 1497, 1498, 1499, 0, 0, 0, 0, 1500, 0, - 1502, 1503, 1504, 1505, 1506, 0, 0, 0, 0, 0, - 0, 0, 0, 1433, 1433, 1433, 1433, 1433, 1624, 0, - 0, 0, 0, 0, 0, 0, 0, 1512, 1513, 1514, - 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, - 1525, 3330, 3332, 3331, 3349, 3350, 3351, 3352, 3353, 3354, - 3355, 748, 0, 0, 0, 0, 0, 0, 1539, 0, + 200, 2092, 3144, 1746, 1747, 1748, 2641, 2545, 200, 2428, + 1369, 3277, 2876, 3276, 1963, 3183, 3184, 3185, 681, 1893, + 2436, 1369, 2879, 1366, 2875, 1367, 1368, 2880, 3511, 681, + 3422, 2877, 1742, 1743, 1744, 2143, 2878, 2451, 1577, 1369, + 2881, 3133, 2594, 2595, 1385, 2544, 1369, 1381, 2835, 1382, + 2834, 3103, 1569, 200, 3475, 1385, 3286, 2411, 200, 3096, + 1569, 3275, 2462, 1383, 1397, 1398, 1380, 1386, 1387, 1388, + 1389, 1390, 1391, 1392, 1394, 1393, 1395, 1396, 1386, 1387, + 1388, 1389, 1390, 1391, 1392, 1394, 1393, 1395, 1396, 3120, + 3288, 2547, 2581, 2549, 3093, 1569, 3123, 3119, 691, 937, + 2844, 2562, 1366, 1369, 1367, 1368, 3393, 938, 1961, 1831, + 1366, 909, 1367, 1368, 2918, 2624, 2645, 2546, 1061, 1060, + 1989, 2681, 3017, 3091, 1569, 2640, 681, 1369, 2558, 2600, + 3056, 1569, 200, 1369, 1990, 2847, 2849, 1369, 2728, 200, + 1543, 103, 1332, 2571, 2850, 1366, 2534, 1367, 1368, 1369, + 105, 134, 104, 681, 1369, 3125, 1366, 103, 1367, 1368, + 681, 2554, 2627, 2629, 105, 2154, 2155, 2559, 104, 681, + 3673, 2666, 2574, 1369, 1366, 2620, 1367, 1368, 2937, 1537, + 2604, 1366, 2376, 1367, 1368, 1412, 3588, 3039, 1569, 3492, + 3416, 2690, 1369, 2917, 2608, 3105, 1369, 2598, 200, 200, + 200, 200, 200, 2235, 2611, 1369, 2140, 945, 946, 943, + 2618, 3094, 949, 949, 2621, 1369, 2402, 2532, 1569, 2833, + 2643, 2530, 1569, 2365, 2364, 2646, 2647, 2832, 3463, 2363, + 2632, 2362, 112, 2509, 1569, 110, 2361, 2360, 1366, 3196, + 1367, 1368, 2359, 111, 1369, 110, 2642, 2650, 3283, 2349, + 2348, 1369, 2347, 2346, 105, 200, 200, 2492, 1569, 2655, + 2656, 2657, 1366, 2651, 1367, 1368, 1369, 2345, 1366, 2687, + 1367, 1368, 1366, 1369, 1367, 1368, 2484, 1569, 1369, 2344, + 3066, 200, 2336, 1693, 1366, 1369, 1367, 1368, 2456, 1366, + 2636, 1367, 1368, 2577, 2335, 2334, 2688, 2333, 3462, 3062, + 2332, 2686, 681, 2676, 2677, 3444, 2331, 2330, 1366, 3294, + 1367, 1368, 112, 1369, 3292, 3291, 3284, 2763, 2764, 2765, + 2766, 2767, 1369, 111, 111, 110, 3192, 1366, 3048, 1367, + 1368, 1366, 3124, 1367, 1368, 3047, 2772, 3122, 2711, 2950, + 1366, 1369, 1367, 1368, 2712, 2270, 1688, 1369, 2738, 681, + 1366, 2714, 1367, 1368, 43, 944, 3113, 3044, 3662, 112, + 2716, 3265, 2528, 2599, 2753, 2557, 2601, 2717, 2775, 2527, + 111, 3663, 3662, 2768, 2454, 2736, 2129, 2720, 1594, 1366, + 1586, 1367, 1368, 2737, 116, 117, 1366, 681, 1367, 1368, + 1369, 3663, 3481, 2726, 3158, 681, 2727, 2523, 935, 125, + 3, 1366, 99, 1367, 1368, 1369, 2522, 1, 1366, 1909, + 1367, 1368, 10, 1366, 1110, 1367, 1368, 1369, 1843, 1335, + 1366, 2756, 1367, 1368, 1907, 2521, 681, 9, 1334, 2809, + 2754, 2520, 1908, 2814, 3162, 8, 3598, 2811, 638, 2118, + 200, 1541, 3636, 3594, 681, 3595, 1785, 1775, 1366, 3224, + 1367, 1368, 2082, 2755, 2082, 2053, 3417, 1366, 681, 1367, + 1368, 2953, 1412, 2866, 2276, 681, 681, 1412, 200, 200, + 200, 200, 200, 3190, 2519, 2783, 1366, 2777, 1367, 1368, + 200, 2884, 1366, 2233, 1367, 1368, 200, 1013, 200, 2518, + 159, 200, 200, 200, 2192, 2193, 2814, 3562, 120, 970, + 2869, 2507, 119, 1016, 2810, 1369, 2812, 2837, 2886, 2854, + 1129, 2271, 2785, 2813, 2787, 3214, 2838, 2793, 2794, 2795, + 2796, 2797, 2625, 2201, 1619, 1366, 1617, 1367, 1368, 1618, + 2798, 2799, 2800, 2801, 2825, 1616, 1621, 200, 2863, 1620, + 1366, 3025, 1367, 1368, 2455, 3067, 2836, 1900, 677, 2839, + 681, 2597, 1366, 1412, 1367, 1368, 671, 197, 681, 1608, + 1587, 2851, 2852, 200, 2888, 3080, 2870, 2889, 1055, 2873, + 628, 2829, 926, 2860, 2926, 2309, 2973, 200, 2860, 2871, + 2872, 634, 2874, 2882, 1417, 106, 1891, 2890, 2831, 2501, + 2612, 925, 964, 1842, 956, 2826, 2827, 2828, 1369, 2130, + 2548, 2896, 200, 107, 963, 200, 3394, 2865, 3117, 2843, + 2845, 2868, 2927, 2929, 3019, 2928, 2564, 1369, 2848, 2841, + 2417, 3474, 3285, 3547, 2930, 2931, 2622, 2980, 1583, 2981, + 3087, 2427, 1978, 1407, 3036, 3037, 3038, 2169, 3040, 3042, + 1366, 3260, 1367, 1368, 2235, 1927, 700, 2972, 1369, 699, + 697, 2550, 3049, 2578, 2987, 1372, 2951, 3053, 3054, 3055, + 3057, 3058, 3059, 3060, 2952, 847, 3061, 2538, 3063, 3064, + 3065, 1595, 2589, 3069, 3070, 3071, 3072, 3073, 3074, 3075, + 3076, 3077, 3078, 3004, 3005, 681, 3007, 3012, 3009, 3010, + 3013, 3085, 1369, 2587, 3089, 2586, 3090, 3092, 3020, 3095, + 3097, 2500, 3099, 3100, 3101, 3102, 3021, 3030, 2374, 2177, + 3108, 3015, 3016, 3141, 200, 3027, 3028, 3137, 3029, 3590, + 2171, 3031, 1369, 3033, 2167, 3035, 2556, 3082, 798, 797, + 709, 1369, 2499, 1366, 3086, 1367, 1368, 2590, 2593, 2594, + 2595, 2591, 701, 2592, 2596, 3130, 3131, 3139, 3140, 3135, + 2172, 1369, 1366, 693, 1367, 1368, 2590, 2593, 2594, 2595, + 2591, 796, 2592, 2596, 1369, 795, 3155, 2979, 3574, 2696, + 200, 2993, 2698, 2623, 1369, 924, 2498, 2989, 2172, 2172, + 2172, 2172, 2172, 1366, 1349, 1367, 1368, 1369, 3111, 1559, + 687, 1370, 3109, 3106, 3107, 984, 3022, 3498, 2172, 200, + 1369, 2172, 3114, 2401, 3045, 3121, 2497, 1369, 1558, 3126, + 2008, 2009, 3505, 3146, 2961, 2496, 3208, 2942, 2672, 200, + 1425, 3136, 200, 200, 200, 2263, 1369, 1366, 3143, 1367, + 1368, 72, 681, 681, 47, 2495, 3148, 1369, 3469, 3535, + 3150, 3151, 1369, 794, 791, 2980, 3149, 2981, 2494, 3262, + 3197, 3198, 1369, 3156, 3263, 3212, 3157, 1366, 2493, 1367, + 1368, 3264, 1369, 2805, 3218, 3219, 1366, 2806, 1367, 1368, + 1369, 2487, 3518, 3519, 1369, 790, 3173, 3520, 3175, 681, + 681, 681, 681, 1369, 2486, 2036, 1366, 1369, 1367, 1368, + 1345, 2485, 1369, 1342, 3167, 3168, 3611, 1902, 98, 1366, + 38, 1367, 1368, 3232, 37, 36, 3236, 35, 34, 1366, + 2482, 1367, 1368, 28, 27, 1567, 1563, 26, 3220, 25, + 24, 2481, 1366, 21, 1367, 1368, 2480, 20, 31, 23, + 1564, 22, 19, 3247, 18, 1366, 2478, 1367, 1368, 2964, + 3631, 3672, 1366, 128, 1367, 1368, 2474, 3201, 3251, 56, + 53, 3205, 3206, 3207, 2473, 1669, 1670, 1566, 2469, 1565, + 3259, 1366, 51, 1367, 1368, 136, 135, 2467, 3266, 54, + 50, 2432, 1366, 1100, 1367, 1368, 2421, 1366, 3241, 1367, + 1368, 48, 33, 32, 17, 3237, 16, 1366, 15, 1367, + 1368, 200, 14, 13, 12, 11, 7, 1366, 6, 1367, + 1368, 41, 40, 30, 39, 1366, 29, 1367, 1368, 1366, + 1412, 1367, 1368, 3280, 3258, 681, 4, 681, 1366, 2659, + 1367, 1368, 1366, 2265, 1367, 1368, 0, 1366, 0, 1367, + 1368, 0, 1963, 0, 1567, 1563, 0, 0, 0, 0, + 0, 0, 0, 1585, 0, 0, 0, 0, 0, 1564, + 858, 0, 0, 89, 0, 0, 3290, 3303, 3305, 3281, + 3289, 0, 3301, 0, 0, 0, 3299, 0, 0, 3297, + 0, 0, 0, 0, 1560, 1561, 1566, 681, 1565, 0, + 2172, 0, 1675, 0, 0, 0, 0, 2863, 0, 3408, + 200, 2863, 0, 681, 3249, 3395, 3313, 0, 3415, 0, + 3310, 3311, 0, 0, 0, 0, 681, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3390, 0, 0, 3425, + 3426, 2860, 3428, 0, 3429, 3430, 1961, 3407, 3392, 3433, + 3434, 3435, 3391, 3437, 3440, 3309, 0, 0, 922, 0, + 89, 3412, 1963, 3411, 3419, 0, 0, 0, 0, 3449, + 3451, 3452, 3454, 3456, 3457, 3459, 3439, 681, 3399, 922, + 0, 681, 681, 0, 0, 0, 0, 0, 0, 3438, + 0, 0, 0, 0, 0, 0, 0, 983, 0, 0, + 0, 0, 3443, 0, 0, 0, 3402, 3403, 3404, 0, + 681, 3445, 0, 3489, 0, 3448, 0, 0, 0, 0, + 0, 0, 0, 0, 3464, 3465, 3467, 3466, 3485, 0, + 0, 0, 0, 0, 0, 1853, 0, 0, 0, 0, + 0, 0, 0, 0, 3482, 0, 0, 0, 0, 0, + 0, 0, 3488, 0, 0, 0, 1961, 0, 3484, 0, + 0, 0, 0, 0, 0, 3442, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2863, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 681, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 200, 0, 3490, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 681, 200, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3473, 0, 842, 3514, + 0, 3509, 3501, 0, 43, 0, 0, 0, 3504, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3530, + 0, 0, 0, 0, 0, 3531, 3532, 3506, 0, 0, + 0, 0, 0, 0, 681, 0, 3497, 0, 0, 0, + 0, 0, 0, 0, 1412, 0, 681, 3543, 3524, 0, + 0, 3525, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 660, 0, 3533, 0, 0, 0, 680, + 681, 681, 0, 3568, 3569, 0, 0, 3540, 0, 0, + 0, 0, 3575, 3550, 3576, 0, 0, 3578, 3580, 3582, + 0, 0, 681, 3561, 3553, 3558, 3555, 3554, 3552, 3557, + 3556, 3545, 0, 3548, 0, 0, 200, 681, 3419, 3563, + 0, 0, 3610, 0, 0, 0, 0, 3586, 0, 0, + 0, 0, 680, 0, 0, 680, 3607, 3597, 3589, 3602, + 0, 0, 0, 3575, 0, 3576, 0, 0, 0, 3616, + 0, 3614, 0, 0, 1922, 1923, 1924, 1925, 3513, 0, + 681, 3627, 0, 0, 0, 2860, 3523, 0, 0, 0, + 0, 0, 3630, 3625, 0, 0, 0, 0, 0, 0, + 0, 0, 681, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3648, 3650, 3652, 0, 0, 3645, 681, + 3643, 681, 1420, 1969, 1970, 0, 1963, 3656, 1972, 3653, + 949, 949, 1977, 3660, 3658, 0, 1982, 3654, 0, 3575, + 0, 3576, 0, 0, 3671, 3668, 0, 0, 0, 1995, + 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 3674, + 3683, 3684, 3682, 2030, 2031, 2032, 2033, 2034, 2035, 2037, + 3680, 2042, 0, 2044, 2045, 2046, 0, 2048, 2049, 2050, + 1963, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, + 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, + 2075, 2076, 2077, 2078, 3439, 2080, 3690, 2087, 2088, 949, + 0, 949, 949, 949, 949, 949, 3691, 3692, 0, 43, + 1961, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 3657, + 2109, 2110, 2111, 2112, 2113, 0, 0, 860, 0, 2086, + 0, 0, 861, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1962, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 949, 0, + 0, 0, 0, 0, 1961, 0, 0, 0, 0, 0, + 0, 0, 0, 3689, 0, 0, 0, 0, 0, 0, + 2150, 2151, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2189, 0, 0, 0, + 0, 1169, 0, 1169, 1169, 867, 868, 869, 870, 871, + 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, + 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, + 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, + 902, 903, 904, 905, 906, 907, 908, 0, 0, 0, + 0, 922, 1409, 1414, 1415, 0, 1418, 2231, 1419, 1421, + 1422, 1423, 0, 1426, 1427, 1429, 1429, 0, 1429, 1433, + 1433, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, + 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, + 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, + 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, + 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, + 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, + 1494, 1495, 1496, 1497, 1498, 1499, 0, 0, 2900, 0, + 1500, 0, 1502, 1503, 1504, 1505, 1506, 0, 0, 0, + 0, 0, 0, 0, 0, 1433, 1433, 1433, 1433, 1433, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1512, + 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, + 1523, 1524, 1525, 2901, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1539, 0, 0, 0, 0, 0, 0, 2903, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2898, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2914, 2915, 0, 0, 0, 0, 0, 2899, + 0, 0, 0, 1545, 0, 0, 0, 0, 0, 922, + 0, 0, 0, 922, 0, 0, 0, 0, 922, 680, + 1328, 680, 680, 0, 0, 0, 0, 0, 0, 0, + 0, 195, 2905, 0, 0, 0, 0, 0, 0, 0, + 0, 680, 2665, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 134, 0, 156, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 177, 0, + 1411, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, + 0, 2913, 0, 0, 0, 155, 0, 0, 0, 0, + 0, 0, 0, 2916, 0, 0, 0, 0, 0, 2430, + 0, 0, 0, 0, 174, 0, 0, 175, 0, 0, + 2437, 2438, 2439, 2440, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1696, 1697, 166, 165, + 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1425, 0, 0, 0, 0, + 0, 0, 0, 0, 195, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, + 0, 0, 1411, 0, 0, 0, 0, 0, 0, 0, + 0, 177, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2902, 0, 0, 0, 0, + 0, 0, 0, 0, 1169, 0, 0, 0, 0, 160, + 1698, 163, 0, 1695, 0, 161, 162, 0, 0, 0, + 0, 0, 0, 178, 0, 0, 0, 0, 0, 0, + 0, 0, 184, 680, 680, 0, 0, 174, 0, 0, + 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1585, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 194, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1667, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, + 1704, 0, 0, 0, 0, 0, 0, 0, 1713, 0, + 0, 1411, 1715, 0, 0, 1718, 1719, 680, 680, 0, + 680, 0, 680, 680, 0, 680, 680, 680, 680, 680, + 680, 0, 169, 0, 0, 0, 0, 0, 1411, 1750, + 1751, 1411, 680, 1411, 0, 1756, 178, 0, 2906, 1169, + 1169, 0, 2910, 0, 0, 184, 799, 0, 0, 2909, + 0, 0, 0, 89, 0, 0, 89, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1637, 0, 0, 0, 0, 0, 0, - 0, 1545, 0, 0, 0, 0, 0, 922, 0, 0, - 0, 922, 0, 0, 0, 0, 922, 0, 0, 0, + 0, 0, 1835, 2911, 0, 680, 0, 0, 2907, 0, + 0, 0, 0, 2908, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 195, 0, 0, 0, 0, 164, 0, + 0, 0, 0, 0, 1692, 0, 0, 679, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 134, 0, 156, + 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, + 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2733, 0, 0, 0, 0, 0, 0, 157, + 974, 167, 158, 982, 0, 169, 0, 155, 0, 0, + 0, 949, 0, 0, 2757, 2758, 0, 0, 2760, 0, + 0, 2762, 0, 0, 0, 0, 174, 0, 0, 175, + 0, 0, 170, 0, 0, 0, 0, 0, 0, 182, + 0, 2769, 2770, 2771, 0, 0, 0, 0, 1696, 1697, + 166, 165, 194, 2776, 0, 0, 2778, 2779, 2780, 0, + 0, 0, 2781, 2782, 0, 0, 2056, 2784, 0, 0, + 2786, 0, 0, 2788, 2789, 2790, 2791, 0, 0, 0, + 190, 2792, 2056, 2056, 2056, 2056, 2056, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 949, 0, 0, 0, 0, 0, 0, 2815, 2816, 2817, + 2818, 2819, 2820, 0, 0, 0, 2821, 2822, 0, 2823, + 0, 2824, 0, 0, 0, 171, 176, 173, 179, 180, + 181, 183, 185, 186, 187, 188, 0, 680, 680, 2170, + 0, 189, 191, 192, 193, 0, 0, 0, 0, 0, + 680, 160, 1698, 163, 0, 1695, 0, 161, 162, 0, + 0, 0, 0, 0, 0, 178, 2855, 0, 0, 0, + 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, + 0, 2885, 182, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, + 0, 0, 0, 983, 0, 0, 0, 0, 1411, 0, + 0, 0, 0, 0, 0, 0, 0, 1971, 0, 680, + 0, 0, 0, 190, 0, 1411, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 983, 0, 0, 0, + 0, 0, 2948, 0, 0, 0, 0, 0, 0, 0, + 680, 680, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 171, 176, + 173, 179, 180, 181, 183, 185, 186, 187, 188, 0, + 0, 0, 0, 0, 189, 191, 192, 193, 0, 0, + 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, + 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1614, 0, 0, 0, - 0, 1650, 1653, 1654, 1655, 1656, 1657, 1658, 842, 1659, - 1660, 1662, 1663, 1661, 1664, 1665, 1638, 1639, 1640, 1641, - 1622, 1623, 1651, 0, 1625, 0, 1626, 1627, 1628, 1629, - 1630, 1631, 1632, 1633, 1634, 0, 0, 1635, 1642, 1643, - 1644, 1645, 0, 1646, 1647, 1648, 1649, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2430, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2437, 2438, - 2439, 2440, 0, 660, 0, 0, 0, 0, 0, 680, - 1755, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3336, 1425, 0, 1800, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3344, 3345, 0, - 0, 0, 680, 0, 0, 680, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1860, 0, 0, 0, 0, 0, 0, - 1864, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 0, 0, - 0, 0, 1169, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1652, 0, 814, 0, 727, - 818, 729, 815, 816, 0, 725, 728, 817, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1585, - 0, 0, 0, 746, 747, 3329, 3333, 3334, 3335, 3346, - 3347, 3348, 3356, 3358, 779, 3357, 3359, 3360, 3361, 3364, - 3365, 3366, 3367, 3362, 3363, 3368, 3313, 3317, 3314, 3315, - 3316, 3328, 3318, 3319, 3320, 3321, 3322, 3323, 3324, 3325, - 3326, 3327, 3369, 3370, 3371, 3372, 3373, 3374, 3339, 3343, - 3342, 3340, 3341, 3337, 3338, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 819, 0, 820, - 0, 0, 824, 0, 0, 0, 826, 825, 0, 827, - 793, 792, 0, 0, 821, 822, 0, 823, 97, 0, - 0, 860, 0, 0, 0, 848, 861, 862, 863, 864, - 849, 0, 0, 850, 851, 0, 852, 0, 0, 0, + 0, 0, 0, 0, 0, 1544, 0, 0, 0, 0, + 3043, 0, 0, 0, 0, 0, 0, 0, 0, 680, + 0, 0, 0, 0, 3052, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 857, 865, 866, 0, 0, 0, 0, 1169, 1169, 0, + 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, + 164, 0, 0, 0, 0, 0, 0, 0, 0, 680, + 0, 0, 680, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 89, 0, 0, 89, 1915, 0, 0, 0, 0, - 0, 0, 3375, 3376, 3377, 3378, 3379, 3380, 3381, 3382, - 0, 0, 0, 0, 0, 0, 0, 2982, 2983, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 867, - 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, - 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, - 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, - 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, - 908, 0, 0, 0, 0, 0, 0, 0, 88, 45, - 46, 90, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, - 2733, 0, 49, 79, 80, 0, 77, 81, 0, 0, - 0, 0, 0, 2984, 0, 78, 0, 0, 0, 949, - 0, 0, 2757, 2758, 0, 0, 2760, 0, 0, 2762, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 65, 0, 0, 0, 0, 2769, - 2770, 2771, 0, 0, 0, 0, 97, 0, 0, 0, - 0, 2776, 0, 0, 2778, 2779, 2780, 0, 0, 0, - 2781, 2782, 0, 0, 2056, 2784, 0, 0, 2786, 0, - 0, 2788, 2789, 2790, 2791, 0, 0, 0, 0, 2792, - 2056, 2056, 2056, 2056, 2056, 0, 2985, 2986, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 949, 0, - 0, 0, 0, 0, 0, 2815, 2816, 2817, 2818, 2819, - 2820, 0, 0, 0, 2821, 2822, 0, 2823, 0, 2824, - 0, 2156, 0, 0, 0, 0, 0, 0, 0, 2160, - 0, 2163, 0, 0, 1915, 0, 0, 2170, 0, 0, + 0, 0, 680, 0, 0, 0, 0, 912, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2855, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, - 1328, 680, 680, 0, 52, 55, 58, 57, 60, 2885, - 76, 0, 0, 85, 63, 82, 0, 0, 0, 0, - 0, 680, 0, 0, 0, 0, 0, 0, 0, 61, - 0, 983, 0, 0, 0, 0, 0, 0, 64, 93, - 92, 0, 0, 74, 75, 59, 0, 0, 0, 0, - 1411, 83, 84, 0, 195, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 983, 2665, 0, 0, 0, 0, - 2948, 0, 0, 0, 0, 0, 0, 0, 134, 0, - 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 177, 0, 0, 0, 0, 0, 0, 0, 66, - 67, 0, 68, 69, 70, 71, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 167, 0, 0, 0, 0, 0, 155, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 174, 0, 0, - 175, 0, 0, 0, 1915, 0, 0, 0, 0, 0, - 0, 2320, 0, 0, 0, 0, 0, 0, 3043, 1696, - 1697, 166, 165, 194, 0, 0, 0, 0, 0, 0, - 0, 0, 3052, 0, 0, 0, 0, 2370, 2371, 0, - 0, 2375, 1411, 0, 0, 0, 0, 0, 0, 2379, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2381, - 0, 0, 0, 0, 0, 0, 2384, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 91, 0, 0, 2387, 0, 0, 0, - 0, 0, 0, 680, 680, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 160, 1698, 163, 0, 1695, 0, 161, 162, - 0, 0, 0, 0, 0, 2403, 178, 0, 680, 0, - 0, 0, 0, 0, 0, 184, 0, 0, 0, 0, - 0, 0, 0, 680, 0, 96, 0, 0, 0, 0, - 0, 0, 0, 0, 1667, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2413, 1678, 0, 0, 0, 0, + 0, 157, 0, 0, 158, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2403, 0, 0, + 978, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 680, 0, 0, 170, 0, 0, 0, 2253, 2254, + 2255, 182, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2413, 0, 680, 0, + 0, 0, 0, 0, 680, 1713, 0, 0, 1713, 0, + 1713, 0, 0, 0, 0, 0, 2285, 0, 0, 0, + 0, 0, 190, 0, 3193, 0, 0, 1171, 0, 1171, + 1171, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1340, + 0, 680, 0, 0, 0, 0, 680, 3217, 0, 0, + 680, 680, 0, 0, 0, 0, 0, 171, 176, 173, + 179, 180, 181, 183, 185, 186, 187, 188, 0, 0, + 0, 0, 0, 189, 191, 192, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, - 1704, 0, 3193, 0, 0, 0, 0, 0, 1713, 0, - 0, 1411, 1715, 0, 0, 1718, 1719, 680, 680, 0, - 680, 0, 680, 680, 0, 680, 680, 680, 680, 680, - 680, 0, 0, 0, 0, 3217, 0, 0, 1411, 1750, - 1751, 1411, 680, 1411, 0, 1756, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 73, 0, 0, 0, 62, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 169, 0, 680, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1835, 0, 0, 680, 3237, 0, 3238, 0, - 2511, 3239, 0, 0, 3242, 3243, 0, 0, 0, 0, - 0, 0, 0, 3247, 0, 0, 0, 0, 0, 0, - 0, 0, 799, 3249, 0, 0, 0, 0, 0, 0, - 0, 0, 2543, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 680, 0, 0, 3266, 0, 0, 3267, 922, - 3268, 3269, 0, 3270, 0, 3271, 0, 0, 0, 0, - 3272, 164, 0, 0, 0, 195, 0, 0, 0, 0, - 2582, 2583, 0, 0, 0, 0, 1692, 0, 0, 2170, - 2603, 0, 922, 2602, 0, 3297, 0, 0, 0, 134, - 0, 156, 0, 679, 0, 0, 3305, 0, 0, 3307, - 0, 0, 177, 0, 0, 0, 0, 0, 0, 0, - 0, 3311, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 157, 0, 0, 158, 670, 0, 0, 3386, - 0, 0, 0, 167, 0, 0, 0, 0, 0, 155, - 0, 0, 0, 0, 0, 0, 974, 0, 0, 982, - 0, 0, 0, 0, 2652, 170, 0, 0, 174, 0, - 0, 175, 182, 0, 0, 0, 0, 0, 0, 0, - 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1696, 1697, 166, 165, 194, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2679, 0, 0, 0, - 0, 0, 0, 190, 0, 0, 0, 0, 0, 0, - 0, 0, 661, 0, 0, 0, 0, 680, 680, 0, - 2701, 2702, 2703, 2704, 2705, 0, 0, 0, 0, 0, - 680, 0, 0, 0, 0, 0, 0, 0, 0, 3471, - 0, 0, 0, 0, 0, 0, 0, 0, 171, 176, - 173, 179, 180, 181, 183, 185, 186, 187, 188, 0, - 642, 0, 0, 0, 189, 191, 192, 193, 0, 0, - 0, 0, 0, 0, 640, 0, 0, 1915, 2721, 0, - 0, 0, 0, 160, 1698, 163, 0, 1695, 680, 161, - 162, 0, 0, 0, 0, 0, 0, 178, 1411, 0, - 0, 0, 0, 2729, 0, 0, 184, 1971, 0, 680, - 0, 0, 0, 0, 637, 1411, 0, 0, 0, 0, - 0, 0, 0, 655, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 650, 0, - 680, 680, 0, 0, 0, 0, 0, 0, 0, 0, - 647, 653, 649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3238, 0, + 3239, 0, 2511, 3240, 0, 0, 3243, 3244, 0, 0, + 0, 0, 0, 0, 0, 3248, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3250, 0, 0, 0, 0, + 0, 0, 0, 0, 2543, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3267, 0, 0, + 3268, 922, 3269, 3270, 0, 3271, 0, 3272, 0, 0, + 0, 0, 3273, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2582, 2583, 0, 0, 0, 0, 0, 680, + 0, 2170, 0, 0, 922, 2602, 0, 3298, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3306, 0, + 0, 3308, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3511, 0, 0, 0, 665, 0, 0, - 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3525, 0, 0, 3526, - 0, 3527, 0, 2802, 0, 0, 0, 0, 0, 0, - 627, 0, 629, 643, 0, 667, 0, 666, 633, 0, - 631, 635, 644, 636, 0, 630, 169, 641, 0, 680, - 632, 645, 646, 652, 656, 657, 658, 654, 651, 659, - 625, 626, 648, 0, 639, 668, 0, 0, 1636, 0, - 0, 0, 0, 0, 0, 680, 2170, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, - 0, 0, 680, 0, 0, 0, 0, 0, 0, 2864, - 0, 89, 0, 0, 2170, 2170, 2170, 2170, 2170, 0, - 0, 0, 680, 0, 0, 3607, 0, 0, 0, 0, - 0, 0, 0, 0, 2170, 0, 0, 2170, 0, 0, - 0, 0, 164, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3621, 0, 3622, 0, 3623, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2938, - 0, 680, 0, 0, 0, 0, 0, 0, 2253, 2254, - 2255, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2970, 0, 157, 0, 2976, 158, 0, 680, 0, - 0, 2978, 0, 0, 680, 1713, 0, 0, 1713, 2988, - 1713, 0, 1624, 0, 0, 3668, 2285, 3669, 0, 0, - 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, - 0, 0, 0, 182, 3011, 0, 0, 3014, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 680, 0, 0, 0, 0, 680, 0, 0, 0, - 680, 680, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 190, 0, 0, 0, 0, 669, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1171, 0, 1171, 1171, 1637, 0, 0, - 0, 0, 662, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1340, 0, 663, 0, 171, - 176, 173, 179, 180, 181, 183, 185, 186, 187, 188, - 0, 0, 0, 0, 0, 189, 191, 192, 193, 0, - 0, 0, 0, 0, 0, 0, 3110, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 800, 1650, 1653, 1654, 1655, 1656, - 1657, 1658, 0, 1659, 1660, 1662, 1663, 1661, 1664, 1665, - 1638, 1639, 1640, 1641, 1622, 1623, 1651, 0, 1625, 0, - 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 680, - 0, 1635, 1642, 1643, 1644, 1645, 2170, 1646, 1647, 1648, - 1649, 860, 0, 2086, 0, 0, 861, 0, 0, 3154, - 0, 198, 0, 0, 616, 0, 1962, 0, 0, 0, - 0, 3171, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, - 0, 3186, 0, 0, 3187, 3188, 3189, 0, 0, 0, - 0, 931, 0, 0, 0, 1411, 0, 680, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 950, 950, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 867, - 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, - 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, - 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, - 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, - 908, 0, 0, 0, 0, 0, 0, 1548, 1549, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1652, + 0, 3387, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1411, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1548, 1549, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1591, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1609, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1591, 0, 2679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3273, 0, 3277, 3278, 0, 0, 0, - 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, - 0, 0, 974, 0, 0, 680, 0, 0, 2864, 0, - 89, 0, 2864, 0, 0, 0, 0, 0, 0, 0, - 0, 1721, 1721, 0, 1721, 0, 1721, 1721, 0, 1730, - 1721, 1721, 1721, 1721, 1721, 0, 0, 0, 0, 0, + 0, 1609, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3472, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 974, 0, 0, 0, - 2616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3399, - 0, 1798, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1839, + 0, 0, 0, 0, 0, 1721, 1721, 0, 1721, 0, + 1721, 1721, 0, 1730, 1721, 1721, 1721, 1721, 1721, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 974, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 680, 0, 0, 1101, 0, + 1107, 0, 0, 1109, 1111, 1798, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1839, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2616, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3512, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1341, + 1171, 0, 0, 0, 0, 0, 0, 0, 0, 3526, + 0, 0, 3527, 0, 3528, 2802, 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, - 1713, 1713, 0, 0, 0, 680, 1171, 0, 0, 0, + 1713, 1713, 0, 0, 0, 680, 0, 0, 2170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1411, 2689, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2864, 0, + 0, 2864, 0, 89, 0, 0, 2170, 2170, 2170, 2170, + 2170, 0, 0, 0, 0, 0, 0, 0, 3608, 0, + 0, 0, 0, 0, 0, 0, 2170, 0, 0, 2170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, - 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1454, 1455, - 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, - 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, - 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1485, 1486, - 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1512, 1513, - 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, - 1524, 1525, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3498, 0, 680, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3622, 0, + 3623, 0, 3624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 89, 3509, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1171, 1171, 0, 0, 0, + 0, 0, 0, 2970, 0, 0, 0, 0, 1903, 0, + 0, 0, 0, 2978, 0, 0, 0, 0, 680, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3669, 0, + 3670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1171, 1171, 0, 0, 680, 0, 0, 0, 0, - 0, 0, 0, 0, 1903, 0, 0, 616, 0, 616, - 0, 0, 616, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 680, 0, 3543, 0, 0, 0, 0, - 89, 680, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 680, 1957, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1957, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 680, 0, 0, 0, 0, 0, 616, 0, - 0, 0, 0, 1973, 0, 0, 0, 0, 0, 0, - 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 680, 0, 1413, 0, 1411, 0, - 0, 680, 680, 1411, 2006, 2007, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1973, 1597, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3625, 0, 0, 0, + 0, 0, 0, 680, 0, 0, 0, 1614, 0, 0, + 0, 680, 0, 0, 0, 0, 0, 0, 2006, 2007, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1171, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2933, 0, 0, 0, 0, 0, + 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 680, 0, 0, 1411, - 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, - 0, 0, 0, 2132, 0, 0, 0, 0, 0, 0, + 680, 0, 0, 0, 0, 0, 0, 0, 1171, 0, + 0, 0, 0, 0, 680, 0, 0, 0, 1411, 800, + 0, 680, 680, 1411, 0, 0, 0, 0, 0, 0, + 0, 1755, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2132, 2170, 0, + 0, 0, 0, 0, 0, 0, 1800, 0, 0, 0, + 0, 3154, 0, 0, 0, 0, 198, 0, 0, 616, + 0, 0, 0, 2142, 2933, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1591, 0, 0, + 1171, 616, 0, 0, 1860, 0, 680, 0, 0, 1411, + 0, 1864, 0, 0, 680, 0, 931, 0, 0, 0, + 974, 0, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 0, + 0, 0, 0, 950, 950, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2142, - 0, 0, 0, 0, 0, 0, 0, 0, 1413, 0, - 0, 0, 0, 1591, 0, 0, 1171, 0, 0, 0, - 0, 3018, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 974, 0, 0, 0, - 0, 860, 0, 0, 0, 0, 861, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1962, 0, 0, 0, - 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 931, 0, 0, 0, 0, 0, - 0, 680, 0, 0, 0, 982, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, + 0, 3018, 0, 0, 0, 0, 0, 0, 0, 982, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 974, 0, 0, 0, 616, 0, 982, 867, - 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, - 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, - 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, - 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, - 908, 0, 0, 0, 0, 974, 0, 1413, 0, 0, - 1957, 0, 0, 0, 1957, 1957, 0, 0, 0, 0, - 0, 0, 0, 0, 3161, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1413, 0, 0, 1413, 0, 1413, - 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1772, 0, 0, 0, 0, 0, 0, 0, 680, 680, - 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 974, 0, 0, 0, + 0, 0, 982, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1841, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 616, 0, 680, 680, 680, 680, 0, - 616, 0, 0, 0, 0, 0, 0, 0, 0, 1873, - 1874, 616, 616, 616, 616, 616, 616, 616, 0, 0, + 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 974, + 0, 0, 0, 0, 1957, 0, 0, 0, 1957, 1957, + 0, 0, 0, 0, 0, 3274, 0, 3278, 3279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2390, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 97, 0, 0, 860, 0, 0, 0, - 848, 861, 862, 863, 864, 849, 0, 0, 850, 851, - 0, 852, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 857, 865, 866, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2864, 0, 89, 0, 2864, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1171, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1915, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2982, 2983, 0, 0, 1411, 0, 0, 0, - 0, 680, 0, 680, 867, 868, 869, 870, 871, 872, - 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, - 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, - 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, - 903, 904, 905, 906, 907, 908, 0, 0, 0, 0, + 0, 0, 0, 0, 3161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, - 0, 0, 0, 0, 0, 616, 0, 0, 2984, 0, - 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3400, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 680, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2390, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2551, 0, - 0, 0, 680, 0, 1413, 0, 680, 680, 0, 2566, - 0, 0, 0, 0, 0, 0, 950, 950, 0, 0, - 0, 1413, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2985, 2986, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 680, 680, 680, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2864, 0, 0, 0, 1171, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1435, 1436, 1437, 1438, 1439, + 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, + 1450, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, + 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, + 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, + 1483, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, + 1494, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, + 1521, 1522, 1523, 1524, 1525, 0, 0, 0, 0, 0, + 0, 0, 2156, 0, 0, 0, 1411, 0, 0, 3499, + 2160, 680, 2163, 680, 0, 1915, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 950, 1841, 950, 950, 950, - 950, 950, 0, 0, 0, 0, 2648, 0, 0, 0, - 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, - 814, 0, 0, 818, 0, 815, 816, 0, 0, 0, - 817, 0, 0, 2142, 0, 0, 0, 0, 0, 1772, - 2673, 0, 0, 0, 0, 0, 0, 0, 680, 2678, - 0, 0, 0, 0, 950, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 931, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 616, 0, 0, 0, 0, 0, 0, 1841, 616, - 0, 616, 0, 616, 2179, 0, 0, 0, 0, 680, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1411, - 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 680, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1957, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 616, 680, 616, 0, 0, 616, 616, 0, + 0, 0, 2551, 0, 0, 0, 0, 0, 0, 680, + 0, 0, 0, 2566, 0, 0, 0, 0, 3544, 0, + 0, 0, 680, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1957, - 0, 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 680, 0, 680, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2803, 0, 0, - 0, 0, 0, 0, 0, 1171, 0, 0, 0, 0, + 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 680, 0, 0, 0, 680, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, - 0, 616, 0, 0, 0, 0, 1721, 0, 0, 0, + 0, 1413, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, + 2648, 0, 0, 0, 0, 0, 0, 0, 0, 3626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2840, 0, 0, 616, 616, 0, - 0, 616, 0, 2377, 0, 0, 0, 0, 1171, 616, - 0, 0, 0, 0, 0, 2867, 1721, 0, 0, 616, - 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, + 0, 0, 0, 0, 0, 1915, 0, 2142, 0, 0, + 0, 0, 2320, 0, 2673, 0, 0, 0, 0, 0, + 0, 0, 0, 2678, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2370, 2371, + 0, 0, 2375, 0, 0, 0, 0, 0, 0, 0, + 2379, 0, 0, 0, 0, 680, 0, 0, 0, 0, + 2381, 0, 0, 0, 0, 0, 0, 2384, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, + 0, 0, 0, 0, 0, 0, 0, 2387, 0, 0, + 0, 0, 0, 1413, 0, 3331, 3333, 3332, 3350, 3351, + 3352, 3353, 3354, 3355, 3356, 748, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1411, 0, 680, 0, 0, 0, 1957, 0, 0, 0, + 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 680, 680, 0, 931, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 680, 0, + 0, 0, 616, 1957, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, + 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2803, 0, 0, 0, 0, 0, 0, 0, 1171, + 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 974, 0, 0, 0, 0, 0, 0, 0, 2142, 0, + 0, 0, 1413, 0, 0, 0, 0, 0, 680, 0, + 1721, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 680, 0, 680, 2840, 1413, + 0, 0, 1413, 0, 1413, 616, 0, 0, 0, 0, + 0, 0, 1171, 0, 0, 0, 0, 0, 0, 2867, + 1721, 0, 0, 0, 0, 1772, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 616, 0, 0, 0, 0, 0, 3337, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1841, 0, + 0, 3345, 3346, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, + 0, 2603, 0, 0, 0, 616, 0, 0, 0, 0, + 0, 0, 0, 0, 1873, 1874, 616, 616, 616, 616, + 616, 616, 616, 0, 974, 0, 0, 0, 0, 0, + 0, 0, 2142, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 814, 0, 727, 818, 729, 815, 816, 0, 725, + 728, 817, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3629, 0, 0, 2652, 0, 0, 0, 0, + 0, 0, 1636, 0, 0, 0, 0, 746, 747, 3330, + 3334, 3335, 3336, 3347, 3348, 3349, 3357, 3359, 779, 3358, + 3360, 3361, 3362, 3365, 3366, 3367, 3368, 3363, 3364, 3369, + 3314, 3318, 3315, 3316, 3317, 3329, 3319, 3320, 3321, 3322, + 3323, 3324, 3325, 3326, 3327, 3328, 3370, 3371, 3372, 3373, + 3374, 3375, 3340, 3344, 3343, 3341, 3342, 3338, 3339, 0, + 0, 2701, 2702, 2703, 2704, 2705, 0, 0, 0, 0, + 0, 819, 0, 820, 0, 0, 824, 0, 0, 3081, + 826, 825, 0, 827, 793, 792, 0, 0, 821, 822, + 0, 823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1915, 2721, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1413, 0, 1841, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 616, 0, 0, 0, 2729, 0, 1624, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3376, 3377, 3378, 3379, + 3380, 3381, 3382, 3383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1413, + 0, 0, 0, 0, 1636, 0, 0, 0, 0, 0, + 0, 950, 950, 0, 0, 0, 1413, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2142, 2142, 0, 0, + 0, 1637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3225, 3226, 3227, 3228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 950, 1841, 950, 950, 950, 950, 950, 0, 0, 1650, + 1653, 1654, 1655, 1656, 1657, 1658, 0, 1659, 1660, 1662, + 1663, 1661, 1664, 1665, 1638, 1639, 1640, 1641, 1622, 1623, + 1651, 0, 1625, 0, 1626, 1627, 1628, 1629, 1630, 1631, + 1632, 1633, 1634, 0, 1772, 1635, 1642, 1643, 1644, 1645, + 0, 1646, 1647, 1648, 1649, 0, 0, 0, 1624, 950, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 931, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, + 0, 0, 0, 1841, 616, 0, 616, 0, 616, 2179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3081, 0, 0, 0, 0, + 2938, 0, 0, 0, 0, 0, 0, 0, 0, 3302, + 0, 3304, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2976, 0, 0, 0, + 0, 0, 0, 1637, 0, 0, 0, 0, 0, 0, + 2988, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3011, 0, 0, 3014, 0, + 0, 2142, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3410, 0, 0, + 0, 0, 0, 1652, 0, 0, 0, 0, 0, 0, + 1171, 1650, 1653, 1654, 1655, 1656, 1657, 1658, 0, 1659, + 1660, 1662, 1663, 1661, 1664, 1665, 1638, 1639, 1640, 1641, + 1622, 1623, 1651, 0, 1625, 0, 1626, 1627, 1628, 1629, + 1630, 1631, 1632, 1633, 1634, 0, 0, 1635, 1642, 1643, + 1644, 1645, 0, 1646, 1647, 1648, 1649, 0, 0, 0, + 0, 3460, 0, 0, 0, 3460, 3460, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3110, 0, 0, + 0, 0, 0, 0, 2142, 0, 0, 0, 0, 616, + 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, - 1772, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 616, 616, 0, 0, 616, 0, 2377, 0, + 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, + 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3171, 2142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 616, 3186, 0, 0, 3187, 3188, 3189, 0, 0, + 0, 0, 0, 0, 0, 1652, 0, 2142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, - 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 97, 0, 0, 860, 0, 0, 0, 848, 861, + 862, 863, 864, 849, 0, 0, 850, 851, 3537, 852, + 0, 0, 0, 0, 0, 0, 1413, 0, 1841, 0, + 3541, 0, 0, 857, 865, 866, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1171, 1171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2142, 2142, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3584, 0, 0, 0, + 2982, 2983, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3592, 867, 868, 869, 870, 871, 872, 873, 874, + 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, + 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 3537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, - 0, 2658, 0, 0, 0, 0, 0, 0, 0, 3225, - 3226, 3227, 3228, 0, 0, 0, 0, 0, 0, 0, + 0, 97, 0, 3081, 860, 3592, 2984, 616, 848, 861, + 862, 863, 864, 849, 0, 1772, 850, 851, 0, 852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 857, 865, 866, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 616, 616, 616, 616, 616, 0, 0, 0, 0, 0, + 616, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2982, 2983, 0, 0, 0, 0, 0, 0, 0, 2985, + 2986, 0, 867, 868, 869, 870, 871, 872, 873, 874, + 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, + 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, + 905, 906, 907, 908, 0, 0, 0, 0, 0, 616, + 0, 0, 0, 0, 0, 0, 2658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2984, 0, 814, 0, + 0, 818, 0, 815, 816, 0, 0, 0, 817, 0, + 0, 0, 1413, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 616, 616, 616, 616, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 616, 616, 0, + 0, 0, 0, 0, 0, 860, 0, 0, 0, 0, + 861, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1962, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2985, + 2986, 0, 616, 616, 0, 0, 0, 3510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 616, 0, 3301, 0, 3303, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 950, 0, 0, + 0, 0, 950, 867, 868, 869, 870, 871, 872, 873, + 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, + 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, + 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, + 904, 905, 906, 907, 908, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2142, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3409, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1171, 0, 0, 0, + 0, 950, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 950, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3459, 0, 0, 0, - 3459, 3459, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2142, - 0, 0, 0, 0, 1413, 0, 0, 0, 0, 1413, - 616, 616, 616, 616, 616, 0, 0, 0, 0, 0, - 0, 0, 2883, 0, 0, 0, 0, 0, 1772, 0, - 616, 0, 0, 616, 2891, 1841, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1413, + 0, 0, 0, 0, 1413, 616, 616, 616, 616, 616, + 0, 0, 0, 0, 0, 0, 0, 2883, 0, 0, + 0, 0, 0, 1772, 0, 616, 0, 0, 616, 2891, + 1841, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2142, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1413, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, - 0, 0, 2142, 0, 0, 0, 0, 0, 0, 616, + 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1413, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, + 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 616, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3536, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1171, - 1171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3583, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2142, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 616, 0, 0, 0, 0, 0, 3081, 0, - 3591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 616, 0, 0, 616, 616, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 616, 0, 0, 616, + 616, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2588,186 +2478,56 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 392, 0, 0, 0, 1305, 1290, 513, 0, - 1233, 1308, 1202, 1221, 1318, 1224, 1227, 1269, 1181, 1247, - 411, 1218, 1174, 1206, 1176, 1213, 1177, 1204, 1235, 269, - 1201, 1292, 1251, 1307, 362, 266, 1183, 1207, 425, 1223, - 207, 1271, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 1314, 366, 1257, 0, - 492, 396, 0, 0, 0, 1237, 1296, 1245, 1283, 1232, - 1270, 1191, 1256, 1309, 1219, 1266, 1310, 321, 249, 323, - 206, 408, 493, 285, 0, 0, 1772, 0, 3563, 670, - 0, 0, 0, 0, 3564, 0, 0, 0, 0, 239, - 0, 0, 246, 0, 0, 616, 347, 356, 355, 336, - 337, 339, 341, 346, 353, 359, 1215, 1263, 1304, 1216, - 1265, 264, 319, 271, 263, 518, 1315, 1295, 1180, 1244, - 1303, 0, 0, 230, 1306, 1239, 0, 1268, 0, 1321, - 1175, 1259, 0, 1178, 1182, 1317, 1299, 1210, 274, 0, - 0, 0, 0, 0, 0, 0, 1236, 1246, 1280, 1284, - 1230, 0, 0, 0, 0, 1413, 0, 0, 1208, 0, - 1255, 0, 0, 0, 1187, 1179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1234, 0, - 0, 0, 0, 1190, 0, 1209, 1281, 1772, 1173, 296, - 1184, 397, 256, 1327, 0, 449, 1288, 1298, 1231, 561, - 1302, 1229, 1228, 1275, 1188, 1294, 1222, 361, 1186, 328, - 202, 226, 0, 1220, 407, 457, 469, 1293, 1205, 1214, - 254, 1212, 467, 421, 538, 234, 283, 454, 427, 465, - 437, 286, 1254, 1273, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 588, 227, 259, 415, - 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, - 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 583, 571, 573, 574, 214, 502, - 533, 240, 479, 0, 0, 590, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 591, 229, 555, 221, - 1185, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 592, 235, 236, 238, 1200, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 1289, 517, - 536, 548, 560, 566, 567, 569, 575, 576, 577, 578, - 584, 582, 579, 580, 581, 572, 402, 309, 490, 331, - 369, 1278, 1320, 420, 468, 241, 540, 491, 1323, 1324, - 1325, 1326, 1195, 1199, 1193, 1260, 1194, 1249, 1250, 1196, - 1311, 1312, 1313, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, - 610, 0, 1282, 1189, 0, 1197, 1198, 1291, 1300, 1301, - 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 1253, 201, 222, 364, 1316, 450, 287, 589, 551, 545, - 208, 224, 1192, 261, 1203, 1211, 0, 1217, 1225, 1226, - 1238, 1240, 1241, 1242, 1243, 1261, 1262, 1264, 1272, 1274, - 1277, 1279, 1286, 1297, 1319, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 586, 587, 298, 534, 565, 532, 585, - 559, 435, 374, 1252, 1322, 549, 1258, 377, 280, 303, - 318, 1267, 550, 497, 228, 462, 289, 252, 1285, 1287, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 1248, 1276, 372, 514, 515, 314, - 392, 0, 0, 0, 1305, 1290, 513, 0, 1233, 1308, - 1202, 1221, 1318, 1224, 1227, 1269, 1181, 1247, 411, 1218, - 1174, 1206, 1176, 1213, 1177, 1204, 1235, 269, 1201, 1292, - 1251, 1307, 362, 266, 1183, 1207, 425, 1223, 207, 1271, - 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, - 381, 423, 503, 417, 1314, 366, 1257, 0, 492, 396, - 0, 0, 0, 1237, 1296, 1245, 1283, 1232, 1270, 1191, - 1256, 1309, 1219, 1266, 1310, 321, 249, 323, 206, 408, - 493, 285, 0, 0, 0, 0, 0, 199, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, - 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, - 341, 346, 353, 359, 1215, 1263, 1304, 1216, 1265, 264, - 319, 271, 263, 518, 1315, 1295, 1180, 1244, 1303, 0, - 0, 230, 1306, 1239, 0, 1268, 0, 1321, 1175, 1259, - 0, 1178, 1182, 1317, 1299, 1210, 274, 0, 0, 0, - 0, 0, 0, 0, 1236, 1246, 1280, 1284, 1230, 0, - 0, 0, 0, 0, 2892, 0, 1208, 0, 1255, 0, - 0, 0, 1187, 1179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1234, 0, 0, 0, - 0, 1190, 0, 1209, 1281, 0, 1173, 296, 1184, 397, - 256, 1327, 0, 449, 1288, 1298, 1231, 561, 1302, 1229, - 1228, 1275, 1188, 1294, 1222, 361, 1186, 328, 202, 226, - 0, 1220, 407, 457, 469, 1293, 1205, 1214, 254, 1212, - 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, - 1254, 1273, 466, 368, 523, 447, 535, 562, 563, 262, - 401, 547, 507, 556, 588, 227, 259, 415, 500, 541, - 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, - 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, - 432, 570, 583, 571, 573, 574, 214, 502, 533, 240, - 479, 0, 0, 590, 248, 499, 216, 530, 498, 389, - 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 527, 528, 255, 591, 229, 555, 221, 1185, 554, - 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 592, - 235, 236, 238, 1200, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 1289, 517, 536, 548, - 560, 566, 567, 569, 575, 576, 577, 578, 584, 582, - 579, 580, 581, 572, 402, 309, 490, 331, 369, 1278, - 1320, 420, 468, 241, 540, 491, 1323, 1324, 1325, 1326, - 1195, 1199, 1193, 1260, 1194, 1249, 1250, 1196, 1311, 1312, - 1313, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, - 1282, 1189, 0, 1197, 1198, 1291, 1300, 1301, 611, 380, - 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, - 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, - 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, - 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, - 546, 307, 464, 463, 329, 330, 375, 446, 1253, 201, - 222, 364, 1316, 450, 287, 589, 551, 545, 208, 224, - 1192, 261, 1203, 1211, 0, 1217, 1225, 1226, 1238, 1240, - 1241, 1242, 1243, 1261, 1262, 1264, 1272, 1274, 1277, 1279, - 1286, 1297, 1319, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 586, 587, 298, 534, 565, 532, 585, 559, 435, - 374, 1252, 1322, 549, 1258, 377, 280, 303, 318, 1267, - 550, 497, 228, 462, 289, 252, 1285, 1287, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 1248, 1276, 372, 514, 515, 314, 392, 0, - 0, 0, 1305, 1290, 513, 0, 1233, 1308, 1202, 1221, - 1318, 1224, 1227, 1269, 1181, 1247, 411, 1218, 1174, 1206, - 1176, 1213, 1177, 1204, 1235, 269, 1201, 1292, 1251, 1307, - 362, 266, 1183, 1207, 425, 1223, 207, 1271, 482, 253, - 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 1314, 366, 1257, 0, 492, 396, 0, 0, - 0, 1237, 1296, 1245, 1283, 1232, 1270, 1191, 1256, 1309, - 1219, 1266, 1310, 321, 249, 323, 206, 408, 493, 285, - 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, - 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, - 353, 359, 1215, 1263, 1304, 1216, 1265, 264, 319, 271, - 263, 518, 1315, 1295, 1180, 1244, 1303, 0, 0, 230, - 1306, 1239, 0, 1268, 0, 1321, 1175, 1259, 0, 1178, - 1182, 1317, 1299, 1210, 274, 0, 0, 0, 0, 0, - 0, 0, 1236, 1246, 1280, 1284, 1230, 0, 0, 0, - 0, 0, 2853, 0, 1208, 0, 1255, 0, 0, 0, - 1187, 1179, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, + 0, 0, 1305, 1290, 513, 0, 1233, 1308, 1202, 1221, + 1318, 1224, 1227, 1269, 1181, 1247, 411, 1218, 1174, 1206, + 1176, 1213, 1177, 1204, 1235, 269, 1201, 1292, 1251, 1307, + 362, 266, 1183, 1207, 425, 1223, 207, 1271, 482, 253, + 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, + 503, 417, 1314, 366, 1257, 0, 492, 396, 0, 0, + 0, 1237, 1296, 1245, 1283, 1232, 1270, 1191, 1256, 1309, + 1219, 1266, 1310, 321, 249, 323, 206, 408, 493, 285, + 0, 0, 1772, 0, 3564, 670, 0, 0, 0, 0, + 3565, 0, 0, 0, 0, 239, 0, 0, 246, 0, + 0, 616, 347, 356, 355, 336, 337, 339, 341, 346, + 353, 359, 1215, 1263, 1304, 1216, 1265, 264, 319, 271, + 263, 518, 1315, 1295, 1180, 1244, 1303, 0, 0, 230, + 1306, 1239, 0, 1268, 0, 1321, 1175, 1259, 0, 1178, + 1182, 1317, 1299, 1210, 274, 0, 0, 0, 0, 0, + 0, 0, 1236, 1246, 1280, 1284, 1230, 0, 0, 0, + 0, 1413, 0, 0, 1208, 0, 1255, 0, 0, 0, + 1187, 1179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1234, 0, 0, 0, 0, 1190, - 0, 1209, 1281, 0, 1173, 296, 1184, 397, 256, 1327, + 0, 1209, 1281, 1772, 1173, 296, 1184, 397, 256, 1327, 0, 449, 1288, 1298, 1231, 561, 1302, 1229, 1228, 1275, 1188, 1294, 1222, 361, 1186, 328, 202, 226, 0, 1220, 407, 457, 469, 1293, 1205, 1214, 254, 1212, 467, 421, @@ -2821,7 +2581,7 @@ var yyAct = [...]int{ 1314, 366, 1257, 0, 492, 396, 0, 0, 0, 1237, 1296, 1245, 1283, 1232, 1270, 1191, 1256, 1309, 1219, 1266, 1310, 321, 249, 323, 206, 408, 493, 285, 0, 0, - 0, 0, 0, 844, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 1215, 1263, 1304, 1216, 1265, 264, 319, 271, 263, 518, @@ -2829,7 +2589,7 @@ var yyAct = [...]int{ 0, 1268, 0, 1321, 1175, 1259, 0, 1178, 1182, 1317, 1299, 1210, 274, 0, 0, 0, 0, 0, 0, 0, 1236, 1246, 1280, 1284, 1230, 0, 0, 0, 0, 0, - 2158, 0, 1208, 0, 1255, 0, 0, 0, 1187, 1179, + 2892, 0, 1208, 0, 1255, 0, 0, 0, 1187, 1179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2888,7 +2648,7 @@ var yyAct = [...]int{ 272, 268, 251, 315, 381, 423, 503, 417, 1314, 366, 1257, 0, 492, 396, 0, 0, 0, 1237, 1296, 1245, 1283, 1232, 1270, 1191, 1256, 1309, 1219, 1266, 1310, 321, - 249, 323, 206, 408, 493, 285, 0, 97, 0, 0, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 1215, 1263, @@ -2896,7 +2656,7 @@ var yyAct = [...]int{ 1180, 1244, 1303, 0, 0, 230, 1306, 1239, 0, 1268, 0, 1321, 1175, 1259, 0, 1178, 1182, 1317, 1299, 1210, 274, 0, 0, 0, 0, 0, 0, 0, 1236, 1246, - 1280, 1284, 1230, 0, 0, 0, 0, 0, 0, 0, + 1280, 1284, 1230, 0, 0, 0, 0, 0, 2853, 0, 1208, 0, 1255, 0, 0, 0, 1187, 1179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2956,7 +2716,7 @@ var yyAct = [...]int{ 251, 315, 381, 423, 503, 417, 1314, 366, 1257, 0, 492, 396, 0, 0, 0, 1237, 1296, 1245, 1283, 1232, 1270, 1191, 1256, 1309, 1219, 1266, 1310, 321, 249, 323, - 206, 408, 493, 285, 0, 0, 0, 0, 0, 670, + 206, 408, 493, 285, 0, 0, 0, 0, 0, 844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 1215, 1263, 1304, 1216, @@ -2964,7 +2724,7 @@ var yyAct = [...]int{ 1303, 0, 0, 230, 1306, 1239, 0, 1268, 0, 1321, 1175, 1259, 0, 1178, 1182, 1317, 1299, 1210, 274, 0, 0, 0, 0, 0, 0, 0, 1236, 1246, 1280, 1284, - 1230, 0, 0, 0, 0, 0, 0, 0, 1208, 0, + 1230, 0, 0, 0, 0, 0, 2158, 0, 1208, 0, 1255, 0, 0, 0, 1187, 1179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3024,7 +2784,7 @@ var yyAct = [...]int{ 381, 423, 503, 417, 1314, 366, 1257, 0, 492, 396, 0, 0, 0, 1237, 1296, 1245, 1283, 1232, 1270, 1191, 1256, 1309, 1219, 1266, 1310, 321, 249, 323, 206, 408, - 493, 285, 0, 0, 0, 0, 0, 844, 0, 0, + 493, 285, 0, 97, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 1215, 1263, 1304, 1216, 1265, 264, @@ -3092,7 +2852,7 @@ var yyAct = [...]int{ 503, 417, 1314, 366, 1257, 0, 492, 396, 0, 0, 0, 1237, 1296, 1245, 1283, 1232, 1270, 1191, 1256, 1309, 1219, 1266, 1310, 321, 249, 323, 206, 408, 493, 285, - 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 1215, 1263, 1304, 1216, 1265, 264, 319, 271, @@ -3152,343 +2912,277 @@ var yyAct = [...]int{ 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 1248, 1276, 372, 514, 515, 314, 392, 0, 0, 0, - 0, 0, 513, 0, 723, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 411, 0, 0, 0, 0, 710, - 0, 0, 0, 269, 715, 0, 0, 0, 362, 266, - 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, + 1305, 1290, 513, 0, 1233, 1308, 1202, 1221, 1318, 1224, + 1227, 1269, 1181, 1247, 411, 1218, 1174, 1206, 1176, 1213, + 1177, 1204, 1235, 269, 1201, 1292, 1251, 1307, 362, 266, + 1183, 1207, 425, 1223, 207, 1271, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, - 722, 366, 0, 0, 492, 396, 0, 0, 0, 0, - 0, 718, 719, 0, 0, 0, 0, 0, 0, 0, - 0, 321, 249, 323, 206, 408, 493, 285, 0, 97, - 0, 0, 860, 844, 810, 811, 848, 861, 862, 863, - 864, 849, 0, 239, 850, 851, 246, 852, 0, 809, - 750, 752, 751, 769, 770, 771, 772, 773, 774, 775, - 748, 857, 865, 866, 0, 264, 319, 271, 263, 518, - 0, 0, 2038, 2039, 2040, 0, 0, 230, 0, 0, - 0, 0, 0, 0, 0, 692, 707, 0, 721, 0, - 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 704, 705, - 0, 0, 0, 0, 804, 0, 706, 0, 0, 714, - 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, - 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, - 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, - 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, - 907, 908, 717, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, - 803, 0, 0, 561, 0, 0, 801, 0, 0, 0, - 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, - 469, 0, 0, 0, 854, 0, 467, 421, 538, 234, - 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, + 1314, 366, 1257, 0, 492, 396, 0, 0, 0, 1237, + 1296, 1245, 1283, 1232, 1270, 1191, 1256, 1309, 1219, 1266, + 1310, 321, 249, 323, 206, 408, 493, 285, 0, 0, + 0, 0, 0, 844, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, + 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, + 1215, 1263, 1304, 1216, 1265, 264, 319, 271, 263, 518, + 1315, 1295, 1180, 1244, 1303, 0, 0, 230, 1306, 1239, + 0, 1268, 0, 1321, 1175, 1259, 0, 1178, 1182, 1317, + 1299, 1210, 274, 0, 0, 0, 0, 0, 0, 0, + 1236, 1246, 1280, 1284, 1230, 0, 0, 0, 0, 0, + 0, 0, 1208, 0, 1255, 0, 0, 0, 1187, 1179, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1234, 0, 0, 0, 0, 1190, 0, 1209, + 1281, 0, 1173, 296, 1184, 397, 256, 1327, 0, 449, + 1288, 1298, 1231, 561, 1302, 1229, 1228, 1275, 1188, 1294, + 1222, 361, 1186, 328, 202, 226, 0, 1220, 407, 457, + 469, 1293, 1205, 1214, 254, 1212, 467, 421, 538, 234, + 283, 454, 427, 465, 437, 286, 1254, 1273, 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, 583, 571, 573, 574, 214, 502, 533, 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, - 453, 267, 292, 0, 0, 257, 410, 855, 856, 255, - 591, 756, 555, 221, 0, 554, 403, 522, 531, 390, - 379, 220, 529, 388, 378, 332, 764, 765, 279, 305, + 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, + 591, 229, 555, 221, 1185, 554, 403, 522, 531, 390, + 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, - 0, 210, 0, 494, 543, 592, 235, 236, 238, 0, + 0, 210, 0, 494, 543, 592, 235, 236, 238, 1200, 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, - 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, + 439, 448, 1289, 517, 536, 548, 560, 566, 567, 569, 575, 576, 577, 578, 584, 582, 579, 580, 581, 572, - 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, - 540, 491, 0, 0, 0, 0, 814, 802, 727, 818, - 729, 815, 816, 724, 725, 728, 817, 593, 594, 595, + 402, 309, 490, 331, 369, 1278, 1320, 420, 468, 241, + 540, 491, 1323, 1324, 1325, 1326, 1195, 1199, 1193, 1260, + 1194, 1249, 1250, 1196, 1311, 1312, 1313, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 608, 609, 610, 0, 805, 713, 712, 0, - 720, 0, 746, 747, 749, 753, 754, 755, 766, 767, - 768, 776, 778, 779, 777, 780, 781, 782, 785, 786, - 787, 788, 783, 784, 789, 730, 734, 731, 732, 733, - 745, 735, 736, 737, 738, 739, 740, 741, 742, 743, - 744, 828, 829, 830, 831, 832, 833, 759, 763, 762, - 760, 761, 757, 758, 711, 201, 222, 364, 0, 450, - 287, 589, 551, 545, 208, 224, 819, 261, 820, 0, - 0, 824, 0, 0, 0, 826, 825, 0, 827, 793, - 792, 0, 0, 821, 822, 0, 823, 0, 0, 203, + 606, 607, 608, 609, 610, 0, 1282, 1189, 0, 1197, + 1198, 1291, 1300, 1301, 611, 380, 481, 537, 333, 345, + 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, + 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, + 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, + 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, + 329, 330, 375, 446, 1253, 201, 222, 364, 1316, 450, + 287, 589, 551, 545, 208, 224, 1192, 261, 1203, 1211, + 0, 1217, 1225, 1226, 1238, 1240, 1241, 1242, 1243, 1261, + 1262, 1264, 1272, 1274, 1277, 1279, 1286, 1297, 1319, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, - 476, 834, 835, 836, 837, 838, 839, 840, 841, 298, - 534, 565, 532, 585, 559, 435, 374, 0, 0, 549, - 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, - 289, 252, 859, 0, 213, 247, 231, 258, 273, 276, + 476, 299, 300, 441, 442, 312, 313, 586, 587, 298, + 534, 565, 532, 585, 559, 435, 374, 1252, 1322, 549, + 1258, 377, 280, 303, 318, 1267, 550, 497, 228, 462, + 289, 252, 1285, 1287, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, - 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, - 372, 514, 515, 314, 513, 0, 723, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, - 0, 710, 0, 0, 0, 269, 715, 0, 0, 0, - 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, - 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, - 503, 417, 722, 366, 0, 0, 492, 396, 0, 0, - 0, 0, 0, 718, 719, 0, 0, 0, 0, 0, - 0, 2187, 0, 321, 249, 323, 206, 408, 493, 285, - 0, 97, 0, 0, 860, 844, 810, 811, 848, 861, - 862, 863, 864, 849, 0, 239, 850, 851, 246, 852, - 0, 809, 750, 752, 751, 769, 770, 771, 772, 773, - 774, 775, 748, 857, 865, 866, 2188, 264, 319, 271, - 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 692, 707, 0, - 721, 0, 0, 0, 274, 0, 0, 0, 0, 0, + 480, 504, 505, 506, 508, 391, 265, 428, 1248, 1276, + 372, 514, 515, 314, 392, 0, 0, 0, 1305, 1290, + 513, 0, 1233, 1308, 1202, 1221, 1318, 1224, 1227, 1269, + 1181, 1247, 411, 1218, 1174, 1206, 1176, 1213, 1177, 1204, + 1235, 269, 1201, 1292, 1251, 1307, 362, 266, 1183, 1207, + 425, 1223, 207, 1271, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 1314, 366, + 1257, 0, 492, 396, 0, 0, 0, 1237, 1296, 1245, + 1283, 1232, 1270, 1191, 1256, 1309, 1219, 1266, 1310, 321, + 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, + 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, + 355, 336, 337, 339, 341, 346, 353, 359, 1215, 1263, + 1304, 1216, 1265, 264, 319, 271, 263, 518, 1315, 1295, + 1180, 1244, 1303, 0, 0, 230, 1306, 1239, 0, 1268, + 0, 1321, 1175, 1259, 0, 1178, 1182, 1317, 1299, 1210, + 274, 0, 0, 0, 0, 0, 0, 0, 1236, 1246, + 1280, 1284, 1230, 0, 0, 0, 0, 0, 0, 0, + 1208, 0, 1255, 0, 0, 0, 1187, 1179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 704, 705, 0, 0, 0, 0, 804, 0, 706, 0, - 0, 714, 867, 868, 869, 870, 871, 872, 873, 874, - 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, - 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, - 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, - 905, 906, 907, 908, 717, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, - 0, 449, 803, 0, 0, 561, 0, 0, 801, 0, - 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, - 407, 457, 469, 0, 0, 0, 854, 0, 467, 421, - 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, - 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, - 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, - 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, - 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, - 583, 571, 573, 574, 214, 502, 533, 240, 479, 0, - 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, - 215, 0, 453, 267, 292, 0, 0, 257, 410, 855, - 856, 255, 591, 756, 555, 221, 0, 554, 403, 522, - 531, 390, 379, 220, 529, 388, 378, 332, 764, 765, - 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, - 209, 542, 0, 210, 0, 494, 543, 592, 235, 236, - 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, - 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, - 567, 569, 575, 576, 577, 578, 584, 582, 579, 580, - 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, - 468, 241, 540, 491, 0, 0, 0, 0, 814, 802, - 727, 818, 729, 815, 816, 724, 725, 728, 817, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 608, 609, 610, 0, 805, 713, - 712, 0, 720, 0, 746, 747, 749, 753, 754, 755, - 766, 767, 768, 776, 778, 779, 777, 780, 781, 782, - 785, 786, 787, 788, 783, 784, 789, 730, 734, 731, - 732, 733, 745, 735, 736, 737, 738, 739, 740, 741, - 742, 743, 744, 828, 829, 830, 831, 832, 833, 759, - 763, 762, 760, 761, 757, 758, 711, 201, 222, 364, - 0, 450, 287, 589, 551, 545, 208, 224, 819, 261, - 820, 0, 0, 824, 0, 0, 0, 826, 825, 0, - 827, 793, 792, 0, 0, 821, 822, 0, 823, 0, - 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, - 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, - 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, - 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, - 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, - 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, - 558, 564, 476, 834, 835, 836, 837, 838, 839, 840, - 841, 298, 534, 565, 532, 585, 559, 435, 374, 0, - 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, - 228, 462, 289, 252, 859, 0, 213, 247, 231, 258, - 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, - 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, - 0, 392, 372, 514, 515, 314, 88, 513, 0, 723, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, - 0, 0, 0, 0, 710, 0, 0, 0, 269, 715, - 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, - 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, - 315, 381, 423, 503, 417, 722, 366, 0, 0, 492, - 396, 0, 0, 0, 0, 0, 718, 719, 0, 0, - 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, - 408, 493, 285, 0, 97, 0, 0, 860, 844, 810, - 811, 848, 861, 862, 863, 864, 849, 0, 239, 850, - 851, 246, 852, 0, 809, 750, 752, 751, 769, 770, - 771, 772, 773, 774, 775, 748, 857, 865, 866, 0, - 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, - 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, - 692, 707, 0, 721, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 704, 705, 0, 0, 0, 0, 804, - 0, 706, 0, 0, 714, 867, 868, 869, 870, 871, - 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, - 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, - 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, - 902, 903, 904, 905, 906, 907, 908, 717, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, - 397, 256, 0, 0, 449, 803, 0, 0, 561, 0, - 0, 801, 0, 0, 0, 0, 361, 0, 328, 202, - 226, 0, 0, 407, 457, 469, 0, 0, 0, 854, - 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, - 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, - 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, - 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, - 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, - 431, 432, 570, 583, 571, 573, 574, 214, 502, 533, - 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, - 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, - 257, 410, 855, 856, 255, 591, 756, 555, 221, 0, - 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, - 332, 764, 765, 279, 305, 444, 371, 445, 304, 306, - 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, - 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, - 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, - 548, 560, 566, 567, 569, 575, 576, 577, 578, 584, - 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, - 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, - 0, 814, 802, 727, 818, 729, 815, 816, 724, 725, - 728, 817, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, - 0, 805, 713, 712, 0, 720, 0, 746, 747, 749, - 753, 754, 755, 766, 767, 768, 776, 778, 779, 777, - 780, 781, 782, 785, 786, 787, 788, 783, 784, 789, - 730, 734, 731, 732, 733, 745, 735, 736, 737, 738, - 739, 740, 741, 742, 743, 744, 828, 829, 830, 831, - 832, 833, 759, 763, 762, 760, 761, 757, 758, 711, - 201, 222, 364, 96, 450, 287, 589, 551, 545, 208, - 224, 819, 261, 820, 0, 0, 824, 0, 0, 0, - 826, 825, 0, 827, 793, 792, 0, 0, 821, 822, - 0, 823, 0, 0, 203, 204, 211, 223, 233, 237, - 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, - 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, - 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, - 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, - 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, - 524, 526, 539, 558, 564, 476, 834, 835, 836, 837, - 838, 839, 840, 841, 298, 534, 565, 532, 585, 559, - 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, - 0, 550, 497, 228, 462, 289, 252, 859, 0, 213, - 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, - 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, - 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, - 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 411, 0, 0, 0, 0, 710, 0, 0, 0, - 269, 715, 0, 0, 0, 362, 266, 0, 0, 425, - 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, - 268, 251, 315, 381, 423, 503, 417, 722, 366, 0, - 0, 492, 396, 0, 0, 0, 0, 0, 718, 719, - 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, - 323, 206, 408, 493, 285, 0, 97, 0, 0, 860, - 844, 810, 811, 848, 861, 862, 863, 864, 849, 0, - 239, 850, 851, 246, 852, 0, 809, 750, 752, 751, - 769, 770, 771, 772, 773, 774, 775, 748, 857, 865, - 866, 0, 264, 319, 271, 263, 518, 0, 0, 0, - 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, - 0, 0, 692, 707, 0, 721, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 704, 705, 0, 0, 0, - 0, 804, 0, 706, 0, 0, 714, 867, 868, 869, - 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, - 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, - 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, - 900, 901, 902, 903, 904, 905, 906, 907, 908, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 296, 0, 397, 256, 0, 0, 449, 803, 0, 0, - 561, 0, 0, 801, 0, 0, 0, 0, 361, 0, - 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, - 0, 854, 0, 467, 421, 538, 234, 283, 454, 427, - 465, 437, 286, 3550, 0, 466, 368, 523, 447, 535, - 562, 563, 262, 401, 547, 507, 556, 588, 227, 259, - 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, - 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, - 288, 452, 431, 432, 570, 583, 571, 573, 574, 214, - 502, 533, 240, 479, 0, 0, 590, 248, 499, 216, - 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, - 0, 0, 257, 410, 855, 856, 255, 591, 756, 555, - 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, - 388, 378, 332, 764, 765, 279, 305, 444, 371, 445, - 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, - 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, - 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, - 517, 536, 548, 560, 566, 567, 569, 575, 576, 577, - 578, 584, 582, 579, 580, 581, 572, 402, 309, 490, - 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, - 0, 0, 0, 814, 802, 727, 818, 729, 815, 816, - 724, 725, 728, 817, 593, 594, 595, 596, 597, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, - 609, 610, 0, 805, 713, 712, 0, 720, 0, 746, - 747, 749, 753, 754, 755, 766, 767, 768, 776, 778, - 779, 777, 780, 781, 782, 785, 786, 787, 788, 783, - 784, 789, 730, 734, 731, 732, 733, 745, 735, 736, - 737, 738, 739, 740, 741, 742, 743, 744, 828, 829, - 830, 831, 832, 833, 759, 763, 762, 760, 761, 757, - 758, 711, 201, 222, 364, 0, 450, 287, 589, 551, - 545, 208, 224, 819, 261, 820, 0, 0, 824, 0, - 0, 0, 826, 825, 0, 827, 793, 792, 0, 0, - 821, 822, 0, 823, 0, 0, 203, 204, 211, 223, - 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, - 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, - 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, - 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, - 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, - 496, 501, 524, 526, 539, 558, 564, 476, 834, 835, - 836, 837, 838, 839, 840, 841, 298, 534, 565, 532, - 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, - 303, 318, 0, 550, 497, 228, 462, 289, 252, 859, - 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, - 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, - 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, - 314, 513, 0, 723, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 411, 0, 0, 0, 0, 710, 0, - 0, 0, 269, 715, 0, 0, 0, 362, 266, 0, - 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, - 281, 272, 268, 251, 315, 381, 423, 503, 417, 722, - 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, - 718, 719, 0, 0, 0, 0, 0, 0, 0, 0, - 321, 249, 323, 206, 408, 493, 285, 0, 97, 0, - 1569, 860, 844, 810, 811, 848, 861, 862, 863, 864, - 849, 0, 239, 850, 851, 246, 852, 0, 809, 750, - 752, 751, 769, 770, 771, 772, 773, 774, 775, 748, - 857, 865, 866, 0, 264, 319, 271, 263, 518, 0, - 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, - 0, 0, 0, 0, 692, 707, 0, 721, 0, 0, - 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 704, 705, 0, - 0, 0, 0, 804, 0, 706, 0, 0, 714, 867, - 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, - 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, - 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, - 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, - 908, 717, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 296, 0, 397, 256, 0, 0, 449, 803, - 0, 0, 561, 0, 0, 801, 0, 0, 0, 0, - 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, - 0, 0, 0, 854, 0, 467, 421, 538, 234, 283, - 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, - 447, 535, 562, 563, 262, 401, 547, 507, 556, 588, - 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, - 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, - 525, 544, 288, 452, 431, 432, 570, 583, 571, 573, - 574, 214, 502, 533, 240, 479, 0, 0, 590, 248, - 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 855, 856, 255, 591, - 756, 555, 221, 0, 554, 403, 522, 531, 390, 379, - 220, 529, 388, 378, 332, 764, 765, 279, 305, 444, - 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, - 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 0, 517, 536, 548, 560, 566, 567, 569, 575, - 576, 577, 578, 584, 582, 579, 580, 581, 572, 402, - 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, - 491, 0, 0, 0, 0, 814, 802, 727, 818, 729, - 815, 816, 724, 725, 728, 817, 593, 594, 595, 596, - 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 608, 609, 610, 0, 805, 713, 712, 0, 720, - 0, 746, 747, 749, 753, 754, 755, 766, 767, 768, - 776, 778, 779, 777, 780, 781, 782, 785, 786, 787, - 788, 783, 784, 789, 730, 734, 731, 732, 733, 745, - 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, - 828, 829, 830, 831, 832, 833, 759, 763, 762, 760, - 761, 757, 758, 711, 201, 222, 364, 0, 450, 287, - 589, 551, 545, 208, 224, 819, 261, 820, 0, 0, - 824, 0, 0, 0, 826, 825, 0, 827, 793, 792, - 0, 0, 821, 822, 0, 823, 0, 0, 203, 204, - 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, - 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, - 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, - 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, - 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, - 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 834, 835, 836, 837, 838, 839, 840, 841, 298, 534, - 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, - 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, - 252, 859, 0, 213, 247, 231, 258, 273, 276, 322, - 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, - 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, - 514, 515, 314, 513, 0, 723, 0, 0, 0, 0, + 1234, 0, 0, 0, 0, 1190, 0, 1209, 1281, 0, + 1173, 296, 1184, 397, 256, 1327, 0, 449, 1288, 1298, + 1231, 561, 1302, 1229, 1228, 1275, 1188, 1294, 1222, 361, + 1186, 328, 202, 226, 0, 1220, 407, 457, 469, 1293, + 1205, 1214, 254, 1212, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 1254, 1273, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 588, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 583, 571, 573, 574, + 214, 502, 533, 240, 479, 0, 0, 590, 248, 499, + 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, + 292, 0, 0, 257, 410, 527, 528, 255, 591, 229, + 555, 221, 1185, 554, 403, 522, 531, 390, 379, 220, + 529, 388, 378, 332, 351, 352, 279, 305, 444, 371, + 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, + 0, 494, 543, 592, 235, 236, 238, 1200, 278, 282, + 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, + 1289, 517, 536, 548, 560, 566, 567, 569, 575, 576, + 577, 578, 584, 582, 579, 580, 581, 572, 402, 309, + 490, 331, 369, 1278, 1320, 420, 468, 241, 540, 491, + 1323, 1324, 1325, 1326, 1195, 1199, 1193, 1260, 1194, 1249, + 1250, 1196, 1311, 1312, 1313, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 0, 1282, 1189, 0, 1197, 1198, 1291, + 1300, 1301, 611, 380, 481, 537, 333, 345, 348, 338, + 357, 0, 358, 334, 335, 340, 342, 343, 344, 349, + 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, + 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, + 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, + 375, 446, 1253, 201, 222, 364, 1316, 450, 287, 589, + 551, 545, 208, 224, 1192, 261, 1203, 1211, 0, 1217, + 1225, 1226, 1238, 1240, 1241, 1242, 1243, 1261, 1262, 1264, + 1272, 1274, 1277, 1279, 1286, 1297, 1319, 203, 204, 211, + 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, + 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, + 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, + 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, + 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, + 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, + 300, 441, 442, 312, 313, 586, 587, 298, 534, 565, + 532, 585, 559, 435, 374, 1252, 1322, 549, 1258, 377, + 280, 303, 318, 1267, 550, 497, 228, 462, 289, 252, + 1285, 1287, 213, 247, 231, 258, 273, 276, 322, 387, + 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, + 505, 506, 508, 391, 265, 428, 1248, 1276, 372, 514, + 515, 314, 392, 0, 0, 0, 0, 0, 513, 0, + 723, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 710, 0, 0, 0, 269, + 715, 0, 0, 0, 362, 266, 0, 0, 425, 0, + 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, + 251, 315, 381, 423, 503, 417, 722, 366, 0, 0, + 492, 396, 0, 0, 0, 0, 0, 718, 719, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, + 206, 408, 493, 285, 0, 97, 0, 0, 860, 844, + 810, 811, 848, 861, 862, 863, 864, 849, 0, 239, + 850, 851, 246, 852, 0, 809, 750, 752, 751, 769, + 770, 771, 772, 773, 774, 775, 748, 857, 865, 866, + 0, 264, 319, 271, 263, 518, 0, 0, 2038, 2039, + 2040, 0, 0, 230, 0, 0, 0, 0, 0, 0, + 0, 692, 707, 0, 721, 0, 0, 0, 274, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 704, 705, 0, 0, 0, 0, + 804, 0, 706, 0, 0, 714, 867, 868, 869, 870, + 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, + 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, + 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, + 901, 902, 903, 904, 905, 906, 907, 908, 717, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, + 0, 397, 256, 0, 0, 449, 803, 0, 0, 561, + 0, 0, 801, 0, 0, 0, 0, 361, 0, 328, + 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, + 854, 0, 467, 421, 538, 234, 283, 454, 427, 465, + 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, + 563, 262, 401, 547, 507, 556, 588, 227, 259, 415, + 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, + 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, + 452, 431, 432, 570, 583, 571, 573, 574, 214, 502, + 533, 240, 479, 0, 0, 590, 248, 499, 216, 530, + 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, + 0, 257, 410, 855, 856, 255, 591, 756, 555, 221, + 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, + 378, 332, 764, 765, 279, 305, 444, 371, 445, 304, + 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, + 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, + 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, + 536, 548, 560, 566, 567, 569, 575, 576, 577, 578, + 584, 582, 579, 580, 581, 572, 402, 309, 490, 331, + 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, + 0, 0, 814, 802, 727, 818, 729, 815, 816, 724, + 725, 728, 817, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, + 610, 0, 805, 713, 712, 0, 720, 0, 746, 747, + 749, 753, 754, 755, 766, 767, 768, 776, 778, 779, + 777, 780, 781, 782, 785, 786, 787, 788, 783, 784, + 789, 730, 734, 731, 732, 733, 745, 735, 736, 737, + 738, 739, 740, 741, 742, 743, 744, 828, 829, 830, + 831, 832, 833, 759, 763, 762, 760, 761, 757, 758, + 711, 201, 222, 364, 0, 450, 287, 589, 551, 545, + 208, 224, 819, 261, 820, 0, 0, 824, 0, 0, + 0, 826, 825, 0, 827, 793, 792, 0, 0, 821, + 822, 0, 823, 0, 0, 203, 204, 211, 223, 233, + 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, + 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, + 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, + 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, + 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, + 501, 524, 526, 539, 558, 564, 476, 834, 835, 836, + 837, 838, 839, 840, 841, 298, 534, 565, 532, 585, + 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, + 318, 0, 550, 497, 228, 462, 289, 252, 859, 0, + 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, + 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, + 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, + 513, 0, 723, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 411, 0, 0, 0, 0, 710, 0, 0, + 0, 269, 715, 0, 0, 0, 362, 266, 0, 0, + 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, + 272, 268, 251, 315, 381, 423, 503, 417, 722, 366, + 0, 0, 492, 396, 0, 0, 0, 0, 0, 718, + 719, 0, 0, 0, 0, 0, 0, 2187, 0, 321, + 249, 323, 206, 408, 493, 285, 0, 97, 0, 0, + 860, 844, 810, 811, 848, 861, 862, 863, 864, 849, + 0, 239, 850, 851, 246, 852, 0, 809, 750, 752, + 751, 769, 770, 771, 772, 773, 774, 775, 748, 857, + 865, 866, 2188, 264, 319, 271, 263, 518, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 692, 707, 0, 721, 0, 0, 0, + 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 704, 705, 0, 0, + 0, 0, 804, 0, 706, 0, 0, 714, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, + 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, + 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, + 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 296, 0, 397, 256, 0, 0, 449, 803, 0, + 0, 561, 0, 0, 801, 0, 0, 0, 0, 361, + 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, + 0, 0, 854, 0, 467, 421, 538, 234, 283, 454, + 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, + 535, 562, 563, 262, 401, 547, 507, 556, 588, 227, + 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, + 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, + 544, 288, 452, 431, 432, 570, 583, 571, 573, 574, + 214, 502, 533, 240, 479, 0, 0, 590, 248, 499, + 216, 530, 498, 389, 324, 325, 215, 0, 453, 267, + 292, 0, 0, 257, 410, 855, 856, 255, 591, 756, + 555, 221, 0, 554, 403, 522, 531, 390, 379, 220, + 529, 388, 378, 332, 764, 765, 279, 305, 444, 371, + 445, 304, 306, 399, 398, 400, 209, 542, 0, 210, + 0, 494, 543, 592, 235, 236, 238, 0, 278, 282, + 290, 293, 301, 302, 311, 363, 414, 443, 439, 448, + 0, 517, 536, 548, 560, 566, 567, 569, 575, 576, + 577, 578, 584, 582, 579, 580, 581, 572, 402, 309, + 490, 331, 369, 0, 0, 420, 468, 241, 540, 491, + 0, 0, 0, 0, 814, 802, 727, 818, 729, 815, + 816, 724, 725, 728, 817, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 608, 609, 610, 0, 805, 713, 712, 0, 720, 0, + 746, 747, 749, 753, 754, 755, 766, 767, 768, 776, + 778, 779, 777, 780, 781, 782, 785, 786, 787, 788, + 783, 784, 789, 730, 734, 731, 732, 733, 745, 735, + 736, 737, 738, 739, 740, 741, 742, 743, 744, 828, + 829, 830, 831, 832, 833, 759, 763, 762, 760, 761, + 757, 758, 711, 201, 222, 364, 0, 450, 287, 589, + 551, 545, 208, 224, 819, 261, 820, 0, 0, 824, + 0, 0, 0, 826, 825, 0, 827, 793, 792, 0, + 0, 821, 822, 0, 823, 0, 0, 203, 204, 211, + 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, + 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, + 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, + 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, + 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, + 495, 496, 501, 524, 526, 539, 558, 564, 476, 834, + 835, 836, 837, 838, 839, 840, 841, 298, 534, 565, + 532, 585, 559, 435, 374, 0, 0, 549, 0, 377, + 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, + 859, 0, 213, 247, 231, 258, 273, 276, 322, 387, + 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, + 505, 506, 508, 391, 265, 428, 0, 392, 372, 514, + 515, 314, 88, 513, 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 710, 0, 0, 0, 269, 715, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, @@ -3504,7 +3198,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 692, 707, 0, 721, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 704, - 705, 948, 0, 0, 0, 804, 0, 706, 0, 0, + 705, 0, 0, 0, 0, 804, 0, 706, 0, 0, 714, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, @@ -3539,7 +3233,7 @@ var yyAct = [...]int{ 786, 787, 788, 783, 784, 789, 730, 734, 731, 732, 733, 745, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 828, 829, 830, 831, 832, 833, 759, 763, - 762, 760, 761, 757, 758, 711, 201, 222, 364, 0, + 762, 760, 761, 757, 758, 711, 201, 222, 364, 96, 450, 287, 589, 551, 545, 208, 224, 819, 261, 820, 0, 0, 824, 0, 0, 0, 826, 825, 0, 827, 793, 792, 0, 0, 821, 822, 0, 823, 0, 0, @@ -3581,7 +3275,7 @@ var yyAct = [...]int{ 0, 0, 449, 803, 0, 0, 561, 0, 0, 801, 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 854, 0, 467, - 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, + 421, 538, 234, 283, 454, 427, 465, 437, 286, 3551, 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, @@ -3630,13 +3324,13 @@ var yyAct = [...]int{ 315, 381, 423, 503, 417, 722, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 718, 719, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, - 408, 493, 285, 0, 97, 0, 0, 860, 844, 810, + 408, 493, 285, 0, 97, 0, 1569, 860, 844, 810, 811, 848, 861, 862, 863, 864, 849, 0, 239, 850, 851, 246, 852, 0, 809, 750, 752, 751, 769, 770, 771, 772, 773, 774, 775, 748, 857, 865, 866, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, - 0, 707, 0, 721, 0, 0, 0, 274, 0, 0, + 692, 707, 0, 721, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 704, 705, 0, 0, 0, 0, 804, 0, 706, 0, 0, 714, 867, 868, 869, 870, 871, @@ -3690,918 +3384,424 @@ var yyAct = [...]int{ 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, - 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, + 0, 723, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 0, 0, 0, 710, 0, 0, 0, + 269, 715, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, - 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, - 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, + 268, 251, 315, 381, 423, 503, 417, 722, 366, 0, + 0, 492, 396, 0, 0, 0, 0, 0, 718, 719, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, - 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, - 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, - 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, - 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, - 0, 0, 0, 0, 230, 0, 0, 0, 0, 1385, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1394, - 1393, 1395, 1396, 0, 0, 0, 0, 0, 0, 0, -======= -const yyLast = 48185 - -var yyAct = [...]int{ - 1561, 3657, 838, 848, 841, 3668, 2134, 3563, 3626, 711, - 3627, 2183, 3215, 1608, 3529, 2988, 3552, 3584, 2890, 2897, - 3072, 3479, 3463, 3411, 2115, 2939, 934, 2948, 2953, 3245, - 2950, 2949, 2947, 2952, 2951, 3246, 3247, 3461, 2851, 3202, - 2117, 1165, 803, 2496, 2854, 3275, 3451, 2530, 2797, 2968, - 690, 912, 807, 2257, 2905, 42, 693, 2855, 198, 3111, - 1899, 198, 2852, 5, 2967, 1568, 670, 2732, 3280, 3105, - 801, 676, 721, 2970, 2154, 2849, 2138, 3131, 2157, 2556, - 2839, 840, 198, 1953, 2220, 2077, 808, 2630, 2569, 3097, - 2245, 1666, 689, 2225, 2716, 2994, 2631, 198, 2662, 2632, - 691, 1038, 2288, 2581, 2171, 967, 1167, 166, 802, 43, - 41, 2159, 2562, 2548, 2266, 1555, 2158, 2532, 2048, 1968, - 1695, 2082, 1907, 935, 676, 198, 2702, 676, 914, 1138, - 2244, 2227, 2146, 2305, 2623, 2074, 152, 996, 916, 1001, - 919, 1597, 1949, 1577, 1535, 1713, 703, 1417, 2598, 2161, - 1972, 1531, 1833, 1109, 1926, 1829, 1330, 100, 1345, 937, - 975, 971, 1838, 1702, 1004, 1007, 104, 2242, 2047, 1794, - 976, 105, 1002, 2216, 1003, 1596, 952, 1014, 954, 2139, - 698, 1582, 2083, 925, 1401, 1377, 1898, 922, 2044, 1156, - 85, 2217, 1981, 1847, 1659, 1163, 1687, 921, 920, 99, - 107, 170, 130, 128, 129, 135, 136, 1087, 947, 923, - 697, 1425, 1421, 84, 93, 3488, 106, 2655, 98, 3658, - 3203, 2958, 2936, 3514, 680, 2259, 2653, 685, 2259, 2260, - 2261, 942, 946, 2303, 2955, 2685, 2684, 1779, 3195, 616, - 1346, 3610, 619, 3158, 2724, 2725, 2958, 95, 95, 3515, - 137, 3510, 1914, 95, 131, 3509, 1040, 928, 1913, 1912, - 1911, 968, 1910, 95, 119, 1043, 1346, 1909, 659, 1057, - 1058, 1059, 1929, 1062, 1063, 1064, 1065, 2956, 665, 1068, - 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, - 1079, 1080, 1081, 1082, 1083, 1084, 962, 961, 681, 915, - 929, 913, 2956, 2962, 1017, 3250, 1882, 2, 1879, 994, - 683, 993, 3250, 684, 857, 858, 859, 1018, 2112, 2113, - 3605, 936, 2384, 1044, 1047, 1048, 1341, 2528, 2962, 131, - 992, 991, 990, 2835, 2558, 964, 2675, 2292, 985, 1051, - 193, 1362, 2801, 857, 858, 859, 980, 3614, 1356, 3630, - 1060, 3612, 111, 112, 113, 3678, 116, 3510, 3625, 125, - 3648, 2678, 194, 3564, 132, 610, 154, 3077, 3076, 1562, - 3464, 2290, 3613, 2497, 1356, 1919, 3611, 175, 678, 679, - 3019, 2291, 3407, 3406, 3208, 1042, 1041, 3209, 908, 909, - 910, 911, 3249, 659, 918, 3639, 3417, 131, 3608, 3249, - 3228, 2393, 2236, 86, 1332, 3216, 3553, 86, 165, 3560, - 960, 805, 806, 2285, 153, 2959, 3416, 1958, 3589, 3039, - 1676, 86, 949, 950, 88, 2230, 960, 805, 806, 3227, - 1598, 974, 1599, 172, 3493, 2142, 173, 2529, 3570, 2886, - 2959, 2723, 984, 2692, 2693, 986, 989, 2607, 1098, 1099, - 2606, 2390, 3293, 2608, 659, 141, 142, 164, 163, 192, - 1352, 2887, 2888, 1344, 2177, 1378, 2391, 3570, 2178, 2179, - 659, 1128, 1145, 2708, 1147, 1839, 1359, 86, 1360, 1361, - 1101, 95, 3594, 2701, 660, 95, 1352, 3016, 1379, 1380, - 1381, 1382, 1383, 1384, 1385, 1387, 1386, 1388, 1389, 95, - 3592, 2572, 1891, 1892, 987, 1133, 1134, 1331, 1839, 3598, - 3599, 1160, 1144, 1146, 1116, 906, 905, 2907, 2908, 1117, - 1116, 2656, 3480, 2619, 3593, 1117, 2573, 1115, 3027, 1114, - 2114, 1129, 3025, 1086, 2893, 1092, 3108, 1122, 1342, 1890, - 1837, 2766, 2382, 989, 659, 981, 3631, 2196, 2195, 2990, - 2565, 2566, 983, 982, 659, 95, 1894, 673, 158, 139, - 161, 146, 138, 677, 159, 160, 671, 3632, 1594, 2703, - 1881, 176, 2229, 1539, 2995, 3439, 2267, 3440, 2663, 2894, - 182, 147, 2688, 659, 2983, 1540, 2142, 2385, 2386, 2388, - 2387, 2306, 2984, 3660, 1795, 150, 148, 143, 144, 145, - 149, 987, 2359, 2896, 2360, 1158, 2361, 140, 1149, 660, - 2373, 1769, 198, 1135, 198, 1137, 151, 198, 198, 2711, - 2311, 2891, 1142, 1136, 1061, 2906, 1143, 1131, 1132, 1130, - 1159, 1094, 3197, 2140, 2141, 1123, 1148, 2909, 2907, 2908, - 953, 3196, 2362, 988, 2331, 2892, 2330, 2991, 1067, 2334, - 2335, 1066, 2310, 2332, 2333, 1770, 2992, 1771, 676, 2336, - 676, 676, 3391, 1537, 2308, 3606, 1027, 2270, 1141, 617, - 660, 1025, 997, 3254, 3193, 2312, 998, 2155, 2898, 998, - 676, 198, 1036, 3672, 1035, 1034, 660, 1033, 1543, 1032, - 989, 1085, 1031, 1680, 2309, 1030, 1029, 1024, 1037, 2800, - 1351, 1348, 1349, 1350, 1355, 1357, 1354, 2909, 1353, 1405, - 167, 193, 2767, 972, 3679, 972, 3637, 970, 1347, 1016, - 1010, 972, 612, 1009, 1830, 1392, 1351, 1348, 1349, 1350, - 1355, 1357, 1354, 2243, 1353, 132, 963, 957, 955, 1392, - 988, 948, 1126, 907, 1347, 2712, 2906, 1701, 175, 1403, - 2296, 2295, 963, 957, 955, 1089, 1826, 3487, 2909, 2654, - 660, 1333, 2391, 1413, 1054, 2533, 2535, 1091, 2929, 1090, - 660, 1150, 1151, 1153, 2687, 1016, 1112, 2715, 1118, 1119, - 1120, 1121, 1674, 1016, 2140, 2141, 973, 995, 3192, 1673, - 2621, 2612, 2289, 2690, 618, 1672, 162, 2673, 1595, 660, - 1395, 1396, 1397, 1398, 172, 1161, 1162, 173, 854, 854, - 1409, 2728, 1827, 1028, 854, 3476, 1046, 1670, 1026, 2657, - 127, 1015, 1009, 615, 1323, 2405, 1045, 1009, 1012, 1013, - 192, 972, 3566, 2960, 2961, 1006, 1010, 614, 3109, 609, - 3145, 1843, 2700, 1808, 3127, 2699, 2964, 2287, 2603, 2233, - 3017, 1405, 1399, 1324, 1325, 1700, 1005, 155, 2960, 2961, - 156, 3566, 2568, 1053, 1088, 3565, 1781, 1780, 1782, 1783, - 1784, 2964, 3156, 3157, 1843, 89, 2677, 1015, 3226, 2505, - 2895, 1840, 1841, 1844, 1842, 1015, 1961, 988, 1586, 2234, - 168, 1009, 1012, 1013, 3565, 972, 2232, 180, 1494, 1006, - 1010, 1103, 3670, 2392, 2563, 3671, 1529, 3669, 198, 1393, - 1394, 3248, 676, 676, 1840, 1841, 1844, 1842, 3248, 94, - 2676, 1563, 1565, 94, 2184, 1392, 2718, 198, 1389, 1982, - 2235, 2717, 2534, 1423, 1340, 1424, 1427, 94, 188, 1544, - 2231, 2718, 176, 1983, 2885, 1125, 2717, 676, 931, 1100, - 198, 182, 956, 3597, 3061, 1157, 1127, 1097, 1113, 1799, - 3501, 1039, 676, 3188, 1530, 2752, 1546, 1547, 956, 198, - 1550, 3121, 1139, 2307, 1016, 916, 1848, 1016, 1111, 1903, - 1823, 1600, 169, 174, 171, 177, 178, 179, 181, 183, - 184, 185, 186, 94, 1973, 1973, 2422, 3596, 187, 189, - 190, 191, 2646, 1360, 1361, 1139, 3640, 676, 2347, 2343, - 2345, 2346, 2344, 2350, 2351, 1361, 1093, 2348, 2349, 2284, - 1405, 1500, 1501, 1502, 1503, 1504, 676, 676, 1530, 676, - 3289, 676, 676, 3163, 676, 676, 676, 676, 676, 676, - 1548, 2286, 3162, 104, 2274, 1549, 2282, 1405, 105, 1710, - 1405, 676, 1405, 198, 1931, 1536, 1810, 1362, 1809, 1523, - 1707, 1813, 1814, 2899, 1709, 1811, 1812, 2903, 1932, 1390, - 1391, 1930, 1980, 198, 2902, 1699, 1015, 107, 1052, 1015, - 1152, 167, 1049, 1027, 1019, 1009, 676, 1742, 198, 1021, - 1745, 2279, 1747, 1022, 1020, 1677, 1678, 1679, 1384, 1385, - 1387, 1386, 1388, 1389, 676, 123, 198, 1796, 2904, 1797, - 1693, 1764, 1798, 2900, 2022, 1362, 2279, 3633, 2901, 1140, - 1564, 1110, 120, 1849, 1025, 1362, 198, 3146, 1545, 1533, - 2283, 2412, 913, 198, 1567, 1705, 915, 1686, 927, 3674, - 3531, 2411, 198, 198, 198, 198, 198, 198, 198, 198, - 198, 676, 1140, 3469, 1746, 2281, 3680, 3399, 1591, 1592, - 1815, 3398, 1754, 1755, 1362, 1921, 1923, 1924, 1760, 1761, - 1715, 3222, 1716, 3223, 1718, 1720, 3389, 1704, 1724, 1726, - 1728, 1730, 1732, 121, 3239, 3532, 3238, 1669, 3170, 1922, - 1703, 1703, 1359, 3169, 1360, 1361, 1683, 3159, 3470, 2937, - 1789, 1696, 2397, 2398, 2399, 1684, 1682, 1787, 1362, 3420, - 1835, 2014, 2003, 2004, 2005, 2006, 2016, 2007, 2008, 2009, - 2021, 2017, 2010, 2011, 2018, 2019, 2020, 2012, 2013, 2015, - 1562, 2925, 2147, 2148, 1750, 2628, 2627, 1978, 2626, 2733, - 857, 858, 859, 3681, 1850, 1851, 1979, 2239, 3644, 1562, - 1359, 1800, 1360, 1361, 1790, 122, 1831, 1776, 1855, 2754, - 1359, 168, 1360, 1361, 1788, 1862, 1863, 1864, 180, 1774, - 1773, 1786, 1772, 1096, 1362, 1102, 1852, 1762, 1104, 1106, - 1756, 1753, 1362, 1856, 1752, 1858, 1859, 1860, 1861, 1751, - 2079, 1722, 1865, 1675, 2076, 131, 992, 991, 990, 1359, - 2079, 1360, 1361, 2078, 1877, 1878, 1108, 1880, 1107, 188, - 2318, 2314, 2316, 2317, 2315, 2321, 2322, 852, 1854, 2319, - 2320, 1775, 2987, 2735, 1327, 676, 676, 1379, 1380, 1381, - 1382, 1383, 1384, 1385, 1387, 1386, 1388, 1389, 676, 1876, - 3153, 665, 1335, 1359, 1875, 1360, 1361, 198, 2610, 665, - 2255, 2254, 665, 169, 174, 171, 177, 178, 179, 181, - 183, 184, 185, 186, 2253, 2252, 3642, 1562, 1362, 187, - 189, 190, 191, 1818, 1362, 1816, 1817, 1594, 1821, 1822, - 2251, 2250, 1819, 1820, 1016, 2554, 3659, 3120, 3634, 42, - 2449, 3496, 42, 3034, 3495, 676, 3473, 1956, 1956, 2745, - 2744, 2743, 101, 3472, 2737, 1405, 2741, 3471, 2736, 1359, - 2734, 1360, 1361, 102, 101, 2739, 676, 1359, 3394, 1360, - 1361, 103, 1405, 1976, 2738, 102, 1934, 1977, 1936, 1937, - 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, - 1948, 1571, 2740, 2742, 3378, 1403, 1362, 676, 676, 1382, - 1383, 1384, 1385, 1387, 1386, 1388, 1389, 2419, 1925, 1562, - 1927, 2040, 1974, 3377, 1803, 1529, 1801, 1802, 1562, 1806, - 1807, 3621, 1562, 1804, 1805, 1954, 1954, 1935, 1957, 3288, - 1562, 1562, 110, 1358, 1562, 3489, 1015, 1572, 2459, 2072, - 3286, 1019, 1009, 109, 3235, 108, 1021, 2087, 1358, 1562, - 1022, 1020, 3224, 1359, 1362, 1360, 1361, 2036, 1362, 1359, - 1528, 1360, 1361, 1527, 2101, 2554, 3559, 1362, 1887, 1888, - 1928, 1023, 1575, 1530, 85, 1378, 1904, 85, 2457, 1526, - 2418, 1563, 2108, 2554, 3539, 3425, 2084, 3167, 193, 3152, - 198, 2554, 3535, 3522, 1562, 3424, 676, 2461, 1379, 1380, - 1381, 1382, 1383, 1384, 1385, 1387, 1386, 1388, 1389, 3001, - 1933, 2999, 132, 1562, 3382, 2131, 3206, 3486, 3381, 198, - 3402, 1562, 676, 2996, 2126, 175, 2127, 2554, 3390, 3206, - 1562, 1359, 198, 1360, 1361, 2993, 676, 1960, 1574, 2087, - 198, 2928, 198, 1562, 198, 198, 2927, 1967, 1969, 2075, - 2706, 2086, 1562, 1362, 110, 2637, 2034, 2554, 3204, 676, - 2624, 1590, 2279, 1562, 2570, 109, 2045, 108, 2089, 2090, - 2193, 1525, 1984, 1985, 1986, 1987, 103, 2301, 2084, 1362, - 1607, 172, 3125, 1562, 173, 2300, 1998, 2470, 1562, 1359, - 2137, 1360, 1361, 1359, 2165, 1360, 1361, 2085, 1362, 2918, - 2917, 2410, 1359, 104, 1360, 1361, 2121, 192, 105, 1366, - 1367, 1368, 1369, 1370, 1371, 1372, 1364, 2120, 676, 2240, - 1883, 2130, 2915, 2916, 104, 2913, 2914, 1362, 2088, 105, - 1845, 2091, 2092, 103, 2109, 1562, 2578, 3576, 1562, 3214, - 2045, 2913, 2912, 2086, 1785, 676, 2202, 2203, 2204, 2205, - 1362, 676, 2578, 1562, 2664, 2197, 1777, 2198, 2199, 2200, - 2201, 1767, 2188, 2187, 1748, 2169, 2391, 2686, 1665, 2667, - 2660, 2661, 928, 2208, 2209, 2210, 2211, 2119, 2599, 1362, - 2107, 1763, 3574, 1562, 109, 2129, 2554, 2553, 1359, 2152, - 1360, 1361, 1562, 2222, 2268, 2550, 2191, 1759, 676, 1793, - 2132, 2415, 1562, 676, 2599, 2228, 1758, 676, 676, 1757, - 103, 3572, 1562, 2642, 1359, 2150, 1360, 1361, 1362, 176, - 2174, 2175, 2173, 962, 961, 1573, 1362, 1155, 182, 2190, - 1154, 2189, 2570, 1359, 3140, 1360, 1361, 1853, 1959, 1562, - 2880, 2600, 1665, 1664, 1857, 198, 1606, 1605, 2265, 2238, - 2391, 2602, 198, 1358, 1358, 1868, 1869, 1870, 1871, 1872, - 1873, 1874, 1359, 3091, 1360, 1361, 2577, 2600, 2415, 2280, - 2273, 2223, 2850, 2276, 2192, 2277, 3122, 2391, 198, 198, - 2219, 3527, 198, 3120, 198, 1359, 2237, 1360, 1361, 2241, - 198, 3500, 2554, 2249, 2212, 2214, 2215, 2940, 2578, 3081, - 198, 2293, 3448, 1562, 3120, 2915, 1017, 198, 2223, 2272, - 3087, 2294, 2271, 2823, 1359, 2275, 1360, 1361, 95, 1018, - 2176, 2578, 2415, 2470, 2446, 1362, 2445, 2279, 2279, 1703, - 2262, 2145, 1566, 2110, 1362, 1959, 1905, 198, 1889, 1825, - 1593, 1000, 999, 2297, 123, 3602, 676, 2298, 2299, 1378, - 3542, 3413, 1374, 1359, 1375, 1360, 1361, 1569, 167, 3379, - 1378, 1359, 2727, 1360, 1361, 2304, 3300, 3187, 1376, 1390, - 1391, 1373, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1387, - 1386, 1388, 1389, 1379, 1380, 1381, 1382, 1383, 1384, 1385, - 1387, 1386, 1388, 1389, 1380, 1381, 1382, 1383, 1384, 1385, - 1387, 1386, 1388, 1389, 3184, 3165, 3044, 3043, 3654, 3446, - 1562, 2408, 1405, 1667, 2087, 2413, 2221, 3504, 2416, 3635, - 2417, 2985, 95, 2942, 1362, 2424, 2938, 2668, 2218, 2426, - 2427, 2428, 2401, 2365, 2403, 2213, 2207, 2206, 1792, 2434, - 2435, 2436, 2437, 2438, 2439, 2440, 2441, 2442, 2443, 2371, - 1362, 3171, 2407, 2409, 2375, 2376, 1698, 1694, 1908, 2378, - 1359, 1661, 1360, 1361, 1362, 124, 2634, 1927, 2379, 1359, - 1362, 1360, 1361, 2633, 1092, 2450, 2451, 2452, 2453, 2454, - 2989, 2456, 1362, 2402, 3414, 2458, 3132, 3133, 1362, 2463, - 2464, 2236, 2465, 2124, 3652, 2468, 2381, 2469, 3628, 3508, - 3434, 2472, 3172, 3173, 3174, 2476, 1362, 1885, 3059, 2481, - 2482, 2483, 2484, 3135, 2389, 2934, 3415, 2933, 2086, 2932, - 2850, 2634, 2495, 3138, 2498, 2499, 2647, 1928, 2366, 3137, - 2869, 3175, 2501, 2503, 3055, 2400, 2868, 2136, 168, 2506, - 2507, 2508, 2509, 2510, 1738, 180, 2128, 2872, 3443, 1562, - 2517, 2518, 2873, 2519, 3429, 1562, 2522, 2524, 2131, 1359, - 2526, 1360, 1361, 198, 2085, 1570, 3096, 1562, 3468, 1886, - 2538, 198, 2421, 3484, 3126, 3279, 1956, 1362, 3176, 3177, - 3178, 676, 2828, 2429, 2870, 1359, 188, 1360, 1361, 2871, - 3089, 1562, 676, 2827, 3281, 1739, 1740, 1741, 3113, 1359, - 2444, 1360, 1361, 932, 3116, 1359, 3112, 1360, 1361, 2537, - 2874, 933, 2587, 2588, 1362, 2837, 198, 1359, 2911, 1360, - 1361, 198, 1824, 1359, 904, 1360, 1361, 2455, 2617, 2638, - 169, 174, 171, 177, 178, 179, 181, 183, 184, 185, - 186, 1359, 1056, 1360, 1361, 1982, 187, 189, 190, 191, - 1378, 1055, 2404, 3010, 1954, 2633, 2539, 42, 2540, 1983, - 2542, 3086, 1562, 2721, 2555, 2574, 2592, 686, 3270, 2594, - 3269, 1326, 1362, 1379, 1380, 1381, 1382, 1383, 1384, 1385, - 1387, 1386, 1388, 1389, 2674, 132, 1734, 3118, 103, 676, - 2147, 2148, 2593, 2149, 3666, 198, 2551, 2930, 3084, 1562, - 1362, 2153, 198, 2156, 2564, 2527, 1908, 2369, 2840, 2842, - 1536, 101, 1359, 3581, 1360, 1361, 676, 2843, 3268, 1362, - 2659, 3485, 102, 676, 1530, 2620, 2622, 3409, 2910, 1362, - 2552, 101, 676, 1735, 1736, 1737, 1362, 2547, 103, 2567, - 1362, 2597, 102, 2591, 2613, 2133, 940, 941, 1405, 1359, - 1362, 1360, 1361, 2358, 2357, 1362, 3049, 1562, 2356, 2683, - 3098, 198, 198, 198, 198, 198, 1362, 2228, 2604, 2601, - 1378, 2355, 2354, 2611, 2826, 2395, 938, 2353, 2614, 944, - 944, 2636, 2825, 3456, 3032, 1562, 2639, 2640, 2681, 2352, - 2342, 2341, 2625, 1379, 1380, 1381, 1382, 1383, 1384, 1385, - 1387, 1386, 1388, 1389, 3386, 2340, 2339, 1359, 2635, 1360, - 1361, 2338, 2337, 2525, 1562, 2329, 2328, 2327, 198, 198, - 2523, 1562, 2326, 2643, 3041, 2644, 2325, 2648, 2649, 2650, - 2324, 2323, 1362, 108, 3040, 1359, 1362, 1360, 1361, 2502, - 1562, 1362, 3455, 2680, 198, 2669, 2670, 3437, 110, 1686, - 2485, 1562, 109, 1362, 1359, 3287, 1360, 1361, 2679, 109, - 2570, 108, 3285, 3284, 1359, 676, 1360, 1361, 3277, 3276, - 103, 1359, 3185, 1360, 1361, 1359, 1362, 1360, 1361, 3117, - 2756, 2757, 2758, 2759, 2760, 1359, 3115, 1360, 1361, 110, - 1359, 2943, 1360, 1361, 2263, 1681, 939, 110, 3258, 2765, - 109, 1359, 108, 1360, 1361, 2704, 1908, 2731, 109, 3106, - 1362, 2705, 676, 2313, 3656, 3655, 2477, 1562, 2707, 2550, - 2768, 3189, 2447, 2122, 1587, 3037, 1579, 2709, 3655, 2746, - 114, 115, 3656, 3474, 2710, 3151, 930, 2521, 2713, 2363, - 2364, 123, 1902, 2368, 3, 10, 2761, 2729, 97, 1900, - 676, 2372, 9, 1, 2719, 1105, 2730, 2720, 676, 1901, - 2520, 2374, 8, 1836, 1329, 1328, 3155, 1359, 2377, 1360, - 1361, 1359, 3591, 1360, 1361, 633, 1359, 2111, 1360, 1361, - 2583, 2586, 2587, 2588, 2584, 2749, 2585, 2589, 1359, 676, - 1360, 1361, 1534, 2802, 3629, 2629, 1362, 2807, 2380, 3587, - 2804, 3588, 1778, 198, 1768, 2747, 3217, 676, 2046, 3410, - 2946, 1359, 2269, 1360, 1361, 3183, 2748, 2226, 1008, 157, - 2185, 676, 2186, 3555, 118, 1405, 2859, 965, 676, 676, - 1405, 198, 198, 198, 198, 198, 117, 1011, 1124, 2776, - 2264, 3207, 2618, 198, 2877, 1359, 2847, 1360, 1361, 198, - 2194, 198, 2770, 2165, 198, 198, 198, 1612, 1610, 2075, - 2807, 2075, 1611, 1609, 1614, 2853, 2862, 1613, 1362, 3018, - 2853, 2879, 2448, 3060, 1893, 2778, 2806, 2780, 919, 2831, - 2516, 2165, 2165, 2165, 2165, 2165, 2803, 2830, 2805, 672, - 2590, 666, 195, 2791, 2792, 2793, 2794, 1601, 1580, 2818, - 198, 2165, 3073, 1050, 2165, 2786, 2787, 2788, 2789, 2790, - 2856, 2829, 623, 676, 2919, 2302, 1405, 2832, 629, 1410, - 1884, 676, 2844, 2845, 2824, 2966, 198, 2881, 2605, 959, - 2882, 1359, 2822, 1360, 1361, 921, 920, 951, 2123, 2541, - 198, 2864, 2865, 2875, 2867, 2863, 958, 3387, 2866, 2858, - 3110, 1362, 2515, 2836, 2838, 2557, 2945, 2883, 2841, 2834, - 1835, 2819, 2820, 2821, 3467, 198, 104, 3278, 198, 3540, - 2889, 105, 2861, 2615, 1576, 3080, 2420, 3012, 1971, 2922, - 1362, 2921, 2920, 1400, 2162, 2923, 2924, 3253, 1920, 695, - 1362, 694, 692, 2543, 2571, 1365, 2974, 3029, 3030, 3031, - 1362, 3033, 3035, 1359, 842, 1360, 1361, 2531, 2228, 1362, - 1588, 2965, 2582, 1362, 2580, 3042, 2944, 2579, 2367, 2170, - 3046, 3047, 3048, 3050, 3051, 3052, 3053, 3134, 2980, 3054, - 3130, 3056, 3057, 3058, 2973, 2514, 3062, 3063, 3064, 3065, - 3066, 3067, 3068, 3069, 3070, 3071, 3583, 2164, 676, 2160, - 2997, 2998, 3006, 3000, 3078, 3002, 3003, 3082, 3005, 3083, - 3085, 2549, 3088, 3090, 2513, 3092, 3093, 3094, 3095, 793, - 3013, 792, 3023, 3101, 2512, 3020, 3021, 198, 3022, 3014, - 704, 3024, 2596, 3026, 2511, 3028, 1359, 696, 1360, 1361, - 688, 3075, 791, 2500, 790, 3148, 2972, 2494, 3079, 3567, - 2583, 2586, 2587, 2588, 2584, 2689, 2585, 2589, 3123, 3124, - 3132, 3133, 3128, 1362, 2986, 1359, 2691, 1360, 1361, 2616, - 2982, 1343, 1362, 3008, 3009, 1359, 1362, 1360, 1361, 1552, - 1560, 1556, 682, 198, 979, 1359, 3015, 1360, 1361, 3491, - 2394, 3038, 1551, 2001, 1359, 1557, 1360, 1361, 1359, 1362, - 1360, 1361, 2002, 1362, 3498, 1363, 2645, 2954, 3201, 3102, - 3099, 3100, 198, 1362, 3107, 2935, 2665, 2256, 3104, 3114, - 1662, 1663, 1559, 70, 1558, 46, 3462, 3119, 3528, 789, - 786, 1362, 198, 2165, 1418, 198, 198, 198, 3255, 1362, - 3256, 3257, 3139, 2798, 3136, 676, 676, 2493, 1362, 3190, - 3191, 3129, 2799, 3511, 3141, 1362, 2492, 3512, 785, 3142, - 2491, 3513, 2029, 1339, 2974, 1362, 3149, 3150, 3205, 1336, - 3143, 3144, 2694, 2695, 2696, 2697, 2698, 3604, 1895, 96, - 3211, 3212, 37, 2490, 1560, 1556, 36, 2489, 35, 3166, - 34, 3168, 676, 676, 676, 676, 1362, 2488, 1359, 1557, - 1360, 1361, 2973, 1362, 33, 3160, 3161, 1359, 27, 1360, - 1361, 1359, 1362, 1360, 1361, 2487, 3225, 1362, 26, 3229, - 25, 1362, 24, 2486, 1553, 1554, 1559, 1362, 1558, 1908, - 2714, 23, 2480, 20, 1359, 30, 1360, 1361, 1359, 2479, - 1360, 1361, 22, 21, 19, 18, 3240, 3213, 1359, 2478, - 1360, 1361, 2957, 3624, 3665, 2722, 126, 55, 3194, 52, - 50, 3244, 3198, 3199, 3200, 3234, 1359, 134, 1360, 1361, - 133, 53, 49, 3252, 1359, 1095, 1360, 1361, 47, 32, - 2475, 3259, 31, 1359, 17, 1360, 1361, 2474, 16, 15, - 1359, 1362, 1360, 1361, 14, 13, 2473, 12, 3230, 11, - 1359, 2471, 1360, 1361, 198, 2467, 7, 6, 40, 39, - 29, 2466, 38, 1362, 28, 4, 2652, 2258, 0, 0, - 0, 0, 0, 1405, 0, 0, 3273, 0, 676, 3251, - 676, 1359, 0, 1360, 1361, 0, 0, 0, 1359, 0, - 1360, 1361, 0, 0, 1956, 0, 0, 1359, 0, 1360, - 1361, 0, 1359, 0, 1360, 1361, 1359, 1578, 1360, 1361, - 0, 0, 1359, 2853, 1360, 1361, 0, 0, 0, 853, - 3283, 3296, 87, 0, 3274, 2462, 0, 42, 3282, 0, - 3292, 3298, 0, 3290, 0, 3294, 0, 0, 0, 1362, - 676, 0, 0, 1362, 3388, 0, 1668, 2460, 0, 0, - 0, 0, 3401, 198, 0, 0, 676, 3242, 3306, 2856, - 0, 3408, 0, 2856, 0, 0, 0, 0, 0, 676, - 0, 0, 1954, 0, 3302, 0, 1359, 0, 1360, 1361, - 3303, 3304, 3418, 3419, 0, 3421, 0, 3422, 3423, 3385, - 0, 3400, 3426, 3427, 3428, 3383, 3430, 3433, 1359, 3384, - 1360, 1361, 0, 0, 1956, 917, 3405, 87, 3412, 3404, - 0, 0, 3442, 3444, 3445, 3447, 3449, 3450, 3452, 0, - 676, 0, 0, 2425, 676, 676, 917, 2414, 0, 0, - 3392, 3431, 3432, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 978, 0, 0, 3395, 3396, 3397, - 0, 0, 0, 676, 3438, 3436, 3482, 3478, 3441, 0, - 0, 2931, 0, 0, 0, 0, 0, 0, 3457, 3458, - 3460, 3459, 0, 0, 1359, 3477, 1360, 1361, 1359, 1846, - 1360, 1361, 1954, 0, 3435, 0, 0, 2969, 3475, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2981, 0, 0, 0, 3481, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3004, 0, 0, 3007, - 2856, 0, 676, 0, 0, 0, 3483, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 198, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 676, 198, 0, 0, - 3502, 0, 0, 0, 0, 0, 0, 0, 0, 3466, - 0, 0, 3507, 0, 0, 0, 3494, 0, 0, 0, - 0, 0, 3497, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3523, 0, 0, 0, 0, 0, 3524, 3525, - 0, 0, 42, 0, 0, 0, 0, 676, 0, 0, - 3499, 0, 0, 0, 0, 0, 0, 1405, 3490, 676, - 3536, 0, 3517, 0, 0, 3518, 0, 0, 3103, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3526, 0, - 0, 0, 0, 676, 676, 0, 3561, 3562, 3538, 0, - 0, 0, 0, 3533, 3543, 0, 0, 2853, 3568, 0, - 3571, 3573, 3575, 3569, 3554, 676, 3546, 3551, 0, 3548, - 3547, 3545, 3550, 3549, 0, 0, 0, 0, 42, 198, - 676, 0, 3412, 3556, 0, 3603, 3541, 0, 0, 0, - 3579, 0, 0, 0, 0, 0, 0, 0, 3600, 3590, - 3595, 3582, 0, 0, 0, 0, 0, 0, 0, 3568, - 0, 0, 3609, 3164, 3569, 3607, 1915, 1916, 1917, 1918, - 0, 3506, 0, 676, 3620, 0, 0, 0, 0, 3516, - 0, 0, 0, 3179, 0, 3618, 3180, 3181, 3182, 3623, - 0, 0, 0, 0, 0, 676, 0, 0, 0, 3636, - 0, 0, 0, 0, 0, 0, 3641, 3643, 3645, 0, - 3638, 1413, 676, 0, 676, 1962, 1963, 0, 1956, 0, - 1965, 0, 944, 944, 1970, 3649, 3653, 3651, 1975, 3647, - 3646, 0, 0, 0, 0, 3568, 0, 3664, 3661, 0, - 3569, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, - 1997, 3675, 3673, 3676, 3677, 2023, 2024, 2025, 2026, 2027, - 2028, 2030, 3667, 2035, 0, 2037, 2038, 2039, 0, 2041, - 2042, 2043, 1956, 2049, 2050, 2051, 2052, 2053, 2054, 2055, - 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, - 2066, 2067, 2068, 2069, 2070, 2071, 1954, 2073, 3650, 2080, - 2081, 944, 3683, 944, 944, 944, 944, 944, 3684, 3685, - 3432, 0, 0, 2093, 2094, 2095, 2096, 2097, 2098, 2099, - 2100, 0, 2102, 2103, 2104, 2105, 2106, 0, 0, 0, - 0, 855, 0, 2079, 0, 0, 856, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1955, 0, 0, 0, - 1954, 0, 3682, 0, 0, 0, 0, 0, 0, 0, - 944, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2143, 2144, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2182, 0, - 0, 0, 0, 0, 0, 1164, 0, 1164, 1164, 862, - 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, - 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, - 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, - 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, - 903, 0, 0, 0, 0, 917, 1402, 1407, 1408, 2224, - 1411, 0, 1412, 1414, 1415, 1416, 0, 1419, 1420, 1422, - 1422, 0, 1422, 1426, 1426, 1428, 1429, 1430, 1431, 1432, - 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, - 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, - 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, - 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, - 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, - 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, - 0, 0, 0, 0, 1493, 0, 1495, 1496, 1497, 1498, - 1499, 0, 0, 0, 0, 665, 0, 0, 0, 1426, - 1426, 1426, 1426, 1426, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1505, 1506, 1507, 1508, 1509, 1510, 1511, - 1512, 1513, 1514, 1515, 1516, 1517, 1518, 0, 3324, 3326, - 3325, 3343, 3344, 3345, 3346, 3347, 3348, 3349, 743, 659, - 0, 0, 0, 0, 1532, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 656, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1538, 3503, 0, - 0, 0, 0, 917, 0, 0, 0, 917, 0, 0, - 0, 0, 917, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 637, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 635, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 837, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, - 0, 650, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 645, 0, 0, 0, - 0, 2423, 0, 0, 0, 0, 0, 0, 642, 648, - 644, 0, 2430, 2431, 2432, 2433, 0, 0, 0, 0, - 655, 0, 0, 0, 0, 0, 675, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 660, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1418, 3330, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3338, 3339, 0, 0, 3622, 622, 675, - 624, 638, 675, 662, 0, 661, 628, 1629, 626, 630, - 639, 631, 0, 625, 0, 636, 0, 0, 627, 640, - 641, 647, 651, 652, 653, 649, 646, 654, 620, 621, - 643, 0, 634, 663, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1164, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 809, 0, 722, 813, 724, 810, 811, - 0, 720, 723, 812, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1578, 0, 0, 0, 0, 0, 741, - 742, 3323, 3327, 3328, 3329, 3340, 3341, 3342, 3350, 3352, - 774, 3351, 3353, 3354, 3355, 3358, 3359, 3360, 3361, 3356, - 3357, 3362, 3307, 3311, 3308, 3309, 3310, 3322, 3312, 3313, - 3314, 3315, 3316, 3317, 3318, 3319, 3320, 3321, 3363, 3364, - 3365, 3366, 3367, 3368, 3333, 3337, 3336, 3334, 3335, 3331, - 3332, 1617, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 814, 0, 815, 0, 0, 819, 0, - 0, 0, 821, 820, 0, 822, 788, 787, 0, 0, - 816, 817, 0, 818, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1164, 1164, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1630, 87, 0, 0, 87, - 0, 0, 0, 0, 0, 0, 0, 664, 3369, 3370, - 3371, 3372, 3373, 3374, 3375, 3376, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 657, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 658, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1643, 1646, 1647, 1648, 1649, 1650, 1651, - 0, 1652, 1653, 1655, 1656, 1654, 1657, 1658, 1631, 1632, - 1633, 1634, 1615, 1616, 1644, 0, 1618, 0, 1619, 1620, - 1621, 1622, 1623, 1624, 1625, 1626, 1627, 0, 1629, 1628, - 1635, 1636, 1637, 1638, 2726, 1639, 1640, 1641, 1642, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 944, 0, 0, 2750, 2751, 0, 0, - 2753, 0, 0, 2755, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2762, 2763, 2764, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2769, 0, 0, 2771, 2772, - 2773, 0, 0, 0, 2774, 2775, 0, 0, 2049, 2777, - 0, 0, 2779, 0, 0, 2781, 2782, 2783, 2784, 0, - 0, 0, 0, 2785, 2049, 2049, 2049, 2049, 2049, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 944, 0, 0, 0, 0, 0, 0, 2808, - 2809, 2810, 2811, 2812, 2813, 0, 0, 0, 2814, 2815, - 0, 2816, 0, 2817, 193, 0, 0, 0, 0, 0, - 0, 0, 1617, 0, 0, 2658, 0, 0, 0, 0, - 0, 2163, 0, 0, 0, 0, 0, 1645, 132, 0, - 154, 0, 0, 193, 0, 0, 0, 0, 0, 0, - 0, 175, 0, 0, 1685, 0, 0, 0, 2848, 0, - 0, 0, 0, 0, 0, 0, 0, 132, 0, 154, - 0, 0, 0, 675, 1322, 675, 675, 0, 0, 0, - 175, 0, 165, 2878, 0, 0, 0, 0, 153, 0, - 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 978, 1630, 172, 0, 0, - 173, 165, 0, 0, 0, 0, 0, 153, 0, 0, - 0, 0, 0, 0, 1404, 0, 0, 0, 0, 1689, - 1690, 164, 163, 192, 0, 0, 172, 0, 978, 173, - 0, 0, 0, 0, 2941, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1689, 1690, - 164, 163, 192, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1643, 1646, 1647, 1648, 1649, 1650, - 1651, 0, 1652, 1653, 1655, 1656, 1654, 1657, 1658, 1631, - 1632, 1633, 1634, 1615, 1616, 1644, 0, 1618, 0, 1619, - 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 0, 0, - 1628, 1635, 1636, 1637, 1638, 0, 1639, 1640, 1641, 1642, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 158, 1691, 161, 0, 1688, 0, 159, 160, - 0, 0, 3036, 0, 0, 176, 0, 0, 0, 0, - 0, 0, 0, 0, 182, 0, 3045, 0, 0, 0, - 0, 158, 1691, 161, 0, 1688, 1404, 159, 160, 0, - 0, 0, 0, 0, 176, 0, 0, 0, 0, 0, - 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 675, 675, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2396, - 0, 0, 675, 0, 0, 0, 0, 0, 1645, 0, - 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, - 0, 0, 0, 0, 167, 0, 0, 0, 1660, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2406, 1671, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 167, 0, 0, 0, 0, 0, 0, - 0, 0, 675, 0, 1697, 0, 3186, 0, 0, 0, - 0, 0, 1706, 0, 0, 1404, 1708, 0, 0, 1711, - 1712, 675, 675, 0, 675, 0, 675, 675, 0, 675, - 675, 675, 675, 675, 675, 0, 0, 0, 0, 3210, - 0, 0, 1404, 1743, 1744, 1404, 675, 1404, 0, 1749, - 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 794, 0, 0, 162, - 0, 675, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1828, 0, 0, 675, - 3231, 0, 3232, 0, 2504, 3233, 0, 0, 3236, 3237, - 0, 155, 0, 0, 156, 0, 0, 3241, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3243, 0, 0, - 0, 0, 0, 0, 0, 0, 2536, 0, 0, 0, - 155, 0, 0, 156, 168, 674, 675, 0, 0, 3260, - 0, 180, 3261, 917, 3262, 3263, 0, 3264, 0, 3265, - 0, 0, 0, 0, 3266, 0, 0, 0, 0, 0, - 0, 0, 0, 168, 2575, 2576, 0, 0, 0, 0, - 180, 0, 0, 2163, 0, 0, 917, 2595, 0, 3291, - 0, 0, 188, 0, 0, 0, 0, 0, 969, 0, - 3299, 977, 0, 3301, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3305, 0, 0, 0, 0, - 0, 188, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3380, 0, 0, 169, 174, 171, 177, - 178, 179, 181, 183, 184, 185, 186, 0, 0, 0, - 0, 0, 187, 189, 190, 191, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 169, 174, 171, 177, 178, - 179, 181, 183, 184, 185, 186, 0, 0, 0, 0, - 0, 187, 189, 190, 191, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2672, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 675, 675, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 675, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3465, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 95, 0, 0, 855, 0, - 0, 0, 843, 856, 857, 858, 859, 844, 0, 0, - 845, 846, 0, 847, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 852, 860, 861, - 675, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1404, 0, 0, 0, 0, 0, 0, 0, 0, 1964, - 0, 675, 0, 0, 0, 0, 0, 1404, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2975, 2976, 0, 0, 0, 0, - 0, 0, 675, 675, 0, 0, 862, 863, 864, 865, - 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, - 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, - 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, - 896, 897, 898, 899, 900, 901, 902, 903, 3505, 0, - 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3519, 0, 0, 3520, 0, 3521, 2795, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2977, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 675, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, - 2163, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 675, 0, 0, 675, 0, 0, 0, 0, 0, - 0, 0, 0, 2857, 0, 87, 0, 0, 2163, 2163, - 2163, 2163, 2163, 0, 675, 0, 0, 0, 0, 0, - 3601, 0, 2978, 2979, 0, 0, 0, 0, 2163, 0, - 0, 2163, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3615, 0, 3616, 0, 3617, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 675, 0, 0, 0, 0, 0, 0, - 2246, 2247, 2248, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2963, 0, 0, 0, 0, - 675, 0, 0, 0, 0, 2971, 675, 1706, 0, 0, - 1706, 809, 1706, 0, 813, 0, 810, 811, 2278, 0, - 3662, 812, 3663, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1166, 0, 1166, 1166, 0, 0, 0, 0, - 0, 0, 0, 675, 0, 0, 0, 0, 675, 0, - 0, 0, 675, 675, 1334, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 86, 44, 45, 88, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 92, 0, 0, 0, 48, - 77, 78, 0, 75, 79, 0, 795, 0, 0, 0, - 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, - 0, 0, 196, 0, 0, 613, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, - 0, 675, 0, 0, 0, 0, 0, 0, 0, 0, - 2163, 926, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3147, 0, 0, 0, 0, 945, 945, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 855, 0, 0, 0, 0, 856, 1404, 0, 675, - 0, 0, 0, 0, 0, 0, 1955, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1541, 1542, 0, 0, - 0, 51, 54, 57, 56, 59, 0, 74, 0, 0, - 83, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, - 0, 1584, 0, 0, 62, 91, 90, 0, 0, 72, - 73, 58, 0, 0, 0, 0, 1602, 81, 82, 862, - 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, - 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, - 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, - 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, - 903, 969, 0, 0, 0, 64, 65, 0, 66, 67, - 68, 69, 0, 0, 0, 0, 0, 0, 0, 0, - 1714, 1714, 0, 1714, 0, 1714, 1714, 0, 1723, 1714, - 1714, 1714, 1714, 1714, 0, 0, 0, 3267, 0, 3271, - 3272, 0, 0, 0, 0, 969, 675, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, - 0, 0, 2857, 0, 87, 0, 2857, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1791, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1832, 0, - 0, 0, 2609, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3393, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1166, 0, 0, 0, 89, - 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 323, 206, 408, 493, 285, 0, 97, 0, 0, 860, + 844, 810, 811, 848, 861, 862, 863, 864, 849, 0, + 239, 850, 851, 246, 852, 0, 809, 750, 752, 751, + 769, 770, 771, 772, 773, 774, 775, 748, 857, 865, + 866, 0, 264, 319, 271, 263, 518, 0, 0, 0, + 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, + 0, 0, 692, 707, 0, 721, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 675, 0, 0, 0, 0, 0, 0, 675, 0, - 0, 0, 1706, 1706, 0, 0, 0, 675, 0, 0, + 0, 0, 0, 0, 0, 704, 705, 948, 0, 0, + 0, 804, 0, 706, 0, 0, 714, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, + 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, + 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, + 900, 901, 902, 903, 904, 905, 906, 907, 908, 717, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 94, 0, 1404, 2682, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2857, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1428, 1429, 1430, - 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, - 1441, 1442, 1443, 1447, 1448, 1449, 1450, 1451, 1452, 1453, - 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, - 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, - 1474, 1475, 1476, 1478, 1479, 1480, 1481, 1482, 1483, 1484, - 1485, 1486, 1487, 1505, 1506, 1507, 1508, 1509, 1510, 1511, - 1512, 1513, 1514, 1515, 1516, 1517, 1518, 71, 0, 1166, - 1166, 61, 0, 0, 0, 0, 0, 0, 0, 0, - 675, 3492, 1896, 0, 0, 0, 613, 0, 613, 0, - 0, 613, 613, 0, 0, 0, 0, 0, 0, 87, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 675, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1950, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, - 1966, 0, 0, 0, 0, 675, 0, 0, 0, 0, - 3537, 0, 0, 675, 0, 87, 0, 0, 0, 0, - 0, 0, 0, 1406, 0, 0, 0, 0, 0, 0, - 0, 1999, 2000, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 675, 0, 0, 0, - 1404, 1166, 0, 675, 675, 1404, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3619, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2125, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2926, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2135, 0, 0, 0, - 0, 0, 0, 0, 0, 1406, 0, 0, 675, 0, - 1584, 1404, 0, 1166, 0, 0, 675, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 969, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3011, 0, 0, 0, 0, 0, 0, - 0, 926, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 977, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 969, - 0, 0, 0, 613, 0, 977, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 675, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 969, 0, 1406, 0, 0, 1950, 0, 0, - 0, 1950, 1950, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1406, 0, 0, 1406, 0, 1406, 613, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1765, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 613, 0, 0, 0, 3154, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1834, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 613, 0, 0, 0, 0, 0, 0, 613, 0, 0, - 675, 675, 0, 0, 0, 0, 1866, 1867, 613, 613, - 613, 613, 613, 613, 613, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 95, 0, 0, 855, - 2383, 0, 0, 843, 856, 857, 858, 859, 844, 0, - 0, 845, 846, 0, 847, 0, 0, 675, 675, 675, - 675, 0, 0, 0, 0, 0, 0, 0, 852, 860, - 861, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1166, 0, - 0, 0, 0, 0, 0, 2975, 2976, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 862, 863, 864, - 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, - 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, - 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, - 895, 896, 897, 898, 899, 900, 901, 902, 903, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1404, 0, - 0, 0, 0, 675, 0, 675, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2977, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 675, 0, 0, 0, 2544, 0, 0, 0, 1406, - 0, 0, 0, 0, 675, 0, 2559, 0, 0, 0, - 0, 945, 945, 2978, 2979, 0, 1406, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 675, 0, 0, 0, 675, - 675, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 675, 0, - 945, 1834, 945, 945, 945, 945, 945, 0, 0, 0, - 0, 0, 0, 2641, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2135, 0, 0, 0, 1765, 0, 0, 2666, 0, 0, - 0, 0, 0, 0, 0, 0, 2671, 0, 0, 945, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 926, 0, 0, 0, 675, 0, 0, - 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, - 0, 0, 0, 1834, 613, 0, 613, 0, 613, 2172, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 675, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1404, 0, 675, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1950, - 0, 0, 0, 0, 0, 0, 0, 0, 675, 675, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 675, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 675, 1950, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2796, 0, 0, 0, 675, 0, - 0, 0, 1166, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, - 675, 0, 0, 0, 0, 0, 613, 0, 0, 0, - 0, 0, 0, 1714, 0, 0, 0, 675, 0, 675, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2833, 613, 613, 0, 0, 613, 0, 2370, 0, - 0, 0, 0, 0, 613, 1166, 0, 0, 0, 0, - 0, 0, 2860, 1714, 613, 0, 0, 0, 0, 0, - 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 969, 0, 0, - 0, 0, 0, 0, 0, 2135, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1406, 0, 1834, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3074, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, - 0, 0, 0, 0, 0, 1765, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 613, 0, 0, 0, 0, 613, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2135, - 2135, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, - 0, 0, 0, 0, 0, 0, 2651, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3218, 3219, 3220, 3221, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1406, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 613, 613, 613, 613, 613, + 296, 0, 397, 256, 0, 0, 449, 803, 0, 0, + 561, 0, 0, 801, 0, 0, 0, 0, 361, 0, + 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, + 0, 854, 0, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 588, 227, 259, + 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, + 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, + 288, 452, 431, 432, 570, 583, 571, 573, 574, 214, + 502, 533, 240, 479, 0, 0, 590, 248, 499, 216, + 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, + 0, 0, 257, 410, 855, 856, 255, 591, 756, 555, + 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, + 388, 378, 332, 764, 765, 279, 305, 444, 371, 445, + 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, + 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, + 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, + 517, 536, 548, 560, 566, 567, 569, 575, 576, 577, + 578, 584, 582, 579, 580, 581, 572, 402, 309, 490, + 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, + 0, 0, 0, 814, 802, 727, 818, 729, 815, 816, + 724, 725, 728, 817, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 805, 713, 712, 0, 720, 0, 746, + 747, 749, 753, 754, 755, 766, 767, 768, 776, 778, + 779, 777, 780, 781, 782, 785, 786, 787, 788, 783, + 784, 789, 730, 734, 731, 732, 733, 745, 735, 736, + 737, 738, 739, 740, 741, 742, 743, 744, 828, 829, + 830, 831, 832, 833, 759, 763, 762, 760, 761, 757, + 758, 711, 201, 222, 364, 0, 450, 287, 589, 551, + 545, 208, 224, 819, 261, 820, 0, 0, 824, 0, + 0, 0, 826, 825, 0, 827, 793, 792, 0, 0, + 821, 822, 0, 823, 0, 0, 203, 204, 211, 223, + 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, + 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, + 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, + 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, + 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, + 496, 501, 524, 526, 539, 558, 564, 476, 834, 835, + 836, 837, 838, 839, 840, 841, 298, 534, 565, 532, + 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, + 303, 318, 0, 550, 497, 228, 462, 289, 252, 859, + 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, + 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, + 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, + 314, 513, 0, 723, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 411, 0, 0, 0, 0, 710, 0, + 0, 0, 269, 715, 0, 0, 0, 362, 266, 0, + 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, + 281, 272, 268, 251, 315, 381, 423, 503, 417, 722, + 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, + 718, 719, 0, 0, 0, 0, 0, 0, 0, 0, + 321, 249, 323, 206, 408, 493, 285, 0, 97, 0, + 0, 860, 844, 810, 811, 848, 861, 862, 863, 864, + 849, 0, 239, 850, 851, 246, 852, 0, 809, 750, + 752, 751, 769, 770, 771, 772, 773, 774, 775, 748, + 857, 865, 866, 0, 264, 319, 271, 263, 518, 0, + 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, + 0, 0, 0, 0, 692, 707, 0, 721, 0, 0, + 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 704, 705, 0, + 0, 0, 0, 804, 0, 706, 0, 0, 714, 867, + 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, + 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, + 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, + 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, + 908, 717, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 296, 0, 397, 256, 0, 0, 449, 803, + 0, 0, 561, 0, 0, 801, 0, 0, 0, 0, + 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, + 0, 0, 0, 854, 0, 467, 421, 538, 234, 283, + 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, + 447, 535, 562, 563, 262, 401, 547, 507, 556, 588, + 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, + 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, + 525, 544, 288, 452, 431, 432, 570, 583, 571, 573, + 574, 214, 502, 533, 240, 479, 0, 0, 590, 248, + 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, + 267, 292, 0, 0, 257, 410, 855, 856, 255, 591, + 756, 555, 221, 0, 554, 403, 522, 531, 390, 379, + 220, 529, 388, 378, 332, 764, 765, 279, 305, 444, + 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, + 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, + 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, + 448, 0, 517, 536, 548, 560, 566, 567, 569, 575, + 576, 577, 578, 584, 582, 579, 580, 581, 572, 402, + 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, + 491, 0, 0, 0, 0, 814, 802, 727, 818, 729, + 815, 816, 724, 725, 728, 817, 593, 594, 595, 596, + 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 608, 609, 610, 0, 805, 713, 712, 0, 720, + 0, 746, 747, 749, 753, 754, 755, 766, 767, 768, + 776, 778, 779, 777, 780, 781, 782, 785, 786, 787, + 788, 783, 784, 789, 730, 734, 731, 732, 733, 745, + 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, + 828, 829, 830, 831, 832, 833, 759, 763, 762, 760, + 761, 757, 758, 711, 201, 222, 364, 0, 450, 287, + 589, 551, 545, 208, 224, 819, 261, 820, 0, 0, + 824, 0, 0, 0, 826, 825, 0, 827, 793, 792, + 0, 0, 821, 822, 0, 823, 0, 0, 203, 204, + 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, + 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, + 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, + 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, + 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, + 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, + 834, 835, 836, 837, 838, 839, 840, 841, 298, 534, + 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, + 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, + 252, 859, 0, 213, 247, 231, 258, 273, 276, 322, + 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, + 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, + 514, 515, 314, 513, 0, 723, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, + 710, 0, 0, 0, 269, 715, 0, 0, 0, 362, + 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, + 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, + 417, 722, 366, 0, 0, 492, 396, 0, 0, 0, + 0, 0, 718, 719, 0, 0, 0, 0, 0, 0, + 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, + 97, 0, 0, 860, 844, 810, 811, 848, 861, 862, + 863, 864, 849, 0, 239, 850, 851, 246, 852, 0, + 809, 750, 752, 751, 769, 770, 771, 772, 773, 774, + 775, 748, 857, 865, 866, 0, 264, 319, 271, 263, + 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 707, 0, 721, + 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 704, + 705, 0, 0, 0, 0, 804, 0, 706, 0, 0, + 714, 867, 868, 869, 870, 871, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, + 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, + 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, + 906, 907, 908, 717, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, + 449, 803, 0, 0, 561, 0, 0, 801, 0, 0, + 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, + 457, 469, 0, 0, 0, 854, 0, 467, 421, 538, + 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, + 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, + 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, + 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, + 243, 232, 525, 544, 288, 452, 431, 432, 570, 583, + 571, 573, 574, 214, 502, 533, 240, 479, 0, 0, + 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, + 0, 453, 267, 292, 0, 0, 257, 410, 855, 856, + 255, 591, 756, 555, 221, 0, 554, 403, 522, 531, + 390, 379, 220, 529, 388, 378, 332, 764, 765, 279, + 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, + 542, 0, 210, 0, 494, 543, 592, 235, 236, 238, + 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, + 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, + 569, 575, 576, 577, 578, 584, 582, 579, 580, 581, + 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, + 241, 540, 491, 0, 0, 0, 0, 814, 802, 727, + 818, 729, 815, 816, 724, 725, 728, 817, 593, 594, + 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 609, 610, 0, 805, 713, 712, + 0, 720, 0, 746, 747, 749, 753, 754, 755, 766, + 767, 768, 776, 778, 779, 777, 780, 781, 782, 785, + 786, 787, 788, 783, 784, 789, 730, 734, 731, 732, + 733, 745, 735, 736, 737, 738, 739, 740, 741, 742, + 743, 744, 828, 829, 830, 831, 832, 833, 759, 763, + 762, 760, 761, 757, 758, 711, 201, 222, 364, 0, + 450, 287, 589, 551, 545, 208, 224, 819, 261, 820, + 0, 0, 824, 0, 0, 0, 826, 825, 0, 827, + 793, 792, 0, 0, 821, 822, 0, 823, 0, 0, + 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, + 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, + 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, + 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, + 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, + 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, + 564, 476, 834, 835, 836, 837, 838, 839, 840, 841, + 298, 534, 565, 532, 585, 559, 435, 374, 0, 0, + 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, + 462, 289, 252, 859, 0, 213, 247, 231, 258, 273, + 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, + 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, + 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, + 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, + 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, + 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, + 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, + 285, 0, 0, 0, 0, 0, 670, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, + 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, + 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, + 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, + 230, 0, 0, 0, 0, 1385, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1386, 1387, + 1388, 1389, 1390, 1391, 1392, 1394, 1393, 1395, 1396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 613, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 613, 0, - 0, 0, 3295, 0, 3297, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, + 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, + 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, + 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, + 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, + 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, + 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, + 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, + 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, + 570, 583, 571, 573, 574, 214, 502, 533, 240, 479, + 0, 0, 590, 248, 499, 216, 530, 498, 389, 324, + 325, 215, 0, 453, 267, 292, 0, 0, 257, 410, + 527, 528, 255, 591, 229, 555, 221, 0, 554, 403, + 522, 531, 390, 379, 220, 529, 388, 378, 332, 351, + 352, 279, 305, 444, 371, 445, 304, 306, 399, 398, + 400, 209, 542, 0, 210, 0, 494, 543, 592, 235, + 236, 238, 0, 278, 282, 290, 293, 301, 302, 311, + 363, 414, 443, 439, 448, 0, 517, 536, 548, 560, + 566, 567, 569, 575, 576, 577, 578, 584, 582, 579, + 580, 581, 572, 402, 309, 490, 331, 369, 0, 0, + 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 945, 0, 0, 0, 0, 0, 0, 0, + 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 609, 610, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 611, 380, 481, + 537, 333, 345, 348, 338, 357, 0, 358, 334, 335, + 340, 342, 343, 344, 349, 350, 354, 360, 250, 212, + 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, + 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, + 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, + 364, 0, 450, 287, 589, 551, 545, 208, 224, 0, + 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, + 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, + 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, + 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, + 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, + 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, + 539, 558, 564, 476, 299, 300, 441, 442, 312, 313, + 586, 587, 298, 534, 565, 532, 585, 559, 435, 374, + 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, + 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, + 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, + 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, + 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, + 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, + 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, + 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, + 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, + 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, + 408, 493, 285, 0, 0, 0, 0, 0, 670, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, + 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, + 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, + 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, + 0, 0, 230, 0, 1021, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3403, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 945, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3453, 0, 0, 0, 3453, 3453, - 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2135, 0, 1406, - 0, 0, 0, 0, 1406, 613, 613, 613, 613, 613, - 0, 0, 0, 0, 0, 0, 0, 2876, 0, 0, - 0, 0, 0, 1765, 0, 613, 0, 0, 613, 2884, - 1834, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, + 397, 256, 0, 0, 449, 0, 0, 1020, 561, 0, + 0, 0, 0, 0, 1017, 1018, 361, 977, 328, 202, + 226, 1011, 1015, 407, 457, 469, 0, 0, 0, 254, + 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, + 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, + 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, + 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, + 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, + 431, 432, 570, 583, 571, 573, 574, 214, 502, 533, + 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, + 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, + 257, 410, 527, 528, 255, 591, 229, 555, 221, 0, + 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, + 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, + 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, + 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, + 548, 560, 566, 567, 569, 575, 576, 577, 578, 584, + 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, + 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, + 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, + 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, + 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, + 201, 222, 364, 0, 450, 287, 589, 551, 545, 208, + 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, + 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, + 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, + 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, + 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, + 312, 313, 586, 587, 298, 534, 565, 532, 585, 559, + 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, + 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, + 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, + 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, + 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 613, 0, 2135, 0, 0, 0, + 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, + 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, + 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, + 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, + 323, 206, 408, 493, 285, 0, 0, 0, 0, 1532, + 844, 0, 0, 1529, 0, 0, 0, 0, 1527, 0, + 239, 1528, 1526, 246, 1531, 0, 809, 347, 356, 355, + 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, + 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, + 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1406, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2135, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 613, - 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3530, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1166, 1166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3585, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3530, 0, 0, + 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, + 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, + 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, + 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, + 562, 563, 262, 401, 547, 507, 556, 588, 227, 259, + 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, + 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, + 288, 452, 431, 432, 570, 583, 571, 573, 574, 214, + 502, 533, 240, 479, 0, 0, 590, 248, 499, 216, + 530, 498, 389, 324, 325, 215, 0, 453, 267, 292, + 0, 0, 257, 410, 527, 528, 255, 591, 229, 555, + 221, 0, 554, 403, 522, 531, 390, 379, 220, 529, + 388, 378, 332, 351, 352, 279, 305, 444, 371, 445, + 304, 306, 399, 398, 400, 209, 542, 0, 210, 0, + 494, 543, 592, 235, 236, 238, 0, 278, 282, 290, + 293, 301, 302, 311, 363, 414, 443, 439, 448, 0, + 517, 536, 548, 560, 566, 567, 569, 575, 576, 577, + 578, 584, 582, 579, 580, 581, 572, 402, 309, 490, + 331, 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2135, - 0, 0, 0, 0, 0, 0, 0, 613, 0, 0, - 0, 0, 0, 0, 0, 0, 3074, 0, 3585, 0, + 0, 0, 0, 0, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 609, 610, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 611, 380, 481, 537, 333, 345, 348, 338, 357, + 0, 358, 334, 335, 340, 342, 343, 344, 349, 350, + 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, + 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, + 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, + 446, 0, 201, 222, 364, 0, 450, 287, 589, 551, + 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 613, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, + 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, + 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, + 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, + 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, + 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, + 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, + 441, 442, 312, 313, 586, 587, 298, 534, 565, 532, + 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, + 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, + 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, + 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, + 506, 508, 391, 265, 428, 0, 392, 372, 514, 515, + 314, 88, 513, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, + 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, + 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, + 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, + 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 613, 0, 0, 613, - 613, 613, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 321, 249, 323, 206, 408, 493, 285, 0, 97, + 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, + 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, + 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, + 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4609,1201 +3809,208 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, + 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, + 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, + 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, + 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, + 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, + 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, + 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, + 232, 525, 544, 288, 452, 431, 432, 570, 583, 571, + 573, 574, 214, 502, 533, 240, 479, 0, 0, 590, + 248, 499, 216, 530, 498, 389, 324, 325, 215, 0, + 453, 267, 292, 0, 0, 257, 410, 527, 528, 255, + 591, 229, 555, 221, 0, 554, 403, 522, 531, 390, + 379, 220, 529, 388, 378, 332, 351, 352, 279, 305, + 444, 371, 445, 304, 306, 399, 398, 400, 209, 542, + 0, 210, 0, 494, 543, 592, 235, 236, 238, 0, + 278, 282, 290, 293, 301, 302, 311, 363, 414, 443, + 439, 448, 0, 517, 536, 548, 560, 566, 567, 569, + 575, 576, 577, 578, 584, 582, 579, 580, 581, 572, + 402, 309, 490, 331, 369, 0, 0, 420, 468, 241, + 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 593, 594, 595, + 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 609, 610, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 611, 380, 481, 537, 333, 345, + 348, 338, 357, 0, 358, 334, 335, 340, 342, 343, + 344, 349, 350, 354, 360, 250, 212, 386, 394, 516, + 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, + 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, + 329, 330, 375, 446, 0, 201, 222, 364, 96, 450, + 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, + 0, 0, 0, 0, 2174, 0, 0, 2173, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, + 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, + 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, + 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, + 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, + 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, + 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, + 476, 299, 300, 441, 442, 312, 313, 586, 587, 298, + 534, 565, 532, 585, 559, 435, 374, 0, 0, 549, + 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, + 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, + 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, + 480, 504, 505, 506, 508, 391, 265, 428, 1588, 0, + 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, + 1590, 0, 0, 0, 0, 269, 0, 0, 0, 0, + 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, + 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, + 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, + 0, 0, 0, 0, 1592, 670, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, + 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, + 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, + 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, + 0, 0, 0, 1366, 0, 1367, 1368, 0, 0, 0, + 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1406, 0, 0, + 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, + 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, + 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, + 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, + 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, + 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, + 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, + 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, + 367, 243, 232, 525, 544, 288, 452, 431, 432, 570, + 583, 571, 573, 574, 214, 502, 533, 240, 479, 0, + 0, 590, 248, 499, 216, 530, 498, 389, 324, 325, + 215, 0, 453, 267, 292, 0, 0, 257, 410, 527, + 528, 255, 591, 229, 555, 221, 0, 554, 403, 522, + 531, 390, 379, 220, 529, 388, 378, 332, 351, 352, + 279, 305, 444, 371, 445, 304, 306, 399, 398, 400, + 209, 542, 0, 210, 0, 494, 543, 592, 235, 236, + 238, 0, 278, 282, 290, 293, 301, 302, 311, 363, + 414, 443, 439, 448, 0, 517, 536, 548, 560, 566, + 567, 569, 575, 576, 577, 578, 584, 582, 579, 580, + 581, 572, 402, 309, 490, 331, 369, 0, 0, 420, + 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 608, 609, 610, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 611, 380, 481, 537, + 333, 345, 348, 338, 357, 0, 358, 334, 335, 340, + 342, 343, 344, 349, 350, 354, 360, 250, 212, 386, + 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, + 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, + 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, + 0, 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, + 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, + 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, + 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, + 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, + 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, + 558, 564, 476, 299, 300, 441, 442, 312, 313, 586, + 587, 298, 534, 565, 532, 585, 559, 435, 374, 0, + 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, + 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, + 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, + 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, + 0, 392, 372, 514, 515, 314, 88, 513, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, + 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, + 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, + 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, + 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, + 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, + 408, 493, 285, 0, 97, 0, 1569, 0, 670, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, + 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, + 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, + 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, + 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, + 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, + 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, + 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, + 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, + 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, + 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, + 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, + 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, + 431, 432, 570, 583, 571, 573, 574, 214, 502, 533, + 240, 479, 0, 0, 590, 248, 499, 216, 530, 498, + 389, 324, 325, 215, 0, 453, 267, 292, 0, 0, + 257, 410, 527, 528, 255, 591, 229, 555, 221, 0, + 554, 403, 522, 531, 390, 379, 220, 529, 388, 378, + 332, 351, 352, 279, 305, 444, 371, 445, 304, 306, + 399, 398, 400, 209, 542, 0, 210, 0, 494, 543, + 592, 235, 236, 238, 0, 278, 282, 290, 293, 301, + 302, 311, 363, 414, 443, 439, 448, 0, 517, 536, + 548, 560, 566, 567, 569, 575, 576, 577, 578, 584, + 582, 579, 580, 581, 572, 402, 309, 490, 331, 369, + 0, 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 593, 594, 595, 596, 597, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, + 380, 481, 537, 333, 345, 348, 338, 357, 0, 358, + 334, 335, 340, 342, 343, 344, 349, 350, 354, 360, + 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, + 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, + 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, + 201, 222, 364, 96, 450, 287, 589, 551, 545, 208, + 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, + 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, + 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, + 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, + 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, + 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, + 312, 313, 586, 587, 298, 534, 565, 532, 585, 559, + 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, + 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, + 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, + 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, + 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, + 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, + 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, + 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, + 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, + 323, 206, 408, 493, 285, 0, 97, 0, 0, 0, + 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, + 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, + 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, + 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, - 0, 0, 1300, 1285, 511, 0, 1228, 1303, 1197, 1216, - 1313, 1219, 1222, 1264, 1176, 1242, 409, 1213, 1169, 1201, - 1171, 1208, 1172, 1199, 1230, 267, 1196, 1287, 1246, 1302, - 360, 264, 1178, 1202, 423, 1218, 205, 1266, 480, 251, - 371, 368, 519, 279, 270, 266, 249, 313, 379, 421, - 501, 415, 1309, 364, 1252, 0, 490, 394, 0, 0, - 0, 1232, 1291, 1240, 1278, 1227, 1265, 1186, 1251, 1304, - 1214, 1261, 1305, 319, 247, 321, 204, 406, 491, 283, - 0, 0, 1765, 0, 3557, 665, 0, 0, 0, 0, - 3558, 0, 0, 0, 0, 237, 0, 0, 244, 0, - 0, 613, 345, 354, 353, 334, 335, 337, 339, 344, - 351, 357, 1210, 1258, 1299, 1211, 1260, 262, 317, 269, - 261, 516, 1310, 1290, 1175, 1239, 1298, 0, 0, 228, - 1301, 1234, 0, 1263, 0, 1316, 1170, 1254, 0, 1173, - 1177, 1312, 1294, 1205, 272, 0, 0, 0, 0, 0, - 0, 0, 1231, 1241, 1275, 1279, 1225, 0, 0, 0, - 0, 1406, 0, 0, 1203, 0, 1250, 0, 0, 0, - 1182, 1174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1229, 0, 0, 0, 0, 1185, - 0, 1204, 1276, 1765, 1168, 294, 1179, 395, 254, 0, - 447, 1283, 1293, 1226, 558, 1297, 1224, 1223, 1270, 1183, - 1289, 1217, 359, 1181, 326, 200, 224, 0, 1215, 405, - 455, 467, 1288, 1200, 1209, 252, 1207, 465, 419, 536, - 232, 281, 452, 425, 463, 435, 284, 1249, 1268, 464, - 366, 521, 445, 533, 559, 560, 260, 399, 545, 505, - 553, 585, 225, 257, 413, 498, 539, 487, 391, 517, - 518, 325, 486, 292, 203, 363, 565, 223, 473, 365, - 241, 230, 523, 542, 286, 450, 429, 430, 567, 580, - 568, 570, 571, 212, 500, 531, 238, 477, 0, 0, - 587, 246, 497, 214, 528, 496, 387, 322, 323, 213, - 0, 451, 265, 290, 0, 0, 255, 408, 525, 526, - 253, 588, 227, 552, 219, 1180, 551, 401, 520, 529, - 388, 377, 218, 527, 386, 376, 330, 349, 350, 277, - 303, 442, 369, 443, 302, 304, 397, 396, 398, 207, - 540, 0, 208, 0, 492, 541, 589, 233, 234, 236, - 1195, 276, 280, 288, 291, 299, 300, 309, 361, 412, - 441, 437, 446, 1284, 515, 534, 546, 557, 563, 564, - 566, 572, 573, 574, 575, 581, 579, 576, 577, 578, - 569, 400, 307, 488, 329, 367, 1273, 1315, 418, 466, - 239, 538, 489, 1318, 1319, 1320, 1321, 1190, 1194, 1188, - 1255, 1189, 1244, 1245, 1191, 1306, 1307, 1308, 590, 591, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 0, 1277, 1184, 0, - 1192, 1193, 1286, 1295, 1296, 608, 378, 479, 535, 331, - 343, 346, 336, 355, 0, 356, 332, 333, 338, 340, - 341, 342, 347, 348, 352, 358, 248, 210, 384, 392, - 514, 308, 215, 216, 217, 507, 508, 509, 510, 549, - 550, 554, 456, 457, 458, 459, 289, 544, 305, 462, - 461, 327, 328, 373, 444, 1248, 199, 220, 362, 1311, - 448, 285, 586, 548, 543, 206, 222, 1187, 259, 1198, - 1206, 0, 1212, 1220, 1221, 1233, 1235, 1236, 1237, 1238, - 1256, 1257, 1259, 1267, 1269, 1272, 1274, 1281, 1292, 1314, - 201, 202, 209, 221, 231, 235, 242, 258, 273, 275, - 282, 295, 306, 314, 315, 318, 324, 374, 380, 381, - 382, 383, 402, 403, 404, 407, 410, 411, 414, 416, - 417, 420, 424, 428, 431, 432, 434, 436, 438, 449, - 454, 468, 469, 470, 471, 472, 475, 476, 481, 482, - 483, 484, 485, 493, 494, 499, 522, 524, 537, 555, - 561, 474, 297, 298, 439, 440, 310, 311, 583, 584, - 296, 532, 562, 530, 582, 556, 433, 372, 1247, 1317, - 1253, 375, 278, 301, 316, 1262, 547, 495, 226, 460, - 287, 250, 1280, 1282, 211, 245, 229, 256, 271, 274, - 320, 385, 393, 422, 427, 293, 268, 243, 453, 240, - 478, 502, 503, 504, 506, 389, 263, 426, 1243, 1271, - 370, 512, 513, 312, 390, 0, 0, 0, 1300, 1285, - 511, 0, 1228, 1303, 1197, 1216, 1313, 1219, 1222, 1264, - 1176, 1242, 409, 1213, 1169, 1201, 1171, 1208, 1172, 1199, - 1230, 267, 1196, 1287, 1246, 1302, 360, 264, 1178, 1202, - 423, 1218, 205, 1266, 480, 251, 371, 368, 519, 279, - 270, 266, 249, 313, 379, 421, 501, 415, 1309, 364, - 1252, 0, 490, 394, 0, 0, 0, 1232, 1291, 1240, - 1278, 1227, 1265, 1186, 1251, 1304, 1214, 1261, 1305, 319, - 247, 321, 204, 406, 491, 283, 0, 0, 0, 0, - 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 237, 0, 0, 244, 0, 0, 0, 345, 354, - 353, 334, 335, 337, 339, 344, 351, 357, 1210, 1258, - 1299, 1211, 1260, 262, 317, 269, 261, 516, 1310, 1290, - 1175, 1239, 1298, 0, 0, 228, 1301, 1234, 0, 1263, - 0, 1316, 1170, 1254, 0, 1173, 1177, 1312, 1294, 1205, - 272, 0, 0, 0, 0, 0, 0, 0, 1231, 1241, - 1275, 1279, 1225, 0, 0, 0, 0, 0, 2885, 0, - 1203, 0, 1250, 0, 0, 0, 1182, 1174, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1229, 0, 0, 0, 0, 1185, 0, 1204, 1276, 0, - 1168, 294, 1179, 395, 254, 0, 447, 1283, 1293, 1226, - 558, 1297, 1224, 1223, 1270, 1183, 1289, 1217, 359, 1181, - 326, 200, 224, 0, 1215, 405, 455, 467, 1288, 1200, - 1209, 252, 1207, 465, 419, 536, 232, 281, 452, 425, - 463, 435, 284, 1249, 1268, 464, 366, 521, 445, 533, - 559, 560, 260, 399, 545, 505, 553, 585, 225, 257, - 413, 498, 539, 487, 391, 517, 518, 325, 486, 292, - 203, 363, 565, 223, 473, 365, 241, 230, 523, 542, - 286, 450, 429, 430, 567, 580, 568, 570, 571, 212, - 500, 531, 238, 477, 0, 0, 587, 246, 497, 214, - 528, 496, 387, 322, 323, 213, 0, 451, 265, 290, - 0, 0, 255, 408, 525, 526, 253, 588, 227, 552, - 219, 1180, 551, 401, 520, 529, 388, 377, 218, 527, - 386, 376, 330, 349, 350, 277, 303, 442, 369, 443, - 302, 304, 397, 396, 398, 207, 540, 0, 208, 0, - 492, 541, 589, 233, 234, 236, 1195, 276, 280, 288, - 291, 299, 300, 309, 361, 412, 441, 437, 446, 1284, - 515, 534, 546, 557, 563, 564, 566, 572, 573, 574, - 575, 581, 579, 576, 577, 578, 569, 400, 307, 488, - 329, 367, 1273, 1315, 418, 466, 239, 538, 489, 1318, - 1319, 1320, 1321, 1190, 1194, 1188, 1255, 1189, 1244, 1245, - 1191, 1306, 1307, 1308, 590, 591, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 0, 1277, 1184, 0, 1192, 1193, 1286, 1295, - 1296, 608, 378, 479, 535, 331, 343, 346, 336, 355, - 0, 356, 332, 333, 338, 340, 341, 342, 347, 348, - 352, 358, 248, 210, 384, 392, 514, 308, 215, 216, - 217, 507, 508, 509, 510, 549, 550, 554, 456, 457, - 458, 459, 289, 544, 305, 462, 461, 327, 328, 373, - 444, 1248, 199, 220, 362, 1311, 448, 285, 586, 548, - 543, 206, 222, 1187, 259, 1198, 1206, 0, 1212, 1220, - 1221, 1233, 1235, 1236, 1237, 1238, 1256, 1257, 1259, 1267, - 1269, 1272, 1274, 1281, 1292, 1314, 201, 202, 209, 221, - 231, 235, 242, 258, 273, 275, 282, 295, 306, 314, - 315, 318, 324, 374, 380, 381, 382, 383, 402, 403, - 404, 407, 410, 411, 414, 416, 417, 420, 424, 428, - 431, 432, 434, 436, 438, 449, 454, 468, 469, 470, - 471, 472, 475, 476, 481, 482, 483, 484, 485, 493, - 494, 499, 522, 524, 537, 555, 561, 474, 297, 298, - 439, 440, 310, 311, 583, 584, 296, 532, 562, 530, - 582, 556, 433, 372, 1247, 1317, 1253, 375, 278, 301, - 316, 1262, 547, 495, 226, 460, 287, 250, 1280, 1282, - 211, 245, 229, 256, 271, 274, 320, 385, 393, 422, - 427, 293, 268, 243, 453, 240, 478, 502, 503, 504, - 506, 389, 263, 426, 1243, 1271, 370, 512, 513, 312, - 390, 0, 0, 0, 1300, 1285, 511, 0, 1228, 1303, - 1197, 1216, 1313, 1219, 1222, 1264, 1176, 1242, 409, 1213, - 1169, 1201, 1171, 1208, 1172, 1199, 1230, 267, 1196, 1287, - 1246, 1302, 360, 264, 1178, 1202, 423, 1218, 205, 1266, - 480, 251, 371, 368, 519, 279, 270, 266, 249, 313, - 379, 421, 501, 415, 1309, 364, 1252, 0, 490, 394, - 0, 0, 0, 1232, 1291, 1240, 1278, 1227, 1265, 1186, - 1251, 1304, 1214, 1261, 1305, 319, 247, 321, 204, 406, - 491, 283, 0, 0, 0, 0, 0, 665, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, - 244, 0, 0, 0, 345, 354, 353, 334, 335, 337, - 339, 344, 351, 357, 1210, 1258, 1299, 1211, 1260, 262, - 317, 269, 261, 516, 1310, 1290, 1175, 1239, 1298, 0, - 0, 228, 1301, 1234, 0, 1263, 0, 1316, 1170, 1254, - 0, 1173, 1177, 1312, 1294, 1205, 272, 0, 0, 0, - 0, 0, 0, 0, 1231, 1241, 1275, 1279, 1225, 0, - 0, 0, 0, 0, 2846, 0, 1203, 0, 1250, 0, - 0, 0, 1182, 1174, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1229, 0, 0, 0, - 0, 1185, 0, 1204, 1276, 0, 1168, 294, 1179, 395, - 254, 0, 447, 1283, 1293, 1226, 558, 1297, 1224, 1223, - 1270, 1183, 1289, 1217, 359, 1181, 326, 200, 224, 0, - 1215, 405, 455, 467, 1288, 1200, 1209, 252, 1207, 465, - 419, 536, 232, 281, 452, 425, 463, 435, 284, 1249, - 1268, 464, 366, 521, 445, 533, 559, 560, 260, 399, - 545, 505, 553, 585, 225, 257, 413, 498, 539, 487, - 391, 517, 518, 325, 486, 292, 203, 363, 565, 223, - 473, 365, 241, 230, 523, 542, 286, 450, 429, 430, - 567, 580, 568, 570, 571, 212, 500, 531, 238, 477, - 0, 0, 587, 246, 497, 214, 528, 496, 387, 322, - 323, 213, 0, 451, 265, 290, 0, 0, 255, 408, - 525, 526, 253, 588, 227, 552, 219, 1180, 551, 401, - 520, 529, 388, 377, 218, 527, 386, 376, 330, 349, - 350, 277, 303, 442, 369, 443, 302, 304, 397, 396, - 398, 207, 540, 0, 208, 0, 492, 541, 589, 233, - 234, 236, 1195, 276, 280, 288, 291, 299, 300, 309, - 361, 412, 441, 437, 446, 1284, 515, 534, 546, 557, - 563, 564, 566, 572, 573, 574, 575, 581, 579, 576, - 577, 578, 569, 400, 307, 488, 329, 367, 1273, 1315, - 418, 466, 239, 538, 489, 1318, 1319, 1320, 1321, 1190, - 1194, 1188, 1255, 1189, 1244, 1245, 1191, 1306, 1307, 1308, - 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 0, 1277, - 1184, 0, 1192, 1193, 1286, 1295, 1296, 608, 378, 479, - 535, 331, 343, 346, 336, 355, 0, 356, 332, 333, - 338, 340, 341, 342, 347, 348, 352, 358, 248, 210, - 384, 392, 514, 308, 215, 216, 217, 507, 508, 509, - 510, 549, 550, 554, 456, 457, 458, 459, 289, 544, - 305, 462, 461, 327, 328, 373, 444, 1248, 199, 220, - 362, 1311, 448, 285, 586, 548, 543, 206, 222, 1187, - 259, 1198, 1206, 0, 1212, 1220, 1221, 1233, 1235, 1236, - 1237, 1238, 1256, 1257, 1259, 1267, 1269, 1272, 1274, 1281, - 1292, 1314, 201, 202, 209, 221, 231, 235, 242, 258, - 273, 275, 282, 295, 306, 314, 315, 318, 324, 374, - 380, 381, 382, 383, 402, 403, 404, 407, 410, 411, - 414, 416, 417, 420, 424, 428, 431, 432, 434, 436, - 438, 449, 454, 468, 469, 470, 471, 472, 475, 476, - 481, 482, 483, 484, 485, 493, 494, 499, 522, 524, - 537, 555, 561, 474, 297, 298, 439, 440, 310, 311, - 583, 584, 296, 532, 562, 530, 582, 556, 433, 372, - 1247, 1317, 1253, 375, 278, 301, 316, 1262, 547, 495, - 226, 460, 287, 250, 1280, 1282, 211, 245, 229, 256, - 271, 274, 320, 385, 393, 422, 427, 293, 268, 243, - 453, 240, 478, 502, 503, 504, 506, 389, 263, 426, - 1243, 1271, 370, 512, 513, 312, 390, 0, 0, 0, - 1300, 1285, 511, 0, 1228, 1303, 1197, 1216, 1313, 1219, - 1222, 1264, 1176, 1242, 409, 1213, 1169, 1201, 1171, 1208, - 1172, 1199, 1230, 267, 1196, 1287, 1246, 1302, 360, 264, - 1178, 1202, 423, 1218, 205, 1266, 480, 251, 371, 368, - 519, 279, 270, 266, 249, 313, 379, 421, 501, 415, - 1309, 364, 1252, 0, 490, 394, 0, 0, 0, 1232, - 1291, 1240, 1278, 1227, 1265, 1186, 1251, 1304, 1214, 1261, - 1305, 319, 247, 321, 204, 406, 491, 283, 0, 0, - 0, 0, 0, 839, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 237, 0, 0, 244, 0, 0, 0, - 345, 354, 353, 334, 335, 337, 339, 344, 351, 357, - 1210, 1258, 1299, 1211, 1260, 262, 317, 269, 261, 516, - 1310, 1290, 1175, 1239, 1298, 0, 0, 228, 1301, 1234, - 0, 1263, 0, 1316, 1170, 1254, 0, 1173, 1177, 1312, - 1294, 1205, 272, 0, 0, 0, 0, 0, 0, 0, - 1231, 1241, 1275, 1279, 1225, 0, 0, 0, 0, 0, - 2151, 0, 1203, 0, 1250, 0, 0, 0, 1182, 1174, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1229, 0, 0, 0, 0, 1185, 0, 1204, - 1276, 0, 1168, 294, 1179, 395, 254, 0, 447, 1283, - 1293, 1226, 558, 1297, 1224, 1223, 1270, 1183, 1289, 1217, - 359, 1181, 326, 200, 224, 0, 1215, 405, 455, 467, - 1288, 1200, 1209, 252, 1207, 465, 419, 536, 232, 281, - 452, 425, 463, 435, 284, 1249, 1268, 464, 366, 521, - 445, 533, 559, 560, 260, 399, 545, 505, 553, 585, - 225, 257, 413, 498, 539, 487, 391, 517, 518, 325, - 486, 292, 203, 363, 565, 223, 473, 365, 241, 230, - 523, 542, 286, 450, 429, 430, 567, 580, 568, 570, - 571, 212, 500, 531, 238, 477, 0, 0, 587, 246, - 497, 214, 528, 496, 387, 322, 323, 213, 0, 451, - 265, 290, 0, 0, 255, 408, 525, 526, 253, 588, - 227, 552, 219, 1180, 551, 401, 520, 529, 388, 377, - 218, 527, 386, 376, 330, 349, 350, 277, 303, 442, - 369, 443, 302, 304, 397, 396, 398, 207, 540, 0, - 208, 0, 492, 541, 589, 233, 234, 236, 1195, 276, - 280, 288, 291, 299, 300, 309, 361, 412, 441, 437, - 446, 1284, 515, 534, 546, 557, 563, 564, 566, 572, - 573, 574, 575, 581, 579, 576, 577, 578, 569, 400, - 307, 488, 329, 367, 1273, 1315, 418, 466, 239, 538, - 489, 1318, 1319, 1320, 1321, 1190, 1194, 1188, 1255, 1189, - 1244, 1245, 1191, 1306, 1307, 1308, 590, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 0, 1277, 1184, 0, 1192, 1193, - 1286, 1295, 1296, 608, 378, 479, 535, 331, 343, 346, - 336, 355, 0, 356, 332, 333, 338, 340, 341, 342, - 347, 348, 352, 358, 248, 210, 384, 392, 514, 308, - 215, 216, 217, 507, 508, 509, 510, 549, 550, 554, - 456, 457, 458, 459, 289, 544, 305, 462, 461, 327, - 328, 373, 444, 1248, 199, 220, 362, 1311, 448, 285, - 586, 548, 543, 206, 222, 1187, 259, 1198, 1206, 0, - 1212, 1220, 1221, 1233, 1235, 1236, 1237, 1238, 1256, 1257, - 1259, 1267, 1269, 1272, 1274, 1281, 1292, 1314, 201, 202, - 209, 221, 231, 235, 242, 258, 273, 275, 282, 295, - 306, 314, 315, 318, 324, 374, 380, 381, 382, 383, - 402, 403, 404, 407, 410, 411, 414, 416, 417, 420, - 424, 428, 431, 432, 434, 436, 438, 449, 454, 468, - 469, 470, 471, 472, 475, 476, 481, 482, 483, 484, - 485, 493, 494, 499, 522, 524, 537, 555, 561, 474, - 297, 298, 439, 440, 310, 311, 583, 584, 296, 532, - 562, 530, 582, 556, 433, 372, 1247, 1317, 1253, 375, - 278, 301, 316, 1262, 547, 495, 226, 460, 287, 250, - 1280, 1282, 211, 245, 229, 256, 271, 274, 320, 385, - 393, 422, 427, 293, 268, 243, 453, 240, 478, 502, - 503, 504, 506, 389, 263, 426, 1243, 1271, 370, 512, - 513, 312, 390, 0, 0, 0, 1300, 1285, 511, 0, - 1228, 1303, 1197, 1216, 1313, 1219, 1222, 1264, 1176, 1242, - 409, 1213, 1169, 1201, 1171, 1208, 1172, 1199, 1230, 267, - 1196, 1287, 1246, 1302, 360, 264, 1178, 1202, 423, 1218, - 205, 1266, 480, 251, 371, 368, 519, 279, 270, 266, - 249, 313, 379, 421, 501, 415, 1309, 364, 1252, 0, - 490, 394, 0, 0, 0, 1232, 1291, 1240, 1278, 1227, - 1265, 1186, 1251, 1304, 1214, 1261, 1305, 319, 247, 321, - 204, 406, 491, 283, 0, 95, 0, 0, 0, 665, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 237, - 0, 0, 244, 0, 0, 0, 345, 354, 353, 334, - 335, 337, 339, 344, 351, 357, 1210, 1258, 1299, 1211, - 1260, 262, 317, 269, 261, 516, 1310, 1290, 1175, 1239, - 1298, 0, 0, 228, 1301, 1234, 0, 1263, 0, 1316, - 1170, 1254, 0, 1173, 1177, 1312, 1294, 1205, 272, 0, - 0, 0, 0, 0, 0, 0, 1231, 1241, 1275, 1279, - 1225, 0, 0, 0, 0, 0, 0, 0, 1203, 0, - 1250, 0, 0, 0, 1182, 1174, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1229, 0, - 0, 0, 0, 1185, 0, 1204, 1276, 0, 1168, 294, - 1179, 395, 254, 0, 447, 1283, 1293, 1226, 558, 1297, - 1224, 1223, 1270, 1183, 1289, 1217, 359, 1181, 326, 200, - 224, 0, 1215, 405, 455, 467, 1288, 1200, 1209, 252, - 1207, 465, 419, 536, 232, 281, 452, 425, 463, 435, - 284, 1249, 1268, 464, 366, 521, 445, 533, 559, 560, - 260, 399, 545, 505, 553, 585, 225, 257, 413, 498, - 539, 487, 391, 517, 518, 325, 486, 292, 203, 363, - 565, 223, 473, 365, 241, 230, 523, 542, 286, 450, - 429, 430, 567, 580, 568, 570, 571, 212, 500, 531, - 238, 477, 0, 0, 587, 246, 497, 214, 528, 496, - 387, 322, 323, 213, 0, 451, 265, 290, 0, 0, - 255, 408, 525, 526, 253, 588, 227, 552, 219, 1180, - 551, 401, 520, 529, 388, 377, 218, 527, 386, 376, - 330, 349, 350, 277, 303, 442, 369, 443, 302, 304, - 397, 396, 398, 207, 540, 0, 208, 0, 492, 541, - 589, 233, 234, 236, 1195, 276, 280, 288, 291, 299, - 300, 309, 361, 412, 441, 437, 446, 1284, 515, 534, - 546, 557, 563, 564, 566, 572, 573, 574, 575, 581, - 579, 576, 577, 578, 569, 400, 307, 488, 329, 367, - 1273, 1315, 418, 466, 239, 538, 489, 1318, 1319, 1320, - 1321, 1190, 1194, 1188, 1255, 1189, 1244, 1245, 1191, 1306, - 1307, 1308, 590, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 0, 1277, 1184, 0, 1192, 1193, 1286, 1295, 1296, 608, - 378, 479, 535, 331, 343, 346, 336, 355, 0, 356, - 332, 333, 338, 340, 341, 342, 347, 348, 352, 358, - 248, 210, 384, 392, 514, 308, 215, 216, 217, 507, - 508, 509, 510, 549, 550, 554, 456, 457, 458, 459, - 289, 544, 305, 462, 461, 327, 328, 373, 444, 1248, - 199, 220, 362, 1311, 448, 285, 586, 548, 543, 206, - 222, 1187, 259, 1198, 1206, 0, 1212, 1220, 1221, 1233, - 1235, 1236, 1237, 1238, 1256, 1257, 1259, 1267, 1269, 1272, - 1274, 1281, 1292, 1314, 201, 202, 209, 221, 231, 235, - 242, 258, 273, 275, 282, 295, 306, 314, 315, 318, - 324, 374, 380, 381, 382, 383, 402, 403, 404, 407, - 410, 411, 414, 416, 417, 420, 424, 428, 431, 432, - 434, 436, 438, 449, 454, 468, 469, 470, 471, 472, - 475, 476, 481, 482, 483, 484, 485, 493, 494, 499, - 522, 524, 537, 555, 561, 474, 297, 298, 439, 440, - 310, 311, 583, 584, 296, 532, 562, 530, 582, 556, - 433, 372, 1247, 1317, 1253, 375, 278, 301, 316, 1262, - 547, 495, 226, 460, 287, 250, 1280, 1282, 211, 245, - 229, 256, 271, 274, 320, 385, 393, 422, 427, 293, - 268, 243, 453, 240, 478, 502, 503, 504, 506, 389, - 263, 426, 1243, 1271, 370, 512, 513, 312, 390, 0, - 0, 0, 1300, 1285, 511, 0, 1228, 1303, 1197, 1216, - 1313, 1219, 1222, 1264, 1176, 1242, 409, 1213, 1169, 1201, - 1171, 1208, 1172, 1199, 1230, 267, 1196, 1287, 1246, 1302, - 360, 264, 1178, 1202, 423, 1218, 205, 1266, 480, 251, - 371, 368, 519, 279, 270, 266, 249, 313, 379, 421, - 501, 415, 1309, 364, 1252, 0, 490, 394, 0, 0, - 0, 1232, 1291, 1240, 1278, 1227, 1265, 1186, 1251, 1304, - 1214, 1261, 1305, 319, 247, 321, 204, 406, 491, 283, - 0, 0, 0, 0, 0, 665, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 237, 0, 0, 244, 0, - 0, 0, 345, 354, 353, 334, 335, 337, 339, 344, - 351, 357, 1210, 1258, 1299, 1211, 1260, 262, 317, 269, - 261, 516, 1310, 1290, 1175, 1239, 1298, 0, 0, 228, - 1301, 1234, 0, 1263, 0, 1316, 1170, 1254, 0, 1173, - 1177, 1312, 1294, 1205, 272, 0, 0, 0, 0, 0, - 0, 0, 1231, 1241, 1275, 1279, 1225, 0, 0, 0, - 0, 0, 0, 0, 1203, 0, 1250, 0, 0, 0, - 1182, 1174, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1229, 0, 0, 0, 0, 1185, - 0, 1204, 1276, 0, 1168, 294, 1179, 395, 254, 0, - 447, 1283, 1293, 1226, 558, 1297, 1224, 1223, 1270, 1183, - 1289, 1217, 359, 1181, 326, 200, 224, 0, 1215, 405, - 455, 467, 1288, 1200, 1209, 252, 1207, 465, 419, 536, - 232, 281, 452, 425, 463, 435, 284, 1249, 1268, 464, - 366, 521, 445, 533, 559, 560, 260, 399, 545, 505, - 553, 585, 225, 257, 413, 498, 539, 487, 391, 517, - 518, 325, 486, 292, 203, 363, 565, 223, 473, 365, - 241, 230, 523, 542, 286, 450, 429, 430, 567, 580, - 568, 570, 571, 212, 500, 531, 238, 477, 0, 0, - 587, 246, 497, 214, 528, 496, 387, 322, 323, 213, - 0, 451, 265, 290, 0, 0, 255, 408, 525, 526, - 253, 588, 227, 552, 219, 1180, 551, 401, 520, 529, - 388, 377, 218, 527, 386, 376, 330, 349, 350, 277, - 303, 442, 369, 443, 302, 304, 397, 396, 398, 207, - 540, 0, 208, 0, 492, 541, 589, 233, 234, 236, - 1195, 276, 280, 288, 291, 299, 300, 309, 361, 412, - 441, 437, 446, 1284, 515, 534, 546, 557, 563, 564, - 566, 572, 573, 574, 575, 581, 579, 576, 577, 578, - 569, 400, 307, 488, 329, 367, 1273, 1315, 418, 466, - 239, 538, 489, 1318, 1319, 1320, 1321, 1190, 1194, 1188, - 1255, 1189, 1244, 1245, 1191, 1306, 1307, 1308, 590, 591, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 0, 1277, 1184, 0, - 1192, 1193, 1286, 1295, 1296, 608, 378, 479, 535, 331, - 343, 346, 336, 355, 0, 356, 332, 333, 338, 340, - 341, 342, 347, 348, 352, 358, 248, 210, 384, 392, - 514, 308, 215, 216, 217, 507, 508, 509, 510, 549, - 550, 554, 456, 457, 458, 459, 289, 544, 305, 462, - 461, 327, 328, 373, 444, 1248, 199, 220, 362, 1311, - 448, 285, 586, 548, 543, 206, 222, 1187, 259, 1198, - 1206, 0, 1212, 1220, 1221, 1233, 1235, 1236, 1237, 1238, - 1256, 1257, 1259, 1267, 1269, 1272, 1274, 1281, 1292, 1314, - 201, 202, 209, 221, 231, 235, 242, 258, 273, 275, - 282, 295, 306, 314, 315, 318, 324, 374, 380, 381, - 382, 383, 402, 403, 404, 407, 410, 411, 414, 416, - 417, 420, 424, 428, 431, 432, 434, 436, 438, 449, - 454, 468, 469, 470, 471, 472, 475, 476, 481, 482, - 483, 484, 485, 493, 494, 499, 522, 524, 537, 555, - 561, 474, 297, 298, 439, 440, 310, 311, 583, 584, - 296, 532, 562, 530, 582, 556, 433, 372, 1247, 1317, - 1253, 375, 278, 301, 316, 1262, 547, 495, 226, 460, - 287, 250, 1280, 1282, 211, 245, 229, 256, 271, 274, - 320, 385, 393, 422, 427, 293, 268, 243, 453, 240, - 478, 502, 503, 504, 506, 389, 263, 426, 1243, 1271, - 370, 512, 513, 312, 390, 0, 0, 0, 1300, 1285, - 511, 0, 1228, 1303, 1197, 1216, 1313, 1219, 1222, 1264, - 1176, 1242, 409, 1213, 1169, 1201, 1171, 1208, 1172, 1199, - 1230, 267, 1196, 1287, 1246, 1302, 360, 264, 1178, 1202, - 423, 1218, 205, 1266, 480, 251, 371, 368, 519, 279, - 270, 266, 249, 313, 379, 421, 501, 415, 1309, 364, - 1252, 0, 490, 394, 0, 0, 0, 1232, 1291, 1240, - 1278, 1227, 1265, 1186, 1251, 1304, 1214, 1261, 1305, 319, - 247, 321, 204, 406, 491, 283, 0, 0, 0, 0, - 0, 839, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 237, 0, 0, 244, 0, 0, 0, 345, 354, - 353, 334, 335, 337, 339, 344, 351, 357, 1210, 1258, - 1299, 1211, 1260, 262, 317, 269, 261, 516, 1310, 1290, - 1175, 1239, 1298, 0, 0, 228, 1301, 1234, 0, 1263, - 0, 1316, 1170, 1254, 0, 1173, 1177, 1312, 1294, 1205, - 272, 0, 0, 0, 0, 0, 0, 0, 1231, 1241, - 1275, 1279, 1225, 0, 0, 0, 0, 0, 0, 0, - 1203, 0, 1250, 0, 0, 0, 1182, 1174, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1229, 0, 0, 0, 0, 1185, 0, 1204, 1276, 0, - 1168, 294, 1179, 395, 254, 0, 447, 1283, 1293, 1226, - 558, 1297, 1224, 1223, 1270, 1183, 1289, 1217, 359, 1181, - 326, 200, 224, 0, 1215, 405, 455, 467, 1288, 1200, - 1209, 252, 1207, 465, 419, 536, 232, 281, 452, 425, - 463, 435, 284, 1249, 1268, 464, 366, 521, 445, 533, - 559, 560, 260, 399, 545, 505, 553, 585, 225, 257, - 413, 498, 539, 487, 391, 517, 518, 325, 486, 292, - 203, 363, 565, 223, 473, 365, 241, 230, 523, 542, - 286, 450, 429, 430, 567, 580, 568, 570, 571, 212, - 500, 531, 238, 477, 0, 0, 587, 246, 497, 214, - 528, 496, 387, 322, 323, 213, 0, 451, 265, 290, - 0, 0, 255, 408, 525, 526, 253, 588, 227, 552, - 219, 1180, 551, 401, 520, 529, 388, 377, 218, 527, - 386, 376, 330, 349, 350, 277, 303, 442, 369, 443, - 302, 304, 397, 396, 398, 207, 540, 0, 208, 0, - 492, 541, 589, 233, 234, 236, 1195, 276, 280, 288, - 291, 299, 300, 309, 361, 412, 441, 437, 446, 1284, - 515, 534, 546, 557, 563, 564, 566, 572, 573, 574, - 575, 581, 579, 576, 577, 578, 569, 400, 307, 488, - 329, 367, 1273, 1315, 418, 466, 239, 538, 489, 1318, - 1319, 1320, 1321, 1190, 1194, 1188, 1255, 1189, 1244, 1245, - 1191, 1306, 1307, 1308, 590, 591, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 0, 1277, 1184, 0, 1192, 1193, 1286, 1295, - 1296, 608, 378, 479, 535, 331, 343, 346, 336, 355, - 0, 356, 332, 333, 338, 340, 341, 342, 347, 348, - 352, 358, 248, 210, 384, 392, 514, 308, 215, 216, - 217, 507, 508, 509, 510, 549, 550, 554, 456, 457, - 458, 459, 289, 544, 305, 462, 461, 327, 328, 373, - 444, 1248, 199, 220, 362, 1311, 448, 285, 586, 548, - 543, 206, 222, 1187, 259, 1198, 1206, 0, 1212, 1220, - 1221, 1233, 1235, 1236, 1237, 1238, 1256, 1257, 1259, 1267, - 1269, 1272, 1274, 1281, 1292, 1314, 201, 202, 209, 221, - 231, 235, 242, 258, 273, 275, 282, 295, 306, 314, - 315, 318, 324, 374, 380, 381, 382, 383, 402, 403, - 404, 407, 410, 411, 414, 416, 417, 420, 424, 428, - 431, 432, 434, 436, 438, 449, 454, 468, 469, 470, - 471, 472, 475, 476, 481, 482, 483, 484, 485, 493, - 494, 499, 522, 524, 537, 555, 561, 474, 297, 298, - 439, 440, 310, 311, 583, 584, 296, 532, 562, 530, - 582, 556, 433, 372, 1247, 1317, 1253, 375, 278, 301, - 316, 1262, 547, 495, 226, 460, 287, 250, 1280, 1282, - 211, 245, 229, 256, 271, 274, 320, 385, 393, 422, - 427, 293, 268, 243, 453, 240, 478, 502, 503, 504, - 506, 389, 263, 426, 1243, 1271, 370, 512, 513, 312, - 390, 0, 0, 0, 1300, 1285, 511, 0, 1228, 1303, - 1197, 1216, 1313, 1219, 1222, 1264, 1176, 1242, 409, 1213, - 1169, 1201, 1171, 1208, 1172, 1199, 1230, 267, 1196, 1287, - 1246, 1302, 360, 264, 1178, 1202, 423, 1218, 205, 1266, - 480, 251, 371, 368, 519, 279, 270, 266, 249, 313, - 379, 421, 501, 415, 1309, 364, 1252, 0, 490, 394, - 0, 0, 0, 1232, 1291, 1240, 1278, 1227, 1265, 1186, - 1251, 1304, 1214, 1261, 1305, 319, 247, 321, 204, 406, - 491, 283, 0, 0, 0, 0, 0, 197, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 237, 0, 0, - 244, 0, 0, 0, 345, 354, 353, 334, 335, 337, - 339, 344, 351, 357, 1210, 1258, 1299, 1211, 1260, 262, - 317, 269, 261, 516, 1310, 1290, 1175, 1239, 1298, 0, - 0, 228, 1301, 1234, 0, 1263, 0, 1316, 1170, 1254, - 0, 1173, 1177, 1312, 1294, 1205, 272, 0, 0, 0, - 0, 0, 0, 0, 1231, 1241, 1275, 1279, 1225, 0, - 0, 0, 0, 0, 0, 0, 1203, 0, 1250, 0, - 0, 0, 1182, 1174, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1229, 0, 0, 0, - 0, 1185, 0, 1204, 1276, 0, 1168, 294, 1179, 395, - 254, 0, 447, 1283, 1293, 1226, 558, 1297, 1224, 1223, - 1270, 1183, 1289, 1217, 359, 1181, 326, 200, 224, 0, - 1215, 405, 455, 467, 1288, 1200, 1209, 252, 1207, 465, - 419, 536, 232, 281, 452, 425, 463, 435, 284, 1249, - 1268, 464, 366, 521, 445, 533, 559, 560, 260, 399, - 545, 505, 553, 585, 225, 257, 413, 498, 539, 487, - 391, 517, 518, 325, 486, 292, 203, 363, 565, 223, - 473, 365, 241, 230, 523, 542, 286, 450, 429, 430, - 567, 580, 568, 570, 571, 212, 500, 531, 238, 477, - 0, 0, 587, 246, 497, 214, 528, 496, 387, 322, - 323, 213, 0, 451, 265, 290, 0, 0, 255, 408, - 525, 526, 253, 588, 227, 552, 219, 1180, 551, 401, - 520, 529, 388, 377, 218, 527, 386, 376, 330, 349, - 350, 277, 303, 442, 369, 443, 302, 304, 397, 396, - 398, 207, 540, 0, 208, 0, 492, 541, 589, 233, - 234, 236, 1195, 276, 280, 288, 291, 299, 300, 309, - 361, 412, 441, 437, 446, 1284, 515, 534, 546, 557, - 563, 564, 566, 572, 573, 574, 575, 581, 579, 576, - 577, 578, 569, 400, 307, 488, 329, 367, 1273, 1315, - 418, 466, 239, 538, 489, 1318, 1319, 1320, 1321, 1190, - 1194, 1188, 1255, 1189, 1244, 1245, 1191, 1306, 1307, 1308, - 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 0, 1277, - 1184, 0, 1192, 1193, 1286, 1295, 1296, 608, 378, 479, - 535, 331, 343, 346, 336, 355, 0, 356, 332, 333, - 338, 340, 341, 342, 347, 348, 352, 358, 248, 210, - 384, 392, 514, 308, 215, 216, 217, 507, 508, 509, - 510, 549, 550, 554, 456, 457, 458, 459, 289, 544, - 305, 462, 461, 327, 328, 373, 444, 1248, 199, 220, - 362, 1311, 448, 285, 586, 548, 543, 206, 222, 1187, - 259, 1198, 1206, 0, 1212, 1220, 1221, 1233, 1235, 1236, - 1237, 1238, 1256, 1257, 1259, 1267, 1269, 1272, 1274, 1281, - 1292, 1314, 201, 202, 209, 221, 231, 235, 242, 258, - 273, 275, 282, 295, 306, 314, 315, 318, 324, 374, - 380, 381, 382, 383, 402, 403, 404, 407, 410, 411, - 414, 416, 417, 420, 424, 428, 431, 432, 434, 436, - 438, 449, 454, 468, 469, 470, 471, 472, 475, 476, - 481, 482, 483, 484, 485, 493, 494, 499, 522, 524, - 537, 555, 561, 474, 297, 298, 439, 440, 310, 311, - 583, 584, 296, 532, 562, 530, 582, 556, 433, 372, - 1247, 1317, 1253, 375, 278, 301, 316, 1262, 547, 495, - 226, 460, 287, 250, 1280, 1282, 211, 245, 229, 256, - 271, 274, 320, 385, 393, 422, 427, 293, 268, 243, - 453, 240, 478, 502, 503, 504, 506, 389, 263, 426, - 1243, 1271, 370, 512, 513, 312, 390, 0, 0, 0, - 0, 0, 511, 0, 718, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 409, 0, 0, 0, 0, 705, - 0, 0, 0, 267, 710, 0, 0, 0, 360, 264, - 0, 0, 423, 0, 205, 0, 480, 251, 371, 368, - 519, 279, 270, 266, 249, 313, 379, 421, 501, 415, - 717, 364, 0, 0, 490, 394, 0, 0, 0, 0, - 0, 713, 714, 0, 0, 0, 0, 0, 0, 0, - 0, 319, 247, 321, 204, 406, 491, 283, 0, 95, - 0, 0, 855, 839, 805, 806, 843, 856, 857, 858, - 859, 844, 0, 237, 845, 846, 244, 847, 0, 804, - 745, 747, 746, 764, 765, 766, 767, 768, 769, 770, - 743, 852, 860, 861, 0, 262, 317, 269, 261, 516, - 0, 0, 2031, 2032, 2033, 0, 0, 228, 0, 0, - 0, 0, 0, 0, 0, 687, 702, 0, 716, 0, - 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 699, 700, - 0, 0, 0, 0, 799, 0, 701, 0, 0, 709, - 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, - 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, - 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, - 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, - 902, 903, 712, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 294, 0, 395, 254, 0, 447, 798, - 0, 0, 558, 0, 0, 796, 0, 0, 0, 0, - 359, 0, 326, 200, 224, 0, 0, 405, 455, 467, - 0, 0, 0, 849, 0, 465, 419, 536, 232, 281, - 452, 425, 463, 435, 284, 0, 0, 464, 366, 521, - 445, 533, 559, 560, 260, 399, 545, 505, 553, 585, - 225, 257, 413, 498, 539, 487, 391, 517, 518, 325, - 486, 292, 203, 363, 565, 223, 473, 365, 241, 230, - 523, 542, 286, 450, 429, 430, 567, 580, 568, 570, - 571, 212, 500, 531, 238, 477, 0, 0, 587, 246, - 497, 214, 528, 496, 387, 322, 323, 213, 0, 451, - 265, 290, 0, 0, 255, 408, 850, 851, 253, 588, - 751, 552, 219, 0, 551, 401, 520, 529, 388, 377, - 218, 527, 386, 376, 330, 759, 760, 277, 303, 442, - 369, 443, 302, 304, 397, 396, 398, 207, 540, 0, - 208, 0, 492, 541, 589, 233, 234, 236, 0, 276, - 280, 288, 291, 299, 300, 309, 361, 412, 441, 437, - 446, 0, 515, 534, 546, 557, 563, 564, 566, 572, - 573, 574, 575, 581, 579, 576, 577, 578, 569, 400, - 307, 488, 329, 367, 0, 0, 418, 466, 239, 538, - 489, 0, 0, 0, 0, 809, 797, 722, 813, 724, - 810, 811, 719, 720, 723, 812, 590, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 0, 800, 708, 707, 0, 715, - 0, 741, 742, 744, 748, 749, 750, 761, 762, 763, - 771, 773, 774, 772, 775, 776, 777, 780, 781, 782, - 783, 778, 779, 784, 725, 729, 726, 727, 728, 740, - 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, - 823, 824, 825, 826, 827, 828, 754, 758, 757, 755, - 756, 752, 753, 706, 199, 220, 362, 0, 448, 285, - 586, 548, 543, 206, 222, 814, 259, 815, 0, 0, - 819, 0, 0, 0, 821, 820, 0, 822, 788, 787, - 0, 0, 816, 817, 0, 818, 0, 0, 201, 202, - 209, 221, 231, 235, 242, 258, 273, 275, 282, 295, - 306, 314, 315, 318, 324, 374, 380, 381, 382, 383, - 402, 403, 404, 407, 410, 411, 414, 416, 417, 420, - 424, 428, 431, 432, 434, 436, 438, 449, 454, 468, - 469, 470, 471, 472, 475, 476, 481, 482, 483, 484, - 485, 493, 494, 499, 522, 524, 537, 555, 561, 474, - 829, 830, 831, 832, 833, 834, 835, 836, 296, 532, - 562, 530, 582, 556, 433, 372, 0, 0, 0, 375, - 278, 301, 316, 0, 547, 495, 226, 460, 287, 250, - 854, 0, 211, 245, 229, 256, 271, 274, 320, 385, - 393, 422, 427, 293, 268, 243, 453, 240, 478, 502, - 503, 504, 506, 389, 263, 426, 390, 0, 370, 512, - 513, 312, 511, 0, 718, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 409, 0, 0, 0, 0, 705, - 0, 0, 0, 267, 710, 0, 0, 0, 360, 264, - 0, 0, 423, 0, 205, 0, 480, 251, 371, 368, - 519, 279, 270, 266, 249, 313, 379, 421, 501, 415, - 717, 364, 0, 0, 490, 394, 0, 0, 0, 0, - 0, 713, 714, 0, 0, 0, 0, 0, 0, 2180, - 0, 319, 247, 321, 204, 406, 491, 283, 0, 95, - 0, 0, 855, 839, 805, 806, 843, 856, 857, 858, - 859, 844, 0, 237, 845, 846, 244, 847, 0, 804, - 745, 747, 746, 764, 765, 766, 767, 768, 769, 770, - 743, 852, 860, 861, 2181, 262, 317, 269, 261, 516, - 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, - 0, 0, 0, 0, 0, 687, 702, 0, 716, 0, - 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 699, 700, - 0, 0, 0, 0, 799, 0, 701, 0, 0, 709, - 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, - 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, - 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, - 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, - 902, 903, 712, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 294, 0, 395, 254, 0, 447, 798, - 0, 0, 558, 0, 0, 796, 0, 0, 0, 0, - 359, 0, 326, 200, 224, 0, 0, 405, 455, 467, - 0, 0, 0, 849, 0, 465, 419, 536, 232, 281, - 452, 425, 463, 435, 284, 0, 0, 464, 366, 521, - 445, 533, 559, 560, 260, 399, 545, 505, 553, 585, - 225, 257, 413, 498, 539, 487, 391, 517, 518, 325, - 486, 292, 203, 363, 565, 223, 473, 365, 241, 230, - 523, 542, 286, 450, 429, 430, 567, 580, 568, 570, - 571, 212, 500, 531, 238, 477, 0, 0, 587, 246, - 497, 214, 528, 496, 387, 322, 323, 213, 0, 451, - 265, 290, 0, 0, 255, 408, 850, 851, 253, 588, - 751, 552, 219, 0, 551, 401, 520, 529, 388, 377, - 218, 527, 386, 376, 330, 759, 760, 277, 303, 442, - 369, 443, 302, 304, 397, 396, 398, 207, 540, 0, - 208, 0, 492, 541, 589, 233, 234, 236, 0, 276, - 280, 288, 291, 299, 300, 309, 361, 412, 441, 437, - 446, 0, 515, 534, 546, 557, 563, 564, 566, 572, - 573, 574, 575, 581, 579, 576, 577, 578, 569, 400, - 307, 488, 329, 367, 0, 0, 418, 466, 239, 538, - 489, 0, 0, 0, 0, 809, 797, 722, 813, 724, - 810, 811, 719, 720, 723, 812, 590, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 0, 800, 708, 707, 0, 715, - 0, 741, 742, 744, 748, 749, 750, 761, 762, 763, - 771, 773, 774, 772, 775, 776, 777, 780, 781, 782, - 783, 778, 779, 784, 725, 729, 726, 727, 728, 740, - 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, - 823, 824, 825, 826, 827, 828, 754, 758, 757, 755, - 756, 752, 753, 706, 199, 220, 362, 0, 448, 285, - 586, 548, 543, 206, 222, 814, 259, 815, 0, 0, - 819, 0, 0, 0, 821, 820, 0, 822, 788, 787, - 0, 0, 816, 817, 0, 818, 0, 0, 201, 202, - 209, 221, 231, 235, 242, 258, 273, 275, 282, 295, - 306, 314, 315, 318, 324, 374, 380, 381, 382, 383, - 402, 403, 404, 407, 410, 411, 414, 416, 417, 420, - 424, 428, 431, 432, 434, 436, 438, 449, 454, 468, - 469, 470, 471, 472, 475, 476, 481, 482, 483, 484, - 485, 493, 494, 499, 522, 524, 537, 555, 561, 474, - 829, 830, 831, 832, 833, 834, 835, 836, 296, 532, - 562, 530, 582, 556, 433, 372, 0, 0, 0, 375, - 278, 301, 316, 0, 547, 495, 226, 460, 287, 250, - 854, 0, 211, 245, 229, 256, 271, 274, 320, 385, - 393, 422, 427, 293, 268, 243, 453, 240, 478, 502, - 503, 504, 506, 389, 263, 426, 0, 390, 370, 512, - 513, 312, 86, 511, 0, 718, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, - 705, 0, 0, 0, 267, 710, 0, 0, 0, 360, - 264, 0, 0, 423, 0, 205, 0, 480, 251, 371, - 368, 519, 279, 270, 266, 249, 313, 379, 421, 501, - 415, 717, 364, 0, 0, 490, 394, 0, 0, 0, - 0, 0, 713, 714, 0, 0, 0, 0, 0, 0, - 0, 0, 319, 247, 321, 204, 406, 491, 283, 0, - 95, 0, 0, 855, 839, 805, 806, 843, 856, 857, - 858, 859, 844, 0, 237, 845, 846, 244, 847, 0, - 804, 745, 747, 746, 764, 765, 766, 767, 768, 769, - 770, 743, 852, 860, 861, 0, 262, 317, 269, 261, - 516, 0, 0, 0, 0, 0, 0, 0, 228, 0, - 0, 0, 0, 0, 0, 0, 687, 702, 0, 716, - 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, - 700, 0, 0, 0, 0, 799, 0, 701, 0, 0, - 709, 862, 863, 864, 865, 866, 867, 868, 869, 870, - 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, - 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, - 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, - 901, 902, 903, 712, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 294, 0, 395, 254, 0, 447, - 798, 0, 0, 558, 0, 0, 796, 0, 0, 0, - 0, 359, 0, 326, 200, 224, 0, 0, 405, 455, - 467, 0, 0, 0, 849, 0, 465, 419, 536, 232, - 281, 452, 425, 463, 435, 284, 0, 0, 464, 366, - 521, 445, 533, 559, 560, 260, 399, 545, 505, 553, - 585, 225, 257, 413, 498, 539, 487, 391, 517, 518, - 325, 486, 292, 203, 363, 565, 223, 473, 365, 241, - 230, 523, 542, 286, 450, 429, 430, 567, 580, 568, - 570, 571, 212, 500, 531, 238, 477, 0, 0, 587, - 246, 497, 214, 528, 496, 387, 322, 323, 213, 0, - 451, 265, 290, 0, 0, 255, 408, 850, 851, 253, - 588, 751, 552, 219, 0, 551, 401, 520, 529, 388, - 377, 218, 527, 386, 376, 330, 759, 760, 277, 303, - 442, 369, 443, 302, 304, 397, 396, 398, 207, 540, - 0, 208, 0, 492, 541, 589, 233, 234, 236, 0, - 276, 280, 288, 291, 299, 300, 309, 361, 412, 441, - 437, 446, 0, 515, 534, 546, 557, 563, 564, 566, - 572, 573, 574, 575, 581, 579, 576, 577, 578, 569, - 400, 307, 488, 329, 367, 0, 0, 418, 466, 239, - 538, 489, 0, 0, 0, 0, 809, 797, 722, 813, - 724, 810, 811, 719, 720, 723, 812, 590, 591, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 0, 800, 708, 707, 0, - 715, 0, 741, 742, 744, 748, 749, 750, 761, 762, - 763, 771, 773, 774, 772, 775, 776, 777, 780, 781, - 782, 783, 778, 779, 784, 725, 729, 726, 727, 728, - 740, 730, 731, 732, 733, 734, 735, 736, 737, 738, - 739, 823, 824, 825, 826, 827, 828, 754, 758, 757, - 755, 756, 752, 753, 706, 199, 220, 362, 94, 448, - 285, 586, 548, 543, 206, 222, 814, 259, 815, 0, - 0, 819, 0, 0, 0, 821, 820, 0, 822, 788, - 787, 0, 0, 816, 817, 0, 818, 0, 0, 201, - 202, 209, 221, 231, 235, 242, 258, 273, 275, 282, - 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, - 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, - 420, 424, 428, 431, 432, 434, 436, 438, 449, 454, - 468, 469, 470, 471, 472, 475, 476, 481, 482, 483, - 484, 485, 493, 494, 499, 522, 524, 537, 555, 561, - 474, 829, 830, 831, 832, 833, 834, 835, 836, 296, - 532, 562, 530, 582, 556, 433, 372, 0, 0, 0, - 375, 278, 301, 316, 0, 547, 495, 226, 460, 287, - 250, 854, 0, 211, 245, 229, 256, 271, 274, 320, - 385, 393, 422, 427, 293, 268, 243, 453, 240, 478, - 502, 503, 504, 506, 389, 263, 426, 390, 0, 370, - 512, 513, 312, 511, 0, 718, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, - 705, 0, 0, 0, 267, 710, 0, 0, 0, 360, - 264, 0, 0, 423, 0, 205, 0, 480, 251, 371, - 368, 519, 279, 270, 266, 249, 313, 379, 421, 501, - 415, 717, 364, 0, 0, 490, 394, 0, 0, 0, - 0, 0, 713, 714, 0, 0, 0, 0, 0, 0, - 0, 0, 319, 247, 321, 204, 406, 491, 283, 0, - 95, 0, 0, 855, 839, 805, 806, 843, 856, 857, - 858, 859, 844, 0, 237, 845, 846, 244, 847, 0, - 804, 745, 747, 746, 764, 765, 766, 767, 768, 769, - 770, 743, 852, 860, 861, 0, 262, 317, 269, 261, - 516, 0, 0, 0, 0, 0, 0, 0, 228, 0, - 0, 0, 0, 0, 0, 0, 687, 702, 0, 716, - 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, - 700, 0, 0, 0, 0, 799, 0, 701, 0, 0, - 709, 862, 863, 864, 865, 866, 867, 868, 869, 870, - 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, - 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, - 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, - 901, 902, 903, 712, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 294, 0, 395, 254, 0, 447, - 798, 0, 0, 558, 0, 0, 796, 0, 0, 0, - 0, 359, 0, 326, 200, 224, 0, 0, 405, 455, - 467, 0, 0, 0, 849, 0, 465, 419, 536, 232, - 281, 452, 425, 463, 435, 284, 3544, 0, 464, 366, - 521, 445, 533, 559, 560, 260, 399, 545, 505, 553, - 585, 225, 257, 413, 498, 539, 487, 391, 517, 518, - 325, 486, 292, 203, 363, 565, 223, 473, 365, 241, - 230, 523, 542, 286, 450, 429, 430, 567, 580, 568, - 570, 571, 212, 500, 531, 238, 477, 0, 0, 587, - 246, 497, 214, 528, 496, 387, 322, 323, 213, 0, - 451, 265, 290, 0, 0, 255, 408, 850, 851, 253, - 588, 751, 552, 219, 0, 551, 401, 520, 529, 388, - 377, 218, 527, 386, 376, 330, 759, 760, 277, 303, - 442, 369, 443, 302, 304, 397, 396, 398, 207, 540, - 0, 208, 0, 492, 541, 589, 233, 234, 236, 0, - 276, 280, 288, 291, 299, 300, 309, 361, 412, 441, - 437, 446, 0, 515, 534, 546, 557, 563, 564, 566, - 572, 573, 574, 575, 581, 579, 576, 577, 578, 569, - 400, 307, 488, 329, 367, 0, 0, 418, 466, 239, - 538, 489, 0, 0, 0, 0, 809, 797, 722, 813, - 724, 810, 811, 719, 720, 723, 812, 590, 591, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 0, 800, 708, 707, 0, - 715, 0, 741, 742, 744, 748, 749, 750, 761, 762, - 763, 771, 773, 774, 772, 775, 776, 777, 780, 781, - 782, 783, 778, 779, 784, 725, 729, 726, 727, 728, - 740, 730, 731, 732, 733, 734, 735, 736, 737, 738, - 739, 823, 824, 825, 826, 827, 828, 754, 758, 757, - 755, 756, 752, 753, 706, 199, 220, 362, 0, 448, - 285, 586, 548, 543, 206, 222, 814, 259, 815, 0, - 0, 819, 0, 0, 0, 821, 820, 0, 822, 788, - 787, 0, 0, 816, 817, 0, 818, 0, 0, 201, - 202, 209, 221, 231, 235, 242, 258, 273, 275, 282, - 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, - 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, - 420, 424, 428, 431, 432, 434, 436, 438, 449, 454, - 468, 469, 470, 471, 472, 475, 476, 481, 482, 483, - 484, 485, 493, 494, 499, 522, 524, 537, 555, 561, - 474, 829, 830, 831, 832, 833, 834, 835, 836, 296, - 532, 562, 530, 582, 556, 433, 372, 0, 0, 0, - 375, 278, 301, 316, 0, 547, 495, 226, 460, 287, - 250, 854, 0, 211, 245, 229, 256, 271, 274, 320, - 385, 393, 422, 427, 293, 268, 243, 453, 240, 478, - 502, 503, 504, 506, 389, 263, 426, 390, 0, 370, - 512, 513, 312, 511, 0, 718, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, - 705, 0, 0, 0, 267, 710, 0, 0, 0, 360, - 264, 0, 0, 423, 0, 205, 0, 480, 251, 371, - 368, 519, 279, 270, 266, 249, 313, 379, 421, 501, - 415, 717, 364, 0, 0, 490, 394, 0, 0, 0, - 0, 0, 713, 714, 0, 0, 0, 0, 0, 0, - 0, 0, 319, 247, 321, 204, 406, 491, 283, 0, - 95, 0, 1562, 855, 839, 805, 806, 843, 856, 857, - 858, 859, 844, 0, 237, 845, 846, 244, 847, 0, - 804, 745, 747, 746, 764, 765, 766, 767, 768, 769, - 770, 743, 852, 860, 861, 0, 262, 317, 269, 261, - 516, 0, 0, 0, 0, 0, 0, 0, 228, 0, - 0, 0, 0, 0, 0, 0, 687, 702, 0, 716, - 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, - 700, 0, 0, 0, 0, 799, 0, 701, 0, 0, - 709, 862, 863, 864, 865, 866, 867, 868, 869, 870, - 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, - 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, - 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, - 901, 902, 903, 712, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 294, 0, 395, 254, 0, 447, - 798, 0, 0, 558, 0, 0, 796, 0, 0, 0, - 0, 359, 0, 326, 200, 224, 0, 0, 405, 455, - 467, 0, 0, 0, 849, 0, 465, 419, 536, 232, - 281, 452, 425, 463, 435, 284, 0, 0, 464, 366, - 521, 445, 533, 559, 560, 260, 399, 545, 505, 553, - 585, 225, 257, 413, 498, 539, 487, 391, 517, 518, - 325, 486, 292, 203, 363, 565, 223, 473, 365, 241, - 230, 523, 542, 286, 450, 429, 430, 567, 580, 568, - 570, 571, 212, 500, 531, 238, 477, 0, 0, 587, - 246, 497, 214, 528, 496, 387, 322, 323, 213, 0, - 451, 265, 290, 0, 0, 255, 408, 850, 851, 253, - 588, 751, 552, 219, 0, 551, 401, 520, 529, 388, - 377, 218, 527, 386, 376, 330, 759, 760, 277, 303, - 442, 369, 443, 302, 304, 397, 396, 398, 207, 540, - 0, 208, 0, 492, 541, 589, 233, 234, 236, 0, - 276, 280, 288, 291, 299, 300, 309, 361, 412, 441, - 437, 446, 0, 515, 534, 546, 557, 563, 564, 566, - 572, 573, 574, 575, 581, 579, 576, 577, 578, 569, - 400, 307, 488, 329, 367, 0, 0, 418, 466, 239, - 538, 489, 0, 0, 0, 0, 809, 797, 722, 813, - 724, 810, 811, 719, 720, 723, 812, 590, 591, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 0, 800, 708, 707, 0, - 715, 0, 741, 742, 744, 748, 749, 750, 761, 762, - 763, 771, 773, 774, 772, 775, 776, 777, 780, 781, - 782, 783, 778, 779, 784, 725, 729, 726, 727, 728, - 740, 730, 731, 732, 733, 734, 735, 736, 737, 738, - 739, 823, 824, 825, 826, 827, 828, 754, 758, 757, - 755, 756, 752, 753, 706, 199, 220, 362, 0, 448, - 285, 586, 548, 543, 206, 222, 814, 259, 815, 0, - 0, 819, 0, 0, 0, 821, 820, 0, 822, 788, - 787, 0, 0, 816, 817, 0, 818, 0, 0, 201, - 202, 209, 221, 231, 235, 242, 258, 273, 275, 282, - 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, - 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, - 420, 424, 428, 431, 432, 434, 436, 438, 449, 454, - 468, 469, 470, 471, 472, 475, 476, 481, 482, 483, - 484, 485, 493, 494, 499, 522, 524, 537, 555, 561, - 474, 829, 830, 831, 832, 833, 834, 835, 836, 296, - 532, 562, 530, 582, 556, 433, 372, 0, 0, 0, - 375, 278, 301, 316, 0, 547, 495, 226, 460, 287, - 250, 854, 0, 211, 245, 229, 256, 271, 274, 320, - 385, 393, 422, 427, 293, 268, 243, 453, 240, 478, - 502, 503, 504, 506, 389, 263, 426, 390, 0, 370, - 512, 513, 312, 511, 0, 718, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, - 705, 0, 0, 0, 267, 710, 0, 0, 0, 360, - 264, 0, 0, 423, 0, 205, 0, 480, 251, 371, - 368, 519, 279, 270, 266, 249, 313, 379, 421, 501, - 415, 717, 364, 0, 0, 490, 394, 0, 0, 0, - 0, 0, 713, 714, 0, 0, 0, 0, 0, 0, - 0, 0, 319, 247, 321, 204, 406, 491, 283, 0, - 95, 0, 0, 855, 839, 805, 806, 843, 856, 857, - 858, 859, 844, 0, 237, 845, 846, 244, 847, 0, - 804, 745, 747, 746, 764, 765, 766, 767, 768, 769, - 770, 743, 852, 860, 861, 0, 262, 317, 269, 261, - 516, 0, 0, 0, 0, 0, 0, 0, 228, 0, - 0, 0, 0, 0, 0, 0, 687, 702, 0, 716, - 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, - 700, 943, 0, 0, 0, 799, 0, 701, 0, 0, - 709, 862, 863, 864, 865, 866, 867, 868, 869, 870, - 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, - 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, - 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, - 901, 902, 903, 712, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 294, 0, 395, 254, 0, 447, - 798, 0, 0, 558, 0, 0, 796, 0, 0, 0, - 0, 359, 0, 326, 200, 224, 0, 0, 405, 455, - 467, 0, 0, 0, 849, 0, 465, 419, 536, 232, - 281, 452, 425, 463, 435, 284, 0, 0, 464, 366, - 521, 445, 533, 559, 560, 260, 399, 545, 505, 553, - 585, 225, 257, 413, 498, 539, 487, 391, 517, 518, - 325, 486, 292, 203, 363, 565, 223, 473, 365, 241, - 230, 523, 542, 286, 450, 429, 430, 567, 580, 568, - 570, 571, 212, 500, 531, 238, 477, 0, 0, 587, - 246, 497, 214, 528, 496, 387, 322, 323, 213, 0, - 451, 265, 290, 0, 0, 255, 408, 850, 851, 253, - 588, 751, 552, 219, 0, 551, 401, 520, 529, 388, - 377, 218, 527, 386, 376, 330, 759, 760, 277, 303, - 442, 369, 443, 302, 304, 397, 396, 398, 207, 540, - 0, 208, 0, 492, 541, 589, 233, 234, 236, 0, - 276, 280, 288, 291, 299, 300, 309, 361, 412, 441, - 437, 446, 0, 515, 534, 546, 557, 563, 564, 566, - 572, 573, 574, 575, 581, 579, 576, 577, 578, 569, - 400, 307, 488, 329, 367, 0, 0, 418, 466, 239, - 538, 489, 0, 0, 0, 0, 809, 797, 722, 813, - 724, 810, 811, 719, 720, 723, 812, 590, 591, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 0, 800, 708, 707, 0, - 715, 0, 741, 742, 744, 748, 749, 750, 761, 762, - 763, 771, 773, 774, 772, 775, 776, 777, 780, 781, - 782, 783, 778, 779, 784, 725, 729, 726, 727, 728, - 740, 730, 731, 732, 733, 734, 735, 736, 737, 738, - 739, 823, 824, 825, 826, 827, 828, 754, 758, 757, - 755, 756, 752, 753, 706, 199, 220, 362, 0, 448, - 285, 586, 548, 543, 206, 222, 814, 259, 815, 0, - 0, 819, 0, 0, 0, 821, 820, 0, 822, 788, - 787, 0, 0, 816, 817, 0, 818, 0, 0, 201, - 202, 209, 221, 231, 235, 242, 258, 273, 275, 282, - 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, - 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, - 420, 424, 428, 431, 432, 434, 436, 438, 449, 454, - 468, 469, 470, 471, 472, 475, 476, 481, 482, 483, - 484, 485, 493, 494, 499, 522, 524, 537, 555, 561, - 474, 829, 830, 831, 832, 833, 834, 835, 836, 296, - 532, 562, 530, 582, 556, 433, 372, 0, 0, 0, - 375, 278, 301, 316, 0, 547, 495, 226, 460, 287, - 250, 854, 0, 211, 245, 229, 256, 271, 274, 320, - 385, 393, 422, 427, 293, 268, 243, 453, 240, 478, - 502, 503, 504, 506, 389, 263, 426, 390, 0, 370, - 512, 513, 312, 511, 0, 718, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, - 705, 0, 0, 0, 267, 710, 0, 0, 0, 360, - 264, 0, 0, 423, 0, 205, 0, 480, 251, 371, - 368, 519, 279, 270, 266, 249, 313, 379, 421, 501, - 415, 717, 364, 0, 0, 490, 394, 0, 0, 0, - 0, 0, 713, 714, 0, 0, 0, 0, 0, 0, - 0, 0, 319, 247, 321, 204, 406, 491, 283, 0, - 95, 0, 0, 855, 839, 805, 806, 843, 856, 857, - 858, 859, 844, 0, 237, 845, 846, 244, 847, 0, - 804, 745, 747, 746, 764, 765, 766, 767, 768, 769, - 770, 743, 852, 860, 861, 0, 262, 317, 269, 261, - 516, 0, 0, 0, 0, 0, 0, 0, 228, 0, - 0, 0, 0, 0, 0, 0, 687, 702, 0, 716, - 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, - 700, 0, 0, 0, 0, 799, 0, 701, 0, 0, - 709, 862, 863, 864, 865, 866, 867, 868, 869, 870, - 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, - 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, - 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, - 901, 902, 903, 712, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 294, 0, 395, 254, 0, 447, - 798, 0, 0, 558, 0, 0, 796, 0, 0, 0, - 0, 359, 0, 326, 200, 224, 0, 0, 405, 455, - 467, 0, 0, 0, 849, 0, 465, 419, 536, 232, - 281, 452, 425, 463, 435, 284, 0, 0, 464, 366, - 521, 445, 533, 559, 560, 260, 399, 545, 505, 553, - 585, 225, 257, 413, 498, 539, 487, 391, 517, 518, - 325, 486, 292, 203, 363, 565, 223, 473, 365, 241, - 230, 523, 542, 286, 450, 429, 430, 567, 580, 568, - 570, 571, 212, 500, 531, 238, 477, 0, 0, 587, - 246, 497, 214, 528, 496, 387, 322, 323, 213, 0, - 451, 265, 290, 0, 0, 255, 408, 850, 851, 253, - 588, 751, 552, 219, 0, 551, 401, 520, 529, 388, - 377, 218, 527, 386, 376, 330, 759, 760, 277, 303, - 442, 369, 443, 302, 304, 397, 396, 398, 207, 540, - 0, 208, 0, 492, 541, 589, 233, 234, 236, 0, - 276, 280, 288, 291, 299, 300, 309, 361, 412, 441, - 437, 446, 0, 515, 534, 546, 557, 563, 564, 566, - 572, 573, 574, 575, 581, 579, 576, 577, 578, 569, - 400, 307, 488, 329, 367, 0, 0, 418, 466, 239, - 538, 489, 0, 0, 0, 0, 809, 797, 722, 813, - 724, 810, 811, 719, 720, 723, 812, 590, 591, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 0, 800, 708, 707, 0, - 715, 0, 741, 742, 744, 748, 749, 750, 761, 762, - 763, 771, 773, 774, 772, 775, 776, 777, 780, 781, - 782, 783, 778, 779, 784, 725, 729, 726, 727, 728, - 740, 730, 731, 732, 733, 734, 735, 736, 737, 738, - 739, 823, 824, 825, 826, 827, 828, 754, 758, 757, - 755, 756, 752, 753, 706, 199, 220, 362, 0, 448, - 285, 586, 548, 543, 206, 222, 814, 259, 815, 0, - 0, 819, 0, 0, 0, 821, 820, 0, 822, 788, - 787, 0, 0, 816, 817, 0, 818, 0, 0, 201, - 202, 209, 221, 231, 235, 242, 258, 273, 275, 282, - 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, - 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, - 420, 424, 428, 431, 432, 434, 436, 438, 449, 454, - 468, 469, 470, 471, 472, 475, 476, 481, 482, 483, - 484, 485, 493, 494, 499, 522, 524, 537, 555, 561, - 474, 829, 830, 831, 832, 833, 834, 835, 836, 296, - 532, 562, 530, 582, 556, 433, 372, 0, 0, 0, - 375, 278, 301, 316, 0, 547, 495, 226, 460, 287, - 250, 854, 0, 211, 245, 229, 256, 271, 274, 320, - 385, 393, 422, 427, 293, 268, 243, 453, 240, 478, - 502, 503, 504, 506, 389, 263, 426, 390, 0, 370, - 512, 513, 312, 511, 0, 718, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, - 705, 0, 0, 0, 267, 710, 0, 0, 0, 360, - 264, 0, 0, 423, 0, 205, 0, 480, 251, 371, - 368, 519, 279, 270, 266, 249, 313, 379, 421, 501, - 415, 717, 364, 0, 0, 490, 394, 0, 0, 0, - 0, 0, 713, 714, 0, 0, 0, 0, 0, 0, - 0, 0, 319, 247, 321, 204, 406, 491, 283, 0, - 95, 0, 0, 855, 839, 805, 806, 843, 856, 857, - 858, 859, 844, 0, 237, 845, 846, 244, 847, 0, - 804, 745, 747, 746, 764, 765, 766, 767, 768, 769, - 770, 743, 852, 860, 861, 0, 262, 317, 269, 261, - 516, 0, 0, 0, 0, 0, 0, 0, 228, 0, - 0, 0, 0, 0, 0, 0, 0, 702, 0, 716, - 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 699, - 700, 0, 0, 0, 0, 799, 0, 701, 0, 0, - 709, 862, 863, 864, 865, 866, 867, 868, 869, 870, - 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, - 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, - 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, - 901, 902, 903, 712, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 294, 0, 395, 254, 0, 447, - 798, 0, 0, 558, 0, 0, 796, 0, 0, 0, - 0, 359, 0, 326, 200, 224, 0, 0, 405, 455, - 467, 0, 0, 0, 849, 0, 465, 419, 536, 232, - 281, 452, 425, 463, 435, 284, 0, 0, 464, 366, - 521, 445, 533, 559, 560, 260, 399, 545, 505, 553, - 585, 225, 257, 413, 498, 539, 487, 391, 517, 518, - 325, 486, 292, 203, 363, 565, 223, 473, 365, 241, - 230, 523, 542, 286, 450, 429, 430, 567, 580, 568, - 570, 571, 212, 500, 531, 238, 477, 0, 0, 587, - 246, 497, 214, 528, 496, 387, 322, 323, 213, 0, - 451, 265, 290, 0, 0, 255, 408, 850, 851, 253, - 588, 751, 552, 219, 0, 551, 401, 520, 529, 388, - 377, 218, 527, 386, 376, 330, 759, 760, 277, 303, - 442, 369, 443, 302, 304, 397, 396, 398, 207, 540, - 0, 208, 0, 492, 541, 589, 233, 234, 236, 0, - 276, 280, 288, 291, 299, 300, 309, 361, 412, 441, - 437, 446, 0, 515, 534, 546, 557, 563, 564, 566, - 572, 573, 574, 575, 581, 579, 576, 577, 578, 569, - 400, 307, 488, 329, 367, 0, 0, 418, 466, 239, - 538, 489, 0, 0, 0, 0, 809, 797, 722, 813, - 724, 810, 811, 719, 720, 723, 812, 590, 591, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 0, 800, 708, 707, 0, - 715, 0, 741, 742, 744, 748, 749, 750, 761, 762, - 763, 771, 773, 774, 772, 775, 776, 777, 780, 781, - 782, 783, 778, 779, 784, 725, 729, 726, 727, 728, - 740, 730, 731, 732, 733, 734, 735, 736, 737, 738, - 739, 823, 824, 825, 826, 827, 828, 754, 758, 757, - 755, 756, 752, 753, 706, 199, 220, 362, 0, 448, - 285, 586, 548, 543, 206, 222, 814, 259, 815, 0, - 0, 819, 0, 0, 0, 821, 820, 0, 822, 788, - 787, 0, 0, 816, 817, 0, 818, 0, 0, 201, - 202, 209, 221, 231, 235, 242, 258, 273, 275, 282, - 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, - 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, - 420, 424, 428, 431, 432, 434, 436, 438, 449, 454, - 468, 469, 470, 471, 472, 475, 476, 481, 482, 483, - 484, 485, 493, 494, 499, 522, 524, 537, 555, 561, - 474, 829, 830, 831, 832, 833, 834, 835, 836, 296, - 532, 562, 530, 582, 556, 433, 372, 0, 0, 0, - 375, 278, 301, 316, 0, 547, 495, 226, 460, 287, - 250, 854, 0, 211, 245, 229, 256, 271, 274, 320, - 385, 393, 422, 427, 293, 268, 243, 453, 240, 478, - 502, 503, 504, 506, 389, 263, 426, 390, 0, 370, - 512, 513, 312, 511, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, - 0, 0, 0, 0, 267, 0, 0, 0, 0, 360, - 264, 0, 0, 423, 0, 205, 0, 480, 251, 371, - 368, 519, 279, 270, 266, 249, 313, 379, 421, 501, - 415, 0, 364, 0, 0, 490, 394, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 319, 247, 321, 204, 406, 491, 283, 0, - 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 237, 0, 0, 244, 0, 0, - 0, 345, 354, 353, 334, 335, 337, 339, 344, 351, - 357, 0, 0, 0, 0, 0, 262, 317, 269, 261, - 516, 0, 0, 0, 0, 0, 0, 0, 228, 0, - 0, 0, 0, 1378, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1379, 1380, 1381, 1382, - 1383, 1384, 1385, 1387, 1386, 1388, 1389, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 294, 0, 395, 254, 0, 447, - 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, - 0, 359, 0, 326, 200, 224, 0, 0, 405, 455, - 467, 0, 0, 0, 252, 0, 465, 419, 536, 232, - 281, 452, 425, 463, 435, 284, 0, 0, 464, 366, - 521, 445, 533, 559, 560, 260, 399, 545, 505, 553, - 585, 225, 257, 413, 498, 539, 487, 391, 517, 518, - 325, 486, 292, 203, 363, 565, 223, 473, 365, 241, - 230, 523, 542, 286, 450, 429, 430, 567, 580, 568, - 570, 571, 212, 500, 531, 238, 477, 0, 0, 587, - 246, 497, 214, 528, 496, 387, 322, 323, 213, 0, - 451, 265, 290, 0, 0, 255, 408, 525, 526, 253, - 588, 227, 552, 219, 0, 551, 401, 520, 529, 388, - 377, 218, 527, 386, 376, 330, 349, 350, 277, 303, - 442, 369, 443, 302, 304, 397, 396, 398, 207, 540, - 0, 208, 0, 492, 541, 589, 233, 234, 236, 0, - 276, 280, 288, 291, 299, 300, 309, 361, 412, 441, - 437, 446, 0, 515, 534, 546, 557, 563, 564, 566, - 572, 573, 574, 575, 581, 579, 576, 577, 578, 569, - 400, 307, 488, 329, 367, 0, 0, 418, 466, 239, - 538, 489, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 590, 591, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 608, 378, 479, 535, 331, 343, - 346, 336, 355, 0, 356, 332, 333, 338, 340, 341, - 342, 347, 348, 352, 358, 248, 210, 384, 392, 514, - 308, 215, 216, 217, 507, 508, 509, 510, 549, 550, - 554, 456, 457, 458, 459, 289, 544, 305, 462, 461, - 327, 328, 373, 444, 0, 199, 220, 362, 0, 448, - 285, 586, 548, 543, 206, 222, 0, 259, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, - 202, 209, 221, 231, 235, 242, 258, 273, 275, 282, - 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, - 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, - 420, 424, 428, 431, 432, 434, 436, 438, 449, 454, - 468, 469, 470, 471, 472, 475, 476, 481, 482, 483, - 484, 485, 493, 494, 499, 522, 524, 537, 555, 561, - 474, 297, 298, 439, 440, 310, 311, 583, 584, 296, - 532, 562, 530, 582, 556, 433, 372, 0, 0, 0, - 375, 278, 301, 316, 0, 547, 495, 226, 460, 287, - 250, 0, 0, 211, 245, 229, 256, 271, 274, 320, - 385, 393, 422, 427, 293, 268, 243, 453, 240, 478, - 502, 503, 504, 506, 389, 263, 426, 390, 0, 370, - 512, 513, 312, 511, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, - 0, 0, 0, 0, 267, 0, 0, 0, 0, 360, - 264, 0, 0, 423, 0, 205, 0, 480, 251, 371, - 368, 519, 279, 270, 266, 249, 313, 379, 421, 501, - 415, 0, 364, 0, 0, 490, 394, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 319, 247, 321, 204, 406, 491, 283, 0, - 0, 0, 0, 0, 665, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 237, 0, 0, 244, 0, 0, - 0, 345, 354, 353, 334, 335, 337, 339, 344, 351, - 357, 0, 0, 0, 0, 0, 262, 317, 269, 261, - 516, 0, 0, 0, 0, 0, 0, 0, 228, 0, - 1016, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, ->>>>>>> e439161508 (fix: complete time period feature) - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -<<<<<<< HEAD 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, @@ -5835,7 +4042,7 @@ var yyAct = [...]int{ 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2174, 0, 0, 2173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, @@ -5850,545 +4057,14 @@ var yyAct = [...]int{ 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 411, 0, 0, 0, 2125, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, - 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, - 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, - 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, - 0, 0, 0, 0, 0, 0, 230, 0, 1021, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, -======= - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 294, 0, 395, 254, 0, 447, - 0, 0, 1015, 558, 0, 0, 0, 0, 0, 1012, - 1013, 359, 972, 326, 200, 224, 1006, 1010, 405, 455, - 467, 0, 0, 0, 252, 0, 465, 419, 536, 232, - 281, 452, 425, 463, 435, 284, 0, 0, 464, 366, - 521, 445, 533, 559, 560, 260, 399, 545, 505, 553, - 585, 225, 257, 413, 498, 539, 487, 391, 517, 518, - 325, 486, 292, 203, 363, 565, 223, 473, 365, 241, - 230, 523, 542, 286, 450, 429, 430, 567, 580, 568, - 570, 571, 212, 500, 531, 238, 477, 0, 0, 587, - 246, 497, 214, 528, 496, 387, 322, 323, 213, 0, - 451, 265, 290, 0, 0, 255, 408, 525, 526, 253, - 588, 227, 552, 219, 0, 551, 401, 520, 529, 388, - 377, 218, 527, 386, 376, 330, 349, 350, 277, 303, - 442, 369, 443, 302, 304, 397, 396, 398, 207, 540, - 0, 208, 0, 492, 541, 589, 233, 234, 236, 0, - 276, 280, 288, 291, 299, 300, 309, 361, 412, 441, - 437, 446, 0, 515, 534, 546, 557, 563, 564, 566, - 572, 573, 574, 575, 581, 579, 576, 577, 578, 569, - 400, 307, 488, 329, 367, 0, 0, 418, 466, 239, - 538, 489, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 590, 591, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 608, 378, 479, 535, 331, 343, - 346, 336, 355, 0, 356, 332, 333, 338, 340, 341, - 342, 347, 348, 352, 358, 248, 210, 384, 392, 514, - 308, 215, 216, 217, 507, 508, 509, 510, 549, 550, - 554, 456, 457, 458, 459, 289, 544, 305, 462, 461, - 327, 328, 373, 444, 0, 199, 220, 362, 0, 448, - 285, 586, 548, 543, 206, 222, 0, 259, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, - 202, 209, 221, 231, 235, 242, 258, 273, 275, 282, - 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, - 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, - 420, 424, 428, 431, 432, 434, 436, 438, 449, 454, - 468, 469, 470, 471, 472, 475, 476, 481, 482, 483, - 484, 485, 493, 494, 499, 522, 524, 537, 555, 561, - 474, 297, 298, 439, 440, 310, 311, 583, 584, 296, - 532, 562, 530, 582, 556, 433, 372, 0, 0, 0, - 375, 278, 301, 316, 0, 547, 495, 226, 460, 287, - 250, 0, 0, 211, 245, 229, 256, 271, 274, 320, - 385, 393, 422, 427, 293, 268, 243, 453, 240, 478, - 502, 503, 504, 506, 389, 263, 426, 390, 0, 370, - 512, 513, 312, 511, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 409, 0, 0, 0, 0, - 0, 0, 0, 0, 267, 0, 0, 0, 0, 360, - 264, 0, 0, 423, 0, 205, 0, 480, 251, 371, - 368, 519, 279, 270, 266, 249, 313, 379, 421, 501, - 415, 0, 364, 0, 0, 490, 394, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 319, 247, 321, 204, 406, 491, 283, 0, - 0, 0, 0, 1525, 839, 0, 0, 1522, 0, 0, - 0, 0, 1520, 0, 237, 1521, 1519, 244, 1524, 0, - 804, 345, 354, 353, 334, 335, 337, 339, 344, 351, - 357, 0, 0, 0, 0, 0, 262, 317, 269, 261, - 516, 0, 0, 0, 0, 0, 0, 0, 228, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, ->>>>>>> e439161508 (fix: complete time period feature) - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -<<<<<<< HEAD - 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, - 0, 1020, 561, 0, 0, 0, 0, 0, 1017, 1018, - 361, 977, 328, 202, 226, 1011, 1015, 407, 457, 469, - 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, - 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, - 447, 535, 562, 563, 262, 401, 547, 507, 556, 588, - 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, - 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, - 525, 544, 288, 452, 431, 432, 570, 583, 571, 573, - 574, 214, 502, 533, 240, 479, 0, 0, 590, 248, - 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 591, - 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, - 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, - 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, - 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 0, 517, 536, 548, 560, 566, 567, 569, 575, - 576, 577, 578, 584, 582, 579, 580, 581, 572, 402, - 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, - 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 593, 594, 595, 596, - 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 608, 609, 610, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 611, 380, 481, 537, 333, 345, 348, - 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, - 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, - 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, - 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, - 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, - 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, -======= - 0, 0, 0, 0, 294, 0, 395, 254, 0, 447, - 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, - 0, 359, 0, 326, 200, 224, 0, 0, 405, 455, - 467, 0, 0, 0, 252, 0, 465, 419, 536, 232, - 281, 452, 425, 463, 435, 284, 0, 0, 464, 366, - 521, 445, 533, 559, 560, 260, 399, 545, 505, 553, - 585, 225, 257, 413, 498, 539, 487, 391, 517, 518, - 325, 486, 292, 203, 363, 565, 223, 473, 365, 241, - 230, 523, 542, 286, 450, 429, 430, 567, 580, 568, - 570, 571, 212, 500, 531, 238, 477, 0, 0, 587, - 246, 497, 214, 528, 496, 387, 322, 323, 213, 0, - 451, 265, 290, 0, 0, 255, 408, 525, 526, 253, - 588, 227, 552, 219, 0, 551, 401, 520, 529, 388, - 377, 218, 527, 386, 376, 330, 349, 350, 277, 303, - 442, 369, 443, 302, 304, 397, 396, 398, 207, 540, - 0, 208, 0, 492, 541, 589, 233, 234, 236, 0, - 276, 280, 288, 291, 299, 300, 309, 361, 412, 441, - 437, 446, 0, 515, 534, 546, 557, 563, 564, 566, - 572, 573, 574, 575, 581, 579, 576, 577, 578, 569, - 400, 307, 488, 329, 367, 0, 0, 418, 466, 239, - 538, 489, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 590, 591, 592, - 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 608, 378, 479, 535, 331, 343, - 346, 336, 355, 0, 356, 332, 333, 338, 340, 341, - 342, 347, 348, 352, 358, 248, 210, 384, 392, 514, - 308, 215, 216, 217, 507, 508, 509, 510, 549, 550, - 554, 456, 457, 458, 459, 289, 544, 305, 462, 461, - 327, 328, 373, 444, 0, 199, 220, 362, 0, 448, - 285, 586, 548, 543, 206, 222, 0, 259, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, - 202, 209, 221, 231, 235, 242, 258, 273, 275, 282, - 295, 306, 314, 315, 318, 324, 374, 380, 381, 382, - 383, 402, 403, 404, 407, 410, 411, 414, 416, 417, - 420, 424, 428, 431, 432, 434, 436, 438, 449, 454, - 468, 469, 470, 471, 472, 475, 476, 481, 482, 483, - 484, 485, 493, 494, 499, 522, 524, 537, 555, 561, - 474, 297, 298, 439, 440, 310, 311, 583, 584, 296, - 532, 562, 530, 582, 556, 433, 372, 0, 0, 0, - 375, 278, 301, 316, 0, 547, 495, 226, 460, 287, - 250, 0, 0, 211, 245, 229, 256, 271, 274, 320, - 385, 393, 422, 427, 293, 268, 243, 453, 240, 478, - 502, 503, 504, 506, 389, 263, 426, 0, 390, 370, - 512, 513, 312, 86, 511, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, - 0, 0, 0, 0, 0, 267, 0, 0, 0, 0, - 360, 264, 0, 0, 423, 0, 205, 0, 480, 251, - 371, 368, 519, 279, 270, 266, 249, 313, 379, 421, - 501, 415, 0, 364, 0, 0, 490, 394, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 319, 247, 321, 204, 406, 491, 283, - 0, 95, 0, 0, 0, 197, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 237, 0, 0, 244, 0, - 0, 0, 345, 354, 353, 334, 335, 337, 339, 344, - 351, 357, 0, 0, 0, 0, 0, 262, 317, 269, - 261, 516, 0, 0, 0, 0, 0, 0, 0, 228, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 294, 0, 395, 254, 0, - 447, 0, 0, 0, 558, 0, 0, 0, 0, 0, - 0, 0, 359, 0, 326, 200, 224, 0, 0, 405, - 455, 467, 0, 0, 0, 252, 0, 465, 419, 536, - 232, 281, 452, 425, 463, 435, 284, 0, 0, 464, - 366, 521, 445, 533, 559, 560, 260, 399, 545, 505, - 553, 585, 225, 257, 413, 498, 539, 487, 391, 517, - 518, 325, 486, 292, 203, 363, 565, 223, 473, 365, - 241, 230, 523, 542, 286, 450, 429, 430, 567, 580, - 568, 570, 571, 212, 500, 531, 238, 477, 0, 0, - 587, 246, 497, 214, 528, 496, 387, 322, 323, 213, - 0, 451, 265, 290, 0, 0, 255, 408, 525, 526, - 253, 588, 227, 552, 219, 0, 551, 401, 520, 529, - 388, 377, 218, 527, 386, 376, 330, 349, 350, 277, - 303, 442, 369, 443, 302, 304, 397, 396, 398, 207, - 540, 0, 208, 0, 492, 541, 589, 233, 234, 236, - 0, 276, 280, 288, 291, 299, 300, 309, 361, 412, - 441, 437, 446, 0, 515, 534, 546, 557, 563, 564, - 566, 572, 573, 574, 575, 581, 579, 576, 577, 578, - 569, 400, 307, 488, 329, 367, 0, 0, 418, 466, - 239, 538, 489, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 590, 591, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 608, 378, 479, 535, 331, - 343, 346, 336, 355, 0, 356, 332, 333, 338, 340, - 341, 342, 347, 348, 352, 358, 248, 210, 384, 392, - 514, 308, 215, 216, 217, 507, 508, 509, 510, 549, - 550, 554, 456, 457, 458, 459, 289, 544, 305, 462, - 461, 327, 328, 373, 444, 0, 199, 220, 362, 94, - 448, 285, 586, 548, 543, 206, 222, 0, 259, 0, - 0, 0, 0, 0, 0, 2167, 0, 0, 2166, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 201, 202, 209, 221, 231, 235, 242, 258, 273, 275, - 282, 295, 306, 314, 315, 318, 324, 374, 380, 381, - 382, 383, 402, 403, 404, 407, 410, 411, 414, 416, - 417, 420, 424, 428, 431, 432, 434, 436, 438, 449, - 454, 468, 469, 470, 471, 472, 475, 476, 481, 482, - 483, 484, 485, 493, 494, 499, 522, 524, 537, 555, - 561, 474, 297, 298, 439, 440, 310, 311, 583, 584, - 296, 532, 562, 530, 582, 556, 433, 372, 0, 0, - 0, 375, 278, 301, 316, 0, 547, 495, 226, 460, - 287, 250, 0, 0, 211, 245, 229, 256, 271, 274, - 320, 385, 393, 422, 427, 293, 268, 243, 453, 240, - 478, 502, 503, 504, 506, 389, 263, 426, 1581, 0, - 370, 512, 513, 312, 511, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 409, 0, 0, 0, - 1583, 0, 0, 0, 0, 267, 0, 0, 0, 0, - 360, 264, 0, 0, 423, 0, 205, 0, 480, 251, - 371, 368, 519, 279, 270, 266, 249, 313, 379, 421, - 501, 415, 0, 364, 0, 0, 490, 394, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 319, 247, 321, 204, 406, 491, 283, - 0, 0, 0, 0, 1585, 665, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 237, 0, 0, 244, 0, - 0, 0, 345, 354, 353, 334, 335, 337, 339, 344, - 351, 357, 0, 0, 0, 0, 0, 262, 317, 269, - 261, 516, 0, 0, 0, 0, 0, 0, 0, 228, - 0, 0, 0, 1359, 0, 1360, 1361, 0, 0, 0, - 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 294, 0, 395, 254, 0, - 447, 0, 0, 0, 558, 0, 0, 0, 0, 0, - 0, 0, 359, 0, 326, 200, 224, 0, 0, 405, - 455, 467, 0, 0, 0, 252, 0, 465, 419, 536, - 232, 281, 452, 425, 463, 435, 284, 0, 0, 464, - 366, 521, 445, 533, 559, 560, 260, 399, 545, 505, - 553, 585, 225, 257, 413, 498, 539, 487, 391, 517, - 518, 325, 486, 292, 203, 363, 565, 223, 473, 365, - 241, 230, 523, 542, 286, 450, 429, 430, 567, 580, - 568, 570, 571, 212, 500, 531, 238, 477, 0, 0, - 587, 246, 497, 214, 528, 496, 387, 322, 323, 213, - 0, 451, 265, 290, 0, 0, 255, 408, 525, 526, - 253, 588, 227, 552, 219, 0, 551, 401, 520, 529, - 388, 377, 218, 527, 386, 376, 330, 349, 350, 277, - 303, 442, 369, 443, 302, 304, 397, 396, 398, 207, - 540, 0, 208, 0, 492, 541, 589, 233, 234, 236, - 0, 276, 280, 288, 291, 299, 300, 309, 361, 412, - 441, 437, 446, 0, 515, 534, 546, 557, 563, 564, - 566, 572, 573, 574, 575, 581, 579, 576, 577, 578, - 569, 400, 307, 488, 329, 367, 0, 0, 418, 466, - 239, 538, 489, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 590, 591, - 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 608, 378, 479, 535, 331, - 343, 346, 336, 355, 0, 356, 332, 333, 338, 340, - 341, 342, 347, 348, 352, 358, 248, 210, 384, 392, - 514, 308, 215, 216, 217, 507, 508, 509, 510, 549, - 550, 554, 456, 457, 458, 459, 289, 544, 305, 462, - 461, 327, 328, 373, 444, 0, 199, 220, 362, 0, - 448, 285, 586, 548, 543, 206, 222, 0, 259, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 201, 202, 209, 221, 231, 235, 242, 258, 273, 275, - 282, 295, 306, 314, 315, 318, 324, 374, 380, 381, - 382, 383, 402, 403, 404, 407, 410, 411, 414, 416, - 417, 420, 424, 428, 431, 432, 434, 436, 438, 449, - 454, 468, 469, 470, 471, 472, 475, 476, 481, 482, - 483, 484, 485, 493, 494, 499, 522, 524, 537, 555, - 561, 474, 297, 298, 439, 440, 310, 311, 583, 584, - 296, 532, 562, 530, 582, 556, 433, 372, 0, 0, - 0, 375, 278, 301, 316, 0, 547, 495, 226, 460, - 287, 250, 0, 0, 211, 245, 229, 256, 271, 274, - 320, 385, 393, 422, 427, 293, 268, 243, 453, 240, - 478, 502, 503, 504, 506, 389, 263, 426, 0, 390, - 370, 512, 513, 312, 86, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 95, 0, 1562, 0, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, ->>>>>>> e439161508 (fix: complete time period feature) - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, - 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, - 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, - 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, - 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, - 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, - 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 299, 300, 441, 442, 312, 313, 586, 587, 298, 534, - 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, - 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, - 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, - 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, - 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, - 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, - 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, - 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, - 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, - 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, - 0, 0, 0, 1532, 844, 0, 0, 1529, 0, 0, - 0, 0, 1527, 0, 239, 1528, 1526, 246, 1531, 0, - 809, 347, 356, 355, 336, 337, 339, 341, 346, 353, - 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, - 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -<<<<<<< HEAD - 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, - 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, - 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, - 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, - 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, - 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, - 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, - 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, - 243, 232, 525, 544, 288, 452, 431, 432, 570, 583, - 571, 573, 574, 214, 502, 533, 240, 479, 0, 0, - 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, - 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, - 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, - 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, - 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 592, 235, 236, 238, - 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, - 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, - 569, 575, 576, 577, 578, 584, 582, 579, 580, 581, - 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, - 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 593, 594, - 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 610, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 611, 380, 481, 537, 333, - 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, - 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, - 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, - 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, - 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, - 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, - 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, - 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, - 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, - 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, - 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, - 564, 476, 299, 300, 441, 442, 312, 313, 586, 587, - 298, 534, 565, 532, 585, 559, 435, 374, 0, 0, - 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, - 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, - 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, - 242, 480, 504, 505, 506, 508, 391, 265, 428, 0, - 392, 372, 514, 515, 314, 88, 513, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, - 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, - 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, - 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, - 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, - 493, 285, 0, 97, 0, 0, 0, 199, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, - 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, - 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, - 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, - 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, - 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, - 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, - 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, - 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, - 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, - 401, 547, 507, 556, 588, 227, 259, 415, 500, 541, - 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, - 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, - 432, 570, 583, 571, 573, 574, 214, 502, 533, 240, - 479, 0, 0, 590, 248, 499, 216, 530, 498, 389, - 324, 325, 215, 0, 453, 267, 292, 0, 0, 257, - 410, 527, 528, 255, 591, 229, 555, 221, 0, 554, - 403, 522, 531, 390, 379, 220, 529, 388, 378, 332, - 351, 352, 279, 305, 444, 371, 445, 304, 306, 399, - 398, 400, 209, 542, 0, 210, 0, 494, 543, 592, - 235, 236, 238, 0, 278, 282, 290, 293, 301, 302, - 311, 363, 414, 443, 439, 448, 0, 517, 536, 548, - 560, 566, 567, 569, 575, 576, 577, 578, 584, 582, - 579, 580, 581, 572, 402, 309, 490, 331, 369, 0, - 0, 420, 468, 241, 540, 491, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 593, 594, 595, 596, 597, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 608, 609, 610, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 611, 380, - 481, 537, 333, 345, 348, 338, 357, 0, 358, 334, - 335, 340, 342, 343, 344, 349, 350, 354, 360, 250, - 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, - 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, - 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, - 222, 364, 96, 450, 287, 589, 551, 545, 208, 224, - 0, 261, 0, 0, 0, 0, 0, 0, 2174, 0, - 0, 2173, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, - 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, - 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, - 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, - 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, - 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, - 526, 539, 558, 564, 476, 299, 300, 441, 442, 312, - 313, 586, 587, 298, 534, 565, 532, 585, 559, 435, - 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, - 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, - 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, - 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, - 265, 428, 1588, 0, 372, 514, 515, 314, 513, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 1590, 0, 0, 0, 0, 269, - 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, - 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, - 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, - 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, - 206, 408, 493, 285, 0, 0, 0, 0, 1592, 670, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, - 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, - 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, - 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, - 0, 0, 0, 230, 0, 0, 0, 1366, 0, 1367, - 1368, 0, 0, 0, 0, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, - 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, - 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, - 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, - 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, - 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, - 563, 262, 401, 547, 507, 556, 588, 227, 259, 415, - 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, - 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, - 452, 431, 432, 570, 583, 571, 573, 574, 214, 502, - 533, 240, 479, 0, 0, 590, 248, 499, 216, 530, - 498, 389, 324, 325, 215, 0, 453, 267, 292, 0, - 0, 257, 410, 527, 528, 255, 591, 229, 555, 221, - 0, 554, 403, 522, 531, 390, 379, 220, 529, 388, - 378, 332, 351, 352, 279, 305, 444, 371, 445, 304, - 306, 399, 398, 400, 209, 542, 0, 210, 0, 494, - 543, 592, 235, 236, 238, 0, 278, 282, 290, 293, - 301, 302, 311, 363, 414, 443, 439, 448, 0, 517, - 536, 548, 560, 566, 567, 569, 575, 576, 577, 578, - 584, 582, 579, 580, 581, 572, 402, 309, 490, 331, - 369, 0, 0, 420, 468, 241, 540, 491, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, - 610, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 611, 380, 481, 537, 333, 345, 348, 338, 357, 0, - 358, 334, 335, 340, 342, 343, 344, 349, 350, 354, - 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, - 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, - 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, - 0, 201, 222, 364, 0, 450, 287, 589, 551, 545, - 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, - 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, - 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, - 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, - 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, - 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, - 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, - 442, 312, 313, 586, 587, 298, 534, 565, 532, 585, - 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, - 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, - 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, - 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, - 508, 391, 265, 428, 0, 392, 372, 514, 515, 314, - 88, 513, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, - 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, - 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, - 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, - 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 321, 249, 323, 206, 408, 493, 285, 0, 97, 0, - 1569, 0, 670, 0, 0, 0, 0, 0, 0, 0, + 0, 1773, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, @@ -6406,7 +4082,7 @@ var yyAct = [...]int{ 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, - 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, + 454, 427, 465, 437, 286, 0, 2123, 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, @@ -6431,7 +4107,7 @@ var yyAct = [...]int{ 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, - 330, 375, 446, 0, 201, 222, 364, 96, 450, 287, + 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, @@ -6455,14 +4131,14 @@ var yyAct = [...]int{ 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, - 97, 0, 0, 0, 199, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 971, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6471,7 +4147,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, - 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, + 0, 0, 361, 977, 328, 202, 226, 975, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, @@ -6500,7 +4176,7 @@ var yyAct = [...]int{ 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, - 0, 0, 0, 0, 0, 2174, 0, 0, 2173, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, @@ -6541,7 +4217,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, - 2123, 466, 368, 523, 447, 535, 562, 563, 262, 401, + 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, 525, 544, 288, 452, 431, 432, @@ -6589,14 +4265,14 @@ var yyAct = [...]int{ 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, - 408, 493, 285, 0, 0, 0, 0, 0, 670, 0, + 408, 493, 285, 0, 0, 0, 1569, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, - 0, 0, 0, 0, 0, 0, 971, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6605,8 +4281,8 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, - 0, 0, 0, 0, 0, 0, 361, 977, 328, 202, - 226, 975, 0, 407, 457, 469, 0, 0, 0, 254, + 0, 0, 3461, 0, 0, 0, 361, 0, 328, 202, + 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, 556, 588, 227, 259, 415, 500, @@ -6650,14 +4326,14 @@ var yyAct = [...]int{ 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 411, 0, 0, 0, 2125, 0, 0, 0, 0, + 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, - 323, 206, 408, 493, 285, 0, 0, 0, 0, 1773, - 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 323, 206, 408, 493, 285, 0, 0, 0, 0, 1958, + 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, @@ -6665,7 +4341,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1959, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6724,7 +4400,7 @@ var yyAct = [...]int{ 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, - 1569, 0, 670, 0, 0, 0, 0, 0, 0, 0, + 0, 2567, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, @@ -6732,14 +4408,14 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2568, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, - 0, 0, 561, 0, 0, 0, 3460, 0, 0, 0, + 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, @@ -6791,8 +4467,8 @@ var yyAct = [...]int{ 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, - 0, 0, 0, 1958, 670, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, + 0, 0, 0, 0, 670, 0, 0, 0, 0, 2552, + 0, 0, 0, 0, 239, 0, 0, 246, 2553, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, @@ -6800,7 +4476,7 @@ var yyAct = [...]int{ 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1959, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6852,13 +4528,13 @@ var yyAct = [...]int{ 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, - 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 269, 1611, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, - 285, 0, 0, 0, 0, 2567, 670, 0, 0, 0, + 285, 0, 0, 0, 0, 1610, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, @@ -6867,7 +4543,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2568, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6925,9 +4601,9 @@ var yyAct = [...]int{ 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, - 408, 493, 285, 0, 0, 0, 0, 0, 670, 0, - 0, 0, 0, 2552, 0, 0, 0, 0, 239, 0, - 0, 246, 2553, 0, 0, 347, 356, 355, 336, 337, + 408, 493, 285, 0, 0, 0, 0, 0, 672, 673, + 674, 0, 0, 0, 0, 0, 0, 0, 239, 0, + 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, @@ -6987,12 +4663,12 @@ var yyAct = [...]int{ 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, - 269, 1611, 0, 0, 0, 362, 266, 0, 0, 425, + 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, - 323, 206, 408, 493, 285, 0, 0, 0, 0, 1610, + 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, @@ -7008,7 +4684,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, - 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, + 561, 0, 0, 0, 3585, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, @@ -7060,7 +4736,7 @@ var yyAct = [...]int{ 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, - 0, 0, 672, 673, 674, 0, 0, 0, 0, 0, + 0, 1773, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, @@ -7142,7 +4818,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, - 449, 0, 0, 0, 561, 0, 0, 0, 3584, 0, + 449, 0, 0, 0, 561, 0, 0, 0, 3461, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, @@ -7194,7 +4870,7 @@ var yyAct = [...]int{ 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, - 285, 0, 0, 0, 0, 1773, 199, 0, 0, 0, + 285, 0, 97, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, @@ -7254,14 +4930,14 @@ var yyAct = [...]int{ 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, + 0, 0, 2175, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, - 408, 493, 285, 0, 0, 0, 0, 0, 670, 0, + 408, 493, 285, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, @@ -7277,7 +4953,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, - 0, 0, 3460, 0, 0, 0, 361, 0, 328, 202, + 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, 447, 535, 562, 563, @@ -7328,7 +5004,7 @@ var yyAct = [...]int{ 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, - 323, 206, 408, 493, 285, 0, 97, 0, 0, 0, + 323, 206, 408, 493, 285, 0, 0, 0, 0, 1592, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, @@ -7388,7 +5064,7 @@ var yyAct = [...]int{ 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, - 314, 513, 0, 0, 0, 0, 2175, 0, 0, 0, + 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, @@ -7439,7 +5115,7 @@ var yyAct = [...]int{ 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, - 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, + 330, 375, 446, 0, 201, 222, 364, 1913, 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, @@ -7463,7 +5139,7 @@ var yyAct = [...]int{ 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, - 0, 0, 0, 1592, 670, 0, 0, 0, 0, 0, + 0, 0, 0, 1904, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, @@ -7523,14 +5199,14 @@ var yyAct = [...]int{ 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 411, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 411, 0, 1740, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, - 285, 0, 0, 0, 0, 0, 199, 0, 0, 0, + 285, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, @@ -7574,7 +5250,7 @@ var yyAct = [...]int{ 386, 394, 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, 330, 375, 446, 0, 201, 222, - 364, 1913, 450, 287, 589, 551, 545, 208, 224, 0, + 364, 0, 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, @@ -7591,13 +5267,13 @@ var yyAct = [...]int{ 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, - 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, + 0, 1738, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, - 408, 493, 285, 0, 0, 0, 0, 1904, 670, 0, + 408, 493, 285, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, @@ -7658,7 +5334,7 @@ var yyAct = [...]int{ 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 411, 0, 1740, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 1736, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, @@ -7725,7 +5401,7 @@ var yyAct = [...]int{ 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 411, 0, 1738, 0, 0, 0, 0, + 0, 0, 0, 411, 0, 1734, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, @@ -7792,7 +5468,7 @@ var yyAct = [...]int{ 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 411, 0, 1736, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 1732, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, @@ -7859,7 +5535,7 @@ var yyAct = [...]int{ 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 411, 0, 1734, + 0, 0, 0, 0, 0, 0, 0, 411, 0, 1728, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, @@ -7927,7 +5603,7 @@ var yyAct = [...]int{ 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, - 0, 1732, 0, 0, 0, 0, 0, 0, 269, 0, + 0, 1726, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, @@ -7994,7 +5670,7 @@ var yyAct = [...]int{ 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 411, 0, 1728, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 1724, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, @@ -8061,13 +5737,13 @@ var yyAct = [...]int{ 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 411, 0, 1726, 0, 0, 0, 0, + 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, + 321, 249, 323, 206, 408, 493, 285, 0, 1699, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, @@ -8128,14 +5804,14 @@ var yyAct = [...]int{ 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 411, 0, 1724, 0, 0, - 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, + 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, + 0, 0, 0, 1596, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, - 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, @@ -8202,7 +5878,7 @@ var yyAct = [...]int{ 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, - 285, 0, 1699, 0, 0, 0, 670, 0, 0, 0, + 285, 0, 97, 0, 0, 0, 844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, @@ -8263,7 +5939,7 @@ var yyAct = [...]int{ 245, 455, 242, 480, 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411, - 0, 0, 0, 0, 0, 0, 0, 1596, 269, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, @@ -8283,7 +5959,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, + 0, 0, 0, 0, 0, 0, 1344, 0, 296, 0, 397, 256, 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, @@ -8323,7 +5999,7 @@ var yyAct = [...]int{ 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, 299, 300, 441, 442, - 312, 313, 586, 587, 298, 534, 565, 532, 585, 559, + 312, 313, 586, 587, 1343, 534, 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, @@ -8336,8 +6012,8 @@ var yyAct = [...]int{ 268, 251, 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, - 323, 206, 408, 493, 285, 0, 97, 0, 0, 0, - 844, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, + 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, @@ -8383,7 +6059,7 @@ var yyAct = [...]int{ 446, 0, 201, 222, 364, 0, 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, + 0, 0, 929, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, @@ -8418,8 +6094,8 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1344, 0, 296, 0, 397, 256, 0, 0, 449, 0, - 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, + 614, 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, @@ -8457,7 +6133,7 @@ var yyAct = [...]int{ 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 299, 300, 441, 442, 312, 313, 586, 587, 1343, 534, + 299, 300, 441, 442, 312, 313, 586, 587, 298, 534, 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, @@ -8471,7 +6147,7 @@ var yyAct = [...]int{ 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, - 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, @@ -8517,10 +6193,10 @@ var yyAct = [...]int{ 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 929, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, - 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, + 384, 385, 3593, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, @@ -8538,7 +6214,7 @@ var yyAct = [...]int{ 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, - 285, 0, 0, 0, 0, 0, 199, 0, 0, 0, + 285, 0, 0, 0, 0, 0, 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, @@ -8553,7 +6229,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 397, 256, - 0, 0, 449, 0, 614, 0, 561, 0, 0, 0, + 0, 0, 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, 454, 427, 465, 437, 286, 0, @@ -8605,7 +6281,7 @@ var yyAct = [...]int{ 315, 381, 423, 503, 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, - 408, 493, 285, 0, 0, 0, 0, 0, 670, 0, + 408, 493, 285, 0, 0, 0, 0, 0, 844, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, @@ -8654,7 +6330,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, 308, 316, 317, 320, - 326, 376, 382, 383, 384, 385, 3592, 405, 406, 409, + 326, 376, 382, 383, 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, 487, 495, 496, 501, @@ -8673,7 +6349,7 @@ var yyAct = [...]int{ 0, 492, 396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, 0, 0, - 670, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, 0, 0, @@ -8731,2656 +6407,31 @@ var yyAct = [...]int{ 303, 318, 0, 550, 497, 228, 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, 504, 505, - 506, 508, 391, 265, 428, 392, 0, 372, 514, 515, - 314, 513, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, - 0, 0, 269, 0, 0, 0, 0, 362, 266, 0, - 0, 425, 0, 207, 0, 482, 253, 373, 370, 521, - 281, 272, 268, 251, 315, 381, 423, 503, 417, 0, - 366, 0, 0, 492, 396, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 321, 249, 323, 206, 408, 493, 285, 0, 0, 0, - 0, 0, 844, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 239, 0, 0, 246, 0, 0, 0, 347, - 356, 355, 336, 337, 339, 341, 346, 353, 359, 0, - 0, 0, 0, 0, 264, 319, 271, 263, 518, 0, - 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 274, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 296, 0, 397, 256, 0, 0, 449, 0, - 0, 0, 561, 0, 0, 0, 0, 0, 0, 0, - 361, 0, 328, 202, 226, 0, 0, 407, 457, 469, - 0, 0, 0, 254, 0, 467, 421, 538, 234, 283, - 454, 427, 465, 437, 286, 0, 0, 466, 368, 523, - 447, 535, 562, 563, 262, 401, 547, 507, 556, 588, - 227, 259, 415, 500, 541, 489, 393, 519, 520, 327, - 488, 294, 205, 365, 568, 225, 475, 367, 243, 232, - 525, 544, 288, 452, 431, 432, 570, 583, 571, 573, - 574, 214, 502, 533, 240, 479, 0, 0, 590, 248, - 499, 216, 530, 498, 389, 324, 325, 215, 0, 453, - 267, 292, 0, 0, 257, 410, 527, 528, 255, 591, - 229, 555, 221, 0, 554, 403, 522, 531, 390, 379, - 220, 529, 388, 378, 332, 351, 352, 279, 305, 444, - 371, 445, 304, 306, 399, 398, 400, 209, 542, 0, - 210, 0, 494, 543, 592, 235, 236, 238, 0, 278, - 282, 290, 293, 301, 302, 311, 363, 414, 443, 439, - 448, 0, 517, 536, 548, 560, 566, 567, 569, 575, - 576, 577, 578, 584, 582, 579, 580, 581, 572, 402, - 309, 490, 331, 369, 0, 0, 420, 468, 241, 540, - 491, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 593, 594, 595, 596, - 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 608, 609, 610, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 611, 380, 481, 537, 333, 345, 348, - 338, 357, 0, 358, 334, 335, 340, 342, 343, 344, - 349, 350, 354, 360, 250, 212, 386, 394, 516, 310, - 217, 218, 219, 509, 510, 511, 512, 552, 553, 557, - 458, 459, 460, 461, 291, 546, 307, 464, 463, 329, - 330, 375, 446, 0, 201, 222, 364, 0, 450, 287, - 589, 551, 545, 208, 224, 0, 261, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, - 211, 223, 233, 237, 244, 260, 275, 277, 284, 297, - 308, 316, 317, 320, 326, 376, 382, 383, 384, 385, - 404, 405, 406, 409, 412, 413, 416, 418, 419, 422, - 426, 430, 433, 434, 436, 438, 440, 451, 456, 470, - 471, 472, 473, 474, 477, 478, 483, 484, 485, 486, - 487, 495, 496, 501, 524, 526, 539, 558, 564, 476, - 299, 300, 441, 442, 312, 313, 586, 587, 298, 534, - 565, 532, 585, 559, 435, 374, 0, 0, 549, 0, - 377, 280, 303, 318, 0, 550, 497, 228, 462, 289, - 252, 0, 0, 213, 247, 231, 258, 273, 276, 322, - 387, 395, 424, 429, 295, 270, 245, 455, 242, 480, - 504, 505, 506, 508, 391, 265, 428, 392, 0, 372, - 514, 515, 314, 513, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, - 0, 0, 0, 0, 269, 0, 0, 0, 0, 362, - 266, 0, 0, 425, 0, 207, 0, 482, 253, 373, - 370, 521, 281, 272, 268, 251, 315, 381, 423, 503, - 417, 0, 366, 0, 0, 492, 396, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 321, 249, 323, 206, 408, 493, 285, 0, - 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 239, 0, 0, 246, 0, 0, - 0, 347, 356, 355, 336, 337, 339, 341, 346, 353, - 359, 0, 0, 0, 0, 0, 264, 319, 271, 263, - 518, 0, 0, 0, 0, 0, 0, 0, 230, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 274, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 296, 0, 397, 256, 0, 0, - 449, 0, 0, 0, 561, 0, 0, 0, 0, 0, - 0, 0, 361, 0, 328, 202, 226, 0, 0, 407, - 457, 469, 0, 0, 0, 254, 0, 467, 421, 538, - 234, 283, 454, 427, 465, 437, 286, 0, 0, 466, - 368, 523, 447, 535, 562, 563, 262, 401, 547, 507, - 556, 588, 227, 259, 415, 500, 541, 489, 393, 519, - 520, 327, 488, 294, 205, 365, 568, 225, 475, 367, - 243, 232, 525, 544, 288, 452, 431, 432, 570, 583, - 571, 573, 574, 214, 502, 533, 240, 479, 0, 0, - 590, 248, 499, 216, 530, 498, 389, 324, 325, 215, - 0, 453, 267, 292, 0, 0, 257, 410, 527, 528, - 255, 591, 229, 555, 221, 0, 554, 403, 522, 531, - 390, 379, 220, 529, 388, 378, 332, 351, 352, 279, - 305, 444, 371, 445, 304, 306, 399, 398, 400, 209, - 542, 0, 210, 0, 494, 543, 592, 235, 236, 238, - 0, 278, 282, 290, 293, 301, 302, 311, 363, 414, - 443, 439, 448, 0, 517, 536, 548, 560, 566, 567, - 569, 575, 576, 577, 578, 584, 582, 579, 580, 581, - 572, 402, 309, 490, 331, 369, 0, 0, 420, 468, - 241, 540, 491, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 593, 594, - 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 610, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 611, 380, 481, 537, 333, - 345, 348, 338, 357, 0, 358, 334, 335, 340, 342, - 343, 344, 349, 350, 354, 360, 250, 212, 386, 394, - 516, 310, 217, 218, 219, 509, 510, 511, 512, 552, - 553, 557, 458, 459, 460, 461, 291, 546, 307, 464, - 463, 329, 330, 375, 446, 0, 201, 222, 364, 0, - 450, 287, 589, 551, 545, 208, 224, 0, 261, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 203, 204, 211, 223, 233, 237, 244, 260, 275, 277, - 284, 297, 308, 316, 317, 320, 326, 376, 382, 383, - 384, 385, 404, 405, 406, 409, 412, 413, 416, 418, - 419, 422, 426, 430, 433, 434, 436, 438, 440, 451, - 456, 470, 471, 472, 473, 474, 477, 478, 483, 484, - 485, 486, 487, 495, 496, 501, 524, 526, 539, 558, - 564, 476, 299, 300, 441, 442, 312, 313, 586, 587, - 298, 534, 565, 532, 585, 559, 435, 374, 0, 0, - 549, 0, 377, 280, 303, 318, 0, 550, 497, 228, - 462, 289, 252, 0, 0, 213, 247, 231, 258, 273, - 276, 322, 387, 395, 424, 429, 295, 270, 245, 455, - 242, 480, 504, 505, 506, 508, 391, 265, 428, 0, - 0, 372, 514, 515, 314, -} - -var yyPact = [...]int{ - -1000, -1000, 4589, -1000, -467, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 2311, 2501, -1000, -1000, -1000, -1000, 2441, -1000, - 1197, 1867, -1000, 2176, 338, -1000, 47683, 575, -1000, 44995, - 572, 555, 147, -82, 5295, 30211, -1000, 236, -1000, 226, - 46339, 231, -1000, -1000, -1000, -1000, -316, 18785, 2103, 115, - 112, 47683, -1000, -1000, -1000, -1000, 2408, 1814, -1000, 412, - -1000, -1000, -1000, -1000, -1000, -1000, 44323, -1000, 964, -1000, - -1000, 2194, 2181, 2449, 725, 2134, -1000, 2339, 1814, -1000, - 18785, 2394, 2260, 18113, 18113, 492, -1000, -1000, 261, -1000, - -1000, -1000, 2454, 25507, 47683, -1000, 32899, 407, -1000, 2176, - -1000, -1000, -1000, 98, -1000, 378, 1745, -1000, 1736, -1000, - 835, 868, 398, 537, 531, 397, 395, 394, 393, 392, - 386, 385, 384, 405, -1000, 745, 745, -119, -123, 1259, - 490, 447, 447, 890, 530, 2145, 2140, -1000, -1000, 745, - 745, 745, 413, 745, 745, 745, 745, 350, 349, 745, - 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, - 745, 745, 745, 745, 745, 745, 470, 2176, 331, -1000, -======= - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 94, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 95, 0, 0, 0, 197, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 2167, 0, 0, 2166, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 2118, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 1766, 197, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 2116, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 966, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 972, 326, 200, 224, 970, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 2118, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 1766, 197, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 1562, 0, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 3454, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 1951, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1952, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 2560, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2561, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, - 0, 2545, 0, 0, 0, 0, 237, 0, 0, 244, - 2546, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 1604, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 1603, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 0, 667, 668, 669, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 3578, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 1766, 197, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 3454, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 95, 0, 0, 0, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 2168, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 0, 197, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 1585, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 0, 197, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 1906, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 1897, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 1733, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 1731, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 1729, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 1727, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 1725, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 1721, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 1719, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 1717, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 1692, 0, 0, 0, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 1589, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 0, 197, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 95, 0, 0, 0, 839, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 0, 197, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1338, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 1337, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 0, 197, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 924, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 0, 197, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 611, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 3586, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 0, 665, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 0, 839, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 390, - 0, 370, 512, 513, 312, 511, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 409, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 360, 264, 0, 0, 423, 0, 205, 0, 480, - 251, 371, 368, 519, 279, 270, 266, 249, 313, 379, - 421, 501, 415, 0, 364, 0, 0, 490, 394, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 319, 247, 321, 204, 406, 491, - 283, 0, 0, 0, 0, 0, 197, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 237, 0, 0, 244, - 0, 0, 0, 345, 354, 353, 334, 335, 337, 339, - 344, 351, 357, 0, 0, 0, 0, 0, 262, 317, - 269, 261, 516, 0, 0, 0, 0, 0, 0, 0, - 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 395, 254, - 0, 447, 0, 0, 0, 558, 0, 0, 0, 0, - 0, 0, 0, 359, 0, 326, 200, 224, 0, 0, - 405, 455, 467, 0, 0, 0, 252, 0, 465, 419, - 536, 232, 281, 452, 425, 463, 435, 284, 0, 0, - 464, 366, 521, 445, 533, 559, 560, 260, 399, 545, - 505, 553, 585, 225, 257, 413, 498, 539, 487, 391, - 517, 518, 325, 486, 292, 203, 363, 565, 223, 473, - 365, 241, 230, 523, 542, 286, 450, 429, 430, 567, - 580, 568, 570, 571, 212, 500, 531, 238, 477, 0, - 0, 587, 246, 497, 214, 528, 496, 387, 322, 323, - 213, 0, 451, 265, 290, 0, 0, 255, 408, 525, - 526, 253, 588, 227, 552, 219, 0, 551, 401, 520, - 529, 388, 377, 218, 527, 386, 376, 330, 349, 350, - 277, 303, 442, 369, 443, 302, 304, 397, 396, 398, - 207, 540, 0, 208, 0, 492, 541, 589, 233, 234, - 236, 0, 276, 280, 288, 291, 299, 300, 309, 361, - 412, 441, 437, 446, 0, 515, 534, 546, 557, 563, - 564, 566, 572, 573, 574, 575, 581, 579, 576, 577, - 578, 569, 400, 307, 488, 329, 367, 0, 0, 418, - 466, 239, 538, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 590, - 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 608, 378, 479, 535, - 331, 343, 346, 336, 355, 0, 356, 332, 333, 338, - 340, 341, 342, 347, 348, 352, 358, 248, 210, 384, - 392, 514, 308, 215, 216, 217, 507, 508, 509, 510, - 549, 550, 554, 456, 457, 458, 459, 289, 544, 305, - 462, 461, 327, 328, 373, 444, 0, 199, 220, 362, - 0, 448, 285, 586, 548, 543, 206, 222, 0, 259, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 201, 202, 209, 221, 231, 235, 242, 258, 273, - 275, 282, 295, 306, 314, 315, 318, 324, 374, 380, - 381, 382, 383, 402, 403, 404, 407, 410, 411, 414, - 416, 417, 420, 424, 428, 431, 432, 434, 436, 438, - 449, 454, 468, 469, 470, 471, 472, 475, 476, 481, - 482, 483, 484, 485, 493, 494, 499, 522, 524, 537, - 555, 561, 474, 297, 298, 439, 440, 310, 311, 583, - 584, 296, 532, 562, 530, 582, 556, 433, 372, 0, - 0, 0, 375, 278, 301, 316, 0, 547, 495, 226, - 460, 287, 250, 0, 0, 211, 245, 229, 256, 271, - 274, 320, 385, 393, 422, 427, 293, 268, 243, 453, - 240, 478, 502, 503, 504, 506, 389, 263, 426, 0, - 0, 370, 512, 513, 312, + 506, 508, 391, 265, 428, 0, 0, 372, 514, 515, + 314, } var yyPact = [...]int{ - -1000, -1000, 5916, -1000, -462, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 2258, 2390, -1000, -1000, -1000, -1000, 2467, -1000, 1096, - 1928, -1000, 2203, 332, -1000, 47505, 601, -1000, 44825, 599, - 585, 143, 3884, 30085, -1000, 245, -1000, 231, 46165, 239, - -1000, -1000, -1000, -1000, -323, 18693, 2129, 116, 115, 47505, - -1000, -1000, -1000, -1000, 2439, 1885, -1000, 398, -1000, -1000, - -1000, -1000, -1000, -1000, 44155, -1000, 1038, -1000, -1000, 2208, - 2238, 2473, 786, 2110, -1000, 2362, 1885, -1000, 18693, 2426, - 2272, 18023, 18023, 499, -1000, -1000, 319, -1000, -1000, -1000, - 2482, 25395, 47505, -1000, 32765, 306, -1000, 2203, -1000, -1000, - -1000, 133, -1000, 402, 1804, -1000, 1803, -1000, 582, 1247, - 423, 544, 539, 422, 421, 418, 415, 413, 411, 410, - 408, 429, -1000, 810, 810, -143, -144, 1530, 577, 478, - 478, 837, 523, 2165, 2156, -1000, -1000, 810, 810, 810, - 448, 810, 810, 810, 810, 369, 366, 810, 810, 810, - 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, - 810, 810, 810, 810, 453, 2203, 347, -1000, -1000, -1000, ->>>>>>> e439161508 (fix: complete time period feature) - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 445, -1000, -472, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 2254, 2344, -1000, -1000, -1000, -1000, 2491, -1000, + 1107, 1953, -1000, 2239, 323, -1000, 47689, 594, -1000, 45001, + 590, 585, 140, -127, 242, 30217, -1000, 218, -1000, 202, + 46345, 216, -1000, -1000, -1000, -1000, -362, 18791, 2186, 89, + 76, 47689, -1000, -1000, -1000, -1000, 2471, 1886, -1000, 398, + -1000, -1000, -1000, -1000, -1000, -1000, 44329, -1000, 965, -1000, + -1000, 2240, 2238, 2505, 717, 2176, -1000, 2334, 1886, -1000, + 18791, 2455, 2303, 18119, 18119, 520, -1000, -1000, 273, -1000, + -1000, -1000, 2510, 25513, 47689, -1000, 32905, 588, -1000, 2239, + -1000, -1000, -1000, 91, -1000, 393, 1808, -1000, 1803, -1000, + 1161, 1280, 446, 548, 501, 441, 440, 438, 428, 426, + 421, 415, 414, 450, -1000, 752, 752, -135, -148, 4256, + 505, 508, 508, 1101, 561, 2203, 2202, -1000, -1000, 752, + 752, 752, 388, 752, 752, 752, 752, 348, 341, 752, + 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, + 752, 752, 752, 752, 752, 752, 578, 2239, 320, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -11417,126 +6468,67 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -<<<<<<< HEAD -======= - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 47505, - 209, 47505, -1000, 680, 47505, 47505, -1000, 1212, 1210, 962, - -1000, -1000, 962, 129, 962, 962, 962, 962, 252, 706, - 71, -1000, 246, 342, 220, 330, 957, 234, -1000, -1000, - 322, 957, 990, 957, 1690, 1687, -1000, 796, 320, 230, - -1000, 962, 962, -1000, -1000, 11968, 187, 11968, 11968, -1000, - 2188, -1000, -1000, -1000, -1000, -1000, 1232, -1000, -1000, -1000, - -1000, -18, 520, -1000, -1000, -1000, -1000, 46165, 43485, 302, - -1000, -1000, 63, -1000, -1000, 1716, 1270, 18693, 1508, -1000, - 1759, 749, -1000, -1000, -1000, -1000, -1000, 686, -1000, 19363, - 19363, 19363, 19363, -1000, -1000, 1781, 42815, 1781, 1781, 19363, - 1781, -1000, 19363, 1781, 1781, 1781, 18693, 1781, 1781, 1781, - 1781, -1000, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - -1000, -1000, -1000, -1000, 1781, 677, 1781, 1781, 1781, 1781, - 1781, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1781, - 1781, 1781, 1781, 1781, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 21373, 1439, - 1423, 1420, -1000, 16013, 1781, -1000, -1000, -1000, -1000, -1000, ->>>>>>> e439161508 (fix: complete time period feature) -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 47683, 253, 47683, -1000, 652, 47683, 47683, -1000, - 1175, 1173, -1000, -1000, 892, -1000, -1000, 892, 123, 892, - 892, 892, 892, 240, 669, 111, -1000, 235, 314, 218, - 323, 909, 248, -1000, -1000, 311, 909, 963, 909, 1574, - 1569, -1000, 729, 322, 228, -1000, 892, 892, -1000, -1000, - 12040, 171, 12040, 12040, -1000, 2172, -1000, -1000, -1000, -1000, - -1000, 1188, -1000, -1000, -1000, -1000, 7, 528, -1000, -1000, - -1000, -1000, 46339, 43651, 295, -1000, -1000, 55, -1000, -1000, - 1610, 945, 18785, 1095, -1000, 1991, 703, -1000, -1000, -1000, - -1000, -1000, 611, -1000, 19457, 19457, 19457, 19457, -1000, -1000, - 1424, 42979, 1424, 1424, 19457, 1424, -1000, 19457, 1424, 1424, - 1424, 18785, 1424, 1424, 1424, 1424, -1000, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, -1000, -1000, -1000, -1000, 1424, - 639, 1424, 1424, 1424, 1424, 1424, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 1424, 1424, 1424, 1424, 1424, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 21473, 1383, 1381, 1379, -1000, 16097, 1424, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -<<<<<<< HEAD -======= - -1000, -1000, -1000, -1000, -1000, 47505, -1000, 1781, 271, 46165, - 46165, 417, 2362, 1885, -1000, 2439, 2431, 398, 2960, 1596, - 1391, 1392, 1885, 1794, 47505, -1000, 1820, -1000, -1000, -1000, - -1000, 2053, 1397, 1685, -1000, -1000, -1000, -1000, 1500, 18693, - -1000, -1000, 2461, -1000, 22714, 667, 2459, 42145, -1000, 499, - 499, 1802, 477, 10, -1000, -1000, -1000, -1000, 830, 29415, - -1000, -1000, -1000, -1000, -1000, 1708, 47505, -1000, -1000, 4575, - 1261, -1000, 1924, -1000, 2856, 1704, -1000, 1876, 18693, 1942, - 579, 1261, 556, 550, 543, -1000, -43, -1000, -1000, -1000, - -1000, -1000, -1000, 810, 810, 810, -1000, 424, 2425, 332, - 4765, -1000, -1000, -1000, 41475, 1920, 1261, -1000, 1919, -1000, - 938, 611, 638, 638, 1261, -1000, -1000, 46835, 1261, 927, - 912, 1261, 1261, 46165, 46165, -1000, 40805, -1000, 40135, 39465, - 1195, 46165, 38795, 38125, 37455, 36785, 36115, -1000, 2204, -1000, - 2062, -1000, -1000, -1000, 46835, 1261, 1261, 46835, 46165, 46835, - 47505, 1261, -1000, -1000, 419, -1000, -1000, 1193, 1188, 1185, - 810, 810, 1184, 1669, 1666, 1657, 810, 810, 1181, 1641, - 31425, 1621, 356, 1176, 1174, 1173, 1225, 1616, 205, 1604, - 1175, 1168, 1158, 46165, 1901, 47505, -1000, 305, 882, 1161, - 753, 1070, 829, 2203, 2127, 1801, 515, 574, 1261, 481, - 481, 46165, -1000, 13996, -1000, 452, -1000, -1000, -1000, -1000, - 1590, 18693, -1000, 961, 957, 957, -1000, -1000, -1000, -1000, - -1000, -1000, 962, 47505, 961, -1000, -1000, -1000, 957, 962, - 47505, 962, 962, 962, 962, 957, 957, 957, 962, 47505, - 47505, 47505, 47505, 47505, 47505, 47505, 47505, 47505, 11968, 796, - 962, 962, -329, 962, 253, -331, -1000, 1580, -1000, -1000, - 2042, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, ->>>>>>> e439161508 (fix: complete time period feature) -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 47689, 198, 47689, -1000, 653, 47689, 47689, -1000, + 1157, 1150, -1000, -1000, 903, -1000, -1000, 903, 115, 903, + 903, 903, 903, 214, 714, 67, -1000, 209, 296, 212, + 318, 885, 295, -1000, -1000, 293, 885, 876, 885, 1572, + 1566, -1000, 735, 300, 206, -1000, 903, 903, -1000, -1000, + 12046, 162, 12046, 12046, -1000, 2229, -1000, -1000, -1000, -1000, + -1000, 1054, -1000, -1000, -1000, -1000, -19, 560, -1000, -1000, + -1000, -1000, 46345, 43657, 287, -1000, -1000, 299, -1000, -1000, + 1689, 1323, 18791, 1412, -1000, 2024, 702, -1000, -1000, -1000, + -1000, -1000, 618, -1000, 19463, 19463, 19463, 19463, -1000, -1000, + 1810, 42985, 1810, 1810, 19463, 1810, -1000, 19463, 1810, 1810, + 1810, 18791, 1810, 1810, 1810, 1810, -1000, 1810, 1810, 1810, + 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, + 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, + 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, + 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, + 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, + 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, + 1810, 1810, 1810, 1810, 1810, -1000, -1000, -1000, -1000, 1810, + 648, 1810, 1810, 1810, 1810, 1810, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 1810, 1810, 1810, 1810, 1810, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1810, 1810, + 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, + 1810, 1810, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 21479, 1336, 1334, 1332, -1000, 16103, 1810, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 47683, -1000, 1424, 259, 46339, 46339, 367, 2339, 1814, -1000, - 2408, 2373, 412, 2665, 1459, 1447, 1318, 1814, 1716, 47683, - -1000, 1771, -1000, -1000, -1000, -1000, 2018, 1278, 1559, -1000, - -1000, -1000, -1000, 1666, 18785, -1000, -1000, 2438, -1000, 22818, - 631, 2437, 42307, -1000, 492, 492, 1734, 466, 37, -1000, - -1000, -1000, -1000, 782, 29539, -1000, -1000, -1000, -1000, -1000, - 1573, 47683, -1000, -1000, 5685, 1191, -1000, 1864, -1000, 2555, - 1564, -1000, 1792, 18785, 1874, 552, 1191, 544, 538, 536, - -1000, -17, -1000, -1000, -1000, -1000, -1000, -1000, 745, 745, - 745, -1000, 401, 2392, 338, 5317, -1000, -1000, -1000, 41635, - 1837, 1191, -1000, 1822, -1000, 847, 574, 637, 637, 1191, - -1000, -1000, 47011, 1191, 846, 839, 1191, 1191, 46339, 46339, - -1000, 40963, -1000, 40291, 39619, 1163, 46339, 38947, 38275, 37603, - 36931, 36259, -1000, 2025, -1000, 1878, -1000, -1000, -1000, 47011, - 1191, 1191, 47011, 46339, 47011, 47683, 1191, -1000, -1000, 415, - -1000, -1000, 1160, 1148, 1146, 745, 745, 1132, 1557, 1556, - 1550, 745, 745, 1131, 1538, 31555, 1525, 328, 1130, 1126, - 1123, 1147, 1520, 205, 1513, 1103, 1080, 1120, 46339, 1821, - 47683, -1000, 296, 752, 983, 535, 911, 780, 2176, 2102, - 1733, 524, 551, 1191, 467, 467, 46339, -1000, 14074, -1000, - 556, -1000, -1000, -1000, -1000, 1508, 18785, -1000, 910, 909, - 909, -1000, -1000, -1000, -1000, -1000, -1000, 892, 47683, 910, - -1000, -1000, -1000, 909, 892, 47683, 892, 892, 892, 892, - 909, 909, 909, 892, 47683, 47683, 47683, 47683, 47683, 47683, - 47683, 47683, 47683, 12040, 729, 892, 892, -324, 892, 242, - -330, -1000, 1504, -1000, -1000, 1993, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 47689, -1000, 1810, 228, 46345, 46345, 405, 2334, 1886, -1000, + 2471, 2424, 398, 3130, 1819, 1636, 1270, 1886, 1784, 47689, + -1000, 1814, -1000, -1000, -1000, -1000, 2096, 1264, 1542, -1000, + -1000, -1000, -1000, 1962, 18791, -1000, -1000, 2485, -1000, 22824, + 644, 2483, 42313, -1000, 520, 520, 1801, 451, 52, -1000, + -1000, -1000, -1000, 786, 29545, -1000, -1000, -1000, -1000, -1000, + 1670, 47689, -1000, -1000, 7401, 1106, -1000, 1952, -1000, 3011, + 1668, -1000, 1891, 18791, 1907, 583, 1106, 573, 571, 567, + -1000, -42, -1000, -1000, -1000, -1000, -1000, -1000, 752, 752, + 752, -1000, 417, 2446, 323, 4555, -1000, -1000, -1000, 41641, + 1950, 1106, -1000, 1944, -1000, 866, 595, 682, 682, 1106, + -1000, -1000, 47017, 1106, 865, 864, 1106, 1106, 46345, 46345, + -1000, 40969, -1000, 40297, 39625, 1141, 46345, 38953, 38281, 37609, + 36937, 36265, -1000, 2073, -1000, 2040, -1000, -1000, -1000, 47017, + 1106, 1106, 47017, 46345, 47017, 47689, 1106, -1000, -1000, 374, + -1000, -1000, 1140, 1123, 1120, 752, 752, 1100, 1534, 1531, + 1522, 752, 752, 1094, 1520, 31561, 1513, 310, 1088, 1084, + 1078, 1171, 1510, 195, 1508, 1159, 1076, 1071, 46345, 1942, + 47689, -1000, 288, 998, 1042, 920, 908, 778, 2239, 2184, + 1799, 544, 575, 1106, 515, 515, 46345, -1000, 14080, -1000, + 689, -1000, -1000, -1000, -1000, 1483, 18791, -1000, 887, 885, + 885, -1000, -1000, -1000, -1000, -1000, -1000, 903, 47689, 887, + -1000, -1000, -1000, 885, 903, 47689, 903, 903, 903, 903, + 885, 885, 885, 903, 47689, 47689, 47689, 47689, 47689, 47689, + 47689, 47689, 47689, 12046, 735, 903, 903, -373, 903, 219, + -374, -1000, 1481, -1000, -1000, 2062, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -11546,584 +6538,299 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -<<<<<<< HEAD -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 12040, 12040, - -1000, -1000, -1000, -1000, -1000, 1732, -1000, 219, 82, 220, - -1000, 35587, 410, 772, -1000, 410, -1000, -1000, -1000, 1731, - 34915, -1000, -334, -346, -375, -380, -1000, -1000, -1000, -1000, - -383, -384, -1000, -1000, -1000, 18785, 18785, 18785, 18785, -152, - -1000, 883, 19457, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 154, 901, 19457, 19457, 19457, 19457, 19457, 19457, 19457, 19457, - 19457, 19457, 19457, 19457, 19457, 19457, 19457, -1000, -1000, 27523, - 6811, 6811, 703, 703, 703, 703, -1000, -78, 1725, 47011, - -1000, -1000, -1000, 629, 18785, 18785, 703, -1000, 1191, 16097, - 20129, 18113, 18113, 18785, 794, 945, 47011, 18785, -1000, 1318, - -1000, -1000, -1000, 1183, -1000, 861, 2163, 2163, 2163, 2163, - 18785, 18785, 18785, 18785, 18785, 18785, 18785, 18785, 18785, 18785, - 2163, 46339, 46339, 1486, 18785, 18785, 18785, 18785, 18785, 18785, - 14752, 18785, 18785, 19457, 18785, 18785, 18785, 1318, 18785, 18785, - 18785, 18785, 18785, 18785, 18785, 18785, 18785, 18785, 18785, 18785, - 18785, 18785, 18785, 18785, 18785, 18785, 18785, 18785, 18785, 18785, - 18785, 18785, 18785, 18785, 18785, 1318, 18785, 1216, 18785, 18785, - 18113, 13396, 18113, 18113, 18113, 18113, 18113, -1000, -1000, -1000, - -1000, -1000, 18785, 18785, 18785, 18785, 18785, 18785, 18785, 18785, - 1318, 18785, 18785, 18785, 18785, 18785, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 1317, 1336, 1245, 18785, - -1000, 1724, -1000, -100, 24835, 18785, 1497, 1490, 2434, 1889, - 46339, -1000, -1000, -1000, 2339, -1000, 2339, 1317, 2023, 18113, - -1000, -1000, 2555, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 1552, -1000, 47683, 1716, 2242, 46339, 2012, 1478, 403, - -1000, 18785, 18785, 1699, -1000, 1494, 47683, -1000, -152, -1000, - 34243, -1000, -1000, 11362, 47683, 381, 47683, -1000, 24163, 33571, - 324, -1000, 37, 1669, -1000, 74, 30, 15424, 699, -1000, - -1000, -1000, 1259, 20801, 1597, 699, 149, -1000, -1000, -1000, - 1792, -1000, 1792, 1792, 1792, 1792, 403, 403, 403, 403, - -1000, -1000, -1000, -1000, -1000, 1820, 1819, -1000, 1792, 1792, - 1792, 1792, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1810, - 1810, 1810, 1809, 1809, 1794, 1794, 457, -1000, 18785, -1000, - -1000, 312, 32899, 2206, 1113, 1269, 296, 472, 1888, 1191, - 1191, 1191, 472, -1000, 1229, 1227, 1223, -1000, -457, 1698, - -1000, -1000, 2391, -1000, -1000, 578, 920, 903, 1061, 46339, - 272, 375, -1000, 451, -1000, 32899, 1191, 833, 637, 1191, - -1000, 1191, -1000, -1000, -1000, -1000, -1000, 1191, -1000, -1000, - 1697, -1000, 1664, 922, 894, 897, 893, 1697, -1000, -1000, - -91, 1697, -1000, 1697, -1000, 1697, -1000, 1697, -1000, 1697, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 784, - 244, -229, 46339, 272, 504, -1000, 499, 27523, -1000, -1000, - -1000, 27523, 27523, -1000, -1000, -1000, -1000, 1476, 1464, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -443, 47683, - -1000, 285, 763, 357, 396, 346, 47683, 887, 2335, 2334, - 2333, 2332, 2330, 2324, 2322, 443, 2320, 2312, 2302, 2300, - 2299, 2290, 709, 2286, 2276, 2275, 2269, 2266, 2245, 2225, - 302, 348, 47683, 47683, 467, 1954, 47683, 2203, 47683, -1000, - -1000, -1000, -1000, 461, 47683, -1000, 325, -1000, -1000, -1000, - -1000, -1000, -1000, 945, 47683, -1000, -1000, 892, 892, -1000, - -1000, 47683, 892, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 892, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 47683, -1000, -1000, -1000, -1000, 7, 222, -1000, -1000, - 46339, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -38, -1000, 81, 67, 404, -1000, -1000, -1000, -1000, -1000, - 2292, -1000, 945, 821, 809, -1000, 1424, -1000, -1000, 1025, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 154, 19457, 19457, - 19457, 1628, 508, 2028, 1293, 1249, 933, 933, 1062, 1062, - 710, 710, 710, 710, 710, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 1456, -1000, 1424, 47011, 1536, 13396, 1746, - 1977, 1318, 3014, -1000, 1532, -1000, 1532, 1198, 790, -1000, - 18785, 1318, 3006, -1000, -1000, 1318, 1318, 1318, 18785, -1000, - -1000, 18785, 18785, 18785, 18785, 1269, 1269, 1269, 1269, 1269, - 1269, 1269, 1269, 1269, 1269, 18785, 1691, 1685, 2431, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 1541, 1269, 1269, 1269, 1269, 1269, 18785, 1970, -1000, -1000, - -1000, 1273, 3001, 1850, 2987, 1269, 1269, -1000, 1269, 2981, - 2974, 1318, 1610, 1318, 1673, -1000, 2962, 1269, 2958, 2951, - 2945, 2254, 2932, 2906, 2902, 1269, 1269, 1269, 2223, 2893, - 2889, 2870, 2841, 2762, 2743, 2720, 2716, 2526, 1269, -155, - 1269, 1318, -1000, -1000, -1000, -1000, -1000, 2521, 2167, 1318, - 1671, 1424, 626, -1000, -1000, 1532, 1318, 1318, 1532, 1532, - 2424, 2403, 2393, 2385, 2369, 2359, 1269, 1269, -1000, 1269, - 2336, 2329, 2162, 2121, 1318, -1000, 1245, 47683, -1000, -304, - -1000, 59, 717, 1424, -1000, 31555, 1318, -1000, -1000, 5971, - -1000, 1065, -1000, -1000, -1000, 28867, 1560, 2555, -1000, -1000, - 1424, 1530, -1000, -1000, 403, 132, 28195, 600, 600, 163, - 945, 945, 18785, -1000, -1000, -1000, -1000, -1000, -1000, 606, - 2337, 424, 1424, -1000, 1695, 2174, -1000, -1000, -1000, 2239, - 22146, -1000, -1000, 1424, 1424, 47683, 1622, 1599, -1000, 601, - -1000, 1203, 1669, 37, 72, -1000, -1000, -1000, -1000, 945, - -1000, 1219, 382, 719, -1000, 437, -1000, -1000, -1000, -1000, - 2126, 146, -1000, -1000, -1000, 266, 403, -1000, -1000, -1000, - -1000, -1000, -1000, 1454, 1454, -1000, -1000, -1000, -1000, -1000, - 1112, -1000, -1000, -1000, -1000, 1109, -1000, -1000, 1108, -1000, - -1000, 2309, 1942, 312, -1000, -1000, 745, 1451, -1000, -1000, - 2130, 745, 745, 46339, -1000, -1000, 1585, 2206, 285, 47683, - 804, 1952, -1000, 1888, 1888, 1888, 47683, -1000, -1000, -1000, - -1000, -1000, -1000, -445, 80, 430, -1000, -1000, -1000, 4856, - 46339, 1496, -1000, 268, -1000, 1580, -1000, 46339, -1000, 1489, - 1808, 1191, 1191, -1000, -1000, -1000, 46339, 1424, -1000, -1000, - -1000, -1000, 550, 2175, 326, -1000, -1000, -180, -1000, -1000, - 272, 268, 47011, 1191, 699, -1000, -1000, -1000, -1000, -1000, - -446, 1485, 509, 277, 361, 47683, 47683, 47683, 47683, 47683, - 613, -1000, -1000, 94, -1000, -1000, -1000, -1000, 252, -1000, - -1000, -1000, -1000, -1000, -1000, 252, -1000, -1000, -1000, -1000, - -1000, 252, -1000, 1439, -1000, -1000, -1000, -1000, 252, -1000, - -1000, -1000, 91, -1000, -1000, -1000, -1000, 252, -1000, -1000, - -1000, -1000, -1000, -1000, 252, -1000, -1000, -1000, -1000, 327, - 497, -1000, 47683, 47683, 657, -1000, -1000, -1000, -1000, -1000, - -1000, 909, -1000, -1000, 909, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2169, 47683, 65, - -404, -1000, -399, 18785, -1000, -1000, -1000, -1000, 1392, 506, - 2028, 19457, 19457, 19457, -1000, -1000, -1000, 1003, 1003, 27523, - -1000, 18785, 18113, -1000, -1000, 18785, 18785, 785, -1000, 18785, - 1122, -1000, 18785, -1000, -1000, -1000, 1245, 1269, 1269, 1269, - 1269, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 1723, 18785, 18785, 18785, 1318, 364, -1000, -1000, -1000, - -1000, -1000, 2428, -1000, 18785, -1000, 27523, 18785, 18785, 18785, - -1000, -1000, -1000, 18785, 18785, -1000, -1000, 18785, 18785, -1000, - 18785, 18785, 18785, -1000, 18785, 18785, 18785, 18785, -1000, -1000, - -1000, -1000, 18785, 18785, 18785, 18785, 18785, 18785, 18785, 18785, - 18785, 18785, -1000, -1000, 32899, 119, -155, 1216, 119, 1216, - -1000, 18113, 12718, -1000, -1000, -1000, -1000, -1000, 18785, 18785, - 18785, 18785, 18785, 18785, -1000, -1000, -1000, 18785, 18785, -1000, - 18785, -1000, 18785, -1000, -1000, -1000, -1000, -1000, 717, -1000, - 637, 637, 637, 46339, -1000, -1000, -1000, -1000, 1668, -1000, - 2271, -1000, 2045, 2037, 2414, 2337, -1000, 24163, 2555, -1000, - -1000, 46339, -290, -1000, 2099, 2036, 600, 600, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 10684, 2339, 18785, 1951, 47011, - 158, -1000, 23491, 46339, 47011, 24163, 24163, 24163, 24163, 24163, - -1000, 1986, 1984, -1000, 1976, 1972, 1994, 47683, -1000, 1317, - 1482, -1000, 18785, 26179, 1623, 24163, -1000, -1000, 24163, 47683, - 10006, -1000, -1000, 62, 21, -1000, -1000, -1000, -1000, 1259, - -1000, -1000, 2759, 2238, 2123, -1000, -1000, -1000, -1000, -1000, - 1463, -1000, 1461, 1663, 1438, 1430, 244, -1000, 1873, 2155, - 745, 745, -1000, 1107, -1000, 1191, 1427, 1426, -1000, -1000, - -1000, 507, -1000, 2201, 47683, 1934, 1933, 1917, -1000, -454, - 1093, 1806, 1816, 18785, 1805, 2390, 1648, 46339, -1000, -1000, - 47011, -1000, 262, -1000, 312, 46339, -1000, -1000, -1000, 375, - 47683, -1000, 4371, -1000, -1000, -1000, 268, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 47683, 283, -1000, 1802, 1182, -1000, - -1000, 1793, -1000, -1000, -1000, -1000, 255, 355, 1425, 247, - 1423, 247, 247, 1422, 247, 1407, 247, 247, -1000, 47683, - 649, 1942, 47683, -1000, -1000, -1000, 892, 892, -1000, -1000, - 2150, -1000, 1191, 1269, 19457, 19457, -1000, 703, 304, -130, - 1792, 1792, -1000, 1792, 1794, -1000, 1792, 207, 1792, 202, - 1792, -1000, -1000, 1318, 1318, 1245, -1000, 2098, 1258, -1000, - 945, 18785, 2303, -1000, -1000, -1000, -1000, -1000, -23, 2291, - 2284, 1269, -1000, 1789, 1788, 18785, 1269, 1318, 2041, 1269, - 1269, 1269, 1269, -1000, 945, 1245, 2267, 1245, 1269, 1269, - 2263, 339, 1269, 1421, 1421, 1421, 1421, 1421, 1245, 1245, - 1245, 1245, 46339, -1000, -155, -1000, -1000, -198, -202, -1000, - 1318, -155, 1659, 1318, -1000, 2033, 2003, 2229, 1811, 1269, - 2208, 1269, 1269, 1269, 1784, -1000, 2264, 2264, 2264, 1406, - 1065, 47683, -1000, -1000, -1000, -1000, 2337, 2401, 1652, -1000, - -1000, 132, 482, -1000, 2076, 2036, -1000, 2380, 2093, 2365, - -1000, -1000, -1000, -1000, -1000, 945, -1000, 2187, 1619, -1000, - 761, 1621, -1000, -1000, 17441, 1417, 2029, 594, 1406, 1681, - 2174, 1880, 1916, 3290, -1000, -1000, -1000, -1000, 1983, -1000, - 1973, -1000, -1000, 1771, -1000, 2137, 381, 24163, 1651, 1651, - -1000, 592, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 935, - 7106, 2447, -1000, 1389, -1000, 1208, 199, 1078, -1000, -1000, - 745, 745, -1000, 829, 819, -1000, 47683, 1781, -1000, 403, - 1386, 403, 1076, -1000, -1000, 1070, -1000, -1000, -1000, -1000, - 1743, 1946, -1000, -1000, -1000, -1000, 47683, -1000, -1000, 47683, - 47683, 47683, 1776, 2363, -1000, 18785, 1775, 755, 2133, 46339, - 46339, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 486, 745, -421, 344, 343, 745, 745, 745, - -456, -1000, -1000, 1404, 1402, -1000, -121, -1000, 18785, -1000, - -1000, -1000, 1073, 1073, 1383, 1381, 1379, -1000, 1771, -1000, - -1000, -1000, 1579, -1000, -1000, -97, 46339, 46339, 46339, 46339, - -1000, -1000, 981, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 703, 1318, 366, -99, 1318, -1000, -1000, 403, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 18785, - -1000, 18785, -1000, 945, 18785, 2339, 1358, 18785, 18785, -1000, - 1063, 1046, 1269, -1000, -1000, -1000, 18785, -1000, -1000, -1000, - -1000, -1000, 18785, -1000, -1000, -1000, 18785, 217, 1003, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1318, - 377, -1000, -1000, -1000, -1000, 2404, -1000, 1318, 18785, -1000, - -1000, 18785, -1000, 18785, 18785, -1000, 18785, -1000, 18785, -1000, - -1000, -1000, -1000, 18785, 1424, 2059, 1424, 1424, 26179, -1000, - -1000, 2401, 2395, 2362, 2085, 2087, 2087, 2076, -1000, 2360, - 2358, -1000, 1338, 2354, 1334, 816, -1000, 47011, 18785, 158, - -1000, 428, 46339, 158, 46339, -1000, 2396, -1000, -1000, 18785, - 1774, -1000, 18785, -1000, -1000, -1000, -1000, 6811, 2337, 1651, - -1000, -1000, 716, -1000, 18785, -1000, -1000, -1000, 3903, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1319, 1313, -1000, - -1000, 1773, 18785, -1000, -1000, -1000, 1565, 1537, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 1771, -1000, -1000, -1000, - -1000, 375, -450, 2090, 46339, 1032, -1000, 1398, 1648, 368, - 158, 1311, 745, 745, 745, 1024, 1011, 31555, 1363, -1000, - 46339, 432, -1000, 375, -1000, -126, -127, 1269, -1000, -1000, - 2228, -1000, -1000, 12718, -1000, -1000, 1753, 1887, -1000, -1000, - -1000, -1000, 2010, -87, -105, -1000, -1000, 1269, 1269, 1675, - 1318, -1000, 1269, 1269, 1399, 1364, -1000, 1269, 1245, 1763, - -1000, 217, 1318, 1915, -1000, -1000, 6811, -1000, -1000, 2396, - 2347, 119, -1000, -1000, 294, 119, 945, 1741, 1269, 1602, - 1596, 1269, 1269, 26851, -1000, 2346, 2341, 32227, 32227, 717, - 2395, -170, 18785, 18785, 2031, 1015, -1000, -1000, -1000, -1000, - 1306, 1279, -1000, 1277, -1000, 2446, -1000, 945, -1000, 158, - -1000, 554, 1621, -1000, 2339, 945, 46339, 945, 133, 2396, - -1000, 1269, -1000, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, - 1424, 1424, 1424, -1000, -1000, 46339, 1714, -1000, -1000, 2212, - 1343, 79, -1000, 1337, 1648, -1000, -1000, 151, -1000, 18785, - -1000, 31555, 1274, 1234, -1000, -1000, -1000, -1000, -456, -1000, - -1000, -1000, -1000, -1000, -1000, 412, 1631, -1000, 738, 46339, - 47683, -1000, 2009, -1000, -1000, -1000, 18785, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 18785, -1000, 1318, 1906, -1000, - -284, -1000, -429, 18785, -155, -1000, -1000, -155, -1000, 18785, - -1000, -1000, 18785, -1000, 18785, -1000, -1000, 1305, -1000, -1000, - -1000, -1000, -1000, 1305, 1305, -1000, -170, -1000, 1625, -1000, - 46339, 945, 1610, -1000, 999, -1000, -1000, -1000, -1000, -1000, - 47011, 1621, 46339, -1000, 1303, 1318, 1424, 2339, -1000, 1294, - -1000, 412, -1000, 1750, 1816, -1000, -1000, -1000, 16769, -1000, - -1000, -1000, -1000, -1000, 194, -95, 12718, 9328, 1266, -1000, - -94, 1269, 1245, -1000, -386, -1000, -1000, -1000, -1000, 216, - -1000, -1000, 1610, -1000, -1000, 1584, 1524, 1516, 30883, -1000, - -1000, -1000, -1000, -170, -1000, -1000, 2210, -1000, -1000, 1607, - -1000, -1000, 26179, 45667, -1000, -81, 263, -95, 18785, 1744, - 1318, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 28, - -1000, -1000, -1000, -1000, -1000, 1793, -103, -1000, -1000, -1000, - 206, -410, -195, -200, -1000, -1000, 19457, -1000, 18785, -1000, - 18785, -1000, 18785, -1000, -1000, -1000, 46339, 1424, -1000, 1241, - -1000, 3811, -216, 1903, -1000, -35, -1000, -1000, -1000, 931, - 1215, -1000, -1000, -1000, -1000, -1000, -1000, 1635, 46339, -1000, - 454, -1000, -1000, -97, -116, 806, -1000, -1000, -1000, -1000, - -1000, 1503, 1361, 1269, -1000, 46339, -1000, 45667, -207, 699, - 6811, -1000, 1902, 1893, 2421, -1000, -1000, -1000, -1000, -1000, - -1000, -462, 1239, 291, -1000, -1000, 206, -1000, 18785, -1000, - 18785, -1000, 1318, -1000, -1000, 2179, 133, -1000, 2445, -1000, - 2422, 645, 645, -1000, 992, -462, -1000, -1000, 1269, 1269, - -1000, -219, -1000, -1000, -1000, -1000, -1000, 438, 996, -1000, - -1000, -1000, -1000, -1000, 6811, -1000, -1000, -1000, 241, 241, - -1000, -1000, -} - -var yyPgo = [...]int{ - 0, 3029, 3027, 25, 1, 34, 33, 3025, 52, 110, - 213, 58, 246, 119, 3024, 189, 3022, 3021, 3019, 3017, - 3015, 3014, 2485, 2484, 2476, 3013, 3008, 3003, 2997, 2995, - 2993, 2992, 2986, 2984, 2979, 194, 184, 210, 2972, 2970, - 2969, 133, 206, 100, 103, 207, 2965, 2963, 93, 2961, - 2960, 2959, 204, 203, 201, 876, 2950, 196, 130, 64, - 2947, 2946, 2945, 2937, 2934, 2933, 2932, 2931, 2930, 2928, - 2926, 2924, 2923, 2922, 2917, 2916, 2914, 2913, 2912, 2911, - 292, 2908, 2907, 16, 2905, 89, 2900, 2899, 2898, 2894, - 2892, 7, 2891, 2889, 20, 42, 2888, 2887, 48, 2886, - 2883, 2881, 2880, 2879, 14, 2877, 22, 2876, 38, 2875, - 2873, 146, 2872, 2871, 2870, 39, 2868, 2867, 2864, 2863, - 2856, 2853, 2852, 158, 2851, 2839, 2827, 192, 212, 2821, - 2818, 186, 118, 120, 2813, 2812, 115, 205, 2809, 141, - 2807, 2806, 2803, 172, 2792, 2216, 2787, 2785, 75, 88, - 2776, 50, 2775, 2770, 9, 90, 70, 4, 81, 83, - 2768, 2767, 72, 102, 2765, 121, 2764, 2763, 116, 86, - 2762, 114, 111, 2761, 2760, 17, 21, 2757, 35, 29, - 36, 80, 2752, 2751, 122, 2750, 2749, 2748, 109, 2746, - 2744, 3164, 2743, 107, 148, 117, 92, 2739, 54, 78, - 2738, 2735, 2732, 2726, 2721, 56, 2719, 2718, 2715, 163, - 71, 188, 2714, 41, 46, 57, 150, 2712, 74, 97, - 211, 185, 2708, 2707, 156, 153, 2705, 2696, 66, 45, - 44, 2694, 123, 144, 136, 26, 113, 155, 2691, 2688, - 69, 85, 2686, 2685, 2684, 2681, 187, 2677, 2676, 79, - 2675, 65, 2672, 191, 2669, 6, 67, 2666, 49, 179, - 2664, 87, 2655, 2653, 77, 143, 82, 37, 2652, 178, - 183, 145, 177, 2651, 2650, 60, 2643, 2637, 2636, 208, - 335, 2633, 2632, 101, 190, 160, 171, 104, 2626, 359, - 2625, 2624, 105, 2, 5282, 2618, 40, 180, 2617, 2615, - 6014, 154, 43, 24, 2607, 134, 2605, 2604, 2599, 2597, - 224, 195, 128, 181, 63, 2593, 2584, 2581, 13, 2577, - 2576, 2575, 2574, 2569, 2568, 91, 32, 31, 30, 251, - 76, 11, 112, 182, 174, 96, 2567, 2562, 2561, 137, - 106, 2559, 176, 175, 139, 168, 2558, 193, 169, 138, - 2556, 95, 28, 2555, 2551, 2550, 2547, 108, 2541, 2540, - 2539, 2538, 173, 164, 135, 94, 2537, 98, 132, 170, - 165, 53, 2536, 47, 2533, 2529, 27, 202, 23, 2528, - 12, 124, 151, 2523, 4148, 198, 2521, 15, 347, 166, - 2518, 2517, 5, 8, 10, 2513, 2506, 2505, 2504, 152, - 2502, 2499, 2497, 2494, 19, 51, 18, 3, 125, 131, - 2492, 2489, 159, 162, 2486, 2480, 2472, 2466, 3168, 0, - 147, 2465, 214, -} - -//line sql.y:8409 -======= - -1000, -1000, 11968, 11968, -1000, -1000, -1000, -1000, -1000, 1800, - -1000, 212, 79, 232, -1000, 35445, 412, 828, -1000, 412, - -1000, -1000, -1000, 1798, 34775, -1000, -370, -375, -377, -378, - -1000, -1000, -1000, -379, -385, -1000, -1000, -1000, 18693, 18693, - 18693, 18693, -173, -1000, 1046, 19363, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 166, 909, 19363, 19363, 19363, 19363, 19363, - 19363, 19363, 19363, 19363, 19363, 19363, 19363, 19363, 19363, 19363, - -1000, -1000, 27405, 6011, 6011, 749, 749, 749, 749, -1000, - -105, 1797, 46835, -1000, -1000, -1000, 665, 18693, 18693, 749, - -1000, 1261, 16013, 20033, 18023, 18023, 18693, 848, 1270, 46835, - 18693, -1000, 1392, -1000, -1000, -1000, 1141, -1000, 904, 2170, - 2170, 2170, 2170, 18693, 18693, 18693, 18693, 18693, 18693, 18693, - 18693, 18693, 18693, 2170, 46165, 46165, 767, 18693, 18693, 18693, - 18693, 18693, 18693, 14672, 18693, 18693, 19363, 18693, 18693, 18693, - 1392, 18693, 18693, 18693, 18693, 18693, 18693, 18693, 18693, 18693, - 18693, 18693, 18693, 18693, 18693, 18693, 18693, 18693, 18693, 18693, - 18693, 18693, 18693, 18693, 18693, 18693, 18693, 18693, 1392, 18693, - 1198, 18693, 18693, 18023, 13320, 18023, 18023, 18023, 18023, 18023, - -1000, -1000, -1000, -1000, -1000, 18693, 18693, 18693, 18693, 18693, - 18693, 18693, 18693, 1392, 18693, 18693, 18693, 18693, 18693, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1474, - 1379, 1395, 18693, -1000, 1795, -1000, -104, 24725, 18693, 1577, - 1566, 2458, 1965, 46165, -1000, -1000, -1000, 2362, -1000, 2362, - 1474, 2036, 18023, -1000, -1000, 2856, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 1653, -1000, 47505, 1794, 2269, 46165, - 2024, 1550, 409, -1000, 18693, 18693, 1793, -1000, 1204, 47505, - -1000, -173, -1000, 34105, -1000, -1000, 11292, 47505, 403, 47505, - -1000, 24055, 33435, 335, -1000, 10, 1782, -1000, 43, 45, - 15342, 748, -1000, -1000, -1000, 1530, 20703, 1735, 748, 167, - -1000, -1000, -1000, 1876, -1000, 1876, 1876, 1876, 1876, 409, - 409, 409, 409, -1000, -1000, -1000, -1000, -1000, 1900, 1899, - -1000, 1876, 1876, 1876, 1876, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 1898, 1898, 1898, 1891, 1891, 1879, 1879, 472, - -1000, 18693, -1000, -1000, 324, 32765, 2212, 1151, 1504, 305, - 490, 1963, 1261, 1261, 1261, 490, -1000, 1290, 1274, 1260, - -1000, -446, 1792, -1000, -1000, 2424, -1000, -1000, 646, 997, - 956, 840, 46165, 277, 393, -1000, 466, -1000, 32765, 1261, - 907, 638, 1261, -1000, 1261, -1000, -1000, -1000, -1000, -1000, - 1261, -1000, -1000, 1790, -1000, 1789, 1028, 919, 1003, 892, - 1790, -1000, -1000, -112, 1790, -1000, 1790, -1000, 1790, -1000, - 1790, -1000, 1790, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 814, 228, -235, 46165, 277, 510, -1000, 509, - 27405, -1000, -1000, -1000, 27405, 27405, -1000, -1000, -1000, -1000, - 1545, 1537, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 12046, 12046, + -1000, -1000, -1000, -1000, -1000, 1798, -1000, 200, 17, 210, + -1000, 35593, 384, 774, -1000, 384, -1000, -1000, -1000, 1797, + 34921, -1000, -375, -376, -380, -382, -1000, -1000, -1000, -1000, + -385, -387, -1000, -1000, -1000, 18791, 18791, 18791, 18791, -174, + -1000, 1194, 19463, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 150, 1216, 19463, 19463, 19463, 19463, 19463, 19463, 19463, 19463, + 19463, 19463, 19463, 19463, 19463, 19463, 19463, -1000, -1000, 27529, + 8265, 8265, 702, 702, 702, 702, -1000, -109, 1796, 47017, + -1000, -1000, -1000, 633, 18791, 18791, 702, -1000, 1106, 16103, + 20135, 18119, 18119, 18791, 806, 1323, 47017, 18791, -1000, 1270, + -1000, -1000, -1000, 1021, -1000, 961, 2215, 2215, 2215, 2215, + 18791, 18791, 18791, 18791, 18791, 18791, 18791, 18791, 18791, 18791, + 2215, 46345, 46345, 1480, 18791, 18791, 18791, 18791, 18791, 18791, + 14758, 18791, 18791, 19463, 18791, 18791, 18791, 1270, 18791, 18791, + 18791, 18791, 18791, 18791, 18791, 18791, 18791, 18791, 18791, 18791, + 18791, 18791, 18791, 18791, 18791, 18791, 18791, 18791, 18791, 18791, + 18791, 18791, 18791, 18791, 18791, 1270, 18791, 1291, 18791, 18791, + 18119, 13402, 18119, 18119, 18119, 18119, 18119, -1000, -1000, -1000, + -1000, -1000, 18791, 18791, 18791, 18791, 18791, 18791, 18791, 18791, + 1270, 18791, 18791, 18791, 18791, 18791, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 1406, 1311, 1296, 18791, + -1000, 1792, -1000, -116, 24841, 18791, 1470, 1464, 2481, 1982, + 46345, -1000, -1000, -1000, 2334, -1000, 2334, 1406, 2042, 18119, + -1000, -1000, 3011, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 1519, -1000, 47689, 1784, 2300, 46345, 2092, 1456, 432, + -1000, 18791, 18791, 1783, -1000, 1546, 47689, -1000, -174, -1000, + 34249, -1000, -1000, 11368, 47689, 394, 47689, -1000, 24169, 33577, + 412, -1000, 52, 1762, -1000, 37, 10, 15430, 701, -1000, + -1000, -1000, 4256, 20807, 1679, 701, 130, -1000, -1000, -1000, + 1891, -1000, 1891, 1891, 1891, 1891, 432, 432, 432, 432, + -1000, -1000, -1000, -1000, -1000, 1941, 1929, -1000, 1891, 1891, + 1891, 1891, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1927, + 1927, 1927, 1924, 1924, 1892, 1892, 499, -1000, 18791, -1000, + -1000, 647, 32905, 2257, 1069, 1541, 288, 516, 1979, 1106, + 1106, 1106, 516, -1000, 1202, 1195, 1185, -1000, -462, 1782, + -1000, -1000, 2445, -1000, -1000, 1223, 901, 897, 955, 46345, + 261, 370, -1000, 489, -1000, 32905, 1106, 862, 682, 1106, + -1000, 1106, -1000, -1000, -1000, -1000, -1000, 1106, -1000, -1000, + 1779, -1000, 1713, 927, 895, 923, 882, 1779, -1000, -1000, + -113, 1779, -1000, 1779, -1000, 1779, -1000, 1779, -1000, 1779, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 794, + 220, -241, 46345, 261, 533, -1000, 532, 27529, -1000, -1000, + -1000, 27529, 27529, -1000, -1000, -1000, -1000, 1451, 1443, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -437, 47505, -1000, 300, 822, 384, 414, 382, 47505, - 1007, 2357, 2356, 2352, 2348, 2343, 2342, 2341, 341, 2338, - 2337, 2332, 2331, 2317, 2316, 705, 2315, 2303, 2298, 2297, - 2284, 2280, 2279, 310, 360, 47505, 47505, 481, 2001, 47505, - 2230, 47505, -1000, -1000, -1000, -1000, 485, 47505, -1000, 326, - -1000, -1000, -1000, -1000, -1000, -1000, 1270, 47505, -1000, -1000, - 962, 962, -1000, -1000, 47505, 962, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 962, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -448, 47689, + -1000, 277, 772, 338, 397, 329, 47689, 1016, 2403, 2402, + 2396, 2393, 2391, 2390, 2378, 757, 2375, 2363, 2349, 2348, + 2346, 2345, 974, 2338, 2333, 2332, 2327, 2325, 2320, 2319, + 284, 339, 47689, 47689, 515, 2017, 47689, 2275, 47689, -1000, + -1000, -1000, -1000, 574, 47689, -1000, 311, -1000, -1000, -1000, + -1000, -1000, -1000, 1323, 47689, -1000, -1000, 903, 903, -1000, + -1000, 47689, 903, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 903, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 47505, -1000, -1000, -1000, -1000, -18, - 214, -1000, -1000, 46165, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -40, -1000, 89, 29, 378, -1000, -1000, - -1000, -1000, -1000, 2302, -1000, 1270, 862, 873, -1000, 1781, - -1000, -1000, 1083, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 166, 19363, 19363, 19363, 2060, 563, 2180, 1164, 1780, 1283, - 1283, 930, 930, 755, 755, 755, 755, 755, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 1531, -1000, 1781, 46835, - 1700, 13320, 1625, 1053, 1392, 3189, -1000, 1663, -1000, 1663, - 1442, 847, -1000, 18693, 1392, 3185, -1000, -1000, 1392, 1392, - 1392, 18693, -1000, -1000, 18693, 18693, 18693, 18693, 1504, 1504, - 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 18693, 1788, - 1786, 2457, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 47689, -1000, -1000, -1000, -1000, -19, 197, -1000, -1000, + 46345, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -28, -1000, 662, 29, 408, -1000, -1000, -1000, -1000, -1000, + 2313, -1000, 1323, 827, 846, -1000, 1810, -1000, -1000, 986, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 150, 19463, 19463, + 19463, 2035, 557, 1854, 1781, 1479, 928, 928, 1344, 1344, + 707, 707, 707, 707, 707, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 1441, -1000, 1810, 47017, 1610, 13402, 2714, + 1902, 1270, 3008, -1000, 1590, -1000, 1590, 1657, 812, -1000, + 18791, 1270, 3003, -1000, -1000, 1270, 1270, 1270, 18791, -1000, + -1000, 18791, 18791, 18791, 18791, 1541, 1541, 1541, 1541, 1541, + 1541, 1541, 1541, 1541, 1541, 18791, 1777, 1775, 2479, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 1364, 1504, 1504, 1504, 1504, 1504, 18693, - 1513, -1000, -1000, -1000, 1410, 3109, 1385, 3087, 1504, 1504, - -1000, 1504, 3023, 3017, 1392, 1716, 1392, 1785, -1000, 3013, - 1504, 3008, 2999, 2992, 2378, 2961, 2951, 2944, 1504, 1504, - 1504, 2312, 2935, 2927, 2909, 2899, 2895, 2872, 2868, 2859, - 2759, 1504, -176, 1504, 1392, -1000, -1000, -1000, -1000, -1000, - 2755, 2301, 1392, 1784, 1781, 658, -1000, -1000, 1663, 1392, - 1392, 1663, 1663, 2746, 2736, 2726, 2697, 2614, 2542, 1504, - 1504, -1000, 1504, 2422, 2399, 2282, 2275, 1392, -1000, 1395, - 47505, -1000, -306, -1000, 14, 690, 1781, -1000, 31425, 1392, - -1000, -1000, 3651, -1000, 1208, -1000, -1000, -1000, 28745, 1730, - 2856, -1000, -1000, 1781, 1648, -1000, -1000, 409, 135, 28075, - 727, 727, 175, 1270, 1270, 18693, -1000, -1000, -1000, -1000, - -1000, -1000, 641, 2394, 468, 1781, -1000, 1783, 2463, -1000, - -1000, -1000, 2267, 22044, -1000, -1000, 1781, 1781, 47505, 1739, - 1713, -1000, 627, -1000, 1286, 1782, 10, 25, -1000, -1000, - -1000, -1000, 1270, -1000, 1258, 405, 703, -1000, 464, -1000, - -1000, -1000, -1000, 2137, 141, -1000, -1000, -1000, 258, 409, - -1000, -1000, -1000, -1000, -1000, -1000, 1520, 1520, -1000, -1000, - -1000, -1000, -1000, 1142, -1000, -1000, -1000, -1000, 1140, -1000, - -1000, 1139, -1000, -1000, 2456, 1989, 324, -1000, -1000, 810, - 1515, -1000, -1000, 2139, 810, 810, 46165, -1000, -1000, 1674, - 2212, 300, 47505, 859, 1999, -1000, 1963, 1963, 1963, 47505, - -1000, -1000, -1000, -1000, -1000, -1000, -447, 80, 434, -1000, - -1000, -1000, 4736, 46165, 1632, -1000, 278, -1000, 1615, -1000, - 46165, -1000, 1630, 1890, 1261, 1261, -1000, -1000, -1000, 46165, - 1781, -1000, -1000, -1000, -1000, 559, 2202, 304, -1000, -1000, - -203, -1000, -1000, 277, 278, 46835, 1261, 748, -1000, -1000, - -1000, -1000, -1000, -436, 1628, 534, 284, 353, 47505, 47505, - 47505, 47505, 47505, 615, -1000, -1000, 75, -1000, -1000, -1000, - -1000, 259, -1000, -1000, -1000, -1000, -1000, -1000, 259, -1000, - -1000, -1000, -1000, -1000, 259, -1000, 1510, -1000, -1000, -1000, - -1000, 259, -1000, -1000, -1000, 65, -1000, -1000, -1000, -1000, - 259, -1000, -1000, -1000, -1000, -1000, -1000, 259, -1000, -1000, - -1000, -1000, 336, 504, -1000, 47505, 47505, 689, -1000, -1000, - -1000, -1000, -1000, -1000, 957, -1000, -1000, 957, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 2179, 47505, 19, -402, -1000, -399, 18693, -1000, -1000, -1000, - -1000, 1770, 549, 2180, 19363, 19363, 19363, -1000, -1000, -1000, - 1062, 1062, 27405, -1000, 18693, 18023, -1000, -1000, 18693, 18693, - 815, -1000, 18693, 1111, -1000, 18693, -1000, -1000, -1000, 1395, - 1504, 1504, 1504, 1504, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 1715, 18693, 18693, 18693, 1392, 364, - -1000, -1000, -1000, -1000, -1000, 2455, -1000, 18693, -1000, 27405, - 18693, 18693, 18693, -1000, -1000, -1000, 18693, 18693, -1000, -1000, - 18693, 18693, -1000, 18693, 18693, 18693, -1000, 18693, 18693, 18693, - 18693, -1000, -1000, -1000, -1000, 18693, 18693, 18693, 18693, 18693, - 18693, 18693, 18693, 18693, 18693, -1000, -1000, 32765, 100, -176, - 1198, 100, 1198, -1000, 18023, 12644, -1000, -1000, -1000, -1000, - -1000, 18693, 18693, 18693, 18693, 18693, 18693, -1000, -1000, -1000, - 18693, 18693, -1000, 18693, -1000, 18693, -1000, -1000, -1000, -1000, - -1000, 690, -1000, 638, 638, 638, 46165, -1000, -1000, -1000, - -1000, 1775, -1000, 2309, -1000, 2085, 2074, 2454, 2394, -1000, - 24055, 2856, -1000, -1000, 46165, -293, -1000, 2118, 2210, 727, - 727, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 10616, 2362, - 18693, 1993, 46835, 160, -1000, 23385, 46165, 46835, 24055, 24055, - 24055, 24055, 24055, -1000, 2019, 2013, -1000, 2067, 2030, 2093, - 47505, -1000, 1474, 1614, -1000, 18693, 26065, 1712, 24055, -1000, - -1000, 24055, 47505, 9940, -1000, -1000, 17, 35, -1000, -1000, - -1000, -1000, 1530, -1000, -1000, 502, 2252, 2126, -1000, -1000, - -1000, -1000, -1000, 1603, -1000, 1587, 1767, 1584, 1561, 228, - -1000, 1934, 2171, 810, 810, -1000, 1135, -1000, 1261, 1506, - 1501, -1000, -1000, -1000, 528, -1000, 2220, 47505, 1992, 1990, - 1988, -1000, -455, 1103, 1889, 1765, 18693, 1886, 2421, 1754, - 46165, -1000, -1000, 46835, -1000, 176, -1000, 324, 46165, -1000, - -1000, -1000, 393, 47505, -1000, 7029, -1000, -1000, -1000, 278, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 47505, 295, -1000, - 1884, 1230, -1000, -1000, 1952, -1000, -1000, -1000, -1000, 269, - 376, 1495, 263, 1483, 263, 263, 1471, 263, 1469, 263, - 263, -1000, 47505, 674, 1989, 47505, -1000, -1000, -1000, 962, - 962, -1000, -1000, 2169, -1000, 1261, 1504, 19363, 19363, -1000, - 749, 325, -151, 1876, 1876, -1000, 1876, 1879, -1000, 1876, - 198, 1876, 194, 1876, -1000, -1000, 1392, 1392, 1395, -1000, - 2246, 1370, -1000, 1270, 18693, 2387, -1000, -1000, -1000, -1000, - -1000, -49, 2296, 2286, 1504, -1000, 1870, 1869, 18693, 1504, - 1392, 2218, 1504, 1504, 1504, 1504, -1000, 1270, 1395, 1996, - 1395, 1504, 1504, 1970, 337, 1504, 1549, 1549, 1549, 1549, - 1549, 1395, 1395, 1395, 1395, 46165, -1000, -176, -1000, -1000, - -213, -214, -1000, 1392, -176, 1761, 1392, -1000, 2160, 2123, - 1772, 2052, 1504, 1725, 1504, 1504, 1504, 2028, -1000, 2287, - 2287, 2287, 1524, 1208, 47505, -1000, -1000, -1000, -1000, 2394, - 2442, 1760, -1000, -1000, 135, 484, -1000, 2100, 2210, -1000, - 2416, 2104, 2409, -1000, -1000, -1000, -1000, -1000, 1270, -1000, - 2206, 1745, -1000, 820, 1738, -1000, -1000, 17353, 1544, 2066, - 623, 1524, 1766, 2463, 1959, 1986, 2783, -1000, -1000, -1000, - -1000, 2012, -1000, 2006, -1000, -1000, 1820, -1000, 1696, 403, - 24055, 1598, 1598, -1000, 619, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 1008, 5418, 2472, -1000, 1449, -1000, 1250, 211, - 1101, -1000, -1000, 810, 810, -1000, 905, 896, -1000, 47505, - 1868, -1000, 409, 1447, 409, 1097, -1000, -1000, 1092, -1000, - -1000, -1000, -1000, 1969, 2049, -1000, -1000, -1000, -1000, 47505, - -1000, -1000, 47505, 47505, 47505, 1867, 2402, -1000, 18693, 1830, - 812, 2382, 46165, 46165, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 512, 810, -417, 359, 350, - 810, 810, 810, -457, -1000, -1000, 1519, 1491, -1000, -141, - -1000, 18693, -1000, -1000, -1000, 1144, 1144, 1439, 1423, 1420, - -1000, 1820, -1000, -1000, -1000, 1600, -1000, -1000, -120, 46165, - 46165, 46165, 46165, -1000, -1000, 1075, -1000, -1000, -1000, 1412, + 2382, 1541, 1541, 1541, 1541, 1541, 18791, 1763, -1000, -1000, + -1000, 1222, 2999, 1750, 2990, 1541, 1541, -1000, 1541, 2986, + 2978, 1270, 1689, 1270, 1767, -1000, 2968, 1541, 2958, 2953, + 2942, 2308, 2923, 2916, 2903, 1541, 1541, 1541, 2289, 2890, + 2880, 2867, 2847, 2838, 2808, 2764, 2733, 2621, 1541, -178, + 1541, 1270, -1000, -1000, -1000, -1000, -1000, 2533, 2265, 1270, + 1766, 1810, 632, -1000, -1000, 1590, 1270, 1270, 1590, 1590, + 2521, 2506, 2463, 2457, 2438, 2429, 1541, 1541, -1000, 1541, + 2401, 2394, 2253, 2249, 1270, -1000, 1296, 47689, -1000, -325, + -1000, 20, 706, 1810, -1000, 31561, 1270, -1000, -1000, 3657, + -1000, 990, -1000, -1000, -1000, 28873, 1659, 3011, -1000, -1000, + 1810, 1579, -1000, -1000, 432, 106, 28201, 691, 691, 141, + 1323, 1323, 18791, -1000, -1000, -1000, -1000, -1000, -1000, 630, + 2397, 382, 1810, -1000, 1770, 2809, -1000, -1000, -1000, 2291, + 22152, -1000, -1000, 1810, 1810, 47689, 1623, 1612, -1000, 629, + -1000, 1168, 1762, 52, 35, -1000, -1000, -1000, -1000, 1323, + -1000, 1178, 407, 711, -1000, 488, -1000, -1000, -1000, -1000, + 2194, 119, -1000, -1000, -1000, 331, 432, -1000, -1000, -1000, + -1000, -1000, -1000, 1434, 1434, -1000, -1000, -1000, -1000, -1000, + 1068, -1000, -1000, -1000, -1000, 1061, -1000, -1000, 1049, -1000, + -1000, 2321, 2044, 647, -1000, -1000, 752, 1432, -1000, -1000, + 2196, 752, 752, 46345, -1000, -1000, 1650, 2257, 277, 47689, + 815, 2009, -1000, 1979, 1979, 1979, 47689, -1000, -1000, -1000, + -1000, -1000, -1000, -450, 72, 406, -1000, -1000, -1000, 4103, + 46345, 1576, -1000, 253, -1000, 1637, -1000, 46345, -1000, 1526, + 1920, 1106, 1106, -1000, -1000, -1000, 46345, 1810, -1000, -1000, + -1000, -1000, 550, 2209, 298, -1000, -1000, -198, -1000, -1000, + 261, 253, 47017, 1106, 701, -1000, -1000, -1000, -1000, -1000, + -451, 1517, 565, 266, 342, 47689, 47689, 47689, 47689, 47689, + 607, -1000, -1000, 56, -1000, -1000, -1000, -1000, 233, -1000, + -1000, -1000, -1000, -1000, -1000, 233, -1000, -1000, -1000, -1000, + -1000, 233, -1000, 1429, -1000, -1000, -1000, -1000, 233, -1000, + -1000, -1000, 53, -1000, -1000, -1000, -1000, 233, -1000, -1000, + -1000, -1000, -1000, -1000, 233, -1000, -1000, -1000, -1000, 330, + 525, -1000, 47689, 47689, 658, -1000, -1000, -1000, -1000, -1000, + -1000, 885, -1000, -1000, 885, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2224, 47689, 28, + -406, -1000, -401, 18791, -1000, -1000, -1000, -1000, 1647, 547, + 1854, 19463, 19463, 19463, -1000, -1000, -1000, 1050, 1050, 27529, + -1000, 18791, 18119, -1000, -1000, 18791, 18791, 795, -1000, 18791, + 1108, -1000, 18791, -1000, -1000, -1000, 1296, 1541, 1541, 1541, + 1541, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 1756, 18791, 18791, 18791, 1270, 350, -1000, -1000, -1000, + -1000, -1000, 2473, -1000, 18791, -1000, 27529, 18791, 18791, 18791, + -1000, -1000, -1000, 18791, 18791, -1000, -1000, 18791, 18791, -1000, + 18791, 18791, 18791, -1000, 18791, 18791, 18791, 18791, -1000, -1000, + -1000, -1000, 18791, 18791, 18791, 18791, 18791, 18791, 18791, 18791, + 18791, 18791, -1000, -1000, 32905, 94, -178, 1291, 94, 1291, + -1000, 18119, 12724, -1000, -1000, -1000, -1000, -1000, 18791, 18791, + 18791, 18791, 18791, 18791, -1000, -1000, -1000, 18791, 18791, -1000, + 18791, -1000, 18791, -1000, -1000, -1000, -1000, -1000, 706, -1000, + 682, 682, 682, 46345, -1000, -1000, -1000, -1000, 1757, -1000, + 2324, -1000, 2112, 2110, 2470, 2397, -1000, 24169, 3011, -1000, + -1000, 46345, -299, -1000, 2173, 2207, 691, 691, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 10690, 2334, 18791, 2008, 47017, + 144, -1000, 23497, 46345, 47017, 24169, 24169, 24169, 24169, 24169, + -1000, 2077, 2065, -1000, 2084, 2075, 2093, 47689, -1000, 1406, + 1506, -1000, 18791, 26185, 1643, 24169, -1000, -1000, 24169, 47689, + 10012, -1000, -1000, 22, 2, -1000, -1000, -1000, -1000, 4256, + -1000, -1000, 3936, 2287, 2192, -1000, -1000, -1000, -1000, -1000, + 1502, -1000, 1496, 1746, 1492, 1489, 220, -1000, 1876, 2211, + 752, 752, -1000, 1047, -1000, 1106, 1413, 1411, -1000, -1000, + -1000, 549, -1000, 2271, 47689, 2006, 1999, 1998, -1000, -459, + 1046, 1905, 1787, 18791, 1898, 2439, 1709, 46345, -1000, -1000, + 47017, -1000, 336, -1000, 647, 46345, -1000, -1000, -1000, 370, + 47689, -1000, 8044, -1000, -1000, -1000, 253, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 47689, 272, -1000, 1896, 1045, -1000, + -1000, 1967, -1000, -1000, -1000, -1000, 232, 332, 1407, 226, + 1382, 226, 226, 1348, 226, 1345, 226, 226, -1000, 47689, + 634, 2044, 47689, -1000, -1000, -1000, 903, 903, -1000, -1000, + 2208, -1000, 1106, 1541, 19463, 19463, -1000, 702, 1317, -154, + 1891, 1891, -1000, 1891, 1892, -1000, 1891, 190, 1891, 187, + 1891, -1000, -1000, 1270, 1270, 1296, -1000, 2219, 1588, -1000, + 1323, 18791, 2389, -1000, -1000, -1000, -1000, -1000, -49, 2367, + 2360, 1541, -1000, 1883, 1878, 18791, 1541, 1270, 2162, 1541, + 1541, 1541, 1541, -1000, 1323, 1296, 2331, 1296, 1541, 1541, + 2312, 345, 1541, 1463, 1463, 1463, 1463, 1463, 1296, 1296, + 1296, 1296, 46345, -1000, -178, -1000, -1000, -221, -222, -1000, + 1270, -178, 1738, 1270, -1000, 2155, 2126, 2243, 2091, 1541, + 1977, 1541, 1541, 1541, 2083, -1000, 2292, 2292, 2292, 1448, + 990, 47689, -1000, -1000, -1000, -1000, 2397, 2459, 1717, -1000, + -1000, 106, 463, -1000, 2161, 2207, -1000, 2437, 2166, 2432, + -1000, -1000, -1000, -1000, -1000, 1323, -1000, 2244, 1674, -1000, + 770, 1692, -1000, -1000, 17447, 1455, 2103, 626, 1448, 1712, + 2809, 1978, 1997, 2790, -1000, -1000, -1000, -1000, 2055, -1000, + 2039, -1000, -1000, 1814, -1000, 1768, 394, 24169, 1691, 1691, + -1000, 625, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 945, + 7874, 2501, -1000, 1343, -1000, 1167, 203, 1039, -1000, -1000, + 752, 752, -1000, 860, 852, -1000, 47689, 1877, -1000, 432, + 1338, 432, 1038, -1000, -1000, 1029, -1000, -1000, -1000, -1000, + 1793, 2056, -1000, -1000, -1000, -1000, 47689, -1000, -1000, 47689, + 47689, 47689, 1874, 2426, -1000, 18791, 1870, 753, 2270, 46345, + 46345, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 481, 752, -429, 335, 301, 752, 752, 752, + -467, -1000, -1000, 1419, 1405, -1000, -139, -1000, 18791, -1000, + -1000, -1000, 1110, 1110, 1336, 1334, 1332, -1000, 1814, -1000, + -1000, -1000, 1621, -1000, -1000, -120, 46345, 46345, 46345, 46345, + -1000, -1000, 989, -1000, -1000, -1000, 1313, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 749, 1392, 355, -126, 1392, -1000, - -1000, 409, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 18693, -1000, 18693, -1000, 1270, 18693, 2362, 1404, - 18693, 18693, -1000, 1090, 1088, 1504, -1000, -1000, -1000, 18693, - -1000, -1000, -1000, -1000, -1000, 18693, -1000, -1000, -1000, 18693, - 280, 1062, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 1392, 399, -1000, -1000, -1000, -1000, 2433, -1000, - 1392, 18693, -1000, -1000, 18693, -1000, 18693, 18693, -1000, 18693, - -1000, 18693, -1000, -1000, -1000, -1000, 18693, 1781, 2201, 1781, - 1781, 26065, -1000, -1000, 2442, 2401, 2398, 2071, 2091, 2091, - 2100, -1000, 2393, 2392, -1000, 1400, 2385, 1389, 893, -1000, - 46835, 18693, 160, -1000, 394, 46165, 160, 46165, -1000, 2383, - -1000, -1000, 18693, 1829, -1000, 18693, -1000, -1000, -1000, -1000, - 6011, 2394, 1598, -1000, -1000, 776, -1000, 18693, -1000, -1000, - -1000, 3900, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 1373, 1354, -1000, -1000, 1822, 18693, -1000, -1000, -1000, 1479, - 1475, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1820, - -1000, -1000, -1000, -1000, 393, -449, 2265, 46165, 1080, -1000, - 1489, 1754, 385, 160, 1328, 810, 810, 810, 1065, 1061, - 31425, 1482, -1000, 46165, 451, -1000, 393, -1000, -146, -147, - 1504, -1000, -1000, 2251, -1000, -1000, 12644, -1000, -1000, 1814, - 1956, -1000, -1000, -1000, -1000, -1000, 2003, -108, -131, -1000, - -1000, 1504, 1504, 1121, 1392, -1000, 1504, 1504, 1456, 1446, - -1000, 1504, 1395, 2016, -1000, 280, 1392, 1973, -1000, -1000, - 6011, -1000, -1000, 2383, 2377, 100, -1000, -1000, 276, 100, - 1270, 2010, 1504, 1871, 1764, 1504, 1504, 26735, -1000, 2372, - 2313, 32095, 32095, 690, 2401, -185, 18693, 18693, 2063, 1076, - -1000, -1000, -1000, -1000, 1317, 1313, -1000, 1306, -1000, 2470, - -1000, 1270, -1000, 160, -1000, 594, 1738, -1000, 2362, 1270, - 46165, 1270, 137, 2383, -1000, 1504, -1000, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, - 1781, 1781, 1781, 1781, 1781, 1781, 1781, -1000, -1000, 46165, - 2034, -1000, -1000, 2245, 1478, 78, -1000, 1396, 1754, -1000, - -1000, 161, -1000, 18693, -1000, 31425, 1304, 1301, -1000, -1000, - -1000, -1000, -457, -1000, -1000, -1000, -1000, -1000, -1000, 398, - 1753, -1000, 809, 46165, 47505, -1000, 1904, -1000, -1000, -1000, - 18693, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 18693, - -1000, 1392, 1972, -1000, -281, -1000, -426, 18693, -176, -1000, - -1000, -176, -1000, 18693, -1000, -1000, 18693, -1000, 18693, -1000, - -1000, 1455, -1000, -1000, -1000, -1000, -1000, 1455, 1455, -1000, - -185, -1000, 1743, -1000, 46165, 1270, 1716, -1000, 1063, -1000, - -1000, -1000, -1000, -1000, 46835, 1738, 46165, -1000, 1453, 1392, - 1781, 2362, -1000, 1445, -1000, 398, -1000, 1813, 1765, -1000, - -1000, -1000, 16683, -1000, -1000, -1000, -1000, -1000, 201, -119, - 12644, 9264, 1427, -1000, -116, 1504, 1395, -1000, -387, -1000, - -1000, -1000, -1000, 218, -1000, -1000, 1716, -1000, -1000, 1673, - 1644, 1599, 30755, -1000, -1000, -1000, -1000, -185, -1000, -1000, - 2237, -1000, -1000, 1299, -1000, -1000, 26065, 45495, -1000, -103, - 381, -119, 18693, 1808, 1392, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 32, -1000, -1000, -1000, -1000, -1000, 1952, - -128, -1000, -1000, -1000, 247, -407, -216, -220, -1000, -1000, - 19363, -1000, 18693, -1000, 18693, -1000, 18693, -1000, -1000, -1000, - 46165, 1781, -1000, 1383, -1000, 4244, -231, 1971, -1000, -42, - -1000, -1000, -1000, 998, 1298, -1000, -1000, -1000, -1000, -1000, - -1000, 1880, 46165, -1000, 467, -1000, -1000, -120, -132, 864, - -1000, -1000, -1000, -1000, -1000, 1278, 1160, 1504, -1000, 46165, - -1000, 45495, -225, 748, 6011, -1000, 1967, 1881, 2451, -1000, - -1000, -1000, -1000, -1000, -1000, -459, 1297, 303, -1000, -1000, - 247, -1000, 18693, -1000, 18693, -1000, 1392, -1000, -1000, 2217, - 137, -1000, 2469, -1000, 2464, 650, 650, -1000, 1043, -459, - -1000, -1000, 1504, 1504, -1000, -234, -1000, -1000, -1000, -1000, - -1000, 463, 1124, -1000, -1000, -1000, -1000, -1000, 6011, -1000, - -1000, -1000, 273, 273, -1000, -1000, + -1000, 702, 1270, 351, -124, 1270, -1000, -1000, 432, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 18791, + -1000, 18791, -1000, 1323, 18791, 2334, 1308, 18791, 18791, -1000, + 1028, 1018, 1541, -1000, -1000, -1000, 18791, -1000, -1000, -1000, + -1000, -1000, 18791, -1000, -1000, -1000, 18791, 250, 1050, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1270, + 371, -1000, -1000, -1000, -1000, 2466, -1000, 1270, 18791, -1000, + -1000, 18791, -1000, 18791, 18791, -1000, 18791, -1000, 18791, -1000, + -1000, -1000, -1000, 18791, 1810, 2114, 1810, 1810, 26185, -1000, + -1000, 2459, 2350, 2416, 2122, 2157, 2157, 2161, -1000, 2415, + 2414, -1000, 1304, 2409, 1284, 835, -1000, 47017, 18791, 144, + -1000, 402, 46345, 144, 46345, -1000, 2425, -1000, -1000, 18791, + 1869, -1000, 18791, -1000, -1000, -1000, -1000, 8265, 2397, 1691, + -1000, -1000, 715, -1000, 18791, -1000, -1000, -1000, 6767, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1272, 1260, -1000, + -1000, 1868, 18791, -1000, -1000, -1000, 1604, 1595, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 1814, -1000, -1000, -1000, + -1000, 370, -455, 2137, 46345, 1017, -1000, 1403, 1709, 363, + 144, 1250, 752, 752, 752, 993, 976, 31561, 1387, -1000, + 46345, 471, -1000, 370, -1000, -150, -151, 1541, -1000, -1000, + 2284, -1000, -1000, 12724, -1000, -1000, 1813, 1975, -1000, -1000, + -1000, -1000, -1000, 2087, -115, -130, -1000, -1000, 1541, 1541, + 1553, 1270, -1000, 1541, 1541, 1582, 1372, -1000, 1541, 1296, + 2004, -1000, 250, 1270, 1996, -1000, -1000, 8265, -1000, -1000, + 2425, 2405, 94, -1000, -1000, 246, 94, 1323, 1871, 1541, + 1682, 1665, 1541, 1541, 26857, -1000, 2398, 2328, 32233, 32233, + 706, 2350, -185, 18791, 18791, 2119, 958, -1000, -1000, -1000, + -1000, 1248, 1246, -1000, 1243, -1000, 2499, -1000, 1323, -1000, + 144, -1000, 622, 1692, -1000, 2334, 1323, 46345, 1323, 86, + 2425, -1000, 1541, -1000, 1810, 1810, 1810, 1810, 1810, 1810, + 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, + 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, + 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, + 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, + 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, + 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, + 1810, 1810, 1810, 1810, -1000, -1000, 46345, 1970, -1000, -1000, + 2283, 1378, 71, -1000, 1331, 1709, -1000, -1000, 154, -1000, + 18791, -1000, 31561, 1238, 1226, -1000, -1000, -1000, -1000, -467, + -1000, -1000, -1000, -1000, -1000, -1000, 398, 1697, -1000, 750, + 46345, 47689, -1000, 2085, -1000, -1000, -1000, 18791, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 18791, -1000, 1270, 1987, + -1000, -288, -1000, -434, 18791, -178, -1000, -1000, -178, -1000, + 18791, -1000, -1000, 18791, -1000, 18791, -1000, -1000, 1371, -1000, + -1000, -1000, -1000, -1000, 1371, 1371, -1000, -185, -1000, 1693, + -1000, 46345, 1323, 1689, -1000, 952, -1000, -1000, -1000, -1000, + -1000, 47017, 1692, 46345, -1000, 1364, 1270, 1810, 2334, -1000, + 1330, -1000, 398, -1000, 1812, 1787, -1000, -1000, -1000, 16775, + -1000, -1000, -1000, -1000, -1000, 213, -117, 12724, 9334, 1303, + -1000, -114, 1541, 1296, -1000, -389, -1000, -1000, -1000, -1000, + 172, -1000, -1000, 1689, -1000, -1000, 1653, 1649, 1498, 30889, + -1000, -1000, -1000, -1000, -185, -1000, -1000, 2280, -1000, -1000, + 1681, -1000, -1000, 26185, 45673, -1000, -106, 769, -117, 18791, + 1811, 1270, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -8, -1000, -1000, -1000, -1000, -1000, 1967, -126, -1000, -1000, + -1000, 142, -420, -223, -239, -1000, -1000, 19463, -1000, 18791, + -1000, 18791, -1000, 18791, -1000, -1000, -1000, 46345, 1810, -1000, + 1269, -1000, 7199, -246, 1986, -1000, -50, -1000, -1000, -1000, + 914, 1181, -1000, -1000, -1000, -1000, -1000, -1000, 1740, 46345, + -1000, 491, -1000, -1000, -120, -131, 831, -1000, -1000, -1000, + -1000, -1000, 1494, 1417, 1541, -1000, 46345, -1000, 45673, -235, + 701, 8265, -1000, 1984, 1971, 2478, -1000, -1000, -1000, -1000, + -1000, -1000, -469, 1208, 280, -1000, -1000, 142, -1000, 18791, + -1000, 18791, -1000, 1270, -1000, -1000, 2263, 86, -1000, 2498, + -1000, 2464, 830, 830, -1000, 972, -469, -1000, -1000, 1541, + 1541, -1000, -249, -1000, -1000, -1000, -1000, -1000, 477, 1041, + -1000, -1000, -1000, -1000, -1000, 8265, -1000, -1000, -1000, 215, + 215, -1000, -1000, } var yyPgo = [...]int{ - 0, 3117, 3116, 25, 1, 34, 33, 3115, 52, 110, - 213, 60, 214, 109, 3114, 186, 3112, 3110, 3109, 3108, - 3107, 3106, 2509, 2499, 2492, 3099, 3097, 3095, 3094, 3089, - 3088, 3084, 3082, 3079, 3078, 187, 183, 209, 3075, 3072, - 3071, 136, 196, 96, 99, 206, 3070, 3067, 87, 3060, - 3059, 3057, 204, 203, 202, 820, 3056, 201, 114, 53, - 3054, 3053, 3052, 3045, 3044, 3043, 3042, 3035, 3033, 3031, - 3022, 3020, 3018, 3008, 3004, 2990, 2988, 2986, 2982, 307, - 2979, 2978, 16, 2977, 94, 2969, 2963, 2962, 2961, 2958, - 7, 2957, 2953, 20, 43, 2952, 2943, 48, 2941, 2940, - 2938, 2930, 2929, 14, 2928, 22, 2926, 37, 2925, 2923, - 137, 2917, 2916, 2915, 39, 2908, 2907, 2904, 2902, 2893, - 2892, 2891, 158, 2890, 2889, 2886, 192, 216, 2884, 2882, - 182, 121, 119, 2879, 2871, 115, 207, 2870, 133, 2869, - 2866, 2864, 169, 2855, 2217, 2849, 2846, 73, 108, 2845, - 50, 2844, 2842, 9, 100, 70, 4, 81, 83, 2840, - 2837, 72, 92, 2830, 135, 2821, 2819, 113, 78, 2811, - 116, 111, 2799, 2797, 17, 21, 2796, 35, 29, 36, - 77, 2780, 2777, 122, 2769, 2768, 2767, 103, 2764, 2762, - 663, 2760, 104, 149, 117, 89, 2757, 47, 88, 2754, - 2745, 2744, 2743, 2742, 56, 2741, 2739, 2738, 154, 151, - 188, 2737, 44, 86, 57, 146, 2734, 42, 98, 210, - 184, 2733, 2728, 150, 147, 2726, 2725, 69, 45, 51, - 2724, 128, 143, 132, 26, 123, 157, 2723, 2719, 68, - 79, 2717, 2714, 2709, 2708, 185, 2705, 2704, 80, 2703, - 59, 2700, 199, 2699, 6, 65, 2697, 46, 180, 2696, - 85, 2689, 2688, 74, 145, 75, 38, 2687, 175, 178, - 141, 179, 2679, 2678, 62, 2674, 2670, 2669, 208, 334, - 2668, 2665, 153, 189, 155, 167, 102, 2664, 346, 2662, - 2653, 106, 2, 5226, 2652, 41, 181, 2648, 2647, 5956, - 152, 40, 24, 2642, 129, 2641, 2640, 2639, 2624, 224, - 195, 142, 176, 67, 2623, 2622, 2619, 13, 2617, 2614, - 2613, 2612, 2608, 2607, 91, 32, 31, 30, 211, 76, - 11, 112, 191, 173, 84, 2600, 2592, 2591, 134, 105, - 2590, 174, 172, 139, 177, 2588, 193, 163, 120, 2587, - 101, 28, 2586, 2577, 2574, 2573, 107, 2572, 2570, 2569, - 2568, 170, 160, 131, 90, 2567, 93, 130, 165, 161, - 64, 2565, 49, 2562, 2560, 27, 205, 23, 2559, 12, - 118, 168, 2558, 4147, 194, 2556, 15, 338, 164, 2554, - 2552, 5, 8, 10, 2551, 2549, 2544, 2542, 144, 2527, - 2525, 2522, 2516, 19, 54, 18, 3, 126, 95, 2515, - 2514, 156, 162, 2513, 2505, 2503, 2498, 3169, 0, 148, - 2494, 212, + 0, 3143, 3139, 27, 5, 34, 33, 3136, 312, 128, + 213, 50, 204, 109, 3126, 182, 3124, 3123, 3122, 3121, + 3118, 3116, 2552, 2544, 2529, 3115, 3114, 3113, 3112, 3108, + 3106, 3104, 3103, 3102, 3101, 186, 176, 200, 3093, 3090, + 3089, 133, 193, 93, 96, 197, 3086, 3085, 88, 3082, + 3070, 3069, 196, 195, 191, 886, 3063, 190, 120, 55, + 3061, 3060, 3059, 3054, 3052, 3051, 3049, 3048, 3047, 3043, + 3040, 3039, 3037, 3034, 3033, 3028, 3027, 3025, 3024, 3020, + 300, 3018, 3017, 17, 3016, 86, 3013, 3010, 3005, 2997, + 2995, 7, 2993, 2992, 12, 42, 2987, 2983, 48, 2981, + 2974, 2969, 2964, 2963, 15, 2959, 22, 2958, 37, 2954, + 2951, 137, 2945, 2938, 2937, 38, 2936, 2934, 2932, 2931, + 2930, 2928, 2924, 157, 2923, 2917, 2916, 180, 219, 2915, + 2910, 206, 121, 118, 2909, 2904, 110, 198, 2897, 134, + 2893, 2892, 2891, 165, 2889, 2218, 2888, 2887, 75, 64, + 2886, 54, 2885, 2881, 3, 90, 66, 1, 98, 107, + 2873, 2862, 72, 83, 2850, 116, 2849, 2848, 111, 78, + 2846, 100, 112, 2844, 2840, 18, 11, 2839, 36, 26, + 23, 74, 2837, 2833, 124, 2829, 2828, 2815, 106, 2813, + 2792, 4975, 2791, 97, 142, 115, 85, 2787, 46, 71, + 2785, 2775, 2773, 2771, 2770, 57, 2769, 2766, 2765, 153, + 151, 177, 2761, 43, 77, 56, 146, 2757, 113, 87, + 205, 178, 2753, 2752, 150, 145, 2751, 2750, 67, 44, + 41, 2748, 123, 139, 119, 52, 105, 144, 2746, 2743, + 63, 80, 2742, 2741, 2739, 2738, 179, 2736, 2730, 79, + 2729, 58, 2728, 202, 2727, 20, 49, 2726, 45, 183, + 2724, 81, 2720, 2719, 69, 147, 70, 35, 2714, 170, + 175, 140, 185, 2712, 2710, 61, 2708, 2706, 2704, 203, + 318, 2701, 2695, 104, 184, 156, 163, 95, 2694, 343, + 2690, 2688, 102, 2, 4506, 2685, 40, 172, 2680, 2679, + 6019, 152, 39, 24, 2677, 131, 2676, 2671, 2668, 2667, + 234, 181, 130, 173, 65, 2665, 2664, 2661, 9, 2659, + 2656, 2655, 2649, 2646, 2644, 94, 32, 31, 30, 201, + 76, 6, 114, 171, 166, 82, 2643, 2642, 2635, 135, + 108, 2631, 169, 168, 138, 174, 2630, 187, 159, 141, + 2623, 103, 29, 2622, 2619, 2618, 2617, 101, 2615, 2614, + 2610, 2607, 164, 160, 132, 89, 2603, 92, 125, 158, + 155, 60, 2593, 47, 2584, 2581, 28, 194, 25, 2576, + 13, 117, 143, 2575, 3438, 192, 2569, 14, 336, 161, + 2567, 2566, 16, 8, 10, 2565, 2563, 2562, 2561, 148, + 2559, 2558, 2556, 2554, 21, 51, 19, 4, 122, 91, + 2548, 2539, 154, 162, 2538, 2534, 2527, 2522, 3170, 0, + 136, 2520, 207, } -//line sql.y:8400 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:8419 type yySymType struct { union any empty struct{} @@ -12876,64 +7583,63 @@ var yyR1 = [...]int{ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 111, 111, - 112, 112, 112, 112, 114, 114, 114, 372, 372, 59, - 59, 3, 3, 174, 176, 177, 177, 175, 175, 175, - 175, 175, 175, 61, 61, 60, 60, 179, 178, 180, - 180, 180, 1, 1, 2, 2, 4, 4, 377, 377, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 111, + 111, 112, 112, 112, 112, 114, 114, 114, 372, 372, + 59, 59, 3, 3, 174, 176, 177, 177, 175, 175, + 175, 175, 175, 175, 61, 61, 60, 60, 179, 178, + 180, 180, 180, 1, 1, 2, 2, 4, 4, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, - 338, 338, 338, 371, 371, 373, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 117, 116, 116, 115, - 118, 118, 118, 118, 118, 118, 118, 118, 375, 375, - 375, 62, 62, 376, 326, 327, 328, 5, 6, 352, - 374, 125, 125, 29, 38, 38, 30, 30, 30, 30, - 31, 31, 63, 64, 415, 415, 68, 68, 68, 69, - 69, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 377, 338, 338, 338, 371, 371, 373, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 117, 116, 116, + 115, 118, 118, 118, 118, 118, 118, 118, 118, 375, + 375, 375, 62, 62, 376, 326, 327, 328, 5, 6, + 352, 374, 125, 125, 29, 38, 38, 30, 30, 30, + 30, 31, 31, 63, 64, 415, 415, 68, 68, 68, + 69, 69, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 281, 281, 290, 290, 280, 280, 305, 305, 305, - 283, 283, 283, 284, 284, 401, 401, 401, 277, 277, - 66, 66, 66, 306, 306, 306, 306, 70, 70, 410, - 410, 411, 411, 412, 412, 412, 71, 72, 72, 308, - 308, 309, 309, 73, 74, 86, 86, 86, 86, 86, - 86, 86, 87, 87, 87, 87, 110, 110, 110, 15, - 15, 15, 15, 82, 82, 82, 14, 14, 17, 67, - 67, 76, 398, 398, 399, 400, 400, 400, 400, 77, - 79, 79, 32, 32, 32, 32, 32, 32, 135, 135, - 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 130, 130, 130, 124, 124, 421, 80, - 81, 81, 128, 128, 128, 121, 121, 121, 127, 127, - 127, 16, 16, 18, 263, 263, 19, 19, 132, 132, - 134, 134, 134, 134, 134, 136, 136, 136, 136, 136, - 136, 136, 131, 131, 133, 133, 133, 133, 298, 298, - 298, 297, 297, 168, 168, 170, 169, 169, 171, 171, - 172, 172, 172, 172, 217, 217, 194, 194, 256, 256, - 257, 257, 255, 255, 262, 262, 258, 258, 258, 258, - 265, 265, 173, 173, 173, 173, 181, 181, 182, 182, - 183, 183, 307, 307, 303, 303, 303, 302, 302, 187, - 187, 187, 189, 188, 188, 188, 188, 190, 190, 192, - 192, 191, 191, 193, 198, 198, 197, 197, 195, 195, - 195, 195, 196, 196, 196, 196, 199, 199, 145, 145, - 145, 145, 145, 145, 145, 160, 160, 160, 160, 163, + 65, 65, 281, 281, 290, 290, 280, 280, 305, 305, + 305, 283, 283, 283, 284, 284, 401, 401, 401, 277, + 277, 66, 66, 66, 306, 306, 306, 306, 70, 70, + 410, 410, 411, 411, 412, 412, 412, 71, 72, 72, + 308, 308, 309, 309, 73, 74, 86, 86, 86, 86, + 86, 86, 86, 87, 87, 87, 87, 110, 110, 110, + 15, 15, 15, 15, 82, 82, 82, 14, 14, 17, + 67, 67, 76, 398, 398, 399, 400, 400, 400, 400, + 77, 79, 79, 32, 32, 32, 32, 32, 32, 135, + 135, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 130, 130, 130, 124, 124, 421, + 80, 81, 81, 128, 128, 128, 121, 121, 121, 127, + 127, 127, 16, 16, 18, 263, 263, 19, 19, 132, + 132, 134, 134, 134, 134, 134, 136, 136, 136, 136, + 136, 136, 136, 131, 131, 133, 133, 133, 133, 298, + 298, 298, 297, 297, 168, 168, 170, 169, 169, 171, + 171, 172, 172, 172, 172, 217, 217, 194, 194, 256, + 256, 257, 257, 255, 255, 262, 262, 258, 258, 258, + 258, 265, 265, 173, 173, 173, 173, 181, 181, 182, + 182, 183, 183, 307, 307, 303, 303, 303, 302, 302, + 187, 187, 187, 189, 188, 188, 188, 188, 190, 190, + 192, 192, 191, 191, 193, 198, 198, 197, 197, 195, + 195, 195, 195, 196, 196, 196, 196, 199, 199, 145, + 145, 145, 145, 145, 145, 145, 160, 160, 160, 160, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 246, 246, 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 155, 155, 155, 155, 155, + 163, 246, 246, 151, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 151, 151, 151, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, -<<<<<<< HEAD 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 154, 222, 222, 221, 221, 88, 88, 88, 89, 89, - 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, - 146, 146, 93, 93, 92, 92, 212, 212, 295, 295, - 94, 95, 95, 98, 98, 97, 96, 96, 102, 102, - 99, 99, 101, 101, 100, 103, 103, 104, 105, 105, - 278, 278, 200, 200, 208, 208, 208, 208, 201, 201, - 201, 201, 201, 201, 201, 209, 209, 209, 216, 210, - 210, 206, 206, 204, 204, 204, 204, 204, 204, 204, - 204, 204, 204, 205, 205, 205, 205, 205, 205, 205, + 155, 154, 222, 222, 221, 221, 88, 88, 88, 89, + 89, 90, 90, 90, 90, 90, 91, 91, 91, 91, + 91, 146, 146, 93, 93, 92, 92, 212, 212, 295, + 295, 94, 95, 95, 98, 98, 97, 96, 96, 102, + 102, 99, 99, 101, 101, 100, 103, 103, 104, 105, + 105, 278, 278, 200, 200, 208, 208, 208, 208, 201, + 201, 201, 201, 201, 201, 201, 209, 209, 209, 216, + 210, 210, 206, 206, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, @@ -12941,181 +7647,34 @@ var yyR1 = [...]int{ 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 165, - 165, 165, 165, 227, 227, 152, 152, 152, 152, 152, + 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, + 165, 165, 165, 165, 227, 227, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, - 153, 153, 166, 166, 166, 166, 167, 167, 167, 167, - 167, 167, 167, 315, 315, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 119, 119, 119, - 119, 119, 119, 119, 119, 119, 422, 422, 329, 329, - 329, 329, 207, 207, 207, 207, 207, 126, 126, 126, - 126, 126, 312, 312, 312, 316, 316, 316, 314, 314, + 152, 153, 153, 166, 166, 166, 166, 167, 167, 167, + 167, 167, 167, 167, 315, 315, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 422, 422, 329, + 329, 329, 329, 207, 207, 207, 207, 207, 126, 126, + 126, 126, 126, 312, 312, 312, 316, 316, 316, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, - 314, 314, 314, 317, 317, 225, 225, 122, 122, 223, - 223, 224, 226, 226, 218, 218, 218, 218, 220, 220, - 203, 203, 203, 228, 228, 229, 229, 106, 107, 107, - 108, 108, 230, 230, 232, 231, 231, 233, 234, 234, - 234, 235, 235, 236, 236, 236, 48, 48, 48, 48, - 48, 43, 43, 43, 43, 44, 44, 44, 44, 137, - 137, 137, 137, 139, 139, 138, 138, 83, 83, 84, - 84, 84, 414, 414, 414, 413, 413, 413, 413, 413, - 413, 143, 143, 144, 144, 144, 141, 141, 142, 142, - 253, 253, 237, 237, 237, 244, 244, 244, 240, 240, - 242, 242, 242, 243, 243, 243, 241, 250, 250, 252, - 252, 251, 251, 247, 247, 248, 248, 249, 249, 249, - 245, 245, 202, 202, 202, 202, 202, 254, 254, 254, - 254, 266, 266, 213, 213, 215, 215, 214, 214, 164, - 267, 267, 275, 272, 272, 273, 273, 299, 299, 299, - 276, 276, 289, 289, 285, 285, 286, 286, 279, 279, - 291, 291, 291, 78, 211, 211, 368, 368, 365, 294, - 294, 296, 296, 300, 300, 304, 304, 301, 301, 292, -======= - 155, 155, 406, 406, 406, 406, 406, 406, 406, 406, - 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, - 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, - 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, - 406, 406, 406, 406, 160, 160, 156, 156, 156, 157, - 157, 157, 158, 158, 403, 403, 403, 403, 317, 317, - 317, 317, 320, 320, 318, 318, 318, 318, 318, 318, - 318, 318, 318, 319, 319, 319, 319, 319, 319, 319, - 321, 321, 321, 321, 321, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, - 322, 323, 323, 323, 323, 323, 323, 323, 323, 338, - 338, 324, 324, 332, 332, 333, 333, 334, 334, 334, - 335, 335, 335, 336, 336, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 331, 331, 330, 330, 330, 341, - 366, 366, 365, 365, 363, 363, 363, 363, 363, 363, - 363, 363, 350, 350, 360, 360, 360, 360, 360, 349, - 349, 345, 345, 345, 346, 346, 347, 347, 344, 344, - 348, 348, 362, 362, 361, 361, 342, 342, 343, 343, - 368, 404, 404, 404, 404, 404, 405, 405, 369, 394, - 396, 396, 396, 395, 395, 392, 393, 391, 391, 391, - 391, 391, 84, 84, 84, 286, 286, 287, 287, 358, - 358, 357, 357, 357, 359, 359, 356, 356, 356, 356, - 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, - 356, 356, 356, 356, 356, 356, 356, 356, 356, 356, - 356, 356, 356, 356, 356, 356, 356, 281, 281, 281, - 390, 390, 390, 390, 390, 390, 389, 389, 389, 355, - 355, 355, 388, 388, 58, 58, 218, 218, 407, 407, - 408, 408, 408, 46, 46, 46, 46, 46, 46, 45, - 45, 45, 41, 41, 41, 41, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, - 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, - 41, 41, 41, 47, 47, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 110, 110, - 111, 111, 111, 111, 113, 113, 113, 371, 371, 59, - 59, 3, 3, 173, 175, 176, 176, 174, 174, 174, - 174, 174, 174, 61, 61, 60, 60, 178, 177, 179, - 179, 179, 1, 1, 2, 2, 4, 4, 376, 376, - 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, - 376, 376, 376, 376, 376, 376, 376, 376, 376, 376, - 337, 337, 337, 370, 370, 372, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 116, 115, 115, 114, - 117, 117, 117, 117, 117, 117, 117, 117, 374, 374, - 374, 62, 62, 375, 325, 326, 327, 5, 6, 351, - 373, 124, 124, 29, 38, 38, 30, 30, 30, 30, - 31, 31, 63, 64, 414, 414, 68, 68, 68, 65, - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 65, 65, 280, - 280, 289, 289, 279, 279, 304, 304, 304, 282, 282, - 282, 283, 283, 400, 400, 400, 276, 276, 66, 66, - 66, 305, 305, 305, 305, 69, 69, 409, 409, 410, - 410, 411, 411, 411, 70, 71, 71, 307, 307, 308, - 308, 72, 73, 85, 85, 85, 85, 85, 85, 85, - 86, 86, 86, 86, 109, 109, 109, 15, 15, 15, - 15, 81, 81, 81, 14, 14, 17, 67, 67, 75, - 397, 397, 398, 399, 399, 399, 399, 76, 78, 78, - 32, 32, 32, 32, 32, 32, 134, 134, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 129, 129, 129, 123, 123, 420, 79, 80, 80, 127, - 127, 127, 120, 120, 120, 126, 126, 126, 16, 16, - 18, 262, 262, 19, 19, 131, 131, 133, 133, 133, - 133, 133, 135, 135, 135, 135, 135, 135, 135, 130, - 130, 132, 132, 132, 132, 297, 297, 297, 296, 296, - 167, 167, 169, 168, 168, 170, 170, 171, 171, 171, - 171, 216, 216, 193, 193, 255, 255, 256, 256, 254, - 254, 261, 261, 257, 257, 257, 257, 264, 264, 172, - 172, 172, 172, 180, 180, 181, 181, 182, 182, 306, - 306, 302, 302, 302, 301, 301, 186, 186, 186, 188, - 187, 187, 187, 187, 189, 189, 191, 191, 190, 190, - 192, 197, 197, 196, 196, 194, 194, 194, 194, 195, - 195, 195, 195, 198, 198, 144, 144, 144, 144, 144, - 144, 144, 159, 159, 159, 159, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 245, 245, 150, - 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 154, 154, 154, 154, 154, 154, 154, 154, - 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, - 154, 154, 154, 154, 154, 154, 154, 153, 221, 221, - 220, 220, 87, 87, 87, 88, 88, 89, 89, 89, - 89, 89, 90, 90, 90, 90, 90, 145, 145, 92, - 92, 91, 91, 211, 211, 294, 294, 93, 94, 94, - 97, 97, 96, 95, 95, 101, 101, 98, 98, 100, - 100, 99, 102, 102, 103, 104, 104, 277, 277, 199, - 199, 207, 207, 207, 207, 200, 200, 200, 200, 200, - 200, 200, 208, 208, 208, 215, 209, 209, 205, 205, - 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, - 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, - 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, - 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, - 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, - 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, - 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, - 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, - 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, - 204, 204, 204, 204, 204, 204, 164, 164, 164, 164, - 226, 226, 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 152, 152, 165, - 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, - 314, 314, 119, 119, 119, 119, 119, 119, 119, 119, - 119, 119, 119, 119, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 421, 421, 328, 328, 328, 328, 206, - 206, 206, 206, 206, 125, 125, 125, 125, 125, 311, - 311, 311, 315, 315, 315, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, 313, 313, - 316, 316, 224, 224, 121, 121, 222, 222, 223, 225, - 225, 217, 217, 217, 217, 219, 219, 202, 202, 202, - 227, 227, 228, 228, 105, 106, 106, 107, 107, 229, - 229, 231, 230, 230, 232, 233, 233, 233, 234, 234, - 235, 235, 235, 48, 48, 48, 48, 48, 43, 43, - 43, 43, 44, 44, 44, 44, 136, 136, 136, 136, - 138, 138, 137, 137, 82, 82, 83, 83, 83, 413, - 413, 413, 412, 412, 412, 412, 412, 412, 142, 142, - 143, 143, 143, 140, 140, 141, 141, 252, 252, 236, - 236, 236, 243, 243, 243, 239, 239, 241, 241, 241, - 242, 242, 242, 240, 249, 249, 251, 251, 250, 250, - 246, 246, 247, 247, 248, 248, 248, 244, 244, 201, - 201, 201, 201, 201, 253, 253, 253, 253, 265, 265, - 212, 212, 214, 214, 213, 213, 163, 266, 266, 274, - 271, 271, 272, 272, 298, 298, 298, 275, 275, 288, - 288, 284, 284, 285, 285, 278, 278, 290, 290, 290, - 77, 210, 210, 367, 367, 364, 293, 293, 295, 295, - 299, 299, 303, 303, 300, 300, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, ->>>>>>> e439161508 (fix: complete time period feature) + 314, 314, 314, 314, 317, 317, 225, 225, 122, 122, + 223, 223, 224, 226, 226, 218, 218, 218, 218, 220, + 220, 203, 203, 203, 228, 228, 229, 229, 106, 107, + 107, 108, 108, 230, 230, 232, 231, 231, 233, 234, + 234, 234, 235, 235, 236, 236, 236, 48, 48, 48, + 48, 48, 43, 43, 43, 43, 44, 44, 44, 44, + 137, 137, 137, 137, 139, 139, 138, 138, 83, 83, + 84, 84, 84, 414, 414, 414, 413, 413, 413, 413, + 413, 413, 143, 143, 144, 144, 144, 141, 141, 142, + 142, 253, 253, 237, 237, 237, 244, 244, 244, 240, + 240, 242, 242, 242, 243, 243, 243, 241, 250, 250, + 252, 252, 251, 251, 247, 247, 248, 248, 249, 249, + 249, 245, 245, 202, 202, 202, 202, 202, 254, 254, + 254, 254, 266, 266, 213, 213, 215, 215, 214, 214, + 164, 267, 267, 275, 272, 272, 273, 273, 299, 299, + 299, 276, 276, 289, 289, 285, 285, 286, 286, 279, + 279, 291, 291, 291, 78, 211, 211, 368, 368, 365, + 294, 294, 296, 296, 300, 300, 304, 304, 301, 301, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, @@ -13131,8 +7690,7 @@ var yyR1 = [...]int{ 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, -<<<<<<< HEAD - 292, 292, 292, 292, 293, 293, 293, 293, 293, 293, + 292, 292, 292, 292, 292, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, @@ -13173,37 +7731,8 @@ var yyR1 = [...]int{ 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 418, 419, 310, 311, 311, - 311, -======= - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 417, 418, 309, 310, 310, 310, ->>>>>>> e439161508 (fix: complete time period feature) + 293, 293, 293, 293, 293, 293, 418, 419, 310, 311, + 311, 311, } var yyR2 = [...]int{ @@ -13256,7 +7785,6 @@ var yyR2 = [...]int{ 0, 1, 1, 3, 2, 1, 2, 3, 3, 3, 4, 4, 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, -<<<<<<< HEAD 3, 3, 3, 3, 3, 3, 4, 5, 0, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 2, 0, @@ -13270,198 +7798,99 @@ var yyR2 = [...]int{ 10, 5, 5, 5, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 7, 5, 5, - 7, 5, 5, 5, 7, 5, 5, 5, 5, 5, -======= - 3, 3, 3, 3, 3, 4, 5, 0, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 1, 0, 1, 0, 2, 0, 2, - 0, 2, 2, 0, 1, 5, 1, 3, 7, 1, - 3, 3, 1, 2, 2, 2, 5, 5, 5, 6, - 8, 5, 5, 4, 4, 4, 6, 5, 5, 5, - 2, 2, 2, 2, 3, 3, 3, 4, 3, 3, - 1, 3, 5, 1, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 2, 2, 3, 4, 4, 2, 11, - 3, 6, 8, 6, 6, 6, 13, 8, 6, 10, - 5, 5, 5, 7, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 7, 7, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 7, 7, 5, 5, 7, - 8, 5, 5, 5, 7, 5, 5, 5, 5, 5, ->>>>>>> e439161508 (fix: complete time period feature) - 5, 5, 5, 5, 7, 7, 5, 5, 0, 6, - 5, 6, 4, 5, 0, 8, 9, 0, 3, 0, - 1, 0, 3, 8, 4, 1, 3, 3, 6, 7, - 7, 8, 4, 0, 1, 0, 1, 3, 3, 1, - 1, 2, 1, 1, 0, 2, 0, 2, 5, 3, - 7, 4, 4, 4, 4, 3, 3, 3, 7, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, - 0, 2, 2, 1, 3, 2, 0, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 3, 1, 3, 3, - 0, 2, 2, 2, 2, 2, 2, 2, 4, 4, - 3, 0, 1, 4, 3, 4, 4, 3, 3, 3, - 2, 1, 3, 3, 3, 5, 7, 7, 6, 5, -<<<<<<< HEAD - 3, 2, 3, 4, 1, 3, 2, 3, 3, 2, - 2, 3, 2, 2, 3, 7, 3, 3, 3, 3, - 4, 7, 5, 2, 4, 4, 4, 4, 4, 5, - 5, 4, 4, 4, 4, 4, 4, 4, 4, 2, - 2, 4, 4, 4, 4, 4, 4, 3, 4, 4, - 4, 2, 3, 3, 3, 3, 5, 2, 3, 3, - 2, 2, 3, 4, 4, 4, 3, 4, 4, 5, - 3, 0, 1, 0, 1, 1, 1, 0, 2, 2, - 0, 2, 2, 0, 2, 0, 1, 1, 1, 1, - 2, 1, 3, 1, 1, 1, 1, 1, 3, 0, - 1, 1, 3, 3, 2, 2, 1, 1, 5, 0, - 1, 0, 1, 2, 3, 0, 3, 3, 3, 3, - 3, 1, 0, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 1, 1, 4, 4, 4, 2, - 2, 3, 1, 3, 2, 1, 2, 1, 2, 2, - 4, 4, 3, 3, 6, 4, 7, 6, 1, 3, - 2, 2, 2, 2, 1, 1, 1, 1, 3, 2, - 1, 1, 1, 0, 1, 1, 0, 3, 0, 2, - 0, 2, 1, 2, 2, 0, 1, 1, 0, 1, - 1, 5, 5, 4, 0, 2, 4, 4, 0, 1, - 0, 1, 2, 3, 4, 1, 1, 1, 1, 1, - 1, 1, 1, 3, 1, 2, 3, 5, 0, 1, - 2, 1, 1, 0, 1, 2, 1, 3, 1, 1, - 1, 4, 3, 1, 1, 2, 3, 7, 0, 3, - 0, 1, 1, 3, 1, 3, 1, 1, 3, 3, - 1, 3, 4, 4, 4, 3, 2, 4, 0, 1, - 0, 2, 0, 1, 0, 1, 2, 1, 1, 1, - 2, 2, 1, 2, 3, 2, 3, 2, 2, 2, - 1, 1, 3, 3, 0, 1, 1, 2, 6, 5, - 6, 6, 0, 2, 3, 3, 0, 2, 3, 3, - 3, 2, 3, 1, 6, 3, 4, 3, 1, 3, - 4, 5, 6, 3, 4, 5, 6, 3, 4, 1, - 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 1, 1, 1, 1, 1, 3, - 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, - 7, 7, 6, 6, 2, 2, 1, 6, 3, 3, - 3, 1, 3, 1, 3, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, - 1, 1, 0, 1, 2, 5, 0, 3, 0, 1, - 4, 4, 2, 0, 1, 1, 2, 2, 1, 1, - 2, 2, 0, 1, 1, 1, 1, 5, 1, 3, - 0, 3, 1, 1, 1, 2, 1, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 3, 4, 6, 4, 4, 8, 6, 8, 6, 5, - 4, 10, 2, 2, 1, 2, 2, 2, 4, 5, - 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 8, 8, 8, 6, 5, 4, - 4, 4, 4, 4, 7, 4, 4, 6, 6, 6, - 8, 6, 6, 4, 4, 3, 4, 6, 6, 4, - 4, 4, 6, 8, 6, 4, 6, 6, 8, 10, - 7, 8, 8, 9, 4, 4, 4, 4, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 4, 4, - 6, 5, 9, 6, 9, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 2, 6, 8, 10, 12, 14, - 6, 8, 8, 10, 12, 14, 6, 8, 10, 12, - 6, 8, 4, 4, 3, 4, 6, 6, 4, 6, - 4, 6, 8, 0, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 2, 0, 2, - 3, 3, 4, 4, 4, 4, 4, 0, 3, 4, - 7, 3, 1, 1, 1, 0, 5, 5, 2, 3, - 1, 2, 2, 1, 2, 1, 2, 2, 1, 2, - 2, 1, 1, 0, 1, 0, 1, 0, 2, 1, - 2, 4, 0, 2, 1, 1, 3, 5, 1, 1, - 1, 2, 2, 0, 3, 0, 2, 2, 1, 3, - 0, 1, 0, 1, 3, 1, 3, 2, 0, 1, - 1, 0, 1, 2, 4, 4, 0, 2, 2, 1, - 1, 3, 3, 3, 3, 3, 3, 3, 3, 0, - 3, 3, 3, 0, 3, 1, 1, 0, 4, 0, - 1, 1, 0, 1, 2, 2, 1, 1, 1, 1, - 1, 0, 3, 1, 3, 2, 1, 1, 0, 1, - 2, 4, 9, 3, 5, 0, 3, 3, 0, 1, - 0, 2, 2, 0, 2, 2, 2, 0, 2, 1, - 2, 3, 3, 0, 2, 1, 2, 3, 4, 3, - 0, 1, 2, 1, 5, 4, 4, 1, 3, 3, - 5, 0, 5, 1, 3, 1, 2, 3, 4, 1, - 1, 3, 3, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 0, 1, 0, 2, 0, 3, 0, 1, - 0, 1, 1, 5, 0, 1, 0, 1, 2, 1, - 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, -======= - 3, 2, 3, 4, 1, 3, 2, 3, 3, 3, - 2, 2, 3, 7, 3, 3, 3, 3, 4, 7, - 5, 2, 4, 4, 4, 4, 4, 5, 5, 4, - 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, - 4, 4, 4, 4, 4, 3, 4, 4, 4, 2, - 3, 3, 3, 3, 5, 2, 3, 3, 2, 2, - 3, 4, 4, 4, 3, 4, 4, 5, 3, 0, - 1, 0, 1, 1, 1, 0, 2, 2, 0, 2, - 2, 0, 2, 0, 1, 1, 1, 1, 2, 1, - 3, 1, 1, 1, 1, 1, 3, 0, 1, 1, - 3, 3, 2, 2, 1, 1, 5, 0, 1, 0, - 1, 2, 3, 0, 3, 3, 3, 3, 3, 1, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 1, 1, 4, 4, 4, 2, 2, 3, - 1, 3, 2, 1, 2, 1, 2, 2, 4, 4, - 3, 3, 6, 4, 7, 6, 1, 3, 2, 2, - 2, 2, 1, 1, 1, 3, 2, 1, 1, 1, - 0, 1, 1, 0, 3, 0, 2, 0, 2, 1, - 2, 2, 0, 1, 1, 0, 1, 1, 5, 5, - 4, 0, 2, 4, 4, 0, 1, 0, 1, 2, - 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, - 3, 1, 2, 3, 5, 0, 1, 2, 1, 1, - 0, 1, 2, 1, 3, 1, 1, 1, 4, 3, - 1, 1, 2, 3, 7, 0, 3, 0, 1, 1, - 3, 1, 3, 1, 1, 3, 3, 1, 3, 4, - 4, 4, 3, 2, 4, 0, 1, 0, 2, 0, - 1, 0, 1, 2, 1, 1, 1, 2, 2, 1, - 2, 3, 2, 3, 2, 2, 2, 1, 1, 3, - 3, 0, 1, 1, 2, 6, 5, 6, 6, 0, - 2, 3, 3, 0, 2, 3, 3, 3, 2, 3, - 1, 6, 3, 4, 3, 1, 3, 4, 5, 6, - 3, 4, 5, 6, 3, 4, 1, 1, 1, 3, + 7, 8, 5, 5, 5, 7, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 7, 7, 5, 5, 0, + 6, 5, 6, 4, 5, 0, 8, 9, 0, 3, + 0, 1, 0, 3, 8, 4, 1, 3, 3, 6, + 7, 7, 8, 4, 0, 1, 0, 1, 3, 3, + 1, 1, 2, 1, 1, 0, 2, 0, 2, 5, + 3, 7, 4, 4, 4, 4, 3, 3, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 1, 1, 1, 1, 1, 3, 1, 1, 1, - 2, 2, 2, 2, 1, 1, 2, 7, 7, 6, - 6, 2, 2, 1, 6, 3, 3, 3, 1, 3, - 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 1, 1, 0, - 1, 2, 5, 0, 3, 0, 1, 4, 4, 2, - 0, 1, 1, 2, 2, 1, 1, 2, 2, 0, - 1, 1, 1, 1, 5, 1, 3, 0, 3, 1, - 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 3, 4, 6, - 4, 4, 8, 6, 8, 6, 5, 4, 10, 2, - 2, 1, 2, 2, 2, 4, 5, 5, 5, 5, - 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 8, 8, 8, 6, 5, 4, 4, 4, 4, - 4, 7, 4, 4, 6, 6, 6, 8, 6, 6, - 4, 4, 3, 4, 6, 6, 4, 4, 4, 6, - 8, 6, 4, 6, 6, 8, 10, 7, 8, 8, - 9, 4, 4, 4, 4, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 4, 4, 6, 5, 9, - 6, 9, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 2, 6, 8, 10, 12, 14, 6, 8, 8, - 10, 12, 14, 6, 8, 10, 12, 6, 8, 4, - 4, 3, 4, 6, 6, 4, 6, 4, 6, 8, - 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 0, 2, 2, 1, 3, 2, 0, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 3, 1, 3, + 3, 0, 2, 2, 2, 2, 2, 2, 2, 4, + 4, 3, 0, 1, 4, 3, 4, 4, 3, 3, + 3, 2, 1, 3, 3, 3, 5, 7, 7, 6, + 5, 3, 2, 3, 4, 1, 3, 2, 3, 3, + 2, 2, 3, 2, 2, 3, 7, 3, 3, 3, + 3, 4, 7, 5, 2, 4, 4, 4, 4, 4, + 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, + 2, 2, 4, 4, 4, 4, 4, 4, 3, 4, + 4, 4, 2, 3, 3, 3, 3, 5, 2, 3, + 3, 2, 2, 3, 4, 4, 4, 3, 4, 4, + 5, 3, 0, 1, 0, 1, 1, 1, 0, 2, + 2, 0, 2, 2, 0, 2, 0, 1, 1, 1, + 1, 2, 1, 3, 1, 1, 1, 1, 1, 3, + 0, 1, 1, 3, 3, 2, 2, 1, 1, 5, + 0, 1, 0, 1, 2, 3, 0, 3, 3, 3, + 3, 3, 1, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 1, 1, 4, 4, 4, + 2, 2, 3, 1, 3, 2, 1, 2, 1, 2, + 2, 4, 4, 3, 3, 6, 4, 7, 6, 1, + 3, 2, 2, 2, 2, 1, 1, 1, 1, 3, + 2, 1, 1, 1, 0, 1, 1, 0, 3, 0, + 2, 0, 2, 1, 2, 2, 0, 1, 1, 0, + 1, 1, 5, 5, 4, 0, 2, 4, 4, 0, + 1, 0, 1, 2, 3, 4, 1, 1, 1, 1, + 1, 1, 1, 1, 3, 1, 2, 3, 5, 0, + 1, 2, 1, 1, 0, 1, 2, 1, 3, 1, + 1, 1, 4, 3, 1, 1, 2, 3, 7, 0, + 3, 0, 1, 1, 3, 1, 3, 1, 1, 3, + 3, 1, 3, 4, 4, 4, 3, 2, 4, 0, + 1, 0, 2, 0, 1, 0, 1, 2, 1, 1, + 1, 2, 2, 1, 2, 3, 2, 3, 2, 2, + 2, 1, 1, 3, 3, 0, 1, 1, 2, 6, + 5, 6, 6, 0, 2, 3, 3, 0, 2, 3, + 3, 3, 2, 3, 1, 6, 3, 4, 3, 1, + 3, 4, 5, 6, 3, 4, 5, 6, 3, 4, + 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, + 3, 1, 1, 1, 2, 2, 2, 2, 1, 1, + 2, 7, 7, 6, 6, 2, 2, 1, 6, 3, + 3, 3, 1, 3, 1, 3, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 2, 1, 1, 0, 1, 2, 5, 0, 3, 0, + 1, 4, 4, 2, 0, 1, 1, 2, 2, 1, + 1, 2, 2, 0, 1, 1, 1, 1, 5, 1, + 3, 0, 3, 1, 1, 1, 2, 1, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 4, 6, 4, 4, 8, 6, 8, 6, + 5, 4, 10, 2, 2, 1, 2, 2, 2, 4, + 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 8, 8, 8, 6, 5, + 4, 4, 4, 4, 4, 7, 4, 4, 6, 6, + 6, 8, 6, 6, 4, 4, 3, 4, 6, 6, + 4, 4, 4, 6, 8, 6, 4, 6, 6, 8, + 10, 7, 8, 8, 9, 4, 4, 4, 4, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, + 4, 6, 5, 9, 6, 9, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 2, 6, 8, 10, 12, + 14, 6, 8, 8, 10, 12, 14, 6, 8, 10, + 12, 6, 8, 4, 4, 3, 4, 6, 6, 4, + 6, 4, 6, 8, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 2, 0, 2, 3, 3, 4, - 4, 4, 4, 4, 0, 3, 4, 7, 3, 1, - 1, 1, 0, 5, 5, 2, 3, 1, 2, 2, - 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, - 0, 1, 0, 1, 0, 2, 1, 2, 4, 0, - 2, 1, 1, 3, 5, 1, 1, 1, 2, 2, - 0, 3, 0, 2, 2, 1, 3, 0, 1, 0, - 1, 3, 1, 3, 2, 0, 1, 1, 0, 1, - 2, 4, 4, 0, 2, 2, 1, 1, 3, 3, - 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, - 0, 3, 1, 1, 0, 4, 0, 1, 1, 0, - 1, 2, 2, 1, 1, 1, 1, 1, 0, 3, - 1, 3, 2, 1, 1, 0, 1, 2, 4, 9, - 3, 5, 0, 3, 3, 0, 1, 0, 2, 2, - 0, 2, 2, 2, 0, 2, 1, 2, 3, 3, - 0, 2, 1, 2, 3, 4, 3, 0, 1, 2, - 1, 5, 4, 4, 1, 3, 3, 5, 0, 5, - 1, 3, 1, 2, 3, 4, 1, 1, 3, 3, - 1, 2, 1, 1, 1, 1, 1, 1, 1, 0, - 1, 0, 2, 0, 3, 0, 1, 0, 1, 1, - 5, 0, 1, 0, 1, 2, 1, 1, 1, 1, - 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, ->>>>>>> e439161508 (fix: complete time period feature) + 1, 1, 1, 1, 1, 1, 1, 0, 2, 0, + 2, 3, 3, 4, 4, 4, 4, 4, 0, 3, + 4, 7, 3, 1, 1, 1, 0, 5, 5, 2, + 3, 1, 2, 2, 1, 2, 1, 2, 2, 1, + 2, 2, 1, 1, 0, 1, 0, 1, 0, 2, + 1, 2, 4, 0, 2, 1, 1, 3, 5, 1, + 1, 1, 2, 2, 0, 3, 0, 2, 2, 1, + 3, 0, 1, 0, 1, 3, 1, 3, 2, 0, + 1, 1, 0, 1, 2, 4, 4, 0, 2, 2, + 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, + 0, 3, 3, 3, 0, 3, 1, 1, 0, 4, + 0, 1, 1, 0, 1, 2, 2, 1, 1, 1, + 1, 1, 0, 3, 1, 3, 2, 1, 1, 0, + 1, 2, 4, 9, 3, 5, 0, 3, 3, 0, + 1, 0, 2, 2, 0, 2, 2, 2, 0, 2, + 1, 2, 3, 3, 0, 2, 1, 2, 3, 4, + 3, 0, 1, 2, 1, 5, 4, 4, 1, 3, + 3, 5, 0, 5, 1, 3, 1, 2, 3, 4, + 1, 1, 3, 3, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 0, 1, 0, 2, 0, 3, 0, + 1, 0, 1, 1, 5, 0, 1, 0, 1, 2, + 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -13518,18 +7947,13 @@ var yyR2 = [...]int{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -<<<<<<< HEAD - 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, - 1, -======= - 1, 1, 0, 0, 1, 1, ->>>>>>> e439161508 (fix: complete time period feature) + 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 1, 1, } var yyChk = [...]int{ -1000, -416, -80, -421, -7, -11, -20, -21, -22, -23, -24, -25, -26, -27, -28, -29, -30, -31, -63, -64, -<<<<<<< HEAD -68, -69, -65, -66, -70, -71, -72, -73, -74, -14, -17, -67, -32, -33, -75, -76, -77, -78, -79, -16, -18, -19, -9, -8, -13, 10, 11, -109, -34, 33, @@ -13851,1164 +8275,426 @@ var yyChk = [...]int{ 162, -351, 657, 283, 283, -351, -351, -351, -116, -115, 679, 89, -419, 88, -338, 526, 529, -145, -157, -157, -256, 89, -380, 526, -386, -294, -294, -294, -294, 96, - 98, -419, 524, 74, 527, -419, -330, -145, -145, -145, - -235, 90, -145, -145, 96, 96, -419, -145, -210, -145, - -419, -179, -178, -180, 640, 119, 32, -314, -419, -212, - 275, -101, -100, -99, 15, -419, -145, -145, -145, -145, - -145, -145, -145, -418, 67, 19, 17, -418, -418, -303, - -228, -229, 18, 20, -242, 54, -240, 53, -240, -251, - 20, 20, 90, 20, 90, 137, -275, -145, -215, 58, - -11, -294, -213, -294, -230, -145, 87, -145, -159, -199, - -199, -145, -205, 493, 495, 496, 497, 494, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 498, 472, - 108, 110, 109, 473, 474, 475, 349, 520, 521, 515, - 518, 519, 517, 516, 364, 365, 476, 477, 478, 111, - 112, 113, 114, 115, 116, 117, 479, 482, 480, 483, - 484, 485, 490, 491, 486, 487, 488, 489, 492, 509, - 510, 511, 512, 513, 514, 619, 620, 621, 622, 623, - 624, 625, 626, 90, 90, 87, -145, 89, 89, -256, - -371, -59, 89, -257, -255, 96, 89, 278, -214, -418, - 90, -351, -351, -351, 96, 96, -302, -419, 88, -294, - -405, -373, 530, 530, -419, 26, -379, -378, -296, 87, - 78, 63, 525, 528, -419, -419, 88, -419, -419, -419, - 89, 89, -419, -419, -419, 88, -419, -178, -180, -419, - 77, -159, -230, 20, -98, 300, 302, -98, -419, 88, - -419, -419, 88, -419, 88, -419, -419, -258, -419, -294, - 245, 20, 20, -258, -258, -198, -229, -108, -107, -106, - 556, -145, -210, -243, 55, 77, 122, 90, 90, 90, - 13, -213, 221, -235, -255, -176, 386, -230, -419, -255, - 89, 26, 89, 681, 137, 89, -214, -125, -418, 274, - -302, 90, 90, -115, -118, -11, 88, 151, -255, -191, - 63, -145, -210, -419, 77, 537, 640, -93, -92, -89, - 651, 677, -210, -95, -95, -145, -145, -145, 88, -419, - -419, -419, -108, 88, -105, -104, -294, 77, 122, -267, - -294, 89, -419, -418, -235, 89, -239, -11, 87, -3, - 274, -326, -376, -327, -328, -5, -6, -352, -83, 526, - -378, -356, -296, 90, 96, 89, 526, -419, -419, -91, - 145, 649, 615, -146, -157, -154, 220, -419, 88, -419, - 88, -419, 88, -294, 245, -106, 88, 26, -303, -177, - -175, -294, 579, -396, -395, 522, -406, -402, 119, 143, - 101, -404, 617, 573, 128, 129, -83, -145, 87, -419, - -84, 289, 634, -387, 527, -91, 650, 593, 568, 593, - 568, -145, -145, -145, -104, -418, -419, 88, 23, -318, - -61, 590, -393, -394, 77, -397, 392, 589, 610, 119, - 90, 89, -255, 250, -380, 528, 142, -419, 88, -419, - 88, -419, -94, -175, 586, -331, -159, -394, 77, -393, - 77, 14, 13, -4, 680, 89, 291, -91, -145, -145, - -419, -60, 27, -176, -392, 258, 253, 256, 33, -392, - 96, -4, -419, -419, 590, 252, 32, 119, -159, -179, - -178, -178, + 98, 90, -419, 524, 74, 527, -419, -330, -145, -145, + -145, -235, 90, -145, -145, 96, 96, -419, -145, -210, + -145, -419, -179, -178, -180, 640, 119, 32, -314, -419, + -212, 275, -101, -100, -99, 15, -419, -145, -145, -145, + -145, -145, -145, -145, -418, 67, 19, 17, -418, -418, + -303, -228, -229, 18, 20, -242, 54, -240, 53, -240, + -251, 20, 20, 90, 20, 90, 137, -275, -145, -215, + 58, -11, -294, -213, -294, -230, -145, 87, -145, -159, + -199, -199, -145, -205, 493, 495, 496, 497, 494, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 498, + 472, 108, 110, 109, 473, 474, 475, 349, 520, 521, + 515, 518, 519, 517, 516, 364, 365, 476, 477, 478, + 111, 112, 113, 114, 115, 116, 117, 479, 482, 480, + 483, 484, 485, 490, 491, 486, 487, 488, 489, 492, + 509, 510, 511, 512, 513, 514, 619, 620, 621, 622, + 623, 624, 625, 626, 90, 90, 87, -145, 89, 89, + -256, -371, -59, 89, -257, -255, 96, 89, 278, -214, + -418, 90, -351, -351, -351, 96, 96, -302, -419, 88, + -294, -405, -373, 530, 530, -419, 26, -379, -378, -296, + 87, 78, 63, 525, 528, -419, -419, 88, -419, -419, + -419, 89, 89, -419, -419, -419, 88, -419, -178, -180, + -419, 77, -159, -230, 20, -98, 300, 302, -98, -419, + 88, -419, -419, 88, -419, 88, -419, -419, -258, -419, + -294, 245, 20, 20, -258, -258, -198, -229, -108, -107, + -106, 556, -145, -210, -243, 55, 77, 122, 90, 90, + 90, 13, -213, 221, -235, -255, -176, 386, -230, -419, + -255, 89, 26, 89, 681, 137, 89, -214, -125, -418, + 274, -302, 90, 90, -115, -118, -11, 88, 151, -255, + -191, 63, -145, -210, -419, 77, 537, 640, -93, -92, + -89, 651, 677, -210, -95, -95, -145, -145, -145, 88, + -419, -419, -419, -108, 88, -105, -104, -294, 77, 122, + -267, -294, 89, -419, -418, -235, 89, -239, -11, 87, + -3, 274, -326, -376, -327, -328, -5, -6, -352, -83, + 526, -378, -356, -296, 90, 96, 89, 526, -419, -419, + -91, 145, 649, 615, -146, -157, -154, 220, -419, 88, + -419, 88, -419, 88, -294, 245, -106, 88, 26, -303, + -177, -175, -294, 579, -396, -395, 522, -406, -402, 119, + 143, 101, -404, 617, 573, 128, 129, -83, -145, 87, + -419, -84, 289, 634, -387, 527, -91, 650, 593, 568, + 593, 568, -145, -145, -145, -104, -418, -419, 88, 23, + -318, -61, 590, -393, -394, 77, -397, 392, 589, 610, + 119, 90, 89, -255, 250, -380, 528, 142, -419, 88, + -419, 88, -419, -94, -175, 586, -331, -159, -394, 77, + -393, 77, 14, 13, -4, 680, 89, 291, -91, -145, + -145, -419, -60, 27, -176, -392, 258, 253, 256, 33, + -392, 96, -4, -419, -419, 590, 252, 32, 119, -159, + -179, -178, -178, } var yyDef = [...]int{ - 928, -2, -2, 930, 2, 4, 5, 6, 7, 8, + 929, -2, -2, 931, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 73, 75, 76, 928, 928, 928, 0, 928, - 0, 0, 928, -2, -2, 928, 1545, 0, 928, 0, - 0, 0, 0, 0, -2, 841, 847, 0, 856, -2, - 0, 0, 928, 928, 2117, 2117, 923, 0, 0, 0, - 0, 0, 928, 928, 928, 928, 1402, 53, 928, 0, - 88, 89, 876, 877, 878, 68, 0, 2115, 929, 1, - 3, 74, 78, 0, 0, 0, 61, 1411, 0, 81, - 0, 0, 932, 0, 0, 1528, 928, 928, 0, 129, - 130, 131, 0, 0, 0, 928, 0, -2, 135, -2, - 164, 165, 166, 0, 171, 638, 527, 579, 525, 564, + 39, 40, 73, 75, 76, 929, 929, 929, 0, 929, + 0, 0, 929, -2, -2, 929, 1546, 0, 929, 0, + 0, 0, 0, 0, -2, 842, 848, 0, 857, -2, + 0, 0, 929, 929, 2118, 2118, 924, 0, 0, 0, + 0, 0, 929, 929, 929, 929, 1403, 53, 929, 0, + 88, 89, 877, 878, 879, 68, 0, 2116, 930, 1, + 3, 74, 78, 0, 0, 0, 61, 1412, 0, 81, + 0, 0, 933, 0, 0, 1529, 929, 929, 0, 129, + 130, 131, 0, 0, 0, 929, 0, -2, 135, -2, + 164, 165, 166, 0, 171, 639, 527, 579, 525, 564, -2, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 530, 403, 403, 0, 0, -2, - 513, 513, 513, 1530, 0, 0, 0, 561, 465, 403, + 513, 513, 513, 1531, 0, 0, 0, 561, 465, 403, 403, 403, 0, 403, 403, 403, 403, 0, 0, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, - 403, 403, 403, 403, 403, 403, 1429, 170, 1546, 1543, - 1544, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, - 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, - 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, - 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, - 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, - 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, - 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, - 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, - 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, - 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, - 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, - 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, - 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, - 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, - 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, - 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, - 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, - 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, - 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, - 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, - 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, - 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, - 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, - 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, - 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, - 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, - 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, - 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, - 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, - 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, - 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, - 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, - 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, - 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, - 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, - 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, - 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, - 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, - 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, - 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, - 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, - 2113, 2114, 0, 1522, 0, 751, 1031, 0, 0, 756, - 0, 0, 759, 760, 830, 762, 763, 830, 0, 830, - 830, 830, 830, 0, 0, 0, 773, 0, 0, 0, - 0, 827, 0, 789, 790, 0, 827, 827, 827, 0, - 0, 801, 833, 0, 0, 807, 830, 830, 810, 811, - 2118, 0, 2118, 2118, 1513, 0, 824, 822, 836, 837, - 43, 840, 843, 844, 845, 846, 849, 0, 860, 863, - 1539, 1540, 0, 865, 872, 889, 890, 0, 924, 925, - 48, 1179, 0, 1053, 1058, 1069, 1084, 1085, 1086, 1087, - 1088, 1090, 1091, 1092, 0, 0, 0, 0, 1097, 1098, - 0, 0, 0, 0, 0, 1160, 1106, 0, 0, 0, - 0, 1375, 0, 0, 1336, 1336, 1194, 1336, 1338, 1338, - 1753, 1889, 1897, 2019, 1715, 1720, 1721, 1722, 2012, 2013, - 2014, 2015, 2055, 2056, 2060, 1813, 0, 0, 0, 2114, - 1850, 1858, 1859, 1883, 1984, 2040, 1732, 1878, 1949, 1810, - 1832, 1833, 1966, 1967, 1854, 1855, 1836, 1848, 1851, 1839, - 1840, 1842, 1844, 1849, 1856, 1862, 1841, 1861, 1860, 0, - 1837, 1838, 1843, 1853, 1857, 1845, 1846, 1847, 1852, 1863, - 0, 0, 0, 0, 0, 1275, 1276, 1277, 1278, 0, - 0, 0, 0, 0, 0, 0, 295, 296, 1388, 1389, - 46, 47, 1178, 1509, 1338, 1338, 1338, 1338, 1338, 1120, - 1121, 1122, 1123, 1124, 1148, 1149, 1155, 1156, 1961, 1962, - 1963, 1964, 1794, 2049, 1802, 1803, 1944, 1945, 1815, 1816, - 2089, 2090, -2, -2, -2, 236, 237, 238, 239, 240, - 241, 242, 243, 0, 1757, 2030, 2031, 232, 0, 0, - 300, 301, 297, 298, 299, 1162, 1163, 253, 254, 255, + 403, 403, 403, 403, 403, 403, 1430, 170, 1547, 1544, + 1545, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, + 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, + 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, + 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, + 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, + 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, + 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, + 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, + 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, + 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, + 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, + 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, + 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, + 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, + 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, + 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, + 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, + 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, + 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, + 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, + 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, + 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, + 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, + 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, + 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, + 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, + 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, + 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, + 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, + 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, + 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, + 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, + 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, + 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, + 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, + 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, + 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, + 2074, 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, + 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, + 2094, 2095, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, + 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, + 2114, 2115, 0, 1523, 0, 752, 1032, 0, 0, 757, + 0, 0, 760, 761, 831, 763, 764, 831, 0, 831, + 831, 831, 831, 0, 0, 0, 774, 0, 0, 0, + 0, 828, 0, 790, 791, 0, 828, 828, 828, 0, + 0, 802, 834, 0, 0, 808, 831, 831, 811, 812, + 2119, 0, 2119, 2119, 1514, 0, 825, 823, 837, 838, + 43, 841, 844, 845, 846, 847, 850, 0, 861, 864, + 1540, 1541, 0, 866, 873, 890, 891, 0, 925, 926, + 48, 1180, 0, 1054, 1059, 1070, 1085, 1086, 1087, 1088, + 1089, 1091, 1092, 1093, 0, 0, 0, 0, 1098, 1099, + 0, 0, 0, 0, 0, 1161, 1107, 0, 0, 0, + 0, 1376, 0, 0, 1337, 1337, 1195, 1337, 1339, 1339, + 1754, 1890, 1898, 2020, 1716, 1721, 1722, 1723, 2013, 2014, + 2015, 2016, 2056, 2057, 2061, 1814, 0, 0, 0, 2115, + 1851, 1859, 1860, 1884, 1985, 2041, 1733, 1879, 1950, 1811, + 1833, 1834, 1967, 1968, 1855, 1856, 1837, 1849, 1852, 1840, + 1841, 1843, 1845, 1850, 1857, 1863, 1842, 1862, 1861, 0, + 1838, 1839, 1844, 1854, 1858, 1846, 1847, 1848, 1853, 1864, + 0, 0, 0, 0, 0, 1276, 1277, 1278, 1279, 0, + 0, 0, 0, 0, 0, 0, 295, 296, 1389, 1390, + 46, 47, 1179, 1510, 1339, 1339, 1339, 1339, 1339, 1121, + 1122, 1123, 1124, 1125, 1149, 1150, 1156, 1157, 1962, 1963, + 1964, 1965, 1795, 2050, 1803, 1804, 1945, 1946, 1816, 1817, + 2090, 2091, -2, -2, -2, 236, 237, 238, 239, 240, + 241, 242, 243, 0, 1758, 2031, 2032, 232, 0, 0, + 300, 301, 297, 298, 299, 1163, 1164, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 2117, - 0, 899, 0, 0, 0, 0, 0, 1411, 0, 1403, - 1402, 66, 0, -2, 0, 0, 0, 0, 50, 0, - 55, 988, 931, 80, 79, 1460, 0, 0, 0, 62, - 1412, 70, 72, 1413, 0, 933, 934, 0, 964, 968, - 0, 0, 0, 1529, 1528, 1528, 105, 0, 0, 106, - 126, 127, 128, 0, 0, 112, 113, 1515, 1516, 132, - 0, 0, 182, 183, 0, 44, 430, 0, 178, 950, - 0, 423, 362, 0, 1429, 0, 0, 0, 0, 0, - 928, 0, 1523, 159, 160, 167, 168, 169, 403, 403, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 2118, + 0, 900, 0, 0, 0, 0, 0, 1412, 0, 1404, + 1403, 66, 0, -2, 0, 0, 0, 0, 50, 0, + 55, 989, 932, 80, 79, 1461, 0, 0, 0, 62, + 1413, 70, 72, 1414, 0, 934, 935, 0, 965, 969, + 0, 0, 0, 1530, 1529, 1529, 105, 0, 0, 106, + 126, 127, 128, 0, 0, 112, 113, 1516, 1517, 132, + 0, 0, 182, 183, 0, 44, 430, 0, 178, 951, + 0, 423, 362, 0, 1430, 0, 0, 0, 0, 0, + 929, 0, 1524, 159, 160, 167, 168, 169, 403, 403, 403, 576, 0, 0, 170, 170, 534, 535, 536, 0, 0, -2, 428, 0, 514, 0, 0, 417, 417, 421, 419, 420, 0, 0, 0, 0, 0, 0, 0, 0, 553, 0, 554, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 699, 0, 404, 0, 574, 575, 466, 0, - 0, 0, 0, 0, 0, 0, 0, 1531, 1532, 0, + 0, 0, 700, 0, 404, 0, 574, 575, 466, 0, + 0, 0, 0, 0, 0, 0, 0, 1532, 1533, 0, 551, 552, 0, 0, 0, 403, 403, 0, 0, 0, 0, 403, 403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 158, 1451, 0, 0, 0, 0, 0, -2, 0, - 743, 0, 0, 0, 1524, 1524, 0, 750, 0, 752, - 1442, 754, 757, 758, 761, 0, 0, 764, 0, 827, - 827, 825, 826, 766, 767, 768, 769, 830, 0, 0, - 412, 413, 414, 827, 830, 0, 830, 830, 830, 830, - 827, 827, 827, 830, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2118, 833, 830, 830, 0, 830, 797, - 0, 802, 0, 803, 804, 805, 808, 809, 812, 2119, - 2120, 1541, 1542, 1549, 1550, 1551, 1552, 1553, 1554, 1555, - 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, - 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, - 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, - 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, - 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, - 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, - 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, - 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, - 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, - 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, - 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, - 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, - 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, - 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, - 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 2118, 2118, - 816, 820, 1514, 842, 848, 850, 851, 0, 0, 861, - 864, 883, 52, 1801, 871, 52, 873, 874, 875, 902, - 903, 908, 0, 0, 0, 0, 914, 915, 916, 917, - 0, 0, 920, 921, 922, 0, 0, 0, 0, 0, - 1051, 0, 0, 1168, 1169, 1170, 1171, 1172, 1173, 1174, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1070, 1071, 0, - 0, 0, 1093, 1094, 1095, 1096, 1099, 0, 1111, 0, - 1113, 1384, -2, 0, 0, 0, 1104, 1105, 0, 0, - 0, 0, 0, 0, 0, 1376, 0, 0, 1192, 0, - 1193, 1195, 1196, 0, 1197, 938, 938, 938, 938, 938, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 938, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1534, 146, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 948, 0, 0, 948, 948, 0, 0, 225, 226, 227, + 0, 158, 1452, 0, 0, 0, 0, 0, -2, 0, + 744, 0, 0, 0, 1525, 1525, 0, 751, 0, 753, + 1443, 755, 758, 759, 762, 0, 0, 765, 0, 828, + 828, 826, 827, 767, 768, 769, 770, 831, 0, 0, + 412, 413, 414, 828, 831, 0, 831, 831, 831, 831, + 828, 828, 828, 831, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2119, 834, 831, 831, 0, 831, 798, + 0, 803, 0, 804, 805, 806, 809, 810, 813, 2120, + 2121, 1542, 1543, 1550, 1551, 1552, 1553, 1554, 1555, 1556, + 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, + 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, + 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, + 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, + 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, + 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, + 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, + 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, + 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, + 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, + 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, + 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, + 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, + 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, + 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 2119, 2119, + 817, 821, 1515, 843, 849, 851, 852, 0, 0, 862, + 865, 884, 52, 1802, 872, 52, 874, 875, 876, 903, + 904, 909, 0, 0, 0, 0, 915, 916, 917, 918, + 0, 0, 921, 922, 923, 0, 0, 0, 0, 0, + 1052, 0, 0, 1169, 1170, 1171, 1172, 1173, 1174, 1175, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1071, 1072, 0, + 0, 0, 1094, 1095, 1096, 1097, 1100, 0, 1112, 0, + 1114, 1385, -2, 0, 0, 0, 1105, 1106, 0, 0, + 0, 0, 0, 0, 0, 1377, 0, 0, 1193, 0, + 1194, 1196, 1197, 0, 1198, 939, 939, 939, 939, 939, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 939, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1535, 146, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 949, 0, 0, 949, 949, 0, 0, 225, 226, 227, 228, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 244, 245, 246, 247, - 248, 249, 302, 250, 251, 252, 1178, 0, 0, 0, - 49, 891, 892, 0, 1014, 1534, 0, 0, 0, 944, - 0, 60, 69, 71, 1411, 64, 1411, 0, 0, 0, - -2, -2, 951, 957, 958, 959, 960, 961, 57, 2116, + 248, 249, 302, 250, 251, 252, 1179, 0, 0, 0, + 49, 892, 893, 0, 1015, 1535, 0, 0, 0, 945, + 0, 60, 69, 71, 1412, 64, 1412, 0, 0, 0, + -2, -2, 952, 958, 959, 960, 961, 962, 57, 2117, 58, 0, 77, 0, 51, 0, 0, 0, 0, 376, - 1463, 0, 0, 1404, 1405, 1408, 0, 965, 1895, 969, - 0, 971, 972, 0, 0, 103, 0, 1030, 0, 0, - 0, 114, 0, 116, 117, 0, 0, 0, 387, 1517, - 1518, 1519, -2, 410, 0, 387, 371, 310, 311, 312, + 1464, 0, 0, 1405, 1406, 1409, 0, 966, 1896, 970, + 0, 972, 973, 0, 0, 103, 0, 1031, 0, 0, + 0, 114, 0, 116, 117, 0, 0, 0, 387, 1518, + 1519, 1520, -2, 410, 0, 387, 371, 310, 311, 312, 362, 314, 362, 362, 362, 362, 376, 376, 376, 376, 345, 346, 347, 348, 349, 0, 0, 331, 362, 362, 362, 362, 352, 353, 354, 355, 356, 357, 358, 359, 315, 316, 317, 318, 319, 320, 321, 322, 323, 364, - 364, 364, 364, 364, 368, 368, 0, 45, 0, 955, - 956, 391, 0, 1408, 0, 0, 1451, 1526, 1536, 0, - 0, 0, 1526, 137, 0, 0, 0, 577, 649, 528, + 364, 364, 364, 364, 368, 368, 0, 45, 0, 956, + 957, 391, 0, 1409, 0, 0, 1452, 1527, 1537, 0, + 0, 0, 1527, 137, 0, 0, 0, 577, 650, 528, 565, 578, 0, 531, 532, -2, 0, 0, 513, 0, 515, 0, 411, 0, -2, 0, 421, 0, 417, 421, 418, 421, 409, 422, 555, 556, 557, 0, 559, 560, - 679, 1000, 0, 0, 0, 0, 0, 685, 686, 687, - 0, 689, 690, 691, 692, 693, 694, 695, 696, 697, - 698, 566, 567, 568, 569, 570, 571, 572, 573, 0, + 680, 1001, 0, 0, 0, 0, 0, 686, 687, 688, + 0, 690, 691, 692, 693, 694, 695, 696, 697, 698, + 699, 566, 567, 568, 569, 570, 571, 572, 573, 0, 0, 0, 0, 515, 0, 562, 0, 0, 467, 468, 469, 0, 0, 472, 473, 474, 475, 0, 0, 478, - 479, 480, 1017, 1018, 481, 482, 507, 508, 509, 483, + 479, 480, 1018, 1019, 481, 482, 507, 508, 509, 483, 484, 485, 486, 487, 488, 489, 501, 502, 503, 504, 505, 506, 490, 491, 492, 493, 494, 495, 498, 0, - 152, 1433, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1524, 0, 0, 0, 0, 947, - 1032, 1547, 1548, 753, 0, 1443, 0, 1446, 1447, 1448, - 1449, 1450, 831, 832, 0, 415, 416, 830, 830, 770, - 817, 0, 830, 774, 818, 775, 777, 776, 778, 791, - 792, 830, 781, 828, 829, 782, 783, 784, 785, 786, - 787, 788, 813, 793, 794, 795, 800, 796, 798, 799, - 834, 0, 838, 839, 814, 815, 0, 0, 854, 855, - 0, 862, 886, 884, 885, 887, 879, 880, 881, 882, - 0, 888, 0, 0, 905, 99, 910, 911, 912, 913, - 926, 919, 1180, 1048, 1049, 1050, 0, 1052, 1055, 0, - 1164, 1166, 1057, 1059, 1175, 1176, 1177, 0, 0, 0, - 0, 0, 1063, 1067, 1072, 1073, 1074, 1075, 1076, 1077, - 1078, 1079, 1080, 1081, 1082, 1083, 1089, 1352, 1353, 1354, - 1108, 303, 304, 0, 1109, 0, 0, 0, 0, 0, - 0, 0, 1179, 1110, 0, 962, 0, 0, 1382, 1379, - 0, 0, 0, 1337, 1339, 0, 0, 0, 0, 939, - 940, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1315, - 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, - 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, - 1355, 0, 0, 0, 0, 0, 1375, 0, 1115, 1116, - 1117, 0, 0, 0, 0, 0, 0, 1235, 0, 0, - 0, 0, 1535, 0, 147, 148, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1279, 1280, 1281, 1282, 42, 0, 0, 0, - 949, 1386, 0, -2, -2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1304, 0, - 0, 0, 0, 0, 0, 1507, 0, 0, 894, 895, - 897, 0, 1034, 0, 1015, 0, 0, 900, 901, 0, - 943, 0, 946, 63, 65, 0, 973, 952, 59, 54, - 0, 0, 992, 1461, 376, 1483, 0, 385, 385, 382, - 1414, 1415, 0, 1407, 1409, 1410, 82, 970, 966, 0, - 1046, 0, 0, 1029, 0, 976, 978, 979, 980, 1012, - 0, 983, 984, 0, 0, 0, 0, 0, 101, 1031, + 152, 1434, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1525, 0, 0, 0, 0, 948, + 1033, 1548, 1549, 754, 0, 1444, 0, 1447, 1448, 1449, + 1450, 1451, 832, 833, 0, 415, 416, 831, 831, 771, + 818, 0, 831, 775, 819, 776, 778, 777, 779, 792, + 793, 831, 782, 829, 830, 783, 784, 785, 786, 787, + 788, 789, 814, 794, 795, 796, 801, 797, 799, 800, + 835, 0, 839, 840, 815, 816, 0, 0, 855, 856, + 0, 863, 887, 885, 886, 888, 880, 881, 882, 883, + 0, 889, 0, 0, 906, 99, 911, 912, 913, 914, + 927, 920, 1181, 1049, 1050, 1051, 0, 1053, 1056, 0, + 1165, 1167, 1058, 1060, 1176, 1177, 1178, 0, 0, 0, + 0, 0, 1064, 1068, 1073, 1074, 1075, 1076, 1077, 1078, + 1079, 1080, 1081, 1082, 1083, 1084, 1090, 1353, 1354, 1355, + 1109, 303, 304, 0, 1110, 0, 0, 0, 0, 0, + 0, 0, 1180, 1111, 0, 963, 0, 0, 1383, 1380, + 0, 0, 0, 1338, 1340, 0, 0, 0, 0, 940, + 941, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1316, + 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, + 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, + 1356, 0, 0, 0, 0, 0, 1376, 0, 1116, 1117, + 1118, 0, 0, 0, 0, 0, 0, 1236, 0, 0, + 0, 0, 1536, 0, 147, 148, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1280, 1281, 1282, 1283, 42, 0, 0, 0, + 950, 1387, 0, -2, -2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1305, 0, + 0, 0, 0, 0, 0, 1508, 0, 0, 895, 896, + 898, 0, 1035, 0, 1016, 0, 0, 901, 902, 0, + 944, 0, 947, 63, 65, 0, 974, 953, 59, 54, + 0, 0, 993, 1462, 376, 1484, 0, 385, 385, 382, + 1415, 1416, 0, 1408, 1410, 1411, 82, 971, 967, 0, + 1047, 0, 0, 1030, 0, 977, 979, 980, 981, 1013, + 0, 984, 985, 0, 0, 0, 0, 0, 101, 1032, 107, 0, 115, 0, 0, 120, 121, 108, 109, 110, - 111, 0, 638, -2, 462, 184, 186, 187, 188, 179, + 111, 0, 639, -2, 462, 184, 186, 187, 188, 179, -2, 374, 372, 373, 313, 376, 376, 339, 340, 341, 342, 343, 344, 0, 0, 332, 333, 334, 335, 324, 0, 325, 326, 327, 366, 0, 328, 329, 0, 330, - 429, 0, 1416, 392, 393, 395, 403, 0, 398, 399, - 0, 403, 403, 0, 424, 425, 0, 1408, 1433, 0, - 0, 0, 1537, 1536, 1536, 1536, 0, 172, 173, 174, - 175, 176, 177, 674, 0, 0, 650, 672, 673, 170, - 0, 0, 180, 517, 516, 0, 706, 0, 427, 0, - 0, 421, 421, 406, 407, 558, 0, 0, 681, 682, - 683, 684, 0, 0, 0, 544, 456, 0, 545, 546, + 429, 0, 1417, 392, 393, 395, 403, 0, 398, 399, + 0, 403, 403, 0, 424, 425, 0, 1409, 1434, 0, + 0, 0, 1538, 1537, 1537, 1537, 0, 172, 173, 174, + 175, 176, 177, 675, 0, 0, 651, 673, 674, 170, + 0, 0, 180, 517, 516, 0, 707, 0, 427, 0, + 0, 421, 421, 406, 407, 558, 0, 0, 682, 683, + 684, 685, 0, 0, 0, 544, 456, 0, 545, 546, 515, 517, 0, 0, 387, 470, 471, 476, 477, 496, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 591, 592, 593, 596, 598, 599, 600, 519, 606, 595, 597, 601, 602, 603, 519, 607, 608, 610, 611, 612, 519, 618, 0, 609, 613, 614, 615, 519, 619, - 621, 622, 623, 626, 628, 629, 630, 519, 636, 625, - 627, 631, 632, 633, 519, 637, 1430, 1431, 1432, 0, - 0, 744, 0, 0, 453, 97, 1525, 749, 1444, 755, - 1445, 827, 780, 819, 827, 772, 779, 806, 852, 853, - 858, 866, 867, 868, 869, 870, 909, 0, 0, 0, - 0, 918, 0, 0, 1056, 1165, 1167, 1060, 0, 1064, - 1068, 0, 0, 0, 1114, 1112, 1386, 0, 0, 0, - 1161, 0, 0, 1183, 1184, 0, 0, 0, 1380, 0, - 0, 1190, 0, 1340, 1341, 1198, 0, 0, 0, 0, - 0, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, - 1213, 1402, 0, 0, 0, 0, 0, 1219, 1220, 1221, - 1222, 1223, 0, 1225, 0, 1226, 0, 0, 0, 0, - 1233, 1234, 1236, 0, 0, 1239, 1240, 0, 0, 1241, - 0, 0, 0, 1245, 0, 0, 0, 0, 1254, 1255, - 1256, 1257, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1268, 1269, 0, 1143, 0, 0, 1143, 0, - 1181, 948, 0, 1342, 1343, 1344, 1345, 1346, 0, 0, - 0, 0, 0, 0, 1302, 1303, 1305, 0, 0, 1308, - 0, 1310, 0, 1508, 893, 896, 898, 986, 1035, 1036, - 0, 0, 0, 0, 1016, 1533, 941, 942, 945, 994, - 0, 1390, 0, 0, 973, 1046, 974, 0, 953, 56, - 989, 0, 1465, 1464, 1477, 1490, 385, 385, 379, 380, - 386, 381, 383, 384, 1406, 0, 1411, 0, 1501, 0, - 0, 1493, 0, 0, 0, 0, 0, 0, 0, 0, - 1019, 0, 0, 1022, 0, 0, 0, 0, 1013, 984, - 0, 985, 0, -2, 0, 0, 95, 96, 0, 0, + 622, 623, 624, 627, 629, 630, 631, 519, 637, 626, + 628, 632, 633, 634, 519, 638, 1431, 1432, 1433, 0, + 0, 745, 0, 0, 453, 97, 1526, 750, 1445, 756, + 1446, 828, 781, 820, 828, 773, 780, 807, 853, 854, + 859, 867, 868, 869, 870, 871, 910, 0, 0, 0, + 0, 919, 0, 0, 1057, 1166, 1168, 1061, 0, 1065, + 1069, 0, 0, 0, 1115, 1113, 1387, 0, 0, 0, + 1162, 0, 0, 1184, 1185, 0, 0, 0, 1381, 0, + 0, 1191, 0, 1341, 1342, 1199, 0, 0, 0, 0, + 0, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, + 1214, 1403, 0, 0, 0, 0, 0, 1220, 1221, 1222, + 1223, 1224, 0, 1226, 0, 1227, 0, 0, 0, 0, + 1234, 1235, 1237, 0, 0, 1240, 1241, 0, 0, 1242, + 0, 0, 0, 1246, 0, 0, 0, 0, 1255, 1256, + 1257, 1258, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1269, 1270, 0, 1144, 0, 0, 1144, 0, + 1182, 949, 0, 1343, 1344, 1345, 1346, 1347, 0, 0, + 0, 0, 0, 0, 1303, 1304, 1306, 0, 0, 1309, + 0, 1311, 0, 1509, 894, 897, 899, 987, 1036, 1037, + 0, 0, 0, 0, 1017, 1534, 942, 943, 946, 995, + 0, 1391, 0, 0, 974, 1047, 975, 0, 954, 56, + 990, 0, 1466, 1465, 1478, 1491, 385, 385, 379, 380, + 386, 381, 383, 384, 1407, 0, 1412, 0, 1502, 0, + 0, 1494, 0, 0, 0, 0, 0, 0, 0, 0, + 1020, 0, 0, 1023, 0, 0, 0, 0, 1014, 985, + 0, 986, 0, -2, 0, 0, 95, 96, 0, 0, 0, 118, 119, 0, 0, 125, 388, 389, 161, 170, 464, 185, 437, 0, 0, 309, 375, 336, 337, 338, - 0, 360, 0, 0, 0, 0, 458, 133, 1420, 1419, - 403, 403, 394, 0, 397, 0, 0, 0, 1538, 363, - 426, 0, 151, 0, 0, 0, 0, 0, 157, 644, - 0, 0, 651, 0, 0, 0, 526, 0, 537, 538, - 0, 678, -2, 740, 391, 0, 405, 408, 1001, 0, + 0, 360, 0, 0, 0, 0, 458, 133, 1421, 1420, + 403, 403, 394, 0, 397, 0, 0, 0, 1539, 363, + 426, 0, 151, 0, 0, 0, 0, 0, 157, 645, + 0, 0, 652, 0, 0, 0, 526, 0, 537, 538, + 0, 679, -2, 741, 391, 0, 405, 408, 1002, 0, 0, 539, 0, 542, 543, 457, 517, 548, 549, 563, - 550, 499, 500, 497, 0, 0, 1452, 1453, 1458, 1456, - 1457, 138, 584, 586, 585, 589, 0, 0, 0, 521, + 550, 499, 500, 497, 0, 0, 1453, 1454, 1459, 1457, + 1458, 138, 584, 586, 585, 589, 0, 0, 0, 521, 0, 521, 521, 0, 521, 0, 521, 521, 582, 0, - 453, 1416, 0, 748, 454, 455, 830, 830, 904, 100, - 0, 907, 0, 0, 0, 0, 1061, 1065, 1347, 1373, - 362, 362, 1360, 362, 368, 1363, 362, 1365, 362, 1368, - 362, 1371, 1372, 0, 0, 0, 963, 0, 0, 1189, - 1383, 0, 0, 1199, 1200, 1201, 1202, 1203, 1377, 0, - 0, 0, 1218, 0, 0, 0, 0, 0, 0, 0, + 453, 1417, 0, 749, 454, 455, 831, 831, 905, 100, + 0, 908, 0, 0, 0, 0, 1062, 1066, 1348, 1374, + 362, 362, 1361, 362, 368, 1364, 362, 1366, 362, 1369, + 362, 1372, 1373, 0, 0, 0, 964, 0, 0, 1190, + 1384, 0, 0, 1200, 1201, 1202, 1203, 1204, 1378, 0, + 0, 0, 1219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 150, 0, 0, 0, 0, 0, - 0, 1313, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1138, 1142, 0, 1144, 1145, 0, 0, 1271, - 0, 0, 1283, 0, 1387, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1037, 1042, 1042, 1042, 0, - 0, 0, 1520, 1521, 1391, 1392, 1046, 1393, 975, 954, - 993, 1483, 0, 1476, 0, -2, 1485, 0, 0, 0, - 1491, 377, 378, 967, 83, 1047, 86, 0, 1501, 1510, - 0, 1492, 1503, 1505, 0, 0, 0, 1497, 0, 1046, - 977, 1008, 1010, 0, 1005, 1020, 1021, 1023, 0, 1025, - 0, 1027, 1028, 988, 982, 0, 103, 0, 1046, 1046, - 102, 0, 1033, 122, 123, 124, 463, 189, 194, 0, + 0, 1314, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1139, 1143, 0, 1145, 1146, 0, 0, 1272, + 0, 0, 1284, 0, 1388, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1038, 1043, 1043, 1043, 0, + 0, 0, 1521, 1522, 1392, 1393, 1047, 1394, 976, 955, + 994, 1484, 0, 1477, 0, -2, 1486, 0, 0, 0, + 1492, 377, 378, 968, 83, 1048, 86, 0, 1502, 1511, + 0, 1493, 1504, 1506, 0, 0, 0, 1498, 0, 1047, + 978, 1009, 1011, 0, 1006, 1021, 1022, 1024, 0, 1026, + 0, 1028, 1029, 989, 983, 0, 103, 0, 1047, 1047, + 102, 0, 1034, 122, 123, 124, 463, 189, 194, 0, 0, 0, 199, 0, 201, 0, 0, 0, 206, 207, 403, 403, 438, 0, 306, 308, 0, 0, 192, 376, - 0, 376, 0, 367, 369, 0, 439, 459, 1417, 1418, - 0, 0, 396, 400, 401, 402, 0, 1527, 153, 0, - 0, 0, 647, 0, 675, 0, 0, 0, 0, 0, - 0, 181, 518, 707, 708, 709, 710, 711, 712, 713, - 714, 715, 0, 403, 0, 0, 0, 403, 403, 403, - 0, 732, 390, 0, 0, 703, 700, 540, 0, 230, - 231, 233, 0, 0, 0, 0, 0, 547, 988, 1434, - 1435, 1436, 0, 1455, 1459, 141, 0, 0, 0, 0, - 594, 604, 0, 520, 605, 616, 620, 617, 624, 634, - 635, 745, 746, 747, 98, 765, 771, 906, 927, 1054, - 1062, 1066, 0, 0, 0, 0, 1374, 1358, 376, 1361, - 1362, 1364, 1366, 1367, 1369, 1370, 1102, 1103, 1107, 0, - 1186, 0, 1188, 1381, 0, 1411, 0, 0, 0, 1217, - 0, 0, 0, 1228, 1227, 1229, 0, 1231, 1232, 1237, - 1238, 1242, 0, 1244, 1246, 1247, 0, 0, 0, 1258, - 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 0, - 1136, 1139, 1270, 1146, 1147, 1152, 1273, 0, 0, 1182, - 1285, 0, 1290, 0, 0, 1296, 0, 1300, 0, 1306, - 1307, 1309, 1311, 0, 0, 0, 0, 0, 1014, 995, - 67, 1393, 1395, 0, 1470, 1468, 1468, 1478, 1479, 0, - 0, 1486, 0, 0, 0, 0, 87, 0, 0, 0, - 1506, 0, 0, 0, 0, 104, 1402, 1002, 1009, 0, - 0, 1003, 0, 1004, 1024, 1026, 981, 0, 1046, 1046, + 0, 376, 0, 367, 369, 0, 439, 459, 1418, 1419, + 0, 0, 396, 400, 401, 402, 0, 1528, 153, 0, + 0, 0, 648, 0, 676, 0, 0, 0, 0, 0, + 0, 181, 518, 708, 709, 710, 711, 712, 713, 714, + 715, 716, 0, 403, 0, 0, 0, 403, 403, 403, + 0, 733, 390, 0, 0, 704, 701, 540, 0, 230, + 231, 233, 0, 0, 0, 0, 0, 547, 989, 1435, + 1436, 1437, 0, 1456, 1460, 141, 0, 0, 0, 0, + 594, 604, 0, 520, 605, 616, 620, 617, 625, 635, + 636, 746, 747, 748, 98, 766, 772, 907, 928, 1055, + 1063, 1067, 0, 0, 0, 0, 1375, 1359, 376, 1362, + 1363, 1365, 1367, 1368, 1370, 1371, 1103, 1104, 1108, 0, + 1187, 0, 1189, 1382, 0, 1412, 0, 0, 0, 1218, + 0, 0, 0, 1229, 1228, 1230, 0, 1232, 1233, 1238, + 1239, 1243, 0, 1245, 1247, 1248, 0, 0, 0, 1259, + 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 0, + 1137, 1140, 1271, 1147, 1148, 1153, 1274, 0, 0, 1183, + 1286, 0, 1291, 0, 0, 1297, 0, 1301, 0, 1307, + 1308, 1310, 1312, 0, 0, 0, 0, 0, 1015, 996, + 67, 1394, 1396, 0, 1471, 1469, 1469, 1479, 1480, 0, + 0, 1487, 0, 0, 0, 0, 87, 0, 0, 0, + 1507, 0, 0, 0, 0, 104, 1403, 1003, 1010, 0, + 0, 1004, 0, 1005, 1025, 1027, 982, 0, 1047, 1047, 93, 94, 0, 195, 0, 197, 223, 224, 0, 200, 202, 203, 204, 210, 211, 212, 205, 0, 0, 305, - 307, 0, 0, 350, 361, 351, 0, 0, 1421, 1422, - 1423, 1424, 1425, 1426, 1427, 1428, 988, 154, 155, 156, - 639, 0, 649, 0, 990, 0, 642, 0, 529, 0, - 0, 0, 403, 403, 403, 0, 0, 0, 0, 717, - 0, 0, 680, 0, 688, 0, 0, 0, 234, 235, - 0, 1454, 583, 0, 139, 140, 0, 0, 588, 522, - 523, 1100, 0, 0, 0, 1101, 1359, 0, 0, 0, - 0, 1378, 0, 0, 0, 0, 1224, 0, 0, 0, - 1250, 0, 0, 0, 669, 670, 0, 1314, 1141, 1402, - 0, 1143, 1153, 1154, 0, 1143, 1284, 0, 0, 0, - 0, 0, 0, 0, 1043, 0, 0, 0, 0, 1034, - 1395, 1400, 0, 0, 1473, 0, 1466, 1469, 1467, 1480, - 0, 0, 1487, 0, 1489, 0, 1511, 1512, 1504, 0, - 1496, 1499, 1495, 1498, 1411, 1006, 0, 1011, 0, 1402, - 92, 0, 198, 0, 0, 0, 0, 0, 0, 0, -======= - -68, -65, -66, -69, -70, -71, -72, -73, -14, -17, - -67, -32, -33, -74, -75, -76, -77, -78, -16, -18, - -19, -9, -8, -13, 10, 11, -108, -34, 33, -39, - -49, 225, -50, -40, 226, -51, 228, 227, 265, 229, - 249, 635, 258, 75, 319, 320, 322, 323, 324, 325, - -109, 631, 263, 264, 231, 37, 46, 34, 35, 38, - 235, 271, 272, 234, -10, -35, 9, -417, 12, 463, - 260, 259, 29, -12, 525, 87, -80, -416, 680, -252, - -236, 23, 34, 30, -235, -231, -127, -236, 21, 19, - 8, -79, -79, -79, 13, 14, -79, -352, -354, -12, - 26, 87, 159, 9, 87, -79, -56, -55, -53, -52, - -54, -57, 32, -46, -47, -376, -45, -42, 230, 227, - 275, 123, 124, 265, 266, 267, 229, 249, 264, 268, - 263, 284, -41, 82, 34, 525, 528, -359, 226, 232, - 233, 228, 464, 126, 125, 76, -356, 378, 558, 650, - -57, 652, 101, 104, 651, 45, 239, 653, 654, 655, - 565, 656, 248, 657, 658, 659, 660, 666, 606, 667, - 668, 669, 127, 8, -79, -303, -299, 91, -292, 522, - 251, 556, 557, 300, 82, 42, 531, 375, 378, 558, - 493, 650, 319, 335, 329, 498, 499, 500, 358, 350, - 523, 559, 532, 303, 252, 288, 644, 348, 135, 652, - 307, 560, 266, 383, 384, 561, 385, 101, 322, 426, - 665, 306, 562, 663, 104, 651, 327, 80, 492, 52, - 647, 45, 261, 346, 234, 342, 653, 289, 563, 534, - 282, 126, 123, 672, 37, 338, 51, 31, 662, 125, - 50, 654, 150, 564, 655, 565, 387, 365, 638, 49, - 388, 267, 566, 85, 272, 527, 310, 646, 389, 512, - 339, 390, 299, 661, 231, 567, 626, 618, 619, 391, - 392, 639, 370, 366, 371, 514, 568, 418, 497, 393, - 622, 623, 679, 53, 569, 570, 640, 124, 571, 79, - 656, 81, 333, 334, 572, 297, 250, 517, 518, 420, - 362, 475, 482, 483, 111, 112, 478, 113, 484, 114, - 485, 486, 487, 476, 115, 108, 477, 488, 489, 363, - 364, 116, 490, 110, 109, 479, 481, 117, 491, 248, - 36, 394, 524, 301, 59, 305, 276, 421, 47, 368, - 676, 46, 633, 519, 573, 637, 361, 357, 472, 54, - 574, 575, 576, 577, 494, 657, 360, 332, 356, 671, - 4, 294, 495, 658, 63, 233, 373, 372, 374, 283, - 417, 353, 578, 579, 580, 255, 83, 581, 343, 22, - 582, 583, 395, 290, 584, 57, 585, 586, 424, 264, - 587, 55, 659, 40, 588, 269, 673, 660, 589, 312, - 313, 590, 591, 632, 592, 271, 593, 397, 594, 620, - 621, 396, 367, 369, 520, 278, 398, 236, 526, 595, - 311, 337, 268, 664, 596, 256, 508, 509, 510, 511, - 645, 516, 515, 270, 275, 263, 425, 257, 597, 598, - 599, 600, 601, 304, 617, 602, 603, 323, 666, 473, - 44, 604, 605, 606, 607, 608, 298, 293, 419, 428, - 62, 84, 380, 609, 610, 643, 331, 328, 291, 611, - 320, 56, 667, 668, 669, 285, 670, 501, 502, 503, - 504, 10, 677, 678, 496, 400, 127, 295, 296, 48, - 354, 277, 612, 308, 613, 344, 345, 359, 330, 355, - 629, 321, 627, 279, 401, 474, 265, 614, 427, 292, - 376, 381, 309, 530, 513, 284, 402, 642, 529, 505, - 506, 352, 349, 286, 507, 615, 631, 403, 240, 280, - 281, 616, 628, 404, 405, 302, 406, 314, 316, 416, - 317, 318, 407, 408, 409, 410, 413, 414, 415, 412, - 315, 411, 630, 624, 625, 287, 528, 326, 347, 382, - 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, - 454, 455, 456, 457, 458, 459, 460, 461, 471, 238, - -79, 238, -190, -299, 238, 238, 96, 526, 651, -271, - 414, 415, 384, -289, 386, 399, 394, 404, 392, -280, - 395, 397, 278, -400, 418, 238, 401, 225, 387, 396, - 405, 406, 314, 416, 316, 302, 412, 407, 315, 411, - 287, 408, 409, 410, 413, -383, 177, 655, 670, 135, - 351, 391, 389, 419, 633, 91, -305, 91, 92, 93, - -292, 321, -307, 326, -293, -383, -292, 324, -79, -79, - -309, -309, -129, 633, 636, -209, -144, 143, -159, -162, - -150, -154, -203, -204, -205, -206, -160, -219, -258, 166, - 167, 174, 144, -215, -163, 27, 521, 465, 464, 177, - 32, -153, 220, 69, 70, 467, 146, 58, 12, 440, - 441, -161, 435, 442, 437, 492, 494, 495, 496, 493, - 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, - 497, 469, 470, 118, 471, 108, 110, 109, 472, 473, - 474, 348, 519, 520, 514, 517, 518, 516, 515, 363, - 364, 475, 476, 477, 111, 112, 113, 114, 115, 116, - 117, 478, 481, 479, 480, 482, 483, 484, 489, 490, - 485, 486, 487, 488, 491, -89, -101, 547, 546, -102, - -151, -152, -165, -166, -293, -299, 243, 434, 237, 172, - 463, -155, -148, -217, 107, 92, 93, -8, -213, 433, - 438, 439, 443, 436, 533, 535, 550, 551, 553, 538, - 543, 542, 545, 508, 509, 510, 511, 512, 513, 618, - 619, 620, 621, 622, 623, 624, 625, -383, -292, 91, - -157, -156, -199, 94, 99, 102, 103, 105, -406, 261, - 344, 345, 119, -417, 648, 90, 95, 96, 97, 98, - 120, 121, 178, 179, 180, 181, 182, 183, 184, 185, - 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, - 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 219, 45, 400, 400, -190, -79, -79, - -79, -79, -229, -127, -231, -10, -8, -417, -79, -8, - -9, -13, -35, -37, 552, -36, -299, 100, -236, -252, - 13, 162, 43, 51, -234, -235, -12, -8, -144, 20, - 24, 25, -132, 168, -144, -299, -132, -278, 242, -79, - -79, -267, -312, 321, -269, 419, 633, 418, -259, -272, - 91, -258, -271, 417, -12, -353, 159, -339, -343, -293, - 253, -369, 249, -190, -79, -362, -361, -293, -417, -128, - -288, 239, 247, 246, 136, -387, 139, 295, 434, 237, - -52, -53, -54, -271, 176, 654, -110, 270, 274, 88, - 88, -343, -342, -341, -388, 274, 253, -368, -360, 245, - 254, -349, 246, 247, -344, 239, 137, -388, -344, 244, - 254, 249, 253, 274, 274, 127, 274, 127, 274, 274, - 274, 274, 274, 274, 274, 274, 274, 269, -350, 151, - -350, 529, 529, -356, -388, 249, 239, -388, -388, 245, - -290, -344, 241, 26, 241, 36, 36, -350, -350, -350, - -271, 176, -350, -350, -350, -350, 282, 282, -350, -350, - -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, - -350, -350, -350, -350, -350, 238, -387, -136, 411, 302, - 316, 314, 82, -55, 284, -38, -190, -288, 239, 240, - -387, 271, -190, 221, -190, -414, -190, 96, 96, -282, - 159, 16, -282, -279, 400, 398, 385, 390, -282, -282, - -282, -282, 285, 383, -345, 239, 36, 250, 400, 285, - 383, 285, 286, 285, 286, 393, 403, 285, -304, 15, - 162, 434, 388, 392, 278, 238, 279, 240, 402, 286, - -304, -304, 90, -304, 90, 90, -283, 159, 285, 400, - 281, -282, -282, -310, -417, -295, -293, -291, 230, 24, - 142, 26, 28, 145, 177, 130, 20, 146, 38, 232, - 351, 249, 176, 245, 464, 225, 73, 533, 435, 437, - 433, 440, 466, 467, 434, 386, 32, 14, 535, 29, - 259, 25, 39, 170, 227, 149, 536, 262, 27, 260, - 118, 121, 538, 23, 76, 254, 15, 247, 41, 17, - 539, 540, 18, 243, 242, 162, 239, 71, 12, 220, - 30, 158, 67, 541, 137, 542, 543, 544, 545, 131, - 69, 159, 21, 674, 438, 439, 34, 634, 521, 273, - 172, 74, 60, 636, 143, 436, 546, 547, 119, 548, - 122, 77, 641, 139, 19, 72, 43, 549, 274, 550, - 244, 675, 551, 422, 552, 160, 228, 463, 70, 161, - 648, 553, 649, 237, 399, 9, 468, 33, 258, 246, - 129, 68, 554, 238, 148, 469, 470, 241, 132, 120, - 8, 136, 35, 13, 75, 78, 441, 442, 443, 58, - 128, 525, 147, 16, 555, 423, 141, 635, 429, 430, - 431, 432, -383, 637, -310, -310, 33, 92, -409, -410, - -411, 525, 422, 241, -293, -190, -85, 626, 229, -86, - 632, 24, 236, -134, 400, -122, 177, 655, 638, 639, - 640, 637, 397, 645, 643, 641, 285, 642, 88, 139, - 141, 142, 4, -144, 158, -200, 151, 152, 153, 154, - 155, 156, 157, 162, 143, 145, 159, -245, 140, 163, - 164, 165, 166, 167, 168, 169, 171, 170, 172, 173, - 160, 161, 176, 223, 224, -154, -154, -154, -154, -215, - -221, -220, -417, -217, -383, -292, -299, -417, -417, -154, - -277, -417, -417, -150, -417, -417, -417, -224, -144, -417, - -417, -421, -417, -421, -421, -328, -417, -328, -417, -417, - -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, - -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, - -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, - -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, - -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, - -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, - -417, -417, -417, -417, 221, -417, -417, -417, -417, -417, - -328, -328, -328, -328, -328, -417, -417, -417, -417, -417, - -417, -417, -417, -417, -417, -417, -417, -417, -417, 103, - 99, 102, 94, -219, 105, 90, 90, 90, 90, -8, - -9, -209, -417, -309, -397, -398, -193, -190, -417, 302, - 314, -293, -293, 271, -234, -12, -8, -229, -235, -231, - -8, -120, -133, 64, 65, -135, 25, 39, 68, 66, - 24, -418, 89, -418, -252, -418, 88, -37, -255, 87, - 62, 44, 90, 90, 88, 22, -230, -232, -144, 15, - -297, 4, -296, 26, -293, 90, 221, 15, -191, 30, - -190, -278, -278, 88, 91, 321, -268, -270, 420, 422, - 151, -298, -293, 90, 32, 89, 88, -190, -317, -320, - -322, -321, -323, -318, -319, 348, 349, 177, 352, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 365, 33, - 261, 344, 345, 346, 347, 366, 367, 368, 369, 371, - 372, 373, 374, 329, 350, 523, 330, 331, 332, 333, - 334, 335, 337, 338, 341, 339, 340, 342, 343, -384, - -383, 87, 64, 65, 89, 88, -324, 87, -144, -136, - 238, -383, 239, 239, 239, -79, 463, -350, -350, -350, - 269, 20, -45, -42, -376, 19, -41, -42, 230, 123, - 124, 227, 87, -339, 87, -348, -384, -383, 87, 137, - 244, 136, -347, -344, -347, -348, -383, -217, -383, 137, - 137, -383, -383, -264, -293, -264, -264, 24, -264, 24, - -264, 24, 96, -293, -264, 24, -264, 24, -264, 24, - -264, 24, -264, 24, 32, 79, 80, 81, 32, 83, - 84, 85, -217, -383, -383, -217, -339, -217, -190, -383, - -271, 96, 96, 96, -350, -350, 96, 90, 90, 90, - -350, -350, 96, 90, -301, -299, 90, 90, -389, 255, - 299, 301, 96, 96, 96, 96, 32, 90, -390, 32, - 662, 661, 663, 664, 665, 90, 96, 32, 96, 32, - 96, -293, 87, -190, -142, 289, 225, 227, 230, 77, - 90, 305, 306, 303, 312, 313, 308, 309, 90, 305, - 303, 312, 313, 308, 309, 90, 305, 306, 303, 312, - 313, 308, 309, 151, 45, 88, 241, 238, -383, -284, - 243, -284, -293, -300, -299, -291, -413, 88, -412, 23, - 429, 430, 432, 389, 431, 90, -144, -346, 15, 162, - -304, -304, -282, -190, -346, -304, -282, -190, -282, -282, - -282, -282, -304, -304, -304, -282, -299, -299, -190, -190, - -190, -190, -190, -190, -190, -310, -283, -282, -282, 637, - -282, 317, 637, 90, -276, 15, 77, -310, -310, 88, - 327, 423, 424, -308, 324, -81, -293, 90, -15, -11, - -23, -22, -24, 151, -15, 88, 525, -183, -190, 637, - 637, 637, 637, 637, 637, -144, -144, -144, -144, 548, - -207, 119, 143, 120, 121, -162, -208, -213, -215, 106, - 162, 145, 159, -245, -150, -154, -150, -150, -150, -150, - -150, -150, -150, -150, -150, -150, -150, -150, -150, -311, - -293, 90, 177, -158, -157, 105, -406, -158, 522, 88, - -220, 221, -144, -144, -383, -144, -293, -130, -132, -130, - -144, -222, -223, 147, -217, -144, -418, -418, 96, 105, - 168, -126, 25, 39, -126, -126, -126, -126, -144, -144, - -144, -144, -144, -144, -144, -144, -144, -144, -126, -293, - -293, -119, -118, 445, 446, 447, 448, 450, 451, 452, - 455, 456, 460, 461, 444, 462, 449, 454, 457, 458, - 459, 453, 347, -144, -144, -144, -144, -144, -144, -87, - -144, 130, 131, 132, -209, -144, -150, -144, -144, -144, - -418, -144, -144, -144, -210, -209, -382, -381, -380, -144, - -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, - -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, - -144, -144, -418, -144, -164, -148, 96, -260, 105, 92, - -144, -144, -131, -130, -295, -300, -291, -292, -130, -131, - -131, -130, -130, -144, -144, -144, -144, -144, -144, -144, - -144, -418, -144, -144, -144, -144, -144, -252, -418, -209, - 88, -399, 422, 423, 634, -302, 274, -301, 26, -210, - 90, 90, 15, -262, 78, -293, -234, -234, 60, -130, - -135, -418, -36, 26, -254, -293, 63, 90, -329, -271, - 375, 376, 177, -144, -144, 88, -233, 28, 29, -190, - -296, 168, -300, -190, -263, 274, -190, -168, -170, -171, - -172, -193, -216, -417, -173, -8, 544, 541, 15, -183, - -184, -192, -299, -269, -312, -268, 88, 421, 423, 424, - 77, 122, -144, -330, 176, -358, -357, -356, -339, -341, - -342, -343, 89, -330, -335, 381, 380, -324, -324, -324, - -324, -324, -329, -329, -329, -329, 87, 87, -324, -324, - -324, -324, -332, 87, -332, -332, -333, -332, 87, -333, - -334, 87, -334, -369, -144, -366, -365, -363, -364, 248, - 101, 616, 572, 525, 565, 606, 78, -361, -233, 96, - -418, -142, -285, 243, -367, -364, -383, -383, -383, -285, - 91, 90, 91, 90, 91, 90, -111, -59, -1, 674, - 675, 676, 88, 20, -340, -339, -58, 299, -372, -373, - 274, -368, -362, -348, 137, -347, -348, -348, -383, 88, - 30, 127, 127, 127, 127, 525, 227, 33, -286, 564, - 143, 616, 572, -339, -58, 241, 241, -311, -311, -311, - 90, 90, -281, 670, -183, -138, 291, 151, 280, 280, - 238, 238, 293, -190, 304, 307, 305, 306, 303, 312, - 313, 308, 309, 24, 24, 24, 24, 24, 24, 24, - 305, 303, 312, 313, 308, 309, 318, 24, 24, 24, - 24, 24, 24, 304, 307, 305, 306, 303, 312, 313, - 308, 309, 24, 24, 24, 24, 24, 24, 24, 292, - 294, 296, 282, -190, -190, -284, 77, -185, -190, 27, - -299, -412, -190, 284, -190, -282, -282, -190, -282, -282, - -190, -411, 328, -293, 362, 627, 628, 630, 629, -122, - 422, 88, 525, 23, -123, 23, -417, 119, 120, 121, - -208, -150, -154, -150, 142, 262, -417, -217, -418, -295, - 26, 88, 78, -418, 88, 88, -418, -418, 88, 15, - -225, -223, 149, -144, -418, 88, -418, -418, -418, -209, - -144, -144, -144, -144, -418, -418, -418, -418, -418, -418, - -418, -418, -418, -418, -209, 88, 88, 15, -315, 26, - -418, -418, -418, -418, -418, -224, -418, 15, -418, 78, - 88, 162, 88, -418, -418, -418, 88, 88, -418, -418, - 88, 88, -418, 88, 88, 88, -418, 88, 88, 88, - 88, -418, -418, -418, -418, 88, 88, 88, 88, 88, - 88, 88, 88, 88, 88, -418, -94, 549, -418, -418, - 88, -418, 88, -418, -417, 221, -418, -418, -418, -418, - -418, 88, 88, 88, 88, 88, 88, -418, -418, -418, - 88, 88, -418, 88, -418, 88, -418, -398, 633, 423, - -197, -196, -194, 75, 242, 76, -417, -301, -418, -158, - -260, -261, -260, -202, -293, 96, 105, -236, -167, -169, - 15, -135, -215, 89, 88, -329, -240, -246, -279, -293, - 90, 177, -331, 177, -331, 375, 376, -232, 221, -198, - 16, -201, 33, 58, -11, -417, -417, 33, 88, -186, - -188, -187, -189, 67, 71, 73, 68, 69, 70, 74, - -306, 26, -8, -168, -8, -417, -190, -183, -419, 15, - 78, -419, 88, 221, -270, -273, 425, 422, 428, -383, - 90, -110, 88, -356, -343, -237, -139, 41, -336, 382, - -329, 532, -329, -338, 90, -338, 96, 96, 96, 89, - -48, -43, -44, 34, 82, -363, -350, 90, 40, -350, - -350, -293, 89, -233, -138, -190, 143, 77, -367, -367, - -367, -299, -2, 673, 679, 137, 87, 385, 19, -254, - 88, 89, -218, 300, 89, -112, -293, 89, 87, -348, - -348, -293, -417, 238, 32, 32, 616, 572, 564, -58, - -218, -217, -383, -330, 672, 671, 89, 240, 298, -143, - 440, -140, 90, 91, -190, -190, -190, -190, -190, 230, - 227, 408, -407, 310, -407, -407, 90, -407, 408, -407, - -407, 283, 241, -183, -190, 88, -84, 257, 252, -304, - -304, 34, -190, 422, 646, 644, -144, 142, 262, -162, - -154, -150, -313, 177, 348, 261, 346, 342, 362, 353, - 380, 344, 381, 339, 338, 337, -313, -311, -209, -132, - -144, -144, 150, -144, 148, -144, -418, -418, -418, -418, - -418, -229, -144, -144, -144, -418, 177, 348, 15, -144, - -311, -144, -144, -144, -144, -144, -380, -144, -209, -144, - -209, -144, -144, -144, -144, -144, -381, -381, -381, -381, - -381, -209, -209, -209, -209, -417, -293, -97, -96, -95, - 599, 242, -94, -164, -97, -164, -131, -295, -144, -144, - -144, -144, -144, -144, -144, -144, -144, -144, -194, -344, - -344, -344, -264, 88, -275, 23, 15, 58, 58, -167, - -198, -168, -135, -293, -243, 626, -249, 47, -247, -248, - 48, -244, 49, 57, -331, -331, 168, -234, -144, -265, - 77, -266, -274, -217, -212, -214, -213, -417, -253, -418, - -293, -264, -266, -170, -171, -171, -170, -171, 67, 67, - 67, 72, 67, 72, 67, -187, -299, -418, -144, -302, - 78, -168, -168, -192, -299, 168, 422, 426, 427, -356, - -405, 119, 143, 32, 77, 378, 101, -403, 176, 561, - 611, 616, 572, 565, 606, -404, 244, 136, 137, 256, - 26, 42, 89, 88, 89, 88, 89, 89, 88, -287, - -286, -44, -43, -350, -350, 96, -383, 90, 90, 240, - 27, -190, 77, 77, 77, -113, 677, 96, 87, -3, - 82, -144, 87, 20, -339, -217, -374, -325, -375, -326, - -327, -5, -6, -351, -116, 58, 101, -62, 45, 239, - 657, 658, 127, -417, 670, -366, -254, -370, -372, -190, - -147, -417, -146, -148, -155, 166, 167, 261, 344, 345, - -218, -190, -137, 289, 297, 87, -141, 92, -386, 78, - 280, 378, 280, 90, -408, 311, 90, -408, -408, 90, - -408, 90, -408, -408, -190, -84, -48, -190, -282, -282, - 34, -383, -418, -162, -154, -125, 162, 525, -316, 531, - -324, -324, -324, -334, -324, 334, -324, 334, -324, -418, - -418, -418, 88, -418, 23, -418, -144, 88, -121, 468, - 88, 88, -418, 87, 87, -144, -418, -418, -418, 88, - -418, -418, -418, -418, -418, 88, -418, -418, -418, 88, - -314, 617, -418, -418, -418, -418, -418, -418, -418, -418, - -418, -418, -93, -294, -293, -94, 581, 581, -418, -94, - -226, 88, -418, -418, 88, -418, 88, 88, -418, 88, - -418, 88, -418, -418, -418, -418, 88, -195, 23, -195, - -195, -418, -260, -190, -198, -227, 17, -240, 52, 354, - -251, -250, 56, 48, -248, 20, 50, 20, 31, -265, - 88, 151, 88, -418, -418, 88, 58, 221, -418, -198, - -181, -180, 77, 78, -182, 77, -180, 67, 67, -255, - 88, -263, -168, -198, -198, 221, 119, -417, -149, -161, - -147, 13, 90, 90, -383, -402, 661, 662, 32, 96, - -350, -350, 137, 137, -190, 87, -329, 90, -329, 96, - 96, 32, 83, 84, 85, 32, 79, 80, 81, -190, - -190, -190, -190, -371, 87, 20, -144, 87, 151, 89, - -254, -254, 276, 162, -350, 655, 282, 282, -350, -350, - -350, -115, -114, 677, 89, -418, 88, -337, 525, 528, - -144, -156, -156, -255, 89, -379, 525, -385, -293, -293, - -293, -293, 96, 98, 90, -418, 523, 74, 526, -418, - -329, -144, -144, -144, -234, 90, -144, -144, 96, 96, - -418, -144, -209, -144, -418, -178, -177, -179, 638, 119, - 32, -313, -418, -211, 274, -100, -99, -98, 15, -418, - -144, -144, -144, -144, -144, -144, -144, -417, 67, 19, - 17, -417, -417, -302, -227, -228, 18, 20, -241, 54, - -239, 53, -239, -250, 20, 20, 90, 20, 90, 137, - -274, -144, -214, 58, -11, -293, -212, -293, -229, -144, - 87, -144, -158, -198, -198, -144, -204, 492, 494, 495, - 496, 493, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 497, 471, 108, 110, 109, 472, 473, 474, - 348, 519, 520, 514, 517, 518, 516, 515, 363, 364, - 475, 476, 477, 111, 112, 113, 114, 115, 116, 117, - 478, 481, 479, 482, 483, 484, 489, 490, 485, 486, - 487, 488, 491, 508, 509, 510, 511, 512, 513, 618, - 619, 620, 621, 622, 623, 624, 625, 90, 90, 87, - -144, 89, 89, -255, -370, -59, 89, -256, -254, 96, - 89, 277, -213, -417, 90, -350, -350, -350, 96, 96, - -301, -418, 88, -293, -404, -372, 529, 529, -418, 26, - -378, -377, -295, 87, 78, 63, 524, 527, -418, -418, - 88, -418, -418, -418, 89, 89, -418, -418, -418, 88, - -418, -177, -179, -418, 77, -158, -229, 20, -97, 299, - 301, -97, -418, 88, -418, -418, 88, -418, 88, -418, - -418, -257, -418, -293, 244, 20, 20, -257, -257, -197, - -228, -107, -106, -105, 555, -144, -209, -242, 55, 77, - 122, 90, 90, 90, 13, -212, 221, -234, -254, -175, - 385, -229, -418, -254, 89, 26, 89, 679, 137, 89, - -213, -124, -417, 273, -301, 90, 90, -114, -117, -11, - 88, 151, -254, -190, 63, -144, -209, -418, 77, 536, - 638, -92, -91, -88, 649, 675, -209, -94, -94, -144, - -144, -144, 88, -418, -418, -418, -107, 88, -104, -103, - -293, 77, 122, -266, -293, 89, -418, -417, -234, 89, - -238, -11, 87, -3, 273, -325, -375, -326, -327, -5, - -6, -351, -82, 525, -377, -355, -295, 90, 96, 89, - 525, -418, -418, -90, 145, 647, 614, -145, -156, -153, - 220, -418, 88, -418, 88, -418, 88, -293, 244, -105, - 88, 26, -302, -176, -174, -293, 578, -395, -394, 521, - -405, -401, 119, 143, 101, -403, 616, 572, 128, 129, - -82, -144, 87, -418, -83, 288, 633, -386, 526, -90, - 648, 592, 567, 592, 567, -144, -144, -144, -103, -417, - -418, 88, 23, -317, -61, 589, -392, -393, 77, -396, - 391, 588, 609, 119, 90, 89, -254, 249, -379, 527, - 142, -418, 88, -418, 88, -418, -93, -174, 585, -330, - -158, -393, 77, -392, 77, 14, 13, -4, 678, 89, - 290, -90, -144, -144, -418, -60, 27, -175, -391, 257, - 252, 255, 33, -391, 96, -4, -418, -418, 589, 251, - 32, 119, -158, -178, -177, -177, -} - -var yyDef = [...]int{ - 925, -2, -2, 927, 2, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 72, 74, 75, 925, 925, 925, 0, 925, 0, - 0, 925, -2, -2, 925, 1542, 0, 925, 0, 0, - 0, 0, -2, 839, 845, 0, 854, -2, 0, 0, - 925, 925, 2112, 2112, 920, 0, 0, 0, 0, 0, - 925, 925, 925, 925, 1399, 52, 925, 0, 87, 88, - 874, 875, 876, 67, 0, 2110, 926, 1, 3, 73, - 77, 0, 0, 0, 60, 1408, 0, 80, 0, 0, - 929, 0, 0, 1525, 925, 925, 0, 128, 129, 130, - 0, 0, 0, 925, 0, -2, 134, -2, 163, 164, - 165, 0, 170, 638, 526, 578, 524, 563, -2, 512, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 529, 402, 402, 0, 0, -2, 512, 512, - 512, 1527, 0, 0, 0, 560, 464, 402, 402, 402, - 0, 402, 402, 402, 402, 0, 0, 402, 402, 402, - 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, - 402, 402, 402, 402, 1426, 169, 1543, 1540, 1541, 1700, - 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, - 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, - 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, - 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, - 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, - 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, - 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, - 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, - 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, - 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, - 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, - 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, - 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, - 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, - 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, - 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, - 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, - 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, - 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, - 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, - 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, - 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, - 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, - 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, - 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, - 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, - 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, - 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, - 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, - 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, - 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, - 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, - 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, - 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, - 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, - 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, - 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, - 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079, 2080, - 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, - 2091, 2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100, - 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 0, - 1519, 0, 751, 1028, 0, 0, 756, 0, 0, 828, - 760, 761, 828, 0, 828, 828, 828, 828, 0, 0, - 0, 771, 0, 0, 0, 0, 825, 0, 787, 788, - 0, 825, 825, 825, 0, 0, 799, 831, 0, 0, - 805, 828, 828, 808, 809, 2113, 0, 2113, 2113, 1510, - 0, 822, 820, 834, 835, 42, 838, 841, 842, 843, - 844, 847, 0, 858, 861, 1536, 1537, 0, 863, 870, - 887, 888, 0, 921, 922, 47, 1176, 0, 1050, 1055, - 1066, 1081, 1082, 1083, 1084, 1085, 1087, 1088, 1089, 0, - 0, 0, 0, 1094, 1095, 0, 0, 0, 0, 0, - 1157, 1103, 0, 0, 0, 0, 1372, 0, 0, 1333, - 1333, 1191, 1333, 1335, 1335, 1749, 1885, 1893, 2015, 1711, - 1716, 1717, 1718, 2008, 2009, 2010, 2011, 2050, 2051, 2055, - 1809, 0, 0, 0, 2109, 1846, 1854, 1855, 1879, 1980, - 2036, 1728, 1874, 1945, 1806, 1828, 1829, 1962, 1963, 1850, - 1851, 1832, 1844, 1847, 1835, 1836, 1838, 1840, 1845, 1852, - 1858, 1837, 1857, 1856, 0, 1833, 1834, 1839, 1849, 1853, - 1841, 1842, 1843, 1848, 1859, 0, 0, 0, 0, 0, - 1272, 1273, 1274, 1275, 0, 0, 0, 0, 0, 0, - 0, 294, 295, 1385, 1386, 45, 46, 1175, 1506, 1335, - 1335, 1335, 1335, 1335, 1117, 1118, 1119, 1120, 1121, 1145, - 1146, 1152, 1153, 1957, 1958, 1959, 1960, 1790, 2045, 1798, - 1799, 1940, 1941, 1811, 1812, 2084, 2085, -2, -2, -2, - 235, 236, 237, 238, 239, 240, 241, 242, 0, 1753, - 2026, 2027, 231, 0, 0, 299, 300, 296, 297, 298, - 1159, 1160, 252, 253, 254, 255, 256, 257, 258, 259, - 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 2112, 0, 897, 0, 0, 0, - 0, 0, 1408, 0, 1400, 1399, 65, 0, -2, 0, - 0, 0, 0, 49, 0, 54, 985, 928, 79, 78, - 1457, 0, 0, 0, 61, 1409, 69, 71, 1410, 0, - 930, 931, 0, 961, 965, 0, 0, 0, 1526, 1525, - 1525, 104, 0, 0, 105, 125, 126, 127, 0, 0, - 111, 112, 1512, 1513, 131, 0, 0, 181, 182, 0, - 43, 429, 0, 177, 947, 0, 422, 361, 0, 1426, - 0, 0, 0, 0, 0, 925, 0, 1520, 158, 159, - 166, 167, 168, 402, 402, 402, 575, 0, 0, 169, - 169, 533, 534, 535, 0, 0, -2, 427, 0, 513, - 0, 0, 416, 416, 420, 418, 419, 0, 0, 0, - 0, 0, 0, 0, 0, 552, 0, 553, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 699, 0, 403, - 0, 573, 574, 465, 0, 0, 0, 0, 0, 0, - 0, 0, 1528, 1529, 0, 550, 551, 0, 0, 0, - 402, 402, 0, 0, 0, 0, 402, 402, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 157, 1448, 0, 0, - 0, 0, 0, -2, 0, 743, 0, 0, 0, 1521, - 1521, 0, 750, 0, 752, 1439, 754, 757, 758, 759, - 0, 0, 762, 0, 825, 825, 823, 824, 764, 765, - 766, 767, 828, 0, 0, 411, 412, 413, 825, 828, - 0, 828, 828, 828, 828, 825, 825, 825, 828, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2113, 831, - 828, 828, 0, 828, 795, 0, 800, 0, 801, 802, - 803, 806, 807, 810, 2114, 2115, 1538, 1539, 1546, 1547, - 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, - 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, - 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, - 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, - 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, - 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, - 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, - 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, - 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, - 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, - 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, - 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, - 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, - 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, - 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, - 1698, 1699, 2113, 2113, 814, 818, 1511, 840, 846, 848, - 849, 0, 0, 859, 862, 881, 51, 1797, 869, 51, - 871, 872, 873, 900, 901, 906, 0, 0, 0, 0, - 912, 913, 914, 0, 0, 917, 918, 919, 0, 0, - 0, 0, 0, 1048, 0, 0, 1165, 1166, 1167, 1168, - 1169, 1170, 1171, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1067, 1068, 0, 0, 0, 1090, 1091, 1092, 1093, 1096, - 0, 1108, 0, 1110, 1381, -2, 0, 0, 0, 1101, - 1102, 0, 0, 0, 0, 0, 0, 0, 1373, 0, - 0, 1189, 0, 1190, 1192, 1193, 0, 1194, 935, 935, - 935, 935, 935, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 935, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1531, 145, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 945, 0, 0, 945, 945, 0, 0, - 224, 225, 226, 227, 228, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 243, - 244, 245, 246, 247, 248, 301, 249, 250, 251, 1175, - 0, 0, 0, 48, 889, 890, 0, 1011, 1531, 0, - 0, 0, 941, 0, 59, 68, 70, 1408, 63, 1408, - 0, 0, 0, -2, -2, 948, 954, 955, 956, 957, - 958, 56, 2111, 57, 0, 76, 0, 50, 0, 0, - 0, 0, 375, 1460, 0, 0, 1401, 1402, 1405, 0, - 962, 1891, 966, 0, 968, 969, 0, 0, 102, 0, - 1027, 0, 0, 0, 113, 0, 115, 116, 0, 0, - 0, 386, 1514, 1515, 1516, -2, 409, 0, 386, 370, - 309, 310, 311, 361, 313, 361, 361, 361, 361, 375, - 375, 375, 375, 344, 345, 346, 347, 348, 0, 0, - 330, 361, 361, 361, 361, 351, 352, 353, 354, 355, - 356, 357, 358, 314, 315, 316, 317, 318, 319, 320, - 321, 322, 363, 363, 363, 363, 363, 367, 367, 0, - 44, 0, 952, 953, 390, 0, 1405, 0, 0, 1448, - 1523, 1533, 0, 0, 0, 1523, 136, 0, 0, 0, - 576, 649, 527, 564, 577, 0, 530, 531, -2, 0, - 0, 512, 0, 514, 0, 410, 0, -2, 0, 420, - 0, 416, 420, 417, 420, 408, 421, 554, 555, 556, - 0, 558, 559, 679, 997, 0, 0, 0, 0, 0, - 685, 686, 687, 0, 689, 690, 691, 692, 693, 694, - 695, 696, 697, 698, 565, 566, 567, 568, 569, 570, - 571, 572, 0, 0, 0, 0, 514, 0, 561, 0, - 0, 466, 467, 468, 0, 0, 471, 472, 473, 474, - 0, 0, 477, 478, 479, 1014, 1015, 480, 481, 506, - 507, 508, 482, 483, 484, 485, 486, 487, 488, 500, - 501, 502, 503, 504, 505, 489, 490, 491, 492, 493, - 494, 497, 0, 151, 1430, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1521, 0, 0, - 0, 0, 944, 1029, 1544, 1545, 753, 0, 1440, 0, - 1443, 1444, 1445, 1446, 1447, 829, 830, 0, 414, 415, - 828, 828, 768, 815, 0, 828, 772, 816, 773, 775, - 774, 776, 789, 790, 828, 779, 826, 827, 780, 781, - 782, 783, 784, 785, 786, 811, 791, 792, 793, 798, - 794, 796, 797, 832, 0, 836, 837, 812, 813, 0, - 0, 852, 853, 0, 860, 884, 882, 883, 885, 877, - 878, 879, 880, 0, 886, 0, 0, 903, 98, 908, - 909, 910, 911, 923, 916, 1177, 1045, 1046, 1047, 0, - 1049, 1052, 0, 1161, 1163, 1054, 1056, 1172, 1173, 1174, - 0, 0, 0, 0, 0, 1060, 1064, 1069, 1070, 1071, - 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1086, - 1349, 1350, 1351, 1105, 302, 303, 0, 1106, 0, 0, - 0, 0, 0, 0, 0, 1176, 1107, 0, 959, 0, - 0, 1379, 1376, 0, 0, 0, 1334, 1336, 0, 0, - 0, 0, 936, 937, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, - 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, - 1330, 1331, 1332, 1352, 0, 0, 0, 0, 0, 1372, - 0, 1112, 1113, 1114, 0, 0, 0, 0, 0, 0, - 1232, 0, 0, 0, 0, 1532, 0, 146, 147, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1276, 1277, 1278, 1279, 41, - 0, 0, 0, 946, 1383, 0, -2, -2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1301, 0, 0, 0, 0, 0, 0, 1504, 0, - 0, 892, 893, 895, 0, 1031, 0, 1012, 0, 0, - 898, 899, 0, 940, 0, 943, 62, 64, 0, 970, - 949, 58, 53, 0, 0, 989, 1458, 375, 1480, 0, - 384, 384, 381, 1411, 1412, 0, 1404, 1406, 1407, 81, - 967, 963, 0, 1043, 0, 0, 1026, 0, 973, 975, - 976, 977, 1009, 0, 980, 981, 0, 0, 0, 0, - 0, 100, 1028, 106, 0, 114, 0, 0, 119, 120, - 107, 108, 109, 110, 0, 638, -2, 461, 183, 185, - 186, 187, 178, -2, 373, 371, 372, 312, 375, 375, - 338, 339, 340, 341, 342, 343, 0, 0, 331, 332, - 333, 334, 323, 0, 324, 325, 326, 365, 0, 327, - 328, 0, 329, 428, 0, 1413, 391, 392, 394, 402, - 0, 397, 398, 0, 402, 402, 0, 423, 424, 0, - 1405, 1430, 0, 0, 0, 1534, 1533, 1533, 1533, 0, - 171, 172, 173, 174, 175, 176, 674, 0, 0, 650, - 672, 673, 169, 0, 0, 179, 516, 515, 0, 706, - 0, 426, 0, 0, 420, 420, 405, 406, 557, 0, - 0, 681, 682, 683, 684, 0, 0, 0, 543, 455, - 0, 544, 545, 514, 516, 0, 0, 386, 469, 470, - 475, 476, 495, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 590, 591, 592, 595, 597, 598, - 599, 518, 605, 594, 596, 600, 601, 602, 518, 606, - 607, 609, 610, 611, 518, 617, 0, 608, 612, 613, - 614, 518, 618, 621, 622, 623, 626, 628, 629, 630, - 518, 636, 625, 627, 631, 632, 633, 518, 637, 1427, - 1428, 1429, 0, 0, 744, 0, 0, 452, 96, 1522, - 749, 1441, 755, 1442, 825, 778, 817, 825, 770, 777, - 804, 850, 851, 856, 864, 865, 866, 867, 868, 907, - 0, 0, 0, 0, 915, 0, 0, 1053, 1162, 1164, - 1057, 0, 1061, 1065, 0, 0, 0, 1111, 1109, 1383, - 0, 0, 0, 1158, 0, 0, 1180, 1181, 0, 0, - 0, 1377, 0, 0, 1187, 0, 1337, 1338, 1195, 0, - 0, 0, 0, 0, 1201, 1202, 1203, 1204, 1205, 1206, - 1207, 1208, 1209, 1210, 1399, 0, 0, 0, 0, 0, - 1216, 1217, 1218, 1219, 1220, 0, 1222, 0, 1223, 0, - 0, 0, 0, 1230, 1231, 1233, 0, 0, 1236, 1237, - 0, 0, 1238, 0, 0, 0, 1242, 0, 0, 0, - 0, 1251, 1252, 1253, 1254, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1265, 1266, 0, 1140, 0, - 0, 1140, 0, 1178, 945, 0, 1339, 1340, 1341, 1342, - 1343, 0, 0, 0, 0, 0, 0, 1299, 1300, 1302, - 0, 0, 1305, 0, 1307, 0, 1505, 891, 894, 896, - 983, 1032, 1033, 0, 0, 0, 0, 1013, 1530, 938, - 939, 942, 991, 0, 1387, 0, 0, 970, 1043, 971, - 0, 950, 55, 986, 0, 1462, 1461, 1474, 1487, 384, - 384, 378, 379, 385, 380, 382, 383, 1403, 0, 1408, - 0, 1498, 0, 0, 1490, 0, 0, 0, 0, 0, - 0, 0, 0, 1016, 0, 0, 1019, 0, 0, 0, - 0, 1010, 981, 0, 982, 0, -2, 0, 0, 94, - 95, 0, 0, 0, 117, 118, 0, 0, 124, 387, - 388, 160, 169, 463, 184, 436, 0, 0, 308, 374, - 335, 336, 337, 0, 359, 0, 0, 0, 0, 457, - 132, 1417, 1416, 402, 402, 393, 0, 396, 0, 0, - 0, 1535, 362, 425, 0, 150, 0, 0, 0, 0, - 0, 156, 644, 0, 0, 651, 0, 0, 0, 525, - 0, 536, 537, 0, 678, -2, 740, 390, 0, 404, - 407, 998, 0, 0, 538, 0, 541, 542, 456, 516, - 547, 548, 562, 549, 498, 499, 496, 0, 0, 1449, - 1450, 1455, 1453, 1454, 137, 583, 585, 584, 588, 0, - 0, 0, 520, 0, 520, 520, 0, 520, 0, 520, - 520, 581, 0, 452, 1413, 0, 748, 453, 454, 828, - 828, 902, 99, 0, 905, 0, 0, 0, 0, 1058, - 1062, 1344, 1370, 361, 361, 1357, 361, 367, 1360, 361, - 1362, 361, 1365, 361, 1368, 1369, 0, 0, 0, 960, - 0, 0, 1186, 1380, 0, 0, 1196, 1197, 1198, 1199, - 1200, 1374, 0, 0, 0, 1215, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 148, 149, 0, 0, - 0, 0, 0, 0, 1310, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1135, 1139, 0, 1141, 1142, - 0, 0, 1268, 0, 0, 1280, 0, 1384, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1034, 1039, - 1039, 1039, 0, 0, 0, 1517, 1518, 1388, 1389, 1043, - 1390, 972, 951, 990, 1480, 0, 1473, 0, -2, 1482, - 0, 0, 0, 1488, 376, 377, 964, 82, 1044, 85, - 0, 1498, 1507, 0, 1489, 1500, 1502, 0, 0, 0, - 1494, 0, 1043, 974, 1005, 1007, 0, 1002, 1017, 1018, - 1020, 0, 1022, 0, 1024, 1025, 985, 979, 0, 102, - 0, 1043, 1043, 101, 0, 1030, 121, 122, 123, 462, - 188, 193, 0, 0, 0, 198, 0, 200, 0, 0, - 0, 205, 206, 402, 402, 437, 0, 305, 307, 0, - 0, 191, 375, 0, 375, 0, 366, 368, 0, 438, - 458, 1414, 1415, 0, 0, 395, 399, 400, 401, 0, - 1524, 152, 0, 0, 0, 647, 0, 675, 0, 0, - 0, 0, 0, 0, 180, 517, 707, 708, 709, 710, - 711, 712, 713, 714, 715, 0, 402, 0, 0, 0, - 402, 402, 402, 0, 732, 389, 0, 0, 703, 700, - 539, 0, 229, 230, 232, 0, 0, 0, 0, 0, - 546, 985, 1431, 1432, 1433, 0, 1452, 1456, 140, 0, - 0, 0, 0, 593, 603, 0, 519, 604, 615, 619, - 616, 624, 634, 635, 745, 746, 747, 97, 763, 769, - 904, 924, 1051, 1059, 1063, 0, 0, 0, 0, 1371, - 1355, 375, 1358, 1359, 1361, 1363, 1364, 1366, 1367, 1099, - 1100, 1104, 0, 1183, 0, 1185, 1378, 0, 1408, 0, - 0, 0, 1214, 0, 0, 0, 1225, 1224, 1226, 0, - 1228, 1229, 1234, 1235, 1239, 0, 1241, 1243, 1244, 0, - 0, 0, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, - 1263, 1264, 0, 1133, 1136, 1267, 1143, 1144, 1149, 1270, - 0, 0, 1179, 1282, 0, 1287, 0, 0, 1293, 0, - 1297, 0, 1303, 1304, 1306, 1308, 0, 0, 0, 0, - 0, 1011, 992, 66, 1390, 1392, 0, 1467, 1465, 1465, - 1475, 1476, 0, 0, 1483, 0, 0, 0, 0, 86, - 0, 0, 0, 1503, 0, 0, 0, 0, 103, 1399, - 999, 1006, 0, 0, 1000, 0, 1001, 1021, 1023, 978, - 0, 1043, 1043, 92, 93, 0, 194, 0, 196, 222, - 223, 0, 199, 201, 202, 203, 209, 210, 211, 204, - 0, 0, 304, 306, 0, 0, 349, 360, 350, 0, - 0, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 985, - 153, 154, 155, 639, 0, 649, 0, 987, 0, 642, - 0, 528, 0, 0, 0, 402, 402, 402, 0, 0, - 0, 0, 717, 0, 0, 680, 0, 688, 0, 0, - 0, 233, 234, 0, 1451, 582, 0, 138, 139, 0, - 0, 587, 521, 522, 620, 1097, 0, 0, 0, 1098, - 1356, 0, 0, 0, 0, 1375, 0, 0, 0, 0, - 1221, 0, 0, 0, 1247, 0, 0, 0, 669, 670, - 0, 1311, 1138, 1399, 0, 1140, 1150, 1151, 0, 1140, - 1281, 0, 0, 0, 0, 0, 0, 0, 1040, 0, - 0, 0, 0, 1031, 1392, 1397, 0, 0, 1470, 0, - 1463, 1466, 1464, 1477, 0, 0, 1484, 0, 1486, 0, - 1508, 1509, 1501, 0, 1493, 1496, 1492, 1495, 1408, 1003, - 0, 1008, 0, 1399, 91, 0, 197, 0, 0, 0, ->>>>>>> e439161508 (fix: complete time period feature) - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -<<<<<<< HEAD - 0, 0, 0, 208, 209, 0, 0, 365, 370, 0, - 0, 0, 640, 0, 991, 652, 643, 0, 730, 0, - 734, 0, 0, 0, 737, 738, 739, 716, 0, 720, - 431, 704, 701, 702, 541, 0, 142, 143, 0, 0, - 0, 1348, 0, 1351, 1185, 1187, 0, 1214, 1215, 1216, - 1356, 1357, 1230, 1243, 1248, 0, 1251, 0, 0, 1252, - 0, 671, 1132, 0, 0, 1150, 1151, 0, 1286, 0, - 1291, 1292, 0, 1297, 0, 1301, 1312, 0, 1039, 996, - 997, 1044, 1045, 0, 0, 987, 1400, 85, 1401, 1398, - 0, 1396, 1394, 1462, 0, 1471, 1472, 1481, 1482, 1488, - 0, 1494, 0, 90, 0, 0, 0, 1411, 196, 0, - 215, 0, 648, 0, 651, 641, 728, 729, 0, 741, - 733, 735, 736, 718, -2, 1437, 0, 0, 0, 590, - 1349, 0, 0, 1253, 0, 667, 668, 1140, 1133, 0, - 1118, 1119, 1137, 1272, 1274, 0, 0, 0, 0, 1038, - 1040, 1041, 84, 0, 1397, 1158, 0, 1474, 1475, 1502, - 1500, 1007, 1014, 0, 91, 444, 437, 1437, 0, 0, - 0, 721, 722, 723, 724, 725, 726, 727, 580, 1439, - 144, 145, 510, 511, 512, 138, 0, 1191, 1249, 1134, - 0, 0, 0, 0, 1130, 1131, 0, 1287, 0, 1293, - 0, 1298, 0, 998, 999, 1399, 0, 0, 653, 0, - 655, 0, -2, 432, 445, 0, 190, 216, 217, 0, - 0, 220, 221, 222, 213, 214, 134, 0, 0, 742, - 0, 1440, 1441, 141, 0, 0, 1125, 1126, 1127, 1128, - 1129, 0, 0, 0, 1159, 1138, 654, 0, 0, 387, - 0, 664, 433, 434, 0, 440, 441, 442, 443, 218, - 219, 676, 0, 0, 587, 1350, 0, 1288, 0, 1294, - 0, 1299, 0, 656, 657, 665, 0, 435, 0, 436, - 0, 0, 0, 645, 0, 676, 1438, 1135, 0, 0, - 1157, 0, 666, 662, 446, 448, 449, 0, 0, 447, - 677, 646, 1289, 1295, 0, 450, 451, 452, 658, 659, - 660, 661, -======= - 0, 0, 0, 0, 0, 0, 0, 207, 208, 0, - 0, 364, 369, 0, 0, 0, 640, 0, 988, 652, - 643, 0, 730, 0, 734, 0, 0, 0, 737, 738, - 739, 716, 0, 720, 430, 704, 701, 702, 540, 0, - 141, 142, 0, 0, 0, 1345, 0, 1348, 1182, 1184, - 0, 1211, 1212, 1213, 1353, 1354, 1227, 1240, 1245, 0, - 1248, 0, 0, 1249, 0, 671, 1129, 0, 0, 1147, - 1148, 0, 1283, 0, 1288, 1289, 0, 1294, 0, 1298, - 1309, 0, 1036, 993, 994, 1041, 1042, 0, 0, 984, - 1397, 84, 1398, 1395, 0, 1393, 1391, 1459, 0, 1468, - 1469, 1478, 1479, 1485, 0, 1491, 0, 89, 0, 0, - 0, 1408, 195, 0, 214, 0, 648, 0, 651, 641, - 728, 729, 0, 741, 733, 735, 736, 718, -2, 1434, - 0, 0, 0, 589, 1346, 0, 0, 1250, 0, 667, - 668, 1137, 1130, 0, 1115, 1116, 1134, 1269, 1271, 0, - 0, 0, 0, 1035, 1037, 1038, 83, 0, 1394, 1155, - 0, 1471, 1472, 1499, 1497, 1004, 1011, 0, 90, 443, - 436, 1434, 0, 0, 0, 721, 722, 723, 724, 725, - 726, 727, 579, 1436, 143, 144, 509, 510, 511, 137, - 0, 1188, 1246, 1131, 0, 0, 0, 0, 1127, 1128, - 0, 1284, 0, 1290, 0, 1295, 0, 995, 996, 1396, - 0, 0, 653, 0, 655, 0, -2, 431, 444, 0, - 189, 215, 216, 0, 0, 219, 220, 221, 212, 213, - 133, 0, 0, 742, 0, 1437, 1438, 140, 0, 0, - 1122, 1123, 1124, 1125, 1126, 0, 0, 0, 1156, 1135, - 654, 0, 0, 386, 0, 664, 432, 433, 0, 439, - 440, 441, 442, 217, 218, 676, 0, 0, 586, 1347, - 0, 1285, 0, 1291, 0, 1296, 0, 656, 657, 665, - 0, 434, 0, 435, 0, 0, 0, 645, 0, 676, - 1435, 1132, 0, 0, 1154, 0, 666, 662, 445, 447, - 448, 0, 0, 446, 677, 646, 1286, 1292, 0, 449, - 450, 451, 658, 659, 660, 661, ->>>>>>> e439161508 (fix: complete time period feature) + 307, 0, 0, 350, 361, 351, 0, 0, 1422, 1423, + 1424, 1425, 1426, 1427, 1428, 1429, 989, 154, 155, 156, + 640, 0, 650, 0, 991, 0, 643, 0, 529, 0, + 0, 0, 403, 403, 403, 0, 0, 0, 0, 718, + 0, 0, 681, 0, 689, 0, 0, 0, 234, 235, + 0, 1455, 583, 0, 139, 140, 0, 0, 588, 522, + 523, 621, 1101, 0, 0, 0, 1102, 1360, 0, 0, + 0, 0, 1379, 0, 0, 0, 0, 1225, 0, 0, + 0, 1251, 0, 0, 0, 670, 671, 0, 1315, 1142, + 1403, 0, 1144, 1154, 1155, 0, 1144, 1285, 0, 0, + 0, 0, 0, 0, 0, 1044, 0, 0, 0, 0, + 1035, 1396, 1401, 0, 0, 1474, 0, 1467, 1470, 1468, + 1481, 0, 0, 1488, 0, 1490, 0, 1512, 1513, 1505, + 0, 1497, 1500, 1496, 1499, 1412, 1007, 0, 1012, 0, + 1403, 92, 0, 198, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 208, 209, 0, 0, 365, 370, + 0, 0, 0, 641, 0, 992, 653, 644, 0, 731, + 0, 735, 0, 0, 0, 738, 739, 740, 717, 0, + 721, 431, 705, 702, 703, 541, 0, 142, 143, 0, + 0, 0, 1349, 0, 1352, 1186, 1188, 0, 1215, 1216, + 1217, 1357, 1358, 1231, 1244, 1249, 0, 1252, 0, 0, + 1253, 0, 672, 1133, 0, 0, 1151, 1152, 0, 1287, + 0, 1292, 1293, 0, 1298, 0, 1302, 1313, 0, 1040, + 997, 998, 1045, 1046, 0, 0, 988, 1401, 85, 1402, + 1399, 0, 1397, 1395, 1463, 0, 1472, 1473, 1482, 1483, + 1489, 0, 1495, 0, 90, 0, 0, 0, 1412, 196, + 0, 215, 0, 649, 0, 652, 642, 729, 730, 0, + 742, 734, 736, 737, 719, -2, 1438, 0, 0, 0, + 590, 1350, 0, 0, 1254, 0, 668, 669, 1141, 1134, + 0, 1119, 1120, 1138, 1273, 1275, 0, 0, 0, 0, + 1039, 1041, 1042, 84, 0, 1398, 1159, 0, 1475, 1476, + 1503, 1501, 1008, 1015, 0, 91, 444, 437, 1438, 0, + 0, 0, 722, 723, 724, 725, 726, 727, 728, 580, + 1440, 144, 145, 510, 511, 512, 138, 0, 1192, 1250, + 1135, 0, 0, 0, 0, 1131, 1132, 0, 1288, 0, + 1294, 0, 1299, 0, 999, 1000, 1400, 0, 0, 654, + 0, 656, 0, -2, 432, 445, 0, 190, 216, 217, + 0, 0, 220, 221, 222, 213, 214, 134, 0, 0, + 743, 0, 1441, 1442, 141, 0, 0, 1126, 1127, 1128, + 1129, 1130, 0, 0, 0, 1160, 1139, 655, 0, 0, + 387, 0, 665, 433, 434, 0, 440, 441, 442, 443, + 218, 219, 677, 0, 0, 587, 1351, 0, 1289, 0, + 1295, 0, 1300, 0, 657, 658, 666, 0, 435, 0, + 436, 0, 0, 0, 646, 0, 677, 1439, 1136, 0, + 0, 1158, 0, 667, 663, 446, 448, 449, 0, 0, + 447, 678, 647, 1290, 1296, 0, 450, 451, 452, 659, + 660, 661, 662, } var yyTok1 = [...]int{ @@ -19766,7 +13452,7 @@ yydefault: case 608: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3426 +//line sql.y:3425 { yyLOCAL = &AlterDMLJob{ Type: LaunchDMLJobType, @@ -19777,7 +13463,7 @@ yydefault: case 609: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3433 +//line sql.y:3432 { yyLOCAL = &AlterDMLJob{ Type: LaunchAllDMLJobType, @@ -19787,7 +13473,7 @@ yydefault: case 610: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3439 +//line sql.y:3438 { yyLOCAL = &AlterDMLJob{ Type: CancelDMLJobType, @@ -19798,7 +13484,7 @@ yydefault: case 611: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3446 +//line sql.y:3445 { yyLOCAL = &AlterDMLJob{ Type: PauseDMLJobType, @@ -19809,7 +13495,7 @@ yydefault: case 612: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3453 +//line sql.y:3452 { yyLOCAL = &AlterDMLJob{ Type: ResumeDMLJobType, @@ -19820,7 +13506,7 @@ yydefault: case 613: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3460 +//line sql.y:3459 { yyLOCAL = &AlterDMLJob{ Type: CancelAllDMLJobType, @@ -19830,7 +13516,7 @@ yydefault: case 614: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3466 +//line sql.y:3465 { yyLOCAL = &AlterDMLJob{ Type: PauseAllDMLJobType, @@ -19840,7 +13526,7 @@ yydefault: case 615: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3472 +//line sql.y:3471 { yyLOCAL = &AlterDMLJob{ Type: ResumeAllDMLJobType, @@ -19850,7 +13536,7 @@ yydefault: case 616: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3478 +//line sql.y:3477 { yyLOCAL = &AlterDMLJob{ Type: ThrottleDMLJobType, @@ -19863,7 +13549,7 @@ yydefault: case 617: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3487 +//line sql.y:3486 { yyLOCAL = &AlterDMLJob{ Type: ThrottleAllDMLJobType, @@ -19875,7 +13561,7 @@ yydefault: case 618: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3495 +//line sql.y:3494 { yyLOCAL = &AlterDMLJob{ Type: UnthrottleDMLJobType, @@ -19886,7 +13572,7 @@ yydefault: case 619: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3502 +//line sql.y:3501 { yyLOCAL = &AlterDMLJob{ Type: UnthrottleAllDMLJobType, @@ -19896,7 +13582,7 @@ yydefault: case 620: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:3508 +//line sql.y:3507 { yyLOCAL = &AlterDMLJob{ Type: SetRunningTimePeriodType, @@ -19906,16 +13592,10 @@ yydefault: } } yyVAL.union = yyLOCAL -<<<<<<< HEAD case 621: - yyDollar = yyS[yypt-5 : yypt+1] - var yyLOCAL Statement -//line sql.y:3520 -======= - case 620: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Statement -//line sql.y:3514 +//line sql.y:3517 { yyLOCAL = &AlterDMLJob{ Type: SetRunningTimePeriodType, @@ -19926,11 +13606,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 621: + case 622: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:3527 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3530 { yyLOCAL = &AlterMigration{ Type: RetryMigrationType, @@ -19938,14 +13617,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 622: + case 623: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:3527 -======= -//line sql.y:3534 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3537 { yyLOCAL = &AlterMigration{ Type: CleanupMigrationType, @@ -19953,14 +13628,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 623: + case 624: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:3534 -======= -//line sql.y:3541 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3544 { yyLOCAL = &AlterMigration{ Type: LaunchMigrationType, @@ -19968,14 +13639,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 624: + case 625: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:3541 -======= -//line sql.y:3548 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3551 { yyLOCAL = &AlterMigration{ Type: LaunchMigrationType, @@ -19984,28 +13651,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 625: + case 626: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:3549 -======= -//line sql.y:3556 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3559 { yyLOCAL = &AlterMigration{ Type: LaunchAllMigrationType, } } yyVAL.union = yyLOCAL - case 626: + case 627: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:3555 -======= -//line sql.y:3562 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3565 { yyLOCAL = &AlterMigration{ Type: CompleteMigrationType, @@ -20013,28 +13672,20 @@ yydefault: } } yyVAL.union = yyLOCAL - case 627: + case 628: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:3562 -======= -//line sql.y:3569 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3572 { yyLOCAL = &AlterMigration{ Type: CompleteAllMigrationType, } } yyVAL.union = yyLOCAL - case 628: + case 629: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:3568 -======= -//line sql.y:3575 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3578 { yyLOCAL = &AlterMigration{ Type: CancelMigrationType, @@ -20042,14 +13693,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 629: + case 630: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:3575 -======= -//line sql.y:3582 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3585 { yyLOCAL = &AlterMigration{ Type: PauseMigrationType, @@ -20057,14 +13704,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 630: + case 631: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:3582 -======= -//line sql.y:3589 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3592 { yyLOCAL = &AlterMigration{ Type: ResumeMigrationType, @@ -20072,56 +13715,40 @@ yydefault: } } yyVAL.union = yyLOCAL - case 631: + case 632: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:3589 -======= -//line sql.y:3596 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3599 { yyLOCAL = &AlterMigration{ Type: CancelAllMigrationType, } } yyVAL.union = yyLOCAL - case 632: + case 633: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:3595 -======= -//line sql.y:3602 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3605 { yyLOCAL = &AlterMigration{ Type: PauseAllMigrationType, } } yyVAL.union = yyLOCAL - case 633: + case 634: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:3601 -======= -//line sql.y:3608 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3611 { yyLOCAL = &AlterMigration{ Type: ResumeAllMigrationType, } } yyVAL.union = yyLOCAL - case 634: + case 635: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:3607 -======= -//line sql.y:3614 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3617 { yyLOCAL = &AlterMigration{ Type: ThrottleMigrationType, @@ -20131,14 +13758,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 635: + case 636: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:3616 -======= -//line sql.y:3623 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3626 { yyLOCAL = &AlterMigration{ Type: ThrottleAllMigrationType, @@ -20147,14 +13770,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 636: + case 637: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:3624 -======= -//line sql.y:3631 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3634 { yyLOCAL = &AlterMigration{ Type: UnthrottleMigrationType, @@ -20162,40 +13781,28 @@ yydefault: } } yyVAL.union = yyLOCAL - case 637: + case 638: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:3631 -======= -//line sql.y:3638 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3641 { yyLOCAL = &AlterMigration{ Type: UnthrottleAllMigrationType, } } yyVAL.union = yyLOCAL - case 638: + case 639: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *PartitionOption -<<<<<<< HEAD -//line sql.y:3639 -======= -//line sql.y:3646 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3649 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 639: + case 640: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *PartitionOption -<<<<<<< HEAD -//line sql.y:3643 -======= -//line sql.y:3650 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3653 { yyDollar[3].partitionOptionUnion().Partitions = yyDollar[4].integerUnion() yyDollar[3].partitionOptionUnion().SubPartition = yyDollar[5].subPartitionUnion() @@ -20203,14 +13810,10 @@ yydefault: yyLOCAL = yyDollar[3].partitionOptionUnion() } yyVAL.union = yyLOCAL - case 640: + case 641: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionOption -<<<<<<< HEAD -//line sql.y:3652 -======= -//line sql.y:3659 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3662 { yyLOCAL = &PartitionOption{ IsLinear: yyDollar[1].booleanUnion(), @@ -20219,14 +13822,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 641: + case 642: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *PartitionOption -<<<<<<< HEAD -//line sql.y:3660 -======= -//line sql.y:3667 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3670 { yyLOCAL = &PartitionOption{ IsLinear: yyDollar[1].booleanUnion(), @@ -20236,14 +13835,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 642: + case 643: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionOption -<<<<<<< HEAD -//line sql.y:3669 -======= -//line sql.y:3676 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3679 { yyLOCAL = &PartitionOption{ Type: yyDollar[1].partitionByTypeUnion(), @@ -20251,14 +13846,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 643: + case 644: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionOption -<<<<<<< HEAD -//line sql.y:3676 -======= -//line sql.y:3683 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3686 { yyLOCAL = &PartitionOption{ Type: yyDollar[1].partitionByTypeUnion(), @@ -20266,26 +13857,18 @@ yydefault: } } yyVAL.union = yyLOCAL - case 644: + case 645: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *SubPartition -<<<<<<< HEAD -//line sql.y:3684 -======= -//line sql.y:3691 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3694 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 645: + case 646: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *SubPartition -<<<<<<< HEAD -//line sql.y:3688 -======= -//line sql.y:3695 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3698 { yyLOCAL = &SubPartition{ IsLinear: yyDollar[3].booleanUnion(), @@ -20295,14 +13878,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 646: + case 647: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL *SubPartition -<<<<<<< HEAD -//line sql.y:3697 -======= -//line sql.y:3704 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3707 { yyLOCAL = &SubPartition{ IsLinear: yyDollar[3].booleanUnion(), @@ -20313,642 +13892,442 @@ yydefault: } } yyVAL.union = yyLOCAL - case 647: + case 648: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*PartitionDefinition -<<<<<<< HEAD -//line sql.y:3708 -======= -//line sql.y:3715 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3718 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 648: + case 649: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*PartitionDefinition -<<<<<<< HEAD -//line sql.y:3712 -======= -//line sql.y:3719 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3722 { yyLOCAL = yyDollar[2].partDefsUnion() } yyVAL.union = yyLOCAL - case 649: + case 650: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -<<<<<<< HEAD -//line sql.y:3717 -======= -//line sql.y:3724 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3727 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 650: + case 651: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -<<<<<<< HEAD -//line sql.y:3721 -======= -//line sql.y:3728 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3731 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 651: + case 652: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -<<<<<<< HEAD -//line sql.y:3726 -======= -//line sql.y:3733 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3736 { yyLOCAL = 0 } yyVAL.union = yyLOCAL - case 652: + case 653: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -<<<<<<< HEAD -//line sql.y:3730 -======= -//line sql.y:3737 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3740 { yyLOCAL = convertStringToInt(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 653: + case 654: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL TableExpr -<<<<<<< HEAD -//line sql.y:3736 -======= -//line sql.y:3743 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3746 { yyLOCAL = &JSONTableExpr{Expr: yyDollar[3].exprUnion(), Filter: yyDollar[5].exprUnion(), Columns: yyDollar[6].jtColumnListUnion(), Alias: yyDollar[8].identifierCS} } yyVAL.union = yyLOCAL - case 654: + case 655: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL []*JtColumnDefinition -<<<<<<< HEAD -//line sql.y:3742 -======= -//line sql.y:3749 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3752 { yyLOCAL = yyDollar[3].jtColumnListUnion() } yyVAL.union = yyLOCAL - case 655: + case 656: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*JtColumnDefinition -<<<<<<< HEAD -//line sql.y:3748 -======= -//line sql.y:3755 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3758 { yyLOCAL = []*JtColumnDefinition{yyDollar[1].jtColumnDefinitionUnion()} } yyVAL.union = yyLOCAL - case 656: + case 657: yyDollar = yyS[yypt-3 : yypt+1] -<<<<<<< HEAD -//line sql.y:3752 -======= -//line sql.y:3759 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3762 { yySLICE := (*[]*JtColumnDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].jtColumnDefinitionUnion()) } - case 657: + case 658: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtColumnDefinition -<<<<<<< HEAD -//line sql.y:3758 -======= -//line sql.y:3765 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3768 { yyLOCAL = &JtColumnDefinition{JtOrdinal: &JtOrdinalColDef{Name: yyDollar[1].identifierCI}} } yyVAL.union = yyLOCAL - case 658: + case 659: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *JtColumnDefinition -<<<<<<< HEAD -//line sql.y:3762 -======= -//line sql.y:3769 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3772 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 659: + case 660: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *JtColumnDefinition -<<<<<<< HEAD -//line sql.y:3768 -======= -//line sql.y:3775 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3778 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 660: + case 661: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *JtColumnDefinition -<<<<<<< HEAD -//line sql.y:3774 -======= -//line sql.y:3781 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3784 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 661: + case 662: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL *JtColumnDefinition -<<<<<<< HEAD -//line sql.y:3780 -======= -//line sql.y:3787 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3790 { yyDollar[2].columnType.Options = &ColumnTypeOptions{Collate: yyDollar[3].str} jtPath := &JtPathColDef{Name: yyDollar[1].identifierCI, Type: yyDollar[2].columnType, JtColExists: yyDollar[4].booleanUnion(), Path: yyDollar[6].exprUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()} yyLOCAL = &JtColumnDefinition{JtPath: jtPath} } yyVAL.union = yyLOCAL - case 662: + case 663: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *JtColumnDefinition -<<<<<<< HEAD -//line sql.y:3786 -======= -//line sql.y:3793 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3796 { jtNestedPath := &JtNestedPathColDef{Path: yyDollar[3].exprUnion(), Columns: yyDollar[4].jtColumnListUnion()} yyLOCAL = &JtColumnDefinition{JtNestedPath: jtNestedPath} } yyVAL.union = yyLOCAL - case 663: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL bool -<<<<<<< HEAD -//line sql.y:3792 -======= -//line sql.y:3799 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = false - } - yyVAL.union = yyLOCAL case 664: -<<<<<<< HEAD - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL bool -//line sql.y:3796 - { - yyLOCAL = true - } - yyVAL.union = yyLOCAL - case 665: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3800 +//line sql.y:3802 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 666: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL bool -//line sql.y:3804 -======= + case 665: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3803 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3806 { yyLOCAL = true } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 667: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL *JtOnResponse -//line sql.y:3810 -======= - case 665: + case 666: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3807 +//line sql.y:3810 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 666: + case 667: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:3811 +//line sql.y:3814 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 667: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL *JtOnResponse -//line sql.y:3817 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = yyDollar[1].jtOnResponseUnion() - } - yyVAL.union = yyLOCAL case 668: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtOnResponse -<<<<<<< HEAD -//line sql.y:3816 -======= -//line sql.y:3823 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3820 { yyLOCAL = yyDollar[1].jtOnResponseUnion() } yyVAL.union = yyLOCAL case 669: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3829 +//line sql.y:3826 { - yyLOCAL = &JtOnResponse{ResponseType: ErrorJSONType} + yyLOCAL = yyDollar[1].jtOnResponseUnion() } yyVAL.union = yyLOCAL case 670: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3833 +//line sql.y:3832 { yyLOCAL = &JtOnResponse{ResponseType: ErrorJSONType} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 670: - yyDollar = yyS[yypt-1 : yypt+1] -======= case 671: - yyDollar = yyS[yypt-2 : yypt+1] ->>>>>>> e439161508 (fix: complete time period feature) + yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3837 +//line sql.y:3836 { yyLOCAL = &JtOnResponse{ResponseType: NullJSONType} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 671: + case 672: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *JtOnResponse -//line sql.y:3830 +//line sql.y:3840 { yyLOCAL = &JtOnResponse{ResponseType: DefaultJSONType, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL -======= ->>>>>>> e439161508 (fix: complete time period feature) - case 672: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL PartitionByType -//line sql.y:3843 - { - yyLOCAL = RangeType - } - yyVAL.union = yyLOCAL case 673: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL PartitionByType -//line sql.y:3847 +//line sql.y:3846 { yyLOCAL = RangeType } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 673: + case 674: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL PartitionByType -//line sql.y:3840 -======= - case 674: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL int -//line sql.y:3852 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3850 { yyLOCAL = ListType } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 674: + case 675: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -//line sql.y:3845 +//line sql.y:3855 { yyLOCAL = -1 } yyVAL.union = yyLOCAL - case 675: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL int -//line sql.y:3849 -======= - case 675: + case 676: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL int -//line sql.y:3856 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3859 { yyLOCAL = convertStringToInt(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 676: + case 677: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL int -<<<<<<< HEAD -//line sql.y:3854 -======= -//line sql.y:3861 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3864 { yyLOCAL = -1 } yyVAL.union = yyLOCAL - case 677: + case 678: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL int -<<<<<<< HEAD -//line sql.y:3858 -======= -//line sql.y:3865 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3868 { yyLOCAL = convertStringToInt(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 678: + case 679: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *PartitionSpec -<<<<<<< HEAD -//line sql.y:3864 -======= -//line sql.y:3871 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3874 { yyLOCAL = &PartitionSpec{Action: AddAction, Definitions: []*PartitionDefinition{yyDollar[4].partDefUnion()}} } yyVAL.union = yyLOCAL - case 679: + case 680: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -<<<<<<< HEAD -//line sql.y:3868 -======= -//line sql.y:3875 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3878 { yyLOCAL = &PartitionSpec{Action: DropAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 680: + case 681: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *PartitionSpec -<<<<<<< HEAD -//line sql.y:3872 -======= -//line sql.y:3879 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3882 { yyLOCAL = &PartitionSpec{Action: ReorganizeAction, Names: yyDollar[3].partitionsUnion(), Definitions: yyDollar[6].partDefsUnion()} } yyVAL.union = yyLOCAL - case 681: + case 682: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3883 +//line sql.y:3886 { yyLOCAL = &PartitionSpec{Action: DiscardAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 682: + case 683: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3887 +//line sql.y:3890 { yyLOCAL = &PartitionSpec{Action: DiscardAction, IsAll: true} } yyVAL.union = yyLOCAL - case 683: + case 684: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3891 +//line sql.y:3894 { yyLOCAL = &PartitionSpec{Action: ImportAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL - case 684: + case 685: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3895 +//line sql.y:3898 { yyLOCAL = &PartitionSpec{Action: ImportAction, IsAll: true} } yyVAL.union = yyLOCAL - case 685: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL *PartitionSpec -//line sql.y:3899 - { - yyLOCAL = &PartitionSpec{Action: TruncateAction, Names: yyDollar[3].partitionsUnion()} - } - yyVAL.union = yyLOCAL case 686: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3903 +//line sql.y:3902 { - yyLOCAL = &PartitionSpec{Action: TruncateAction, IsAll: true} + yyLOCAL = &PartitionSpec{Action: TruncateAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL case 687: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3907 +//line sql.y:3906 { yyLOCAL = &PartitionSpec{Action: TruncateAction, IsAll: true} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 687: - yyDollar = yyS[yypt-3 : yypt+1] -======= case 688: - yyDollar = yyS[yypt-7 : yypt+1] ->>>>>>> e439161508 (fix: complete time period feature) + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3911 +//line sql.y:3910 { yyLOCAL = &PartitionSpec{Action: CoalesceAction, Number: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 688: + case 689: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3904 +//line sql.y:3914 { yyLOCAL = &PartitionSpec{Action: ExchangeAction, Names: Partitions{yyDollar[3].identifierCI}, TableName: yyDollar[6].tableName, WithoutValidation: yyDollar[7].booleanUnion()} } yyVAL.union = yyLOCAL -======= ->>>>>>> e439161508 (fix: complete time period feature) - case 689: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL *PartitionSpec -//line sql.y:3915 - { - yyLOCAL = &PartitionSpec{Action: AnalyzeAction, Names: yyDollar[3].partitionsUnion()} - } - yyVAL.union = yyLOCAL case 690: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3919 +//line sql.y:3918 { - yyLOCAL = &PartitionSpec{Action: AnalyzeAction, IsAll: true} + yyLOCAL = &PartitionSpec{Action: AnalyzeAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL case 691: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3923 +//line sql.y:3922 { - yyLOCAL = &PartitionSpec{Action: CheckAction, Names: yyDollar[3].partitionsUnion()} + yyLOCAL = &PartitionSpec{Action: AnalyzeAction, IsAll: true} } yyVAL.union = yyLOCAL case 692: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3927 +//line sql.y:3926 { - yyLOCAL = &PartitionSpec{Action: CheckAction, IsAll: true} + yyLOCAL = &PartitionSpec{Action: CheckAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL case 693: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3931 +//line sql.y:3930 { - yyLOCAL = &PartitionSpec{Action: OptimizeAction, Names: yyDollar[3].partitionsUnion()} + yyLOCAL = &PartitionSpec{Action: CheckAction, IsAll: true} } yyVAL.union = yyLOCAL case 694: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3935 +//line sql.y:3934 { - yyLOCAL = &PartitionSpec{Action: OptimizeAction, IsAll: true} + yyLOCAL = &PartitionSpec{Action: OptimizeAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL case 695: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3939 +//line sql.y:3938 { - yyLOCAL = &PartitionSpec{Action: RebuildAction, Names: yyDollar[3].partitionsUnion()} + yyLOCAL = &PartitionSpec{Action: OptimizeAction, IsAll: true} } yyVAL.union = yyLOCAL case 696: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3943 +//line sql.y:3942 { - yyLOCAL = &PartitionSpec{Action: RebuildAction, IsAll: true} + yyLOCAL = &PartitionSpec{Action: RebuildAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL case 697: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3947 +//line sql.y:3946 { - yyLOCAL = &PartitionSpec{Action: RepairAction, Names: yyDollar[3].partitionsUnion()} + yyLOCAL = &PartitionSpec{Action: RebuildAction, IsAll: true} } yyVAL.union = yyLOCAL case 698: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3951 +//line sql.y:3950 { yyLOCAL = &PartitionSpec{Action: RepairAction, Names: yyDollar[3].partitionsUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 698: - yyDollar = yyS[yypt-3 : yypt+1] -======= case 699: - yyDollar = yyS[yypt-2 : yypt+1] ->>>>>>> e439161508 (fix: complete time period feature) + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3955 +//line sql.y:3954 { yyLOCAL = &PartitionSpec{Action: RepairAction, IsAll: true} } yyVAL.union = yyLOCAL - case 699: + case 700: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionSpec -//line sql.y:3948 +//line sql.y:3958 { yyLOCAL = &PartitionSpec{Action: UpgradeAction} } yyVAL.union = yyLOCAL - case 700: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL bool -<<<<<<< HEAD -//line sql.y:3953 -======= -//line sql.y:3960 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = false - } - yyVAL.union = yyLOCAL case 701: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:3964 +//line sql.y:3963 { yyLOCAL = false } @@ -20956,346 +14335,239 @@ yydefault: case 702: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:3968 +//line sql.y:3967 { yyLOCAL = false } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 702: + case 703: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:3961 +//line sql.y:3971 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 703: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL []*PartitionDefinition -//line sql.y:3967 -======= - case 703: + case 704: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*PartitionDefinition -//line sql.y:3974 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3977 { yyLOCAL = []*PartitionDefinition{yyDollar[1].partDefUnion()} } yyVAL.union = yyLOCAL - case 704: + case 705: yyDollar = yyS[yypt-3 : yypt+1] -<<<<<<< HEAD -//line sql.y:3971 -======= -//line sql.y:3978 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3981 { yySLICE := (*[]*PartitionDefinition)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].partDefUnion()) } - case 705: + case 706: yyDollar = yyS[yypt-2 : yypt+1] -<<<<<<< HEAD -//line sql.y:3977 -======= -//line sql.y:3984 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3987 { yyVAL.partDefUnion().Options = yyDollar[2].partitionDefinitionOptionsUnion() } - case 706: + case 707: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -<<<<<<< HEAD -//line sql.y:3982 -======= -//line sql.y:3989 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3992 { yyLOCAL = &PartitionDefinitionOptions{} } yyVAL.union = yyLOCAL - case 707: + case 708: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -<<<<<<< HEAD -//line sql.y:3986 -======= -//line sql.y:3993 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:3996 { yyDollar[1].partitionDefinitionOptionsUnion().ValueRange = yyDollar[2].partitionValueRangeUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 708: + case 709: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -<<<<<<< HEAD -//line sql.y:3991 -======= -//line sql.y:3998 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4001 { yyDollar[1].partitionDefinitionOptionsUnion().Comment = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 709: + case 710: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -<<<<<<< HEAD -//line sql.y:3996 -======= -//line sql.y:4003 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4006 { yyDollar[1].partitionDefinitionOptionsUnion().Engine = yyDollar[2].partitionEngineUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 710: + case 711: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -<<<<<<< HEAD -//line sql.y:4001 -======= -//line sql.y:4008 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4011 { yyDollar[1].partitionDefinitionOptionsUnion().DataDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 711: + case 712: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -<<<<<<< HEAD -//line sql.y:4006 -======= -//line sql.y:4013 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4016 { yyDollar[1].partitionDefinitionOptionsUnion().IndexDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 712: + case 713: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -<<<<<<< HEAD -//line sql.y:4011 -======= -//line sql.y:4018 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4021 { val := yyDollar[2].integerUnion() yyDollar[1].partitionDefinitionOptionsUnion().MaxRows = &val yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 713: + case 714: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -<<<<<<< HEAD -//line sql.y:4017 -======= -//line sql.y:4024 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4027 { val := yyDollar[2].integerUnion() yyDollar[1].partitionDefinitionOptionsUnion().MinRows = &val yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 714: + case 715: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -<<<<<<< HEAD -//line sql.y:4023 -======= -//line sql.y:4030 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4033 { yyDollar[1].partitionDefinitionOptionsUnion().TableSpace = yyDollar[2].str yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 715: + case 716: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinitionOptions -<<<<<<< HEAD -//line sql.y:4028 -======= -//line sql.y:4035 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4038 { yyDollar[1].partitionDefinitionOptionsUnion().SubPartitionDefinitions = yyDollar[2].subPartitionDefinitionsUnion() yyLOCAL = yyDollar[1].partitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 716: + case 717: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SubPartitionDefinitions -<<<<<<< HEAD -//line sql.y:4034 -======= -//line sql.y:4041 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4044 { yyLOCAL = yyDollar[2].subPartitionDefinitionsUnion() } yyVAL.union = yyLOCAL - case 717: + case 718: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SubPartitionDefinitions -<<<<<<< HEAD -//line sql.y:4040 -======= -//line sql.y:4047 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4050 { yyLOCAL = SubPartitionDefinitions{yyDollar[1].subPartitionDefinitionUnion()} } yyVAL.union = yyLOCAL - case 718: + case 719: yyDollar = yyS[yypt-3 : yypt+1] -<<<<<<< HEAD -//line sql.y:4044 -======= -//line sql.y:4051 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4054 { yySLICE := (*SubPartitionDefinitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].subPartitionDefinitionUnion()) } - case 719: + case 720: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SubPartitionDefinition -<<<<<<< HEAD -//line sql.y:4050 -======= -//line sql.y:4057 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4060 { yyLOCAL = &SubPartitionDefinition{Name: yyDollar[2].identifierCI, Options: yyDollar[3].subPartitionDefinitionOptionsUnion()} } yyVAL.union = yyLOCAL - case 720: + case 721: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -<<<<<<< HEAD -//line sql.y:4055 -======= -//line sql.y:4062 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4065 { yyLOCAL = &SubPartitionDefinitionOptions{} } yyVAL.union = yyLOCAL - case 721: + case 722: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -<<<<<<< HEAD -//line sql.y:4059 -======= -//line sql.y:4066 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4069 { yyDollar[1].subPartitionDefinitionOptionsUnion().Comment = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 722: + case 723: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -<<<<<<< HEAD -//line sql.y:4064 -======= -//line sql.y:4071 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4074 { yyDollar[1].subPartitionDefinitionOptionsUnion().Engine = yyDollar[2].partitionEngineUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 723: + case 724: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -<<<<<<< HEAD -//line sql.y:4069 -======= -//line sql.y:4076 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4079 { yyDollar[1].subPartitionDefinitionOptionsUnion().DataDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 724: + case 725: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -<<<<<<< HEAD -//line sql.y:4074 -======= -//line sql.y:4081 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4084 { yyDollar[1].subPartitionDefinitionOptionsUnion().IndexDirectory = yyDollar[2].literalUnion() yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 725: + case 726: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -<<<<<<< HEAD -//line sql.y:4079 -======= -//line sql.y:4086 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4089 { val := yyDollar[2].integerUnion() yyDollar[1].subPartitionDefinitionOptionsUnion().MaxRows = &val yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 726: + case 727: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -<<<<<<< HEAD -//line sql.y:4085 -======= -//line sql.y:4092 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4095 { val := yyDollar[2].integerUnion() yyDollar[1].subPartitionDefinitionOptionsUnion().MinRows = &val yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 727: + case 728: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *SubPartitionDefinitionOptions -<<<<<<< HEAD -//line sql.y:4091 -======= -//line sql.y:4098 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4101 { yyDollar[1].subPartitionDefinitionOptionsUnion().TableSpace = yyDollar[2].str yyLOCAL = yyDollar[1].subPartitionDefinitionOptionsUnion() } yyVAL.union = yyLOCAL - case 728: + case 729: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionValueRange -<<<<<<< HEAD -//line sql.y:4098 -======= -//line sql.y:4105 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4108 { yyLOCAL = &PartitionValueRange{ Type: LessThanType, @@ -21303,14 +14575,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 729: + case 730: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionValueRange -<<<<<<< HEAD -//line sql.y:4105 -======= -//line sql.y:4112 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4115 { yyLOCAL = &PartitionValueRange{ Type: LessThanType, @@ -21318,14 +14586,10 @@ yydefault: } } yyVAL.union = yyLOCAL - case 730: + case 731: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *PartitionValueRange -<<<<<<< HEAD -//line sql.y:4112 -======= -//line sql.y:4119 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4122 { yyLOCAL = &PartitionValueRange{ Type: InType, @@ -21333,202 +14597,131 @@ yydefault: } } yyVAL.union = yyLOCAL - case 731: + case 732: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -<<<<<<< HEAD -//line sql.y:4120 -======= -//line sql.y:4127 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4130 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 732: + case 733: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -<<<<<<< HEAD -//line sql.y:4124 -======= -//line sql.y:4131 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4134 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 733: + case 734: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *PartitionEngine -<<<<<<< HEAD -//line sql.y:4130 -======= -//line sql.y:4137 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4140 { yyLOCAL = &PartitionEngine{Storage: yyDollar[1].booleanUnion(), Name: yyDollar[4].identifierCS.String()} } yyVAL.union = yyLOCAL - case 734: + case 735: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Literal -<<<<<<< HEAD -//line sql.y:4136 -======= -//line sql.y:4143 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4146 { yyLOCAL = NewStrLiteral(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 735: + case 736: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Literal -<<<<<<< HEAD -//line sql.y:4142 -======= -//line sql.y:4149 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4152 { yyLOCAL = NewStrLiteral(yyDollar[4].str) } yyVAL.union = yyLOCAL - case 736: + case 737: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Literal -<<<<<<< HEAD -//line sql.y:4148 -======= -//line sql.y:4155 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4158 { yyLOCAL = NewStrLiteral(yyDollar[4].str) } yyVAL.union = yyLOCAL - case 737: + case 738: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -<<<<<<< HEAD -//line sql.y:4154 -======= -//line sql.y:4161 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4164 { yyLOCAL = convertStringToInt(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 738: + case 739: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL int -<<<<<<< HEAD -//line sql.y:4160 -======= -//line sql.y:4167 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4170 { yyLOCAL = convertStringToInt(yyDollar[3].str) } yyVAL.union = yyLOCAL - case 739: + case 740: yyDollar = yyS[yypt-3 : yypt+1] -<<<<<<< HEAD -//line sql.y:4166 -======= -//line sql.y:4173 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4176 { yyVAL.str = yyDollar[3].identifierCS.String() } - case 740: + case 741: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *PartitionDefinition -<<<<<<< HEAD -//line sql.y:4172 -======= -//line sql.y:4179 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4182 { yyLOCAL = &PartitionDefinition{Name: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL - case 741: + case 742: yyDollar = yyS[yypt-1 : yypt+1] -<<<<<<< HEAD -//line sql.y:4178 -======= -//line sql.y:4185 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4188 { yyVAL.str = "" } - case 742: + case 743: yyDollar = yyS[yypt-3 : yypt+1] -<<<<<<< HEAD -//line sql.y:4182 -======= -//line sql.y:4189 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4192 { yyVAL.str = "" } - case 743: + case 744: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4188 -======= -//line sql.y:4195 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4198 { yyLOCAL = &RenameTable{TablePairs: yyDollar[3].renameTablePairsUnion()} } yyVAL.union = yyLOCAL - case 744: + case 745: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*RenameTablePair -<<<<<<< HEAD -//line sql.y:4194 -======= -//line sql.y:4201 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4204 { yyLOCAL = []*RenameTablePair{{FromTable: yyDollar[1].tableName, ToTable: yyDollar[3].tableName}} } yyVAL.union = yyLOCAL - case 745: + case 746: yyDollar = yyS[yypt-5 : yypt+1] -<<<<<<< HEAD -//line sql.y:4198 -======= -//line sql.y:4205 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4208 { yySLICE := (*[]*RenameTablePair)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, &RenameTablePair{FromTable: yyDollar[3].tableName, ToTable: yyDollar[5].tableName}) } - case 746: -<<<<<<< HEAD -======= - yyDollar = yyS[yypt-7 : yypt+1] - var yyLOCAL Statement -//line sql.y:4211 - { - yyLOCAL = &DropTable{FromTables: yyDollar[6].tableNamesUnion(), IfExists: yyDollar[5].booleanUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), Temp: yyDollar[3].booleanUnion()} - } - yyVAL.union = yyLOCAL case 747: ->>>>>>> e439161508 (fix: complete time period feature) yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4215 +//line sql.y:4214 { yyLOCAL = &DropTable{FromTables: yyDollar[6].tableNamesUnion(), IfExists: yyDollar[5].booleanUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), Temp: yyDollar[3].booleanUnion()} } yyVAL.union = yyLOCAL - case 747: + case 748: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4208 +//line sql.y:4218 { // Change this to an alter statement if yyDollar[4].identifierCI.Lowered() == "primary" { @@ -21538,163 +14731,105 @@ yydefault: } } yyVAL.union = yyLOCAL - case 748: + case 749: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4217 -======= -//line sql.y:4224 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4227 { yyLOCAL = &DropView{FromTables: yyDollar[5].tableNamesUnion(), Comments: Comments(yyDollar[2].strs).Parsed(), IfExists: yyDollar[4].booleanUnion()} } yyVAL.union = yyLOCAL - case 749: + case 750: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4221 -======= -//line sql.y:4228 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4231 { yyLOCAL = &DropDatabase{Comments: Comments(yyDollar[2].strs).Parsed(), DBName: yyDollar[5].identifierCS, IfExists: yyDollar[4].booleanUnion()} } yyVAL.union = yyLOCAL - case 750: + case 751: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4227 -======= -//line sql.y:4234 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4237 { yyLOCAL = &TruncateTable{Table: yyDollar[3].tableName} } yyVAL.union = yyLOCAL - case 751: + case 752: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4231 -======= -//line sql.y:4238 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4241 { yyLOCAL = &TruncateTable{Table: yyDollar[2].tableName} } yyVAL.union = yyLOCAL - case 752: + case 753: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4237 -======= -//line sql.y:4244 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4247 { yyLOCAL = &OtherRead{} } yyVAL.union = yyLOCAL - case 753: + case 754: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4243 -======= -//line sql.y:4250 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4253 { yyLOCAL = &CheckTable{Tables: yyDollar[3].tableNamesUnion(), Options: yyDollar[4].checkOptionsUnion()} } yyVAL.union = yyLOCAL - case 754: + case 755: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableNames -<<<<<<< HEAD -//line sql.y:4249 -======= -//line sql.y:4256 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4259 { yyLOCAL = TableNames{yyDollar[1].tableName} } yyVAL.union = yyLOCAL - case 755: + case 756: yyDollar = yyS[yypt-3 : yypt+1] -<<<<<<< HEAD -//line sql.y:4253 -======= -//line sql.y:4260 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4263 { yySLICE := (*TableNames)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableName) } - case 756: + case 757: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4259 -======= -//line sql.y:4266 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4269 { yyLOCAL = &Kill{Type: KillConnection, ConnID: NewIntLiteral(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 757: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Statement -//line sql.y:4270 - { - yyLOCAL = &Kill{Type: KillQuery, ConnID: NewIntLiteral(yyDollar[3].str)} - } - yyVAL.union = yyLOCAL case 758: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4267 -======= -//line sql.y:4274 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4273 { - yyLOCAL = &Kill{Type: KillConnection, ConnID: NewIntLiteral(yyDollar[3].str)} + yyLOCAL = &Kill{Type: KillQuery, ConnID: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL case 759: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4273 - { - yyLOCAL = &Reload{Type: ReloadUsers} -======= -//line sql.y:4281 +//line sql.y:4277 { - yyLOCAL = &Show{&ShowBasic{Command: Charset, Filter: yyDollar[3].showFilterUnion()}} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Kill{Type: KillConnection, ConnID: NewIntLiteral(yyDollar[3].str)} } yyVAL.union = yyLOCAL case 760: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4277 -======= -//line sql.y:4285 +//line sql.y:4283 { - yyLOCAL = &Show{&ShowBasic{Command: LastSeenGTID}} + yyLOCAL = &Reload{Type: ReloadUsers} } yyVAL.union = yyLOCAL case 761: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4289 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4287 { yyLOCAL = &Reload{Type: ReloadPrivileges} } @@ -21702,80 +14837,47 @@ yydefault: case 762: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4283 -======= //line sql.y:4293 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowBasic{Command: Charset, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 762: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Statement -//line sql.y:4287 -======= case 763: - yyDollar = yyS[yypt-7 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement //line sql.y:4297 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowBasic{Command: LastSeenGTID}} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 763: + case 764: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4291 +//line sql.y:4301 { yyLOCAL = &Show{&ShowBasic{Command: FailPoints}} } yyVAL.union = yyLOCAL - case 764: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Statement -//line sql.y:4295 -======= - case 764: + case 765: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4301 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4305 { yyLOCAL = &Show{&ShowBasic{Command: Collation, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 765: + case 766: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4299 +//line sql.y:4309 { yyLOCAL = &Show{&ShowBasic{Full: yyDollar[2].booleanUnion(), Command: Column, Tbl: yyDollar[5].tableName, DbName: yyDollar[6].identifierCS, Filter: yyDollar[7].showFilterUnion()}} -======= -//line sql.y:4305 - { - yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}} ->>>>>>> e439161508 (fix: complete time period feature) - } - yyVAL.union = yyLOCAL - case 766: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4303 - { - yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL case 767: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4307 +//line sql.y:4313 { yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}} } @@ -21783,412 +14885,223 @@ yydefault: case 768: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4311 -======= -//line sql.y:4309 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}} - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 769: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Statement -//line sql.y:4315 -======= - case 767: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Statement -//line sql.y:4313 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}} - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 770: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Statement -//line sql.y:4319 -======= - case 768: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Statement //line sql.y:4317 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &Show{&ShowBasic{Command: Function, Filter: yyDollar[4].showFilterUnion()}} + yyLOCAL = &Show{&ShowBasic{Command: Database, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 771: - yyDollar = yyS[yypt-7 : yypt+1] - var yyLOCAL Statement -//line sql.y:4323 -======= case 769: - yyDollar = yyS[yypt-7 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4321 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &Show{&ShowBasic{Command: Index, Tbl: yyDollar[5].tableName, DbName: yyDollar[6].identifierCS, Filter: yyDollar[7].showFilterUnion()}} + yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 772: - yyDollar = yyS[yypt-5 : yypt+1] - var yyLOCAL Statement -//line sql.y:4327 -======= case 770: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4325 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &Show{&ShowBasic{Command: OpenTable, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} + yyLOCAL = &Show{&ShowBasic{Command: Keyspace, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 773: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Statement -//line sql.y:4331 -======= case 771: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement //line sql.y:4329 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &Show{&ShowBasic{Command: Privilege}} + yyLOCAL = &Show{&ShowBasic{Command: Function, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 774: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Statement -//line sql.y:4335 - { - yyLOCAL = &Show{&ShowBasic{Command: Procedure, Filter: yyDollar[4].showFilterUnion()}} -======= case 772: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement //line sql.y:4333 { - yyLOCAL = &Show{&ShowBasic{Command: Procedure, Filter: yyDollar[4].showFilterUnion()}} + yyLOCAL = &Show{&ShowBasic{Command: Index, Tbl: yyDollar[5].tableName, DbName: yyDollar[6].identifierCS, Filter: yyDollar[7].showFilterUnion()}} } yyVAL.union = yyLOCAL case 773: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement //line sql.y:4337 { - yyLOCAL = &Show{&ShowBasic{Command: StatusSession, Filter: yyDollar[4].showFilterUnion()}} + yyLOCAL = &Show{&ShowBasic{Command: OpenTable, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } yyVAL.union = yyLOCAL case 774: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement //line sql.y:4341 { - yyLOCAL = &Show{&ShowBasic{Command: StatusGlobal, Filter: yyDollar[4].showFilterUnion()}} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Show{&ShowBasic{Command: Privilege}} } yyVAL.union = yyLOCAL case 775: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4339 - { - yyLOCAL = &Show{&ShowBasic{Command: StatusSession, Filter: yyDollar[4].showFilterUnion()}} -======= //line sql.y:4345 { - yyLOCAL = &Show{&ShowBasic{Command: VariableSession, Filter: yyDollar[4].showFilterUnion()}} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Show{&ShowBasic{Command: Procedure, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL case 776: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4343 - { - yyLOCAL = &Show{&ShowBasic{Command: StatusGlobal, Filter: yyDollar[4].showFilterUnion()}} -======= //line sql.y:4349 { - yyLOCAL = &Show{&ShowBasic{Command: VariableGlobal, Filter: yyDollar[4].showFilterUnion()}} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Show{&ShowBasic{Command: StatusSession, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL case 777: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4347 - { - yyLOCAL = &Show{&ShowBasic{Command: VariableSession, Filter: yyDollar[4].showFilterUnion()}} -======= //line sql.y:4353 { - yyLOCAL = &Show{&ShowBasic{Command: TableStatus, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Show{&ShowBasic{Command: StatusGlobal, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL case 778: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4351 - { - yyLOCAL = &Show{&ShowBasic{Command: VariableGlobal, Filter: yyDollar[4].showFilterUnion()}} -======= //line sql.y:4357 { - yyLOCAL = &Show{&ShowBasic{Command: Table, Full: yyDollar[2].booleanUnion(), DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Show{&ShowBasic{Command: VariableSession, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL case 779: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4355 - { - yyLOCAL = &Show{&ShowBasic{Command: TableStatus, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} -======= //line sql.y:4361 { - yyLOCAL = &Show{&ShowBasic{Command: Trigger, DbName: yyDollar[3].identifierCS, Filter: yyDollar[4].showFilterUnion()}} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Show{&ShowBasic{Command: VariableGlobal, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL case 780: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4359 - { - yyLOCAL = &Show{&ShowBasic{Command: Table, Full: yyDollar[2].booleanUnion(), DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} -======= //line sql.y:4365 { - yyLOCAL = &Show{&ShowCreate{Command: CreateDb, Op: yyDollar[4].tableName}} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Show{&ShowBasic{Command: TableStatus, DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } yyVAL.union = yyLOCAL case 781: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4363 - { - yyLOCAL = &Show{&ShowBasic{Command: Trigger, DbName: yyDollar[3].identifierCS, Filter: yyDollar[4].showFilterUnion()}} -======= //line sql.y:4369 { - yyLOCAL = &Show{&ShowCreate{Command: CreateE, Op: yyDollar[4].tableName}} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Show{&ShowBasic{Command: Table, Full: yyDollar[2].booleanUnion(), DbName: yyDollar[4].identifierCS, Filter: yyDollar[5].showFilterUnion()}} } yyVAL.union = yyLOCAL case 782: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4367 - { - yyLOCAL = &Show{&ShowCreate{Command: CreateDb, Op: yyDollar[4].tableName}} -======= //line sql.y:4373 { - yyLOCAL = &Show{&ShowCreate{Command: CreateF, Op: yyDollar[4].tableName}} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Show{&ShowBasic{Command: Trigger, DbName: yyDollar[3].identifierCS, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL case 783: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4371 - { - yyLOCAL = &Show{&ShowCreate{Command: CreateE, Op: yyDollar[4].tableName}} -======= //line sql.y:4377 { - yyLOCAL = &Show{&ShowCreate{Command: CreateProc, Op: yyDollar[4].tableName}} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Show{&ShowCreate{Command: CreateDb, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL case 784: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4375 - { - yyLOCAL = &Show{&ShowCreate{Command: CreateF, Op: yyDollar[4].tableName}} -======= //line sql.y:4381 { - yyLOCAL = &Show{&ShowCreate{Command: CreateTbl, Op: yyDollar[4].tableName}} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Show{&ShowCreate{Command: CreateE, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL case 785: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4379 - { - yyLOCAL = &Show{&ShowCreate{Command: CreateProc, Op: yyDollar[4].tableName}} -======= //line sql.y:4385 { - yyLOCAL = &Show{&ShowCreate{Command: CreateTr, Op: yyDollar[4].tableName}} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Show{&ShowCreate{Command: CreateF, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL case 786: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4383 - { - yyLOCAL = &Show{&ShowCreate{Command: CreateTbl, Op: yyDollar[4].tableName}} -======= //line sql.y:4389 { - yyLOCAL = &Show{&ShowCreate{Command: CreateV, Op: yyDollar[4].tableName}} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Show{&ShowCreate{Command: CreateProc, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL case 787: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4387 - { - yyLOCAL = &Show{&ShowCreate{Command: CreateTr, Op: yyDollar[4].tableName}} -======= //line sql.y:4393 { - yyLOCAL = &Show{&ShowBasic{Command: Engines}} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Show{&ShowCreate{Command: CreateTbl, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL case 788: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4391 - { - yyLOCAL = &Show{&ShowCreate{Command: CreateV, Op: yyDollar[4].tableName}} -======= //line sql.y:4397 { - yyLOCAL = &Show{&ShowBasic{Command: Plugins}} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Show{&ShowCreate{Command: CreateTr, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL case 789: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4395 - { - yyLOCAL = &Show{&ShowBasic{Command: Engines}} -======= //line sql.y:4401 { - yyLOCAL = &Show{&ShowBasic{Command: GtidExecGlobal, DbName: yyDollar[4].identifierCS}} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Show{&ShowCreate{Command: CreateV, Op: yyDollar[4].tableName}} } yyVAL.union = yyLOCAL case 790: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4399 - { - yyLOCAL = &Show{&ShowBasic{Command: Plugins}} -======= //line sql.y:4405 { - yyLOCAL = &Show{&ShowBasic{Command: VGtidExecGlobal, DbName: yyDollar[4].identifierCS}} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Show{&ShowBasic{Command: Engines}} } yyVAL.union = yyLOCAL case 791: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4403 - { - yyLOCAL = &Show{&ShowBasic{Command: GtidExecGlobal, DbName: yyDollar[4].identifierCS}} -======= //line sql.y:4409 { - yyLOCAL = &Show{&ShowBasic{Command: VitessVariables, Filter: yyDollar[4].showFilterUnion()}} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Show{&ShowBasic{Command: Plugins}} } yyVAL.union = yyLOCAL case 792: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4407 -======= //line sql.y:4413 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &Show{&ShowBasic{Command: VGtidExecGlobal, DbName: yyDollar[4].identifierCS}} + yyLOCAL = &Show{&ShowBasic{Command: GtidExecGlobal, DbName: yyDollar[4].identifierCS}} } yyVAL.union = yyLOCAL case 793: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4411 -======= //line sql.y:4417 { - yyLOCAL = &Show{&ShowBasic{Command: VitessMigrations, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}} + yyLOCAL = &Show{&ShowBasic{Command: VGtidExecGlobal, DbName: yyDollar[4].identifierCS}} } yyVAL.union = yyLOCAL case 794: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement //line sql.y:4421 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowBasic{Command: VitessVariables, Filter: yyDollar[4].showFilterUnion()}} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 794: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Statement -//line sql.y:4415 -======= - case 795: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Statement -//line sql.y:4425 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = &Show{&ShowBasic{Command: VitessMigrations, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}} - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD case 795: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4419 +//line sql.y:4425 { yyLOCAL = &Show{&ShowBasic{Command: VitessMigrations, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}} } @@ -22196,199 +15109,111 @@ yydefault: case 796: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4423 - { - yyLOCAL = &Show{&ShowBasic{Command: DMLJobs, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}} -======= - case 796: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Statement //line sql.y:4429 { - yyLOCAL = &Show{&ShowDMLJob{UUID: yyDollar[3].str, Detail: true}} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Show{&ShowBasic{Command: VitessMigrations, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL case 797: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Statement -//line sql.y:4427 - { - yyLOCAL = &Show{&ShowDMLJob{UUID: yyDollar[3].str, Detail: false}} - } - yyVAL.union = yyLOCAL - case 798: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4431 - { - yyLOCAL = &Show{&ShowDMLJob{UUID: yyDollar[3].str, Detail: true}} - } - yyVAL.union = yyLOCAL - case 799: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4435 -======= //line sql.y:4433 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)} + yyLOCAL = &Show{&ShowBasic{Command: DMLJobs, Filter: yyDollar[4].showFilterUnion(), DbName: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL -<<<<<<< HEAD -======= case 798: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4437 { - yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)} + yyLOCAL = &Show{&ShowDMLJob{UUID: yyDollar[3].str, Detail: false}} } yyVAL.union = yyLOCAL case 799: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement //line sql.y:4441 { - yyLOCAL = &ShowThrottledApps{} + yyLOCAL = &Show{&ShowDMLJob{UUID: yyDollar[3].str, Detail: true}} } yyVAL.union = yyLOCAL ->>>>>>> e439161508 (fix: complete time period feature) case 800: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4439 - { - yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)} -======= //line sql.y:4445 { - yyLOCAL = &Show{&ShowBasic{Command: VitessReplicationStatus, Filter: yyDollar[3].showFilterUnion()}} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL case 801: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4443 - { - yyLOCAL = &ShowThrottledApps{} -======= //line sql.y:4449 { - yyLOCAL = &ShowThrottlerStatus{} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &ShowMigrationLogs{UUID: string(yyDollar[3].str)} } yyVAL.union = yyLOCAL case 802: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4447 -======= //line sql.y:4453 { - yyLOCAL = &Show{&ShowBasic{Command: VschemaTables}} + yyLOCAL = &ShowThrottledApps{} } yyVAL.union = yyLOCAL case 803: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4457 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowBasic{Command: VitessReplicationStatus, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 803: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Statement -//line sql.y:4451 -======= case 804: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4461 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ShowThrottlerStatus{} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 804: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Statement -//line sql.y:4455 -======= case 805: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4465 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowBasic{Command: VschemaTables}} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 805: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Statement -//line sql.y:4459 - { - yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes}} - } - yyVAL.union = yyLOCAL -======= ->>>>>>> e439161508 (fix: complete time period feature) case 806: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4463 - { - yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes, Tbl: yyDollar[5].tableName}} -======= //line sql.y:4469 { - yyLOCAL = &Show{&ShowBasic{Command: VitessShards, Filter: yyDollar[3].showFilterUnion()}} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes}} } yyVAL.union = yyLOCAL case 807: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4467 - { - yyLOCAL = &Show{&ShowBasic{Command: Warnings}} -======= //line sql.y:4473 { - yyLOCAL = &Show{&ShowBasic{Command: VitessTablets, Filter: yyDollar[3].showFilterUnion()}} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Show{&ShowBasic{Command: VschemaVindexes, Tbl: yyDollar[5].tableName}} } yyVAL.union = yyLOCAL case 808: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4471 -======= //line sql.y:4477 { - yyLOCAL = &Show{&ShowBasic{Command: VitessTarget}} + yyLOCAL = &Show{&ShowBasic{Command: Warnings}} } yyVAL.union = yyLOCAL case 809: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4481 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowBasic{Command: VitessShards, Filter: yyDollar[3].showFilterUnion()}} } @@ -22396,641 +15221,342 @@ yydefault: case 810: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4475 +//line sql.y:4485 { yyLOCAL = &Show{&ShowBasic{Command: VitessTablets, Filter: yyDollar[3].showFilterUnion()}} } yyVAL.union = yyLOCAL - case 810: + case 811: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4479 +//line sql.y:4489 { yyLOCAL = &Show{&ShowBasic{Command: VitessTarget}} } yyVAL.union = yyLOCAL - case 811: + case 812: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4483 +//line sql.y:4493 { yyLOCAL = &Show{&ShowBasic{Command: Workload}} } yyVAL.union = yyLOCAL - case 812: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Statement -//line sql.y:4490 -======= -//line sql.y:4488 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].identifierCI.String())}} - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 813: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Statement -//line sql.y:4494 -======= - case 811: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Statement -//line sql.y:4492 - { - yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} - } - yyVAL.union = yyLOCAL - case 812: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Statement -//line sql.y:4496 - { - yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String()}} - } - yyVAL.union = yyLOCAL case 813: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement //line sql.y:4500 { - yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} + yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].identifierCI.String())}} } yyVAL.union = yyLOCAL case 814: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement //line sql.y:4504 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 814: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Statement -//line sql.y:4498 - { - yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String()}} - } - yyVAL.union = yyLOCAL - case 815: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Statement -//line sql.y:4502 -======= case 815: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement //line sql.y:4508 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} + yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String()}} } yyVAL.union = yyLOCAL case 816: -<<<<<<< HEAD - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Statement -//line sql.y:4506 -======= yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement //line sql.y:4512 { - yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}} + yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL case 817: - yyDollar = yyS[yypt-5 : yypt+1] - var yyLOCAL Statement -//line sql.y:4516 - { - yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[3].str)}} - } - yyVAL.union = yyLOCAL - case 818: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4520 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4516 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 817: + case 818: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4510 +//line sql.y:4520 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}} } yyVAL.union = yyLOCAL - case 818: + case 819: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4514 +//line sql.y:4524 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str) + " " + string(yyDollar[3].str) + " " + String(yyDollar[4].tableName)}} } yyVAL.union = yyLOCAL - case 819: + case 820: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4518 +//line sql.y:4528 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[3].str)}} } yyVAL.union = yyLOCAL - case 820: + case 821: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4522 +//line sql.y:4532 { yyLOCAL = &Show{&ShowOther{Command: string(yyDollar[2].str)}} } yyVAL.union = yyLOCAL - case 821: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4528 - { - yyVAL.str = "" - } case 822: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4532 - { - yyVAL.str = "extended " - } - case 823: yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL bool //line sql.y:4538 -======= - case 819: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4526 { yyVAL.str = "" } - case 820: + case 823: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4530 +//line sql.y:4542 { yyVAL.str = "extended " } - case 821: + case 824: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4536 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4548 { yyLOCAL = false } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 824: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL bool -//line sql.y:4542 -======= - case 822: + case 825: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:4540 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4552 { yyLOCAL = true } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 825: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4548 - { - yyVAL.str = string(yyDollar[1].str) - } case 826: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4552 -======= - case 823: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4546 +//line sql.y:4558 { yyVAL.str = string(yyDollar[1].str) } - case 824: + case 827: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4550 - { - yyVAL.str = string(yyDollar[1].str) - } - case 825: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4556 - { - yyVAL.identifierCS = NewIdentifierCS("") - } - case 826: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4560 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4562 { yyVAL.str = string(yyDollar[1].str) } - case 827: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4564 - { - yyVAL.identifierCS = yyDollar[2].identifierCS - } case 828: yyDollar = yyS[yypt-0 : yypt+1] -<<<<<<< HEAD -//line sql.y:4558 -======= - var yyLOCAL *ShowFilter -//line sql.y:4570 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4568 { yyVAL.identifierCS = NewIdentifierCS("") } -<<<<<<< HEAD - case 828: + case 829: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4562 +//line sql.y:4572 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 829: + case 830: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4566 +//line sql.y:4576 { yyVAL.identifierCS = yyDollar[2].identifierCS } - case 830: + case 831: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4572 +//line sql.y:4582 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 831: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *ShowFilter -//line sql.y:4576 -======= - yyVAL.union = yyLOCAL - case 829: + case 832: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4574 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4586 { yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 832: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *ShowFilter -//line sql.y:4580 -======= - case 830: + case 833: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4578 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4590 { yyLOCAL = &ShowFilter{Filter: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 833: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL *ShowFilter -//line sql.y:4586 -======= - case 831: + case 834: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4584 - { - yyLOCAL = nil - } - yyVAL.union = yyLOCAL - case 832: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *ShowFilter -//line sql.y:4588 - { - yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)} - } - yyVAL.union = yyLOCAL - case 833: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4594 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4596 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 834: -<<<<<<< HEAD + case 835: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ShowFilter -//line sql.y:4590 +//line sql.y:4600 { yyLOCAL = &ShowFilter{Like: string(yyDollar[2].str)} } yyVAL.union = yyLOCAL - case 835: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4596 - { - yyVAL.empty = struct{}{} - } case 836: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4600 + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:4606 { yyVAL.empty = struct{}{} } case 837: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4604 +//line sql.y:4610 { yyVAL.empty = struct{}{} } case 838: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4610 - { - yyVAL.str = string(yyDollar[1].str) - } - case 839: - yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:4614 - { - yyVAL.str = string(yyDollar[1].str) - } - case 840: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Statement -//line sql.y:4620 -======= - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4598 - { - yyVAL.empty = struct{}{} - } - case 835: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4602 { yyVAL.empty = struct{}{} } - case 836: + case 839: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4608 +//line sql.y:4620 { yyVAL.str = string(yyDollar[1].str) } - case 837: + case 840: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4612 +//line sql.y:4624 { yyVAL.str = string(yyDollar[1].str) } - case 838: + case 841: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4618 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4630 { yyLOCAL = &Use{DBName: yyDollar[2].identifierCS} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 841: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Statement -//line sql.y:4624 -======= - case 839: + case 842: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4622 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4634 { yyLOCAL = &Use{DBName: IdentifierCS{v: ""}} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 842: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Statement -//line sql.y:4628 -======= - case 840: + case 843: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4626 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4638 { yyLOCAL = &Use{DBName: NewIdentifierCS(yyDollar[2].identifierCS.String() + "@" + string(yyDollar[3].str))} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 843: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4635 -======= - case 841: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4633 - { - yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) - } - case 842: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4637 - { - yyVAL.identifierCS = NewIdentifierCS("@" + string(yyDollar[1].str)) - } - case 843: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4641 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyVAL.identifierCS = NewIdentifierCS("@@" + string(yyDollar[1].str)) - } case 844: yyDollar = yyS[yypt-1 : yypt+1] -<<<<<<< HEAD -//line sql.y:4639 +//line sql.y:4645 { - yyVAL.identifierCS = NewIdentifierCS("@" + string(yyDollar[1].str)) + yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } case 845: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4643 +//line sql.y:4649 { - yyVAL.identifierCS = NewIdentifierCS("@@" + string(yyDollar[1].str)) + yyVAL.identifierCS = NewIdentifierCS("@" + string(yyDollar[1].str)) } case 846: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4647 +//line sql.y:4653 { - yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) + yyVAL.identifierCS = NewIdentifierCS("@@" + string(yyDollar[1].str)) } case 847: yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Statement -//line sql.y:4654 -======= -//line sql.y:4645 +//line sql.y:4657 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 845: + case 848: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4652 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4664 { yyLOCAL = &Begin{} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 848: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Statement -//line sql.y:4658 -======= - case 846: + case 849: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4656 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4668 { yyLOCAL = &Begin{TxAccessModes: yyDollar[3].txAccessModesUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 849: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL []TxAccessMode -//line sql.y:4663 -======= - case 847: + case 850: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4661 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4673 { yyLOCAL = nil } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 850: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL []TxAccessMode -//line sql.y:4667 - { - yyLOCAL = yyDollar[1].txAccessModesUnion() - } - yyVAL.union = yyLOCAL case 851: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4673 -======= - case 848: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL []TxAccessMode -//line sql.y:4665 +//line sql.y:4677 { yyLOCAL = yyDollar[1].txAccessModesUnion() } yyVAL.union = yyLOCAL - case 849: + case 852: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []TxAccessMode -//line sql.y:4671 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4683 { yyLOCAL = []TxAccessMode{yyDollar[1].txAccessModeUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 852: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4677 -======= - case 850: + case 853: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4675 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4687 { yySLICE := (*[]TxAccessMode)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].txAccessModeUnion()) } -<<<<<<< HEAD - case 853: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL TxAccessMode -//line sql.y:4683 -======= - case 851: + case 854: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4681 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4693 { yyLOCAL = WithConsistentSnapshot } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 854: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL TxAccessMode -//line sql.y:4687 - { - yyLOCAL = ReadWrite - } - yyVAL.union = yyLOCAL case 855: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4691 -======= - case 852: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL TxAccessMode -//line sql.y:4685 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4697 { yyLOCAL = ReadWrite } yyVAL.union = yyLOCAL -<<<<<<< HEAD case 856: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Statement -//line sql.y:4698 -======= - case 853: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TxAccessMode -//line sql.y:4689 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4701 { yyLOCAL = ReadOnly } @@ -23038,430 +15564,227 @@ yydefault: case 857: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4704 -======= -//line sql.y:4696 +//line sql.y:4708 { yyLOCAL = &Commit{} } yyVAL.union = yyLOCAL - case 855: + case 858: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4702 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4714 { yyLOCAL = &Rollback{} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 858: - yyDollar = yyS[yypt-5 : yypt+1] - var yyLOCAL Statement -//line sql.y:4708 -======= - case 856: + case 859: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:4706 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = &SRollback{Name: yyDollar[5].identifierCI} - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 859: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4713 -======= - case 857: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4711 - { - yyVAL.empty = struct{}{} - } - case 858: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4713 +//line sql.y:4718 { - yyVAL.empty = struct{}{} + yyLOCAL = &SRollback{Name: yyDollar[5].identifierCI} } - case 859: + yyVAL.union = yyLOCAL + case 860: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4716 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4723 { yyVAL.empty = struct{}{} } - case 860: + case 861: yyDollar = yyS[yypt-1 : yypt+1] -<<<<<<< HEAD -//line sql.y:4715 +//line sql.y:4725 { yyVAL.empty = struct{}{} } - case 861: + case 862: yyDollar = yyS[yypt-0 : yypt+1] -======= ->>>>>>> e439161508 (fix: complete time period feature) -//line sql.y:4718 +//line sql.y:4728 { yyVAL.empty = struct{}{} } -<<<<<<< HEAD - case 862: + case 863: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4720 +//line sql.y:4730 { yyVAL.empty = struct{}{} } - case 863: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Statement -//line sql.y:4724 -======= - case 861: + case 864: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4722 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4734 { yyLOCAL = &Savepoint{Name: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 864: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Statement -//line sql.y:4730 -======= - case 862: + case 865: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4728 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4740 { yyLOCAL = &Release{Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 865: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL ExplainType -//line sql.y:4735 -======= - case 863: + case 866: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4733 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4745 { yyLOCAL = EmptyType } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 866: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL ExplainType -//line sql.y:4739 - { - yyLOCAL = JSONType -======= - case 864: + case 867: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4737 +//line sql.y:4749 { yyLOCAL = JSONType } yyVAL.union = yyLOCAL - case 865: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL ExplainType -//line sql.y:4741 - { - yyLOCAL = TreeType - } - yyVAL.union = yyLOCAL - case 866: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL ExplainType -//line sql.y:4745 - { - yyLOCAL = VitessType ->>>>>>> e439161508 (fix: complete time period feature) - } - yyVAL.union = yyLOCAL - case 867: + case 868: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -<<<<<<< HEAD -//line sql.y:4743 +//line sql.y:4753 { yyLOCAL = TreeType -======= -//line sql.y:4749 - { - yyLOCAL = VTExplainType ->>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL - case 868: + case 869: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -<<<<<<< HEAD -//line sql.y:4747 +//line sql.y:4757 { yyLOCAL = VitessType } yyVAL.union = yyLOCAL - case 869: + case 870: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4751 +//line sql.y:4761 { yyLOCAL = VTExplainType } yyVAL.union = yyLOCAL - case 870: + case 871: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4755 -======= -//line sql.y:4753 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4765 { yyLOCAL = TraditionalType } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 871: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL ExplainType -//line sql.y:4759 -======= - case 869: + case 872: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ExplainType -//line sql.y:4757 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4769 { yyLOCAL = AnalyzeType } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 872: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL VExplainType -//line sql.y:4764 -======= - case 870: + case 873: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4762 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4774 { yyLOCAL = PlanVExplainType } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 873: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL VExplainType -//line sql.y:4768 - { - yyLOCAL = PlanVExplainType -======= - case 871: + case 874: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL VExplainType -//line sql.y:4766 +//line sql.y:4778 { yyLOCAL = PlanVExplainType } yyVAL.union = yyLOCAL - case 872: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL VExplainType -//line sql.y:4770 - { - yyLOCAL = AllVExplainType - } - yyVAL.union = yyLOCAL - case 873: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL VExplainType -//line sql.y:4774 - { - yyLOCAL = QueriesVExplainType ->>>>>>> e439161508 (fix: complete time period feature) - } - yyVAL.union = yyLOCAL - case 874: + case 875: yyDollar = yyS[yypt-1 : yypt+1] -<<<<<<< HEAD var yyLOCAL VExplainType -//line sql.y:4772 -======= -//line sql.y:4780 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4782 { yyLOCAL = AllVExplainType } yyVAL.union = yyLOCAL - case 875: + case 876: yyDollar = yyS[yypt-1 : yypt+1] -<<<<<<< HEAD var yyLOCAL VExplainType -//line sql.y:4776 +//line sql.y:4786 { yyLOCAL = QueriesVExplainType } yyVAL.union = yyLOCAL - case 876: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4782 -======= -//line sql.y:4784 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyVAL.str = yyDollar[1].str - } case 877: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4786 +//line sql.y:4792 { yyVAL.str = yyDollar[1].str } case 878: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4790 - { - yyVAL.str = yyDollar[1].str - } - case 879: - yyDollar = yyS[yypt-1 : yypt+1] -<<<<<<< HEAD - var yyLOCAL Statement //line sql.y:4796 -======= -//line sql.y:4788 ->>>>>>> e439161508 (fix: complete time period feature) { yyVAL.str = yyDollar[1].str } -<<<<<<< HEAD -======= - case 877: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Statement -//line sql.y:4794 - { - yyLOCAL = yyDollar[1].selStmtUnion() - } - yyVAL.union = yyLOCAL - case 878: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Statement -//line sql.y:4798 - { - yyLOCAL = yyDollar[1].statementUnion() - } - yyVAL.union = yyLOCAL case 879: yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Statement -//line sql.y:4802 +//line sql.y:4800 { - yyLOCAL = yyDollar[1].statementUnion() + yyVAL.str = yyDollar[1].str } ->>>>>>> e439161508 (fix: complete time period feature) - yyVAL.union = yyLOCAL case 880: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4800 -======= //line sql.y:4806 { - yyLOCAL = yyDollar[1].statementUnion() + yyLOCAL = yyDollar[1].selStmtUnion() } yyVAL.union = yyLOCAL case 881: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4811 ->>>>>>> e439161508 (fix: complete time period feature) + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL Statement +//line sql.y:4810 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 881: + case 882: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4804 +//line sql.y:4814 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 882: + case 883: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Statement -//line sql.y:4808 +//line sql.y:4818 { yyLOCAL = yyDollar[1].statementUnion() } yyVAL.union = yyLOCAL - case 883: + case 884: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:4813 +//line sql.y:4823 { yyVAL.str = "" } -<<<<<<< HEAD - case 884: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4817 - { - yyVAL.str = yyDollar[1].identifierCI.val - } case 885: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4821 - { - yyVAL.str = encodeSQLString(yyDollar[1].str) - } - case 886: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Statement //line sql.y:4827 - { - yyLOCAL = &ExplainTab{Table: yyDollar[3].tableName, Wild: yyDollar[4].str} - } - yyVAL.union = yyLOCAL - case 887: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Statement -//line sql.y:4831 -======= - case 882: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4815 { yyVAL.str = yyDollar[1].identifierCI.val } - case 883: + case 886: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4819 +//line sql.y:4831 { yyVAL.str = encodeSQLString(yyDollar[1].str) } - case 884: + case 887: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4825 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4837 { yyLOCAL = &ExplainTab{Table: yyDollar[3].tableName, Wild: yyDollar[4].str} } @@ -23469,26 +15792,15 @@ yydefault: case 888: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4837 -======= -//line sql.y:4829 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4841 { yyLOCAL = &ExplainStmt{Type: yyDollar[3].explainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD case 889: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Statement -//line sql.y:4843 -======= - case 886: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4835 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4847 { yyLOCAL = &VExplainStmt{Type: yyDollar[3].vexplainTypeUnion(), Statement: yyDollar[4].statementUnion(), Comments: Comments(yyDollar[2].strs).Parsed()} } @@ -23496,190 +15808,102 @@ yydefault: case 890: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4847 -======= -//line sql.y:4841 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4853 { yyLOCAL = &OtherAdmin{} } yyVAL.union = yyLOCAL -<<<<<<< HEAD case 891: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Statement -//line sql.y:4853 -======= - case 888: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4845 +//line sql.y:4857 { yyLOCAL = &OtherAdmin{} } yyVAL.union = yyLOCAL - case 889: + case 892: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4851 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4863 { yyLOCAL = &LockTables{Tables: yyDollar[3].tableAndLockTypesUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 892: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL TableAndLockTypes -//line sql.y:4859 -======= - case 890: + case 893: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableAndLockTypes -//line sql.y:4857 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4869 { yyLOCAL = TableAndLockTypes{yyDollar[1].tableAndLockTypeUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 893: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4863 -======= - case 891: + case 894: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4861 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4873 { yySLICE := (*TableAndLockTypes)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableAndLockTypeUnion()) } -<<<<<<< HEAD - case 894: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *TableAndLockType -//line sql.y:4869 -======= - case 892: + case 895: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *TableAndLockType -//line sql.y:4867 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4879 { yyLOCAL = &TableAndLockType{Table: yyDollar[1].aliasedTableNameUnion(), Lock: yyDollar[2].lockTypeUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 895: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL LockType -//line sql.y:4875 -======= - case 893: + case 896: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LockType -//line sql.y:4873 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4885 { yyLOCAL = Read } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 896: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL LockType -//line sql.y:4879 -======= - case 894: + case 897: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL LockType -//line sql.y:4877 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4889 { yyLOCAL = ReadLocal } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 897: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL LockType -//line sql.y:4883 -======= - case 895: + case 898: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LockType -//line sql.y:4881 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4893 { yyLOCAL = Write } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 898: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL LockType -//line sql.y:4887 -======= - case 896: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL LockType -//line sql.y:4885 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = LowPriorityWrite - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD case 899: yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Statement -//line sql.y:4893 -======= - case 897: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Statement -//line sql.y:4891 ->>>>>>> e439161508 (fix: complete time period feature) + var yyLOCAL LockType +//line sql.y:4897 { - yyLOCAL = &UnlockTables{} + yyLOCAL = LowPriorityWrite } yyVAL.union = yyLOCAL -<<<<<<< HEAD case 900: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Statement -//line sql.y:4899 +//line sql.y:4903 { - yyLOCAL = &RevertMigration{Comments: Comments(yyDollar[2].strs).Parsed(), UUID: string(yyDollar[4].str)} + yyLOCAL = &UnlockTables{} } yyVAL.union = yyLOCAL case 901: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4903 -======= - case 898: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Statement -//line sql.y:4897 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4909 { yyLOCAL = &RevertMigration{Comments: Comments(yyDollar[2].strs).Parsed(), UUID: string(yyDollar[4].str)} } yyVAL.union = yyLOCAL -<<<<<<< HEAD case 902: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Statement -//line sql.y:4909 -======= - case 899: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4901 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4913 { yyLOCAL = &RevertMigration{Comments: Comments(yyDollar[2].strs).Parsed(), UUID: string(yyDollar[4].str)} } @@ -23687,505 +15911,264 @@ yydefault: case 903: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:4913 -======= -//line sql.y:4907 +//line sql.y:4919 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), FlushOptions: yyDollar[3].strs} } yyVAL.union = yyLOCAL - case 901: + case 904: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Statement -//line sql.y:4911 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4923 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 904: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Statement -//line sql.y:4917 - { - yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), WithLock: true} - } - yyVAL.union = yyLOCAL case 905: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Statement -//line sql.y:4921 - { - yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion()} - } - yyVAL.union = yyLOCAL - case 906: - yyDollar = yyS[yypt-7 : yypt+1] - var yyLOCAL Statement -//line sql.y:4925 - { - yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), WithLock: true} - } - yyVAL.union = yyLOCAL - case 907: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Statement -//line sql.y:4929 -======= - case 902: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:4915 +//line sql.y:4927 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), WithLock: true} } yyVAL.union = yyLOCAL - case 903: + case 906: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:4919 +//line sql.y:4931 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion()} } yyVAL.union = yyLOCAL - case 904: + case 907: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Statement -//line sql.y:4923 +//line sql.y:4935 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), WithLock: true} } yyVAL.union = yyLOCAL - case 905: + case 908: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Statement -//line sql.y:4927 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4939 { yyLOCAL = &Flush{IsLocal: yyDollar[2].booleanUnion(), TableNames: yyDollar[4].tableNamesUnion(), ForExport: true} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 908: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4935 - { - yyVAL.strs = []string{yyDollar[1].str} - } case 909: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4939 - { - yyVAL.strs = append(yyDollar[1].strs, yyDollar[3].str) - } - case 910: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4945 -======= - case 906: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4933 +//line sql.y:4945 { yyVAL.strs = []string{yyDollar[1].str} } - case 907: + case 910: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4937 +//line sql.y:4949 { yyVAL.strs = append(yyDollar[1].strs, yyDollar[3].str) } - case 908: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4943 - { - yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) - } - case 909: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4947 - { - yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) - } - case 910: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4951 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) - } case 911: yyDollar = yyS[yypt-2 : yypt+1] -<<<<<<< HEAD -//line sql.y:4949 -======= //line sql.y:4955 ->>>>>>> e439161508 (fix: complete time period feature) { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 912: -<<<<<<< HEAD yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4953 +//line sql.y:4959 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 913: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4957 +//line sql.y:4963 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 914: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4961 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:4967 { - yyVAL.str = string(yyDollar[1].str) + yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } case 915: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4965 +//line sql.y:4971 { yyVAL.str = string(yyDollar[1].str) } case 916: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4969 -======= - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4959 - { - yyVAL.str = string(yyDollar[1].str) - } - case 913: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4963 +//line sql.y:4975 { yyVAL.str = string(yyDollar[1].str) } - case 914: + case 917: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4967 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4979 { yyVAL.str = string(yyDollar[1].str) } - case 915: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4971 - { - yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) + yyDollar[3].str - } - case 916: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4975 - { - yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) - } - case 917: + case 918: yyDollar = yyS[yypt-1 : yypt+1] -<<<<<<< HEAD -//line sql.y:4973 -======= -//line sql.y:4979 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:4983 { yyVAL.str = string(yyDollar[1].str) } - case 918: + case 919: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:4977 +//line sql.y:4987 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) + yyDollar[3].str } - case 919: + case 920: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:4981 +//line sql.y:4991 { yyVAL.str = string(yyDollar[1].str) + " " + string(yyDollar[2].str) } - case 920: - yyDollar = yyS[yypt-1 : yypt+1] -<<<<<<< HEAD -//line sql.y:4985 - { - yyVAL.str = string(yyDollar[1].str) - } case 921: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4989 +//line sql.y:4995 { yyVAL.str = string(yyDollar[1].str) } case 922: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4993 +//line sql.y:4999 { yyVAL.str = string(yyDollar[1].str) } case 923: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL bool -//line sql.y:4998 -======= -//line sql.y:4983 - { - yyVAL.str = string(yyDollar[1].str) - } - case 919: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:4987 +//line sql.y:5003 { yyVAL.str = string(yyDollar[1].str) } - case 920: + case 924: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:4992 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5008 { yyLOCAL = false } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 924: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL bool -//line sql.y:5002 - { - yyLOCAL = true - } - yyVAL.union = yyLOCAL case 925: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:5006 -======= - case 921: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL bool -//line sql.y:4996 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5012 { yyLOCAL = true } yyVAL.union = yyLOCAL -<<<<<<< HEAD case 926: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5011 - { - yyVAL.str = "" - } - case 927: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5015 - { - yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String() - } - case 928: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5020 - { - setAllowComments(yylex, true) - } - case 929: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5024 - { - yyVAL.strs = yyDollar[2].strs - setAllowComments(yylex, false) - } - case 930: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5030 - { - yyVAL.strs = nil - } - case 931: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5034 - { - yyVAL.strs = append(yyDollar[1].strs, yyDollar[2].str) - } - case 932: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL bool -//line sql.y:5040 -======= - case 922: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:5000 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5016 { yyLOCAL = true } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 933: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL bool -//line sql.y:5044 -======= - case 923: + case 927: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5005 +//line sql.y:5021 { yyVAL.str = "" } - case 924: + case 928: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5009 +//line sql.y:5025 { yyVAL.str = " " + string(yyDollar[1].str) + " " + string(yyDollar[2].str) + " " + yyDollar[3].identifierCI.String() } - case 925: + case 929: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5014 +//line sql.y:5030 { setAllowComments(yylex, true) } - case 926: + case 930: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5018 +//line sql.y:5034 { yyVAL.strs = yyDollar[2].strs setAllowComments(yylex, false) } - case 927: + case 931: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5024 +//line sql.y:5040 { yyVAL.strs = nil } - case 928: + case 932: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5028 +//line sql.y:5044 { yyVAL.strs = append(yyDollar[1].strs, yyDollar[2].str) } - case 929: + case 933: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:5034 +//line sql.y:5050 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 930: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL bool -//line sql.y:5038 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = false - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD case 934: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:5048 - { - yyLOCAL = true - } - yyVAL.union = yyLOCAL - case 935: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5053 -======= - case 931: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL bool -//line sql.y:5042 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5054 { - yyVAL.str = "" + yyLOCAL = false } -<<<<<<< HEAD - case 936: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5057 -======= yyVAL.union = yyLOCAL - case 932: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5047 - { - yyVAL.str = "" - } - case 933: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5051 - { - yyVAL.str = SQLNoCacheStr - } - case 934: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5055 - { - yyVAL.str = SQLCacheStr - } case 935: - yyDollar = yyS[yypt-0 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:5060 +//line sql.y:5058 { - yyLOCAL = false + yyLOCAL = true } yyVAL.union = yyLOCAL case 936: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL bool -//line sql.y:5064 ->>>>>>> e439161508 (fix: complete time period feature) + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:5063 { - yyVAL.str = SQLNoCacheStr + yyVAL.str = "" } case 937: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5061 +//line sql.y:5067 { - yyVAL.str = SQLCacheStr + yyVAL.str = SQLNoCacheStr } case 938: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL bool -//line sql.y:5066 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:5071 { - yyLOCAL = false + yyVAL.str = SQLCacheStr } - yyVAL.union = yyLOCAL case 939: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:5070 +//line sql.y:5076 { - yyLOCAL = true + yyLOCAL = false } yyVAL.union = yyLOCAL -<<<<<<< HEAD case 940: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:5074 +//line sql.y:5080 { yyLOCAL = true } yyVAL.union = yyLOCAL case 941: - yyDollar = yyS[yypt-5 : yypt+1] - var yyLOCAL Statement -//line sql.y:5080 -======= - case 937: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:5068 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5084 { yyLOCAL = true } @@ -24193,19 +16176,15 @@ yydefault: case 942: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -<<<<<<< HEAD -//line sql.y:5084 -======= -//line sql.y:5074 +//line sql.y:5090 { yyLOCAL = &PrepareStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Statement: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 939: + case 943: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:5078 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5094 { yyLOCAL = &PrepareStmt{ Name: yyDollar[3].identifierCI, @@ -24214,807 +16193,419 @@ yydefault: } } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 943: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Statement -//line sql.y:5094 -======= - case 940: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Statement -//line sql.y:5088 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = &ExecuteStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Arguments: yyDollar[4].variablesUnion()} - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 944: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL []*Variable -//line sql.y:5099 -======= - case 941: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL []*Variable -//line sql.y:5093 - { - yyLOCAL = nil - } - yyVAL.union = yyLOCAL - case 942: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL []*Variable -//line sql.y:5097 - { - yyLOCAL = yyDollar[2].variablesUnion() - } - yyVAL.union = yyLOCAL - case 943: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Statement -//line sql.y:5103 - { - yyLOCAL = &DeallocateStmt{Type: DeallocateType, Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI} - } - yyVAL.union = yyLOCAL case 944: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:5107 +//line sql.y:5104 { - yyLOCAL = &DeallocateStmt{Type: DropType, Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI} + yyLOCAL = &ExecuteStmt{Name: yyDollar[3].identifierCI, Comments: Comments(yyDollar[2].strs).Parsed(), Arguments: yyDollar[4].variablesUnion()} } yyVAL.union = yyLOCAL case 945: yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL SelectExprs -//line sql.y:5112 ->>>>>>> e439161508 (fix: complete time period feature) + var yyLOCAL []*Variable +//line sql.y:5109 { yyLOCAL = nil } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 945: + case 946: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL []*Variable -//line sql.y:5103 +//line sql.y:5113 { yyLOCAL = yyDollar[2].variablesUnion() } yyVAL.union = yyLOCAL - case 946: + case 947: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:5109 +//line sql.y:5119 { yyLOCAL = &DeallocateStmt{Type: DeallocateType, Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI} } yyVAL.union = yyLOCAL - case 947: + case 948: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Statement -//line sql.y:5113 +//line sql.y:5123 { yyLOCAL = &DeallocateStmt{Type: DropType, Comments: Comments(yyDollar[2].strs).Parsed(), Name: yyDollar[4].identifierCI} } yyVAL.union = yyLOCAL - case 948: + case 949: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL SelectExprs -//line sql.y:5118 +//line sql.y:5128 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 949: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL SelectExprs -//line sql.y:5122 -======= - case 946: + case 950: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExprs -//line sql.y:5116 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5132 { yyLOCAL = yyDollar[1].selectExprsUnion() } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 950: + case 951: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5127 +//line sql.y:5137 { yyVAL.strs = nil } - case 951: + case 952: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5131 +//line sql.y:5141 { yyVAL.strs = []string{yyDollar[1].str} } - case 952: + case 953: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5135 +//line sql.y:5145 { // TODO: This is a hack since I couldn't get it to work in a nicer way. I got 'conflicts: 8 shift/reduce' yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str} } - case 953: + case 954: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5139 +//line sql.y:5149 { yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str} } - case 954: + case 955: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:5143 +//line sql.y:5153 { yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str, yyDollar[4].str} } - case 955: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5149 - { - yyVAL.str = SQLNoCacheStr - } case 956: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5153 +//line sql.y:5159 { - yyVAL.str = SQLCacheStr + yyVAL.str = SQLNoCacheStr } case 957: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5157 +//line sql.y:5163 { - yyVAL.str = DistinctStr + yyVAL.str = SQLCacheStr } case 958: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5161 +//line sql.y:5167 { yyVAL.str = DistinctStr } case 959: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5165 +//line sql.y:5171 { - yyVAL.str = StraightJoinHint + yyVAL.str = DistinctStr } case 960: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5169 +//line sql.y:5175 { - yyVAL.str = SQLCalcFoundRowsStr + yyVAL.str = StraightJoinHint } case 961: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5173 - { - yyVAL.str = AllStr // These are not picked up by NewSelect, and so ALL will be dropped. But this is OK, since it's redundant anyway - } - case 962: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL SelectExprs //line sql.y:5179 -======= - case 947: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5121 - { - yyVAL.strs = nil - } - case 948: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5125 - { - yyVAL.strs = []string{yyDollar[1].str} - } - case 949: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5129 - { // TODO: This is a hack since I couldn't get it to work in a nicer way. I got 'conflicts: 8 shift/reduce' - yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str} - } - case 950: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5133 - { - yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str} - } - case 951: - yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:5137 - { - yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str, yyDollar[4].str} - } - case 952: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5143 - { - yyVAL.str = SQLNoCacheStr - } - case 953: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5147 - { - yyVAL.str = SQLCacheStr - } - case 954: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5151 - { - yyVAL.str = DistinctStr - } - case 955: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5155 - { - yyVAL.str = DistinctStr - } - case 956: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5159 - { - yyVAL.str = StraightJoinHint - } - case 957: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5163 { yyVAL.str = SQLCalcFoundRowsStr } - case 958: + case 962: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5167 +//line sql.y:5183 { yyVAL.str = AllStr // These are not picked up by NewSelect, and so ALL will be dropped. But this is OK, since it's redundant anyway } - case 959: + case 963: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExprs -//line sql.y:5173 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5189 { yyLOCAL = SelectExprs{yyDollar[1].selectExprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 963: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5183 -======= - case 960: + case 964: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5177 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5193 { yySLICE := (*SelectExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].selectExprUnion()) } -<<<<<<< HEAD - case 964: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL SelectExpr -//line sql.y:5189 -======= - case 961: + case 965: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5183 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5199 { yyLOCAL = &StarExpr{} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 965: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL SelectExpr -//line sql.y:5193 -======= - case 962: + case 966: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5187 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5203 { yyLOCAL = &AliasedExpr{Expr: yyDollar[1].exprUnion(), As: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 966: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL SelectExpr -//line sql.y:5197 -======= - case 963: + case 967: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5191 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5207 { yyLOCAL = &StarExpr{TableName: TableName{Name: yyDollar[1].identifierCS}} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 967: - yyDollar = yyS[yypt-5 : yypt+1] - var yyLOCAL SelectExpr -//line sql.y:5201 -======= - case 964: + case 968: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL SelectExpr -//line sql.y:5195 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5211 { yyLOCAL = &StarExpr{TableName: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 968: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5206 - { - yyVAL.identifierCI = IdentifierCI{} - } case 969: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5210 - { - yyVAL.identifierCI = yyDollar[1].identifierCI - } - case 970: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5214 - { - yyVAL.identifierCI = yyDollar[2].identifierCI - } - case 972: -======= - case 965: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5200 +//line sql.y:5216 { yyVAL.identifierCI = IdentifierCI{} } - case 966: ->>>>>>> e439161508 (fix: complete time period feature) + case 970: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5221 +//line sql.y:5220 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 967: + case 971: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5208 +//line sql.y:5224 { yyVAL.identifierCI = yyDollar[2].identifierCI } -<<<<<<< HEAD case 973: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL TableExprs -//line sql.y:5226 -======= - case 969: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5215 +//line sql.y:5231 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } - case 970: + case 974: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5220 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5236 { yyLOCAL = TableExprs{&AliasedTableExpr{Expr: TableName{Name: NewIdentifierCS("dual")}}} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 974: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL TableExprs -//line sql.y:5230 -======= - case 971: + case 975: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5224 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5240 { - yyLOCAL = yyDollar[1].tableExprsUnion() - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 975: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL TableExprs -//line sql.y:5236 -======= - case 972: + yyLOCAL = yyDollar[1].tableExprsUnion() + } + yyVAL.union = yyLOCAL + case 976: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5230 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5246 { yyLOCAL = yyDollar[2].tableExprsUnion() } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 976: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL TableExprs -//line sql.y:5242 -======= - case 973: + case 977: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExprs -//line sql.y:5236 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5252 { yyLOCAL = TableExprs{yyDollar[1].tableExprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 977: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5246 -======= - case 974: + case 978: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5240 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5256 { yySLICE := (*TableExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].tableExprUnion()) } -<<<<<<< HEAD - case 980: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL TableExpr -//line sql.y:5256 -======= - case 977: + case 981: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5250 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5266 { yyLOCAL = yyDollar[1].aliasedTableNameUnion() } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 981: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL TableExpr -//line sql.y:5260 -======= - case 978: + case 982: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5254 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5270 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].derivedTableUnion(), As: yyDollar[3].identifierCS, Columns: yyDollar[4].columnsUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 982: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL TableExpr -//line sql.y:5264 -======= - case 979: + case 983: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5258 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5274 { yyLOCAL = &ParenTableExpr{Exprs: yyDollar[2].tableExprsUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 983: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL TableExpr -//line sql.y:5268 -======= - case 980: + case 984: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5262 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5278 { yyLOCAL = yyDollar[1].tableExprUnion() } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 984: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL *DerivedTable -//line sql.y:5274 -======= - case 981: + case 985: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *DerivedTable -//line sql.y:5268 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5284 { yyLOCAL = &DerivedTable{Lateral: false, Select: yyDollar[1].selStmtUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 985: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *DerivedTable -//line sql.y:5278 -======= - case 982: + case 986: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *DerivedTable -//line sql.y:5272 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5288 { yyLOCAL = &DerivedTable{Lateral: true, Select: yyDollar[2].selStmtUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 986: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL *AliasedTableExpr -//line sql.y:5284 -======= - case 983: + case 987: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *AliasedTableExpr -//line sql.y:5278 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5294 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, As: yyDollar[2].identifierCS, Hints: yyDollar[3].indexHintsUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 987: - yyDollar = yyS[yypt-7 : yypt+1] - var yyLOCAL *AliasedTableExpr -//line sql.y:5288 -======= - case 984: + case 988: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL *AliasedTableExpr -//line sql.y:5282 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5298 { yyLOCAL = &AliasedTableExpr{Expr: yyDollar[1].tableName, Partitions: yyDollar[4].partitionsUnion(), As: yyDollar[6].identifierCS, Hints: yyDollar[7].indexHintsUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD -======= - case 985: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL Columns -//line sql.y:5287 - { - yyLOCAL = nil - } - yyVAL.union = yyLOCAL - case 986: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Columns -//line sql.y:5291 - { - yyLOCAL = yyDollar[2].columnsUnion() - } - yyVAL.union = yyLOCAL - case 987: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL Columns -//line sql.y:5296 - { - yyLOCAL = nil - } - yyVAL.union = yyLOCAL ->>>>>>> e439161508 (fix: complete time period feature) - case 988: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL Columns -<<<<<<< HEAD -//line sql.y:5293 -======= -//line sql.y:5300 - { - yyLOCAL = yyDollar[1].columnsUnion() - } - yyVAL.union = yyLOCAL case 989: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Columns -//line sql.y:5306 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5303 { yyLOCAL = nil } yyVAL.union = yyLOCAL case 990: yyDollar = yyS[yypt-3 : yypt+1] -<<<<<<< HEAD var yyLOCAL Columns -//line sql.y:5297 -======= -//line sql.y:5310 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5307 { yyLOCAL = yyDollar[2].columnsUnion() } -<<<<<<< HEAD yyVAL.union = yyLOCAL - case 990: + case 991: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Columns -//line sql.y:5302 -======= - case 991: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL []*Variable -//line sql.y:5316 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5312 { yyLOCAL = nil } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 991: + case 992: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5306 -======= - case 992: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5320 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5316 { yyLOCAL = yyDollar[1].columnsUnion() } -<<<<<<< HEAD yyVAL.union = yyLOCAL - case 992: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Columns -//line sql.y:5312 -======= case 993: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5326 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5322 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 993: + case 994: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5316 +//line sql.y:5326 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } - case 994: + case 995: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*Variable -//line sql.y:5322 +//line sql.y:5332 { yyLOCAL = []*Variable{yyDollar[1].variableUnion()} } yyVAL.union = yyLOCAL - case 995: + case 996: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5326 +//line sql.y:5336 { yySLICE := (*[]*Variable)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].variableUnion()) } - case 996: + case 997: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5332 +//line sql.y:5342 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 997: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Columns -//line sql.y:5336 -======= - case 994: + case 998: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:5330 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5346 { yyLOCAL = Columns{NewIdentifierCI(string(yyDollar[1].str))} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 998: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5340 -======= - case 995: + case 999: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5334 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5350 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } -<<<<<<< HEAD - case 999: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5344 -======= - case 996: + case 1000: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5338 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5354 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, NewIdentifierCI(string(yyDollar[3].str))) } -<<<<<<< HEAD - case 1000: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Partitions -//line sql.y:5350 -======= - case 997: + case 1001: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Partitions -//line sql.y:5344 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5360 { yyLOCAL = Partitions{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1001: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5354 -======= - case 998: + case 1002: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5348 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5364 { yySLICE := (*Partitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } -<<<<<<< HEAD - case 1002: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL TableExpr -//line sql.y:5367 - { - yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} - } - yyVAL.union = yyLOCAL case 1003: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5371 -======= - case 999: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL TableExpr -//line sql.y:5361 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5377 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } @@ -25022,296 +16613,159 @@ yydefault: case 1004: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -<<<<<<< HEAD -//line sql.y:5375 -======= -//line sql.y:5365 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5381 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL -<<<<<<< HEAD case 1005: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL TableExpr -//line sql.y:5379 -======= - case 1001: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5369 +//line sql.y:5385 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion(), Condition: yyDollar[4].joinCondition} } yyVAL.union = yyLOCAL - case 1002: + case 1006: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL TableExpr -//line sql.y:5373 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5389 { yyLOCAL = &JoinTableExpr{LeftExpr: yyDollar[1].tableExprUnion(), Join: yyDollar[2].joinTypeUnion(), RightExpr: yyDollar[3].tableExprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1006: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5385 - { - yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()} - } case 1007: - yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:5387 - { - yyVAL.joinCondition = &JoinCondition{Using: yyDollar[3].columnsUnion()} - } - case 1008: -======= - case 1003: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5379 +//line sql.y:5395 { yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()} } - case 1004: + case 1008: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:5381 +//line sql.y:5397 { yyVAL.joinCondition = &JoinCondition{Using: yyDollar[3].columnsUnion()} } - case 1005: ->>>>>>> e439161508 (fix: complete time period feature) - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5391 - { - yyVAL.joinCondition = &JoinCondition{} - } - case 1006: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5393 - { - yyVAL.joinCondition = yyDollar[1].joinCondition -<<<<<<< HEAD -======= - } - case 1007: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5391 - { - yyVAL.joinCondition = &JoinCondition{} - } - case 1008: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5393 - { - yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()} - } case 1009: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5396 +//line sql.y:5401 { - yyVAL.empty = struct{}{} ->>>>>>> e439161508 (fix: complete time period feature) + yyVAL.joinCondition = &JoinCondition{} } case 1010: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5398 +//line sql.y:5403 { - yyVAL.empty = struct{}{} + yyVAL.joinCondition = yyDollar[1].joinCondition } case 1011: yyDollar = yyS[yypt-0 : yypt+1] -<<<<<<< HEAD -//line sql.y:5397 +//line sql.y:5407 { yyVAL.joinCondition = &JoinCondition{} } - case 1011: + case 1012: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5399 +//line sql.y:5409 { yyVAL.joinCondition = &JoinCondition{On: yyDollar[2].exprUnion()} } - case 1012: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5402 - { - yyVAL.empty = struct{}{} - } case 1013: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5404 - { - yyVAL.empty = struct{}{} - } - case 1014: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5407 - { - yyVAL.identifierCS = NewIdentifierCS("") - } - case 1015: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5411 - { - yyVAL.identifierCS = yyDollar[1].identifierCS - } - case 1016: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5415 - { - yyVAL.identifierCS = yyDollar[2].identifierCS - } - case 1018: -======= -//line sql.y:5401 - { - yyVAL.identifierCS = NewIdentifierCS("") - } - case 1012: ->>>>>>> e439161508 (fix: complete time period feature) - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5422 +//line sql.y:5412 { - yyVAL.identifierCS = yyDollar[1].identifierCS - } - case 1013: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5409 - { - yyVAL.identifierCS = yyDollar[2].identifierCS + yyVAL.empty = struct{}{} } -<<<<<<< HEAD - case 1019: + case 1014: yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL JoinType -//line sql.y:5428 +//line sql.y:5414 { - yyLOCAL = NormalJoinType + yyVAL.empty = struct{}{} } - yyVAL.union = yyLOCAL - case 1020: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL JoinType -//line sql.y:5432 -======= case 1015: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5416 + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:5417 { - yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) + yyVAL.identifierCS = NewIdentifierCS("") } case 1016: yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL JoinType -//line sql.y:5422 +//line sql.y:5421 { - yyLOCAL = NormalJoinType + yyVAL.identifierCS = yyDollar[1].identifierCS } - yyVAL.union = yyLOCAL case 1017: yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL JoinType -//line sql.y:5426 - { - yyLOCAL = NormalJoinType - } - yyVAL.union = yyLOCAL - case 1018: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL JoinType -//line sql.y:5430 +//line sql.y:5425 { - yyLOCAL = NormalJoinType + yyVAL.identifierCS = yyDollar[2].identifierCS } - yyVAL.union = yyLOCAL case 1019: yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL JoinType -//line sql.y:5436 +//line sql.y:5432 { - yyLOCAL = StraightJoinType + yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - yyVAL.union = yyLOCAL case 1020: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL JoinType -//line sql.y:5442 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5438 { yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL case 1021: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL JoinType -<<<<<<< HEAD -//line sql.y:5436 - { - yyLOCAL = NormalJoinType - } - yyVAL.union = yyLOCAL - case 1022: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType //line sql.y:5442 -======= -//line sql.y:5446 { - yyLOCAL = LeftJoinType + yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL case 1022: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5450 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5446 { - yyLOCAL = StraightJoinType + yyLOCAL = NormalJoinType } yyVAL.union = yyLOCAL case 1023: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL JoinType -<<<<<<< HEAD -//line sql.y:5448 +//line sql.y:5452 { - yyLOCAL = LeftJoinType + yyLOCAL = StraightJoinType } yyVAL.union = yyLOCAL case 1024: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5452 +//line sql.y:5458 { yyLOCAL = LeftJoinType } yyVAL.union = yyLOCAL case 1025: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL JoinType -//line sql.y:5456 +//line sql.y:5462 { - yyLOCAL = RightJoinType + yyLOCAL = LeftJoinType } yyVAL.union = yyLOCAL case 1026: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5460 +//line sql.y:5466 { yyLOCAL = RightJoinType } yyVAL.union = yyLOCAL case 1027: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL JoinType -//line sql.y:5466 -======= -//line sql.y:5454 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5470 { yyLOCAL = RightJoinType } @@ -25319,19 +16773,15 @@ yydefault: case 1028: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -<<<<<<< HEAD -//line sql.y:5470 -======= -//line sql.y:5460 +//line sql.y:5476 { yyLOCAL = NaturalJoinType } yyVAL.union = yyLOCAL - case 1025: + case 1029: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL JoinType -//line sql.y:5464 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5480 { if yyDollar[2].joinTypeUnion() == LeftJoinType { yyLOCAL = NaturalLeftJoinType @@ -25340,411 +16790,199 @@ yydefault: } } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1029: + case 1030: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5480 +//line sql.y:5490 { yyVAL.tableName = yyDollar[2].tableName } - case 1030: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5484 - { - yyVAL.tableName = yyDollar[1].tableName - } case 1031: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5490 - { - yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS} - } - case 1032: - yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:5494 - { - yyVAL.tableName = TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS} - } - case 1033: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5500 - { - yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS} - } - case 1034: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL IndexHints -//line sql.y:5505 -======= - case 1026: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5474 - { - yyVAL.tableName = yyDollar[2].tableName - } - case 1027: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5478 { yyVAL.tableName = yyDollar[1].tableName } - case 1028: + case 1032: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5484 +//line sql.y:5500 { yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS} } - case 1029: + case 1033: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5488 +//line sql.y:5504 { yyVAL.tableName = TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS} } - case 1030: + case 1034: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5494 +//line sql.y:5510 { yyVAL.tableName = TableName{Name: yyDollar[1].identifierCS} } - case 1031: + case 1035: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5499 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5515 { yyLOCAL = nil } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1035: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL IndexHints -//line sql.y:5509 - { - yyLOCAL = yyDollar[1].indexHintsUnion() - } - yyVAL.union = yyLOCAL case 1036: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5515 -======= - case 1032: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL IndexHints -//line sql.y:5503 +//line sql.y:5519 { yyLOCAL = yyDollar[1].indexHintsUnion() } yyVAL.union = yyLOCAL - case 1033: + case 1037: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IndexHints -//line sql.y:5509 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5525 { yyLOCAL = IndexHints{yyDollar[1].indexHintUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1037: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5519 -======= - case 1034: + case 1038: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:5513 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5529 { yySLICE := (*IndexHints)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].indexHintUnion()) } -<<<<<<< HEAD - case 1038: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL *IndexHint -//line sql.y:5525 -======= - case 1035: + case 1039: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5519 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5535 { yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1039: - yyDollar = yyS[yypt-5 : yypt+1] - var yyLOCAL *IndexHint -//line sql.y:5529 -======= - case 1036: + case 1040: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5523 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5539 { yyLOCAL = &IndexHint{Type: UseOp, ForType: yyDollar[3].indexHintForTypeUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1040: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL *IndexHint -//line sql.y:5533 - { - yyLOCAL = &IndexHint{Type: IgnoreOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} - } - yyVAL.union = yyLOCAL case 1041: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5537 -======= - case 1037: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL *IndexHint -//line sql.y:5527 +//line sql.y:5543 { yyLOCAL = &IndexHint{Type: IgnoreOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL - case 1038: + case 1042: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL *IndexHint -//line sql.y:5531 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5547 { yyLOCAL = &IndexHint{Type: ForceOp, ForType: yyDollar[3].indexHintForTypeUnion(), Indexes: yyDollar[5].columnsUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1042: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL IndexHintForType -//line sql.y:5542 -======= - case 1039: + case 1043: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5536 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5552 { yyLOCAL = NoForType } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1043: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL IndexHintForType -//line sql.y:5546 -======= - case 1040: + case 1044: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5540 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5556 { yyLOCAL = JoinForType } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1044: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL IndexHintForType -//line sql.y:5550 - { - yyLOCAL = OrderByForType - } - yyVAL.union = yyLOCAL case 1045: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5554 -======= - case 1041: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL IndexHintForType -//line sql.y:5544 +//line sql.y:5560 { yyLOCAL = OrderByForType } yyVAL.union = yyLOCAL - case 1042: + case 1046: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL IndexHintForType -//line sql.y:5548 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = GroupByForType - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1046: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL Expr -//line sql.y:5560 -======= - case 1043: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL Expr -//line sql.y:5554 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = nil - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1047: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Expr //line sql.y:5564 -======= - case 1044: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Expr -//line sql.y:5558 - { - yyLOCAL = yyDollar[2].exprUnion() - } - yyVAL.union = yyLOCAL - case 1045: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Expr -//line sql.y:5565 - { - yyLOCAL = &OrExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1046: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Expr -//line sql.y:5569 - { - yyLOCAL = &XorExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1047: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Expr -//line sql.y:5573 - { - yyLOCAL = &AndExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1048: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Expr -//line sql.y:5577 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = yyDollar[2].exprUnion() - } - yyVAL.union = yyLOCAL - case 1049: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5571 - { - yyLOCAL = &OrExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1049: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Expr -//line sql.y:5575 { - yyLOCAL = &XorExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} + yyLOCAL = GroupByForType } - yyVAL.union = yyLOCAL - case 1050: - yyDollar = yyS[yypt-3 : yypt+1] + yyVAL.union = yyLOCAL + case 1047: + yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:5579 +//line sql.y:5570 { - yyLOCAL = &AndExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} + yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1051: + case 1048: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5583 +//line sql.y:5574 { - yyLOCAL = &NotExpr{Expr: yyDollar[2].exprUnion()} + yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1052: + case 1049: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5587 -======= //line sql.y:5581 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].isExprOperatorUnion()} + yyLOCAL = &OrExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1053: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Expr -//line sql.y:5591 -======= case 1050: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr //line sql.y:5585 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = yyDollar[1].exprUnion() + yyLOCAL = &XorExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1054: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:5595 -======= case 1051: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr //line sql.y:5589 { - yyLOCAL = &MemberOfExpr{Value: yyDollar[1].exprUnion(), JSONArr: yyDollar[5].exprUnion()} + yyLOCAL = &AndExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1052: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5595 +//line sql.y:5593 { - yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNullOp} + yyLOCAL = &NotExpr{Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL case 1053: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5599 +//line sql.y:5597 { - yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNotNullOp} + yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: yyDollar[3].isExprOperatorUnion()} } yyVAL.union = yyLOCAL case 1054: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5603 +//line sql.y:5601 { - yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Right: yyDollar[3].exprUnion()} + yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL case 1055: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5607 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5605 { yyLOCAL = &MemberOfExpr{Value: yyDollar[1].exprUnion(), JSONArr: yyDollar[5].exprUnion()} } @@ -25752,11 +16990,7 @@ yydefault: case 1056: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5601 -======= -//line sql.y:5613 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5611 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNullOp} } @@ -25764,41 +16998,23 @@ yydefault: case 1057: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5605 -======= -//line sql.y:5617 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5615 { yyLOCAL = &IsExpr{Left: yyDollar[1].exprUnion(), Right: IsNotNullOp} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1057: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Expr -//line sql.y:5609 -======= case 1058: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5621 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5619 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: yyDollar[2].comparisonExprOperatorUnion(), Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1058: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Expr -//line sql.y:5613 -======= case 1059: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5625 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5623 { yyLOCAL = yyDollar[1].exprUnion() } @@ -25806,11 +17022,7 @@ yydefault: case 1060: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5619 -======= //line sql.y:5629 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: InOp, Right: yyDollar[3].colTupleUnion()} } @@ -25818,11 +17030,7 @@ yydefault: case 1061: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5623 -======= //line sql.y:5633 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotInOp, Right: yyDollar[4].colTupleUnion()} } @@ -25830,11 +17038,7 @@ yydefault: case 1062: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5627 -======= //line sql.y:5637 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: true, From: yyDollar[3].exprUnion(), To: yyDollar[5].exprUnion()} } @@ -25842,11 +17046,7 @@ yydefault: case 1063: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5631 -======= //line sql.y:5641 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &BetweenExpr{Left: yyDollar[1].exprUnion(), IsBetween: false, From: yyDollar[4].exprUnion(), To: yyDollar[6].exprUnion()} } @@ -25854,11 +17054,7 @@ yydefault: case 1064: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5635 -======= //line sql.y:5645 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion()} } @@ -25866,313 +17062,177 @@ yydefault: case 1065: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5639 +//line sql.y:5649 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1065: + case 1066: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:5643 +//line sql.y:5653 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: LikeOp, Right: yyDollar[3].exprUnion(), Escape: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1066: + case 1067: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5647 +//line sql.y:5657 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotLikeOp, Right: yyDollar[4].exprUnion(), Escape: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL - case 1067: + case 1068: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5651 +//line sql.y:5661 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: RegexpOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1068: + case 1069: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:5655 -======= -//line sql.y:5649 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5665 { yyLOCAL = &ComparisonExpr{Left: yyDollar[1].exprUnion(), Operator: NotRegexpOp, Right: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1069: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Expr -//line sql.y:5659 -======= - case 1066: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Expr -//line sql.y:5653 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = yyDollar[1].exprUnion() - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD case 1070: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5665 - { -======= - case 1067: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5659 - { - } - case 1068: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5662 - { - } - case 1069: - yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5668 +//line sql.y:5669 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitOrOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1070: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Expr -//line sql.y:5672 - { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitAndOp, Right: yyDollar[3].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) - } case 1071: -<<<<<<< HEAD yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5668 - { -======= - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Expr -//line sql.y:5676 +//line sql.y:5675 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftLeftOp, Right: yyDollar[3].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) } case 1072: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5674 - { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitOrOp, Right: yyDollar[3].exprUnion()} -======= -//line sql.y:5680 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:5678 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftRightOp, Right: yyDollar[3].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) } - yyVAL.union = yyLOCAL case 1073: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5678 - { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitAndOp, Right: yyDollar[3].exprUnion()} -======= //line sql.y:5684 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: PlusOp, Right: yyDollar[3].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitOrOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1074: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5682 - { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftLeftOp, Right: yyDollar[3].exprUnion()} -======= //line sql.y:5688 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MinusOp, Right: yyDollar[3].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitAndOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1075: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5686 - { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftRightOp, Right: yyDollar[3].exprUnion()} -======= //line sql.y:5692 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MultOp, Right: yyDollar[3].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftLeftOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1076: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5690 - { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: PlusOp, Right: yyDollar[3].exprUnion()} -======= //line sql.y:5696 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: DivOp, Right: yyDollar[3].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ShiftRightOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1077: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5694 - { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MinusOp, Right: yyDollar[3].exprUnion()} -======= //line sql.y:5700 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: PlusOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1078: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5698 - { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MultOp, Right: yyDollar[3].exprUnion()} -======= //line sql.y:5704 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: IntDivOp, Right: yyDollar[3].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MinusOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1079: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5702 - { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: DivOp, Right: yyDollar[3].exprUnion()} -======= //line sql.y:5708 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: MultOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1080: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5706 - { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} -======= //line sql.y:5712 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitXorOp, Right: yyDollar[3].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: DivOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1081: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5710 -======= //line sql.y:5716 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: IntDivOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1082: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5714 -======= -//line sql.y:5722 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5720 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: IntDivOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1083: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5718 -======= -//line sql.y:5726 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5724 { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitXorOp, Right: yyDollar[3].exprUnion()} + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: ModOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1084: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5722 -======= -//line sql.y:5730 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5728 { - yyLOCAL = yyDollar[1].exprUnion() + yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: BitXorOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1085: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5728 -======= -//line sql.y:5734 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5732 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL case 1086: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5732 -======= //line sql.y:5738 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &CollateExpr{Expr: yyDollar[1].exprUnion(), Collation: yyDollar[3].str} + yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL case 1087: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5736 -======= //line sql.y:5742 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = yyDollar[1].exprUnion() } @@ -26180,32 +17240,31 @@ yydefault: case 1088: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5740 +//line sql.y:5746 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL case 1089: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5744 +//line sql.y:5750 { - yyLOCAL = &CollateExpr{Expr: yyDollar[1].exprUnion(), Collation: yyDollar[3].str} + yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL case 1090: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5748 +//line sql.y:5754 { - yyLOCAL = yyDollar[1].exprUnion() + yyLOCAL = &CollateExpr{Expr: yyDollar[1].exprUnion(), Collation: yyDollar[3].str} } yyVAL.union = yyLOCAL case 1091: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5752 +//line sql.y:5758 { yyLOCAL = yyDollar[1].exprUnion() } @@ -26213,25 +17272,15 @@ yydefault: case 1092: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5756 -======= -//line sql.y:5746 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5762 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL -<<<<<<< HEAD case 1093: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Expr -//line sql.y:5760 -======= - case 1089: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5750 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5766 { yyLOCAL = yyDollar[1].variableUnion() } @@ -26239,136 +17288,71 @@ yydefault: case 1094: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5764 -======= -//line sql.y:5754 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5770 { yyLOCAL = yyDollar[2].exprUnion() // TODO: do we really want to ignore unary '+' before any kind of literals? } yyVAL.union = yyLOCAL -<<<<<<< HEAD case 1095: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5768 - { - yyLOCAL = &UnaryExpr{Operator: TildaOp, Expr: yyDollar[2].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1096: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Expr -//line sql.y:5772 - { - yyLOCAL = &UnaryExpr{Operator: BangOp, Expr: yyDollar[2].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1097: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Expr -//line sql.y:5776 - { - yyLOCAL = yyDollar[1].subqueryUnion() - } - yyVAL.union = yyLOCAL - case 1098: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Expr -//line sql.y:5780 - { - yyLOCAL = yyDollar[1].exprUnion() - } - yyVAL.union = yyLOCAL - case 1099: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Expr -//line sql.y:5784 -======= - case 1091: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Expr -//line sql.y:5758 +//line sql.y:5774 { yyLOCAL = &UnaryExpr{Operator: UMinusOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1092: + case 1096: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5762 +//line sql.y:5778 { yyLOCAL = &UnaryExpr{Operator: TildaOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1093: + case 1097: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5766 +//line sql.y:5782 { yyLOCAL = &UnaryExpr{Operator: BangOp, Expr: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL - case 1094: + case 1098: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5770 +//line sql.y:5786 { yyLOCAL = yyDollar[1].subqueryUnion() } yyVAL.union = yyLOCAL - case 1095: + case 1099: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5774 +//line sql.y:5790 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1096: + case 1100: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5778 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5794 { yyLOCAL = &ExistsExpr{Subquery: yyDollar[2].subqueryUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1100: - yyDollar = yyS[yypt-7 : yypt+1] - var yyLOCAL Expr -//line sql.y:5788 - { - yyLOCAL = &MatchExpr{Columns: yyDollar[2].colNamesUnion(), Expr: yyDollar[5].exprUnion(), Option: yyDollar[6].matchExprOptionUnion()} - } - yyVAL.union = yyLOCAL case 1101: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:5792 -======= - case 1097: - yyDollar = yyS[yypt-7 : yypt+1] - var yyLOCAL Expr -//line sql.y:5782 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5798 { yyLOCAL = &MatchExpr{Columns: yyDollar[2].colNamesUnion(), Expr: yyDollar[5].exprUnion(), Option: yyDollar[6].matchExprOptionUnion()} } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1102: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:5796 -======= - case 1098: + yyVAL.union = yyLOCAL + case 1102: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:5786 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5802 { yyLOCAL = &CastExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion(), Array: yyDollar[6].booleanUnion()} } @@ -26376,34 +17360,23 @@ yydefault: case 1103: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5800 -======= -//line sql.y:5790 +//line sql.y:5806 { yyLOCAL = &ConvertExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].convertTypeUnion()} } yyVAL.union = yyLOCAL - case 1100: + case 1104: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5794 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5810 { yyLOCAL = &ConvertUsingExpr{Expr: yyDollar[3].exprUnion(), Type: yyDollar[5].str} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1104: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Expr -//line sql.y:5804 -======= - case 1101: + case 1105: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5798 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5814 { // From: https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#operator_binary // To convert a string expression to a binary string, these constructs are equivalent: @@ -26412,32 +17385,18 @@ yydefault: yyLOCAL = &ConvertExpr{Expr: yyDollar[2].exprUnion(), Type: &ConvertType{Type: yyDollar[1].str}} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1105: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Expr -//line sql.y:5812 -======= - case 1102: + case 1106: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:5806 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5822 { yyLOCAL = &Default{ColName: yyDollar[2].str} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1106: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Expr -//line sql.y:5816 -======= - case 1103: + case 1107: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5810 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5826 { // INTERVAL can trigger a shift / reduce conflict. We want // to shift here for the interval rule. In case we do have @@ -26446,40 +17405,18 @@ yydefault: yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1107: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:5824 -======= - case 1104: + case 1108: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:5818 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5834 { yyLOCAL = &IntervalFuncExpr{Expr: yyDollar[3].exprUnion(), Exprs: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1108: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Expr -//line sql.y:5828 - { - yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: JSONExtractOp, Right: yyDollar[3].exprUnion()} - } - yyVAL.union = yyLOCAL case 1109: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5832 -======= - case 1105: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Expr -//line sql.y:5822 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5838 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: JSONExtractOp, Right: yyDollar[3].exprUnion()} } @@ -26487,100 +17424,54 @@ yydefault: case 1110: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:5838 -======= -//line sql.y:5826 +//line sql.y:5842 { yyLOCAL = &BinaryExpr{Left: yyDollar[1].exprUnion(), Operator: JSONUnquoteExtractOp, Right: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1107: + case 1111: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:5832 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5848 { yyLOCAL = &IntervalExpr{Expr: yyDollar[2].exprUnion(), Unit: yyDollar[3].identifierCI.String()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1111: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL []*ColName -//line sql.y:5844 -======= - case 1108: + case 1112: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5838 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5854 { yyLOCAL = yyDollar[1].colNamesUnion() } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1112: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL []*ColName -//line sql.y:5848 -======= - case 1109: + case 1113: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5842 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5858 { yyLOCAL = yyDollar[2].colNamesUnion() } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1113: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL []*ColName -//line sql.y:5854 -======= - case 1110: + case 1114: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*ColName -//line sql.y:5848 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5864 { yyLOCAL = []*ColName{yyDollar[1].colNameUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1114: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5858 -======= - case 1111: + case 1115: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:5852 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5868 { yySLICE := (*[]*ColName)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].colNameUnion()) } -<<<<<<< HEAD - case 1115: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL TrimType -//line sql.y:5864 - { - yyLOCAL = BothTrimType - } - yyVAL.union = yyLOCAL case 1116: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -//line sql.y:5868 -======= - case 1112: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL TrimType -//line sql.y:5858 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5874 { yyLOCAL = BothTrimType } @@ -26588,551 +17479,290 @@ yydefault: case 1117: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL TrimType -<<<<<<< HEAD -//line sql.y:5872 -======= -//line sql.y:5862 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5878 { yyLOCAL = LeadingTrimType } yyVAL.union = yyLOCAL case 1118: yyDollar = yyS[yypt-1 : yypt+1] -<<<<<<< HEAD - var yyLOCAL FrameUnitType -//line sql.y:5878 -======= var yyLOCAL TrimType -//line sql.y:5866 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5882 { yyLOCAL = TrailingTrimType } yyVAL.union = yyLOCAL -<<<<<<< HEAD case 1119: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FrameUnitType -//line sql.y:5882 - { - yyLOCAL = FrameRangeType -======= - case 1115: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL FrameUnitType -//line sql.y:5872 +//line sql.y:5888 { yyLOCAL = FrameRowsType } yyVAL.union = yyLOCAL - case 1116: + case 1120: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FrameUnitType -//line sql.y:5876 +//line sql.y:5892 { yyLOCAL = FrameRangeType } yyVAL.union = yyLOCAL - case 1117: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5883 - { - yyLOCAL = CumeDistExprType - } - yyVAL.union = yyLOCAL - case 1118: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5887 - { - yyLOCAL = DenseRankExprType - } - yyVAL.union = yyLOCAL - case 1119: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5891 - { - yyLOCAL = PercentRankExprType ->>>>>>> e439161508 (fix: complete time period feature) - } - yyVAL.union = yyLOCAL - case 1120: + case 1121: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -<<<<<<< HEAD -//line sql.y:5889 +//line sql.y:5899 { yyLOCAL = CumeDistExprType -======= -//line sql.y:5895 - { - yyLOCAL = RankExprType ->>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL - case 1121: + case 1122: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -<<<<<<< HEAD -//line sql.y:5893 +//line sql.y:5903 { yyLOCAL = DenseRankExprType } yyVAL.union = yyLOCAL - case 1122: + case 1123: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5897 +//line sql.y:5907 { yyLOCAL = PercentRankExprType } yyVAL.union = yyLOCAL - case 1123: + case 1124: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5901 +//line sql.y:5911 { yyLOCAL = RankExprType } yyVAL.union = yyLOCAL - case 1124: + case 1125: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ArgumentLessWindowExprType -//line sql.y:5905 - { - yyLOCAL = RowNumberExprType -======= -//line sql.y:5899 +//line sql.y:5915 { yyLOCAL = RowNumberExprType } yyVAL.union = yyLOCAL - case 1122: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *FramePoint -//line sql.y:5905 - { - yyLOCAL = &FramePoint{Type: CurrentRowType} - } - yyVAL.union = yyLOCAL - case 1123: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *FramePoint -//line sql.y:5909 - { - yyLOCAL = &FramePoint{Type: UnboundedPrecedingType} - } - yyVAL.union = yyLOCAL - case 1124: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *FramePoint -//line sql.y:5913 - { - yyLOCAL = &FramePoint{Type: UnboundedFollowingType} ->>>>>>> e439161508 (fix: complete time period feature) - } - yyVAL.union = yyLOCAL - case 1125: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *FramePoint -<<<<<<< HEAD -//line sql.y:5911 - { - yyLOCAL = &FramePoint{Type: CurrentRowType} - } - yyVAL.union = yyLOCAL case 1126: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5915 +//line sql.y:5921 { - yyLOCAL = &FramePoint{Type: UnboundedPrecedingType} + yyLOCAL = &FramePoint{Type: CurrentRowType} } yyVAL.union = yyLOCAL case 1127: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5919 +//line sql.y:5925 { - yyLOCAL = &FramePoint{Type: UnboundedFollowingType} + yyLOCAL = &FramePoint{Type: UnboundedPrecedingType} } yyVAL.union = yyLOCAL case 1128: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5923 +//line sql.y:5929 { - yyLOCAL = &FramePoint{Type: ExprPrecedingType, Expr: yyDollar[1].exprUnion()} + yyLOCAL = &FramePoint{Type: UnboundedFollowingType} } yyVAL.union = yyLOCAL case 1129: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5927 -======= -//line sql.y:5917 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5933 { yyLOCAL = &FramePoint{Type: ExprPrecedingType, Expr: yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD case 1130: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Expr -//line sql.y:5933 -======= - case 1126: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FramePoint -//line sql.y:5921 +//line sql.y:5937 { yyLOCAL = &FramePoint{Type: ExprFollowingType, Expr: yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL - case 1127: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Expr -//line sql.y:5927 - { - yyLOCAL = yyDollar[1].exprUnion() - } - yyVAL.union = yyLOCAL - case 1128: + case 1131: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5931 - { - yyLOCAL = yyDollar[1].exprUnion() - } - yyVAL.union = yyLOCAL - case 1129: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL *FrameClause -//line sql.y:5936 - { - yyLOCAL = nil - } - yyVAL.union = yyLOCAL - case 1130: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL *FrameClause -//line sql.y:5940 - { - yyLOCAL = yyDollar[1].frameClauseUnion() - } - yyVAL.union = yyLOCAL - case 1131: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *FrameClause -//line sql.y:5946 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5943 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1131: + case 1132: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:5937 -======= - case 1132: - yyDollar = yyS[yypt-5 : yypt+1] - var yyLOCAL *FrameClause -//line sql.y:5950 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5947 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL case 1133: yyDollar = yyS[yypt-0 : yypt+1] -<<<<<<< HEAD var yyLOCAL *FrameClause -//line sql.y:5942 -======= - var yyLOCAL Exprs -//line sql.y:5955 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5952 { yyLOCAL = nil } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1133: + case 1134: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5946 +//line sql.y:5956 { yyLOCAL = yyDollar[1].frameClauseUnion() } yyVAL.union = yyLOCAL - case 1134: + case 1135: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5952 +//line sql.y:5962 { yyLOCAL = &FrameClause{Unit: yyDollar[1].frameUnitTypeUnion(), Start: yyDollar[2].framePointUnion()} } yyVAL.union = yyLOCAL - case 1135: + case 1136: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *FrameClause -//line sql.y:5956 +//line sql.y:5966 { yyLOCAL = &FrameClause{Unit: yyDollar[1].frameUnitTypeUnion(), Start: yyDollar[3].framePointUnion(), End: yyDollar[5].framePointUnion()} } yyVAL.union = yyLOCAL - case 1136: + case 1137: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Exprs -//line sql.y:5961 +//line sql.y:5971 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1137: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Exprs -//line sql.y:5965 -======= - case 1134: + case 1138: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Exprs -//line sql.y:5959 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5975 { yyLOCAL = yyDollar[3].exprsUnion() } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1138: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5970 - { - } - case 1139: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5973 - { - yyVAL.identifierCI = yyDollar[1].identifierCI - } - case 1140: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL *WindowSpecification -//line sql.y:5979 -======= - case 1135: + case 1139: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:5964 +//line sql.y:5980 { } - case 1136: + case 1140: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:5967 +//line sql.y:5983 { yyVAL.identifierCI = yyDollar[1].identifierCI } - case 1137: + case 1141: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *WindowSpecification -//line sql.y:5973 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5989 { yyLOCAL = &WindowSpecification{Name: yyDollar[1].identifierCI, PartitionClause: yyDollar[2].exprsUnion(), OrderClause: yyDollar[3].orderByUnion(), FrameClause: yyDollar[4].frameClauseUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1141: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL *OverClause -//line sql.y:5985 -======= - case 1138: + case 1142: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *OverClause -//line sql.y:5979 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5995 { yyLOCAL = &OverClause{WindowSpec: yyDollar[3].windowSpecificationUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1142: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *OverClause -//line sql.y:5989 -======= - case 1139: + case 1143: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *OverClause -//line sql.y:5983 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:5999 { yyLOCAL = &OverClause{WindowName: yyDollar[2].identifierCI} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1143: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL *NullTreatmentClause -//line sql.y:5994 - { - yyLOCAL = nil -======= - case 1140: + case 1144: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *NullTreatmentClause -//line sql.y:5988 +//line sql.y:6004 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1142: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL *NullTreatmentClause -//line sql.y:5995 - { - yyLOCAL = &NullTreatmentClause{yyDollar[1].nullTreatmentTypeUnion()} - } - yyVAL.union = yyLOCAL - case 1143: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL NullTreatmentType -//line sql.y:6001 - { - yyLOCAL = RespectNullsType - } - yyVAL.union = yyLOCAL - case 1144: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL NullTreatmentType -//line sql.y:6005 - { - yyLOCAL = IgnoreNullsType ->>>>>>> e439161508 (fix: complete time period feature) - } - yyVAL.union = yyLOCAL - case 1145: + case 1146: yyDollar = yyS[yypt-1 : yypt+1] -<<<<<<< HEAD var yyLOCAL *NullTreatmentClause -//line sql.y:6001 +//line sql.y:6011 { yyLOCAL = &NullTreatmentClause{yyDollar[1].nullTreatmentTypeUnion()} } yyVAL.union = yyLOCAL - case 1146: + case 1147: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL NullTreatmentType -//line sql.y:6007 +//line sql.y:6017 { yyLOCAL = RespectNullsType -======= - var yyLOCAL FirstOrLastValueExprType -//line sql.y:6011 - { - yyLOCAL = FirstValueExprType - } - yyVAL.union = yyLOCAL - case 1146: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL FirstOrLastValueExprType -//line sql.y:6015 - { - yyLOCAL = LastValueExprType ->>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL - case 1147: + case 1148: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL NullTreatmentType -//line sql.y:6011 +//line sql.y:6021 { yyLOCAL = IgnoreNullsType } yyVAL.union = yyLOCAL - case 1148: + case 1149: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FirstOrLastValueExprType -//line sql.y:6017 +//line sql.y:6027 { yyLOCAL = FirstValueExprType } yyVAL.union = yyLOCAL - case 1149: + case 1150: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL FirstOrLastValueExprType -//line sql.y:6021 +//line sql.y:6031 { yyLOCAL = LastValueExprType } yyVAL.union = yyLOCAL - case 1150: + case 1151: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL FromFirstLastType -<<<<<<< HEAD -//line sql.y:6027 -======= -//line sql.y:6021 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6037 { yyLOCAL = FromFirstType } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1151: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL FromFirstLastType -//line sql.y:6031 -======= - case 1148: + case 1152: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL FromFirstLastType -//line sql.y:6025 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6041 { yyLOCAL = FromLastType } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1152: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL *FromFirstLastClause -//line sql.y:6036 -======= - case 1149: + case 1153: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *FromFirstLastClause -//line sql.y:6030 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6046 { yyLOCAL = nil } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1154: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL *FromFirstLastClause -//line sql.y:6043 - { - yyLOCAL = &FromFirstLastClause{yyDollar[1].fromFirstLastTypeUnion()} - } - yyVAL.union = yyLOCAL case 1155: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL LagLeadExprType -//line sql.y:6049 -======= - case 1151: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *FromFirstLastClause -//line sql.y:6037 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6053 { yyLOCAL = &FromFirstLastClause{yyDollar[1].fromFirstLastTypeUnion()} } @@ -27140,1150 +17770,618 @@ yydefault: case 1156: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LagLeadExprType -<<<<<<< HEAD -//line sql.y:6053 -======= -//line sql.y:6043 +//line sql.y:6059 { yyLOCAL = LagExprType } yyVAL.union = yyLOCAL - case 1153: + case 1157: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL LagLeadExprType -//line sql.y:6047 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6063 { yyLOCAL = LeadExprType } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1157: - yyDollar = yyS[yypt-5 : yypt+1] - var yyLOCAL *WindowDefinition -//line sql.y:6059 -======= - case 1154: + case 1158: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *WindowDefinition -//line sql.y:6053 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6069 { yyLOCAL = &WindowDefinition{Name: yyDollar[1].identifierCI, WindowSpec: yyDollar[4].windowSpecificationUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1158: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL WindowDefinitions -//line sql.y:6065 -======= - case 1155: + case 1159: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL WindowDefinitions -//line sql.y:6059 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6075 { yyLOCAL = WindowDefinitions{yyDollar[1].windowDefinitionUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1159: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:6069 -======= - case 1156: + case 1160: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:6063 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6079 { yySLICE := (*WindowDefinitions)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].windowDefinitionUnion()) } -<<<<<<< HEAD - case 1160: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:6075 - { - yyVAL.str = "" - } case 1161: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:6079 - { - yyVAL.str = string(yyDollar[2].identifierCI.String()) - } - case 1162: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL BoolVal -//line sql.y:6085 -======= - case 1157: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:6069 +//line sql.y:6085 { yyVAL.str = "" } - case 1158: + case 1162: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:6073 +//line sql.y:6089 { yyVAL.str = string(yyDollar[2].identifierCI.String()) } - case 1159: + case 1163: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL BoolVal -//line sql.y:6079 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6095 { yyLOCAL = BoolVal(true) } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1163: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL BoolVal -//line sql.y:6089 -======= - case 1160: + case 1164: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL BoolVal -//line sql.y:6083 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6099 { yyLOCAL = BoolVal(false) } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1164: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL IsExprOperator -//line sql.y:6096 -======= - case 1161: + case 1165: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:6090 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6106 { yyLOCAL = IsTrueOp } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1165: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL IsExprOperator -//line sql.y:6100 -======= - case 1162: + case 1166: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:6094 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6110 { yyLOCAL = IsNotTrueOp } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1166: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL IsExprOperator -//line sql.y:6104 -======= - case 1163: + case 1167: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:6098 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6114 { yyLOCAL = IsFalseOp } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1167: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL IsExprOperator -//line sql.y:6108 -======= - case 1164: + case 1168: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL IsExprOperator -//line sql.y:6102 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6118 { yyLOCAL = IsNotFalseOp } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1168: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL ComparisonExprOperator -//line sql.y:6114 - { - yyLOCAL = EqualOp -======= - case 1165: + case 1169: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6108 +//line sql.y:6124 { yyLOCAL = EqualOp } yyVAL.union = yyLOCAL - case 1166: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL ComparisonExprOperator -//line sql.y:6112 - { - yyLOCAL = LessThanOp - } - yyVAL.union = yyLOCAL - case 1167: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL ComparisonExprOperator -//line sql.y:6116 - { - yyLOCAL = GreaterThanOp - } - yyVAL.union = yyLOCAL - case 1168: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL ComparisonExprOperator -//line sql.y:6120 - { - yyLOCAL = LessEqualOp ->>>>>>> e439161508 (fix: complete time period feature) - } - yyVAL.union = yyLOCAL - case 1169: + case 1170: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -<<<<<<< HEAD -//line sql.y:6118 +//line sql.y:6128 { yyLOCAL = LessThanOp -======= -//line sql.y:6124 - { - yyLOCAL = GreaterEqualOp ->>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL - case 1170: + case 1171: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -<<<<<<< HEAD -//line sql.y:6122 +//line sql.y:6132 { yyLOCAL = GreaterThanOp -======= -//line sql.y:6128 - { - yyLOCAL = NotEqualOp ->>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL - case 1171: + case 1172: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -<<<<<<< HEAD -//line sql.y:6126 +//line sql.y:6136 { yyLOCAL = LessEqualOp -======= -//line sql.y:6132 - { - yyLOCAL = NullSafeEqualOp ->>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL - case 1172: + case 1173: yyDollar = yyS[yypt-1 : yypt+1] -<<<<<<< HEAD var yyLOCAL ComparisonExprOperator -//line sql.y:6130 +//line sql.y:6140 { yyLOCAL = GreaterEqualOp -======= - var yyLOCAL ColTuple -//line sql.y:6138 - { - yyLOCAL = yyDollar[1].valTupleUnion() ->>>>>>> e439161508 (fix: complete time period feature) } yyVAL.union = yyLOCAL - case 1173: + case 1174: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6134 +//line sql.y:6144 { yyLOCAL = NotEqualOp } yyVAL.union = yyLOCAL - case 1174: + case 1175: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ComparisonExprOperator -//line sql.y:6138 +//line sql.y:6148 { yyLOCAL = NullSafeEqualOp } yyVAL.union = yyLOCAL - case 1175: + case 1176: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -<<<<<<< HEAD -//line sql.y:6144 +//line sql.y:6154 { yyLOCAL = yyDollar[1].valTupleUnion() } yyVAL.union = yyLOCAL - case 1176: + case 1177: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:6148 -======= -//line sql.y:6142 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6158 { yyLOCAL = yyDollar[1].subqueryUnion() } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1177: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL ColTuple -//line sql.y:6152 -======= - case 1174: + case 1178: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ColTuple -//line sql.y:6146 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6162 { yyLOCAL = ListArg(yyDollar[1].str[2:]) bindVariable(yylex, yyDollar[1].str[2:]) } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1178: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL *Subquery -//line sql.y:6159 -======= - case 1175: + case 1179: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Subquery -//line sql.y:6153 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6169 { yyLOCAL = &Subquery{yyDollar[1].selStmtUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1179: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Exprs -//line sql.y:6165 -======= - case 1176: + case 1180: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Exprs -//line sql.y:6159 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6175 { yyLOCAL = Exprs{yyDollar[1].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1180: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:6169 -======= - case 1177: + case 1181: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:6163 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6179 { yySLICE := (*Exprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].exprUnion()) } -<<<<<<< HEAD - case 1181: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6179 -======= - case 1178: + case 1182: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6173 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6189 { yyLOCAL = &FuncExpr{Name: yyDollar[1].identifierCI, Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1182: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:6183 -======= - case 1179: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:6177 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = &FuncExpr{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCI, Exprs: yyDollar[5].selectExprsUnion()} - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD case 1183: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6193 { - yyLOCAL = &FuncExpr{Name: NewIdentifierCI("left"), Exprs: yyDollar[3].selectExprsUnion()} + yyLOCAL = &FuncExpr{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCI, Exprs: yyDollar[5].selectExprsUnion()} } yyVAL.union = yyLOCAL case 1184: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6197 - { - yyLOCAL = &FuncExpr{Name: NewIdentifierCI("right"), Exprs: yyDollar[3].selectExprsUnion()} - } - yyVAL.union = yyLOCAL - case 1185: - yyDollar = yyS[yypt-8 : yypt+1] - var yyLOCAL Expr -//line sql.y:6201 - { - yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1186: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:6205 -======= - case 1180: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6187 +//line sql.y:6203 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("left"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1181: + case 1185: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6191 +//line sql.y:6207 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("right"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1182: + case 1186: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6195 +//line sql.y:6211 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1183: + case 1187: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6199 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6215 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1187: - yyDollar = yyS[yypt-8 : yypt+1] - var yyLOCAL Expr -//line sql.y:6209 -======= - case 1184: + case 1188: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6203 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6219 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion(), To: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1188: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:6213 -======= - case 1185: + case 1189: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6207 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6223 { yyLOCAL = &SubstrExpr{Name: yyDollar[3].exprUnion(), From: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1189: - yyDollar = yyS[yypt-5 : yypt+1] - var yyLOCAL Expr -//line sql.y:6217 -======= - case 1186: + case 1190: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6211 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6227 { yyLOCAL = &CaseExpr{Expr: yyDollar[2].exprUnion(), Whens: yyDollar[3].whensUnion(), Else: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1190: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6221 -======= - case 1187: + case 1191: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6215 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6231 { yyLOCAL = &ValuesFuncExpr{Name: yyDollar[3].colNameUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1191: - yyDollar = yyS[yypt-10 : yypt+1] - var yyLOCAL Expr -//line sql.y:6225 -======= - case 1188: + case 1192: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6219 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6235 { yyLOCAL = &InsertExpr{Str: yyDollar[3].exprUnion(), Pos: yyDollar[5].exprUnion(), Len: yyDollar[7].exprUnion(), NewStr: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1192: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Expr -//line sql.y:6229 - { - yyLOCAL = &FuncExpr{Name: NewIdentifierCI(yyDollar[1].str)} -======= - case 1189: + case 1193: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6223 +//line sql.y:6239 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1190: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Expr -//line sql.y:6234 - { - yyLOCAL = &FuncExpr{Name: NewIdentifierCI("utc_date")} - } - yyVAL.union = yyLOCAL - case 1191: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Expr -//line sql.y:6238 - { - yyLOCAL = yyDollar[1].exprUnion() - } - yyVAL.union = yyLOCAL - case 1192: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Expr -//line sql.y:6244 - { - yyLOCAL = &FuncExpr{Name: NewIdentifierCI("current_date")} ->>>>>>> e439161508 (fix: complete time period feature) - } - yyVAL.union = yyLOCAL - case 1193: + case 1194: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6240 +//line sql.y:6250 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("utc_date")} } yyVAL.union = yyLOCAL - case 1194: + case 1195: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6244 +//line sql.y:6254 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1195: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Expr -//line sql.y:6250 - { - yyLOCAL = &FuncExpr{Name: NewIdentifierCI("current_date")} - } - yyVAL.union = yyLOCAL case 1196: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6254 -======= -//line sql.y:6248 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6260 { - yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("utc_time"), Fsp: yyDollar[2].exprUnion()} + yyLOCAL = &FuncExpr{Name: NewIdentifierCI("current_date")} } yyVAL.union = yyLOCAL -<<<<<<< HEAD case 1197: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6259 -======= - case 1194: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Expr -//line sql.y:6253 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("current_time"), Fsp: yyDollar[2].exprUnion()} - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1198: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6263 -======= - case 1195: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6257 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = &CountStar{} - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1199: - yyDollar = yyS[yypt-5 : yypt+1] - var yyLOCAL Expr -//line sql.y:6267 - { - yyLOCAL = &Count{Distinct: yyDollar[3].booleanUnion(), Args: yyDollar[4].exprsUnion()} -======= - case 1196: - yyDollar = yyS[yypt-5 : yypt+1] - var yyLOCAL Expr -//line sql.y:6261 - { - yyLOCAL = &Count{Distinct: yyDollar[3].booleanUnion(), Args: yyDollar[4].exprsUnion()} - } - yyVAL.union = yyLOCAL - case 1197: - yyDollar = yyS[yypt-5 : yypt+1] - var yyLOCAL Expr -//line sql.y:6265 +//line sql.y:6264 { - yyLOCAL = &Max{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} + yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("utc_time"), Fsp: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL case 1198: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr //line sql.y:6269 { - yyLOCAL = &Min{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} + yyLOCAL = &CurTimeFuncExpr{Name: NewIdentifierCI("current_time"), Fsp: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL case 1199: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6273 { - yyLOCAL = &Sum{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &CountStar{} } yyVAL.union = yyLOCAL case 1200: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6271 - { - yyLOCAL = &Max{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} -======= //line sql.y:6277 { - yyLOCAL = &Avg{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Count{Distinct: yyDollar[3].booleanUnion(), Args: yyDollar[4].exprsUnion()} } yyVAL.union = yyLOCAL case 1201: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6275 - { - yyLOCAL = &Min{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} -======= //line sql.y:6281 { - yyLOCAL = &BitAnd{Arg: yyDollar[3].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Max{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL case 1202: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6279 - { - yyLOCAL = &Sum{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} -======= //line sql.y:6285 { - yyLOCAL = &BitOr{Arg: yyDollar[3].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Min{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL case 1203: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6283 - { - yyLOCAL = &Avg{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} -======= //line sql.y:6289 { - yyLOCAL = &BitXor{Arg: yyDollar[3].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Sum{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL case 1204: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6287 - { - yyLOCAL = &BitAnd{Arg: yyDollar[3].exprUnion()} -======= //line sql.y:6293 { - yyLOCAL = &Std{Arg: yyDollar[3].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Avg{Distinct: yyDollar[3].booleanUnion(), Arg: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL case 1205: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6291 - { - yyLOCAL = &BitOr{Arg: yyDollar[3].exprUnion()} -======= //line sql.y:6297 { - yyLOCAL = &StdDev{Arg: yyDollar[3].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &BitAnd{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1206: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6295 - { - yyLOCAL = &BitXor{Arg: yyDollar[3].exprUnion()} -======= //line sql.y:6301 { - yyLOCAL = &StdPop{Arg: yyDollar[3].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &BitOr{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1207: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6299 - { - yyLOCAL = &Std{Arg: yyDollar[3].exprUnion()} -======= //line sql.y:6305 { - yyLOCAL = &StdSamp{Arg: yyDollar[3].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &BitXor{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1208: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6303 - { - yyLOCAL = &StdDev{Arg: yyDollar[3].exprUnion()} -======= //line sql.y:6309 { - yyLOCAL = &VarPop{Arg: yyDollar[3].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &Std{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1209: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6307 - { - yyLOCAL = &StdPop{Arg: yyDollar[3].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1210: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6311 - { - yyLOCAL = &StdSamp{Arg: yyDollar[3].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1211: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6315 - { - yyLOCAL = &VarPop{Arg: yyDollar[3].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1212: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6319 - { - yyLOCAL = &VarSamp{Arg: yyDollar[3].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1213: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6323 -======= //line sql.y:6313 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &VarSamp{Arg: yyDollar[3].exprUnion()} + yyLOCAL = &StdDev{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1214: - yyDollar = yyS[yypt-8 : yypt+1] - var yyLOCAL Expr -//line sql.y:6327 -======= case 1210: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6317 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &Variance{Arg: yyDollar[3].exprUnion()} + yyLOCAL = &StdPop{Arg: yyDollar[3].exprUnion()} } - yyVAL.union = yyLOCAL - case 1215: - yyDollar = yyS[yypt-8 : yypt+1] + yyVAL.union = yyLOCAL + case 1211: + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6331 -======= //line sql.y:6321 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &GroupConcatExpr{Distinct: yyDollar[3].booleanUnion(), Exprs: yyDollar[4].exprsUnion(), OrderBy: yyDollar[5].orderByUnion(), Separator: yyDollar[6].str, Limit: yyDollar[7].limitUnion()} + yyLOCAL = &StdSamp{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1216: - yyDollar = yyS[yypt-8 : yypt+1] + case 1212: + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6335 -======= //line sql.y:6325 { - yyLOCAL = &TimestampFuncExpr{Name: string("timestampadd"), Unit: yyDollar[3].identifierCI.String(), Expr1: yyDollar[5].exprUnion(), Expr2: yyDollar[7].exprUnion()} + yyLOCAL = &VarPop{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1213: - yyDollar = yyS[yypt-8 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6329 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &TimestampFuncExpr{Name: string("timestampdiff"), Unit: yyDollar[3].identifierCI.String(), Expr1: yyDollar[5].exprUnion(), Expr2: yyDollar[7].exprUnion()} + yyLOCAL = &VarSamp{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1217: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:6339 -======= case 1214: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6333 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &ExtractFuncExpr{IntervalTypes: yyDollar[3].intervalTypeUnion(), Expr: yyDollar[5].exprUnion()} + yyLOCAL = &Variance{Arg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1218: - yyDollar = yyS[yypt-5 : yypt+1] - var yyLOCAL Expr -//line sql.y:6343 -======= case 1215: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr //line sql.y:6337 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &WeightStringFuncExpr{Expr: yyDollar[3].exprUnion(), As: yyDollar[4].convertTypeUnion()} + yyLOCAL = &GroupConcatExpr{Distinct: yyDollar[3].booleanUnion(), Exprs: yyDollar[4].exprsUnion(), OrderBy: yyDollar[5].orderByUnion(), Separator: yyDollar[6].str, Limit: yyDollar[7].limitUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1219: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6347 -======= case 1216: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr //line sql.y:6341 { - yyLOCAL = &JSONPrettyExpr{JSONVal: yyDollar[3].exprUnion()} + yyLOCAL = &TimestampFuncExpr{Name: string("timestampadd"), Unit: yyDollar[3].identifierCI.String(), Expr1: yyDollar[5].exprUnion(), Expr2: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL case 1217: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr //line sql.y:6345 { - yyLOCAL = &JSONStorageFreeExpr{JSONVal: yyDollar[3].exprUnion()} + yyLOCAL = &TimestampFuncExpr{Name: string("timestampdiff"), Unit: yyDollar[3].identifierCI.String(), Expr1: yyDollar[5].exprUnion(), Expr2: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL case 1218: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6349 { - yyLOCAL = &JSONStorageSizeExpr{JSONVal: yyDollar[3].exprUnion()} + yyLOCAL = &ExtractFuncExpr{IntervalTypes: yyDollar[3].intervalTypeUnion(), Expr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL case 1219: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr //line sql.y:6353 { - yyLOCAL = &TrimFuncExpr{TrimFuncType: LTrimType, StringArg: yyDollar[3].exprUnion()} + yyLOCAL = &WeightStringFuncExpr{Expr: yyDollar[3].exprUnion(), As: yyDollar[4].convertTypeUnion()} } yyVAL.union = yyLOCAL case 1220: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6357 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &JSONPrettyExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1220: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6351 -======= case 1221: - yyDollar = yyS[yypt-7 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6361 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &JSONStorageFreeExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1221: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6355 - { - yyLOCAL = &JSONStorageSizeExpr{JSONVal: yyDollar[3].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1222: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6359 - { - yyLOCAL = &TrimFuncExpr{TrimFuncType: LTrimType, StringArg: yyDollar[3].exprUnion()} -======= case 1222: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6365 { - yyLOCAL = &TrimFuncExpr{StringArg: yyDollar[3].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &JSONStorageSizeExpr{JSONVal: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1223: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6363 - { - yyLOCAL = &TrimFuncExpr{TrimFuncType: RTrimType, StringArg: yyDollar[3].exprUnion()} -======= //line sql.y:6369 { - yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &TrimFuncExpr{TrimFuncType: LTrimType, StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1224: - yyDollar = yyS[yypt-7 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6367 - { - yyLOCAL = &TrimFuncExpr{Type: yyDollar[3].trimTypeUnion(), TrimArg: yyDollar[4].exprUnion(), StringArg: yyDollar[6].exprUnion()} -======= //line sql.y:6373 { - yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion(), Charset: yyDollar[5].str} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &TrimFuncExpr{TrimFuncType: RTrimType, StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1225: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6371 - { - yyLOCAL = &TrimFuncExpr{StringArg: yyDollar[3].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1226: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr -//line sql.y:6375 - { - yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion()} -======= //line sql.y:6377 { - yyLOCAL = &TrimFuncExpr{TrimArg: yyDollar[3].exprUnion(), StringArg: yyDollar[5].exprUnion()} + yyLOCAL = &TrimFuncExpr{Type: yyDollar[3].trimTypeUnion(), TrimArg: yyDollar[4].exprUnion(), StringArg: yyDollar[6].exprUnion()} } yyVAL.union = yyLOCAL case 1226: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6381 { - yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &TrimFuncExpr{StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1227: - yyDollar = yyS[yypt-8 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6379 - { - yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion(), Charset: yyDollar[5].str} -======= //line sql.y:6385 { - yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion(), Pos: yyDollar[7].exprUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL case 1228: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6383 +//line sql.y:6389 { - yyLOCAL = &TrimFuncExpr{TrimArg: yyDollar[3].exprUnion(), StringArg: yyDollar[5].exprUnion()} + yyLOCAL = &CharExpr{Exprs: yyDollar[3].exprsUnion(), Charset: yyDollar[5].str} } yyVAL.union = yyLOCAL case 1229: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6387 +//line sql.y:6393 { - yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()} + yyLOCAL = &TrimFuncExpr{TrimArg: yyDollar[3].exprUnion(), StringArg: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL case 1230: - yyDollar = yyS[yypt-8 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6391 +//line sql.y:6397 { - yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion(), Pos: yyDollar[7].exprUnion()} + yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL case 1231: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6395 +//line sql.y:6401 { - yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()} + yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion(), Pos: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL case 1232: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6399 -======= -//line sql.y:6389 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6405 { yyLOCAL = &LocateExpr{SubStr: yyDollar[3].exprUnion(), Str: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD case 1233: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6403 -======= - case 1229: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6393 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6409 { yyLOCAL = &LockingFunc{Type: GetLock, Name: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } @@ -28291,95 +18389,39 @@ yydefault: case 1234: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6407 -======= -//line sql.y:6397 +//line sql.y:6413 { yyLOCAL = &LockingFunc{Type: IsFreeLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1231: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6401 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = &LockingFunc{Type: IsUsedLock, Name: yyDollar[3].exprUnion()} - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD case 1235: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Expr -//line sql.y:6411 -======= - case 1232: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Expr -//line sql.y:6405 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = &LockingFunc{Type: ReleaseAllLocks} - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1236: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6415 - { - yyLOCAL = &LockingFunc{Type: ReleaseLock, Name: yyDollar[3].exprUnion()} -======= - case 1233: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6409 - { - yyLOCAL = &LockingFunc{Type: ReleaseLock, Name: yyDollar[3].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1234: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:6413 - { - yyLOCAL = &JSONSchemaValidFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1235: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr //line sql.y:6417 { - yyLOCAL = &JSONSchemaValidationReportFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} + yyLOCAL = &LockingFunc{Type: IsUsedLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1236: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr //line sql.y:6421 { - yyLOCAL = &JSONArrayExpr{Params: yyDollar[3].exprsUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &LockingFunc{Type: ReleaseAllLocks} } yyVAL.union = yyLOCAL case 1237: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6419 -======= //line sql.y:6425 { - yyLOCAL = &JSONObjectExpr{Params: yyDollar[3].jsonObjectParamsUnion()} + yyLOCAL = &LockingFunc{Type: ReleaseLock, Name: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1238: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6429 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &JSONSchemaValidFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} } @@ -28387,41 +18429,23 @@ yydefault: case 1239: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6423 -======= //line sql.y:6433 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &JSONSchemaValidationReportFuncExpr{Schema: yyDollar[3].exprUnion(), Document: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1239: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6427 -======= case 1240: - yyDollar = yyS[yypt-8 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6437 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &JSONArrayExpr{Params: yyDollar[3].exprsUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1240: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6431 -======= case 1241: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6441 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &JSONObjectExpr{Params: yyDollar[3].jsonObjectParamsUnion()} } @@ -28429,367 +18453,199 @@ yydefault: case 1242: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6435 -======= //line sql.y:6445 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &JSONQuoteExpr{StringArg: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1242: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:6439 - { - yyLOCAL = &JSONContainsExpr{Target: yyDollar[3].exprUnion(), Candidate: yyDollar[5].exprsUnion()[0], PathList: yyDollar[5].exprsUnion()[1:]} - } - yyVAL.union = yyLOCAL - case 1243: - yyDollar = yyS[yypt-8 : yypt+1] - var yyLOCAL Expr -//line sql.y:6443 - { - yyLOCAL = &JSONContainsPathExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), PathList: yyDollar[7].exprsUnion()} - } - yyVAL.union = yyLOCAL - case 1244: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:6447 - { - yyLOCAL = &JSONExtractExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()} - } - yyVAL.union = yyLOCAL - case 1245: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6451 - { - yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1246: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:6455 - { - yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1247: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:6459 -======= case 1243: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6449 { - yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} + yyLOCAL = &JSONContainsExpr{Target: yyDollar[3].exprUnion(), Candidate: yyDollar[5].exprsUnion()[0], PathList: yyDollar[5].exprsUnion()[1:]} } yyVAL.union = yyLOCAL case 1244: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:6453 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = &JSONOverlapsExpr{JSONDoc1: yyDollar[3].exprUnion(), JSONDoc2: yyDollar[5].exprUnion()} - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1248: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6463 - { - yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1249: - yyDollar = yyS[yypt-10 : yypt+1] - var yyLOCAL Expr -//line sql.y:6467 - { - yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion(), EscapeChar: yyDollar[9].exprsUnion()[0], PathList: yyDollar[9].exprsUnion()[1:]} - } - yyVAL.union = yyLOCAL - case 1250: - yyDollar = yyS[yypt-7 : yypt+1] - var yyLOCAL Expr -//line sql.y:6471 +//line sql.y:6453 { - yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion()} + yyLOCAL = &JSONContainsPathExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), PathList: yyDollar[7].exprsUnion()} } yyVAL.union = yyLOCAL - case 1251: - yyDollar = yyS[yypt-8 : yypt+1] - var yyLOCAL Expr -//line sql.y:6475 -======= case 1245: - yyDollar = yyS[yypt-8 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6457 { - yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion()} + yyLOCAL = &JSONExtractExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL case 1246: - yyDollar = yyS[yypt-10 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6461 { - yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion(), EscapeChar: yyDollar[9].exprsUnion()[0], PathList: yyDollar[9].exprsUnion()[1:]} + yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1247: - yyDollar = yyS[yypt-7 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6465 { - yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion()} + yyLOCAL = &JSONKeysExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL case 1248: - yyDollar = yyS[yypt-8 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6469 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()} + yyLOCAL = &JSONOverlapsExpr{JSONDoc1: yyDollar[3].exprUnion(), JSONDoc2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1252: - yyDollar = yyS[yypt-8 : yypt+1] - var yyLOCAL Expr -//line sql.y:6479 -======= case 1249: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr //line sql.y:6473 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()} + yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1253: - yyDollar = yyS[yypt-9 : yypt+1] - var yyLOCAL Expr -//line sql.y:6483 -======= case 1250: - yyDollar = yyS[yypt-9 : yypt+1] + yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr //line sql.y:6477 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()} - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1254: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6487 { - yyLOCAL = &JSONAttributesExpr{Type: DepthAttributeType, JSONDoc: yyDollar[3].exprUnion()} + yyLOCAL = &JSONSearchExpr{JSONDoc: yyDollar[3].exprUnion(), OneOrAll: yyDollar[5].exprUnion(), SearchStr: yyDollar[7].exprUnion(), EscapeChar: yyDollar[9].exprsUnion()[0], PathList: yyDollar[9].exprsUnion()[1:]} } yyVAL.union = yyLOCAL - case 1255: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6491 -======= case 1251: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL Expr //line sql.y:6481 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &JSONAttributesExpr{Type: DepthAttributeType, JSONDoc: yyDollar[3].exprUnion()} + yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion()} } yyVAL.union = yyLOCAL - case 1256: - yyDollar = yyS[yypt-4 : yypt+1] + case 1252: + yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6495 -======= //line sql.y:6485 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &JSONAttributesExpr{Type: ValidAttributeType, JSONDoc: yyDollar[3].exprUnion()} + yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion()} } yyVAL.union = yyLOCAL - case 1257: - yyDollar = yyS[yypt-4 : yypt+1] + case 1253: + yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6499 -======= //line sql.y:6489 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &JSONAttributesExpr{Type: TypeAttributeType, JSONDoc: yyDollar[3].exprUnion()} + yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), ErrorOnResponse: yyDollar[7].jtOnResponseUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1258: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:6503 - { - yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} -======= case 1254: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr //line sql.y:6493 { - yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion()} + yyLOCAL = &JSONValueExpr{JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion(), ReturningType: yyDollar[6].convertTypeUnion(), EmptyOnResponse: yyDollar[7].jtOnResponseUnion(), ErrorOnResponse: yyDollar[8].jtOnResponseUnion()} } yyVAL.union = yyLOCAL case 1255: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6497 { - yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} + yyLOCAL = &JSONAttributesExpr{Type: DepthAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1256: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6501 { - yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayAppendType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} + yyLOCAL = &JSONAttributesExpr{Type: ValidAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1257: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6505 { - yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} + yyLOCAL = &JSONAttributesExpr{Type: TypeAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1258: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr //line sql.y:6509 { - yyLOCAL = &JSONValueModifierExpr{Type: JSONInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL case 1259: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6507 - { - yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayAppendType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} -======= //line sql.y:6513 { - yyLOCAL = &JSONValueModifierExpr{Type: JSONReplaceType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &JSONAttributesExpr{Type: LengthAttributeType, JSONDoc: yyDollar[3].exprUnion(), Path: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL case 1260: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6511 - { - yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} -======= //line sql.y:6517 { - yyLOCAL = &JSONValueModifierExpr{Type: JSONSetType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayAppendType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL case 1261: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6515 - { - yyLOCAL = &JSONValueModifierExpr{Type: JSONInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} -======= //line sql.y:6521 { - yyLOCAL = &JSONValueMergeExpr{Type: JSONMergeType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &JSONValueModifierExpr{Type: JSONArrayInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL case 1262: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6519 - { - yyLOCAL = &JSONValueModifierExpr{Type: JSONReplaceType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} -======= //line sql.y:6525 { - yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePatchType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &JSONValueModifierExpr{Type: JSONInsertType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL case 1263: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6523 - { - yyLOCAL = &JSONValueModifierExpr{Type: JSONSetType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} -======= //line sql.y:6529 { - yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePreserveType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &JSONValueModifierExpr{Type: JSONReplaceType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL case 1264: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6527 - { - yyLOCAL = &JSONValueMergeExpr{Type: JSONMergeType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} -======= //line sql.y:6533 { - yyLOCAL = &JSONRemoveExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = &JSONValueModifierExpr{Type: JSONSetType, JSONDoc: yyDollar[3].exprUnion(), Params: yyDollar[5].jsonObjectParamsUnion()} } yyVAL.union = yyLOCAL case 1265: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6531 -======= //line sql.y:6537 { - yyLOCAL = &JSONUnquoteExpr{JSONValue: yyDollar[3].exprUnion()} + yyLOCAL = &JSONValueMergeExpr{Type: JSONMergeType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL case 1266: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6541 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePatchType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } @@ -28797,126 +18653,79 @@ yydefault: case 1267: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6535 +//line sql.y:6545 { yyLOCAL = &JSONValueMergeExpr{Type: JSONMergePreserveType, JSONDoc: yyDollar[3].exprUnion(), JSONDocList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1267: + case 1268: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6539 +//line sql.y:6549 { yyLOCAL = &JSONRemoveExpr{JSONDoc: yyDollar[3].exprUnion(), PathList: yyDollar[5].exprsUnion()} } yyVAL.union = yyLOCAL - case 1268: + case 1269: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6543 +//line sql.y:6553 { yyLOCAL = &JSONUnquoteExpr{JSONValue: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1269: + case 1270: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6547 +//line sql.y:6557 { yyLOCAL = &ArgumentLessWindowExpr{Type: yyDollar[1].argumentLessWindowExprTypeUnion(), OverClause: yyDollar[4].overClauseUnion()} } yyVAL.union = yyLOCAL - case 1270: + case 1271: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6551 -======= -//line sql.y:6545 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6561 { yyLOCAL = &FirstOrLastValueExpr{Type: yyDollar[1].firstOrLastValueExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1271: - yyDollar = yyS[yypt-5 : yypt+1] - var yyLOCAL Expr -//line sql.y:6555 -======= - case 1268: + case 1272: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Expr -//line sql.y:6549 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6565 { yyLOCAL = &NtileExpr{N: yyDollar[3].exprUnion(), OverClause: yyDollar[5].overClauseUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1272: - yyDollar = yyS[yypt-9 : yypt+1] - var yyLOCAL Expr -//line sql.y:6559 -======= - case 1269: + case 1273: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr -//line sql.y:6553 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6569 { yyLOCAL = &NTHValueExpr{Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), FromFirstLastClause: yyDollar[7].fromFirstLastClauseUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1273: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:6563 -======= - case 1270: + case 1274: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6557 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6573 { yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), NullTreatmentClause: yyDollar[5].nullTreatmentClauseUnion(), OverClause: yyDollar[6].overClauseUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1274: - yyDollar = yyS[yypt-9 : yypt+1] - var yyLOCAL Expr -//line sql.y:6567 -======= - case 1271: + case 1275: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL Expr -//line sql.y:6561 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), Default: yyDollar[6].exprUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()} - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1279: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Expr //line sql.y:6577 { - yyLOCAL = yyDollar[1].exprUnion() + yyLOCAL = &LagLeadExpr{Type: yyDollar[1].lagLeadExprTypeUnion(), Expr: yyDollar[3].exprUnion(), N: yyDollar[5].exprUnion(), Default: yyDollar[6].exprUnion(), NullTreatmentClause: yyDollar[8].nullTreatmentClauseUnion(), OverClause: yyDollar[9].overClauseUnion()} } yyVAL.union = yyLOCAL case 1280: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6581 -======= - case 1276: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Expr -//line sql.y:6571 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6587 { yyLOCAL = yyDollar[1].exprUnion() } @@ -28924,11 +18733,7 @@ yydefault: case 1281: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6585 -======= -//line sql.y:6575 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6591 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } @@ -28936,266 +18741,130 @@ yydefault: case 1282: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6589 -======= -//line sql.y:6579 +//line sql.y:6595 { yyLOCAL = yyDollar[1].variableUnion() } yyVAL.union = yyLOCAL - case 1279: + case 1283: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6583 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6599 { yyLOCAL = NewArgument(yyDollar[1].str[1:]) bindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1283: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL Expr -//line sql.y:6595 -======= - case 1280: + case 1284: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:6589 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6605 { yyLOCAL = nil } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1284: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Expr -//line sql.y:6599 -======= - case 1281: + case 1285: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6593 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6609 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1285: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:6605 -======= - case 1282: + case 1286: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6599 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6615 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1286: - yyDollar = yyS[yypt-8 : yypt+1] - var yyLOCAL Expr -//line sql.y:6609 -======= - case 1283: + case 1287: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6603 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6619 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1287: - yyDollar = yyS[yypt-10 : yypt+1] - var yyLOCAL Expr -//line sql.y:6613 -======= - case 1284: + case 1288: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6607 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6623 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1288: - yyDollar = yyS[yypt-12 : yypt+1] - var yyLOCAL Expr -//line sql.y:6617 -======= - case 1285: + case 1289: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6611 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6627 { yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1289: - yyDollar = yyS[yypt-14 : yypt+1] - var yyLOCAL Expr -//line sql.y:6621 -======= - case 1286: + case 1290: yyDollar = yyS[yypt-14 : yypt+1] var yyLOCAL Expr -//line sql.y:6615 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6631 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpInstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), ReturnOption: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1290: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:6626 -======= - case 1287: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:6620 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1291: - yyDollar = yyS[yypt-8 : yypt+1] - var yyLOCAL Expr -//line sql.y:6630 - { - yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), MatchType: yyDollar[7].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1292: - yyDollar = yyS[yypt-8 : yypt+1] - var yyLOCAL Expr -//line sql.y:6634 -======= - case 1288: - yyDollar = yyS[yypt-8 : yypt+1] - var yyLOCAL Expr -//line sql.y:6624 - { - yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), MatchType: yyDollar[7].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1289: - yyDollar = yyS[yypt-8 : yypt+1] - var yyLOCAL Expr -//line sql.y:6628 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion()} - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1293: - yyDollar = yyS[yypt-10 : yypt+1] - var yyLOCAL Expr -//line sql.y:6638 -======= - case 1290: - yyDollar = yyS[yypt-10 : yypt+1] - var yyLOCAL Expr -//line sql.y:6632 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion()} - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1294: - yyDollar = yyS[yypt-12 : yypt+1] - var yyLOCAL Expr -//line sql.y:6642 -======= case 1291: - yyDollar = yyS[yypt-12 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr //line sql.y:6636 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion()} - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1295: - yyDollar = yyS[yypt-14 : yypt+1] - var yyLOCAL Expr -//line sql.y:6646 -======= + yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} + } + yyVAL.union = yyLOCAL case 1292: - yyDollar = yyS[yypt-14 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr //line sql.y:6640 ->>>>>>> e439161508 (fix: complete time period feature) { - // Match type is kept expression as TRIM( ' m ') is accepted - yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()} + yyLOCAL = &RegexpLikeExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), MatchType: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1296: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:6651 -======= case 1293: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6645 +//line sql.y:6644 { - yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} + yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL case 1294: - yyDollar = yyS[yypt-8 : yypt+1] + yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6649 +//line sql.y:6648 { - yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()} + yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL case 1295: - yyDollar = yyS[yypt-10 : yypt+1] + yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6653 +//line sql.y:6652 { - yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()} + yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL case 1296: - yyDollar = yyS[yypt-12 : yypt+1] + yyDollar = yyS[yypt-14 : yypt+1] var yyLOCAL Expr -//line sql.y:6657 +//line sql.y:6656 { // Match type is kept expression as TRIM( ' m ') is accepted - yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), MatchType: yyDollar[11].exprUnion()} + yyLOCAL = &RegexpReplaceExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Repl: yyDollar[7].exprUnion(), Position: yyDollar[9].exprUnion(), Occurrence: yyDollar[11].exprUnion(), MatchType: yyDollar[13].exprUnion()} } yyVAL.union = yyLOCAL case 1297: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6664 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6661 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion()} } @@ -29203,577 +18872,325 @@ yydefault: case 1298: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6655 +//line sql.y:6665 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL - case 1298: + case 1299: yyDollar = yyS[yypt-10 : yypt+1] var yyLOCAL Expr -//line sql.y:6659 +//line sql.y:6669 { yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion()} } yyVAL.union = yyLOCAL - case 1299: + case 1300: yyDollar = yyS[yypt-12 : yypt+1] var yyLOCAL Expr -//line sql.y:6663 +//line sql.y:6673 { // Match type is kept expression as TRIM( ' m ') is accepted yyLOCAL = &RegexpSubstrExpr{Expr: yyDollar[3].exprUnion(), Pattern: yyDollar[5].exprUnion(), Position: yyDollar[7].exprUnion(), Occurrence: yyDollar[9].exprUnion(), MatchType: yyDollar[11].exprUnion()} } yyVAL.union = yyLOCAL - case 1300: + case 1301: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6670 +//line sql.y:6680 { yyLOCAL = &ExtractValueExpr{Fragment: yyDollar[3].exprUnion(), XPathExpr: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1301: + case 1302: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6674 -======= -//line sql.y:6668 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6684 { yyLOCAL = &UpdateXMLExpr{Target: yyDollar[3].exprUnion(), XPathExpr: yyDollar[5].exprUnion(), NewXML: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1302: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6680 - { - yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatBytesType, Argument: yyDollar[3].exprUnion()} - } - yyVAL.union = yyLOCAL case 1303: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6684 -======= - case 1299: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6674 +//line sql.y:6690 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatBytesType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1300: + case 1304: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6678 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6694 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: FormatPicoTimeType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1304: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Expr -//line sql.y:6688 -======= - case 1301: + case 1305: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6682 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6698 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsCurrentThreadIDType} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1305: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6692 -======= - case 1302: + case 1306: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6686 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6702 { yyLOCAL = &PerformanceSchemaFuncExpr{Type: PsThreadIDType, Argument: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1306: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:6698 -======= - case 1303: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:6692 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = >IDFuncExpr{Type: GTIDSubsetType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()} - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD case 1307: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6702 +//line sql.y:6708 { - yyLOCAL = >IDFuncExpr{Type: GTIDSubtractType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()} + yyLOCAL = >IDFuncExpr{Type: GTIDSubsetType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL case 1308: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6706 - { - yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1309: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:6710 - { - yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1310: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6714 - { - yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1311: - yyDollar = yyS[yypt-6 : yypt+1] - var yyLOCAL Expr -//line sql.y:6718 -======= - case 1304: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6696 +//line sql.y:6712 { yyLOCAL = >IDFuncExpr{Type: GTIDSubtractType, Set1: yyDollar[3].exprUnion(), Set2: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1305: + case 1309: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6700 +//line sql.y:6716 { yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1306: + case 1310: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6704 +//line sql.y:6720 { yyLOCAL = >IDFuncExpr{Type: WaitForExecutedGTIDSetType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL - case 1307: + case 1311: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6708 +//line sql.y:6724 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL - case 1308: + case 1312: yyDollar = yyS[yypt-6 : yypt+1] var yyLOCAL Expr -//line sql.y:6712 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6728 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1312: - yyDollar = yyS[yypt-8 : yypt+1] - var yyLOCAL Expr -//line sql.y:6722 -======= - case 1309: + case 1313: yyDollar = yyS[yypt-8 : yypt+1] var yyLOCAL Expr -//line sql.y:6716 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6732 { yyLOCAL = >IDFuncExpr{Type: WaitUntilSQLThreadAfterGTIDSType, Set1: yyDollar[3].exprUnion(), Timeout: yyDollar[5].exprUnion(), Channel: yyDollar[7].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1313: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL *ConvertType -//line sql.y:6727 -======= - case 1310: + case 1314: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6721 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6737 { yyLOCAL = nil } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1314: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *ConvertType -//line sql.y:6731 -======= - case 1311: + case 1315: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6725 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6741 { yyLOCAL = yyDollar[2].convertTypeUnion() } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1315: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6737 - { -======= - case 1312: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6731 - { - } - case 1313: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL IntervalTypes -//line sql.y:6733 - { - yyLOCAL = IntervalDayHour - } - yyVAL.union = yyLOCAL - case 1314: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL IntervalTypes -//line sql.y:6737 - { - yyLOCAL = IntervalDayMicrosecond - } - yyVAL.union = yyLOCAL - case 1315: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL IntervalTypes -//line sql.y:6741 - { - yyLOCAL = IntervalDayMinute ->>>>>>> e439161508 (fix: complete time period feature) - } case 1316: yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL IntervalTypes -<<<<<<< HEAD -//line sql.y:6739 - { - yyLOCAL = IntervalDayHour -======= -//line sql.y:6745 +//line sql.y:6747 { - yyLOCAL = IntervalDaySecond ->>>>>>> e439161508 (fix: complete time period feature) } - yyVAL.union = yyLOCAL case 1317: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -<<<<<<< HEAD -//line sql.y:6743 - { - yyLOCAL = IntervalDayMicrosecond -======= //line sql.y:6749 { - yyLOCAL = IntervalHourMicrosecond ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = IntervalDayHour } yyVAL.union = yyLOCAL case 1318: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -<<<<<<< HEAD -//line sql.y:6747 - { - yyLOCAL = IntervalDayMinute -======= //line sql.y:6753 { - yyLOCAL = IntervalHourMinute ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = IntervalDayMicrosecond } yyVAL.union = yyLOCAL case 1319: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -<<<<<<< HEAD -//line sql.y:6751 - { - yyLOCAL = IntervalDaySecond -======= //line sql.y:6757 { - yyLOCAL = IntervalHourSecond ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = IntervalDayMinute } yyVAL.union = yyLOCAL case 1320: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -<<<<<<< HEAD -//line sql.y:6755 - { - yyLOCAL = IntervalHourMicrosecond -======= //line sql.y:6761 { - yyLOCAL = IntervalMinuteMicrosecond ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = IntervalDaySecond } yyVAL.union = yyLOCAL case 1321: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -<<<<<<< HEAD -//line sql.y:6759 - { - yyLOCAL = IntervalHourMinute -======= //line sql.y:6765 { - yyLOCAL = IntervalMinuteSecond ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = IntervalHourMicrosecond } yyVAL.union = yyLOCAL case 1322: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -<<<<<<< HEAD -//line sql.y:6763 - { - yyLOCAL = IntervalHourSecond -======= //line sql.y:6769 { - yyLOCAL = IntervalSecondMicrosecond ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = IntervalHourMinute } yyVAL.union = yyLOCAL case 1323: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -<<<<<<< HEAD -//line sql.y:6767 - { - yyLOCAL = IntervalMinuteMicrosecond -======= //line sql.y:6773 { - yyLOCAL = IntervalYearMonth ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = IntervalHourSecond } yyVAL.union = yyLOCAL case 1324: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -<<<<<<< HEAD -//line sql.y:6771 +//line sql.y:6777 { - yyLOCAL = IntervalMinuteSecond -======= -//line sql.y:6779 - { - yyLOCAL = IntervalDay ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = IntervalMinuteMicrosecond } yyVAL.union = yyLOCAL case 1325: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -<<<<<<< HEAD -//line sql.y:6775 +//line sql.y:6781 { - yyLOCAL = IntervalSecondMicrosecond -======= -//line sql.y:6783 - { - yyLOCAL = IntervalWeek ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = IntervalMinuteSecond } yyVAL.union = yyLOCAL case 1326: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -<<<<<<< HEAD -//line sql.y:6779 - { - yyLOCAL = IntervalYearMonth -======= -//line sql.y:6787 +//line sql.y:6785 { - yyLOCAL = IntervalHour ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = IntervalSecondMicrosecond } yyVAL.union = yyLOCAL case 1327: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -<<<<<<< HEAD -//line sql.y:6785 - { - yyLOCAL = IntervalDay -======= -//line sql.y:6791 +//line sql.y:6789 { - yyLOCAL = IntervalMinute ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = IntervalYearMonth } yyVAL.union = yyLOCAL case 1328: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -<<<<<<< HEAD -//line sql.y:6789 - { - yyLOCAL = IntervalWeek -======= //line sql.y:6795 { - yyLOCAL = IntervalMonth ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = IntervalDay } yyVAL.union = yyLOCAL case 1329: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -<<<<<<< HEAD -//line sql.y:6793 - { - yyLOCAL = IntervalHour -======= //line sql.y:6799 { - yyLOCAL = IntervalQuarter ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = IntervalWeek } yyVAL.union = yyLOCAL case 1330: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -<<<<<<< HEAD -//line sql.y:6797 - { - yyLOCAL = IntervalMinute -======= //line sql.y:6803 { - yyLOCAL = IntervalSecond ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = IntervalHour } yyVAL.union = yyLOCAL case 1331: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -<<<<<<< HEAD -//line sql.y:6801 - { - yyLOCAL = IntervalMonth -======= //line sql.y:6807 { - yyLOCAL = IntervalMicrosecond ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = IntervalMinute } yyVAL.union = yyLOCAL case 1332: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -<<<<<<< HEAD -//line sql.y:6805 +//line sql.y:6811 { - yyLOCAL = IntervalQuarter + yyLOCAL = IntervalMonth } yyVAL.union = yyLOCAL case 1333: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6809 +//line sql.y:6815 { - yyLOCAL = IntervalSecond + yyLOCAL = IntervalQuarter } yyVAL.union = yyLOCAL case 1334: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6813 +//line sql.y:6819 { - yyLOCAL = IntervalMicrosecond + yyLOCAL = IntervalSecond } yyVAL.union = yyLOCAL case 1335: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL IntervalTypes -//line sql.y:6817 -======= -//line sql.y:6811 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6823 { - yyLOCAL = IntervalYear + yyLOCAL = IntervalMicrosecond } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1338: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL Expr + case 1336: + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL IntervalTypes //line sql.y:6827 { - yyLOCAL = nil + yyLOCAL = IntervalYear } yyVAL.union = yyLOCAL case 1339: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Expr -//line sql.y:6831 -======= - case 1335: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:6821 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6837 { yyLOCAL = nil } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1340: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Expr -//line sql.y:6835 -======= - case 1336: + case 1340: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:6825 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6841 { yyLOCAL = nil } @@ -29781,43 +19198,24 @@ yydefault: case 1341: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6839 -======= -//line sql.y:6829 +//line sql.y:6845 { yyLOCAL = NewIntLiteral(yyDollar[2].str) } yyVAL.union = yyLOCAL - case 1338: + case 1342: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Expr -//line sql.y:6833 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6849 { yyLOCAL = NewArgument(yyDollar[2].str[1:]) bindVariable(yylex, yyDollar[2].str[1:]) } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1342: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6850 - { - yyLOCAL = &FuncExpr{Name: NewIdentifierCI("if"), Exprs: yyDollar[3].selectExprsUnion()} - } - yyVAL.union = yyLOCAL case 1343: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6854 -======= - case 1339: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Expr -//line sql.y:6844 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6860 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("if"), Exprs: yyDollar[3].selectExprsUnion()} } @@ -29825,11 +19223,7 @@ yydefault: case 1344: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6858 -======= -//line sql.y:6848 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6864 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("database"), Exprs: yyDollar[3].selectExprsUnion()} } @@ -29837,11 +19231,7 @@ yydefault: case 1345: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6862 -======= -//line sql.y:6852 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6868 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("schema"), Exprs: yyDollar[3].selectExprsUnion()} } @@ -29849,337 +19239,163 @@ yydefault: case 1346: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:6866 -======= -//line sql.y:6856 +//line sql.y:6872 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("mod"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL - case 1343: + case 1347: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Expr -//line sql.y:6860 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6876 { yyLOCAL = &FuncExpr{Name: NewIdentifierCI("replace"), Exprs: yyDollar[3].selectExprsUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1347: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL MatchExprOption -//line sql.y:6872 -======= - case 1344: + case 1348: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6866 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6882 { yyLOCAL = NoOption } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1348: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL MatchExprOption -//line sql.y:6876 -======= - case 1345: + case 1349: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6870 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6886 { yyLOCAL = BooleanModeOpt } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1349: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL MatchExprOption -//line sql.y:6880 -======= - case 1346: + case 1350: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6874 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6890 { yyLOCAL = NaturalLanguageModeOpt } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1350: - yyDollar = yyS[yypt-7 : yypt+1] - var yyLOCAL MatchExprOption -//line sql.y:6884 -======= - case 1347: + case 1351: yyDollar = yyS[yypt-7 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6878 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6894 { yyLOCAL = NaturalLanguageModeWithQueryExpansionOpt } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1351: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL MatchExprOption -//line sql.y:6888 -======= - case 1348: + case 1352: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL MatchExprOption -//line sql.y:6882 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6898 { yyLOCAL = QueryExpansionOpt } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1352: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6894 - { - yyVAL.str = string(yyDollar[1].identifierCI.String()) - } case 1353: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6898 +//line sql.y:6904 { - yyVAL.str = string(yyDollar[1].str) + yyVAL.str = string(yyDollar[1].identifierCI.String()) } case 1354: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6902 - { - yyVAL.str = string(yyDollar[1].str) - } - case 1355: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL *ConvertType //line sql.y:6908 -======= - case 1349: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6888 - { - yyVAL.str = string(yyDollar[1].identifierCI.String()) - } - case 1350: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6892 { yyVAL.str = string(yyDollar[1].str) } - case 1351: + case 1355: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:6896 +//line sql.y:6912 { yyVAL.str = string(yyDollar[1].str) } - case 1352: + case 1356: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6902 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6918 { yyLOCAL = nil } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1356: - yyDollar = yyS[yypt-5 : yypt+1] - var yyLOCAL *ConvertType -//line sql.y:6912 -======= - case 1353: - yyDollar = yyS[yypt-5 : yypt+1] - var yyLOCAL *ConvertType -//line sql.y:6906 - { - yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: NewIntLiteral(yyDollar[4].str)} - } - yyVAL.union = yyLOCAL - case 1354: - yyDollar = yyS[yypt-5 : yypt+1] - var yyLOCAL *ConvertType -//line sql.y:6910 - { - yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: NewIntLiteral(yyDollar[4].str)} - } - yyVAL.union = yyLOCAL - case 1355: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *ConvertType -//line sql.y:6916 - { - yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} - } - yyVAL.union = yyLOCAL - case 1356: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL *ConvertType -//line sql.y:6920 - { - yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion(), Charset: yyDollar[3].columnCharset} - } - yyVAL.union = yyLOCAL case 1357: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6924 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6922 { yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: NewIntLiteral(yyDollar[4].str)} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1357: + case 1358: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6916 +//line sql.y:6926 { yyLOCAL = &ConvertType{Type: string(yyDollar[2].str), Length: NewIntLiteral(yyDollar[4].str)} } yyVAL.union = yyLOCAL - case 1358: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *ConvertType -//line sql.y:6922 -======= - case 1358: + case 1359: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6928 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6932 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1359: -<<<<<<< HEAD + case 1360: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6926 +//line sql.y:6936 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion(), Charset: yyDollar[3].columnCharset} } yyVAL.union = yyLOCAL - case 1360: + case 1361: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6930 +//line sql.y:6940 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1361: + case 1362: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6934 +//line sql.y:6944 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL - case 1362: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *ConvertType -//line sql.y:6938 -======= + case 1363: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6932 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6948 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} yyLOCAL.Length = yyDollar[2].LengthScaleOption.Length yyLOCAL.Scale = yyDollar[2].LengthScaleOption.Scale } yyVAL.union = yyLOCAL -<<<<<<< HEAD -======= - case 1360: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL *ConvertType -//line sql.y:6938 - { - yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} - } - yyVAL.union = yyLOCAL - case 1361: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *ConvertType -//line sql.y:6942 - { - yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} - } - yyVAL.union = yyLOCAL - case 1362: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL *ConvertType -//line sql.y:6946 - { - yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} - } - yyVAL.union = yyLOCAL ->>>>>>> e439161508 (fix: complete time period feature) - case 1363: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL *ConvertType -<<<<<<< HEAD -//line sql.y:6944 - { - yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} - } - yyVAL.union = yyLOCAL case 1364: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *ConvertType -//line sql.y:6948 -======= -//line sql.y:6950 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1365: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6952 -======= - case 1364: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *ConvertType //line sql.y:6954 { - yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} + yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL case 1365: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType //line sql.y:6958 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} + yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL case 1366: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -<<<<<<< HEAD -//line sql.y:6956 -======= //line sql.y:6962 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } @@ -30187,33 +19403,20 @@ yydefault: case 1367: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -<<<<<<< HEAD -//line sql.y:6960 -======= //line sql.y:6966 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} + yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL case 1368: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -<<<<<<< HEAD -//line sql.y:6964 -======= //line sql.y:6970 ->>>>>>> e439161508 (fix: complete time period feature) { - yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} + yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL case 1369: -<<<<<<< HEAD - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *ConvertType -//line sql.y:6968 -======= yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType //line sql.y:6974 @@ -30222,266 +19425,156 @@ yydefault: } yyVAL.union = yyLOCAL case 1370: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL bool -//line sql.y:6980 ->>>>>>> e439161508 (fix: complete time period feature) + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL *ConvertType +//line sql.y:6978 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1370: + case 1371: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6972 -======= - case 1371: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL bool -//line sql.y:6984 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6982 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str), Length: yyDollar[2].literalUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1371: + case 1372: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ConvertType -//line sql.y:6976 -======= - case 1372: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL Expr -//line sql.y:6989 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6986 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL case 1373: yyDollar = yyS[yypt-1 : yypt+1] -<<<<<<< HEAD var yyLOCAL *ConvertType -//line sql.y:6980 -======= - var yyLOCAL Expr -//line sql.y:6993 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6990 { yyLOCAL = &ConvertType{Type: string(yyDollar[1].str)} } yyVAL.union = yyLOCAL case 1374: yyDollar = yyS[yypt-0 : yypt+1] -<<<<<<< HEAD var yyLOCAL bool -//line sql.y:6986 -======= -//line sql.y:6998 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:6996 { yyLOCAL = false } -<<<<<<< HEAD yyVAL.union = yyLOCAL - case 1374: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL bool -//line sql.y:6990 -======= case 1375: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7002 - { - yyVAL.str = " separator " + encodeSQLString(yyDollar[2].str) - } - case 1376: yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL []*When -//line sql.y:7008 ->>>>>>> e439161508 (fix: complete time period feature) + var yyLOCAL bool +//line sql.y:7000 { yyLOCAL = true } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1375: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL Expr -//line sql.y:6995 -======= - case 1377: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7012 - { - yySLICE := (*[]*When)(yyIaddr(yyVAL.union)) - *yySLICE = append(*yySLICE, yyDollar[2].whenUnion()) - } - case 1378: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL *When -//line sql.y:7018 - { - yyLOCAL = &When{Cond: yyDollar[2].exprUnion(), Val: yyDollar[4].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1379: + case 1376: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:7023 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7005 { yyLOCAL = nil } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1376: + case 1377: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:6999 +//line sql.y:7009 { yyLOCAL = yyDollar[1].exprUnion() } yyVAL.union = yyLOCAL - case 1377: + case 1378: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7004 +//line sql.y:7014 { yyVAL.str = string("") } - case 1378: + case 1379: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7008 +//line sql.y:7018 { yyVAL.str = " separator " + encodeSQLString(yyDollar[2].str) } - case 1379: + case 1380: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*When -//line sql.y:7014 +//line sql.y:7024 { yyLOCAL = []*When{yyDollar[1].whenUnion()} } yyVAL.union = yyLOCAL - case 1380: + case 1381: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7018 +//line sql.y:7028 { yySLICE := (*[]*When)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[2].whenUnion()) } - case 1381: + case 1382: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *When -//line sql.y:7024 +//line sql.y:7034 { yyLOCAL = &When{Cond: yyDollar[2].exprUnion(), Val: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL - case 1382: + case 1383: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:7029 +//line sql.y:7039 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1383: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Expr -//line sql.y:7033 -======= - case 1380: + case 1384: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7027 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7043 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1384: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL *ColName -//line sql.y:7039 - { - yyLOCAL = &ColName{Name: yyDollar[1].identifierCI} - } - yyVAL.union = yyLOCAL case 1385: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ColName -//line sql.y:7043 -======= - case 1381: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL *ColName -//line sql.y:7033 +//line sql.y:7049 { yyLOCAL = &ColName{Name: yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL - case 1382: + case 1386: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *ColName -//line sql.y:7037 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7053 { yyLOCAL = &ColName{Name: NewIdentifierCI(string(yyDollar[1].str))} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1386: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL *ColName -//line sql.y:7047 -======= - case 1383: + case 1387: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *ColName -//line sql.y:7041 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7057 { yyLOCAL = &ColName{Qualifier: TableName{Name: yyDollar[1].identifierCS}, Name: yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1387: - yyDollar = yyS[yypt-5 : yypt+1] - var yyLOCAL *ColName -//line sql.y:7051 -======= - case 1384: + case 1388: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *ColName -//line sql.y:7045 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7061 { yyLOCAL = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].identifierCS, Name: yyDollar[3].identifierCS}, Name: yyDollar[5].identifierCI} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1388: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Expr -//line sql.y:7057 - { - yyLOCAL = yyDollar[1].colNameUnion() - } - yyVAL.union = yyLOCAL case 1389: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7061 -======= - case 1385: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Expr -//line sql.y:7051 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7067 { yyLOCAL = yyDollar[1].colNameUnion() } @@ -30489,19 +19582,15 @@ yydefault: case 1390: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -<<<<<<< HEAD -//line sql.y:7067 -======= -//line sql.y:7055 +//line sql.y:7071 { yyLOCAL = &Offset{V: convertStringToInt(yyDollar[1].str)} } yyVAL.union = yyLOCAL - case 1387: + case 1391: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7061 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7077 { // TODO(sougou): Deprecate this construct. if yyDollar[1].identifierCI.Lowered() != "value" { @@ -30511,923 +19600,498 @@ yydefault: yyLOCAL = NewIntLiteral("1") } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1391: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Expr -//line sql.y:7076 -======= - case 1388: + case 1392: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7070 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7086 { yyLOCAL = NewIntLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1392: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Expr -//line sql.y:7080 -======= - case 1389: + case 1393: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7074 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7090 { yyLOCAL = NewArgument(yyDollar[1].str[1:]) bindVariable(yylex, yyDollar[1].str[1:]) } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1393: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL Exprs -//line sql.y:7086 -======= - case 1390: + case 1394: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Exprs -//line sql.y:7080 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7096 { yyLOCAL = nil } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1394: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Exprs -//line sql.y:7090 -======= - case 1391: + case 1395: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Exprs -//line sql.y:7084 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7100 { yyLOCAL = yyDollar[3].exprsUnion() } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1395: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL Expr -//line sql.y:7095 -======= - case 1392: + case 1396: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Expr -//line sql.y:7089 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7105 { yyLOCAL = nil } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1396: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Expr -//line sql.y:7099 - { - yyLOCAL = yyDollar[2].exprUnion() - } - yyVAL.union = yyLOCAL case 1397: -======= - case 1393: ->>>>>>> e439161508 (fix: complete time period feature) yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Expr -//line sql.y:7093 +//line sql.y:7109 { yyLOCAL = yyDollar[2].exprUnion() } yyVAL.union = yyLOCAL - case 1394: + case 1398: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *NamedWindow -<<<<<<< HEAD -//line sql.y:7105 -======= -//line sql.y:7099 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7115 { yyLOCAL = &NamedWindow{yyDollar[2].windowDefinitionsUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1398: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL NamedWindows -//line sql.y:7111 -======= - case 1395: + case 1399: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7105 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7121 { yyLOCAL = NamedWindows{yyDollar[1].namedWindowUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1399: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7115 -======= - case 1396: + case 1400: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7109 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7125 { yySLICE := (*NamedWindows)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].namedWindowUnion()) } -<<<<<<< HEAD - case 1400: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL NamedWindows -//line sql.y:7120 -======= - case 1397: + case 1401: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL NamedWindows -//line sql.y:7114 - { - yyLOCAL = nil - } - yyVAL.union = yyLOCAL - case 1398: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL NamedWindows -//line sql.y:7118 - { - yyLOCAL = yyDollar[1].namedWindowsUnion() - } - yyVAL.union = yyLOCAL - case 1399: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL OrderBy -//line sql.y:7123 - { - yyLOCAL = nil - } - yyVAL.union = yyLOCAL - case 1400: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL OrderBy -//line sql.y:7127 - { - yyLOCAL = yyDollar[1].orderByUnion() - } - yyVAL.union = yyLOCAL - case 1401: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL OrderBy -//line sql.y:7133 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7130 { yyLOCAL = nil } yyVAL.union = yyLOCAL case 1402: yyDollar = yyS[yypt-1 : yypt+1] -<<<<<<< HEAD var yyLOCAL NamedWindows -//line sql.y:7124 -======= - var yyLOCAL OrderBy -//line sql.y:7139 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7134 { yyLOCAL = yyDollar[1].namedWindowsUnion() } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1402: + case 1403: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7129 -======= - case 1403: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7143 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7139 { yyLOCAL = nil } -<<<<<<< HEAD yyVAL.union = yyLOCAL - case 1403: + case 1404: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7133 -======= - case 1404: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *Order -//line sql.y:7149 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7143 { yyLOCAL = yyDollar[1].orderByUnion() } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1404: + case 1405: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7139 +//line sql.y:7149 { yyLOCAL = yyDollar[3].orderByUnion() } yyVAL.union = yyLOCAL - case 1405: + case 1406: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderBy -//line sql.y:7145 +//line sql.y:7155 { yyLOCAL = OrderBy{yyDollar[1].orderUnion()} } yyVAL.union = yyLOCAL - case 1406: + case 1407: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7149 +//line sql.y:7159 { yySLICE := (*OrderBy)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].orderUnion()) } - case 1407: + case 1408: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Order -//line sql.y:7155 +//line sql.y:7165 { yyLOCAL = &Order{Expr: yyDollar[1].exprUnion(), Direction: yyDollar[2].orderDirectionUnion()} } yyVAL.union = yyLOCAL - case 1408: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL OrderDirection -//line sql.y:7160 -======= - case 1405: + case 1409: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7154 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7170 { yyLOCAL = AscOrder } yyVAL.union = yyLOCAL - case 1409: + case 1410: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderDirection -<<<<<<< HEAD -//line sql.y:7164 -======= -//line sql.y:7158 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7174 { yyLOCAL = AscOrder } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1410: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL OrderDirection -//line sql.y:7168 -======= - case 1407: + case 1411: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL OrderDirection -//line sql.y:7162 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7178 { yyLOCAL = DescOrder } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1411: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL *Limit -//line sql.y:7173 -======= - case 1408: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL *Limit -//line sql.y:7167 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = nil - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD case 1412: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL *Limit -//line sql.y:7177 -======= - case 1409: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL *Limit -//line sql.y:7171 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = yyDollar[1].limitUnion() - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1413: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Limit //line sql.y:7183 -======= - case 1410: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *Limit -//line sql.y:7177 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = &Limit{Rowcount: yyDollar[2].exprUnion()} - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1414: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL *Limit -//line sql.y:7187 - { - yyLOCAL = &Limit{Offset: yyDollar[2].exprUnion(), Rowcount: yyDollar[4].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1415: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL *Limit -//line sql.y:7191 -======= - case 1411: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL *Limit -//line sql.y:7181 { - yyLOCAL = &Limit{Offset: yyDollar[2].exprUnion(), Rowcount: yyDollar[4].exprUnion()} - } - yyVAL.union = yyLOCAL - case 1412: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL *Limit -//line sql.y:7185 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = &Limit{Offset: yyDollar[4].exprUnion(), Rowcount: yyDollar[2].exprUnion()} - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1416: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL []AlterOption -//line sql.y:7196 -======= - case 1413: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL []AlterOption -//line sql.y:7190 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = nil - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1417: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL []AlterOption -//line sql.y:7200 - { - yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} - } - yyVAL.union = yyLOCAL - case 1418: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL []AlterOption -//line sql.y:7204 - { - yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} + yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1419: + case 1413: yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL []AlterOption -//line sql.y:7208 + var yyLOCAL *Limit +//line sql.y:7187 { - yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} + yyLOCAL = yyDollar[1].limitUnion() } yyVAL.union = yyLOCAL - case 1420: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL []AlterOption -//line sql.y:7212 - { - yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} -======= case 1414: yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL []AlterOption -//line sql.y:7194 + var yyLOCAL *Limit +//line sql.y:7193 { - yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} + yyLOCAL = &Limit{Rowcount: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL case 1415: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL []AlterOption -//line sql.y:7198 + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL *Limit +//line sql.y:7197 { - yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} + yyLOCAL = &Limit{Offset: yyDollar[2].exprUnion(), Rowcount: yyDollar[4].exprUnion()} } yyVAL.union = yyLOCAL case 1416: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL []AlterOption -//line sql.y:7202 + yyDollar = yyS[yypt-4 : yypt+1] + var yyLOCAL *Limit +//line sql.y:7201 { - yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} + yyLOCAL = &Limit{Offset: yyDollar[4].exprUnion(), Rowcount: yyDollar[2].exprUnion()} } yyVAL.union = yyLOCAL case 1417: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []AlterOption //line sql.y:7206 { - yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} + yyLOCAL = nil } yyVAL.union = yyLOCAL case 1418: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL AlterOption -//line sql.y:7216 + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL []AlterOption +//line sql.y:7210 { - yyLOCAL = &LockOption{Type: DefaultType} + yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} } yyVAL.union = yyLOCAL case 1419: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL AlterOption -//line sql.y:7220 + yyDollar = yyS[yypt-2 : yypt+1] + var yyLOCAL []AlterOption +//line sql.y:7214 { - yyLOCAL = &LockOption{Type: NoneType} + yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion(), yyDollar[2].alterOptionUnion()} } yyVAL.union = yyLOCAL case 1420: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL AlterOption -//line sql.y:7224 + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL []AlterOption +//line sql.y:7218 { - yyLOCAL = &LockOption{Type: SharedType} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL case 1421: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL AlterOption -<<<<<<< HEAD + yyDollar = yyS[yypt-1 : yypt+1] + var yyLOCAL []AlterOption //line sql.y:7222 { - yyLOCAL = &LockOption{Type: DefaultType} -======= -//line sql.y:7228 - { - yyLOCAL = &LockOption{Type: ExclusiveType} ->>>>>>> e439161508 (fix: complete time period feature) + yyLOCAL = []AlterOption{yyDollar[1].alterOptionUnion()} } yyVAL.union = yyLOCAL case 1422: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -<<<<<<< HEAD -//line sql.y:7226 -======= -//line sql.y:7234 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7232 { - yyLOCAL = &LockOption{Type: NoneType} + yyLOCAL = &LockOption{Type: DefaultType} } yyVAL.union = yyLOCAL case 1423: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -<<<<<<< HEAD -//line sql.y:7230 -======= -//line sql.y:7238 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7236 { - yyLOCAL = &LockOption{Type: SharedType} + yyLOCAL = &LockOption{Type: NoneType} } yyVAL.union = yyLOCAL case 1424: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -<<<<<<< HEAD -//line sql.y:7234 +//line sql.y:7240 { - yyLOCAL = &LockOption{Type: ExclusiveType} + yyLOCAL = &LockOption{Type: SharedType} } yyVAL.union = yyLOCAL case 1425: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7240 -======= -//line sql.y:7242 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7244 { - yyLOCAL = AlgorithmValue(yyDollar[3].str) + yyLOCAL = &LockOption{Type: ExclusiveType} } yyVAL.union = yyLOCAL -<<<<<<< HEAD case 1426: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7244 -======= - case 1425: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL AlterOption -//line sql.y:7246 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7250 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL -<<<<<<< HEAD case 1427: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL AlterOption -//line sql.y:7248 -======= - case 1426: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7251 - { - yyVAL.str = "" - } - case 1427: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7255 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7254 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL case 1428: yyDollar = yyS[yypt-3 : yypt+1] -<<<<<<< HEAD var yyLOCAL AlterOption -//line sql.y:7252 -======= -//line sql.y:7259 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7258 { yyLOCAL = AlgorithmValue(yyDollar[3].str) } yyVAL.union = yyLOCAL case 1429: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7263 + var yyLOCAL AlterOption +//line sql.y:7262 { - yyVAL.str = string(yyDollar[3].str) + yyLOCAL = AlgorithmValue(yyDollar[3].str) } + yyVAL.union = yyLOCAL case 1430: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7268 +//line sql.y:7267 { yyVAL.str = "" } case 1431: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7272 +//line sql.y:7271 { yyVAL.str = string(yyDollar[3].str) } -<<<<<<< HEAD - case 1431: + case 1432: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7265 +//line sql.y:7275 { yyVAL.str = string(yyDollar[3].str) } - case 1432: + case 1433: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7269 -======= - case 1432: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7278 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7279 { yyVAL.str = string(yyDollar[3].str) } - case 1433: -<<<<<<< HEAD + case 1434: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7274 +//line sql.y:7284 { yyVAL.str = "" } - case 1434: + case 1435: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7278 +//line sql.y:7288 { yyVAL.str = yyDollar[3].str } - case 1435: + case 1436: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7284 +//line sql.y:7294 { yyVAL.str = string(yyDollar[1].str) } - case 1436: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7288 -======= + case 1437: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7282 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7298 { yyVAL.str = string(yyDollar[1].str) } - case 1434: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7287 - { - yyVAL.str = "" - } - case 1435: - yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:7291 - { - yyVAL.str = yyDollar[2].str - } - case 1436: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7296 - { - yyVAL.str = "cascaded" - } - case 1437: -<<<<<<< HEAD + case 1438: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7293 -======= - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7300 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7303 { yyVAL.str = "" } - case 1438: + case 1439: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:7297 +//line sql.y:7307 { yyVAL.str = yyDollar[2].str } - case 1439: + case 1440: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7302 +//line sql.y:7312 { yyVAL.str = "cascaded" } - case 1440: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7306 - { - yyVAL.str = string(yyDollar[1].str) - } -<<<<<<< HEAD case 1441: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7310 +//line sql.y:7316 { yyVAL.str = string(yyDollar[1].str) } case 1442: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL CheckOptions -//line sql.y:7315 -======= - case 1438: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7304 +//line sql.y:7320 { yyVAL.str = string(yyDollar[1].str) } - case 1439: + case 1443: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL CheckOptions -//line sql.y:7309 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7325 { yyLOCAL = nil } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1443: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL CheckOptions -//line sql.y:7319 -======= - case 1440: + case 1444: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckOptions -//line sql.y:7313 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7329 { yyLOCAL = CheckOptions{yyDollar[1].checkTypeUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1444: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7323 -======= - case 1441: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7317 ->>>>>>> e439161508 (fix: complete time period feature) - { - yySLICE := (*CheckOptions)(yyIaddr(yyVAL.union)) - *yySLICE = append(*yySLICE, yyDollar[2].checkTypeUnion()) - } -<<<<<<< HEAD case 1445: yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL CheckType -//line sql.y:7329 -======= - case 1442: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL CheckType -//line sql.y:7323 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = Forupgrade - } - yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1446: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL CheckType //line sql.y:7333 -======= - case 1443: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL CheckType -//line sql.y:7327 - { - yyLOCAL = Fast - } - yyVAL.union = yyLOCAL - case 1444: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL CheckType -//line sql.y:7331 - { - yyLOCAL = Quick - } - yyVAL.union = yyLOCAL - case 1445: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL CheckType -//line sql.y:7335 { - yyLOCAL = Medium + yySLICE := (*CheckOptions)(yyIaddr(yyVAL.union)) + *yySLICE = append(*yySLICE, yyDollar[2].checkTypeUnion()) } - yyVAL.union = yyLOCAL case 1446: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL CheckType //line sql.y:7339 { - yyLOCAL = Extended + yyLOCAL = Forupgrade } yyVAL.union = yyLOCAL case 1447: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType //line sql.y:7343 ->>>>>>> e439161508 (fix: complete time period feature) { yyLOCAL = Fast } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1447: + case 1448: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType -//line sql.y:7337 -======= - case 1448: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL *Definer -//line sql.y:7349 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7347 { yyLOCAL = Quick } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1448: + case 1449: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType -//line sql.y:7341 -======= - case 1449: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL *Definer -//line sql.y:7353 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7351 { yyLOCAL = Medium } yyVAL.union = yyLOCAL case 1450: yyDollar = yyS[yypt-1 : yypt+1] -<<<<<<< HEAD var yyLOCAL CheckType -//line sql.y:7345 +//line sql.y:7355 { yyLOCAL = Extended } yyVAL.union = yyLOCAL - case 1450: + case 1451: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL CheckType -//line sql.y:7349 +//line sql.y:7359 { yyLOCAL = CHanged } yyVAL.union = yyLOCAL - case 1451: + case 1452: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL *Definer -//line sql.y:7355 +//line sql.y:7365 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1452: + case 1453: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Definer -//line sql.y:7359 +//line sql.y:7369 { yyLOCAL = yyDollar[3].definerUnion() } yyVAL.union = yyLOCAL - case 1453: + case 1454: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Definer -//line sql.y:7365 -======= - var yyLOCAL *Definer -//line sql.y:7359 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7375 { yyLOCAL = &Definer{ Name: string(yyDollar[1].str), } } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1454: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL *Definer -//line sql.y:7371 -======= - case 1451: + case 1455: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *Definer -//line sql.y:7365 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7381 { yyLOCAL = &Definer{ Name: string(yyDollar[1].str), } } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1455: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *Definer -//line sql.y:7377 -======= - case 1452: + case 1456: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Definer -//line sql.y:7371 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7387 { yyLOCAL = &Definer{ Name: yyDollar[1].str, @@ -31435,704 +20099,369 @@ yydefault: } } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1456: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7386 - { - yyVAL.str = encodeSQLString(yyDollar[1].str) - } case 1457: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7390 - { - yyVAL.str = formatIdentifier(yyDollar[1].str) - } - case 1458: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7395 - { - yyVAL.str = "" - } - case 1459: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7399 - { - yyVAL.str = formatAddress(yyDollar[1].str) - } - case 1460: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL Lock -//line sql.y:7405 -======= - case 1453: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7380 +//line sql.y:7396 { yyVAL.str = encodeSQLString(yyDollar[1].str) } - case 1454: + case 1458: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7384 +//line sql.y:7400 { yyVAL.str = formatIdentifier(yyDollar[1].str) } - case 1455: + case 1459: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7389 +//line sql.y:7405 { yyVAL.str = "" } - case 1456: + case 1460: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7393 +//line sql.y:7409 { yyVAL.str = formatAddress(yyDollar[1].str) } - case 1457: + case 1461: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL Lock -//line sql.y:7399 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7415 { yyLOCAL = ForUpdateLock } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1461: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL Lock -//line sql.y:7409 -======= - case 1458: + case 1462: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL Lock -//line sql.y:7403 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7419 { yyLOCAL = ShareModeLock } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1462: - yyDollar = yyS[yypt-9 : yypt+1] - var yyLOCAL *SelectInto -//line sql.y:7415 -======= - case 1459: + case 1463: yyDollar = yyS[yypt-9 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7409 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7425 { yyLOCAL = &SelectInto{Type: IntoOutfileS3, FileName: encodeSQLString(yyDollar[4].str), Charset: yyDollar[5].columnCharset, FormatOption: yyDollar[6].str, ExportOption: yyDollar[7].str, Manifest: yyDollar[8].str, Overwrite: yyDollar[9].str} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1463: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL *SelectInto -//line sql.y:7419 -======= - case 1460: + case 1464: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7413 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7429 { yyLOCAL = &SelectInto{Type: IntoDumpfile, FileName: encodeSQLString(yyDollar[3].str), Charset: ColumnCharset{}, FormatOption: "", ExportOption: "", Manifest: "", Overwrite: ""} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1464: - yyDollar = yyS[yypt-5 : yypt+1] - var yyLOCAL *SelectInto -//line sql.y:7423 -======= - case 1461: + case 1465: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *SelectInto -//line sql.y:7417 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7433 { yyLOCAL = &SelectInto{Type: IntoOutfile, FileName: encodeSQLString(yyDollar[3].str), Charset: yyDollar[4].columnCharset, FormatOption: "", ExportOption: yyDollar[5].str, Manifest: "", Overwrite: ""} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1465: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7428 - { - yyVAL.str = "" - } case 1466: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7432 - { - yyVAL.str = " format csv" + yyDollar[3].str - } - case 1467: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7436 - { - yyVAL.str = " format text" + yyDollar[3].str - } - case 1468: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7441 - { - yyVAL.str = "" - } - case 1469: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7445 - { - yyVAL.str = " header" - } - case 1470: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7450 -======= - case 1462: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7422 +//line sql.y:7438 { yyVAL.str = "" } - case 1463: + case 1467: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7426 +//line sql.y:7442 { yyVAL.str = " format csv" + yyDollar[3].str } - case 1464: + case 1468: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7430 +//line sql.y:7446 { yyVAL.str = " format text" + yyDollar[3].str } - case 1465: + case 1469: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7435 +//line sql.y:7451 { yyVAL.str = "" } - case 1466: + case 1470: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7439 +//line sql.y:7455 { yyVAL.str = " header" } - case 1467: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7444 - { - yyVAL.str = "" - } - case 1468: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7448 - { - yyVAL.str = " manifest on" - } - case 1469: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7452 - { - yyVAL.str = " manifest off" - } - case 1470: + case 1471: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7457 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7460 { yyVAL.str = "" } - case 1471: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7461 - { -<<<<<<< HEAD - yyVAL.str = " manifest on" - } - case 1472: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7458 -======= - yyVAL.str = " overwrite on" - } case 1472: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7465 +//line sql.y:7464 { - yyVAL.str = " overwrite off" + yyVAL.str = " manifest on" } case 1473: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7471 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7468 { yyVAL.str = " manifest off" } case 1474: yyDollar = yyS[yypt-0 : yypt+1] -<<<<<<< HEAD -//line sql.y:7463 -======= -//line sql.y:7476 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7473 { yyVAL.str = "" } case 1475: yyDollar = yyS[yypt-2 : yypt+1] -<<<<<<< HEAD -//line sql.y:7467 -======= -//line sql.y:7480 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7477 { yyVAL.str = " overwrite on" } -<<<<<<< HEAD - case 1475: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7471 -======= case 1476: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7486 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyVAL.str = " overwrite off" - } - case 1477: yyDollar = yyS[yypt-2 : yypt+1] -<<<<<<< HEAD -//line sql.y:7477 +//line sql.y:7481 { - yyVAL.str = yyDollar[1].str + yyDollar[2].str + yyVAL.str = " overwrite off" } case 1477: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7482 - { - yyVAL.str = "" - } - case 1478: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7486 -======= -//line sql.y:7490 +//line sql.y:7487 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } case 1478: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7496 - { - yyVAL.str = " starting by " + encodeSQLString(yyDollar[3].str) - } - case 1479: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7500 - { - yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str) - } - case 1480: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7505 +//line sql.y:7492 { yyVAL.str = "" } - case 1481: + case 1479: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7509 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7496 { yyVAL.str = " lines" + yyDollar[2].str } -<<<<<<< HEAD - case 1479: + case 1480: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7492 +//line sql.y:7502 { yyVAL.str = yyDollar[1].str } - case 1480: + case 1481: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7496 +//line sql.y:7506 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1481: + case 1482: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7502 +//line sql.y:7512 { yyVAL.str = " starting by " + encodeSQLString(yyDollar[3].str) } - case 1482: + case 1483: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7506 +//line sql.y:7516 { yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str) } - case 1483: + case 1484: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7511 +//line sql.y:7521 { yyVAL.str = "" } - case 1484: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7515 - { - yyVAL.str = " " + yyDollar[1].str + yyDollar[2].str - } case 1485: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7521 - { - yyVAL.str = yyDollar[1].str - } - case 1486: yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:7525 { - yyVAL.str = yyDollar[1].str + yyDollar[2].str + yyVAL.str = " " + yyDollar[1].str + yyDollar[2].str } - case 1487: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7531 -======= - case 1482: + case 1486: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7515 +//line sql.y:7531 { yyVAL.str = yyDollar[1].str } - case 1483: + case 1487: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7519 +//line sql.y:7535 { yyVAL.str = yyDollar[1].str + yyDollar[2].str } - case 1484: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7525 - { - yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str) - } - case 1485: - yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:7529 - { - yyVAL.str = yyDollar[1].str + " enclosed by " + encodeSQLString(yyDollar[4].str) - } - case 1486: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7533 - { - yyVAL.str = " escaped by " + encodeSQLString(yyDollar[3].str) - } - case 1487: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7538 - { - yyVAL.str = "" - } case 1488: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7542 ->>>>>>> e439161508 (fix: complete time period feature) + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:7541 { yyVAL.str = " terminated by " + encodeSQLString(yyDollar[3].str) } - case 1488: + case 1489: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:7535 +//line sql.y:7545 { yyVAL.str = yyDollar[1].str + " enclosed by " + encodeSQLString(yyDollar[4].str) } - case 1489: + case 1490: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7539 +//line sql.y:7549 { yyVAL.str = " escaped by " + encodeSQLString(yyDollar[3].str) } - case 1490: + case 1491: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7544 +//line sql.y:7554 { yyVAL.str = "" } - case 1491: + case 1492: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7548 +//line sql.y:7558 { yyVAL.str = " optionally" } -<<<<<<< HEAD - case 1492: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *Insert -//line sql.y:7561 -======= - case 1489: + case 1493: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *Insert -//line sql.y:7555 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7571 { yyLOCAL = &Insert{Rows: yyDollar[2].valuesUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1493: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL *Insert -//line sql.y:7565 -======= - case 1490: + case 1494: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL *Insert -//line sql.y:7559 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7575 { yyLOCAL = &Insert{Rows: yyDollar[1].selStmtUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1494: - yyDollar = yyS[yypt-5 : yypt+1] - var yyLOCAL *Insert -//line sql.y:7569 -======= - case 1491: + case 1495: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL *Insert -//line sql.y:7563 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7579 { yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[5].valuesUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1495: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL *Insert -//line sql.y:7573 - { - yyLOCAL = &Insert{Columns: []IdentifierCI{}, Rows: yyDollar[4].valuesUnion()} - } - yyVAL.union = yyLOCAL case 1496: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Insert -//line sql.y:7577 -======= - case 1492: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL *Insert -//line sql.y:7567 +//line sql.y:7583 { yyLOCAL = &Insert{Columns: []IdentifierCI{}, Rows: yyDollar[4].valuesUnion()} } yyVAL.union = yyLOCAL - case 1493: + case 1497: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL *Insert -//line sql.y:7571 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7587 { yyLOCAL = &Insert{Columns: yyDollar[2].columnsUnion(), Rows: yyDollar[4].selStmtUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1497: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Columns -//line sql.y:7583 -======= - case 1494: + case 1498: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Columns -//line sql.y:7577 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7593 { yyLOCAL = Columns{yyDollar[1].identifierCI} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1498: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL Columns -//line sql.y:7587 -======= - case 1495: + case 1499: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL Columns -//line sql.y:7581 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7597 { yyLOCAL = Columns{yyDollar[3].identifierCI} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1499: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7591 -======= - case 1496: + case 1500: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7585 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7601 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].identifierCI) } -<<<<<<< HEAD - case 1500: - yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:7595 -======= - case 1497: + case 1501: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:7589 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7605 { yySLICE := (*Columns)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[5].identifierCI) } -<<<<<<< HEAD - case 1501: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL UpdateExprs -//line sql.y:7600 -======= - case 1498: + case 1502: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7594 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7610 { yyLOCAL = nil } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1502: - yyDollar = yyS[yypt-5 : yypt+1] - var yyLOCAL UpdateExprs -//line sql.y:7604 -======= - case 1499: + case 1503: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7598 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7614 { yyLOCAL = yyDollar[5].updateExprsUnion() } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1503: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Values -//line sql.y:7610 -======= - case 1500: + case 1504: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Values -//line sql.y:7604 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7620 { yyLOCAL = Values{yyDollar[1].valTupleUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1504: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7614 -======= - case 1501: + case 1505: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7608 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7624 { yySLICE := (*Values)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].valTupleUnion()) } -<<<<<<< HEAD - case 1505: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL ValTuple -//line sql.y:7620 -======= - case 1502: + case 1506: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7614 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7630 { yyLOCAL = yyDollar[1].valTupleUnion() } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1506: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL ValTuple -//line sql.y:7624 -======= - case 1503: + case 1507: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7618 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7634 { yyLOCAL = ValTuple{} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1507: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL ValTuple -//line sql.y:7630 -======= - case 1504: + case 1508: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7624 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7640 { yyLOCAL = ValTuple(yyDollar[2].exprsUnion()) } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1508: - yyDollar = yyS[yypt-4 : yypt+1] - var yyLOCAL ValTuple -//line sql.y:7634 -======= - case 1505: + case 1509: yyDollar = yyS[yypt-4 : yypt+1] var yyLOCAL ValTuple -//line sql.y:7628 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7644 { yyLOCAL = ValTuple(yyDollar[3].exprsUnion()) } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1509: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Expr -//line sql.y:7639 -======= - case 1506: + case 1510: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7633 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7649 { if len(yyDollar[1].valTupleUnion()) == 1 { yyLOCAL = yyDollar[1].valTupleUnion()[0] @@ -32141,509 +20470,273 @@ yydefault: } } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1510: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL UpdateExprs -//line sql.y:7649 -======= - case 1507: + case 1511: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL UpdateExprs -//line sql.y:7643 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7659 { yyLOCAL = UpdateExprs{yyDollar[1].updateExprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1511: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7653 -======= - case 1508: + case 1512: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:7647 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7663 { yySLICE := (*UpdateExprs)(yyIaddr(yyVAL.union)) *yySLICE = append(*yySLICE, yyDollar[3].updateExprUnion()) } -<<<<<<< HEAD - case 1512: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL *UpdateExpr -//line sql.y:7659 -======= - case 1509: + case 1513: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL *UpdateExpr -//line sql.y:7653 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7669 { yyLOCAL = &UpdateExpr{Name: yyDollar[1].colNameUnion(), Expr: yyDollar[3].exprUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1514: + case 1515: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7666 - { - yyVAL.str = "charset" - } - case 1517: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Expr //line sql.y:7676 - { - yyLOCAL = NewStrLiteral(yyDollar[1].identifierCI.String()) - } - yyVAL.union = yyLOCAL - case 1518: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Expr -//line sql.y:7680 -======= - case 1511: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:7660 { yyVAL.str = "charset" } - case 1514: + case 1518: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7670 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7686 { yyLOCAL = NewStrLiteral(yyDollar[1].identifierCI.String()) } yyVAL.union = yyLOCAL -<<<<<<< HEAD case 1519: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7684 - { - yyLOCAL = &Default{} -======= - case 1515: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Expr -//line sql.y:7674 +//line sql.y:7690 { yyLOCAL = NewStrLiteral(yyDollar[1].str) } yyVAL.union = yyLOCAL - case 1516: + case 1520: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL Expr -//line sql.y:7678 +//line sql.y:7694 { yyLOCAL = &Default{} } yyVAL.union = yyLOCAL - case 1519: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL bool -//line sql.y:7687 - { - yyLOCAL = false - } - yyVAL.union = yyLOCAL - case 1520: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL bool -//line sql.y:7689 - { - yyLOCAL = true - } - yyVAL.union = yyLOCAL - case 1521: + case 1523: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7692 +//line sql.y:7703 { yyLOCAL = false ->>>>>>> e439161508 (fix: complete time period feature) - } - yyVAL.union = yyLOCAL - case 1522: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL bool -<<<<<<< HEAD -//line sql.y:7693 -======= -//line sql.y:7694 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyLOCAL = true } yyVAL.union = yyLOCAL - case 1523: -<<<<<<< HEAD + case 1524: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL bool -//line sql.y:7695 +//line sql.y:7705 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1524: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL bool -//line sql.y:7698 -======= + case 1525: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL bool -//line sql.y:7697 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7708 { yyLOCAL = false } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1525: + case 1526: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL bool -//line sql.y:7700 -======= - case 1524: - yyDollar = yyS[yypt-3 : yypt+1] - var yyLOCAL bool -//line sql.y:7699 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7710 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1525: + case 1527: yyDollar = yyS[yypt-0 : yypt+1] -<<<<<<< HEAD var yyLOCAL bool -//line sql.y:7703 -======= - var yyLOCAL Ignore -//line sql.y:7702 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7713 { yyLOCAL = false } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1527: + case 1528: yyDollar = yyS[yypt-3 : yypt+1] var yyLOCAL bool -//line sql.y:7705 -======= - case 1526: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Ignore -//line sql.y:7704 - { - yyLOCAL = true - } - yyVAL.union = yyLOCAL - case 1527: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7707 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7715 { yyLOCAL = true } yyVAL.union = yyLOCAL - case 1528: -<<<<<<< HEAD + case 1529: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Ignore -//line sql.y:7708 -======= - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7709 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7718 { yyLOCAL = false } yyVAL.union = yyLOCAL - case 1529: + case 1530: yyDollar = yyS[yypt-1 : yypt+1] -<<<<<<< HEAD var yyLOCAL Ignore -//line sql.y:7710 -======= -//line sql.y:7711 - { - yyVAL.empty = struct{}{} - } - case 1530: - yyDollar = yyS[yypt-5 : yypt+1] - var yyLOCAL Statement -//line sql.y:7715 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7720 { yyLOCAL = true } yyVAL.union = yyLOCAL case 1531: yyDollar = yyS[yypt-0 : yypt+1] -<<<<<<< HEAD -//line sql.y:7713 -======= - var yyLOCAL Exprs -//line sql.y:7720 +//line sql.y:7723 { - yyLOCAL = nil + yyVAL.empty = struct{}{} } - yyVAL.union = yyLOCAL case 1532: yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL Exprs -//line sql.y:7724 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7725 { yyVAL.empty = struct{}{} } -<<<<<<< HEAD - case 1531: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7715 -======= - yyVAL.union = yyLOCAL case 1533: - yyDollar = yyS[yypt-0 : yypt+1] - var yyLOCAL []*IndexOption -//line sql.y:7729 - { - yyLOCAL = nil - } - yyVAL.union = yyLOCAL - case 1534: - yyDollar = yyS[yypt-1 : yypt+1] - var yyLOCAL []*IndexOption -//line sql.y:7731 ->>>>>>> e439161508 (fix: complete time period feature) - { - yyVAL.empty = struct{}{} - } - case 1532: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7717 +//line sql.y:7727 { yyVAL.empty = struct{}{} } - case 1533: + case 1534: yyDollar = yyS[yypt-5 : yypt+1] var yyLOCAL Statement -//line sql.y:7721 +//line sql.y:7731 { yyLOCAL = &CallProc{Name: yyDollar[2].tableName, Params: yyDollar[4].exprsUnion()} } yyVAL.union = yyLOCAL -<<<<<<< HEAD - case 1534: + case 1535: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL Exprs -//line sql.y:7726 -======= - case 1535: - yyDollar = yyS[yypt-2 : yypt+1] - var yyLOCAL *IndexOption -//line sql.y:7735 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7736 { yyLOCAL = nil } yyVAL.union = yyLOCAL case 1536: yyDollar = yyS[yypt-1 : yypt+1] -<<<<<<< HEAD var yyLOCAL Exprs -//line sql.y:7730 -======= -//line sql.y:7741 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7740 { yyLOCAL = yyDollar[1].exprsUnion() } -<<<<<<< HEAD yyVAL.union = yyLOCAL - case 1536: + case 1537: yyDollar = yyS[yypt-0 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:7735 +//line sql.y:7745 { yyLOCAL = nil } yyVAL.union = yyLOCAL - case 1537: + case 1538: yyDollar = yyS[yypt-1 : yypt+1] var yyLOCAL []*IndexOption -//line sql.y:7737 +//line sql.y:7747 { yyLOCAL = []*IndexOption{yyDollar[1].indexOptionUnion()} } yyVAL.union = yyLOCAL - case 1538: + case 1539: yyDollar = yyS[yypt-2 : yypt+1] var yyLOCAL *IndexOption -//line sql.y:7741 -======= - case 1537: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7745 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:7751 { yyLOCAL = &IndexOption{Name: string(yyDollar[1].str), String: string(yyDollar[2].identifierCI.String())} } yyVAL.union = yyLOCAL - case 1539: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7752 - { -<<<<<<< HEAD - yyVAL.identifierCI = yyDollar[1].identifierCI -======= - yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) ->>>>>>> e439161508 (fix: complete time period feature) - } case 1540: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7758 +//line sql.y:7757 { -<<<<<<< HEAD - yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) + yyVAL.identifierCI = yyDollar[1].identifierCI } - case 1542: + case 1541: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7758 +//line sql.y:7761 { yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } case 1543: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7764 +//line sql.y:7768 { - yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) + yyVAL.identifierCI = NewIdentifierCI(string(yyDollar[1].str)) } case 1544: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7768 +//line sql.y:7774 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } case 1545: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7774 - { - yyVAL.identifierCS = NewIdentifierCS("") - } - case 1546: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:7778 - { - yyVAL.identifierCS = yyDollar[1].identifierCS - } - case 1548: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7785 - { - yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) - } - case 2115: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8379 -======= - yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) - } - case 1541: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7762 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 1542: + case 1546: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:7768 +//line sql.y:7784 { yyVAL.identifierCS = NewIdentifierCS("") } - case 1543: + case 1547: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7772 +//line sql.y:7788 { yyVAL.identifierCS = yyDollar[1].identifierCS } - case 1545: + case 1549: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:7779 +//line sql.y:7795 { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 2110: + case 2116: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8370 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:8389 { if incNesting(yylex) { yylex.Error("max nesting level reached") return 1 } } -<<<<<<< HEAD - case 2116: + case 2117: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8388 +//line sql.y:8398 { decNesting(yylex) } - case 2117: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8393 - { - skipToEnd(yylex) - } case 2118: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8398 +//line sql.y:8403 { skipToEnd(yylex) } case 2119: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8402 -======= - case 2111: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8379 - { - decNesting(yylex) - } - case 2112: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8384 - { - skipToEnd(yylex) - } - case 2113: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:8389 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:8408 { skipToEnd(yylex) } case 2120: yyDollar = yyS[yypt-1 : yypt+1] -<<<<<<< HEAD -//line sql.y:8406 -======= -//line sql.y:8393 +//line sql.y:8412 { skipToEnd(yylex) } - case 2115: + case 2121: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:8397 ->>>>>>> e439161508 (fix: complete time period feature) +//line sql.y:8416 { skipToEnd(yylex) } diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index 347aaff031..b574550066 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -3421,7 +3421,6 @@ alter_statement: - | ALTER comment_opt DML_JOB STRING LAUNCH { $$ = &AlterDMLJob{ From 4c001daedd61e9d6516ac6d84046d13e813cfecd Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Thu, 18 Jan 2024 23:55:22 +0800 Subject: [PATCH 52/54] fix: delete runJobController func Signed-off-by: newborn22 <953950914@qq.com> --- go/vt/vttablet/jobcontroller/controller.go | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index 266706cf35..f22fd87ac5 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -138,7 +138,7 @@ func (jc *JobController) Open() error { jc.initMutex.Lock() defer jc.initMutex.Unlock() jc.initJobController() - jc.runJobController() + go jc.jobManager() return nil } @@ -371,6 +371,11 @@ func (jc *JobController) FailJob(ctx context.Context, uuid, message, tableName s } func (jc *JobController) jobManager() { + // 1.启动时,先检查是否有处于"running"或"paused"的job,并恢复它们在内存的状态 + jc.recoverJobsMetadata(jc.ctx) + log.Info("JobController: metadata of all running and paused jobs are restored to memory\n") + + // 2.交由jobManager对job进行管理 timer := time.NewTicker(time.Duration(jobManagerRunningInterval) * time.Second) defer timer.Stop() @@ -759,16 +764,6 @@ func (jc *JobController) deleteDMLJobRunningMeta(table string) { delete(jc.workingTables, table) } -func (jc *JobController) runJobController() { - // 1.启动时,先检查是否有处于"running"或"paused"的job,并恢复它们在内存的状态 - jc.recoverJobsMetadata(jc.ctx) - - log.Info("JobController: metadata of all running and paused jobs are restored to memory\n") - // 2.交由jobManager对job进行管理 - go jc.jobManager() - -} - func (jc *JobController) recoverJobsMetadata(ctx context.Context) { qr, _ := jc.execQuery(ctx, "", sqlDMLJobGetAllJobs) if qr != nil { From 52a77ce8bbacd86586f7c4ec365ea9632ae87819 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Fri, 19 Jan 2024 10:09:49 +0800 Subject: [PATCH 53/54] fix: let jobcontroller CI run on PR Signed-off-by: newborn22 <953950914@qq.com> --- .github/workflows/cluster_endtoend_jobcontroller.yml | 2 +- .github/workflows/cluster_endtoend_jobcontroller_mysql57.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cluster_endtoend_jobcontroller.yml b/.github/workflows/cluster_endtoend_jobcontroller.yml index 4cc021752d..06196d8aba 100644 --- a/.github/workflows/cluster_endtoend_jobcontroller.yml +++ b/.github/workflows/cluster_endtoend_jobcontroller.yml @@ -2,7 +2,7 @@ name: Cluster (jobcontroller) on: -# pull_request: + pull_request: workflow_dispatch: push: branches: diff --git a/.github/workflows/cluster_endtoend_jobcontroller_mysql57.yml b/.github/workflows/cluster_endtoend_jobcontroller_mysql57.yml index 9ecad0c8c5..88e629549a 100644 --- a/.github/workflows/cluster_endtoend_jobcontroller_mysql57.yml +++ b/.github/workflows/cluster_endtoend_jobcontroller_mysql57.yml @@ -2,7 +2,7 @@ name: Cluster (jobcontroller) mysql57 on: -# pull_request: + pull_request: workflow_dispatch: push: branches: From 9ab95d23b29c06f1942293b5e81e9e512a722d95 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Fri, 19 Jan 2024 11:54:37 +0800 Subject: [PATCH 54/54] fix: refactor e2e test to isolate every testcase; modify time format written to mysql from RFC3339 to Datetime Signed-off-by: newborn22 <953950914@qq.com> --- .../jobcontroller/jobcontroller_basic_test.go | 160 +++++++++--------- go/vt/vttablet/jobcontroller/controller.go | 20 +-- 2 files changed, 86 insertions(+), 94 deletions(-) diff --git a/go/test/endtoend/jobcontroller/jobcontroller_basic_test.go b/go/test/endtoend/jobcontroller/jobcontroller_basic_test.go index e46c2a148c..d966e962e8 100644 --- a/go/test/endtoend/jobcontroller/jobcontroller_basic_test.go +++ b/go/test/endtoend/jobcontroller/jobcontroller_basic_test.go @@ -57,7 +57,7 @@ func singleIntPK(t *testing.T) { fmt.Printf("version: %s\n", v) // create table - tableName := "mytable" + tableName := "singleIntPKTable" _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf( `create table if not exists %s ( id int auto_increment primary key, @@ -67,6 +67,9 @@ func singleIntPK(t *testing.T) { require.Nil(t, err) require.Equal(t, true, CheckTableExist(t, &vtParams, tableName)) + // drop table + defer VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, tableName)) + // insert some data into table insertDataSQLTemplate := fmt.Sprintf(`insert into %s (name, age) values (%%a, %%a);`, tableName) totalRows := 10000 @@ -80,7 +83,7 @@ func singleIntPK(t *testing.T) { require.Equal(t, 1, int(query.RowsAffected)) } - query, err = VtgateExecQuery(t, &vtParams, "select count(*) as cnt from mytable;") + query, err = VtgateExecQuery(t, &vtParams, "select count(*) as cnt from singleIntPKTable;") require.Nil(t, err) row, _ := query.Named().Rows[0]["cnt"].ToInt64() fmt.Printf("row inserted is %d\n", row) @@ -107,10 +110,6 @@ func singleIntPK(t *testing.T) { rowsNotUpdated, _ = query.Named().Rows[0]["cnt"].ToInt64() fmt.Printf("row not updated is %d\n", rowsNotUpdated) require.Equal(t, int64(0), rowsNotUpdated) - - // drop table - _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, tableName)) - require.Nil(t, err) } func doubleIntPK(t *testing.T) { @@ -122,7 +121,7 @@ func doubleIntPK(t *testing.T) { } // create table - tableName := "mytable" + tableName := "singleIntPKTable" _, err := VtgateExecQuery(t, &vtParams, fmt.Sprintf( `create table if not exists %s ( id1 int , @@ -134,6 +133,9 @@ func doubleIntPK(t *testing.T) { require.Nil(t, err) require.Equal(t, true, CheckTableExist(t, &vtParams, tableName)) + // drop table + defer VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, tableName)) + // insert some data into table insertDataSQLTemplate := fmt.Sprintf(`insert into %s (id1, id2, name, age) values (%%a,%%a,%%a, %%a);`, tableName) totalRows := 10000 @@ -151,7 +153,7 @@ func doubleIntPK(t *testing.T) { } } - query, err := VtgateExecQuery(t, &vtParams, "select count(*) as cnt from mytable;") + query, err := VtgateExecQuery(t, &vtParams, "select count(*) as cnt from singleIntPKTable;") require.Nil(t, err) row, _ := query.Named().Rows[0]["cnt"].ToInt64() fmt.Printf("row inserted is %d\n", row) @@ -172,9 +174,6 @@ func doubleIntPK(t *testing.T) { fmt.Printf("row not updated is %d\n", rowsNotUpdated) require.Equal(t, int64(0), rowsNotUpdated) - // drop table - _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, tableName)) - require.Nil(t, err) } func datetimeAndIntPK(t *testing.T) { @@ -186,7 +185,7 @@ func datetimeAndIntPK(t *testing.T) { } // create table - tableName := "mytable" + tableName := "datetimeAndIntPKTable" _, err := VtgateExecQuery(t, &vtParams, fmt.Sprintf( `create table if not exists %s ( id1 datetime , @@ -198,6 +197,9 @@ func datetimeAndIntPK(t *testing.T) { require.Nil(t, err) require.Equal(t, true, CheckTableExist(t, &vtParams, tableName)) + // drop table + defer VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, tableName)) + // insert some data into table insertDataSQLTemplate := fmt.Sprintf(`insert into %s (id1, id2, name, age) values (%%a,%%a,%%a, %%a);`, tableName) totalRows := 10000 @@ -217,7 +219,7 @@ func datetimeAndIntPK(t *testing.T) { } } - query, err := VtgateExecQuery(t, &vtParams, "select count(*) as cnt from mytable;") + query, err := VtgateExecQuery(t, &vtParams, "select count(*) as cnt from datetimeAndIntPKTable;") require.Nil(t, err) row, _ := query.Named().Rows[0]["cnt"].ToInt64() fmt.Printf("row inserted is %d\n", row) @@ -243,10 +245,6 @@ func datetimeAndIntPK(t *testing.T) { rowsNotUpdated, _ = query.Named().Rows[0]["cnt"].ToInt64() fmt.Printf("row not updated is %d\n", rowsNotUpdated) require.Equal(t, int64(0), rowsNotUpdated) - - // drop table - _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, tableName)) - require.Nil(t, err) } func complexWhereCondition(t *testing.T) { @@ -264,7 +262,7 @@ func complexWhereCondition(t *testing.T) { fmt.Printf("version: %s\n", v) // create table - tableName := "mytable" + tableName := "complexWhereConditionTable" _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf( `create table if not exists %s ( id int auto_increment primary key, @@ -279,6 +277,9 @@ func complexWhereCondition(t *testing.T) { require.Nil(t, err) require.Equal(t, true, CheckTableExist(t, &vtParams, tableName)) + // drop table + defer VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, tableName)) + // insert some data into table insertDataSQLTemplate := fmt.Sprintf(`insert into %s (name,c1,c2,c3,c4,c6) values (%%a, %%a, %%a, %%a, %%a, %%a);`, tableName) totalRows := 10000 @@ -296,7 +297,7 @@ func complexWhereCondition(t *testing.T) { require.Equal(t, 1, int(query.RowsAffected)) } - query, err = VtgateExecQuery(t, &vtParams, "select count(*) as cnt from mytable;") + query, err = VtgateExecQuery(t, &vtParams, "select count(*) as cnt from complexWhereConditionTable;") require.Nil(t, err) row, _ := query.Named().Rows[0]["cnt"].ToInt64() fmt.Printf("row inserted is %d\n", row) @@ -327,10 +328,6 @@ func complexWhereCondition(t *testing.T) { rowsNotUpdated, _ = query.Named().Rows[0]["cnt"].ToInt64() fmt.Printf("row not updated is %d\n", rowsNotUpdated) require.Equal(t, int64(0), rowsNotUpdated) - - // drop table - _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, tableName)) - require.Nil(t, err) } func subqueryInWhereCondition(t *testing.T) { @@ -348,7 +345,7 @@ func subqueryInWhereCondition(t *testing.T) { fmt.Printf("version: %s\n", v) // create table - tableName := "mytable" + tableName := "subqueryInWhereConditionTable" _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf( `create table if not exists %s ( id int auto_increment primary key, @@ -358,14 +355,19 @@ func subqueryInWhereCondition(t *testing.T) { require.Nil(t, err) require.Equal(t, true, CheckTableExist(t, &vtParams, tableName)) - // create table t2 + // create table subqueryInWhereConditionTable2 _, err = VtgateExecQuery(t, &vtParams, - `create table if not exists t2 ( + `create table if not exists subqueryInWhereConditionTable2 ( id int auto_increment primary key, c2 int )`) require.Nil(t, err) - require.Equal(t, true, CheckTableExist(t, &vtParams, "t2")) + require.Equal(t, true, CheckTableExist(t, &vtParams, "subqueryInWhereConditionTable2")) + + // drop table + defer VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, tableName)) + defer VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, "subqueryInWhereConditionTable2")) + require.Nil(t, err) // insert some data into table insertDataSQLTemplate := fmt.Sprintf(`insert into %s (name,c2) values (%%a,%%a);`, tableName) @@ -380,25 +382,25 @@ func subqueryInWhereCondition(t *testing.T) { require.Equal(t, 1, int(query.RowsAffected)) } - query, err = VtgateExecQuery(t, &vtParams, "select count(*) as cnt from mytable;") + query, err = VtgateExecQuery(t, &vtParams, "select count(*) as cnt from subqueryInWhereConditionTable;") require.Nil(t, err) row, _ := query.Named().Rows[0]["cnt"].ToInt64() fmt.Printf("row inserted is %d\n", row) - // insert data into t2 - query, err = VtgateExecQuery(t, &vtParams, "insert into t2 (c2) values (1);") + // insert data into subqueryInWhereConditionTable2 + query, err = VtgateExecQuery(t, &vtParams, "insert into subqueryInWhereConditionTable2 (c2) values (1);") require.NoError(t, err) require.Equal(t, 1, int(query.RowsAffected)) // all row should not be updated yet - query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(`select count(*) as cnt from %s where name!='123 and c2 in (select c2 from t2)'`, tableName)) + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(`select count(*) as cnt from %s where name!='123 and c2 in (select c2 from subqueryInWhereConditionTable2)'`, tableName)) require.Nil(t, err) rowsNotUpdated, _ := query.Named().Rows[0]["cnt"].ToInt64() fmt.Printf("row not updated is %d\n", rowsNotUpdated) require.Equal(t, int64(totalRows), rowsNotUpdated) // submit a DML job - query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("update /*vt+ dml_split=true */ %s set name='123' where c2 in (select c2 from t2) ;", tableName)) + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("update /*vt+ dml_split=true */ %s set name='123' where c2 in (select c2 from subqueryInWhereConditionTable2) ;", tableName)) require.Nil(t, err) jobUUID := query.Named().Rows[0]["job_uuid"].ToString() fmt.Printf("job %s submitted", jobUUID) @@ -408,17 +410,11 @@ func subqueryInWhereCondition(t *testing.T) { // verify that all the table rows satisfy the where condition have been updated // all rows should be updated - query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(`select count(*) as cnt from %s where name!='123' and c2 in (select c2 from t2)`, tableName)) + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(`select count(*) as cnt from %s where name!='123' and c2 in (select c2 from subqueryInWhereConditionTable2)`, tableName)) require.Nil(t, err) rowsNotUpdated, _ = query.Named().Rows[0]["cnt"].ToInt64() fmt.Printf("row not updated is %d\n", rowsNotUpdated) require.Equal(t, int64(0), rowsNotUpdated) - - // drop table - _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, tableName)) - require.Nil(t, err) - _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, "t2")) - require.Nil(t, err) } func subqueryInSet(t *testing.T) { @@ -436,7 +432,7 @@ func subqueryInSet(t *testing.T) { fmt.Printf("version: %s\n", v) // create table - tableName := "mytable" + tableName := "subqueryInSetTable" _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf( `create table if not exists %s ( id int auto_increment primary key, @@ -446,15 +442,19 @@ func subqueryInSet(t *testing.T) { require.Nil(t, err) require.Equal(t, true, CheckTableExist(t, &vtParams, tableName)) - // create t2 + // create subqueryInSetTable2 _, err = VtgateExecQuery(t, &vtParams, - `create table if not exists t2 ( + `create table if not exists subqueryInSetTable2 ( id int auto_increment primary key, c1 varchar(256) not null )`) require.Nil(t, err) require.Equal(t, true, CheckTableExist(t, &vtParams, tableName)) + // drop table + defer VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, tableName)) + defer VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, "subqueryInSetTable2")) + // insert some data into table insertDataSQLTemplate := fmt.Sprintf(`insert into %s (name, age) values (%%a, %%a);`, tableName) totalRows := 10000 @@ -468,13 +468,13 @@ func subqueryInSet(t *testing.T) { require.Equal(t, 1, int(query.RowsAffected)) } - query, err = VtgateExecQuery(t, &vtParams, "select count(*) as cnt from mytable;") + query, err = VtgateExecQuery(t, &vtParams, "select count(*) as cnt from subqueryInSetTable;") require.Nil(t, err) row, _ := query.Named().Rows[0]["cnt"].ToInt64() fmt.Printf("row inserted is %d\n", row) - // insert data into t2 - query, err = VtgateExecQuery(t, &vtParams, "insert into t2 (c1) values ('123');") + // insert data into subqueryInSetTable2 + query, err = VtgateExecQuery(t, &vtParams, "insert into subqueryInSetTable2 (c1) values ('123');") require.NoError(t, err) require.Equal(t, 1, int(query.RowsAffected)) @@ -486,7 +486,7 @@ func subqueryInSet(t *testing.T) { require.Equal(t, int64(totalRows-50-1), rowsNotUpdated) // submit a DML job - query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("update /*vt+ dml_split=true */ %s set name = (select c1 from t2 limit 1) where age > 50;", tableName)) + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("update /*vt+ dml_split=true */ %s set name = (select c1 from subqueryInSetTable2 limit 1) where age > 50;", tableName)) require.Nil(t, err) jobUUID := query.Named().Rows[0]["job_uuid"].ToString() fmt.Printf("job %s submitted", jobUUID) @@ -501,11 +501,6 @@ func subqueryInSet(t *testing.T) { fmt.Printf("row not updated is %d\n", rowsNotUpdated) require.Equal(t, int64(0), rowsNotUpdated) - // drop table - _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, tableName)) - require.Nil(t, err) - _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, "t2")) - require.Nil(t, err) } func subqueryInWhereExist(t *testing.T) { @@ -523,7 +518,7 @@ func subqueryInWhereExist(t *testing.T) { fmt.Printf("version: %s\n", v) // create table - tableName := "mytable" + tableName := "subqueryInWhereExistTable" _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf( `create table if not exists %s ( id int auto_increment primary key, @@ -532,15 +527,19 @@ func subqueryInWhereExist(t *testing.T) { require.Nil(t, err) require.Equal(t, true, CheckTableExist(t, &vtParams, tableName)) - // create t2 + // create subqueryInWhereExistTable2 _, err = VtgateExecQuery(t, &vtParams, - `create table if not exists t2 ( + `create table if not exists subqueryInWhereExistTable2 ( id int auto_increment primary key, c2 varchar(256) not null )`) require.Nil(t, err) require.Equal(t, true, CheckTableExist(t, &vtParams, tableName)) + // drop table + defer VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, tableName)) + defer VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, "subqueryInWhereExistTable2")) + // insert some data into table insertDataSQLTemplate := fmt.Sprintf(`insert into %s (name) values (%%a);`, tableName) totalRows := 10000 @@ -553,13 +552,13 @@ func subqueryInWhereExist(t *testing.T) { require.Equal(t, 1, int(query.RowsAffected)) } - query, err = VtgateExecQuery(t, &vtParams, "select count(*) as cnt from mytable;") + query, err = VtgateExecQuery(t, &vtParams, "select count(*) as cnt from subqueryInWhereExistTable;") require.Nil(t, err) row, _ := query.Named().Rows[0]["cnt"].ToInt64() fmt.Printf("row inserted is %d\n", row) - // insert data into t2 - insertDataSQLTemplate = fmt.Sprintf(`insert into %s (c2) values (%%a);`, "t2") + // insert data into subqueryInWhereExistTable2 + insertDataSQLTemplate = fmt.Sprintf(`insert into %s (c2) values (%%a);`, "subqueryInWhereExistTable2") for i := 0; i < 500; i++ { insertDataSQL, err := sqlparser.ParseAndBind(insertDataSQLTemplate, sqltypes.StringBindVariable(fmt.Sprintf("name_%d", i))) @@ -577,7 +576,7 @@ func subqueryInWhereExist(t *testing.T) { require.Equal(t, int64(totalRows), rowsNotUpdated) // submit a DML job - query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("update /*vt+ dml_split=true */ %s set name = '123' where exists (select c2 from t2 where t2.c2 = mytable.name);", tableName)) + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("update /*vt+ dml_split=true */ %s set name = '123' where exists (select c2 from subqueryInWhereExistTable2 where subqueryInWhereExistTable2.c2 = subqueryInWhereExistTable.name);", tableName)) require.Nil(t, err) jobUUID := query.Named().Rows[0]["job_uuid"].ToString() fmt.Printf("job %s submitted", jobUUID) @@ -586,7 +585,7 @@ func subqueryInWhereExist(t *testing.T) { require.Equal(t, jobcontroller.CompletedStatus, WaitForJobStatus(t, &vtParams, jobUUID, 10*time.Minute, jobcontroller.CompletedStatus)) // verify that all the table rows satisfy the where condition have been updated - query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(`select count(*) as cnt from %s where name!='123' and exists (select c2 from t2 where t2.c2 = mytable.name);`, tableName)) + query, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf(`select count(*) as cnt from %s where name!='123' and exists (select c2 from subqueryInWhereExistTable2 where subqueryInWhereExistTable2.c2 = subqueryInWhereExistTable.name);`, tableName)) require.Nil(t, err) rowsNotUpdated, _ = query.Named().Rows[0]["cnt"].ToInt64() fmt.Printf("rows not updated is %d\n", rowsNotUpdated) @@ -597,12 +596,6 @@ func subqueryInWhereExist(t *testing.T) { rowsNotUpdated, _ = query.Named().Rows[0]["cnt"].ToInt64() fmt.Printf("rows which name not equal '123' %d\n", rowsNotUpdated) require.Equal(t, int64(totalRows-500), rowsNotUpdated) - - // drop table - _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, tableName)) - require.Nil(t, err) - _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.%s", UserTableSchema, "t2")) - require.Nil(t, err) } func foreignSubqueryInWhere(t *testing.T) { @@ -621,27 +614,31 @@ func foreignSubqueryInWhere(t *testing.T) { // create table _, err = VtgateExecQuery(t, &vtParams, - `create table if not exists mytable ( + `create table if not exists foreignSubqueryInWhereTable ( id int auto_increment primary key, name varchar(256) not null )`) require.Nil(t, err) - require.Equal(t, true, CheckTableExist(t, &vtParams, "mytable")) + require.Equal(t, true, CheckTableExist(t, &vtParams, "foreignSubqueryInWhereTable")) - // create t2 + // create foreignSubqueryInWhereTable2 _, err = VtgateExecQuery(t, &vtParams, - `create table if not exists t2 ( + `create table if not exists foreignSubqueryInWhereTable2 ( id int auto_increment primary key, mytable_id int not null, - foreign key (mytable_id) references mytable(id) + foreign key (mytable_id) references foreignSubqueryInWhereTable(id) )`) require.Nil(t, err) - require.Equal(t, true, CheckTableExist(t, &vtParams, "t2")) + require.Equal(t, true, CheckTableExist(t, &vtParams, "foreignSubqueryInWhereTable2")) + + // drop table, ensure to delete foreignSubqueryInWhereTable2 table first, or it will fail to delete mytable because of foreign key constraint + defer VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.foreignSubqueryInWhereTable", UserTableSchema)) + defer VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.foreignSubqueryInWhereTable2", UserTableSchema)) // insert some data into table totalRows := 10000 for i := 0; i < totalRows; i++ { - insertDataSQL, err := sqlparser.ParseAndBind("insert into mytable (name) values (%a)", + insertDataSQL, err := sqlparser.ParseAndBind("insert into foreignSubqueryInWhereTable (name) values (%a)", sqltypes.StringBindVariable(fmt.Sprintf("name_%d", i))) require.NoError(t, err) query, err = VtgateExecQuery(t, &vtParams, insertDataSQL) @@ -649,26 +646,26 @@ func foreignSubqueryInWhere(t *testing.T) { require.Equal(t, 1, int(query.RowsAffected)) } - query, err = VtgateExecQuery(t, &vtParams, "select count(*) as cnt from mytable;") + query, err = VtgateExecQuery(t, &vtParams, "select count(*) as cnt from foreignSubqueryInWhereTable;") require.Nil(t, err) row, _ := query.Named().Rows[0]["cnt"].ToInt64() fmt.Printf("row inserted is %d\n", row) require.Equal(t, int64(totalRows), row) - // insert data into t2 - query, err = VtgateExecQuery(t, &vtParams, "insert into t2(mytable_id) select id from mytable where mytable.id>1000;") + // insert data into foreignSubqueryInWhereTable2 + query, err = VtgateExecQuery(t, &vtParams, "insert into foreignSubqueryInWhereTable2(mytable_id) select id from foreignSubqueryInWhereTable where foreignSubqueryInWhereTable.id>1000;") require.NoError(t, err) require.Equal(t, 9000, int(query.RowsAffected)) // rows has not been updated - query, err = VtgateExecQuery(t, &vtParams, `select count(*) as cnt from mytable where name!='123';`) + query, err = VtgateExecQuery(t, &vtParams, `select count(*) as cnt from foreignSubqueryInWhereTable where name!='123';`) require.Nil(t, err) rowsNotUpdated, _ := query.Named().Rows[0]["cnt"].ToInt64() fmt.Printf("row not updated is %d\n", rowsNotUpdated) require.Equal(t, int64(totalRows), rowsNotUpdated) // submit a DML job - query, err = VtgateExecQuery(t, &vtParams, "update /*vt+ dml_split=true */ mytable set name = '123' where id = (select mytable_id from t2 where t2.mytable_id = mytable.id);") + query, err = VtgateExecQuery(t, &vtParams, "update /*vt+ dml_split=true */ foreignSubqueryInWhereTable set name = '123' where id = (select mytable_id from foreignSubqueryInWhereTable2 where foreignSubqueryInWhereTable2.mytable_id = foreignSubqueryInWhereTable.id);") require.Nil(t, err) jobUUID := query.Named().Rows[0]["job_uuid"].ToString() fmt.Printf("job %s submitted", jobUUID) @@ -677,21 +674,16 @@ func foreignSubqueryInWhere(t *testing.T) { require.Equal(t, jobcontroller.CompletedStatus, WaitForJobStatus(t, &vtParams, jobUUID, 10*time.Minute, jobcontroller.CompletedStatus)) // verify that all the table rows satisfy the where condition have been updated - query, err = VtgateExecQuery(t, &vtParams, `select count(*) as cnt from mytable where name!='123' and id > (select min(mytable_id) from t2 where t2.mytable_id = mytable.id);`) + query, err = VtgateExecQuery(t, &vtParams, `select count(*) as cnt from foreignSubqueryInWhereTable where name!='123' and id > (select min(mytable_id) from foreignSubqueryInWhereTable2 where foreignSubqueryInWhereTable2.mytable_id = foreignSubqueryInWhereTable.id);`) require.Nil(t, err) rowsNotUpdated, _ = query.Named().Rows[0]["cnt"].ToInt64() fmt.Printf("rows not updated is %d\n", rowsNotUpdated) require.Equal(t, int64(0), rowsNotUpdated) - query, err = VtgateExecQuery(t, &vtParams, `select count(*) as cnt from mytable where name!='123'`) + query, err = VtgateExecQuery(t, &vtParams, `select count(*) as cnt from foreignSubqueryInWhereTable where name!='123'`) require.Nil(t, err) rowsNotUpdated, _ = query.Named().Rows[0]["cnt"].ToInt64() fmt.Printf("rows which name not equal '123' %d\n", rowsNotUpdated) require.Equal(t, int64(1000), rowsNotUpdated) - // drop table - _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.t2", UserTableSchema)) - require.Nil(t, err) - _, err = VtgateExecQuery(t, &vtParams, fmt.Sprintf("drop table if exists %s.mytable", UserTableSchema)) - require.Nil(t, err) } diff --git a/go/vt/vttablet/jobcontroller/controller.go b/go/vt/vttablet/jobcontroller/controller.go index f22fd87ac5..5dfe07d954 100644 --- a/go/vt/vttablet/jobcontroller/controller.go +++ b/go/vt/vttablet/jobcontroller/controller.go @@ -227,7 +227,7 @@ func (jc *JobController) SubmitJob(sql, tableSchema, runningTimePeriodStart, run if postponeLaunch { jobStatus = PostponeLaunchStatus } - statusSetTime := time.Now().Format(time.RFC3339) + statusSetTime := time.Now().Format(time.DateTime) if failPolicy == "" { failPolicy = defaultFailPolicy @@ -263,7 +263,7 @@ func (jc *JobController) PauseJob(uuid string) (*sqltypes.Result, error) { // 将job在表中的状态改为paused,runner在运行时如果检测到状态不是running,就会退出。 // pause虽然终止了runner协程,但是 - statusSetTime := time.Now().Format(time.RFC3339) + statusSetTime := time.Now().Format(time.DateTime) qr, err := jc.updateJobStatus(jc.ctx, uuid, PausedStatus, statusSetTime) if err != nil { return emptyResult, err @@ -316,7 +316,7 @@ func (jc *JobController) LaunchJob(uuid string) (*sqltypes.Result, error) { emptyResult.Info = " The job status is not postpone-launch and don't need launch" return emptyResult, nil } - statusSetTime := time.Now().Format(time.RFC3339) + statusSetTime := time.Now().Format(time.DateTime) return jc.updateJobStatus(jc.ctx, uuid, QueuedStatus, statusSetTime) } @@ -330,7 +330,7 @@ func (jc *JobController) CancelJob(uuid string) (*sqltypes.Result, error) { emptyResult.Info = fmt.Sprintf(" The job status is %s and can't canceld", status) return emptyResult, nil } - statusSetTime := time.Now().Format(time.RFC3339) + statusSetTime := time.Now().Format(time.DateTime) qr, err := jc.updateJobStatus(jc.ctx, uuid, CanceledStatus, statusSetTime) if err != nil { return emptyResult, nil @@ -350,7 +350,7 @@ func (jc *JobController) CompleteJob(ctx context.Context, uuid, table string) (* jc.workingTablesMutex.Lock() defer jc.workingTablesMutex.Unlock() - statusSetTime := time.Now().Format(time.RFC3339) + statusSetTime := time.Now().Format(time.DateTime) qr, err := jc.updateJobStatus(ctx, uuid, CompletedStatus, statusSetTime) if err != nil { return &sqltypes.Result{}, err @@ -363,7 +363,7 @@ func (jc *JobController) CompleteJob(ctx context.Context, uuid, table string) (* func (jc *JobController) FailJob(ctx context.Context, uuid, message, tableName string) { _ = jc.updateJobMessage(ctx, uuid, message) - statusSetTime := time.Now().Format(time.RFC3339) + statusSetTime := time.Now().Format(time.DateTime) _, _ = jc.updateJobStatus(ctx, uuid, FailedStatus, statusSetTime) jc.deleteDMLJobRunningMeta(tableName) @@ -444,7 +444,7 @@ func (jc *JobController) checkDmlJobRunnable(jobUUID, status, table string, peri // 更新状态 submitQuery, err := sqlparser.ParseAndBind(sqlDMLJobUpdateStatus, sqltypes.StringBindVariable(NotInTimePeriodStatus), - sqltypes.StringBindVariable(timeNow.Format(time.RFC3339)), + sqltypes.StringBindVariable(timeNow.Format(time.DateTime)), sqltypes.StringBindVariable(jobUUID)) if err != nil { return false @@ -667,7 +667,7 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, timer := time.NewTicker(time.Duration(batchInterval) * time.Millisecond) defer timer.Stop() - _, err := jc.updateJobStatus(jc.ctx, uuid, RunningStatus, time.Now().Format(time.RFC3339)) + _, err := jc.updateJobStatus(jc.ctx, uuid, RunningStatus, time.Now().Format(time.DateTime)) if err != nil { jc.FailJob(jc.ctx, uuid, err.Error(), table) } @@ -695,7 +695,7 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, if timePeriodStart != nil && timePeriodEnd != nil { currentTime := time.Now() if !(currentTime.After(*timePeriodStart) && currentTime.Before(*timePeriodEnd)) { - _, err = jc.updateJobStatus(jc.ctx, uuid, NotInTimePeriodStatus, currentTime.Format(time.RFC3339)) + _, err = jc.updateJobStatus(jc.ctx, uuid, NotInTimePeriodStatus, currentTime.Format(time.DateTime)) if err != nil { jc.FailJob(jc.ctx, uuid, err.Error(), table) } @@ -744,7 +744,7 @@ func (jc *JobController) dmlJobBatchRunner(uuid, table, tableSchema, batchTable, case failPolicyPause: msg := fmt.Sprintf("batch %s failed, pause job: %s", batchIDToExec, err.Error()) _ = jc.updateJobMessage(jc.ctx, uuid, msg) - _, _ = jc.updateJobStatus(jc.ctx, uuid, PausedStatus, time.Now().Format(time.RFC3339)) + _, _ = jc.updateJobStatus(jc.ctx, uuid, PausedStatus, time.Now().Format(time.DateTime)) return // todo feat 增加retryThenPause策略 case failPolicyRetryThenPause: