diff --git a/flyteidl/gen/pb-cpp/flyteidl/admin/task.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/admin/task.pb.cc index d85136a2989..2f3903a1c1b 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/admin/task.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/admin/task.pb.cc @@ -21,7 +21,7 @@ extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fadmin_2ftask_2eproto ::google::protob extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fadmin_2ftask_2eproto ::google::protobuf::internal::SCCInfo<2> scc_info_Task_flyteidl_2fadmin_2ftask_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2fcompiler_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_CompiledTask_flyteidl_2fcore_2fcompiler_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2fidentifier_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Identifier_flyteidl_2fcore_2fidentifier_2eproto; -extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<8> scc_info_TaskTemplate_flyteidl_2fcore_2ftasks_2eproto; +extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<9> scc_info_TaskTemplate_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_google_2fprotobuf_2ftimestamp_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Timestamp_google_2fprotobuf_2ftimestamp_2eproto; namespace flyteidl { namespace admin { diff --git a/flyteidl/gen/pb-cpp/flyteidl/core/compiler.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/core/compiler.pb.cc index 06b60a4771d..511c5105bdd 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/core/compiler.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/core/compiler.pb.cc @@ -22,7 +22,7 @@ extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2fcompiler_2eproto ::google::pro extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2fcompiler_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_ConnectionSet_UpstreamEntry_DoNotUse_flyteidl_2fcore_2fcompiler_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2fcompiler_2eproto ::google::protobuf::internal::SCCInfo<2> scc_info_CompiledWorkflow_flyteidl_2fcore_2fcompiler_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2fcompiler_2eproto ::google::protobuf::internal::SCCInfo<2> scc_info_ConnectionSet_flyteidl_2fcore_2fcompiler_2eproto; -extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<8> scc_info_TaskTemplate_flyteidl_2fcore_2ftasks_2eproto; +extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<9> scc_info_TaskTemplate_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2fworkflow_2eproto ::google::protobuf::internal::SCCInfo<6> scc_info_WorkflowTemplate_flyteidl_2fcore_2fworkflow_2eproto; namespace flyteidl { namespace core { diff --git a/flyteidl/gen/pb-cpp/flyteidl/core/dynamic_job.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/core/dynamic_job.pb.cc index 1c232fac16d..6c2b7e06c58 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/core/dynamic_job.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/core/dynamic_job.pb.cc @@ -17,7 +17,7 @@ #include extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2fliterals_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_Binding_flyteidl_2fcore_2fliterals_2eproto; -extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<8> scc_info_TaskTemplate_flyteidl_2fcore_2ftasks_2eproto; +extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<9> scc_info_TaskTemplate_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2fworkflow_2eproto ::google::protobuf::internal::SCCInfo<6> scc_info_WorkflowTemplate_flyteidl_2fcore_2fworkflow_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2fworkflow_2eproto ::google::protobuf::internal::SCCInfo<7> scc_info_BranchNode_flyteidl_2fcore_2fworkflow_2eproto; namespace flyteidl { diff --git a/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc index 6d5fc216a6a..403966c04b5 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.cc @@ -27,6 +27,7 @@ extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protob extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_K8sObjectMetadata_LabelsEntry_DoNotUse_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Resources_ResourceEntry_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_RuntimeMetadata_flyteidl_2fcore_2ftasks_2eproto; +extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_Sql_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TaskTemplate_ConfigEntry_DoNotUse_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_DataLoadingConfig_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_Resources_flyteidl_2fcore_2ftasks_2eproto; @@ -64,6 +65,7 @@ class TaskTemplateDefaultTypeInternal { ::google::protobuf::internal::ExplicitlyConstructed _instance; const ::flyteidl::core::Container* container_; const ::flyteidl::core::K8sPod* k8s_pod_; + const ::flyteidl::core::Sql* sql_; } _TaskTemplate_default_instance_; class ContainerPortDefaultTypeInternal { public: @@ -97,6 +99,10 @@ class K8sObjectMetadataDefaultTypeInternal { public: ::google::protobuf::internal::ExplicitlyConstructed _instance; } _K8sObjectMetadata_default_instance_; +class SqlDefaultTypeInternal { + public: + ::google::protobuf::internal::ExplicitlyConstructed _instance; +} _Sql_default_instance_; } // namespace core } // namespace flyteidl static void InitDefaultsResources_ResourceEntry_flyteidl_2fcore_2ftasks_2eproto() { @@ -183,14 +189,15 @@ static void InitDefaultsTaskTemplate_flyteidl_2fcore_2ftasks_2eproto() { ::flyteidl::core::TaskTemplate::InitAsDefaultInstance(); } -::google::protobuf::internal::SCCInfo<8> scc_info_TaskTemplate_flyteidl_2fcore_2ftasks_2eproto = - {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 8, InitDefaultsTaskTemplate_flyteidl_2fcore_2ftasks_2eproto}, { +::google::protobuf::internal::SCCInfo<9> scc_info_TaskTemplate_flyteidl_2fcore_2ftasks_2eproto = + {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 9, InitDefaultsTaskTemplate_flyteidl_2fcore_2ftasks_2eproto}, { &scc_info_Identifier_flyteidl_2fcore_2fidentifier_2eproto.base, &scc_info_TaskMetadata_flyteidl_2fcore_2ftasks_2eproto.base, &scc_info_TypedInterface_flyteidl_2fcore_2finterface_2eproto.base, &scc_info_ListValue_google_2fprotobuf_2fstruct_2eproto.base, &scc_info_Container_flyteidl_2fcore_2ftasks_2eproto.base, &scc_info_K8sPod_flyteidl_2fcore_2ftasks_2eproto.base, + &scc_info_Sql_flyteidl_2fcore_2ftasks_2eproto.base, &scc_info_SecurityContext_flyteidl_2fcore_2fsecurity_2eproto.base, &scc_info_TaskTemplate_ConfigEntry_DoNotUse_flyteidl_2fcore_2ftasks_2eproto.base,}}; @@ -313,6 +320,20 @@ ::google::protobuf::internal::SCCInfo<2> scc_info_K8sObjectMetadata_flyteidl_2fc &scc_info_K8sObjectMetadata_LabelsEntry_DoNotUse_flyteidl_2fcore_2ftasks_2eproto.base, &scc_info_K8sObjectMetadata_AnnotationsEntry_DoNotUse_flyteidl_2fcore_2ftasks_2eproto.base,}}; +static void InitDefaultsSql_flyteidl_2fcore_2ftasks_2eproto() { + GOOGLE_PROTOBUF_VERIFY_VERSION; + + { + void* ptr = &::flyteidl::core::_Sql_default_instance_; + new (ptr) ::flyteidl::core::Sql(); + ::google::protobuf::internal::OnShutdownDestroyMessage(ptr); + } + ::flyteidl::core::Sql::InitAsDefaultInstance(); +} + +::google::protobuf::internal::SCCInfo<0> scc_info_Sql_flyteidl_2fcore_2ftasks_2eproto = + {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsSql_flyteidl_2fcore_2ftasks_2eproto}, {}}; + void InitDefaults_flyteidl_2fcore_2ftasks_2eproto() { ::google::protobuf::internal::InitSCC(&scc_info_Resources_ResourceEntry_flyteidl_2fcore_2ftasks_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_Resources_flyteidl_2fcore_2ftasks_2eproto.base); @@ -328,10 +349,11 @@ void InitDefaults_flyteidl_2fcore_2ftasks_2eproto() { ::google::protobuf::internal::InitSCC(&scc_info_K8sObjectMetadata_LabelsEntry_DoNotUse_flyteidl_2fcore_2ftasks_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_K8sObjectMetadata_AnnotationsEntry_DoNotUse_flyteidl_2fcore_2ftasks_2eproto.base); ::google::protobuf::internal::InitSCC(&scc_info_K8sObjectMetadata_flyteidl_2fcore_2ftasks_2eproto.base); + ::google::protobuf::internal::InitSCC(&scc_info_Sql_flyteidl_2fcore_2ftasks_2eproto.base); } -::google::protobuf::Metadata file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[14]; -const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors_flyteidl_2fcore_2ftasks_2eproto[5]; +::google::protobuf::Metadata file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[15]; +const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors_flyteidl_2fcore_2ftasks_2eproto[6]; constexpr ::google::protobuf::ServiceDescriptor const** file_level_service_descriptors_flyteidl_2fcore_2ftasks_2eproto = nullptr; const ::google::protobuf::uint32 TableStruct_flyteidl_2fcore_2ftasks_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { @@ -391,6 +413,7 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fcore_2ftasks_2eproto::of PROTOBUF_FIELD_OFFSET(::flyteidl::core::TaskTemplate, custom_), offsetof(::flyteidl::core::TaskTemplateDefaultTypeInternal, container_), offsetof(::flyteidl::core::TaskTemplateDefaultTypeInternal, k8s_pod_), + offsetof(::flyteidl::core::TaskTemplateDefaultTypeInternal, sql_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::TaskTemplate, task_type_version_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::TaskTemplate, security_context_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::TaskTemplate, config_), @@ -463,6 +486,13 @@ const ::google::protobuf::uint32 TableStruct_flyteidl_2fcore_2ftasks_2eproto::of ~0u, // no _weak_field_map_ PROTOBUF_FIELD_OFFSET(::flyteidl::core::K8sObjectMetadata, labels_), PROTOBUF_FIELD_OFFSET(::flyteidl::core::K8sObjectMetadata, annotations_), + ~0u, // no _has_bits_ + PROTOBUF_FIELD_OFFSET(::flyteidl::core::Sql, _internal_metadata_), + ~0u, // no _extensions_ + ~0u, // no _oneof_case_ + ~0u, // no _weak_field_map_ + PROTOBUF_FIELD_OFFSET(::flyteidl::core::Sql, statement_), + PROTOBUF_FIELD_OFFSET(::flyteidl::core::Sql, dialect_), }; static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = { { 0, -1, sizeof(::flyteidl::core::Resources_ResourceEntry)}, @@ -471,14 +501,15 @@ static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SE { 22, -1, sizeof(::flyteidl::core::TaskMetadata)}, { 35, 42, sizeof(::flyteidl::core::TaskTemplate_ConfigEntry_DoNotUse)}, { 44, -1, sizeof(::flyteidl::core::TaskTemplate)}, - { 60, -1, sizeof(::flyteidl::core::ContainerPort)}, - { 66, -1, sizeof(::flyteidl::core::Container)}, - { 79, -1, sizeof(::flyteidl::core::IOStrategy)}, - { 86, -1, sizeof(::flyteidl::core::DataLoadingConfig)}, - { 96, -1, sizeof(::flyteidl::core::K8sPod)}, - { 103, 110, sizeof(::flyteidl::core::K8sObjectMetadata_LabelsEntry_DoNotUse)}, - { 112, 119, sizeof(::flyteidl::core::K8sObjectMetadata_AnnotationsEntry_DoNotUse)}, - { 121, -1, sizeof(::flyteidl::core::K8sObjectMetadata)}, + { 61, -1, sizeof(::flyteidl::core::ContainerPort)}, + { 67, -1, sizeof(::flyteidl::core::Container)}, + { 80, -1, sizeof(::flyteidl::core::IOStrategy)}, + { 87, -1, sizeof(::flyteidl::core::DataLoadingConfig)}, + { 97, -1, sizeof(::flyteidl::core::K8sPod)}, + { 104, 111, sizeof(::flyteidl::core::K8sObjectMetadata_LabelsEntry_DoNotUse)}, + { 113, 120, sizeof(::flyteidl::core::K8sObjectMetadata_AnnotationsEntry_DoNotUse)}, + { 122, -1, sizeof(::flyteidl::core::K8sObjectMetadata)}, + { 129, -1, sizeof(::flyteidl::core::Sql)}, }; static ::google::protobuf::Message const * const file_default_instances[] = { @@ -496,12 +527,13 @@ static ::google::protobuf::Message const * const file_default_instances[] = { reinterpret_cast(&::flyteidl::core::_K8sObjectMetadata_LabelsEntry_DoNotUse_default_instance_), reinterpret_cast(&::flyteidl::core::_K8sObjectMetadata_AnnotationsEntry_DoNotUse_default_instance_), reinterpret_cast(&::flyteidl::core::_K8sObjectMetadata_default_instance_), + reinterpret_cast(&::flyteidl::core::_Sql_default_instance_), }; ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto = { {}, AddDescriptors_flyteidl_2fcore_2ftasks_2eproto, "flyteidl/core/tasks.proto", schemas, file_default_instances, TableStruct_flyteidl_2fcore_2ftasks_2eproto::offsets, - file_level_metadata_flyteidl_2fcore_2ftasks_2eproto, 14, file_level_enum_descriptors_flyteidl_2fcore_2ftasks_2eproto, file_level_service_descriptors_flyteidl_2fcore_2ftasks_2eproto, + file_level_metadata_flyteidl_2fcore_2ftasks_2eproto, 15, file_level_enum_descriptors_flyteidl_2fcore_2ftasks_2eproto, file_level_service_descriptors_flyteidl_2fcore_2ftasks_2eproto, }; const char descriptor_table_protodef_flyteidl_2fcore_2ftasks_2eproto[] = @@ -529,57 +561,61 @@ const char descriptor_table_protodef_flyteidl_2fcore_2ftasks_2eproto[] = "lyteidl.core.RetryStrategy\022\031\n\021discovery_" "version\030\006 \001(\t\022 \n\030deprecated_error_messag" "e\030\007 \001(\t\022\027\n\rinterruptible\030\010 \001(\010H\000B\025\n\023inte" - "rruptible_value\"\355\003\n\014TaskTemplate\022%\n\002id\030\001" + "rruptible_value\"\220\004\n\014TaskTemplate\022%\n\002id\030\001" " \001(\0132\031.flyteidl.core.Identifier\022\014\n\004type\030" "\002 \001(\t\022-\n\010metadata\030\003 \001(\0132\033.flyteidl.core." "TaskMetadata\0220\n\tinterface\030\004 \001(\0132\035.flytei" "dl.core.TypedInterface\022\'\n\006custom\030\005 \001(\0132\027" ".google.protobuf.Struct\022-\n\tcontainer\030\006 \001" "(\0132\030.flyteidl.core.ContainerH\000\022(\n\007k8s_po" - "d\030\021 \001(\0132\025.flyteidl.core.K8sPodH\000\022\031\n\021task" - "_type_version\030\007 \001(\005\0228\n\020security_context\030" - "\010 \001(\0132\036.flyteidl.core.SecurityContext\0227\n" - "\006config\030\020 \003(\0132\'.flyteidl.core.TaskTempla" - "te.ConfigEntry\032-\n\013ConfigEntry\022\013\n\003key\030\001 \001" - "(\t\022\r\n\005value\030\002 \001(\t:\0028\001B\010\n\006target\"\'\n\rConta" - "inerPort\022\026\n\016container_port\030\001 \001(\r\"\245\002\n\tCon" - "tainer\022\r\n\005image\030\001 \001(\t\022\017\n\007command\030\002 \003(\t\022\014" - "\n\004args\030\003 \003(\t\022+\n\tresources\030\004 \001(\0132\030.flytei" - "dl.core.Resources\022(\n\003env\030\005 \003(\0132\033.flyteid" - "l.core.KeyValuePair\022/\n\006config\030\006 \003(\0132\033.fl" - "yteidl.core.KeyValuePairB\002\030\001\022+\n\005ports\030\007 " - "\003(\0132\034.flyteidl.core.ContainerPort\0225\n\013dat" - "a_config\030\t \001(\0132 .flyteidl.core.DataLoadi" - "ngConfig\"\233\002\n\nIOStrategy\022=\n\rdownload_mode" - "\030\001 \001(\0162&.flyteidl.core.IOStrategy.Downlo" - "adMode\0229\n\013upload_mode\030\002 \001(\0162$.flyteidl.c" - "ore.IOStrategy.UploadMode\"L\n\014DownloadMod" - "e\022\022\n\016DOWNLOAD_EAGER\020\000\022\023\n\017DOWNLOAD_STREAM" - "\020\001\022\023\n\017DO_NOT_DOWNLOAD\020\002\"E\n\nUploadMode\022\022\n" - "\016UPLOAD_ON_EXIT\020\000\022\020\n\014UPLOAD_EAGER\020\001\022\021\n\rD" - "O_NOT_UPLOAD\020\002\"\363\001\n\021DataLoadingConfig\022\017\n\007" - "enabled\030\001 \001(\010\022\022\n\ninput_path\030\002 \001(\t\022\023\n\013out" - "put_path\030\003 \001(\t\022A\n\006format\030\004 \001(\01621.flyteid" - "l.core.DataLoadingConfig.LiteralMapForma" - "t\022.\n\013io_strategy\030\005 \001(\0132\031.flyteidl.core.I" - "OStrategy\"1\n\020LiteralMapFormat\022\010\n\004JSON\020\000\022" - "\010\n\004YAML\020\001\022\t\n\005PROTO\020\002\"g\n\006K8sPod\0222\n\010metada" - "ta\030\001 \001(\0132 .flyteidl.core.K8sObjectMetada" - "ta\022)\n\010pod_spec\030\002 \001(\0132\027.google.protobuf.S" - "truct\"\374\001\n\021K8sObjectMetadata\022<\n\006labels\030\001 " - "\003(\0132,.flyteidl.core.K8sObjectMetadata.La" - "belsEntry\022F\n\013annotations\030\002 \003(\01321.flyteid" - "l.core.K8sObjectMetadata.AnnotationsEntr" - "y\032-\n\013LabelsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002" - " \001(\t:\0028\001\0322\n\020AnnotationsEntry\022\013\n\003key\030\001 \001(" - "\t\022\r\n\005value\030\002 \001(\t:\0028\001B6Z4github.com/flyte" - "org/flyteidl/gen/pb-go/flyteidl/coreb\006pr" - "oto3" + "d\030\021 \001(\0132\025.flyteidl.core.K8sPodH\000\022!\n\003sql\030" + "\022 \001(\0132\022.flyteidl.core.SqlH\000\022\031\n\021task_type" + "_version\030\007 \001(\005\0228\n\020security_context\030\010 \001(\013" + "2\036.flyteidl.core.SecurityContext\0227\n\006conf" + "ig\030\020 \003(\0132\'.flyteidl.core.TaskTemplate.Co" + "nfigEntry\032-\n\013ConfigEntry\022\013\n\003key\030\001 \001(\t\022\r\n" + "\005value\030\002 \001(\t:\0028\001B\010\n\006target\"\'\n\rContainerP" + "ort\022\026\n\016container_port\030\001 \001(\r\"\245\002\n\tContaine" + "r\022\r\n\005image\030\001 \001(\t\022\017\n\007command\030\002 \003(\t\022\014\n\004arg" + "s\030\003 \003(\t\022+\n\tresources\030\004 \001(\0132\030.flyteidl.co" + "re.Resources\022(\n\003env\030\005 \003(\0132\033.flyteidl.cor" + "e.KeyValuePair\022/\n\006config\030\006 \003(\0132\033.flyteid" + "l.core.KeyValuePairB\002\030\001\022+\n\005ports\030\007 \003(\0132\034" + ".flyteidl.core.ContainerPort\0225\n\013data_con" + "fig\030\t \001(\0132 .flyteidl.core.DataLoadingCon" + "fig\"\233\002\n\nIOStrategy\022=\n\rdownload_mode\030\001 \001(" + "\0162&.flyteidl.core.IOStrategy.DownloadMod" + "e\0229\n\013upload_mode\030\002 \001(\0162$.flyteidl.core.I" + "OStrategy.UploadMode\"L\n\014DownloadMode\022\022\n\016" + "DOWNLOAD_EAGER\020\000\022\023\n\017DOWNLOAD_STREAM\020\001\022\023\n" + "\017DO_NOT_DOWNLOAD\020\002\"E\n\nUploadMode\022\022\n\016UPLO" + "AD_ON_EXIT\020\000\022\020\n\014UPLOAD_EAGER\020\001\022\021\n\rDO_NOT" + "_UPLOAD\020\002\"\363\001\n\021DataLoadingConfig\022\017\n\007enabl" + "ed\030\001 \001(\010\022\022\n\ninput_path\030\002 \001(\t\022\023\n\013output_p" + "ath\030\003 \001(\t\022A\n\006format\030\004 \001(\01621.flyteidl.cor" + "e.DataLoadingConfig.LiteralMapFormat\022.\n\013" + "io_strategy\030\005 \001(\0132\031.flyteidl.core.IOStra" + "tegy\"1\n\020LiteralMapFormat\022\010\n\004JSON\020\000\022\010\n\004YA" + "ML\020\001\022\t\n\005PROTO\020\002\"g\n\006K8sPod\0222\n\010metadata\030\001 " + "\001(\0132 .flyteidl.core.K8sObjectMetadata\022)\n" + "\010pod_spec\030\002 \001(\0132\027.google.protobuf.Struct" + "\"\374\001\n\021K8sObjectMetadata\022<\n\006labels\030\001 \003(\0132," + ".flyteidl.core.K8sObjectMetadata.LabelsE" + "ntry\022F\n\013annotations\030\002 \003(\01321.flyteidl.cor" + "e.K8sObjectMetadata.AnnotationsEntry\032-\n\013" + "LabelsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:" + "\0028\001\0322\n\020AnnotationsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005" + "value\030\002 \001(\t:\0028\001\"~\n\003Sql\022\021\n\tstatement\030\001 \001(" + "\t\022+\n\007dialect\030\002 \001(\0162\032.flyteidl.core.Sql.D" + "ialect\"7\n\007Dialect\022\r\n\tUNDEFINED\020\000\022\010\n\004ANSI" + "\020\001\022\010\n\004HIVE\020\002\022\t\n\005OTHER\020\003B6Z4github.com/fl" + "yteorg/flyteidl/gen/pb-go/flyteidl/coreb" + "\006proto3" ; ::google::protobuf::internal::DescriptorTable descriptor_table_flyteidl_2fcore_2ftasks_2eproto = { false, InitDefaults_flyteidl_2fcore_2ftasks_2eproto, descriptor_table_protodef_flyteidl_2fcore_2ftasks_2eproto, - "flyteidl/core/tasks.proto", &assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto, 2764, + "flyteidl/core/tasks.proto", &assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto, 2927, }; void AddDescriptors_flyteidl_2fcore_2ftasks_2eproto() { @@ -718,6 +754,31 @@ const DataLoadingConfig_LiteralMapFormat DataLoadingConfig::LiteralMapFormat_MIN const DataLoadingConfig_LiteralMapFormat DataLoadingConfig::LiteralMapFormat_MAX; const int DataLoadingConfig::LiteralMapFormat_ARRAYSIZE; #endif // !defined(_MSC_VER) || _MSC_VER >= 1900 +const ::google::protobuf::EnumDescriptor* Sql_Dialect_descriptor() { + ::google::protobuf::internal::AssignDescriptors(&assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto); + return file_level_enum_descriptors_flyteidl_2fcore_2ftasks_2eproto[5]; +} +bool Sql_Dialect_IsValid(int value) { + switch (value) { + case 0: + case 1: + case 2: + case 3: + return true; + default: + return false; + } +} + +#if !defined(_MSC_VER) || _MSC_VER >= 1900 +const Sql_Dialect Sql::UNDEFINED; +const Sql_Dialect Sql::ANSI; +const Sql_Dialect Sql::HIVE; +const Sql_Dialect Sql::OTHER; +const Sql_Dialect Sql::Dialect_MIN; +const Sql_Dialect Sql::Dialect_MAX; +const int Sql::Dialect_ARRAYSIZE; +#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 // =================================================================== @@ -2587,6 +2648,8 @@ void TaskTemplate::InitAsDefaultInstance() { ::flyteidl::core::Container::internal_default_instance()); ::flyteidl::core::_TaskTemplate_default_instance_.k8s_pod_ = const_cast< ::flyteidl::core::K8sPod*>( ::flyteidl::core::K8sPod::internal_default_instance()); + ::flyteidl::core::_TaskTemplate_default_instance_.sql_ = const_cast< ::flyteidl::core::Sql*>( + ::flyteidl::core::Sql::internal_default_instance()); ::flyteidl::core::_TaskTemplate_default_instance_._instance.get_mutable()->security_context_ = const_cast< ::flyteidl::core::SecurityContext*>( ::flyteidl::core::SecurityContext::internal_default_instance()); } @@ -2598,6 +2661,7 @@ class TaskTemplate::HasBitSetters { static const ::google::protobuf::Struct& custom(const TaskTemplate* msg); static const ::flyteidl::core::Container& container(const TaskTemplate* msg); static const ::flyteidl::core::K8sPod& k8s_pod(const TaskTemplate* msg); + static const ::flyteidl::core::Sql& sql(const TaskTemplate* msg); static const ::flyteidl::core::SecurityContext& security_context(const TaskTemplate* msg); }; @@ -2625,6 +2689,10 @@ const ::flyteidl::core::K8sPod& TaskTemplate::HasBitSetters::k8s_pod(const TaskTemplate* msg) { return *msg->target_.k8s_pod_; } +const ::flyteidl::core::Sql& +TaskTemplate::HasBitSetters::sql(const TaskTemplate* msg) { + return *msg->target_.sql_; +} const ::flyteidl::core::SecurityContext& TaskTemplate::HasBitSetters::security_context(const TaskTemplate* msg) { return *msg->security_context_; @@ -2675,6 +2743,20 @@ void TaskTemplate::set_allocated_k8s_pod(::flyteidl::core::K8sPod* k8s_pod) { } // @@protoc_insertion_point(field_set_allocated:flyteidl.core.TaskTemplate.k8s_pod) } +void TaskTemplate::set_allocated_sql(::flyteidl::core::Sql* sql) { + ::google::protobuf::Arena* message_arena = GetArenaNoVirtual(); + clear_target(); + if (sql) { + ::google::protobuf::Arena* submessage_arena = nullptr; + if (message_arena != submessage_arena) { + sql = ::google::protobuf::internal::GetOwnedMessage( + message_arena, sql, submessage_arena); + } + set_has_sql(); + target_.sql_ = sql; + } + // @@protoc_insertion_point(field_set_allocated:flyteidl.core.TaskTemplate.sql) +} void TaskTemplate::clear_security_context() { if (GetArenaNoVirtual() == nullptr && security_context_ != nullptr) { delete security_context_; @@ -2689,6 +2771,7 @@ const int TaskTemplate::kInterfaceFieldNumber; const int TaskTemplate::kCustomFieldNumber; const int TaskTemplate::kContainerFieldNumber; const int TaskTemplate::kK8SPodFieldNumber; +const int TaskTemplate::kSqlFieldNumber; const int TaskTemplate::kTaskTypeVersionFieldNumber; const int TaskTemplate::kSecurityContextFieldNumber; const int TaskTemplate::kConfigFieldNumber; @@ -2744,6 +2827,10 @@ TaskTemplate::TaskTemplate(const TaskTemplate& from) mutable_k8s_pod()->::flyteidl::core::K8sPod::MergeFrom(from.k8s_pod()); break; } + case kSql: { + mutable_sql()->::flyteidl::core::Sql::MergeFrom(from.sql()); + break; + } case TARGET_NOT_SET: { break; } @@ -2798,6 +2885,10 @@ void TaskTemplate::clear_target() { delete target_.k8s_pod_; break; } + case kSql: { + delete target_.sql_; + break; + } case TARGET_NOT_SET: { break; } @@ -2985,6 +3076,19 @@ const char* TaskTemplate::_InternalParse(const char* begin, const char* end, voi {parser_till_end, object}, ptr - size, ptr)); break; } + // .flyteidl.core.Sql sql = 18; + case 18: { + if (static_cast<::google::protobuf::uint8>(tag) != 146) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + parser_till_end = ::flyteidl::core::Sql::_InternalParse; + object = msg->mutable_sql(); + if (size > end - ptr) goto len_delim_till_end; + ptr += size; + GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange( + {parser_till_end, object}, ptr - size, ptr)); + break; + } default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -3150,6 +3254,17 @@ bool TaskTemplate::MergePartialFromCodedStream( break; } + // .flyteidl.core.Sql sql = 18; + case 18: { + if (static_cast< ::google::protobuf::uint8>(tag) == (146 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadMessage( + input, mutable_sql())); + } else { + goto handle_unusual; + } + break; + } + default: { handle_unusual: if (tag == 0) { @@ -3283,6 +3398,12 @@ void TaskTemplate::SerializeWithCachedSizes( 17, HasBitSetters::k8s_pod(this), output); } + // .flyteidl.core.Sql sql = 18; + if (has_sql()) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 18, HasBitSetters::sql(this), output); + } + if (_internal_metadata_.have_unknown_fields()) { ::google::protobuf::internal::WireFormat::SerializeUnknownFields( _internal_metadata_.unknown_fields(), output); @@ -3410,6 +3531,13 @@ ::google::protobuf::uint8* TaskTemplate::InternalSerializeWithCachedSizesToArray 17, HasBitSetters::k8s_pod(this), target); } + // .flyteidl.core.Sql sql = 18; + if (has_sql()) { + target = ::google::protobuf::internal::WireFormatLite:: + InternalWriteMessageToArray( + 18, HasBitSetters::sql(this), target); + } + if (_internal_metadata_.have_unknown_fields()) { target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields(), target); @@ -3509,6 +3637,13 @@ size_t TaskTemplate::ByteSizeLong() const { *target_.k8s_pod_); break; } + // .flyteidl.core.Sql sql = 18; + case kSql: { + total_size += 2 + + ::google::protobuf::internal::WireFormatLite::MessageSize( + *target_.sql_); + break; + } case TARGET_NOT_SET: { break; } @@ -3572,6 +3707,10 @@ void TaskTemplate::MergeFrom(const TaskTemplate& from) { mutable_k8s_pod()->::flyteidl::core::K8sPod::MergeFrom(from.k8s_pod()); break; } + case kSql: { + mutable_sql()->::flyteidl::core::Sql::MergeFrom(from.sql()); + break; + } case TARGET_NOT_SET: { break; } @@ -6467,6 +6606,351 @@ ::google::protobuf::Metadata K8sObjectMetadata::GetMetadata() const { } +// =================================================================== + +void Sql::InitAsDefaultInstance() { +} +class Sql::HasBitSetters { + public: +}; + +#if !defined(_MSC_VER) || _MSC_VER >= 1900 +const int Sql::kStatementFieldNumber; +const int Sql::kDialectFieldNumber; +#endif // !defined(_MSC_VER) || _MSC_VER >= 1900 + +Sql::Sql() + : ::google::protobuf::Message(), _internal_metadata_(nullptr) { + SharedCtor(); + // @@protoc_insertion_point(constructor:flyteidl.core.Sql) +} +Sql::Sql(const Sql& from) + : ::google::protobuf::Message(), + _internal_metadata_(nullptr) { + _internal_metadata_.MergeFrom(from._internal_metadata_); + statement_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + if (from.statement().size() > 0) { + statement_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.statement_); + } + dialect_ = from.dialect_; + // @@protoc_insertion_point(copy_constructor:flyteidl.core.Sql) +} + +void Sql::SharedCtor() { + ::google::protobuf::internal::InitSCC( + &scc_info_Sql_flyteidl_2fcore_2ftasks_2eproto.base); + statement_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + dialect_ = 0; +} + +Sql::~Sql() { + // @@protoc_insertion_point(destructor:flyteidl.core.Sql) + SharedDtor(); +} + +void Sql::SharedDtor() { + statement_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} + +void Sql::SetCachedSize(int size) const { + _cached_size_.Set(size); +} +const Sql& Sql::default_instance() { + ::google::protobuf::internal::InitSCC(&::scc_info_Sql_flyteidl_2fcore_2ftasks_2eproto.base); + return *internal_default_instance(); +} + + +void Sql::Clear() { +// @@protoc_insertion_point(message_clear_start:flyteidl.core.Sql) + ::google::protobuf::uint32 cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + statement_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + dialect_ = 0; + _internal_metadata_.Clear(); +} + +#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER +const char* Sql::_InternalParse(const char* begin, const char* end, void* object, + ::google::protobuf::internal::ParseContext* ctx) { + auto msg = static_cast(object); + ::google::protobuf::int32 size; (void)size; + int depth; (void)depth; + ::google::protobuf::uint32 tag; + ::google::protobuf::internal::ParseFunc parser_till_end; (void)parser_till_end; + auto ptr = begin; + while (ptr < end) { + ptr = ::google::protobuf::io::Parse32(ptr, &tag); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + switch (tag >> 3) { + // string statement = 1; + case 1: { + if (static_cast<::google::protobuf::uint8>(tag) != 10) goto handle_unusual; + ptr = ::google::protobuf::io::ReadSize(ptr, &size); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + ctx->extra_parse_data().SetFieldName("flyteidl.core.Sql.statement"); + object = msg->mutable_statement(); + if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) { + parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8; + goto string_till_end; + } + GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx)); + ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx); + ptr += size; + break; + } + // .flyteidl.core.Sql.Dialect dialect = 2; + case 2: { + if (static_cast<::google::protobuf::uint8>(tag) != 16) goto handle_unusual; + ::google::protobuf::uint64 val = ::google::protobuf::internal::ReadVarint(&ptr); + msg->set_dialect(static_cast<::flyteidl::core::Sql_Dialect>(val)); + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr); + break; + } + default: { + handle_unusual: + if ((tag & 7) == 4 || tag == 0) { + ctx->EndGroup(tag); + return ptr; + } + auto res = UnknownFieldParse(tag, {_InternalParse, msg}, + ptr, end, msg->_internal_metadata_.mutable_unknown_fields(), ctx); + ptr = res.first; + GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr); + if (res.second) return ptr; + } + } // switch + } // while + return ptr; +string_till_end: + static_cast<::std::string*>(object)->clear(); + static_cast<::std::string*>(object)->reserve(size); + goto len_delim_till_end; +len_delim_till_end: + return ctx->StoreAndTailCall(ptr, end, {_InternalParse, msg}, + {parser_till_end, object}, size); +} +#else // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER +bool Sql::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + // @@protoc_insertion_point(parse_start:flyteidl.core.Sql) + for (;;) { + ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // string statement = 1; + case 1: { + if (static_cast< ::google::protobuf::uint8>(tag) == (10 & 0xFF)) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_statement())); + DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->statement().data(), static_cast(this->statement().length()), + ::google::protobuf::internal::WireFormatLite::PARSE, + "flyteidl.core.Sql.statement")); + } else { + goto handle_unusual; + } + break; + } + + // .flyteidl.core.Sql.Dialect dialect = 2; + case 2: { + if (static_cast< ::google::protobuf::uint8>(tag) == (16 & 0xFF)) { + int value = 0; + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>( + input, &value))); + set_dialect(static_cast< ::flyteidl::core::Sql_Dialect >(value)); + } else { + goto handle_unusual; + } + break; + } + + default: { + handle_unusual: + if (tag == 0) { + goto success; + } + DO_(::google::protobuf::internal::WireFormat::SkipField( + input, tag, _internal_metadata_.mutable_unknown_fields())); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:flyteidl.core.Sql) + return true; +failure: + // @@protoc_insertion_point(parse_failure:flyteidl.core.Sql) + return false; +#undef DO_ +} +#endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + +void Sql::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:flyteidl.core.Sql) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // string statement = 1; + if (this->statement().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->statement().data(), static_cast(this->statement().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.core.Sql.statement"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 1, this->statement(), output); + } + + // .flyteidl.core.Sql.Dialect dialect = 2; + if (this->dialect() != 0) { + ::google::protobuf::internal::WireFormatLite::WriteEnum( + 2, this->dialect(), output); + } + + if (_internal_metadata_.have_unknown_fields()) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + _internal_metadata_.unknown_fields(), output); + } + // @@protoc_insertion_point(serialize_end:flyteidl.core.Sql) +} + +::google::protobuf::uint8* Sql::InternalSerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const { + // @@protoc_insertion_point(serialize_to_array_start:flyteidl.core.Sql) + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + // string statement = 1; + if (this->statement().size() > 0) { + ::google::protobuf::internal::WireFormatLite::VerifyUtf8String( + this->statement().data(), static_cast(this->statement().length()), + ::google::protobuf::internal::WireFormatLite::SERIALIZE, + "flyteidl.core.Sql.statement"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 1, this->statement(), target); + } + + // .flyteidl.core.Sql.Dialect dialect = 2; + if (this->dialect() != 0) { + target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray( + 2, this->dialect(), target); + } + + if (_internal_metadata_.have_unknown_fields()) { + target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( + _internal_metadata_.unknown_fields(), target); + } + // @@protoc_insertion_point(serialize_to_array_end:flyteidl.core.Sql) + return target; +} + +size_t Sql::ByteSizeLong() const { +// @@protoc_insertion_point(message_byte_size_start:flyteidl.core.Sql) + size_t total_size = 0; + + if (_internal_metadata_.have_unknown_fields()) { + total_size += + ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( + _internal_metadata_.unknown_fields()); + } + ::google::protobuf::uint32 cached_has_bits = 0; + // Prevent compiler warnings about cached_has_bits being unused + (void) cached_has_bits; + + // string statement = 1; + if (this->statement().size() > 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->statement()); + } + + // .flyteidl.core.Sql.Dialect dialect = 2; + if (this->dialect() != 0) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::EnumSize(this->dialect()); + } + + int cached_size = ::google::protobuf::internal::ToCachedSize(total_size); + SetCachedSize(cached_size); + return total_size; +} + +void Sql::MergeFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_merge_from_start:flyteidl.core.Sql) + GOOGLE_DCHECK_NE(&from, this); + const Sql* source = + ::google::protobuf::DynamicCastToGenerated( + &from); + if (source == nullptr) { + // @@protoc_insertion_point(generalized_merge_from_cast_fail:flyteidl.core.Sql) + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + // @@protoc_insertion_point(generalized_merge_from_cast_success:flyteidl.core.Sql) + MergeFrom(*source); + } +} + +void Sql::MergeFrom(const Sql& from) { +// @@protoc_insertion_point(class_specific_merge_from_start:flyteidl.core.Sql) + GOOGLE_DCHECK_NE(&from, this); + _internal_metadata_.MergeFrom(from._internal_metadata_); + ::google::protobuf::uint32 cached_has_bits = 0; + (void) cached_has_bits; + + if (from.statement().size() > 0) { + + statement_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.statement_); + } + if (from.dialect() != 0) { + set_dialect(from.dialect()); + } +} + +void Sql::CopyFrom(const ::google::protobuf::Message& from) { +// @@protoc_insertion_point(generalized_copy_from_start:flyteidl.core.Sql) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void Sql::CopyFrom(const Sql& from) { +// @@protoc_insertion_point(class_specific_copy_from_start:flyteidl.core.Sql) + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool Sql::IsInitialized() const { + return true; +} + +void Sql::Swap(Sql* other) { + if (other == this) return; + InternalSwap(other); +} +void Sql::InternalSwap(Sql* other) { + using std::swap; + _internal_metadata_.Swap(&other->_internal_metadata_); + statement_.Swap(&other->statement_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(), + GetArenaNoVirtual()); + swap(dialect_, other->dialect_); +} + +::google::protobuf::Metadata Sql::GetMetadata() const { + ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_flyteidl_2fcore_2ftasks_2eproto); + return ::file_level_metadata_flyteidl_2fcore_2ftasks_2eproto[kIndexInFileMessages]; +} + + // @@protoc_insertion_point(namespace_scope) } // namespace core } // namespace flyteidl @@ -6514,6 +6998,9 @@ template<> PROTOBUF_NOINLINE ::flyteidl::core::K8sObjectMetadata_AnnotationsEntr template<> PROTOBUF_NOINLINE ::flyteidl::core::K8sObjectMetadata* Arena::CreateMaybeMessage< ::flyteidl::core::K8sObjectMetadata >(Arena* arena) { return Arena::CreateInternal< ::flyteidl::core::K8sObjectMetadata >(arena); } +template<> PROTOBUF_NOINLINE ::flyteidl::core::Sql* Arena::CreateMaybeMessage< ::flyteidl::core::Sql >(Arena* arena) { + return Arena::CreateInternal< ::flyteidl::core::Sql >(arena); +} } // namespace protobuf } // namespace google diff --git a/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h b/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h index aac047b058f..6661e7f1274 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h +++ b/flyteidl/gen/pb-cpp/flyteidl/core/tasks.pb.h @@ -51,7 +51,7 @@ struct TableStruct_flyteidl_2fcore_2ftasks_2eproto { PROTOBUF_SECTION_VARIABLE(protodesc_cold); static const ::google::protobuf::internal::AuxillaryParseTableField aux[] PROTOBUF_SECTION_VARIABLE(protodesc_cold); - static const ::google::protobuf::internal::ParseTable schema[14] + static const ::google::protobuf::internal::ParseTable schema[15] PROTOBUF_SECTION_VARIABLE(protodesc_cold); static const ::google::protobuf::internal::FieldMetadata field_metadata[]; static const ::google::protobuf::internal::SerializationTable serialization_table[]; @@ -93,6 +93,9 @@ extern Resources_ResourceEntryDefaultTypeInternal _Resources_ResourceEntry_defau class RuntimeMetadata; class RuntimeMetadataDefaultTypeInternal; extern RuntimeMetadataDefaultTypeInternal _RuntimeMetadata_default_instance_; +class Sql; +class SqlDefaultTypeInternal; +extern SqlDefaultTypeInternal _Sql_default_instance_; class TaskMetadata; class TaskMetadataDefaultTypeInternal; extern TaskMetadataDefaultTypeInternal _TaskMetadata_default_instance_; @@ -117,6 +120,7 @@ template<> ::flyteidl::core::K8sPod* Arena::CreateMaybeMessage<::flyteidl::core: template<> ::flyteidl::core::Resources* Arena::CreateMaybeMessage<::flyteidl::core::Resources>(Arena*); template<> ::flyteidl::core::Resources_ResourceEntry* Arena::CreateMaybeMessage<::flyteidl::core::Resources_ResourceEntry>(Arena*); template<> ::flyteidl::core::RuntimeMetadata* Arena::CreateMaybeMessage<::flyteidl::core::RuntimeMetadata>(Arena*); +template<> ::flyteidl::core::Sql* Arena::CreateMaybeMessage<::flyteidl::core::Sql>(Arena*); template<> ::flyteidl::core::TaskMetadata* Arena::CreateMaybeMessage<::flyteidl::core::TaskMetadata>(Arena*); template<> ::flyteidl::core::TaskTemplate* Arena::CreateMaybeMessage<::flyteidl::core::TaskTemplate>(Arena*); template<> ::flyteidl::core::TaskTemplate_ConfigEntry_DoNotUse* Arena::CreateMaybeMessage<::flyteidl::core::TaskTemplate_ConfigEntry_DoNotUse>(Arena*); @@ -237,6 +241,29 @@ inline bool DataLoadingConfig_LiteralMapFormat_Parse( return ::google::protobuf::internal::ParseNamedEnum( DataLoadingConfig_LiteralMapFormat_descriptor(), name, value); } +enum Sql_Dialect { + Sql_Dialect_UNDEFINED = 0, + Sql_Dialect_ANSI = 1, + Sql_Dialect_HIVE = 2, + Sql_Dialect_OTHER = 3, + Sql_Dialect_Sql_Dialect_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::google::protobuf::int32>::min(), + Sql_Dialect_Sql_Dialect_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::google::protobuf::int32>::max() +}; +bool Sql_Dialect_IsValid(int value); +const Sql_Dialect Sql_Dialect_Dialect_MIN = Sql_Dialect_UNDEFINED; +const Sql_Dialect Sql_Dialect_Dialect_MAX = Sql_Dialect_OTHER; +const int Sql_Dialect_Dialect_ARRAYSIZE = Sql_Dialect_Dialect_MAX + 1; + +const ::google::protobuf::EnumDescriptor* Sql_Dialect_descriptor(); +inline const ::std::string& Sql_Dialect_Name(Sql_Dialect value) { + return ::google::protobuf::internal::NameOfEnum( + Sql_Dialect_descriptor(), value); +} +inline bool Sql_Dialect_Parse( + const ::std::string& name, Sql_Dialect* value) { + return ::google::protobuf::internal::ParseNamedEnum( + Sql_Dialect_descriptor(), name, value); +} // =================================================================== class Resources_ResourceEntry final : @@ -958,6 +985,7 @@ class TaskTemplate final : enum TargetCase { kContainer = 6, kK8SPod = 17, + kSql = 18, TARGET_NOT_SET = 0, }; @@ -1117,6 +1145,15 @@ class TaskTemplate final : ::flyteidl::core::K8sPod* mutable_k8s_pod(); void set_allocated_k8s_pod(::flyteidl::core::K8sPod* k8s_pod); + // .flyteidl.core.Sql sql = 18; + bool has_sql() const; + void clear_sql(); + static const int kSqlFieldNumber = 18; + const ::flyteidl::core::Sql& sql() const; + ::flyteidl::core::Sql* release_sql(); + ::flyteidl::core::Sql* mutable_sql(); + void set_allocated_sql(::flyteidl::core::Sql* sql); + void clear_target(); TargetCase target_case() const; // @@protoc_insertion_point(class_scope:flyteidl.core.TaskTemplate) @@ -1124,6 +1161,7 @@ class TaskTemplate final : class HasBitSetters; void set_has_container(); void set_has_k8s_pod(); + void set_has_sql(); inline bool has_target() const; inline void clear_has_target(); @@ -1146,6 +1184,7 @@ class TaskTemplate final : TargetUnion() {} ::flyteidl::core::Container* container_; ::flyteidl::core::K8sPod* k8s_pod_; + ::flyteidl::core::Sql* sql_; } target_; mutable ::google::protobuf::internal::CachedSize _cached_size_; ::google::protobuf::uint32 _oneof_case_[1]; @@ -2160,6 +2199,163 @@ class K8sObjectMetadata final : mutable ::google::protobuf::internal::CachedSize _cached_size_; friend struct ::TableStruct_flyteidl_2fcore_2ftasks_2eproto; }; +// ------------------------------------------------------------------- + +class Sql final : + public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:flyteidl.core.Sql) */ { + public: + Sql(); + virtual ~Sql(); + + Sql(const Sql& from); + + inline Sql& operator=(const Sql& from) { + CopyFrom(from); + return *this; + } + #if LANG_CXX11 + Sql(Sql&& from) noexcept + : Sql() { + *this = ::std::move(from); + } + + inline Sql& operator=(Sql&& from) noexcept { + if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) { + if (this != &from) InternalSwap(&from); + } else { + CopyFrom(from); + } + return *this; + } + #endif + static const ::google::protobuf::Descriptor* descriptor() { + return default_instance().GetDescriptor(); + } + static const Sql& default_instance(); + + static void InitAsDefaultInstance(); // FOR INTERNAL USE ONLY + static inline const Sql* internal_default_instance() { + return reinterpret_cast( + &_Sql_default_instance_); + } + static constexpr int kIndexInFileMessages = + 14; + + void Swap(Sql* other); + friend void swap(Sql& a, Sql& b) { + a.Swap(&b); + } + + // implements Message ---------------------------------------------- + + inline Sql* New() const final { + return CreateMaybeMessage(nullptr); + } + + Sql* New(::google::protobuf::Arena* arena) const final { + return CreateMaybeMessage(arena); + } + void CopyFrom(const ::google::protobuf::Message& from) final; + void MergeFrom(const ::google::protobuf::Message& from) final; + void CopyFrom(const Sql& from); + void MergeFrom(const Sql& from); + PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final; + bool IsInitialized() const final; + + size_t ByteSizeLong() const final; + #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + static const char* _InternalParse(const char* begin, const char* end, void* object, ::google::protobuf::internal::ParseContext* ctx); + ::google::protobuf::internal::ParseFunc _ParseFunc() const final { return _InternalParse; } + #else + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) final; + #endif // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const final; + ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const final; + int GetCachedSize() const final { return _cached_size_.Get(); } + + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const final; + void InternalSwap(Sql* other); + private: + inline ::google::protobuf::Arena* GetArenaNoVirtual() const { + return nullptr; + } + inline void* MaybeArenaPtr() const { + return nullptr; + } + public: + + ::google::protobuf::Metadata GetMetadata() const final; + + // nested types ---------------------------------------------------- + + typedef Sql_Dialect Dialect; + static const Dialect UNDEFINED = + Sql_Dialect_UNDEFINED; + static const Dialect ANSI = + Sql_Dialect_ANSI; + static const Dialect HIVE = + Sql_Dialect_HIVE; + static const Dialect OTHER = + Sql_Dialect_OTHER; + static inline bool Dialect_IsValid(int value) { + return Sql_Dialect_IsValid(value); + } + static const Dialect Dialect_MIN = + Sql_Dialect_Dialect_MIN; + static const Dialect Dialect_MAX = + Sql_Dialect_Dialect_MAX; + static const int Dialect_ARRAYSIZE = + Sql_Dialect_Dialect_ARRAYSIZE; + static inline const ::google::protobuf::EnumDescriptor* + Dialect_descriptor() { + return Sql_Dialect_descriptor(); + } + static inline const ::std::string& Dialect_Name(Dialect value) { + return Sql_Dialect_Name(value); + } + static inline bool Dialect_Parse(const ::std::string& name, + Dialect* value) { + return Sql_Dialect_Parse(name, value); + } + + // accessors ------------------------------------------------------- + + // string statement = 1; + void clear_statement(); + static const int kStatementFieldNumber = 1; + const ::std::string& statement() const; + void set_statement(const ::std::string& value); + #if LANG_CXX11 + void set_statement(::std::string&& value); + #endif + void set_statement(const char* value); + void set_statement(const char* value, size_t size); + ::std::string* mutable_statement(); + ::std::string* release_statement(); + void set_allocated_statement(::std::string* statement); + + // .flyteidl.core.Sql.Dialect dialect = 2; + void clear_dialect(); + static const int kDialectFieldNumber = 2; + ::flyteidl::core::Sql_Dialect dialect() const; + void set_dialect(::flyteidl::core::Sql_Dialect value); + + // @@protoc_insertion_point(class_scope:flyteidl.core.Sql) + private: + class HasBitSetters; + + ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_; + ::google::protobuf::internal::ArenaStringPtr statement_; + int dialect_; + mutable ::google::protobuf::internal::CachedSize _cached_size_; + friend struct ::TableStruct_flyteidl_2fcore_2ftasks_2eproto; +}; // =================================================================== @@ -3058,6 +3254,47 @@ inline ::flyteidl::core::K8sPod* TaskTemplate::mutable_k8s_pod() { return target_.k8s_pod_; } +// .flyteidl.core.Sql sql = 18; +inline bool TaskTemplate::has_sql() const { + return target_case() == kSql; +} +inline void TaskTemplate::set_has_sql() { + _oneof_case_[0] = kSql; +} +inline void TaskTemplate::clear_sql() { + if (has_sql()) { + delete target_.sql_; + clear_has_target(); + } +} +inline ::flyteidl::core::Sql* TaskTemplate::release_sql() { + // @@protoc_insertion_point(field_release:flyteidl.core.TaskTemplate.sql) + if (has_sql()) { + clear_has_target(); + ::flyteidl::core::Sql* temp = target_.sql_; + target_.sql_ = nullptr; + return temp; + } else { + return nullptr; + } +} +inline const ::flyteidl::core::Sql& TaskTemplate::sql() const { + // @@protoc_insertion_point(field_get:flyteidl.core.TaskTemplate.sql) + return has_sql() + ? *target_.sql_ + : *reinterpret_cast< ::flyteidl::core::Sql*>(&::flyteidl::core::_Sql_default_instance_); +} +inline ::flyteidl::core::Sql* TaskTemplate::mutable_sql() { + if (!has_sql()) { + clear_target(); + set_has_sql(); + target_.sql_ = CreateMaybeMessage< ::flyteidl::core::Sql >( + GetArenaNoVirtual()); + } + // @@protoc_insertion_point(field_mutable:flyteidl.core.TaskTemplate.sql) + return target_.sql_; +} + // int32 task_type_version = 7; inline void TaskTemplate::clear_task_type_version() { task_type_version_ = 0; @@ -3909,6 +4146,77 @@ K8sObjectMetadata::mutable_annotations() { return annotations_.MutableMap(); } +// ------------------------------------------------------------------- + +// Sql + +// string statement = 1; +inline void Sql::clear_statement() { + statement_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline const ::std::string& Sql::statement() const { + // @@protoc_insertion_point(field_get:flyteidl.core.Sql.statement) + return statement_.GetNoArena(); +} +inline void Sql::set_statement(const ::std::string& value) { + + statement_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value); + // @@protoc_insertion_point(field_set:flyteidl.core.Sql.statement) +} +#if LANG_CXX11 +inline void Sql::set_statement(::std::string&& value) { + + statement_.SetNoArena( + &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value)); + // @@protoc_insertion_point(field_set_rvalue:flyteidl.core.Sql.statement) +} +#endif +inline void Sql::set_statement(const char* value) { + GOOGLE_DCHECK(value != nullptr); + + statement_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value)); + // @@protoc_insertion_point(field_set_char:flyteidl.core.Sql.statement) +} +inline void Sql::set_statement(const char* value, size_t size) { + + statement_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), + ::std::string(reinterpret_cast(value), size)); + // @@protoc_insertion_point(field_set_pointer:flyteidl.core.Sql.statement) +} +inline ::std::string* Sql::mutable_statement() { + + // @@protoc_insertion_point(field_mutable:flyteidl.core.Sql.statement) + return statement_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline ::std::string* Sql::release_statement() { + // @@protoc_insertion_point(field_release:flyteidl.core.Sql.statement) + + return statement_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); +} +inline void Sql::set_allocated_statement(::std::string* statement) { + if (statement != nullptr) { + + } else { + + } + statement_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), statement); + // @@protoc_insertion_point(field_set_allocated:flyteidl.core.Sql.statement) +} + +// .flyteidl.core.Sql.Dialect dialect = 2; +inline void Sql::clear_dialect() { + dialect_ = 0; +} +inline ::flyteidl::core::Sql_Dialect Sql::dialect() const { + // @@protoc_insertion_point(field_get:flyteidl.core.Sql.dialect) + return static_cast< ::flyteidl::core::Sql_Dialect >(dialect_); +} +inline void Sql::set_dialect(::flyteidl::core::Sql_Dialect value) { + + dialect_ = value; + // @@protoc_insertion_point(field_set:flyteidl.core.Sql.dialect) +} + #ifdef __GNUC__ #pragma GCC diagnostic pop #endif // __GNUC__ @@ -3938,6 +4246,8 @@ K8sObjectMetadata::mutable_annotations() { // ------------------------------------------------------------------- +// ------------------------------------------------------------------- + // @@protoc_insertion_point(namespace_scope) @@ -3972,6 +4282,11 @@ template <> inline const EnumDescriptor* GetEnumDescriptor< ::flyteidl::core::DataLoadingConfig_LiteralMapFormat>() { return ::flyteidl::core::DataLoadingConfig_LiteralMapFormat_descriptor(); } +template <> struct is_proto_enum< ::flyteidl::core::Sql_Dialect> : ::std::true_type {}; +template <> +inline const EnumDescriptor* GetEnumDescriptor< ::flyteidl::core::Sql_Dialect>() { + return ::flyteidl::core::Sql_Dialect_descriptor(); +} } // namespace protobuf } // namespace google diff --git a/flyteidl/gen/pb-cpp/flyteidl/core/workflow_closure.pb.cc b/flyteidl/gen/pb-cpp/flyteidl/core/workflow_closure.pb.cc index 5ae1a1f2666..6b4f8a1b2e3 100644 --- a/flyteidl/gen/pb-cpp/flyteidl/core/workflow_closure.pb.cc +++ b/flyteidl/gen/pb-cpp/flyteidl/core/workflow_closure.pb.cc @@ -16,7 +16,7 @@ // @@protoc_insertion_point(includes) #include -extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<8> scc_info_TaskTemplate_flyteidl_2fcore_2ftasks_2eproto; +extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2ftasks_2eproto ::google::protobuf::internal::SCCInfo<9> scc_info_TaskTemplate_flyteidl_2fcore_2ftasks_2eproto; extern PROTOBUF_INTERNAL_EXPORT_flyteidl_2fcore_2fworkflow_2eproto ::google::protobuf::internal::SCCInfo<6> scc_info_WorkflowTemplate_flyteidl_2fcore_2fworkflow_2eproto; namespace flyteidl { namespace core { diff --git a/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go b/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go index 8498f439fea..aae786c770a 100644 --- a/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go +++ b/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.go @@ -184,6 +184,40 @@ func (DataLoadingConfig_LiteralMapFormat) EnumDescriptor() ([]byte, []int) { return fileDescriptor_bd8423ba58d6ed80, []int{7, 0} } +// The dialect of the SQL statement. This is used to validate and parse SQL statements at compilation time to avoid +// expensive runtime operations. If set to an unsupported dialect, no validation will be done on the statement. +// We support the following dialect: ansi, hive. +type Sql_Dialect int32 + +const ( + Sql_UNDEFINED Sql_Dialect = 0 + Sql_ANSI Sql_Dialect = 1 + Sql_HIVE Sql_Dialect = 2 + Sql_OTHER Sql_Dialect = 3 +) + +var Sql_Dialect_name = map[int32]string{ + 0: "UNDEFINED", + 1: "ANSI", + 2: "HIVE", + 3: "OTHER", +} + +var Sql_Dialect_value = map[string]int32{ + "UNDEFINED": 0, + "ANSI": 1, + "HIVE": 2, + "OTHER": 3, +} + +func (x Sql_Dialect) String() string { + return proto.EnumName(Sql_Dialect_name, int32(x)) +} + +func (Sql_Dialect) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_bd8423ba58d6ed80, []int{10, 0} +} + // A customizable interface to convey resources requested for a container. This can be interpreted differently for different // container engines. type Resources struct { @@ -493,6 +527,7 @@ type TaskTemplate struct { // Types that are valid to be assigned to Target: // *TaskTemplate_Container // *TaskTemplate_K8SPod + // *TaskTemplate_Sql Target isTaskTemplate_Target `protobuf_oneof:"target"` // This can be used to customize task handling at execution time for the same task type. TaskTypeVersion int32 `protobuf:"varint,7,opt,name=task_type_version,json=taskTypeVersion,proto3" json:"task_type_version,omitempty"` @@ -579,10 +614,16 @@ type TaskTemplate_K8SPod struct { K8SPod *K8SPod `protobuf:"bytes,17,opt,name=k8s_pod,json=k8sPod,proto3,oneof"` } +type TaskTemplate_Sql struct { + Sql *Sql `protobuf:"bytes,18,opt,name=sql,proto3,oneof"` +} + func (*TaskTemplate_Container) isTaskTemplate_Target() {} func (*TaskTemplate_K8SPod) isTaskTemplate_Target() {} +func (*TaskTemplate_Sql) isTaskTemplate_Target() {} + func (m *TaskTemplate) GetTarget() isTaskTemplate_Target { if m != nil { return m.Target @@ -604,6 +645,13 @@ func (m *TaskTemplate) GetK8SPod() *K8SPod { return nil } +func (m *TaskTemplate) GetSql() *Sql { + if x, ok := m.GetTarget().(*TaskTemplate_Sql); ok { + return x.Sql + } + return nil +} + func (m *TaskTemplate) GetTaskTypeVersion() int32 { if m != nil { return m.TaskTypeVersion @@ -630,6 +678,7 @@ func (*TaskTemplate) XXX_OneofWrappers() []interface{} { return []interface{}{ (*TaskTemplate_Container)(nil), (*TaskTemplate_K8SPod)(nil), + (*TaskTemplate_Sql)(nil), } } @@ -1029,12 +1078,70 @@ func (m *K8SObjectMetadata) GetAnnotations() map[string]string { return nil } +// Sql represents a generic sql workload with a statement and dialect. +type Sql struct { + // The actual query to run, the query can have templated parameters. + // We use Flyte's Golang templating format for Query templating. + // Refer to the templating documentation. + // https://docs.flyte.org/projects/cookbook/en/latest/auto/integrations/external_services/hive/hive.html#sphx-glr-auto-integrations-external-services-hive-hive-py + // For example, + // insert overwrite directory '{{ .rawOutputDataPrefix }}' stored as parquet + // select * + // from my_table + // where ds = '{{ .Inputs.ds }}' + Statement string `protobuf:"bytes,1,opt,name=statement,proto3" json:"statement,omitempty"` + Dialect Sql_Dialect `protobuf:"varint,2,opt,name=dialect,proto3,enum=flyteidl.core.Sql_Dialect" json:"dialect,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Sql) Reset() { *m = Sql{} } +func (m *Sql) String() string { return proto.CompactTextString(m) } +func (*Sql) ProtoMessage() {} +func (*Sql) Descriptor() ([]byte, []int) { + return fileDescriptor_bd8423ba58d6ed80, []int{10} +} + +func (m *Sql) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Sql.Unmarshal(m, b) +} +func (m *Sql) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Sql.Marshal(b, m, deterministic) +} +func (m *Sql) XXX_Merge(src proto.Message) { + xxx_messageInfo_Sql.Merge(m, src) +} +func (m *Sql) XXX_Size() int { + return xxx_messageInfo_Sql.Size(m) +} +func (m *Sql) XXX_DiscardUnknown() { + xxx_messageInfo_Sql.DiscardUnknown(m) +} + +var xxx_messageInfo_Sql proto.InternalMessageInfo + +func (m *Sql) GetStatement() string { + if m != nil { + return m.Statement + } + return "" +} + +func (m *Sql) GetDialect() Sql_Dialect { + if m != nil { + return m.Dialect + } + return Sql_UNDEFINED +} + func init() { proto.RegisterEnum("flyteidl.core.Resources_ResourceName", Resources_ResourceName_name, Resources_ResourceName_value) proto.RegisterEnum("flyteidl.core.RuntimeMetadata_RuntimeType", RuntimeMetadata_RuntimeType_name, RuntimeMetadata_RuntimeType_value) proto.RegisterEnum("flyteidl.core.IOStrategy_DownloadMode", IOStrategy_DownloadMode_name, IOStrategy_DownloadMode_value) proto.RegisterEnum("flyteidl.core.IOStrategy_UploadMode", IOStrategy_UploadMode_name, IOStrategy_UploadMode_value) proto.RegisterEnum("flyteidl.core.DataLoadingConfig_LiteralMapFormat", DataLoadingConfig_LiteralMapFormat_name, DataLoadingConfig_LiteralMapFormat_value) + proto.RegisterEnum("flyteidl.core.Sql_Dialect", Sql_Dialect_name, Sql_Dialect_value) proto.RegisterType((*Resources)(nil), "flyteidl.core.Resources") proto.RegisterType((*Resources_ResourceEntry)(nil), "flyteidl.core.Resources.ResourceEntry") proto.RegisterType((*RuntimeMetadata)(nil), "flyteidl.core.RuntimeMetadata") @@ -1049,98 +1156,105 @@ func init() { proto.RegisterType((*K8SObjectMetadata)(nil), "flyteidl.core.K8sObjectMetadata") proto.RegisterMapType((map[string]string)(nil), "flyteidl.core.K8sObjectMetadata.AnnotationsEntry") proto.RegisterMapType((map[string]string)(nil), "flyteidl.core.K8sObjectMetadata.LabelsEntry") + proto.RegisterType((*Sql)(nil), "flyteidl.core.Sql") } func init() { proto.RegisterFile("flyteidl/core/tasks.proto", fileDescriptor_bd8423ba58d6ed80) } var fileDescriptor_bd8423ba58d6ed80 = []byte{ - // 1405 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x57, 0xeb, 0x72, 0xdb, 0xb6, - 0x12, 0xb6, 0x68, 0x5b, 0x97, 0x95, 0x65, 0xd3, 0xc8, 0x49, 0x0e, 0xe3, 0x93, 0xe4, 0x78, 0x38, - 0x27, 0x97, 0x93, 0x36, 0x52, 0xa3, 0x74, 0x1c, 0x27, 0xed, 0xa4, 0x23, 0xc7, 0x4a, 0xec, 0x5a, - 0xb2, 0x34, 0x90, 0x9c, 0x34, 0x9d, 0xe9, 0xb0, 0x10, 0x09, 0x29, 0xac, 0x45, 0x82, 0x05, 0x41, - 0xb7, 0xea, 0x0b, 0x75, 0x3a, 0xd3, 0xbf, 0x7d, 0x8f, 0xbe, 0x40, 0xff, 0xf6, 0x35, 0xda, 0x01, - 0x78, 0xd1, 0xc5, 0x76, 0x3d, 0xf9, 0x25, 0x60, 0xf7, 0xfb, 0x16, 0xd8, 0x0b, 0x77, 0x21, 0xb8, - 0x39, 0x1c, 0x4f, 0x04, 0x75, 0x9d, 0x71, 0xcd, 0x66, 0x9c, 0xd6, 0x04, 0x09, 0x4f, 0xc3, 0x6a, - 0xc0, 0x99, 0x60, 0xa8, 0x92, 0xaa, 0xaa, 0x52, 0xb5, 0x75, 0x67, 0x1e, 0xe9, 0x3a, 0xd4, 0x17, - 0xee, 0xd0, 0xa5, 0x3c, 0x86, 0x6f, 0xdd, 0x5e, 0xd0, 0xfb, 0x82, 0xf2, 0x21, 0xb1, 0x69, 0xa2, - 0xbe, 0x35, 0xaf, 0x1e, 0xbb, 0x82, 0x72, 0x32, 0x0e, 0x2f, 0xd6, 0x86, 0xd4, 0x8e, 0xb8, 0x2b, - 0x26, 0x89, 0xf6, 0xce, 0x88, 0xb1, 0xd1, 0x98, 0xd6, 0xd4, 0x6e, 0x10, 0x0d, 0x6b, 0x4e, 0xc4, - 0x89, 0x70, 0x99, 0x9f, 0xb2, 0x17, 0xf5, 0xa1, 0xe0, 0x91, 0x2d, 0x62, 0xad, 0xf9, 0xbb, 0x06, - 0x25, 0x4c, 0x43, 0x16, 0x71, 0x9b, 0x86, 0x68, 0x0f, 0x8a, 0x9c, 0x7e, 0x1f, 0xd1, 0x50, 0x84, - 0x46, 0x6e, 0x7b, 0xf9, 0x41, 0xb9, 0x7e, 0xaf, 0x3a, 0xe7, 0x68, 0x35, 0xc3, 0x66, 0xab, 0xa6, - 0x2f, 0xf8, 0x04, 0x67, 0x3c, 0xf4, 0x02, 0xf2, 0x63, 0xd7, 0x73, 0x45, 0x68, 0x68, 0x1f, 0x64, - 0x21, 0x61, 0x6d, 0x7d, 0x0b, 0x95, 0x39, 0x05, 0x7a, 0x06, 0x2b, 0x3e, 0xf1, 0xa8, 0x91, 0xdb, - 0xce, 0x3d, 0x58, 0xaf, 0xdf, 0xbd, 0xd2, 0xdc, 0x31, 0xf1, 0x28, 0x56, 0x14, 0xf4, 0x2f, 0x58, - 0x3d, 0x23, 0xe3, 0x88, 0x1a, 0xda, 0x76, 0xee, 0x41, 0x09, 0xc7, 0x1b, 0xf3, 0x1b, 0x58, 0x9b, - 0xc5, 0xa2, 0x32, 0x14, 0x4e, 0x8e, 0x8f, 0x8e, 0x3b, 0x6f, 0x8f, 0xf5, 0x25, 0x54, 0x80, 0xe5, - 0x97, 0xdd, 0x13, 0x3d, 0x27, 0x17, 0xaf, 0xbb, 0x27, 0xba, 0x86, 0x00, 0xf2, 0xed, 0x66, 0xbb, - 0x83, 0xdf, 0xe9, 0xcb, 0x12, 0xda, 0xeb, 0x77, 0x70, 0xe3, 0x75, 0x53, 0x5f, 0x41, 0xd7, 0x61, - 0xb3, 0xd9, 0x3d, 0x68, 0xb6, 0x9b, 0xb8, 0xd1, 0xb2, 0x52, 0xf1, 0xaa, 0xf9, 0x6b, 0x0e, 0x36, - 0x70, 0xe4, 0x0b, 0xd7, 0xa3, 0x6d, 0x2a, 0x88, 0x43, 0x04, 0x41, 0x2f, 0x60, 0x45, 0x4c, 0x82, - 0xd4, 0x87, 0x87, 0x8b, 0x3e, 0xcc, 0xa3, 0xd3, 0x7d, 0x7f, 0x12, 0x50, 0xac, 0x78, 0xc8, 0x80, - 0xc2, 0x19, 0xe5, 0xa1, 0xcb, 0xfc, 0xc4, 0x95, 0x74, 0x8b, 0x6e, 0x40, 0x7e, 0x38, 0x26, 0x67, - 0x8c, 0x1b, 0xcb, 0x4a, 0x91, 0xec, 0xcc, 0xfb, 0x50, 0x9e, 0x31, 0x83, 0x4a, 0xb0, 0xda, 0xe9, - 0x1f, 0x34, 0xb1, 0xbe, 0x84, 0x2a, 0x50, 0x7a, 0xd5, 0x7a, 0xd7, 0x6f, 0x5a, 0xbd, 0xfd, 0x23, - 0x3d, 0x67, 0xfe, 0xa5, 0xc1, 0x5a, 0x9f, 0x84, 0xa7, 0xd9, 0x5d, 0x4d, 0x58, 0x73, 0xdc, 0xd0, - 0x66, 0x67, 0x94, 0x93, 0xc1, 0x38, 0xbe, 0x73, 0x11, 0xcf, 0xc9, 0xd0, 0x2e, 0x14, 0x78, 0x6c, - 0x5d, 0xdd, 0xa7, 0x5c, 0xbf, 0xf3, 0xcf, 0x2e, 0xe1, 0x14, 0x8e, 0x9e, 0x40, 0x41, 0xfe, 0xb2, - 0x48, 0x18, 0x2b, 0x8a, 0x79, 0xb3, 0x1a, 0x17, 0x68, 0x35, 0x2d, 0xd0, 0xea, 0x7e, 0x52, 0xc0, - 0x38, 0x45, 0xa2, 0x1d, 0x28, 0x70, 0x2a, 0xb8, 0x4b, 0x43, 0x63, 0x55, 0x91, 0x6e, 0x9d, 0xab, - 0x02, 0xc1, 0x27, 0x3d, 0xc1, 0x89, 0xa0, 0xa3, 0x09, 0x4e, 0xc1, 0xe8, 0x23, 0xd8, 0x4c, 0xaf, - 0x3d, 0xb1, 0xd2, 0x00, 0xe6, 0x55, 0x9c, 0xf4, 0x4c, 0xf1, 0x26, 0x89, 0xe4, 0x2e, 0x18, 0x0e, - 0x0d, 0x38, 0xb5, 0x89, 0xa0, 0x8e, 0x45, 0x39, 0x67, 0xdc, 0xf2, 0x68, 0x18, 0x92, 0x11, 0x35, - 0x0a, 0x8a, 0x73, 0x63, 0xaa, 0x6f, 0x4a, 0x75, 0x3b, 0xd6, 0xa2, 0x7b, 0x50, 0x51, 0x5f, 0x34, - 0x8f, 0x02, 0xe1, 0xca, 0x90, 0x15, 0x65, 0xc8, 0x0e, 0x96, 0xf0, 0xbc, 0x78, 0xef, 0x3a, 0x5c, - 0x9b, 0x13, 0x58, 0x71, 0x3d, 0xfe, 0xb1, 0x12, 0x67, 0xa0, 0x4f, 0xbd, 0x60, 0x4c, 0x04, 0x45, - 0xff, 0x07, 0xcd, 0x75, 0x54, 0xdc, 0x65, 0x78, 0xe6, 0x3d, 0x3d, 0xcc, 0x5a, 0x0b, 0xd6, 0x5c, - 0x07, 0xa1, 0xa4, 0xb0, 0xe2, 0xaa, 0x88, 0x8b, 0xe5, 0x29, 0x14, 0xbd, 0x24, 0xee, 0xaa, 0x28, - 0xca, 0xf5, 0xff, 0x2c, 0x18, 0x99, 0xcd, 0x37, 0xce, 0xc0, 0xe8, 0x33, 0x28, 0x65, 0x9d, 0x29, - 0xc9, 0xce, 0xed, 0x45, 0xe6, 0x24, 0xa0, 0xce, 0x61, 0x0a, 0xc2, 0x53, 0x3c, 0xaa, 0x41, 0xde, - 0x8e, 0x42, 0xc1, 0xbc, 0x24, 0x45, 0xff, 0x3e, 0x97, 0xd7, 0x9e, 0x6a, 0x3c, 0x38, 0x81, 0xa1, - 0x5d, 0x28, 0xd9, 0xcc, 0x17, 0xc4, 0xf5, 0x29, 0x57, 0x49, 0x29, 0xd7, 0x8d, 0x85, 0xd3, 0x5e, - 0xa6, 0xfa, 0x83, 0x25, 0x3c, 0x05, 0xa3, 0x4f, 0xa0, 0x70, 0xba, 0x1b, 0x5a, 0x01, 0x73, 0x8c, - 0x4d, 0xc5, 0xbb, 0xbe, 0xc0, 0x3b, 0xda, 0x0d, 0xbb, 0xcc, 0x39, 0x58, 0xc2, 0xf9, 0x53, 0xb5, - 0x42, 0x0f, 0x61, 0x53, 0x76, 0x6f, 0x4b, 0xc6, 0x27, 0x2b, 0x04, 0x99, 0xd4, 0x55, 0xbc, 0x21, - 0x15, 0xd2, 0xad, 0xb4, 0x0e, 0x0e, 0x41, 0x4f, 0x5b, 0xac, 0x25, 0xcf, 0xa4, 0x3f, 0x0a, 0x95, - 0xd0, 0xf3, 0x45, 0xde, 0x4b, 0x60, 0x2f, 0x63, 0x14, 0xde, 0x08, 0xe7, 0x05, 0xe8, 0x0b, 0xc8, - 0xdb, 0xcc, 0x1f, 0xba, 0x23, 0x43, 0x57, 0xbd, 0xf0, 0xfe, 0x05, 0x79, 0x48, 0xb3, 0x2e, 0x9d, - 0x1d, 0xba, 0xa3, 0xa4, 0x19, 0xc6, 0xb4, 0xad, 0x67, 0x50, 0x9e, 0x11, 0x23, 0x1d, 0x96, 0x4f, - 0xe9, 0x44, 0x55, 0x46, 0x09, 0xcb, 0xe5, 0xc5, 0x1d, 0xee, 0xb9, 0xb6, 0x9b, 0xdb, 0x2b, 0x42, - 0x5e, 0x10, 0x3e, 0xa2, 0xc2, 0xdc, 0x81, 0x4a, 0x16, 0xc8, 0x2e, 0xe3, 0x02, 0xdd, 0x85, 0xf5, - 0x2c, 0x98, 0x56, 0xc0, 0xb8, 0x50, 0x16, 0x2b, 0xb8, 0x62, 0xcf, 0xc2, 0xcc, 0x3f, 0x35, 0x28, - 0x65, 0x44, 0x79, 0x92, 0xeb, 0xc9, 0x6f, 0x21, 0x3e, 0x3d, 0xde, 0xc8, 0xc6, 0x64, 0x33, 0xcf, - 0x23, 0xbe, 0xa3, 0xda, 0x7d, 0x09, 0xa7, 0x5b, 0x59, 0x99, 0x84, 0x8f, 0x42, 0x63, 0x59, 0x89, - 0xd5, 0x1a, 0xed, 0x40, 0x89, 0xa7, 0xfd, 0x3a, 0x29, 0x30, 0xe3, 0xb2, 0x7e, 0x8e, 0xa7, 0x50, - 0xf4, 0x08, 0x96, 0xa9, 0x7f, 0x66, 0xac, 0xaa, 0x20, 0x2e, 0x16, 0xf3, 0x11, 0x9d, 0xbc, 0x91, - 0x5e, 0x77, 0x89, 0xcb, 0xb1, 0xc4, 0xa1, 0xa7, 0x59, 0xd8, 0xf3, 0x57, 0x32, 0xf6, 0x34, 0x23, - 0x97, 0x86, 0x1b, 0xd5, 0x61, 0x55, 0x86, 0x23, 0x34, 0x0a, 0x8a, 0x77, 0xeb, 0xb2, 0x72, 0x94, - 0xe1, 0xc1, 0x31, 0x14, 0x35, 0xa0, 0x2c, 0x3f, 0x1e, 0x2b, 0x39, 0xb1, 0xa4, 0xbc, 0xda, 0x5e, - 0x60, 0xee, 0x13, 0x41, 0x5a, 0x8c, 0x38, 0xae, 0x3f, 0x8a, 0xf3, 0x89, 0x41, 0x92, 0xe2, 0xb5, - 0xf9, 0x9b, 0x06, 0x70, 0xd8, 0x49, 0xdb, 0x17, 0x3a, 0x82, 0x8a, 0xc3, 0x7e, 0xf0, 0xc7, 0x8c, - 0x38, 0x96, 0xc7, 0x9c, 0x74, 0x6a, 0x2c, 0x0e, 0xd2, 0x29, 0xa3, 0xba, 0x9f, 0xc0, 0xdb, 0xcc, - 0xa1, 0x78, 0xcd, 0x99, 0xd9, 0xa1, 0x26, 0x94, 0xa3, 0x60, 0x6a, 0x4a, 0x53, 0xa6, 0xfe, 0x77, - 0xb9, 0xa9, 0x93, 0x20, 0x33, 0x04, 0x51, 0xb6, 0x36, 0x5b, 0xb0, 0x36, 0x7b, 0x08, 0x42, 0xb0, - 0xbe, 0xdf, 0x79, 0x7b, 0xdc, 0xea, 0x34, 0xf6, 0xad, 0x66, 0xe3, 0xb5, 0x1a, 0x2c, 0xd7, 0x60, - 0x23, 0x93, 0xf5, 0xfa, 0xb8, 0xd9, 0x68, 0xeb, 0xb9, 0x58, 0x68, 0x1d, 0x77, 0xfa, 0x56, 0xaa, - 0xd3, 0x35, 0xb3, 0x09, 0x30, 0x3d, 0x47, 0xda, 0x3a, 0xe9, 0x2a, 0x56, 0xe7, 0xd8, 0x6a, 0x7e, - 0x75, 0xd8, 0xd7, 0x97, 0x90, 0x0e, 0x6b, 0x89, 0x2c, 0xb6, 0x9e, 0x43, 0x9b, 0x50, 0x49, 0x0c, - 0xc5, 0x0a, 0x5d, 0x33, 0x7f, 0xd6, 0x60, 0xf3, 0x5c, 0x64, 0x65, 0x49, 0x52, 0x5f, 0x4e, 0x29, - 0x27, 0x19, 0x5d, 0xe9, 0x16, 0xdd, 0x06, 0x70, 0xfd, 0x20, 0x12, 0x56, 0x40, 0xc4, 0xfb, 0xe4, - 0x8b, 0x29, 0x29, 0x49, 0x97, 0x88, 0xf7, 0xe8, 0xbf, 0x50, 0x66, 0x91, 0xc8, 0xf4, 0xf1, 0x3c, - 0x85, 0x58, 0xa4, 0x00, 0x87, 0x90, 0x1f, 0x32, 0xee, 0x91, 0x78, 0x74, 0xad, 0xd7, 0x1f, 0x5f, - 0x95, 0xe5, 0x6a, 0x2b, 0x7e, 0xc9, 0xb5, 0x49, 0xf0, 0x4a, 0x11, 0x71, 0x62, 0x00, 0x3d, 0x87, - 0xb2, 0xcb, 0xac, 0x30, 0x89, 0x7a, 0xd2, 0x32, 0x6f, 0x5e, 0x9a, 0x16, 0x0c, 0x2e, 0x4b, 0xd7, - 0xe6, 0x63, 0xd0, 0x17, 0xed, 0xa2, 0x22, 0xac, 0x7c, 0xd9, 0xeb, 0xc8, 0x07, 0x4c, 0x11, 0x56, - 0xde, 0x35, 0xda, 0x2d, 0x3d, 0x27, 0x67, 0x7e, 0x17, 0x77, 0xfa, 0x1d, 0x5d, 0x33, 0x7f, 0x82, - 0x7c, 0xdc, 0x13, 0xd1, 0xe7, 0x33, 0xc3, 0x21, 0x77, 0x61, 0xad, 0x1e, 0xed, 0x86, 0x9d, 0xc1, - 0x77, 0xd4, 0x16, 0x17, 0x4c, 0x88, 0x3a, 0x14, 0x03, 0xe6, 0x58, 0x61, 0x40, 0xed, 0x64, 0xf0, - 0x5f, 0xda, 0xe6, 0x0b, 0x01, 0x73, 0x7a, 0x01, 0xb5, 0xcd, 0x5f, 0x34, 0xd8, 0x3c, 0x67, 0x13, - 0xed, 0x43, 0x7e, 0x4c, 0x06, 0x74, 0x9c, 0x3e, 0x34, 0x3f, 0xbe, 0xea, 0x16, 0xd5, 0x96, 0x82, - 0xa7, 0x8f, 0x45, 0xb5, 0x41, 0x3d, 0x28, 0x13, 0xdf, 0x67, 0x42, 0xbd, 0x17, 0xd2, 0x17, 0xe7, - 0xe3, 0x2b, 0x4d, 0x35, 0xa6, 0x9c, 0xd8, 0xde, 0xac, 0x15, 0xd9, 0x74, 0x67, 0xce, 0xfa, 0x90, - 0xa6, 0xbb, 0xf5, 0x02, 0xf4, 0x45, 0xdb, 0x1f, 0xd4, 0xb4, 0x77, 0xbe, 0xfe, 0x74, 0xe4, 0x8a, - 0xf7, 0xd1, 0xa0, 0x6a, 0x33, 0xaf, 0xa6, 0xdc, 0x60, 0x7c, 0x54, 0xcb, 0xfe, 0x00, 0x8c, 0xa8, - 0x5f, 0x0b, 0x06, 0x8f, 0x46, 0xac, 0x36, 0xf7, 0x9f, 0x60, 0x90, 0x57, 0xd1, 0x7f, 0xf2, 0x77, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x26, 0xb8, 0x95, 0xe9, 0xb2, 0x0c, 0x00, 0x00, + // 1500 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x57, 0xfd, 0x72, 0x1b, 0x49, + 0x11, 0xb7, 0x56, 0xd6, 0x57, 0xcb, 0x4a, 0xd6, 0x73, 0xe4, 0xd8, 0x98, 0x24, 0xa4, 0xb6, 0xb8, + 0x5c, 0x38, 0x38, 0x89, 0xe8, 0xae, 0x1c, 0xdf, 0x41, 0x85, 0x92, 0xa3, 0x4d, 0x2c, 0xac, 0xaf, + 0x1a, 0xc9, 0x09, 0xa1, 0x8a, 0x5a, 0xc6, 0xbb, 0x23, 0x65, 0xf1, 0x6a, 0x67, 0x3d, 0x3b, 0x6b, + 0x10, 0xff, 0xf3, 0x02, 0xbc, 0x04, 0x45, 0x15, 0xff, 0xf2, 0x1e, 0x3c, 0x05, 0xaf, 0x01, 0x35, + 0xb3, 0x1f, 0xfa, 0xb0, 0x8d, 0x2b, 0x7f, 0x69, 0xa6, 0xfb, 0xf7, 0xeb, 0xd9, 0xe9, 0xee, 0xe9, + 0x6e, 0xc1, 0xc3, 0x99, 0xbf, 0x14, 0xd4, 0x73, 0xfd, 0x96, 0xc3, 0x38, 0x6d, 0x09, 0x12, 0x5d, + 0x44, 0xcd, 0x90, 0x33, 0xc1, 0x50, 0x23, 0x53, 0x35, 0xa5, 0xea, 0xe0, 0xc9, 0x26, 0xd2, 0x73, + 0x69, 0x20, 0xbc, 0x99, 0x47, 0x79, 0x02, 0x3f, 0x78, 0xbc, 0xa5, 0x0f, 0x04, 0xe5, 0x33, 0xe2, + 0xd0, 0x54, 0xfd, 0x68, 0x53, 0xed, 0x7b, 0x82, 0x72, 0xe2, 0x47, 0x37, 0x6b, 0x23, 0xea, 0xc4, + 0xdc, 0x13, 0xcb, 0x54, 0xfb, 0x64, 0xce, 0xd8, 0xdc, 0xa7, 0x2d, 0xb5, 0x3b, 0x8f, 0x67, 0x2d, + 0x37, 0xe6, 0x44, 0x78, 0x2c, 0xc8, 0xd8, 0xdb, 0xfa, 0x48, 0xf0, 0xd8, 0x11, 0x89, 0xd6, 0xfc, + 0xb7, 0x06, 0x35, 0x4c, 0x23, 0x16, 0x73, 0x87, 0x46, 0xe8, 0x18, 0xaa, 0x9c, 0x5e, 0xc6, 0x34, + 0x12, 0x91, 0x51, 0x78, 0x5a, 0x7c, 0x5e, 0x6f, 0x3f, 0x6b, 0x6e, 0x5c, 0xb4, 0x99, 0x63, 0xf3, + 0x95, 0x15, 0x08, 0xbe, 0xc4, 0x39, 0x0f, 0xbd, 0x82, 0xb2, 0xef, 0x2d, 0x3c, 0x11, 0x19, 0xda, + 0x27, 0x59, 0x48, 0x59, 0x07, 0x7f, 0x80, 0xc6, 0x86, 0x02, 0x7d, 0x07, 0xbb, 0x01, 0x59, 0x50, + 0xa3, 0xf0, 0xb4, 0xf0, 0xfc, 0x5e, 0xfb, 0x8b, 0x3b, 0xcd, 0x0d, 0xc9, 0x82, 0x62, 0x45, 0x41, + 0x3f, 0x80, 0xd2, 0x15, 0xf1, 0x63, 0x6a, 0x68, 0x4f, 0x0b, 0xcf, 0x6b, 0x38, 0xd9, 0x98, 0xbf, + 0x87, 0xbd, 0x75, 0x2c, 0xaa, 0x43, 0xe5, 0x6c, 0x78, 0x3a, 0x1c, 0xbd, 0x1f, 0xea, 0x3b, 0xa8, + 0x02, 0xc5, 0xd7, 0xe3, 0x33, 0xbd, 0x20, 0x17, 0x6f, 0xc7, 0x67, 0xba, 0x86, 0x00, 0xca, 0x03, + 0x6b, 0x30, 0xc2, 0x1f, 0xf4, 0xa2, 0x84, 0x4e, 0xa6, 0x23, 0xdc, 0x79, 0x6b, 0xe9, 0xbb, 0xe8, + 0x01, 0xec, 0x5b, 0xe3, 0x13, 0x6b, 0x60, 0xe1, 0x4e, 0xdf, 0xce, 0xc4, 0x25, 0xf3, 0x9f, 0x05, + 0xb8, 0x8f, 0xe3, 0x40, 0x78, 0x0b, 0x3a, 0xa0, 0x82, 0xb8, 0x44, 0x10, 0xf4, 0x0a, 0x76, 0xc5, + 0x32, 0xcc, 0xee, 0xf0, 0xd5, 0xf6, 0x1d, 0x36, 0xd1, 0xd9, 0x7e, 0xba, 0x0c, 0x29, 0x56, 0x3c, + 0x64, 0x40, 0xe5, 0x8a, 0xf2, 0xc8, 0x63, 0x41, 0x7a, 0x95, 0x6c, 0x8b, 0x3e, 0x87, 0xf2, 0xcc, + 0x27, 0x57, 0x8c, 0x1b, 0x45, 0xa5, 0x48, 0x77, 0xe6, 0x97, 0x50, 0x5f, 0x33, 0x83, 0x6a, 0x50, + 0x1a, 0x4d, 0x4f, 0x2c, 0xac, 0xef, 0xa0, 0x06, 0xd4, 0xde, 0xf4, 0x3f, 0x4c, 0x2d, 0x7b, 0xd2, + 0x3d, 0xd5, 0x0b, 0xe6, 0x7f, 0x35, 0xd8, 0x9b, 0x92, 0xe8, 0x22, 0xff, 0x56, 0x13, 0xf6, 0x5c, + 0x2f, 0x72, 0xd8, 0x15, 0xe5, 0xe4, 0xdc, 0x4f, 0xbe, 0xb9, 0x8a, 0x37, 0x64, 0xe8, 0x08, 0x2a, + 0x3c, 0xb1, 0xae, 0xbe, 0xa7, 0xde, 0x7e, 0xf2, 0xff, 0xaf, 0x84, 0x33, 0x38, 0xfa, 0x06, 0x2a, + 0xf2, 0x97, 0xc5, 0xc2, 0xd8, 0x55, 0xcc, 0x87, 0xcd, 0x24, 0x41, 0x9b, 0x59, 0x82, 0x36, 0xbb, + 0x69, 0x02, 0xe3, 0x0c, 0x89, 0x0e, 0xa1, 0xc2, 0xa9, 0xe0, 0x1e, 0x8d, 0x8c, 0x92, 0x22, 0x3d, + 0xba, 0x96, 0x05, 0x82, 0x2f, 0x27, 0x82, 0x13, 0x41, 0xe7, 0x4b, 0x9c, 0x81, 0xd1, 0xcf, 0x60, + 0x3f, 0xfb, 0xec, 0xa5, 0x9d, 0x39, 0xb0, 0xac, 0xfc, 0xa4, 0xe7, 0x8a, 0x77, 0xa9, 0x27, 0x8f, + 0xc0, 0x70, 0x69, 0xc8, 0xa9, 0x43, 0x04, 0x75, 0x6d, 0xca, 0x39, 0xe3, 0xf6, 0x82, 0x46, 0x11, + 0x99, 0x53, 0xa3, 0xa2, 0x38, 0x9f, 0xaf, 0xf4, 0x96, 0x54, 0x0f, 0x12, 0x2d, 0x7a, 0x06, 0x0d, + 0xf5, 0xa2, 0x79, 0x1c, 0x0a, 0x4f, 0xba, 0xac, 0x2a, 0x5d, 0x76, 0xb2, 0x83, 0x37, 0xc5, 0xc7, + 0x0f, 0xe0, 0xb3, 0x0d, 0x81, 0x9d, 0xe4, 0xe3, 0x5f, 0x4b, 0x49, 0x04, 0xa6, 0x74, 0x11, 0xfa, + 0x44, 0x50, 0xf4, 0x53, 0xd0, 0x3c, 0x57, 0xf9, 0x5d, 0xba, 0x67, 0xf3, 0xa6, 0xbd, 0xbc, 0xb4, + 0x60, 0xcd, 0x73, 0x11, 0x4a, 0x13, 0x2b, 0xc9, 0x8a, 0x24, 0x59, 0x5e, 0x42, 0x75, 0x91, 0xfa, + 0x5d, 0x25, 0x45, 0xbd, 0xfd, 0xa3, 0x2d, 0x23, 0xeb, 0xf1, 0xc6, 0x39, 0x18, 0xfd, 0x12, 0x6a, + 0x79, 0x65, 0x4a, 0xa3, 0xf3, 0x78, 0x9b, 0xb9, 0x0c, 0xa9, 0xdb, 0xcb, 0x40, 0x78, 0x85, 0x47, + 0x2d, 0x28, 0x3b, 0x71, 0x24, 0xd8, 0x22, 0x0d, 0xd1, 0x0f, 0xaf, 0xc5, 0x75, 0xa2, 0x0a, 0x0f, + 0x4e, 0x61, 0xe8, 0x08, 0x6a, 0x0e, 0x0b, 0x04, 0xf1, 0x02, 0xca, 0x55, 0x50, 0xea, 0x6d, 0x63, + 0xeb, 0xb4, 0xd7, 0x99, 0xfe, 0x64, 0x07, 0xaf, 0xc0, 0xe8, 0x17, 0x50, 0xb9, 0x38, 0x8a, 0xec, + 0x90, 0xb9, 0xc6, 0xbe, 0xe2, 0x3d, 0xd8, 0xe2, 0x9d, 0x1e, 0x45, 0x63, 0xe6, 0x9e, 0xec, 0xe0, + 0xf2, 0x85, 0x5a, 0xa1, 0x67, 0x50, 0x8c, 0x2e, 0x7d, 0x03, 0x29, 0x34, 0xda, 0x42, 0x4f, 0x2e, + 0xfd, 0x93, 0x1d, 0x2c, 0x01, 0xe8, 0x2b, 0xd8, 0x97, 0x55, 0xde, 0x96, 0x7e, 0xcc, 0x13, 0x46, + 0x06, 0xbf, 0x84, 0xef, 0x4b, 0x85, 0xbc, 0x7e, 0x96, 0x2f, 0x3d, 0xd0, 0xb3, 0x52, 0x6c, 0xcb, + 0x6f, 0xa3, 0x7f, 0x16, 0x2a, 0xf0, 0xd7, 0x1f, 0xc3, 0x24, 0x85, 0xbd, 0x4e, 0x50, 0xf8, 0x7e, + 0xb4, 0x29, 0x40, 0xbf, 0x86, 0xb2, 0xc3, 0x82, 0x99, 0x37, 0x37, 0x74, 0x55, 0x33, 0xbf, 0xbc, + 0x21, 0x5e, 0x59, 0x76, 0x48, 0xa7, 0xcc, 0xbc, 0x79, 0x5a, 0x34, 0x13, 0xda, 0xc1, 0x77, 0x50, + 0x5f, 0x13, 0x23, 0x1d, 0x8a, 0x17, 0x74, 0xa9, 0x32, 0xa8, 0x86, 0xe5, 0xf2, 0xe6, 0x4a, 0xf8, + 0xbd, 0x76, 0x54, 0x38, 0xae, 0x42, 0x59, 0x10, 0x3e, 0xa7, 0xc2, 0x3c, 0x84, 0x46, 0xee, 0xf0, + 0x31, 0xe3, 0x02, 0x7d, 0x01, 0xf7, 0x72, 0xa7, 0xdb, 0x21, 0xe3, 0x42, 0x59, 0x6c, 0xe0, 0x86, + 0xb3, 0x0e, 0x33, 0xff, 0xa3, 0x41, 0x2d, 0x27, 0xca, 0x93, 0xbc, 0x85, 0x7c, 0x33, 0xc9, 0xe9, + 0xc9, 0x46, 0x16, 0x30, 0x87, 0x2d, 0x16, 0x24, 0x70, 0x55, 0x5b, 0xa8, 0xe1, 0x6c, 0x2b, 0x33, + 0x98, 0xf0, 0x79, 0x64, 0x14, 0x95, 0x58, 0xad, 0xd1, 0x21, 0xd4, 0x78, 0x56, 0xd7, 0xd3, 0x44, + 0x34, 0x6e, 0xab, 0xfb, 0x78, 0x05, 0x45, 0x5f, 0x43, 0x91, 0x06, 0x57, 0x46, 0x49, 0x39, 0x71, + 0x3b, 0xe9, 0x4f, 0xe9, 0xf2, 0x9d, 0xbc, 0xf5, 0x98, 0x78, 0x1c, 0x4b, 0x1c, 0x7a, 0x99, 0xbb, + 0xbd, 0x7c, 0x27, 0xe3, 0x58, 0x33, 0x0a, 0x99, 0xbb, 0x51, 0x1b, 0x4a, 0xd2, 0x1d, 0x91, 0x51, + 0x51, 0xbc, 0x47, 0xb7, 0xa5, 0xad, 0x74, 0x0f, 0x4e, 0xa0, 0xa8, 0x03, 0x75, 0xf9, 0xc8, 0xec, + 0xf4, 0xc4, 0x9a, 0xba, 0xd5, 0xd3, 0x2d, 0x66, 0x97, 0x08, 0xd2, 0x67, 0xc4, 0xf5, 0x82, 0x79, + 0x12, 0x4f, 0x0c, 0x92, 0x94, 0xac, 0xcd, 0x7f, 0x69, 0x00, 0xbd, 0x51, 0x56, 0xe6, 0xd0, 0x29, + 0x34, 0x5c, 0xf6, 0xa7, 0xc0, 0x67, 0xc4, 0xb5, 0x17, 0xcc, 0xcd, 0xba, 0xcb, 0x76, 0xc3, 0x5d, + 0x31, 0x9a, 0xdd, 0x14, 0x3e, 0x60, 0x2e, 0xc5, 0x7b, 0xee, 0xda, 0x0e, 0x59, 0x50, 0x8f, 0xc3, + 0x95, 0x29, 0x4d, 0x99, 0xfa, 0xc9, 0xed, 0xa6, 0xce, 0xc2, 0xdc, 0x10, 0xc4, 0xf9, 0xda, 0xec, + 0xc3, 0xde, 0xfa, 0x21, 0x08, 0xc1, 0xbd, 0xee, 0xe8, 0xfd, 0xb0, 0x3f, 0xea, 0x74, 0x6d, 0xab, + 0xf3, 0x56, 0x35, 0xa0, 0xcf, 0xe0, 0x7e, 0x2e, 0x9b, 0x4c, 0xb1, 0xd5, 0x19, 0xe8, 0x85, 0x44, + 0x68, 0x0f, 0x47, 0x53, 0x3b, 0xd3, 0xe9, 0x9a, 0x69, 0x01, 0xac, 0xce, 0x91, 0xb6, 0xce, 0xc6, + 0x8a, 0x35, 0x1a, 0xda, 0xd6, 0x6f, 0x7b, 0x53, 0x7d, 0x07, 0xe9, 0xb0, 0x97, 0xca, 0x12, 0xeb, + 0x05, 0xb4, 0x0f, 0x8d, 0xd4, 0x50, 0xa2, 0xd0, 0x35, 0xf3, 0xef, 0x1a, 0xec, 0x5f, 0xf3, 0xac, + 0x4c, 0x49, 0x1a, 0xc8, 0x6e, 0xe6, 0xa6, 0x2d, 0x2e, 0xdb, 0xa2, 0xc7, 0x00, 0x5e, 0x10, 0xc6, + 0xc2, 0x0e, 0x89, 0xf8, 0x98, 0xbe, 0x98, 0x9a, 0x92, 0x8c, 0x89, 0xf8, 0x88, 0x7e, 0x0c, 0x75, + 0x16, 0x8b, 0x5c, 0x9f, 0xf4, 0x5d, 0x48, 0x44, 0x0a, 0xd0, 0x83, 0xf2, 0x8c, 0xf1, 0x05, 0x49, + 0x5a, 0xdc, 0xbd, 0xf6, 0x8b, 0xbb, 0xa2, 0xdc, 0xec, 0x27, 0x13, 0xdf, 0x80, 0x84, 0x6f, 0x14, + 0x11, 0xa7, 0x06, 0xd0, 0xf7, 0x50, 0xf7, 0x98, 0x1d, 0xa5, 0x5e, 0x4f, 0x4b, 0xeb, 0xc3, 0x5b, + 0xc3, 0x82, 0xc1, 0x63, 0xd9, 0xda, 0x7c, 0x01, 0xfa, 0xb6, 0x5d, 0x54, 0x85, 0xdd, 0xdf, 0x4c, + 0x46, 0x72, 0xd0, 0xa9, 0xc2, 0xee, 0x87, 0xce, 0xa0, 0xaf, 0x17, 0xe4, 0x6c, 0x30, 0xc6, 0xa3, + 0xe9, 0x48, 0xd7, 0xcc, 0xbf, 0x40, 0x39, 0xa9, 0x9d, 0xe8, 0x57, 0x6b, 0x4d, 0xa4, 0x70, 0x63, + 0xae, 0x9e, 0x1e, 0x45, 0xa3, 0xf3, 0x3f, 0x52, 0x47, 0xdc, 0xd0, 0x49, 0xda, 0x50, 0x0d, 0x99, + 0x6b, 0x47, 0x21, 0x75, 0xd2, 0x01, 0xe1, 0xd6, 0x76, 0x50, 0x09, 0x99, 0x3b, 0x09, 0xa9, 0x63, + 0xfe, 0x43, 0x83, 0xfd, 0x6b, 0x36, 0x51, 0x17, 0xca, 0x3e, 0x39, 0xa7, 0x7e, 0x36, 0x90, 0xfe, + 0xfc, 0xae, 0xaf, 0x68, 0xf6, 0x15, 0x3c, 0x1b, 0x2a, 0xd5, 0x06, 0x4d, 0xa0, 0x4e, 0x82, 0x80, + 0x09, 0x35, 0x57, 0x64, 0x93, 0xe9, 0x8b, 0x3b, 0x4d, 0x75, 0x56, 0x9c, 0xc4, 0xde, 0xba, 0x15, + 0x59, 0x74, 0xd7, 0xce, 0xfa, 0x94, 0xa2, 0x7b, 0xf0, 0x0a, 0xf4, 0x6d, 0xdb, 0x9f, 0xc2, 0x37, + 0xff, 0x56, 0x80, 0xe2, 0xe4, 0xd2, 0x47, 0x8f, 0xa0, 0x16, 0x09, 0x22, 0xe8, 0x82, 0x06, 0x22, + 0x65, 0xae, 0x04, 0xe8, 0x5b, 0xa8, 0xb8, 0x1e, 0xf1, 0xa9, 0x23, 0xd2, 0xf7, 0x7c, 0x70, 0xbd, + 0xf3, 0x35, 0xbb, 0x09, 0x02, 0x67, 0x50, 0xf3, 0x25, 0x54, 0x52, 0x99, 0x1c, 0x15, 0xcf, 0x86, + 0x5d, 0xeb, 0x4d, 0x6f, 0x68, 0x75, 0x93, 0x94, 0xe9, 0x0c, 0x27, 0x3d, 0xbd, 0x20, 0x57, 0x27, + 0xbd, 0x77, 0x96, 0xae, 0xad, 0x06, 0xcb, 0xe2, 0xf1, 0xe1, 0xef, 0xbe, 0x9d, 0x7b, 0xe2, 0x63, + 0x7c, 0xde, 0x74, 0xd8, 0xa2, 0xa5, 0x4e, 0x62, 0x7c, 0xde, 0xca, 0xff, 0xbd, 0xcc, 0x69, 0xd0, + 0x0a, 0xcf, 0xbf, 0x9e, 0xb3, 0xd6, 0xc6, 0x1f, 0x9a, 0xf3, 0xb2, 0x4a, 0x89, 0x6f, 0xfe, 0x17, + 0x00, 0x00, 0xff, 0xff, 0xce, 0x0c, 0xa0, 0xf3, 0x6f, 0x0d, 0x00, 0x00, } diff --git a/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.validate.go b/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.validate.go index e4049f70d81..83321b3a52e 100644 --- a/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.validate.go +++ b/flyteidl/gen/pb-go/flyteidl/core/tasks.pb.validate.go @@ -399,6 +399,18 @@ func (m *TaskTemplate) Validate() error { } } + case *TaskTemplate_Sql: + + if v, ok := interface{}(m.GetSql()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TaskTemplateValidationError{ + field: "Sql", + reason: "embedded message failed validation", + cause: err, + } + } + } + } return nil @@ -964,6 +976,74 @@ var _ interface { ErrorName() string } = K8SObjectMetadataValidationError{} +// Validate checks the field values on Sql with the rules defined in the proto +// definition for this message. If any rules are violated, an error is returned. +func (m *Sql) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Statement + + // no validation rules for Dialect + + return nil +} + +// SqlValidationError is the validation error returned by Sql.Validate if the +// designated constraints aren't met. +type SqlValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SqlValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SqlValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SqlValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SqlValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SqlValidationError) ErrorName() string { return "SqlValidationError" } + +// Error satisfies the builtin error interface +func (e SqlValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSql.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SqlValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SqlValidationError{} + // Validate checks the field values on Resources_ResourceEntry with the rules // defined in the proto definition for this message. If any rules are // violated, an error is returned. diff --git a/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json b/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json index 7fcbeea19b0..ebf044de9f3 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json +++ b/flyteidl/gen/pb-go/flyteidl/service/admin.swagger.json @@ -3051,6 +3051,17 @@ "default": "DESCENDING", "description": " - DESCENDING: By default, fields are sorted in descending order." }, + "SqlDialect": { + "type": "string", + "enum": [ + "UNDEFINED", + "ANSI", + "HIVE", + "OTHER" + ], + "default": "UNDEFINED", + "description": "The dialect of the SQL statement. This is used to validate and parse SQL statements at compilation time to avoid\nexpensive runtime operations. If set to an unsupported dialect, no validation will be done on the statement.\nWe support the following dialect: ansi, hive." + }, "TaskExecutionMetadataInstanceClass": { "type": "string", "enum": [ @@ -5833,6 +5844,19 @@ "default": "NONE", "description": "Define a set of simple types." }, + "coreSql": { + "type": "object", + "properties": { + "statement": { + "type": "string", + "title": "The actual query to run, the query can have templated parameters.\nWe use Flyte's Golang templating format for Query templating.\nRefer to the templating documentation.\nhttps://docs.flyte.org/projects/cookbook/en/latest/auto/integrations/external_services/hive/hive.html#sphx-glr-auto-integrations-external-services-hive-hive-py\nFor example,\ninsert overwrite directory '{{ .rawOutputDataPrefix }}' stored as parquet\nselect *\nfrom my_table\nwhere ds = '{{ .Inputs.ds }}'" + }, + "dialect": { + "$ref": "#/definitions/SqlDialect" + } + }, + "description": "Sql represents a generic sql workload with a statement and dialect." + }, "coreTaskExecutionIdentifier": { "type": "object", "properties": { @@ -5970,6 +5994,9 @@ "k8s_pod": { "$ref": "#/definitions/coreK8sPod" }, + "sql": { + "$ref": "#/definitions/coreSql" + }, "task_type_version": { "type": "integer", "format": "int32", diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md index 87ea2994c86..fcf603a5b20 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/README.md @@ -246,6 +246,7 @@ Class | Method | HTTP request | Description - [CoreSecret](docs/CoreSecret.md) - [CoreSecurityContext](docs/CoreSecurityContext.md) - [CoreSimpleType](docs/CoreSimpleType.md) + - [CoreSql](docs/CoreSql.md) - [CoreTaskExecutionIdentifier](docs/CoreTaskExecutionIdentifier.md) - [CoreTaskExecutionPhase](docs/CoreTaskExecutionPhase.md) - [CoreTaskLog](docs/CoreTaskLog.md) @@ -300,6 +301,7 @@ Class | Method | HTTP request | Description - [SchemaTypeSchemaColumn](docs/SchemaTypeSchemaColumn.md) - [SecretMountType](docs/SecretMountType.md) - [SortDirection](docs/SortDirection.md) + - [SqlDialect](docs/SqlDialect.md) - [TaskExecutionMetadataInstanceClass](docs/TaskExecutionMetadataInstanceClass.md) - [TaskLogMessageFormat](docs/TaskLogMessageFormat.md) - [WorkflowMetadataOnFailurePolicy](docs/WorkflowMetadataOnFailurePolicy.md) diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml index d36eef9dfa8..10d2069f486 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/api/swagger.yaml @@ -2749,6 +2749,18 @@ definitions: - "DESCENDING" - "ASCENDING" default: "DESCENDING" + SqlDialect: + type: "string" + description: "The dialect of the SQL statement. This is used to validate and parse\ + \ SQL statements at compilation time to avoid\nexpensive runtime operations.\ + \ If set to an unsupported dialect, no validation will be done on the statement.\n\ + We support the following dialect: ansi, hive." + enum: + - "UNDEFINED" + - "ANSI" + - "HIVE" + - "OTHER" + default: "UNDEFINED" TaskExecutionMetadataInstanceClass: type: "string" description: "Includes the broad category of machine used for this specific task\ @@ -8805,6 +8817,9 @@ definitions: group_version: "group_version" key: "key" group: "group" + sql: + dialect: {} + statement: "statement" - template: container: args: @@ -9060,6 +9075,9 @@ definitions: group_version: "group_version" key: "key" group: "group" + sql: + dialect: {} + statement: "statement" primary: template: outputs: @@ -10864,6 +10882,9 @@ definitions: group_version: "group_version" key: "key" group: "group" + sql: + dialect: {} + statement: "statement" adminTaskClosure: type: "object" properties: @@ -11135,6 +11156,9 @@ definitions: group_version: "group_version" key: "key" group: "group" + sql: + dialect: {} + statement: "statement" adminTaskCreateRequest: type: "object" properties: @@ -11718,6 +11742,9 @@ definitions: group_version: "group_version" key: "key" group: "group" + sql: + dialect: {} + statement: "statement" - id: domain: "domain" resource_type: {} @@ -11982,6 +12009,9 @@ definitions: group_version: "group_version" key: "key" group: "group" + sql: + dialect: {} + statement: "statement" token: "token" adminTaskResourceAttributes: type: "object" @@ -14206,6 +14236,9 @@ definitions: group_version: "group_version" key: "key" group: "group" + sql: + dialect: {} + statement: "statement" - template: container: args: @@ -14461,6 +14494,9 @@ definitions: group_version: "group_version" key: "key" group: "group" + sql: + dialect: {} + statement: "statement" primary: template: outputs: @@ -17669,6 +17705,9 @@ definitions: group_version: "group_version" key: "key" group: "group" + sql: + dialect: {} + statement: "statement" - template: container: args: @@ -17924,6 +17963,9 @@ definitions: group_version: "group_version" key: "key" group: "group" + sql: + dialect: {} + statement: "statement" primary: template: outputs: @@ -21068,6 +21110,9 @@ definitions: group_version: "group_version" key: "key" group: "group" + sql: + dialect: {} + statement: "statement" - template: container: args: @@ -21323,6 +21368,9 @@ definitions: group_version: "group_version" key: "key" group: "group" + sql: + dialect: {} + statement: "statement" primary: template: outputs: @@ -24380,6 +24428,9 @@ definitions: group_version: "group_version" key: "key" group: "group" + sql: + dialect: {} + statement: "statement" - template: container: args: @@ -24635,6 +24686,9 @@ definitions: group_version: "group_version" key: "key" group: "group" + sql: + dialect: {} + statement: "statement" primary: template: outputs: @@ -26291,6 +26345,9 @@ definitions: group_version: "group_version" key: "key" group: "group" + sql: + dialect: {} + statement: "statement" coreCompiledWorkflow: type: "object" properties: @@ -29377,6 +29434,9 @@ definitions: group_version: "group_version" key: "key" group: "group" + sql: + dialect: {} + statement: "statement" - template: container: args: @@ -29632,6 +29692,9 @@ definitions: group_version: "group_version" key: "key" group: "group" + sql: + dialect: {} + statement: "statement" primary: template: outputs: @@ -32298,6 +32361,22 @@ definitions: - "ERROR" - "STRUCT" default: "NONE" + coreSql: + type: "object" + properties: + statement: + type: "string" + title: "The actual query to run, the query can have templated parameters.\n\ + We use Flyte's Golang templating format for Query templating.\nRefer to\ + \ the templating documentation.\nhttps://docs.flyte.org/projects/cookbook/en/latest/auto/integrations/external_services/hive/hive.html#sphx-glr-auto-integrations-external-services-hive-hive-py\n\ + For example,\ninsert overwrite directory '{{ .rawOutputDataPrefix }}' stored\ + \ as parquet\nselect *\nfrom my_table\nwhere ds = '{{ .Inputs.ds }}'" + dialect: + $ref: "#/definitions/SqlDialect" + description: "Sql represents a generic sql workload with a statement and dialect." + example: + dialect: {} + statement: "statement" coreTaskExecutionIdentifier: type: "object" properties: @@ -32478,6 +32557,8 @@ definitions: $ref: "#/definitions/coreContainer" k8s_pod: $ref: "#/definitions/coreK8sPod" + sql: + $ref: "#/definitions/coreSql" task_type_version: type: "integer" format: "int32" @@ -32751,6 +32832,9 @@ definitions: group_version: "group_version" key: "key" group: "group" + sql: + dialect: {} + statement: "statement" coreTypedInterface: type: "object" properties: @@ -36442,6 +36526,9 @@ definitions: group_version: "group_version" key: "key" group: "group" + sql: + dialect: {} + statement: "statement" - template: container: args: @@ -36697,6 +36784,9 @@ definitions: group_version: "group_version" key: "key" group: "group" + sql: + dialect: {} + statement: "statement" primary: template: outputs: diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_sql.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_sql.go new file mode 100644 index 00000000000..c0cd22cb480 --- /dev/null +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_sql.go @@ -0,0 +1,16 @@ +/* + * flyteidl/service/admin.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package flyteadmin + +// Sql represents a generic sql workload with a statement and dialect. +type CoreSql struct { + Statement string `json:"statement,omitempty"` + Dialect *SqlDialect `json:"dialect,omitempty"` +} diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_task_template.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_task_template.go index 8fd1be982ec..163a0eb7c8a 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_task_template.go +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_core_task_template.go @@ -23,6 +23,7 @@ type CoreTaskTemplate struct { Custom *ProtobufStruct `json:"custom,omitempty"` Container *CoreContainer `json:"container,omitempty"` K8sPod *CoreK8sPod `json:"k8s_pod,omitempty"` + Sql *CoreSql `json:"sql,omitempty"` // This can be used to customize task handling at execution time for the same task type. TaskTypeVersion int32 `json:"task_type_version,omitempty"` // security_context encapsulates security attributes requested to run this task. diff --git a/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_sql_dialect.go b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_sql_dialect.go new file mode 100644 index 00000000000..4f3e1a661a0 --- /dev/null +++ b/flyteidl/gen/pb-go/flyteidl/service/flyteadmin/model_sql_dialect.go @@ -0,0 +1,20 @@ +/* + * flyteidl/service/admin.proto + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package flyteadmin +// SqlDialect : The dialect of the SQL statement. This is used to validate and parse SQL statements at compilation time to avoid expensive runtime operations. If set to an unsupported dialect, no validation will be done on the statement. We support the following dialect: ansi, hive. +type SqlDialect string + +// List of SqlDialect +const ( + SqlDialectUNDEFINED SqlDialect = "UNDEFINED" + SqlDialectANSI SqlDialect = "ANSI" + SqlDialectHIVE SqlDialect = "HIVE" + SqlDialectOTHER SqlDialect = "OTHER" +) diff --git a/flyteidl/gen/pb-go/flyteidl/service/openapi.go b/flyteidl/gen/pb-go/flyteidl/service/openapi.go index e2630f11f47..f68eb1d7193 100644 --- a/flyteidl/gen/pb-go/flyteidl/service/openapi.go +++ b/flyteidl/gen/pb-go/flyteidl/service/openapi.go @@ -78,7 +78,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _adminSwaggerJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x7b\x73\x23\xb7\x95\x37\xfc\xff\x7e\x0a\x3c\x93\xa7\xca\x76\x42\x51\xb6\xb3\x9b\xca\x6a\xeb\xa9\xf7\xe5\x48\x9c\x31\x1f\x6b\x24\x45\x17\x7b\xfd\x2e\x53\x34\xd8\x0d\x92\x88\x9a\x00\x03\xa0\xa5\x61\x52\xf9\xee\x6f\xe1\xe0\xd2\x40\xb3\x9b\xec\x26\xa9\xdb\x98\xbb\x55\xf1\x88\xdd\x8d\xeb\xc1\xc1\xb9\xfe\xce\x3f\xff\x0d\xa1\x77\xf2\x11\x4f\xa7\x44\xbc\x3b\x41\xef\xbe\xef\x7e\xfb\xae\xa3\x7f\xa3\x6c\xc2\xdf\x9d\x20\xfd\x1c\xa1\x77\x8a\xaa\x8c\xe8\xe7\x93\x6c\xa9\x08\x4d\xb3\x63\x49\xc4\x03\x4d\xc8\x31\x4e\xe7\x94\x75\x17\x82\x2b\x0e\x1f\x22\xf4\xee\x81\x08\x49\x39\xd3\xaf\xdb\x7f\x22\xc6\x15\x92\x44\xbd\xfb\x37\x84\xfe\x05\xcd\xcb\x64\x46\xe6\x44\xbe\x3b\x41\xff\x63\x3e\x9a\x29\xb5\x70\x0d\xe8\x7f\x4b\xfd\xee\x5f\xe1\xdd\x84\x33\x99\x47\x2f\xe3\xc5\x22\xa3\x09\x56\x94\xb3\xe3\xbf\x49\xce\x8a\x77\x17\x82\xa7\x79\xd2\xf0\x5d\xac\x66\xb2\x98\xe3\x31\x5e\xd0\xe3\x87\xef\x8e\x71\xa2\xe8\x03\x19\x65\x38\x67\xc9\x6c\xb4\xc8\x30\x93\xc7\xff\xa4\xa9\x9e\xe3\xdf\x48\xa2\xfe\x05\x7f\xa4\x7c\x8e\x29\x33\xff\x66\x78\x4e\xfe\xe5\xdb\x41\xe8\xdd\x94\xa8\xe0\x4f\x3d\xdb\x7c\x3e\xc7\x62\xa9\x57\xe4\x03\x51\xc9\x0c\xa9\x19\x41\xa6\x1f\xe4\x96\x88\x4f\x10\x46\x27\x82\x4c\x4e\x7e\x15\x64\x32\x72\x0b\xdd\x35\x0b\x7c\x0e\xa3\xb9\xca\x30\xfb\xb5\x6b\x97\x09\x5a\x4e\x89\x4c\x04\x5d\x28\xbb\xde\xd7\x44\x09\x4a\x1e\x48\xd8\x81\x99\x08\xd2\x13\xf1\x9d\xc9\x05\x49\xe8\x84\x92\x14\x8d\x97\x88\xb2\x45\xae\x90\x20\x7f\xcf\x89\x54\x68\x42\x33\x45\x84\x8c\x7a\xe1\x0b\x22\x60\x05\x07\xa9\xee\xe5\x23\x51\x3d\x68\xbb\x18\x55\xf8\xb6\x20\x72\xc1\x99\x24\x32\x5a\x04\x84\xde\x7d\xff\xed\xb7\xa5\x9f\x56\x67\xd0\x43\x32\x4f\x12\x22\xe5\x24\xcf\x90\x6b\x29\x1c\x8c\x59\x50\x4d\x3e\x78\xa5\x31\x84\xde\xfd\x6f\x41\x26\xba\x9d\xdf\x1d\xa7\x64\x42\x19\xd5\xed\x4a\x43\xa5\xc1\x68\xa3\xaf\xfe\xf5\x6f\x55\xff\xfe\x57\x30\xa3\x05\x16\x78\x4e\xf4\xb2\x78\xba\x32\xff\x57\x9a\x8b\xa6\x04\xdd\x79\x41\x2d\xe5\x81\x97\x66\x7b\x81\xe7\x44\xef\xbc\xde\x2e\xfb\x05\xfc\x5b\x10\xc9\x73\x91\x10\x34\x26\x19\x67\x53\x89\x14\x5f\x59\x03\x0a\x2d\x68\x22\x2e\x3f\xd1\x5b\x49\x05\xd1\x7b\xa5\x44\x4e\x4a\x4f\xd5\x72\x01\x83\x94\x4a\x50\x36\x0d\x97\xe2\x5f\x9d\x46\x53\x33\xb4\xdf\x62\x66\xe6\x83\xda\x89\x0d\x59\xcf\xbd\x92\x60\x86\xc6\x04\xe9\x13\x4f\x53\x22\x48\x8a\xb0\x44\x18\xc9\x7c\x2c\x89\x42\x8f\x54\xcd\x28\xd3\x7f\x1b\xf2\x4d\xdc\x9a\xbd\x9e\xb5\x81\x7f\xae\x5f\x99\x3b\x49\x84\x1e\xf8\x03\x4d\x49\x8a\x1e\x70\x96\x13\x34\xe1\x22\x5a\x9e\xee\x90\xdd\xce\xf4\x3a\xcc\xc7\x94\xc1\xc9\xd3\x6b\xe9\x28\xe4\x0f\x6e\xb9\xfe\x80\x74\x7f\x28\x67\xf4\xef\x39\xc9\x96\x88\xa6\x84\x29\x7d\xae\x65\xb9\xb5\x3f\x70\xe8\x1f\x67\xe8\x08\xe9\x75\x26\x42\xc1\x7a\x73\xa6\xc8\x67\x25\xd1\x11\xca\xe8\x3d\x41\x5f\x9d\x53\xa9\x50\xef\x6a\xf0\x55\x07\x7d\x75\x5e\x30\x0e\xf9\xd5\x33\xac\xb0\xff\xf7\x5f\x83\xa3\xa7\xf0\xb4\x7c\xe8\xde\xf5\xf4\x69\xbe\x31\x17\x50\xd1\xc2\x5f\xff\x2d\x6c\xc7\xee\xd7\x7a\xae\x5e\xb0\x74\xcb\xcf\x9b\x72\x71\x58\xa6\x98\x81\x4b\xbd\x43\xbb\xf2\xef\x95\xdb\xa1\x82\x79\xcb\x1d\xb9\xb7\x1e\x7b\x99\x7d\xcb\xb7\xc5\xbf\xf5\x14\x9e\x9a\x87\xef\xc2\xc0\xb1\x82\x93\x85\x29\x33\x07\xd1\x9f\x4b\x21\xf5\x59\x74\x27\xe4\x95\xb0\xad\x5d\xf8\x79\x30\xb3\x80\xa5\x3b\x4e\x1d\xac\xca\x2b\x9c\x77\x46\xe7\x74\xd3\xfe\x0e\x58\xaa\x85\x47\xcb\x50\x59\x3e\x1f\x13\xa1\x97\xc1\xb1\x56\x98\xed\x58\xb3\x5a\x95\x0b\x46\xd2\x06\xd3\xfc\x7b\x4e\xc4\x72\xcd\x3c\x27\x38\x93\x75\x13\xa5\x4c\x11\x2d\xa9\x97\x1e\x4f\xb8\x98\x63\x65\x5f\xf8\xd3\xbf\xb7\x5d\x08\xc5\xef\xc9\xa6\xfd\x1f\x98\xdd\x4c\xb0\x04\x32\x98\xe7\x99\xa2\x8b\x8c\xa0\x05\x9e\x12\x69\x57\x24\xcf\x94\xec\xc0\x6b\x5a\x3b\x20\xe2\xc8\xdf\x72\xd0\x83\xbb\xdd\x73\x09\xbf\xa0\x89\x67\x76\x8c\x7c\x56\xd0\xd2\x90\xc1\xfd\x0e\x4b\x14\xde\x5a\x4f\xb0\x94\xdb\xd1\x8c\xe4\x42\x8d\xc6\xcb\xee\x3d\x59\xe9\xb7\x96\x72\x30\x43\x58\x29\x41\xc7\xb9\x22\x7a\xde\xba\x0d\x77\x3f\x03\x7b\x34\x42\x40\x13\xd6\xf0\x72\x13\x4e\xa9\x20\x09\xcc\xad\xcd\x81\xf1\x5f\xe9\x79\x6b\x4d\x6c\x69\x66\x7f\x4f\x96\x20\xf3\x54\xac\x80\xdf\xf2\x21\x1b\x32\x74\x84\xce\xfa\x37\xa7\xfd\x8b\xb3\xc1\xc5\xc7\x13\xf4\x7e\x89\x52\x32\xc1\x79\xa6\x3a\x68\x42\x49\x96\x4a\x84\x05\x81\x26\x49\xaa\xe5\x1a\x3d\x18\xc2\x52\xca\xa6\x88\x8b\x94\x88\xa7\x5b\xc6\xd2\x53\xc2\xf2\x79\xe9\x5e\x81\xdf\x8b\xd1\x97\xbe\xd0\x62\x8c\x7f\x14\x3d\xf9\xeb\xca\x02\xc3\x8c\x75\xdf\x41\x6b\xcf\x26\x38\x25\x33\x9a\xa5\x82\xb0\x63\x85\xe5\xfd\x88\x7c\x26\x49\x6e\xee\xe4\x7f\xc6\x3f\x8c\xb4\xf4\xcb\x53\x12\xff\x12\xfd\x51\x88\x5b\xad\x3f\xf5\xfa\x76\xeb\x2f\x41\x3b\x6f\xf6\x1d\xfc\x42\xd3\xca\xb7\xe1\x97\x0d\x73\x70\xef\xac\x19\xac\x7b\xa5\x76\x54\xee\x05\x2b\xec\x55\xbe\x23\x88\x12\xcb\x11\x56\x8a\xcc\x17\xaa\xa5\xe5\x01\xa3\x4c\xcb\xae\xeb\x64\xd5\x0b\x9e\x92\xbe\xeb\xef\x57\x2b\x82\x1a\x61\xd3\x70\xad\x09\x11\x84\x25\xa4\xbe\x85\x5b\x2c\xef\x8b\x16\x36\x0b\xbc\x40\x63\x48\x2f\x3f\x2a\x08\x6c\xa5\xe3\x42\xec\xd5\x4b\x52\xbc\xb9\x49\xd8\x8d\xe6\x23\x3f\x70\xa1\x87\xf7\x16\x04\xde\x68\xe0\xcf\x21\xf3\x6e\x7b\xa2\xbf\x38\x2b\xc7\x96\xfc\xe9\x60\x13\xd9\x7d\x25\x9b\x5a\x50\xb8\x40\x72\x29\x15\x99\x6f\xb4\xa5\xbc\x9d\x85\xb0\x17\xd0\x6b\x1d\x70\xe9\x0e\xfc\x0d\x9c\xfa\xf8\x46\x3f\x1c\xef\x16\x4b\xb6\x2f\x4b\xe8\x6b\x9f\xa7\xf3\x76\xad\x9f\xea\x8d\xdb\xbe\xc0\xdd\xf3\x26\xa6\x19\xc9\x9a\xfb\x1e\xe4\x13\x99\x33\x6a\xf7\xca\xad\xf6\x08\x06\xb0\x41\x91\x8d\x6d\xe9\xfe\xfc\xe9\x4f\x43\x0b\x90\x31\xf7\xa9\x19\x95\x81\x31\x0c\x25\x5c\x18\x59\x30\xb5\xe7\xdd\xe8\xb2\xbd\xdb\xde\x4d\xff\xf6\x04\xf5\x50\x8a\x15\xd6\x07\x5c\x90\x85\x20\x92\x30\x05\x76\x02\xfd\xbd\x5a\xa2\x39\x4f\x49\x66\x34\xda\x0f\x5a\xb2\x46\x67\x58\xe1\x53\xac\x70\xc6\xa7\x5d\xd4\x83\x3f\xf5\xc7\x54\x22\x9c\x49\x8e\xb0\x23\x2b\x92\xba\x26\x30\x4b\x1d\x6b\xc1\x28\xe1\xf3\x05\xcd\xbc\x1f\xc1\x1b\x6f\x28\x4b\xe9\x03\x4d\x73\x9c\x21\x3e\xd6\x5c\x45\x6b\xe0\xfd\x07\xc2\x54\x8e\xb3\x6c\x89\x70\x96\x21\xdb\xad\x7b\x01\xc9\x19\xcf\xb3\x54\xb7\xeb\x46\x29\xe9\x9c\x66\x58\x68\x15\xdf\x8c\xf6\xd2\xb6\x85\x6e\x67\xc4\x8f\x15\xc6\xa5\x57\x73\x8e\xef\x89\x44\x54\xa1\x05\x97\x92\x8e\xb3\xe2\xcc\xdf\x0d\x10\x8c\xfb\xf4\x7c\x00\xf6\x82\x44\x21\x6e\x78\xa8\xeb\xdc\xda\x87\x5c\x8f\x73\xcc\x18\x81\x8e\xb9\x9a\x11\x61\xbb\xb7\x2f\xbf\xb4\xea\x7f\x77\x71\x73\xd5\x3f\x1d\x7c\x18\xf4\xcf\x56\x75\xff\xdb\xde\xcd\x8f\xab\xbf\xfe\x7c\x79\xfd\xe3\x87\xf3\xcb\x9f\x57\x9f\x9c\xf7\xee\x2e\x4e\x7f\x18\x5d\x9d\xf7\x2e\x56\x1f\x5a\xb2\x6a\x6c\x46\x08\x47\xd6\xf2\x6c\x1d\x6c\xa6\x4f\x65\x33\xed\x7c\xb9\x46\x53\xeb\x94\x6a\x6e\x30\xf5\x36\x0a\xfb\x25\x5a\x60\x29\x8d\x64\x64\x46\xd0\x1d\xb2\x4f\x5c\x68\x06\x36\xe1\x9a\x47\x68\xe9\x49\x89\x3c\x51\x94\x4d\xfd\x47\x27\x68\x98\x7f\xfb\xed\x1f\x93\x73\xca\xee\xe1\x5f\xe4\x35\x2e\xce\xc1\xa2\x7c\xb0\x28\xff\xb6\x2c\xca\x5a\xf4\x39\x0e\x0d\xc9\xfb\x0d\xae\xd2\xc2\x05\xf8\xc4\xb5\x28\xc1\x73\xa5\xff\xa9\xbb\x04\xf2\x58\x13\x62\xd5\xcc\x60\xe9\x23\xac\x6a\xfa\x10\x7c\x0e\x82\xdc\x67\x2a\x81\x19\x3d\x72\x71\x3f\xc9\xf8\x63\x33\x73\xe5\x47\xa2\xfc\x30\xb4\xe0\xf4\x16\xac\x94\x3f\xdb\x19\xfa\x81\x7f\x24\x4a\x8f\xfd\xda\xf6\x72\x08\xb6\x3a\x04\x5b\xbd\x6c\xb0\xd5\xab\x32\x15\x3e\x3d\x6b\x8d\xed\x8a\x86\xbf\xd6\xf8\xe1\x6a\xdd\x6c\x35\x5e\xb4\xc0\x49\xf6\x2c\x3c\x39\x76\x45\xed\x93\x2f\xc7\xce\xa6\x0d\x3c\x39\x1a\xc6\x5b\xe1\xcb\xd1\xa0\x9f\x9f\x27\xff\x26\xfc\x44\x07\x37\xd0\x96\x0b\xf5\x26\x59\x77\xc3\x5b\xe9\xd9\x9c\x38\x4f\x7f\x95\xac\xc4\x7c\xb4\x09\xf2\x68\x11\xd5\xd1\x38\x8c\x63\x43\xdc\x46\x65\xa0\x46\x55\x64\xc6\x6a\x28\x46\x65\xec\xc5\x6e\xc1\x16\xdb\xde\x7a\xcd\xc3\x27\xda\xde\x7a\xcd\x03\x27\x3e\x12\x15\x0d\xe3\xad\xdc\x7a\xd1\xa0\x9f\xff\xd6\xfb\x8d\xc6\x4b\x1c\x02\x24\x9e\x70\xe9\xbe\xf4\xbb\xf2\xf5\x86\x40\xfc\x06\x62\x1e\x0e\x41\x0e\xad\xd6\xe8\xcb\x8a\x6a\xf8\x52\xc3\x18\xde\x66\xdc\xc2\x21\x50\xe1\x10\xa8\xf0\x12\x1e\xa5\xb7\x17\xa8\xf0\xa4\x8a\x2f\xd1\x64\x25\xc1\x8a\x1a\x2a\x37\xef\x16\x5c\xd6\xeb\x7b\xa1\xf3\xba\x42\xaf\x83\x36\x63\x6b\x26\x50\xef\xaf\x68\x86\x25\xe2\x49\x92\x8b\x92\x8b\xb6\x7c\xca\x4f\x05\xc1\x4a\x1f\x91\xd8\x70\x89\xa0\x65\x24\x48\xc2\x05\x38\x29\x31\x5a\xcc\xb0\x24\x48\x09\xcc\x24\xdd\xa4\xe5\x99\x56\x61\x5c\xba\x9d\xb7\xa0\xe0\xad\x2e\xe2\x73\xa9\x77\x63\x9e\xae\x1c\x48\x73\x56\xab\x9e\xac\xbf\x49\xf6\x36\x75\x48\xfb\x6d\x32\xf3\x27\x3c\x2a\xfa\xd6\xda\xf3\x51\x89\xd4\xf8\x6d\x8f\x4a\x6c\xed\xd8\xcb\x51\x81\x71\xbd\x95\xa3\xb2\xba\x88\xbf\x99\xa3\x52\x35\xf5\xd7\x70\x54\x5c\x38\xc0\x9e\x8f\xcb\x8a\x0f\x7e\xdb\x23\xb3\x1a\xae\xb0\x97\x63\xe3\xc7\xf7\x56\x8e\x4e\xf5\x82\xfe\x66\x8e\x4f\xdd\xf4\x5f\xf6\x08\x79\x3f\x44\xe3\xc3\x73\x2b\xe8\x74\x4a\x84\xd1\x8c\x12\x4d\x8a\x9b\xa1\x96\x0a\xcb\xfb\x76\x07\x66\xf3\x69\xf0\x3d\xbc\x85\x93\xe0\x07\x6b\xc6\xfe\x9b\x39\x02\x2b\xf3\x7e\x25\xb4\x7f\xac\x39\xf1\x03\xa0\xb5\x35\x3b\x03\xd7\x04\x08\x1f\x2e\x90\x85\x20\x0f\x94\xe7\x32\x5b\x1e\x89\x9c\x55\x71\x7b\x30\x12\x3c\xd2\x2c\x43\x9c\x65\x4b\x24\x15\x16\xca\x3d\x66\x53\xe3\x51\xd2\x87\x29\xc3\x52\xa1\x7b\xc6\x1f\x19\x9a\x60\x9a\xe5\x82\xa0\x05\xa7\x4c\x75\x87\x6c\xc0\xd0\xb5\x19\x23\x68\xde\x1d\x94\x4b\x7d\x04\x13\xcc\x18\x57\x28\x99\x61\x36\x25\x08\x33\x07\x5d\x53\x50\x06\xe2\x02\xe5\x8b\x54\x1f\x2c\xdd\x45\xc9\xc6\x54\x1c\xb0\x21\xbb\x05\x2b\x86\x44\xe4\xb3\x12\x64\x4e\xb2\xa5\xee\x43\xd3\xbe\xe2\xc8\xae\x8f\x19\xaa\x35\x88\x13\x21\xb8\x90\xa0\xb3\x8f\x97\xff\xc0\x4c\x51\x46\x10\xa8\x99\xd2\x00\x1f\x1d\xa1\x73\x2e\x21\x26\xfb\xc7\x3f\x4b\x94\x64\xb9\x54\x44\x74\xd0\x38\x9f\x4a\x44\x19\x5a\x64\x58\x4d\xb8\x98\xeb\x11\x52\x26\x15\x1e\xd3\x8c\xaa\x65\x07\xcd\x71\x32\x33\x6d\xc1\x1a\xc8\xce\x90\xa5\xfc\x91\x49\x25\x08\xf6\xbd\xbb\x87\xe8\xeb\xf0\x99\x21\x00\xf9\x4d\x07\x0c\xf7\x74\xbe\xc8\x96\xe1\xf0\x83\x44\x68\xd8\x13\xdd\x08\x49\xd1\x98\x24\x38\x97\xd6\xb0\xa3\xc4\x12\x91\xcf\x33\x9c\x4b\xd8\x3b\x3d\x3d\x6b\xf5\x48\xf8\x7c\x91\x11\x45\x10\x9d\x20\x25\x28\x49\x11\x9e\x62\xaa\x97\xee\x86\xac\x49\xdc\xf6\x44\x6f\x37\xd0\x52\xfd\xaf\x60\xf9\x98\x73\x41\x50\x4a\x14\xa6\x99\x5c\xef\x94\x7c\x56\x82\x43\x4f\x4e\x6f\xe8\xf5\x92\x1b\x7a\xd5\xd4\xb6\xe6\x26\xb4\x3b\x76\xb8\x0a\xdf\xd2\x55\x18\x73\x85\x57\x71\x17\x1a\x90\x88\x3d\x08\x84\xcc\x5a\xc5\x13\x9c\xed\x28\x1b\x5e\xdb\x41\xb5\x96\x0e\xdd\x87\x87\x43\xf1\xb6\x0e\x85\xd9\xb5\xd7\x73\x2a\xea\x12\x2a\xf6\x8e\x14\xd3\x06\xe3\x65\x4d\x46\x84\x44\x73\xac\xf4\xc5\x36\xb5\x57\x74\x43\x14\xc3\x02\xd4\xe5\x4d\x1d\x94\xe7\x40\x72\xf9\xb2\x23\x16\x0e\x91\x0a\xbf\x41\x04\xda\x57\x93\xc0\x78\xc8\x81\x7e\xa2\x1c\x68\x2a\x0f\x39\xd0\x87\x1c\xe8\xa6\x0b\x74\xc8\x81\x3e\xe4\x40\xbf\xd9\x1c\xe8\x27\x4d\x7f\xde\x5f\x92\xf3\x7e\x32\x99\xdf\x94\x74\x7e\x90\xcc\x0f\x92\xf9\x21\x5d\xd9\x4f\x6d\x5f\x5c\xd0\x7d\xfd\x2e\x25\x19\x51\xa4\xde\x40\x47\xc4\x5c\x2b\x1c\xe6\x86\xa7\x4c\x8b\x82\x53\x41\xa4\xdc\x95\xa7\xf9\x86\xc3\xf2\x0a\x15\xfe\x88\x02\x65\xd6\x93\x25\xd8\x75\xd6\x31\x3b\xdf\xf6\xdb\x64\x79\x7e\xf8\x07\xc8\x86\x03\x0f\x3c\xf0\xc0\x6d\xa6\xf6\x7a\xcc\xd1\xc1\x61\x7e\x51\x7b\x74\x50\x69\x67\x44\xd3\x5d\x8a\xed\x34\x07\x2e\xc7\x73\x92\xf6\x21\xad\xc0\x27\x45\x88\x5f\xf5\x27\x61\x19\x1d\x97\x40\xd0\xdc\x62\x1d\x7e\x5d\x2c\x7c\x54\xfb\x64\x3b\x03\x76\x51\xd1\x66\x90\xbe\x09\x1b\x76\xe5\x0a\x7f\x21\xd5\x78\x5e\x07\x23\x79\xf6\x62\x3c\xaf\x63\xda\x07\x9b\xea\xa1\x16\xcf\xc1\x6a\xd8\x70\xc2\x07\xab\xe1\xeb\xb5\x1a\xbe\x94\x2b\xe0\x99\x8f\xe7\x73\x89\x8e\xcd\x43\xbd\x5d\x44\x36\x4b\x51\xbe\xc8\x38\x4e\x1b\x96\xd3\x0d\x24\xba\x06\xf1\xde\x2c\x45\x82\x4c\xa9\x54\x44\xe8\x7d\xa9\x14\x0c\x37\x07\x80\xbf\xd5\xba\xb9\x8d\x43\x7c\xc2\x6e\xdf\xfd\x7b\x83\xe1\x5f\xdb\x3b\x1b\x38\xd1\x18\xa7\xbe\xa0\x25\x88\x6f\x73\xbc\x44\x33\xfc\x40\x5c\x58\xe2\x03\xce\x68\x8a\xcb\x6b\x5d\x9a\xe1\xba\x01\xfd\x67\xbb\x01\xe1\x78\x38\xbe\x02\x92\x8c\xc3\xc6\x6c\x46\x33\xbc\x33\xd3\x8a\x79\x26\x08\x4e\x97\x68\x4c\x08\xf3\x64\x53\x71\x9f\xd4\x8c\x79\x2f\x82\xf3\x8b\x2b\xa6\xab\xd4\xf3\x5a\xd4\xd2\x67\x0c\x94\xaa\xe6\x37\xbb\xeb\xa0\xbb\x2b\x9e\xf2\xfb\xb7\xc5\x82\x0e\xc1\x53\x07\xf3\xe4\xcb\x9b\x27\x0f\xc1\x53\x07\x45\xff\x95\x29\xfa\x87\xe0\xa9\x43\xf0\xd4\xc1\x0c\xb2\x7e\xda\x07\x33\xc8\x17\x11\x3c\xd5\x48\x86\xdf\x32\x7c\xea\x8d\x4b\xf3\x07\x61\xde\xbd\x77\x10\xe6\x0f\xc2\xfc\x17\x2a\xcc\xbf\x8e\x15\x3e\x48\xf2\x07\x49\xfe\x20\xc9\x1f\x24\xf9\x83\x24\xbf\xf7\x65\x3c\x48\xf2\xd5\x92\x3c\xfc\xcb\x55\x67\x68\x2b\xd6\xb7\x14\xe7\x5b\xe7\x47\xb4\x77\x06\x7e\x24\xea\xad\x7a\x02\x0f\x52\xfb\x41\x6a\x7f\xdd\x52\xfb\xab\x99\xd0\x97\x87\xac\x7e\xc0\x26\x3f\x60\x93\x1f\xb0\xc9\x9f\x18\x9b\xdc\x7d\xfd\x6e\x91\xd7\xcb\x36\x77\x80\x5e\x66\x0f\x97\xc2\x2a\x97\x06\xdc\xb2\x08\x36\x69\x24\xf6\xac\x93\x75\xee\x0a\x80\xb4\xa0\x87\xcd\x72\x0f\xea\x29\x34\xe7\x5a\x77\x63\x24\x7a\xc7\x31\x38\x13\x58\x33\xa5\x0f\x84\x21\x97\x1c\xd0\xb1\xd7\x58\x07\x8c\x29\xff\xf2\x87\xcf\x64\x6b\x61\x85\x30\x52\x74\x4e\xba\x68\x30\x31\xdc\x22\xd1\xa7\x4b\x12\x25\x4b\xd1\x58\x86\xf2\xe1\x23\x96\x16\x63\x75\x7d\xd3\x22\x38\xc7\xbc\xd6\x71\xcc\x36\xcf\x94\x61\xbd\xae\x71\x80\xa6\x1b\x7b\x0e\x05\x07\x6d\x4e\x44\xe6\xbe\x8c\xba\x75\x2f\xcf\x71\xaa\x19\x43\x30\x84\x22\xad\x2c\x7c\x1f\xee\x74\x2a\x7d\x78\x51\xf4\xbd\xf9\x1a\xf0\xed\x00\x8f\x0e\x70\x78\x1b\x0d\x63\x06\xd1\x6f\x5a\xc4\x4b\xf3\x8c\x20\x2c\x25\x4f\x28\x06\x35\xc6\xc8\x00\x88\x2a\x67\x69\x70\x2f\xb9\xae\x53\x2a\xf1\x38\x23\xa9\x5d\x63\x52\x44\x3b\xad\x1d\x39\x95\x68\x4c\xf4\x12\x6b\x36\x15\xaf\xfe\xcc\x48\x20\x15\xa3\x09\x86\x42\x56\x47\x42\x98\x19\xc8\x1a\x09\xda\x10\xe7\x5b\x15\xa2\xcd\xe8\x0f\x49\x77\x07\x91\xfa\x20\x52\xb7\x9a\xd0\x17\x25\x52\xbf\xa2\x08\x4d\xc7\x90\x5e\x34\x42\x13\x7c\xa0\x9a\xf3\x8f\xbc\x61\x53\x36\xb5\xf5\x9c\x53\xa9\x24\x4a\x72\xa9\xf8\xbc\x5e\xf2\xf9\xe4\x7a\xe8\xf9\x0e\x4e\x39\x9b\xd0\x69\x6e\xee\x96\x5f\xad\x6c\xe2\x4f\x74\xa1\xa6\x2c\x17\xa4\x99\x61\xc8\xdb\xad\x37\x75\x56\x99\x8f\x58\xe1\xe4\xad\x68\xe7\x4d\xdc\x76\xd5\x43\x7f\xae\x4b\xaf\x8d\xb2\x5a\xd8\xc7\xad\xa6\xa9\xf5\x8b\xd1\x75\xff\xe6\xf2\xee\xfa\xb4\x7f\x82\x7a\x8b\x45\x46\x8d\xcb\xca\x50\x18\xfd\x87\x9e\x94\x29\x33\xe2\x49\xc4\x0a\x44\x06\xfd\x17\x7c\x64\x5a\x1f\x44\x47\xe8\xf4\xfc\xee\xe6\xb6\x7f\x5d\xd3\xa0\x25\x09\x28\xd2\x4a\xe6\x8b\x0c\xe4\xa3\xfb\x7c\x4c\x04\x23\x5a\xc2\xb7\x18\xc1\x85\xe7\xcc\x34\xda\xff\xef\xfe\xe9\xdd\xed\xe0\xf2\x62\xf4\x97\xbb\xfe\x5d\xff\x04\x39\xda\xd2\xcd\xea\x71\xe9\x51\xa4\x4b\x86\xe7\x5a\xeb\x8e\xeb\xa1\xfc\x3d\x27\x39\x88\x63\x74\xca\xe6\x04\xa0\xbb\xa3\x16\xdd\x80\xcf\x7b\xef\xfb\xe7\x71\xcb\x33\x12\x02\x17\xa3\x0c\x8f\x49\x66\x5d\x79\xe0\x9d\xd2\xe7\x27\x80\x78\x36\x3e\xbe\xdc\xac\xea\x5f\xee\x7a\xe7\x83\xdb\x5f\x46\x97\x1f\x46\x37\xfd\xeb\x9f\x06\xa7\xfd\x91\xd5\xa4\x4e\x7b\xba\xdf\xa8\x27\xab\x70\xa1\xbf\xe7\x38\xd3\x1a\x39\x9f\x38\x28\x63\xf4\x38\x23\x0c\xe5\x0c\x28\xce\xa8\xf9\xa0\x95\x84\x38\x0e\x66\x46\x57\xe7\x77\x1f\x07\x17\xa3\xcb\x9f\xfa\xd7\xd7\x83\xb3\xfe\x09\xba\x21\x19\x28\xc2\x6e\xd1\x61\x17\x17\x59\x3e\xa5\x0c\xd1\xf9\x22\x23\x7a\x35\xcc\xe1\x1c\x93\x19\x7e\xa0\x5c\x44\xda\x0a\xac\x23\xb0\x02\x68\xdf\x29\x9c\xa3\x60\xe9\x2e\x2f\x3e\x0c\x3e\x9e\xa0\x5e\x9a\xfa\x39\x48\x68\x23\xa2\x1c\x07\x3f\x71\xb4\x02\x3f\x91\x60\x13\x10\x02\x15\x7d\x1f\x88\x10\x34\x25\xf2\xc5\x1d\x0e\xd1\x81\x58\x55\xa1\xcb\x14\xbe\xfa\x46\x89\x5c\xd7\xbd\x10\x51\xdf\xea\x8b\x9b\xa8\x68\xf5\x8b\x12\x19\xd4\x1b\x0e\x56\xf6\xb1\xb1\x4d\x20\x5e\x9f\x67\xbb\x31\x35\xb3\x4b\x47\xce\x36\x74\xfc\xcf\x88\xe9\xfd\x6b\x8f\x11\x52\x26\x29\x66\x2d\xc0\x54\x90\x21\xfe\xab\xbd\xda\x1a\x5e\x98\xc1\x97\x55\x1f\xae\xfa\x4e\x82\x0f\xde\xc2\x4d\x18\x0e\xf7\x15\xdd\x7a\xd7\xa1\x6c\xe3\x44\xe4\x39\x51\x18\x2a\x88\x2b\x8e\xa6\x44\x75\xd1\x25\x83\x67\xb7\x58\xde\x77\x90\xab\x0e\x83\xb8\x40\x85\xf0\xf8\x0c\x49\xe5\x6f\xc4\x68\xd8\x5e\xa1\x39\x28\xe6\x07\xc5\xbc\x7a\x65\x0e\x11\x6a\x35\x2b\xbc\xaf\x1b\xb5\x95\x9d\x7d\x7f\x17\x5f\x60\x56\x77\xc1\x26\x25\xbb\x68\x74\x23\x6e\xb4\x81\xbe\xdd\xcb\xf0\x79\xad\xa0\x7b\xbd\x1a\x4d\xf1\x98\xc3\xbd\x67\xfe\xef\x70\xef\x1d\xee\xbd\xc3\xbd\xf7\x0a\x56\xf8\xc5\x2d\xca\x15\xdc\xfd\x45\x4d\xca\x9b\x14\xe4\xad\xa1\xe9\x0a\x85\xb8\x0d\x38\xdd\xaf\x4d\x30\xe8\x2a\x4c\xc9\xab\x1a\xb2\x44\x72\x86\x85\xa9\xca\x9a\xf0\xf9\x9c\xb3\xd8\x56\xdd\x41\xde\xb1\x0e\x86\x40\x98\xdd\x26\x4b\x73\xd1\x0d\x7d\x1b\x36\xe6\x60\x5d\x9e\x23\xa3\x68\xaf\x22\x84\x09\xd5\x3f\xe8\xd7\x4f\x28\x67\x1c\xb0\x03\xf7\x8a\x1d\xf8\x3a\xe6\xfa\x24\xd9\x47\xfb\xb7\xaf\xbf\x8d\x8c\xa3\x03\x48\xe0\x21\xa7\xe6\x90\x53\x03\xbf\x1f\x40\x02\xf7\x47\xad\x4f\x2b\xd3\xf3\x94\x8c\x4a\x65\x54\xfc\x9f\xa3\xb2\xcb\x2b\x7a\x12\xfa\xbf\xa2\x07\x45\x92\x11\xb4\x4e\xd3\x7d\x96\x5e\xb9\xe0\x29\xd9\xa1\xfc\x8a\x1e\x51\xe3\xd2\x2b\x51\x5f\xaf\x5c\x84\x77\xcb\x64\x44\xf9\x68\xe0\x4f\x2c\xc8\xd7\x50\xcc\x97\x68\x8d\xaa\xa0\xff\x83\x69\x6a\xe3\x42\x7d\xa9\xd5\x0a\x0a\x06\xf7\x86\x1c\x35\xcd\x6e\x01\x17\x52\x33\xaa\xb9\x0b\xaa\x9f\xfb\x1b\xa1\xfa\xf1\xd3\xc0\xc8\x34\xbf\x10\x4a\xe8\x31\xf1\x55\xb0\x2d\x6a\x4c\xd4\xfd\xdb\xb0\xf3\x84\x23\x7e\x0e\x4b\xcf\x5a\x62\xfa\xe2\xae\x89\x75\x47\xe3\x70\x59\x34\x5c\xae\x2f\xf5\xca\x38\xa0\xbd\xac\xb3\xbd\x1c\xe0\x54\x0e\xa6\x9f\xd7\x33\xe1\x83\xe9\xe7\x4d\x9b\x7e\x8c\xa3\x7a\xb4\xc0\x82\x30\x55\x21\xa3\x97\xaf\x13\x78\x3d\xcc\x9b\x77\x52\x07\x34\x60\xa4\x45\x7b\x21\xfb\xab\xea\xcb\xb2\x05\x59\xc1\x60\x64\xe4\x8a\x20\x6f\xe8\xf8\x9f\xc5\xbf\x03\x25\x20\xf8\xb1\xc2\xe1\xbb\x2e\x10\xcc\x60\xd8\x4b\x7d\x7d\xe7\x36\x26\x6c\x5f\xd9\x46\x4e\x48\xac\x71\xd4\xd6\xc7\x8f\xb9\x94\x02\x92\x16\x02\x57\x31\xc3\x8a\xb8\x32\xdb\xd3\x91\x13\xc3\x8a\xf8\x89\x8d\x61\x66\x57\xe6\xd3\x33\xf8\xf2\x6d\x65\x22\xd5\x0c\xfd\x79\xc3\xcf\x56\xc9\xb1\xd9\xe9\x76\xc4\x41\x4d\x6e\xcd\xe3\x8c\x82\x27\x06\xa0\xe2\xe0\x3e\x0f\x36\xdc\xe5\x4f\x63\x48\x2f\xaa\xbb\x9e\x9e\x5b\x80\x5c\x39\x73\xcd\x26\x6e\x69\xf4\xed\xce\xfb\xc5\x83\x71\x36\xd0\xfd\x8b\x06\xe6\xac\x61\xdc\xbb\x95\x8b\x7c\x31\xbe\xec\x6d\xf7\xcf\xc7\x99\x3f\x12\xf5\xe5\xb1\xe5\x8f\x44\x3d\x17\x4f\xde\x96\x11\xaf\x65\x46\x45\x8d\xa0\x37\x1a\x27\xb2\xc2\x7f\xdf\xec\x74\xdb\xc4\x6b\xfd\x6c\x26\x69\x83\xb5\x7c\x2a\x7a\x38\x55\xc5\xad\x01\x23\xd2\x01\x0f\x29\xc3\x87\x94\xe1\x43\xca\xf0\x21\x65\xf8\xf5\xa5\x0c\xbb\xaf\xdf\xa5\x24\x23\x8a\xd4\xca\x4d\x67\xf0\xf8\xa5\xe4\x26\xd3\xfb\x33\x4a\x4d\xa6\xc3\x2f\x4f\x70\x32\xf3\x3a\xc8\x4e\x07\xd9\x69\x1f\xd3\x7d\xad\xda\xab\xa3\xf2\xd7\xa0\xbd\x36\x46\x27\x2a\x82\xc4\x36\xc6\x06\xd8\x69\xff\xba\x31\x28\x20\x40\x7a\x74\xc3\xd9\xe4\xf8\xbf\x72\xc3\x7e\x3b\x4c\x4e\x3e\x35\x1f\xdb\xc5\xbd\xe9\xd6\xfd\x8b\xf5\x6e\x1e\x6a\x59\x54\xae\xd5\xc1\xf9\xba\x66\x71\x0e\xce\xd7\x83\xf3\xf5\xd5\x39\x5f\xf7\xae\x52\xad\xad\x48\x7f\x6d\xaf\xe6\xb5\x51\xe1\xee\xa2\x37\xba\x8c\x26\x05\x83\xbf\x9d\x92\x45\xc6\x97\x60\x63\x59\x6b\x6d\xf6\xb5\xe8\x2b\x82\xa3\xca\x97\xbf\x7b\xfb\x6a\x45\x68\x7f\xed\xf7\xbf\x1b\xf9\x73\xa9\x35\xaf\x45\xec\x2d\xe6\xfd\x2a\x04\xdd\xe3\x7f\x96\x52\x22\x1a\x61\xa6\x04\x49\x0c\x9b\x8f\xc1\x90\x55\x3f\x09\x20\xf3\xed\xad\x39\xce\x55\x10\x6f\x28\xf5\x01\x58\x10\xa1\x96\xc1\x9b\x64\xbe\x50\xcb\xff\x1a\x32\x5a\x20\x6b\xd3\x29\xe3\xc2\xf0\x40\xfd\xf1\x0c\xb3\x34\xd3\xe7\x47\xfa\x76\x12\xcc\x18\x57\x20\x9c\xc0\x0c\x52\xf4\x40\xb1\x11\x65\x7a\x57\x83\x06\x3e\xf9\x46\x67\x31\x72\xa7\xbf\xa1\x93\xf8\xdc\x98\xd5\x1b\x6e\xd1\x8f\x19\x1f\x43\x95\x85\x3c\x36\x31\xe8\x06\x0e\x0e\xe0\x68\xe7\x5e\x8a\x79\x28\x2c\xef\xcb\x89\x5a\x71\xd8\xfe\x68\x6d\xea\xd6\x86\x77\x23\x30\xc3\xf5\xaf\x96\xd2\xbb\xe2\x67\x36\xe1\x0b\x1e\xc3\x90\xcb\xe3\x70\x3f\x86\x1d\xba\xdf\x8a\x96\xdd\x2f\xae\x4a\x15\xfc\x28\x88\x12\xcb\x11\x56\x4a\x33\xa4\x7d\xe6\x94\xdd\x62\x79\xbf\x43\x4e\x59\xec\xdd\xd9\x90\x53\x16\xf5\xf5\xca\x39\x56\x94\x53\x16\x0f\xfc\xc9\x39\x56\x43\xe2\xfe\xe2\xd2\x07\x9a\x1e\xd5\x43\x2a\xc1\x16\x4b\xf7\xa5\xa6\x15\xac\xe3\xc5\xaf\x66\x84\xa5\xeb\xe0\x4b\x3c\xb9\xf1\xe5\x76\x38\xa2\xeb\xd6\xe8\x8b\x2b\xa7\x51\x92\x59\x36\xcc\xed\x8d\x94\xd5\x28\x8b\x5d\xfb\x1e\xd5\xd3\xd8\xdf\x83\xdd\x38\xd4\xd9\x3b\xd4\xd9\x3b\xd4\xd9\x7b\xf2\x3a\x7b\xcd\x74\xd6\xc6\x0a\x6b\x53\x6d\xb5\x99\xaa\x5a\xaf\xa7\x3e\x81\xcf\xb9\xb9\x32\x59\xca\x47\x8f\xd5\xc8\x6d\xf3\xd1\xa3\xee\xdf\x84\x73\x3a\x1a\xf1\x73\xe4\xa3\xff\x46\x35\xcb\x83\x5a\xf9\x24\xeb\xf6\xa5\xea\x94\xaf\x5c\xa1\x3c\x64\xd2\x1f\x50\x0c\x0f\xa1\x26\x7b\x5c\x9c\x43\xa8\xc9\x21\xd4\xe4\x8b\x0d\x35\xa9\x57\x4f\x68\xba\x73\x96\x64\x4b\xdc\x72\x6f\x65\x10\xbf\x82\x28\xa5\xc5\xfe\x06\x48\xe6\x55\xda\x42\x21\x4b\x47\xc8\xc3\xdb\x6b\x0e\x83\xf4\x4d\xa8\x0c\x95\xab\xf9\x1c\xaa\xc3\x01\x04\x7b\xaf\x20\xd8\xaf\x6e\xda\x07\xa9\xf2\x20\x55\x1e\x04\xa7\x86\x13\x3e\x08\x4e\xaf\x57\x70\x7a\x29\x6d\xe8\x4b\xc2\x43\xd2\x22\x56\x94\x95\xb4\x36\x4e\xd9\x60\x1a\x81\x33\x23\x5f\x64\x1c\xa7\x9b\x22\x8e\x7e\x0d\xc4\xb7\x35\x72\x5f\xd0\xae\x28\xe2\x94\x4b\xe2\xdf\x3a\xd9\xce\x34\xa0\x7b\x7c\x0b\xa2\x9d\x1e\xa7\x19\x71\x83\xe8\xc8\xb0\xc3\x77\xff\xde\x60\xe0\xd7\xf6\x4e\x06\x4e\x33\xc6\xa9\x03\x0d\x30\xe2\xd9\x1c\x2f\xd1\x0c\x3f\x10\x34\xc1\x34\x33\xf6\x39\x9a\xe2\xf2\xfa\x96\xe6\xb6\x6e\x40\xff\xd9\x6e\x40\x38\x1e\x4e\x91\xd1\xa8\xef\x0b\x23\x55\x25\x38\x73\xee\x3e\x78\x67\x86\x25\xc2\x99\x20\x38\x5d\xa2\x31\x21\x2c\xc8\x64\x6b\x3a\xe6\xbd\x08\xc6\x2f\x1e\x9e\x19\xd2\xcd\x8b\x46\x79\x03\xd7\xa8\xad\x16\xbd\x77\xc5\xb2\xcc\x49\x76\xd0\x21\x77\x51\x1c\xe5\xf7\x6f\x85\xb9\x3c\x87\x9a\xf8\x05\x7b\x91\x0e\x9e\xa2\xdf\x66\x4d\xc6\x57\xa3\x7d\x1c\x54\xf4\x43\x92\xf1\xc1\xf3\x73\x30\x60\x1c\x0c\x18\x7b\x5f\xc6\xd7\x64\xc0\x78\x41\x19\xdd\xe4\x36\x3d\x49\xb1\x92\xd7\x22\xad\x1f\x84\xf5\x83\xb0\x7e\x10\xd6\xbf\x58\x61\xfd\x75\xac\xf0\x41\x52\x3f\x48\xea\x07\x49\xfd\x20\xa9\x1f\x24\xf5\xbd\x2f\xe3\x41\x52\x2f\x49\xea\xf0\x2f\x87\x16\xd0\x56\x6c\x6f\x2c\xae\x6f\x07\x0d\xd0\xcc\x4d\x67\xb1\x01\xde\x8a\x64\x7e\x90\xca\x0f\x52\xf9\xeb\x96\xca\x5f\xcd\x84\xbe\xbc\x84\xe0\x43\x4a\xed\x21\xa5\xf6\x90\x52\xfb\x12\x29\xb5\x8e\x97\xac\x93\x70\xd6\xd5\xd2\xf9\xc9\x32\x97\xaf\x29\x4b\xb2\x1c\x44\x55\xfd\xf3\xfb\x9c\x66\x29\x02\x15\x49\x6b\xba\x94\xb3\x6f\x80\x9e\x80\x14\x60\x9c\xae\xfa\xc3\x7a\x09\xe6\xa7\x15\x56\xf7\x6a\x85\x98\x62\xb4\xdb\xc2\xb0\xed\x6b\x4f\x7d\x09\xdc\x2d\x2a\xee\x45\xbf\xb9\x86\x5e\x51\x1d\xbe\x8e\x13\x4b\x34\x47\x72\xe3\x7b\xe2\x8a\x7c\x95\x7d\xb6\xaa\xcf\xf7\xb3\xfd\xe8\x6d\x95\x32\x58\x1d\xf5\xa1\x2a\x1f\x0a\x76\xed\x50\x95\xef\x09\xe7\xed\xce\xd9\x86\x99\x3b\x1a\x35\xb6\xf0\x37\x3a\xed\x17\x0f\x76\xac\x3f\xe9\x2f\x1a\xfa\x58\x79\x91\xad\xe4\xd6\x1d\xff\xb3\xf2\x9e\x7a\x81\x62\x84\xad\x2f\xa7\xbd\x94\x25\xdc\xe5\x7a\xfa\x48\xd4\x97\x72\x37\x1d\x4a\x13\x1e\xca\xeb\xec\x69\xba\x5b\xdd\x3d\x6f\x76\xb6\x87\x42\x8c\x87\x42\x8c\x87\x42\x8c\xd1\x11\x3c\x14\x62\x3c\x14\x62\x44\xe8\x59\x0a\x31\xb6\x96\x19\xf7\x50\x92\x71\x17\x89\xd1\x74\xff\xa5\x08\x8d\x87\xb2\x8c\x07\xb9\x71\x7f\xd3\xfd\x6d\xc9\x8d\xaf\xd0\x6a\xf1\x2a\xea\x4f\x7a\xab\xc5\x8b\x43\x01\x79\xd6\xde\x18\x0e\x28\x8c\x35\xf1\x5f\xef\x15\x15\xc8\x6d\xda\x01\x19\xc8\xfe\xdf\x01\x19\xe8\x80\x0c\x54\x33\xeb\x43\x30\xf3\x01\x19\x08\x1d\xc2\x75\x0f\xe1\xba\xaf\x39\x5c\xb7\xc1\x36\x1e\x90\x81\x1a\x8a\x8c\x4f\x84\x0e\xe4\x64\xae\x9d\x10\x82\x2a\xc4\xc1\xcd\x28\x41\x3f\xaf\x6a\x44\xaf\x56\xd4\x73\x63\x3d\xa0\x05\x1d\xd0\x82\x76\xa5\x9d\x57\xa1\x80\x3e\x23\x6a\x50\x15\x87\x69\x93\x8b\x5c\xc1\x5c\x76\x55\x30\xdf\x06\x82\x90\x1b\xed\x21\x31\xf9\x90\x02\xf1\xfa\x53\x20\x5e\x5d\x62\xf2\xab\xd1\x54\x0e\xea\xfc\x21\x37\xf9\x90\x9b\x7c\x30\x76\x1c\x8c\x1d\x7b\x5f\xc6\xd7\x64\xec\x78\x61\xb9\xfd\x09\x91\x84\x5e\xa3\x04\x7f\x10\xe0\xcd\x7b\x07\x01\xfe\x20\xc0\x7f\xa1\x02\xfc\xeb\x58\xe1\x83\xf4\x7e\x90\xde\x0f\xd2\xfb\x41\x7a\x3f\x48\xef\x7b\x5f\xc6\x83\xf4\xfe\x6c\xe8\x42\x55\x22\x7c\x6b\x84\xa1\x96\x6e\xbe\x20\x81\xec\x2d\x49\xeb\x07\x49\xfd\x20\xa9\xbf\x6e\x49\xfd\xd5\x4c\xe8\x80\x36\x74\x40\x1b\x3a\xa0\x0d\x1d\xd0\x86\xb6\x92\x91\xfe\xcd\x1e\xcb\x77\xc1\x4d\xec\xaf\xec\x77\xef\x33\x3e\xbe\x5d\x2e\x88\xfe\xef\x19\x9d\x13\x26\x41\xa2\xa5\x6a\x19\xca\x44\x35\x2b\xbf\xba\xe6\xef\x6e\x06\x17\x1f\xcf\xc3\x34\xb4\x77\x9f\xee\xce\x6f\x07\x57\xbd\x6b\xbf\x2e\x7e\x56\xe1\x5a\xd8\xef\x22\xb1\xee\x94\xcf\x17\x58\x50\xc9\x59\xff\xb3\x3e\x9d\x7a\x68\x97\x20\xfb\x70\xb1\xdd\xe8\xfa\x7f\x09\x47\x76\x11\xff\xf9\xf1\x36\xfe\x2b\x9a\xc5\xf9\x6d\xfc\x57\x7f\xed\x6c\x82\x86\xcb\xfc\xec\x08\x7d\xbc\x3d\x41\x1f\x21\x48\x45\xa0\xdb\x19\x36\x2c\xe9\xfc\xf6\x04\x9d\x13\x29\xe1\x97\xe2\x63\x45\x55\x06\x73\x7b\x4f\x19\x16\x4b\xe4\xa6\x6f\x72\x51\x31\x58\x7f\xdd\xd2\x94\x17\x8f\xfd\x2d\x67\xa0\xd0\x14\xab\x77\xce\xa7\x34\xc1\xd9\x6e\x8b\xd8\xbb\x08\x0f\xd2\xbb\xcb\xeb\xb5\x4b\x11\xbe\xbd\xba\x16\xbd\x8b\x33\xc8\x8c\x75\x43\xad\x98\xf9\x05\x91\x5a\x63\x4a\x38\x4b\xad\x45\x5c\xf3\xb3\x65\x20\xa6\xfc\x8d\x43\xae\x6c\x2e\xb5\xf0\xdc\xbb\x38\x43\xc7\xe8\xf2\x7a\xc8\x2e\xb5\x56\xa5\xf9\x2c\xd1\xf7\xbb\xe1\xba\x54\x22\xc6\x15\xa2\xf3\x05\x17\x0a\x33\xa5\x45\x1b\x60\x6c\x76\x45\x8c\x92\x76\xca\xe7\xf3\x5c\x61\x45\x1f\xc8\xca\xa2\x32\xa3\x24\xde\x10\x35\x48\xc1\xe0\x5c\xb1\x86\x86\xf3\x15\x73\x59\x08\xdd\xbe\xe6\xba\xb1\x66\x41\xd3\x15\xe1\xdc\x35\x81\x85\xc0\x31\x7f\x7c\x47\x15\x99\x97\xdf\x6f\x18\x30\xf9\xaf\x4a\xb5\x49\x5f\x09\xe7\x1c\x6b\x15\xd4\xa4\x47\x9e\x53\x45\x04\xce\x3e\xe1\xc5\x07\x67\xc3\xda\x82\x3e\xfe\xef\x4d\x94\xa8\xfa\xee\x97\xde\xa7\x30\xd5\xf5\xdd\xd5\xf5\xe5\xed\xe5\x5a\x9a\x89\x5a\x58\x25\x1a\xfd\xf8\x04\xfe\x17\x1d\x23\xdd\xba\xbf\xb9\xe6\x44\x61\x7d\xa3\xa3\xaf\x4d\x4a\x97\x4f\xc1\xa0\x2c\x03\x1a\x59\x08\x3a\xa7\x7a\x5f\xad\x16\xff\x8d\xb9\x1c\xfd\xed\xef\xa9\xc4\x7c\x60\x92\x36\x41\xee\x50\x98\xa5\x58\xa4\xe8\x6f\xb2\x9c\xcf\x0c\xc6\x23\xf3\x03\x49\xd1\x11\x9a\x29\xb5\x90\x27\xc7\xc7\x8f\x8f\x8f\x5d\xfd\x76\x97\x8b\xe9\xb1\xfe\xc7\x11\x61\xdd\x99\x9a\x67\x26\x7f\x5b\xaf\xc2\x09\xba\x12\x5c\x71\x10\x20\x90\x24\x82\xe2\x0c\x52\x49\xc7\xe6\xb4\xf3\x09\xfa\x35\xe1\x82\x74\x8b\x8d\xb1\x8a\xa5\x11\x4a\x9c\xf2\x79\xac\x5f\xaa\x38\x3a\xe5\xfd\x44\x29\x49\x68\x6a\x25\x29\xc2\x12\x0e\xd6\x07\x63\xaf\xd4\xed\xb9\x3c\x38\x62\x9d\x45\x7e\x39\x03\x61\x03\xa7\x04\xe1\x07\x4c\x33\x83\x12\xc0\x8d\x21\xd2\xac\xb3\x49\x6e\x19\x18\xb1\x33\xd7\x22\x36\x44\x27\x82\x22\xe9\x5e\x5d\xe8\x09\x27\x3c\x43\xe3\x7c\x32\x21\x22\xf4\x55\x75\xb4\x34\x42\x25\x12\x24\xe1\xf3\x39\x61\xc6\x54\xa9\x1b\x82\x2f\x61\xc5\xec\x68\xbb\x43\x06\xfb\xaf\xc5\x14\xa0\x80\x94\xc3\xc1\x66\x44\xab\x2b\x6c\x69\xba\x19\xe7\x93\xc8\x17\x06\xb8\x08\x38\x45\x54\x0d\x59\x2f\xd3\x8a\xed\x9c\x2b\x12\x86\x59\x82\xe1\x3c\x5a\x70\x60\x08\x82\x2c\x32\x9c\xb8\x24\xde\x8c\x27\x38\x43\x13\x9a\x11\xb9\x94\x8a\xcc\xc3\x06\xbe\x06\x5d\x4b\xaf\x19\x95\x28\xe5\x8f\x2c\xe3\xd8\xce\xa3\xfc\xd9\x37\x31\x6f\xe9\xbb\x6c\xf9\xbe\x10\x5c\xc0\xff\xfc\x48\x59\xba\xdd\x19\xbc\xbb\xf8\xf1\xe2\xf2\xe7\xe8\x18\xde\xdd\xf4\xaf\xc3\xbf\x6f\x7e\xb9\xb9\xed\x7f\x5a\x7b\x0e\xcb\xad\x14\x94\x05\xc3\x03\x19\xfc\x04\xdd\x98\x45\xe0\x02\x69\xad\xaa\x66\x52\x9f\x2c\x29\x15\x3f\xf0\x94\x6c\x37\xb7\x4f\xbd\x8b\xbb\x5e\xc4\x51\x6e\x4e\x7f\xe8\x9f\xdd\x9d\x47\x02\x9e\x9b\x5f\xf0\xcb\x75\xdf\x88\x6f\xe1\x6f\xa7\x3f\x0c\xce\xcf\x46\x15\x02\xdf\xbb\xeb\xfe\xe9\xe5\x4f\xfd\xeb\x42\x36\xab\x5c\xa2\xd2\x60\xca\xcc\xea\xd6\x30\xa5\x19\x4f\xd1\x78\x19\xe6\x99\x16\xd8\x08\x8f\x58\xa2\x0c\xfc\x31\x05\x46\x87\x69\xf5\x04\x78\x93\x03\x8b\x28\xbe\xd0\x02\x7f\xc7\xbe\x03\xd0\x0e\x46\x39\xc2\x2a\xc6\x8a\x08\x1b\xd6\xbd\x63\x16\x28\x1a\x06\xe4\xc1\x2f\x9c\x56\x85\xa4\x7e\x31\xd7\x87\x5a\xd0\xe9\x14\x14\xff\xd2\x50\x4d\x6b\xf6\x53\x58\x5e\xf8\xce\xec\xff\x42\x70\x38\xe7\xba\x5b\x6b\x31\xf2\x5a\x85\xf9\xd0\x20\x53\x46\x2d\x0a\x0c\x0a\x43\xc5\xd0\xdc\x66\xe9\x45\xa8\x5d\x2f\x73\x1e\x8b\xc0\x68\x60\x5b\xd2\xd8\x2b\x16\x82\x3c\x50\x9e\x07\x9f\x5a\xc4\x92\x68\xc7\x2b\x9b\x2f\x16\x00\x96\xcd\x28\x35\xa5\x66\x3c\x79\x54\xb6\xa0\x59\xd8\x03\xb4\x30\x11\x7c\x5e\xd1\x46\x7c\x4c\x06\x97\x37\x4a\x60\x45\xa6\xcb\x33\xcb\x32\xb6\x3f\x1e\x67\x97\x3f\x5f\x9c\x5f\xf6\xce\x46\xfd\xde\xc7\xf8\xc4\xfb\x27\x37\xb7\xd7\xfd\xde\xa7\xf8\xd1\xe8\xe2\xf2\x76\xe4\xde\x58\x4b\xf2\x35\x1d\xac\xde\xd3\xf1\x8b\x27\x48\xb3\x5c\x60\x8d\x0e\x02\x2e\xe0\x8f\x63\x32\xe1\xc2\xf0\xf9\xb9\x73\x5f\xc2\x8d\x82\xfc\xda\x92\xd4\x28\xef\xf1\x2c\x4e\x40\xb3\xad\x6a\xd2\x58\xad\x94\x20\x78\x0e\xf7\x04\x66\xa8\xcf\xd2\xa3\xcb\xc9\xd1\x8d\xf9\x71\x8e\xc5\x3d\x11\xfe\xd3\x47\x41\x95\x22\x60\xfe\xa7\xd6\x33\x00\x9a\x37\x0c\x59\x5f\x64\x10\x5e\x5f\x74\xd0\x45\xd7\x9a\xef\xeb\xf7\xfd\xa5\xa6\x89\x3d\x25\x0a\xd3\x4c\xda\xc1\x46\xeb\x7a\x82\xce\xb1\x98\x16\x7a\xf4\xd7\x7c\x32\x31\x8d\x7d\x63\x86\xa1\xef\xb0\x68\x16\x15\xbc\x57\x93\x86\xbb\x17\xa1\x3f\xfb\xb2\x97\xfe\x56\xa9\xea\x6e\xb1\x1b\x4d\xdd\x5d\xc1\x8a\x5f\x5e\x8c\xfa\xff\x3d\x88\x34\x21\xfb\xa4\x82\xd6\x60\xe2\xe6\xf1\xfa\x4b\xa6\xba\xed\x55\x72\x8a\x5f\xac\x20\x27\x93\x85\xa3\x77\x7e\xa2\x75\xab\x0a\x5a\x22\x9f\xa9\x32\x1b\x13\x8e\xbb\x44\x42\x45\x33\x60\x1e\xc1\x8b\x05\xc1\x42\x56\xed\x76\x2c\x06\xd6\xec\xbd\xe9\x29\xec\xc3\x6e\xb2\xeb\xa7\x83\x38\xcb\x96\xa1\x10\x51\xa2\xc8\x06\x34\x60\xda\x5a\xa1\x80\x2b\x80\xff\xb9\xb4\x50\x3b\x9f\xa8\xd4\x2a\x92\xf9\xf1\xbd\xc5\x00\xda\x8e\x20\x3e\xf4\x06\xe7\x25\xe1\x62\x74\xd6\xff\xd0\xbb\x3b\x5f\xaf\xe6\x47\xdf\x95\xb7\x18\x1d\x21\xfd\x3c\xf6\x9d\xd1\x89\xb9\x33\x1c\x92\x91\x51\xe0\x08\xd3\xe2\xa7\x4b\x9a\x31\xf6\xa6\x94\x2c\x32\xbe\x9c\x13\x06\xe6\xfb\xe8\x26\xd4\xeb\x39\xc1\xd4\x5e\x2d\xc1\x60\x4f\xb4\xcc\x62\x2d\x8b\x70\x8d\x1d\x39\xf8\x24\x92\xfa\x9b\x37\x46\x4f\x2a\xb1\xee\x2b\x63\xfd\xb6\xff\xb9\x51\x58\x6d\x79\xc6\x7a\xa7\xb7\x83\x9f\x22\x9b\x43\xef\xfa\xf4\x87\xc1\x4f\x55\x52\xcd\xe8\x63\xff\xa2\x7f\xdd\xbb\xdd\x20\x9c\x94\x9a\xac\x12\x4e\xa4\x1e\x70\xd9\xfb\x41\xa5\x8f\x0a\xd0\x67\x47\xf0\x0c\x51\x25\xd1\x03\x95\x74\x4c\x01\xb1\xca\x7a\x12\xee\x06\xc0\x59\x21\x4d\x8a\xaa\xa5\x13\x5f\x4c\xbf\xf1\x3e\x6a\x4e\x6a\xdb\x37\x4a\x76\xe8\x5f\x48\xb4\x4a\x66\x36\xc7\x4d\xfa\x04\xf5\x44\x32\xa3\x0f\xa0\xb4\x05\x9f\x31\x2d\x48\xb3\x29\x11\x66\x38\x60\x3d\x0d\xc7\x12\x3c\xd7\xa3\x0a\x85\x95\x62\xd5\xbc\xd0\x3a\x25\x4c\x2b\xfe\x61\x27\x46\x90\x12\x84\x7d\xa5\x65\xae\x45\x46\x13\xaa\xb2\x25\x4a\xc0\x62\x93\x6a\x31\x77\x8e\x19\x9e\x5a\xe1\x00\xd4\x9c\x12\x49\xfc\xc5\xc0\x7a\x5d\x4e\xac\x69\xee\x96\x92\x2d\x8f\xd9\xdd\xc5\x59\xff\xc3\xe0\x22\x26\x81\x1f\x06\x1f\x23\x11\xf6\x53\xff\x6c\x70\x17\xdd\xe6\x5a\x92\x5d\x2f\xd7\x97\x9b\xad\x38\x8a\xfe\xa5\x13\x74\x66\x3e\x3d\xd1\x8b\x5b\x81\x59\xe6\x95\xdf\xd2\x3a\x5c\xbb\xb0\x1c\xf7\x8f\x3e\x53\xa2\xd2\xae\xd8\xd4\x60\x62\x7d\x08\x91\xc5\xa4\xda\xd5\xb8\xd2\xf7\x45\xd9\x29\xb4\xea\x8a\xb5\x8e\x04\xdd\x49\xb7\xb0\xa3\x84\x3e\x48\x30\x1a\xd4\x99\x6c\x2a\xcc\xd2\x05\xc3\xfe\x09\x5c\x4c\xf3\x5c\x2a\xe3\x0a\x00\xe2\x44\xf7\x7f\x96\x7a\x41\xc1\x55\xd0\x45\x37\x84\x0c\x99\xb3\x1e\x4c\xa9\x9a\xe5\xe3\x6e\xc2\xe7\xc7\x05\x60\xde\x31\x5e\xd0\x39\xd6\x92\x34\x11\xcb\xe3\x71\xc6\xc7\xc7\x73\x2c\x15\x11\xc7\x8b\xfb\x29\x78\xc1\x9d\x3b\xe4\xd8\x37\x3b\xe5\xbf\x3b\xff\xe3\xb7\x47\xe7\x7f\xfe\xf6\xdd\xaa\x3d\xa8\x6e\xff\xfb\x2c\xc1\x0b\x99\x67\x36\x6a\x46\x84\x6b\xe3\x8e\x7c\x4e\x36\xed\xf7\x45\xbc\x5d\xbb\xe9\xaf\xa7\x57\x77\x91\x7d\x36\xfe\xf3\x53\xff\xd3\xe5\xf5\x2f\x11\xa7\xbc\xbd\xbc\xee\x7d\x8c\x18\x6a\xff\xea\x87\xfe\xa7\xfe\x75\xef\x7c\xe4\x1e\xb6\xd2\x7e\x4b\x6b\xf4\x23\xe3\x8f\x2c\x5e\x1a\xe9\x38\xe0\x4a\x4f\x27\xe8\x03\x17\xe8\x47\xbf\x93\x47\x63\x2c\xe1\x8a\x71\x77\x96\xec\xa0\x05\x4f\x81\xf1\x22\xb2\x98\x91\x39\x11\x38\xb3\x36\x03\xa9\xb8\xc0\x53\x73\xd3\xcb\x44\x60\x95\xcc\x90\x5c\xe0\x84\x74\x50\x02\xd4\x30\xed\xc0\xa6\x80\xaa\xc5\xa7\xb2\xbc\x2f\x39\x53\x74\x4e\x9c\x0a\x6e\xff\xbc\x35\x9b\xb1\xc5\xe6\x5c\xde\xfe\x10\x0b\x7b\x1f\xce\x7f\xb9\xed\x8f\x6e\xce\x7e\x5c\xbb\x9e\xe6\xb3\x68\x64\x37\x10\x40\x70\xca\xb3\x7c\xce\xc2\x7f\x6f\x3f\xb6\xc1\xc5\x6d\xff\x63\x79\x74\x97\xbd\xdb\x98\x32\xae\xe3\x20\x97\x77\xef\x2f\x2f\xcf\xfb\x91\x4b\xe7\xdd\x59\xef\xb6\x7f\x3b\xf8\x14\xd1\xcf\xd9\xdd\xb5\x81\xe1\x5b\x37\x4d\x37\x82\x8a\x89\xea\x69\x85\xd3\xdc\x37\x2b\x6c\xc4\x89\x7a\x36\xa8\xd4\x9c\xe5\xa3\x00\xa8\xc5\x84\x73\x80\x55\xe7\xc8\x9b\x54\x13\x33\xd2\x4a\x76\xa8\xe2\x6d\x42\xf5\xec\x78\xed\x46\xaf\xe3\xca\xb7\x7e\x08\x06\x9b\xd2\x28\xdb\x38\xcb\xf8\xa3\x09\xe7\x9b\x53\x7d\x2b\x5b\xd8\x2e\xfd\x8a\x44\x49\x2e\x04\x61\x2a\x5b\x76\x2b\x38\x5e\xbc\x2d\x24\x11\x44\x7d\xe2\x39\x53\xdb\x93\x5c\xef\x22\xe2\x3b\xfd\x8b\x9f\x46\x3f\xf5\x62\x0a\x1c\x9c\xaf\x67\x35\x61\x13\x15\x57\x71\xef\xe2\x17\x7f\x09\x43\xd0\x67\xc7\x6b\xa8\x46\x76\x4d\x32\xaa\xc5\xde\x04\x6b\xed\x35\x03\x89\x06\x11\x0a\x26\x87\xb9\x9e\x1c\x04\x99\x2d\x8c\xf7\xc4\xf0\x27\x33\xc8\x13\xf7\x8f\x52\x7b\x12\xd6\x05\xac\xa9\x2e\xa6\x16\xda\xb1\x5a\x35\x43\x84\x3d\x50\xc1\x01\x60\x15\x3d\x60\x41\xb5\x34\x6e\x5a\xd6\x73\x3d\x81\xff\x6d\xd7\x26\x18\x46\x4b\x8c\xeb\x86\x0b\x75\xe6\x83\xf9\xb6\xb3\x86\x54\x05\xb5\xad\x86\xb3\x55\x1b\x3a\x56\xbf\xad\xd8\x9c\x1d\x83\xfe\xa2\x09\xdf\x62\x79\xbf\x62\x32\x1d\x30\xa9\x30\x4b\xc8\x69\x86\xa5\xdc\x76\x15\x8c\x6a\xd6\x89\x19\xe5\xf5\xf5\xdd\xd5\xed\xe0\xfd\x06\xe2\x2c\x7f\xbc\x1a\x46\x99\x64\xb9\xf3\x2a\x8c\x05\xc7\x29\xd2\xbb\x3e\xe5\xc6\x83\x61\xe5\x95\x02\x42\xd7\x84\x24\xfb\x38\x8e\x08\xbe\xb7\x88\xa4\xb4\xea\x59\x68\x01\xa5\x76\x21\x50\xa2\x57\x02\x05\x9a\x9a\x63\x56\xe0\x10\x31\x95\x05\xac\x52\xbe\xc8\xb0\x9a\x70\x31\x37\xc4\x19\x4d\xda\x34\xbe\xbe\x51\xca\x14\x11\x22\x5f\x28\xea\x30\x91\xcb\x97\x2b\x94\xb4\xe6\xd3\x4f\x44\x4a\x3c\x25\xbb\xf8\xcd\xaa\x64\x9e\x9b\x9f\xc2\x3f\xc1\x2f\xd6\x44\x64\x89\x46\xe8\x02\xee\x1c\x3d\x5d\xb2\x0f\x98\x66\xb9\x20\x57\x3c\xa3\xc9\x96\x7e\x7e\xad\xa8\x8f\x06\x9f\xb4\xee\xd1\xbb\xed\x9f\x47\x1c\x10\x9e\xf5\x3e\xdc\xf6\xaf\x2d\xe8\x6c\xef\xfd\x79\x7f\x74\x71\x79\xd6\xbf\x19\x9d\x5e\x7e\xba\x3a\xef\x6f\x70\x9f\xd7\x36\xbe\x6a\x14\x2a\xbf\x7a\xb2\xf2\x0b\xec\xb0\xc8\x8d\x6a\xe7\xd4\x7c\x08\x78\xc7\x34\x03\xdf\x1d\x37\x3e\x3c\x8c\x18\x4f\x0d\xf4\x87\x74\x4a\xa5\x47\x83\x45\x03\xf5\x55\x96\x21\x9c\x2b\x3e\xc7\x60\x6c\xce\x96\x43\x86\xc7\x5c\x28\x50\x6d\xfd\x9d\x83\x44\xce\x98\x3e\xdf\xba\x31\x03\x75\x9c\x64\x04\x33\x94\x2f\x82\x3c\x05\x6b\xee\x9c\x50\x06\x01\x3e\x73\x2c\xee\x5d\xdd\x26\x1f\xfd\xe9\x0f\x85\x44\x58\x0e\x99\x81\x24\xb1\x4c\xb6\xc1\x0a\x9f\x34\x7a\xab\x76\x75\xe6\xf8\x9e\xe8\x55\x99\xe7\xc9\x4c\x2b\xc7\x53\x41\xa4\xb4\x26\xb1\x04\x33\xe3\x37\xb5\xaf\x3f\xd2\x2c\x1b\x32\xc6\xf5\x52\x38\xcb\x5b\x4a\x16\x84\xa5\x84\x25\xd4\x64\x24\x80\xcb\xd1\x5b\x64\xa6\x02\x2f\x66\x48\x72\xf0\xd5\xc1\xb2\x83\xda\x6d\x3e\x72\xd1\x46\x16\x84\x05\x1e\x87\x86\x33\x91\x6b\x3e\x71\x09\xd7\x9b\x59\x65\xf8\xd8\x59\xcd\x9c\xb5\xd8\x98\x2f\xe6\x8b\x8c\x28\x03\x7a\x0d\x4b\x0e\x9b\xa1\xd7\x3a\xda\x0f\xbd\x4d\x55\x9b\x30\x64\xc5\x98\xb1\xb4\x23\xea\x56\x18\xe4\xec\x91\x42\x3f\x60\x96\x66\xba\x15\x67\x7a\x8d\xcf\x22\x44\xc0\xf6\x34\xd5\xb8\xd3\xb8\x8b\x0c\x98\xe0\x5c\xb6\x12\x02\xd7\xa7\x91\x18\x63\xc6\x51\xe1\xcb\x06\xf2\xb6\x39\x24\xb0\xba\x0b\xcd\x22\x71\xc6\xed\x2a\x99\xd7\x73\x53\xc8\x05\xc1\x68\x6a\x14\xe7\x85\xa0\x2c\xa1\x0b\x9c\x6d\x25\xb2\x96\x62\x00\x6d\x68\xdd\xd7\x74\xa2\xc9\xe7\x9b\x15\x6f\x93\x22\x62\x0e\xb9\x55\x76\x98\x7e\x0b\x5b\x28\xc0\x36\x98\x92\xc8\xc2\x09\x8e\x05\xcf\x8d\x1b\x01\xd6\x85\xa4\x15\x47\xb5\x5b\xb5\xdd\xfa\x64\xe0\x38\xee\x6a\x8b\xcd\x36\x01\x0b\x75\xeb\x57\x6a\xc5\xf6\x6e\x22\x66\x70\x76\x55\xdd\x66\xd5\x0e\x04\x0f\xff\xb5\x8e\x76\x3e\xe1\x85\xa6\x19\x0b\xc5\x8d\x8b\x39\x5a\xd9\xce\x96\xf7\x71\x6e\xff\xc0\xe5\xe7\xc3\x51\x9b\xef\x46\xb1\x84\x36\x6e\x63\xb5\x93\xc8\xf5\x19\xa4\xc7\x59\x1a\x9f\xe4\x4a\x1f\x4f\x0c\xce\x53\xf4\x35\xe9\x4e\xbb\xc8\x81\xa6\x77\x50\xef\xea\xaa\x7f\x71\xd6\x41\x44\x25\xdf\xb8\xc0\x22\x1b\x67\x31\x64\x8a\x5b\x69\x65\x89\x66\xfc\x11\x78\x23\x11\x53\x12\xcd\xd9\x05\x65\x00\x68\xd3\x94\x4a\x25\x6c\x68\x08\x4b\xc3\x92\x01\x74\x5e\x16\x71\x0d\x85\xe4\x6a\xb6\x0b\x69\x60\x29\xf3\xb9\x16\xc1\x47\x14\xcf\x47\x82\x67\xbb\x30\x85\x33\x98\x0a\x48\xf9\x3e\xb3\x90\xe2\x39\xd2\xcd\x5a\x0f\xb6\xf7\x94\x78\x91\x4e\x0b\x46\x9a\x2f\xeb\x7b\x33\xb8\xb7\x9c\xd1\xd4\x86\xd1\x50\xe7\xb9\x85\xcc\xc3\x1a\x56\x51\x58\xbb\x46\xd6\xc0\x38\xc2\x49\xa2\x35\x85\x3d\x4f\x2a\xa8\x43\xe1\x2c\x99\xb6\xa3\x27\x9b\xe6\x26\x3a\x77\xc3\x5c\x68\x0e\x06\x11\x7b\xab\x10\xf2\x15\xfd\x8e\x97\x2b\xbd\xba\x4a\x11\x77\xd2\x6b\x82\xe6\x12\x96\x04\x76\x52\x9a\x4a\x13\x6a\x46\x2c\xe2\x59\xd8\xa5\x8b\xc3\xd5\x0d\x2f\x79\x2e\xaa\x18\xdd\x90\x9d\x91\x85\x20\x5a\xd2\x2f\xdb\x7d\x3d\x4d\x5f\xc7\x94\x78\xa0\xeb\x03\x5d\xbf\x79\xba\x3e\x35\xd5\x61\x9c\x89\x3b\xa8\xbe\xb0\x0b\xa1\x57\xb5\xb2\xae\x25\xf4\xe4\xf7\xfb\xa9\xb9\xd8\xab\x8a\x5a\xc4\x54\xe4\xee\x60\xca\x56\xca\xf9\x98\x8d\x84\xda\xb4\x70\xe1\xfe\x3d\xe7\x0a\xcb\x6f\xba\x43\xa6\xa5\x87\x7b\xb2\x34\xe6\x11\x7d\x3f\xff\x5e\x0b\xa1\x47\x92\x30\x09\xe1\x99\xbf\x37\xe6\x74\xbd\xb7\xce\xbc\x64\x74\x32\x53\x45\x28\xae\xb7\x01\x21\x75\xb6\x51\x2b\x1e\x14\x01\x8b\x45\x91\x0e\xf7\xcc\x0c\x7f\x4a\x14\xa4\x34\x29\xaa\x40\x59\x48\x4d\x99\xa2\x95\xa1\x6f\xb4\x21\x1a\xaa\x10\x1c\xec\x9a\x69\xbe\x1b\xc7\x93\xab\x6d\x6c\x64\x09\x5e\x4c\xbe\xb1\x31\xaa\xc7\xce\x60\x92\x08\xbe\x52\xfb\x07\x4b\x64\x76\x7a\x6c\xce\x81\xf3\x37\x11\xd6\x7d\xa4\xf7\x74\x41\x52\x8a\x21\x62\x55\xff\x75\xac\xe7\xf5\xbb\xd3\xeb\xcb\x8b\x51\x11\x67\xfe\x5f\x43\xd6\xcb\x24\x47\x5a\xf0\xe7\x42\x49\xc4\x38\xf3\xe1\xb1\x0b\x41\x9c\x2c\x64\xe7\xa2\x57\x35\x30\x05\x0f\x59\xdd\x08\x52\x9e\xc8\x2e\x7e\x94\x5d\x3c\xc7\xff\xe0\x0c\x5c\x5f\x3d\xf8\xe7\x69\xc6\xf3\xf4\x67\xac\x92\xd9\x31\x78\xa4\xd4\x31\x79\x20\x4c\x19\xb3\xb2\x5e\xae\x14\x92\x65\x24\x44\xd7\xfe\x4e\x8f\xb9\x08\x79\x97\x5a\x85\x4b\xc8\x42\xa1\xff\x57\x90\x31\xe7\xaa\x9a\x3b\xf3\xc9\x44\x92\x56\x9c\xb8\xd0\x4e\x6e\x2e\xd1\x9f\xff\xf4\xed\x77\x9a\x84\xb6\x59\xe3\xc1\xcd\xe5\x48\x7f\xff\xbb\x33\xfb\xbd\x6c\xc1\x59\x2f\x8d\x55\xd7\xba\x86\xcc\x6a\x98\x40\xd7\x9c\x01\xdb\x17\xa6\x20\x34\x47\xd8\x90\x43\xb1\x8f\x55\xdc\xed\xcc\xa4\x15\xee\x14\xd3\xbe\xc3\x75\xf6\x31\xe3\x63\x30\x88\xe4\x51\x41\x92\x35\x1e\xd9\xb6\x6e\x90\xf2\xc5\x44\xe5\x22\xc3\xcb\x95\x1e\x36\x2d\xfb\x85\xe6\x4e\x0b\x9c\x90\x22\x1f\xd2\x05\x4f\x24\x7c\x3e\x87\x80\x1e\x17\x42\x91\xd2\x09\x44\xf6\x28\x7d\xd9\xa1\x31\x51\x8f\x10\x47\xe6\x7e\xf5\x97\xb4\xb3\x44\x6a\x56\x06\xec\x72\xa8\x17\x39\xcd\xc1\xfa\x3d\x7c\xd7\x41\xc3\x77\x29\x79\x20\x19\x5f\xe8\xd3\xac\x7f\x20\x2a\xa9\xda\xc4\xfe\x1c\xd3\xec\x82\x2b\x1f\x9a\xb4\xcb\x7e\x0a\x92\xd0\x05\xd5\xa7\x6b\x44\x74\xbb\x4f\x9a\xb0\x50\x7d\xc0\x6e\x67\xc4\xe3\x36\xc0\x18\x10\x4e\x53\x4d\xc4\x50\x9d\xc5\x0d\xaf\xb0\x2d\xb3\x60\xea\x51\xd5\x81\xf6\x02\x8b\xd6\x2a\xa1\xc7\xb0\xcd\x38\xee\xab\x72\x07\xbc\xc5\x61\xaf\x27\xa9\xda\xb7\x96\x70\xe1\x41\x9e\x7d\xc7\x45\xa5\x8c\xb5\xf4\x6f\x0b\xff\x04\x19\x93\xd6\x54\x57\x6b\xda\x28\x1f\x40\xbd\x16\xcd\xc6\x19\xaf\xcc\x8d\xfe\x6e\xed\xd0\x64\x08\x59\x92\x84\xf5\xbb\x40\xad\xb6\xb1\xbe\xe5\xf0\x62\xb2\x71\xc4\x49\xc6\x65\x2e\x1a\x3a\x2e\xe3\x41\x9f\xda\x4f\xd7\x8d\xbb\x1f\x5a\x21\xf2\x4c\xc9\x56\x86\x8e\x8a\x85\x2f\xe5\xa6\x1a\x36\xa1\xac\xe4\x6c\xdf\xee\xa0\xa2\xf8\x3f\xce\x8a\x40\x68\x96\xa2\x42\x4a\x1c\xb2\xc2\x96\x25\xd1\x23\xc9\xc0\xfc\x9d\xf0\xf9\x02\x24\x20\x3b\x5c\xdb\x92\xbe\xc0\x15\x56\xa4\x83\x78\xae\x74\x63\x26\xc4\xc0\xdd\x71\x36\x7e\x21\xa8\x16\x0d\x32\xb9\xf5\xe5\x79\xac\x0c\x43\xeb\x86\x15\x52\x86\x3e\x12\x05\xad\x00\x16\x51\x38\x41\x53\x5d\x72\xed\x51\x3a\x5d\xd9\xb6\xd6\x27\xca\xce\xa4\xc5\xce\x17\x79\x20\xef\x33\x3e\x5e\xbb\xef\x97\xd0\x38\xba\xbb\x1e\x38\xe7\x41\x61\x57\x0d\xc0\x14\x36\x51\x27\x11\x22\x0a\xca\xdc\x70\xf0\xe3\xac\x91\xf5\x84\x09\x39\x1b\x94\x99\x0c\x1a\xc8\x73\x2a\x8f\xd3\x5a\xdc\x37\x8d\x11\xec\x9f\xa3\xb7\x63\x7d\x36\xe3\x9d\xaf\x5a\xdc\x37\x6d\x7f\x6c\xa9\x7f\xea\xc9\xc0\xd1\x50\x33\x42\x05\x6a\x34\x2d\x43\xce\xa3\xe6\x73\xd2\x04\x53\x50\xf4\xfa\x68\x38\xfc\x68\x0f\xbe\x89\xb1\x36\x92\x48\xa0\x93\x6f\xe4\xb2\x96\xad\x8c\x0c\x2b\xda\x7d\x80\x85\xbc\x6d\x78\x9b\xe7\x5b\x7a\xd5\x2c\x8c\x53\x54\xa1\xb5\x3b\x64\xa5\x41\x58\xff\x92\x44\x40\xfb\xf0\x0b\x65\x28\xba\x92\x3a\x68\x42\x3f\xdb\x46\x0b\xbf\xb3\x7b\x35\x30\x44\xd4\xf8\x39\x66\x78\xf5\x4c\xb4\xb8\xb6\xaf\xe0\xfb\xb5\x76\x77\x2e\x95\x96\x7a\xb4\xe4\x28\x88\x96\xef\x49\x8a\xa0\x5b\xef\x05\xdf\x78\x65\x2b\x2c\xf4\xa2\xe0\x56\xfa\x4e\x01\x6b\x96\x62\x45\x8e\x14\xdd\x18\x4f\xb9\x30\x5e\x12\xfd\x26\xc2\x2a\xc8\x2e\x2c\x38\xff\x98\x4c\x31\x73\x2e\xd3\x9a\xe1\xba\x2b\x67\x07\x56\xa3\x25\x48\x0c\xd1\x26\x20\xdf\xe8\x01\xc5\xe3\x90\x0b\x58\xcf\xb5\xe3\xb0\x56\xa9\xd7\xb0\x6c\x8f\xd8\x1b\xc9\x6a\x06\x9b\x2f\xd2\xd7\x34\xd8\x0c\x4b\x85\xec\x98\xea\x34\xb9\x40\xc2\xde\x43\x5a\xf4\xba\x82\x72\xa1\x6a\xd4\xd4\x1e\xa6\x49\x28\x56\x02\x88\x52\xd4\x56\x3b\xcb\x25\xb1\x49\x27\x73\x22\xa6\x4e\x10\x35\x95\x28\xfc\xd9\xb6\x25\x29\x1c\x97\x0f\x99\x09\x38\xcf\x57\x9b\xee\xa2\x1e\x5b\x49\xbf\x73\xf6\xd2\x68\xbd\xcc\x9d\x82\xb3\x47\xbc\x94\x68\x21\x4c\xa6\x8a\xf1\xa8\xbb\xc9\x83\x23\x2b\xfe\xc8\x5b\x6a\x94\x0b\x69\x80\x82\xd3\x0d\x8c\xd9\x41\x81\xc5\xe6\xdc\xae\xa1\x4e\x52\xf2\xf6\x56\xd5\x40\xf4\xaa\x5e\x25\xab\x5b\x11\xb2\x8b\xb4\xd5\x30\xac\xd9\x62\xe3\x80\xcc\x6b\xb5\x9e\x7e\xec\x29\xae\x13\x44\xc1\xca\x79\x8e\xc7\x24\xdb\xd9\xa1\xbb\x95\xc5\x09\xba\xb6\xa8\x45\x8a\xa3\x94\x18\x8f\x37\x54\x0f\x17\x65\xd6\xe6\xec\xb4\x22\xaf\xf2\x7f\xaf\x9b\x67\x54\x48\x65\x87\x89\x3a\x18\xae\x6d\xa6\x5a\x07\xce\x15\x5e\x21\x01\x88\x55\x95\xae\x1f\x5e\x25\x65\xf3\xd6\x76\x03\x09\xb0\xb4\x6a\xc6\xb1\x33\x98\xd6\xc6\xa9\x6c\x1d\xff\xdb\x10\xa4\x76\x30\x41\x8c\x33\x82\xa8\x2c\x5e\x56\x71\xc8\x8f\xcf\x9e\xd1\xe2\xae\x31\x24\xac\x96\x06\x7b\x6a\xab\x41\x11\xd7\xec\xf5\x5c\x17\x7a\xc9\x88\x56\xba\xb0\x58\x42\xf6\xbd\xe1\x69\xb1\x7c\xb4\x71\x9c\x7b\x17\x5e\x6f\x1d\xb8\x42\xe0\x8d\x52\x1c\x81\x48\x56\x1a\x1c\x32\x10\x05\xf6\x25\xfb\x91\xcd\x20\x19\x32\xaf\xa5\x03\x21\x52\x89\xe6\x78\xd1\x45\xb0\x6b\xaa\xf8\xca\x64\x44\x29\xbf\x85\x9d\xa2\x6e\x3f\x40\x5c\xd6\xac\xc0\x26\x33\x85\xbb\xca\x8a\x75\x8d\x33\xcf\x1d\x6a\xc6\x94\x3e\x10\x56\x59\xf2\xdc\x75\x9a\x2d\x8f\xb0\x94\x74\xaa\xaf\xa1\xc0\x08\xbb\x9e\x23\xd9\xb2\x60\xaf\xc0\xb6\xd6\x7c\xc9\xf4\xc6\xe7\x2b\xd6\x36\x93\xbf\x58\x98\x07\x82\x44\xb3\x90\x4a\x2d\xa4\x86\x29\x56\x8d\x25\xfa\x3d\xe3\xea\xf7\x01\xe8\x88\x53\xe4\x4d\xd5\x38\x6b\x4e\xe9\xac\xa0\xa1\xc1\xa1\xb5\x84\x83\x70\x90\xfc\xb6\x71\xe5\x77\x45\xba\x29\x9c\xbb\x4f\x2a\xd9\xf5\x57\x23\xbd\xea\xe0\x24\x0d\xcc\xf2\xde\xac\x17\xcf\x51\x0f\x15\x19\x32\x10\xc4\x25\x42\xce\xb9\x20\x25\xa8\x67\xc3\xcf\x7d\x28\xe4\x7c\xa1\x2a\xb3\x20\x56\x45\xa3\x0a\xe3\x9d\x41\xbd\x2d\x4e\x7a\x64\xb4\x93\xdd\x21\xbb\x21\xa4\x1e\x0a\xd5\xef\xc5\xaf\xd0\x10\x8c\xd5\xa6\x47\xaf\xa3\xb4\x7d\xc4\x45\xce\xe3\x44\xf7\x35\x54\xb3\x01\x9f\xa4\x5a\xc7\xdf\x26\x96\xb1\x4e\xc6\xf5\x06\xf7\xb0\xa6\x5f\x1d\x00\x47\x77\xc8\x3e\x70\x61\xaf\x60\x69\x01\xaf\xc6\x38\xb9\x3f\x22\x2c\x45\x38\x57\x33\x03\x84\x61\x6d\xe4\x4b\x4b\x0d\x5a\xd2\x00\xb2\xf1\x20\x09\x54\x26\x58\xd8\xcb\x63\x82\x1f\xb8\x1b\xc5\x90\x05\x8d\x00\xa4\x16\x60\x28\x02\x92\x7c\x9d\xda\x46\x00\xb4\xb6\x6e\x2d\xaa\x30\xd2\x57\x10\xd2\xd7\x9f\xb3\x08\xf3\x1d\xc0\xc0\x18\x91\x56\x64\x2f\xad\xce\xc0\x59\xde\x9c\xae\x24\xc3\xaa\x99\xfe\xcd\x8e\x8d\x50\x36\xe6\x1d\x3b\x03\x2d\xe9\x7c\xeb\x78\x6d\x04\xe8\x31\xc9\x05\x04\x9a\x54\xb5\xf9\x75\x32\xa3\x59\x61\x87\xff\xa6\xe3\x87\xa9\x9b\xcc\xc8\x03\xc9\x0c\x9c\x54\x22\xc0\x09\x6f\x2c\x68\xdf\xa2\xff\x63\x70\xc3\xd1\x77\x43\xf6\x11\xd8\x70\x96\x2d\x21\xd9\xdd\xb7\x8c\x55\xa9\x99\xfb\xca\x01\x28\x1b\xee\x82\xe2\x81\x98\xbd\x9e\xe1\x07\x32\x64\xae\x99\xff\x83\xee\xd1\x1f\xd0\x77\x75\x56\x21\xe7\x4b\x7f\x62\x9b\xc1\x87\xc0\x53\x1d\xdc\x72\x96\x51\x5a\x7e\xe3\x4c\x0a\x91\x41\xaf\x22\x7b\xc4\x63\xd6\x50\xf6\xc0\x93\x95\x80\x8d\xf0\xd4\x62\x41\x98\x1a\x31\x9e\x92\x11\xa9\x70\xcf\xad\x61\x12\x5a\x08\xb8\xe0\x29\xd9\xe8\x5c\xf3\xcc\xf4\x67\x30\x83\xc8\x7c\xec\xb7\x03\x82\xd8\x7d\xc4\xb2\xd7\xe4\x63\x4a\xab\x1e\xb9\x07\x86\xd8\x66\xdc\xdb\x3a\x06\x2f\xad\x7c\xd6\x81\x0b\xc1\x0e\xa0\xda\x39\x95\x61\xe5\xe2\x7c\xcb\xc7\xb1\x6c\x14\xd7\x2f\xeb\x99\xdb\xcb\x2a\x80\xbc\x00\x10\x3e\x41\xa7\x54\xcb\xef\xcd\x9d\x8f\xc0\x09\xb7\xb1\xec\x9b\xfc\xff\x46\xa6\xfd\x62\x29\x5c\x32\xd1\x91\xa7\xbf\xc2\xa1\x36\xe6\x79\x59\x80\xb7\x0b\x40\x65\x18\x81\x6c\x65\xf5\xa5\xe6\xc3\x53\x13\xe5\x46\x66\xd4\xc4\x95\xf7\x4e\xcf\x91\x3e\x1d\x7c\x6e\x72\xc6\x60\xd1\x72\x35\xe3\x82\xfe\xa3\x36\x18\xa9\x5e\x46\x2f\xbc\x86\x45\xec\x96\x19\x67\x2c\xad\x03\xb1\x1a\x91\x42\x45\x5a\x49\x95\xce\x84\xc6\x39\xc0\x23\x68\x36\x3b\xc9\x33\x83\xa9\x96\x70\x91\x9a\xc2\x26\x32\x8a\x14\xd3\xef\x79\xf1\x1e\x2b\xdf\x20\xb5\x59\xe4\x16\xb5\x2d\x99\x61\x36\x5d\x2f\x80\xfe\x25\x27\xf9\x9e\x82\xed\x2c\x92\xea\x33\x45\x31\x94\xd5\x00\x3c\x95\x45\xe0\xa5\x59\x1b\xcd\x9b\x8b\xf5\xfd\xbb\x9e\xa9\x0c\xe2\x32\x9d\x95\xce\x67\xea\x1a\x95\xdc\x60\x6e\xb7\xb2\xe8\x5c\x1b\x54\xaa\x3d\x98\x74\x9e\x23\x36\x61\x55\x46\xaa\x60\x3f\x96\xfc\x1e\x7c\x2a\x65\x99\x45\x3c\x91\x9d\xc4\xc1\x7b\x95\xa4\x8f\x27\x34\x99\x6c\xc1\xe4\x56\x85\xea\x75\xeb\x1d\x18\x50\x3c\x5b\xab\x08\x18\x56\x1c\xe9\xb9\x3f\x0a\x0a\x05\xca\x97\xc5\xcb\x1e\x5e\xde\x5d\x17\x21\x8f\xd1\x52\x8a\x11\x6b\x21\x46\xc1\x2d\xe1\xb2\xa1\x09\xb7\xde\x00\x61\x1b\x8a\xbb\x5e\xf5\x61\xd7\x9d\x08\xc3\x92\x5e\xeb\x91\x58\x4d\x81\xda\x78\x18\x3c\x48\xdf\xcb\x18\x10\xbd\x68\xf3\xc4\x27\xa3\x15\x85\x04\x17\x59\x6b\x12\xb9\x89\x4d\x95\xad\xe9\xc2\xf4\x3d\x02\x9f\xf1\xce\xae\x92\xc0\x05\x50\x84\xc4\x9b\x5c\x28\x97\xf6\xf8\x4c\x86\x4c\xf0\xc2\xc7\xd9\x58\x81\x13\xbe\x2e\xed\xee\x49\xf9\x59\x81\x8e\xe6\x38\x52\xc3\xa1\xac\x75\x3d\x36\x74\x24\x82\x85\x6c\x1d\x7b\x3d\xb7\x11\x8c\xb1\x0b\xce\x84\x51\xf1\x20\x0a\x01\xbc\x71\xb9\x44\x4a\x60\x08\x86\x87\x10\xe6\x9f\x8d\x96\x47\xa5\xb1\xc2\x38\x14\xb4\xf9\x42\x2d\x2d\x68\x2e\xf0\x66\x0b\xa7\xa9\x66\x98\xd9\xcc\xda\x2a\x77\x5f\x99\x4f\xa7\x91\xc3\xaf\xaa\x33\xe8\xc8\xaa\xb6\x95\x4d\xba\x85\x0e\x33\x35\x4a\x09\x02\x75\xde\x7d\x2a\x21\xc3\x07\x67\xb5\xf6\x94\x31\xe7\x19\xc1\xac\x4e\xed\xac\x7c\xbc\x62\x7d\xa5\x61\x52\x80\x24\xc0\x18\x94\xc8\x89\xd6\xb9\x71\x96\x95\xe6\x85\xa1\x04\x98\xf2\x18\xc4\xc6\x68\x52\x60\xce\x35\x0a\x81\xc9\xf0\x98\x64\xad\xa2\xcd\xcc\x07\x6b\xa9\x08\x5e\x29\x4a\x54\x35\x4a\xaf\x0c\x43\xa1\x2a\x93\x51\x37\x0d\x2c\x4c\x61\x5d\x2b\x42\xc4\x69\xa0\xdb\x0d\x51\x92\x24\x17\x54\x2d\x47\xd6\xf0\xd4\x9c\x69\xdd\xd8\x2f\x4f\xed\x87\x4d\xb4\xba\x13\xe4\xfa\x73\x86\x2e\x10\x6f\x04\x35\x00\x8b\x76\x0a\x4d\xb6\x5b\x6b\x6a\x95\x49\x6a\xeb\x16\xd6\x65\xc9\x35\x1b\xaa\xee\x62\xdb\xe1\x59\xe0\xb6\x11\x9f\xb8\xfc\xb3\xe6\x0b\x5b\x46\xb4\x6b\x61\xb1\x13\x06\x6d\x0a\x2d\x04\xe5\xc2\x02\xc7\x35\x09\x52\x9a\xe3\xcf\xa3\x05\x16\x38\xcb\x48\x46\xe5\x7c\x7b\xfb\xe2\x1f\xbf\x5f\x3b\xda\x53\x03\x70\x28\x2d\x5c\xe8\x67\x3a\xcf\xe7\x41\x69\x49\x80\x27\x09\x40\x06\xac\xc9\xde\xe6\xca\xb9\x01\x16\x17\x0d\x53\x54\x04\xb0\x11\x5a\x27\xa6\xd2\xf2\x67\xab\x2e\xe3\x64\x06\x25\xbf\x26\x98\x0a\x46\xa4\xec\xa2\x0b\xae\xc8\x09\xfa\x84\x17\xb7\xa0\xf0\x19\xc4\xf1\xa9\xb1\xd0\x62\x89\xb4\xe4\x94\x33\xaa\x3a\x43\x66\x62\xdd\xfc\xaa\x1c\x27\x9c\x19\xe4\x89\x04\x16\xd6\x37\x01\x26\x47\x07\xc1\xa0\x0c\x08\xb1\xa6\x92\x76\x49\xd7\x71\x68\x1c\x20\xc6\xcf\xe1\x92\x97\x05\x30\xae\xd3\x09\xbc\x88\x15\x91\x22\xa0\x44\xc0\xc7\x29\x27\x32\x50\xf6\x91\x97\xd9\x33\x3a\x21\x9a\x42\x86\x8c\x4f\x62\xc3\x84\x01\x9b\x70\xd8\x13\xba\xd3\x44\x70\x29\x6d\xb4\x9b\x69\x67\x7d\xcc\xf0\xad\x45\x02\xd8\x47\x14\xc3\xf3\x85\xe3\xaf\x96\x7b\x0d\x0a\x04\x55\x8b\xfd\x63\xe2\x51\x0f\x6a\x6f\xda\x5d\xe3\x75\x1d\x1b\x42\x82\x60\x69\xad\xb1\x10\xd6\x5a\x0a\x99\x6b\x21\x99\xfb\x31\x9b\xc0\xf6\x23\x8f\x33\x12\x50\x90\x45\xfc\x32\xa5\x19\x35\x5d\x0b\x41\xa0\xcc\x92\x81\x9c\x1a\x94\x88\x06\xd0\xc1\x04\xc1\xe9\x32\x58\x11\x6f\x6f\x34\x3d\x83\x64\x22\xe9\x5c\xf3\x4e\x40\x63\x64\xfc\x88\x2f\xdc\x61\x8d\xde\x02\x90\x18\x3a\xd1\x84\x18\x58\x2b\xf5\x17\xec\x08\x0a\xf6\xe9\xe3\x55\xe1\xaa\x75\x8d\x80\x6b\x17\x10\xaf\x66\xc4\x12\xee\xf0\x5d\xef\xfd\xe5\xf5\x6d\xff\x6c\xf8\xae\x08\xce\x71\x91\x9c\x8e\x91\x78\x0c\x0b\xce\x86\xcc\xfb\xd3\x7d\x8e\x2f\xec\x25\xc2\x69\x5a\x20\x2c\xd8\x68\x60\xe3\x0e\x6c\x7a\x2a\x36\x7a\xd2\x57\x9b\xf9\x40\x3f\x93\xf4\xba\x06\xe6\x76\x2f\xb1\x4f\x8d\x7c\x46\x95\x24\xae\xb9\x64\x8b\xdb\xd7\x4f\xe5\x4e\x7f\xd7\x9c\x82\xcd\x49\x28\xe5\xdc\x41\xc2\x9d\x42\xd8\x57\x60\x9e\x00\x0d\x68\xce\x0c\xd9\x5c\x04\xac\x1d\xdf\xa3\x39\x65\x90\x2f\xb1\x6e\x69\xef\xe2\x79\xb4\x29\x8e\x30\xb8\xb8\x8b\x2b\x17\xfd\x70\x79\x17\x23\x73\xf7\x7e\x59\x5f\xd1\x20\x6e\x61\x9d\x59\x39\x98\x62\x11\xfb\x69\x53\x0f\xfd\xca\x54\x4d\xf4\x23\x51\x3f\x99\x4a\x69\xfb\x08\xe6\xb0\x18\xc5\xa0\x62\x93\x91\x2b\x96\xd7\x9c\x0c\x7e\xaa\x28\xaf\x17\x47\xec\x38\x14\x64\xe8\xc1\xd7\xd7\x0b\x52\x29\xba\x06\x83\x1a\x0a\x72\x81\x65\xdb\xb9\x45\xf4\x8d\xc9\x99\x5e\xae\x21\xbc\xed\xcb\xa5\x14\xcd\xf1\x89\xf9\xb8\x91\x9b\xfe\x3a\x74\xce\xeb\xb6\x8a\xa5\x44\xbd\xab\x41\xc5\x5a\x9f\x97\xb5\x90\x2f\x0b\x79\x26\xf3\x0a\xd1\xbe\x41\x67\x82\x28\xcb\x57\x81\x37\x63\x67\xba\x1b\xd4\x8c\xb1\x1b\x5d\xc5\xc6\xa8\x27\x95\x85\x76\x10\x7d\xa2\x48\x64\x1b\x21\xb1\x9f\x34\xc4\x62\x19\x5a\xe6\x21\x86\x03\xb2\xd1\x2c\x61\xee\xdd\xaa\xab\xb4\x13\xe6\xe2\x99\x2a\x20\xce\xf2\xb5\xb7\xfc\xc4\x62\x36\x4d\x12\x14\x7f\x32\x14\xed\xf3\x67\x20\xa3\xc7\x61\x27\x3a\x17\xa7\x0d\x67\x0f\xa7\x1b\x52\x5b\xbb\x9c\xc6\x62\x7c\xce\xfc\x6b\x61\x4b\xf1\x02\x5b\x40\x79\x10\x06\x1d\xb6\x43\x15\x06\x5e\x77\xc8\x02\x9b\xa7\x34\xe2\x9b\x3e\x23\x0e\x47\x04\x30\x35\x35\x3b\xb5\xb1\x46\xfe\x66\x8e\x76\xa0\x1c\x35\xaf\x66\x31\x12\xc8\x4a\x3f\xf6\x74\xca\x19\x76\xf1\x94\x4e\xe3\xb1\xee\x8c\x10\xb8\x04\xda\x0b\x20\x10\x6c\xc7\xe4\x81\x58\x17\x08\x0e\x90\xe5\x82\x78\x76\xad\x1c\xb1\xaf\x94\x8f\x58\xa5\x99\x45\x2f\xc1\x3e\x4a\xa5\xb0\xb3\x4b\x4c\x6d\xcb\xeb\x0f\xf8\x1e\x12\x26\x65\xa9\x9c\x41\x8b\x63\x05\x5f\x36\x31\x13\x00\x25\x84\xe6\x6c\xe8\xb4\x2e\x3b\xf2\xf3\x82\x24\xdb\x64\x95\x5d\xb9\xea\xd1\xeb\x2c\xda\x31\x5c\x2d\x58\x6b\xdd\x0e\xda\x7e\xcd\x2e\x1a\x6c\x10\x36\xad\x89\x7a\x3d\xdf\x94\x25\xe6\x67\xd1\x2a\x21\x55\x4f\xe3\x27\x0b\x86\xd2\x72\x16\xb6\x9f\x62\x1a\xd6\x60\x1f\x24\xf5\xed\x3a\xa7\xe7\xc9\x8e\xba\x5d\xc9\x33\x8a\x2c\xce\xaf\x24\x2d\x6a\xf3\x28\xeb\xf2\xa1\x36\xf1\xd2\xbd\xf0\x6e\x17\xa8\xe1\x22\x81\x4b\x87\x2a\x0a\x01\x01\x2a\x01\x79\xdf\xa4\x06\x55\xe7\x34\x81\xd0\x52\xe5\x64\x0b\xc2\xd9\x6c\xc6\xb9\x5e\x3c\xa9\xf0\xdc\x43\xf5\x94\x71\xa0\x4a\xcb\xb5\x81\xc7\xed\x2b\x47\xe5\x20\xd1\xec\x5b\xa2\x69\x61\x06\x32\xd4\x49\x44\x29\xf5\xcc\xe2\x33\xdb\x3c\x87\x78\x82\x10\x42\x65\xaf\x48\x0b\xf2\x0a\x57\x3f\x65\xfe\xaf\x98\x83\x3b\xa2\x0e\x49\xb5\x2a\x36\xb4\x1b\x80\x78\x83\x95\x33\x0b\xa5\x01\x6b\x9a\x85\xd1\x1a\x4f\x9a\x29\xa0\x33\xb8\x30\x35\x6f\x20\x46\x7b\xc9\x73\xf4\x48\xa5\xd6\x85\x87\x0c\x5c\x4d\xbe\xd0\x8e\xe2\xb6\x38\x4e\x07\xde\x82\x6c\x0e\x99\x8f\xe7\x54\x21\x1c\xcc\xf0\x0e\x38\xc3\xb5\x8b\xe3\x37\xe7\x59\x7f\x00\x33\xae\x4c\x17\xa8\xca\xda\xdb\x70\x68\xb6\x30\xfe\x14\x8d\xec\x9a\x11\x10\xb8\xc5\x9f\x36\x27\x20\xd0\x78\x42\x0d\xb3\xf2\xcc\x1d\x92\x02\x50\xb5\xb5\xc1\xe2\x78\x00\xd8\x0a\x95\xaa\x74\xb7\x58\xf4\x8e\x0d\x09\x01\xc5\x46\x34\xca\x08\x28\x5e\xdf\x47\x4a\x40\x1d\xb0\xda\xba\x10\x51\xf7\x49\xb5\xa0\x75\xe3\xcb\x65\x72\x17\x7b\x11\x4a\x4a\x57\xb5\x92\xd2\x6b\x4b\x74\x0e\xca\x05\x6f\x1d\xa1\xd0\x46\x1d\x2c\xc2\xcc\x42\x2a\x0a\xa2\x46\xe3\xd4\x36\x52\xe6\xfc\x8c\x2b\x08\x0d\x4a\x00\x6d\x7d\x25\x5c\x75\xc8\xaa\x25\x90\xf5\x3c\x71\xd7\x28\x9f\xbd\x26\x44\x07\xe7\xcf\xcd\xc2\x5a\xb4\x7e\xf6\x61\xff\x46\x59\xb6\xb8\xe9\x65\x11\xb3\x70\x55\xd4\x28\x20\x20\x78\x6c\x13\x37\x5d\x71\x2a\x1b\xc6\xe0\x6c\x3c\x17\xf6\xd2\xdd\xa3\x6a\xb7\xc2\x9d\x1b\x87\x2c\x79\x19\xd9\x72\x63\xe7\x73\x77\x6a\x7c\xc9\xe3\xb4\x0d\x1e\x2c\xe0\x8c\xec\x0d\x1d\xa5\x9c\x64\xa1\x1b\xef\x80\x97\xca\x0e\x1d\x9b\x52\x79\x1e\x33\xab\xb4\x25\xd1\x84\x2d\xce\xfe\x13\x4c\xba\x2d\x86\x6f\x80\x6d\x29\x2c\x8e\x21\x0d\xed\x06\x00\xde\xeb\x6a\x84\xc7\x7c\xd8\x8b\x76\x39\x4b\x89\x60\x04\xab\xd9\xf3\x85\xe9\x9c\xee\x6a\x9c\x7e\xb6\x90\x9d\xd3\xbd\x00\xb8\x97\xc2\x60\x5a\x46\xc0\xb4\x08\x27\x29\xe0\x7c\x57\x14\xc7\xaa\xc2\x19\x45\x26\x5d\x1b\x2a\xdd\x29\x92\xa7\x5a\x99\x7b\x9a\x98\xa6\x0a\xab\xcf\x4a\x34\x93\x3e\xec\x21\x08\xf2\x86\x25\xf9\x22\x82\x87\x04\x7e\x1c\x05\xe8\x58\x23\x83\x1e\xd8\x62\x37\xaf\xf1\xa3\xc1\x73\x3b\xc3\x0a\x9f\x9a\xaf\xd7\x0d\x3b\x02\x16\x81\x04\x44\x0f\x0f\xb3\x30\xee\x60\xcb\xbd\x7c\xc1\x67\x13\x3d\xf3\x35\xed\x92\x2e\x7a\x9f\xf1\xb1\xec\x20\x53\x18\xad\x63\x04\x7b\x78\x6e\x20\x3e\xbf\x79\xfd\x21\x52\xbf\xcd\x08\xa9\x75\x86\x14\x6f\xdb\x87\x0a\x40\x11\x7a\xa5\x91\x40\x36\xc8\xa3\xdb\x17\x12\x76\xb6\x88\xd0\xe9\x6f\x7f\xb1\x3f\xd4\xd4\x2d\xdc\x50\x2e\x38\xb4\x8b\xb0\x65\xd9\xbc\x88\x45\x9a\xd9\xb4\x5c\x63\xea\x28\xe9\xb1\xeb\x4c\x2e\x43\xf6\x03\x7f\x24\x0f\x44\x74\x10\x56\x68\xce\xb5\x1a\x12\xf8\xd9\x21\x75\x30\x42\x4b\x32\xfe\x54\x8c\x2e\xf0\x9c\xa4\x7d\x10\x66\x83\x04\x09\x6b\xf8\xb1\x2e\x9b\x2a\xf4\x09\x00\x52\x30\xdb\xe0\xfc\xaf\x43\x66\xaa\x10\x9b\x18\x0e\xe0\x3a\xd4\x4d\x0c\xae\xc4\xdf\x7b\x87\xd2\xef\xbb\xe8\x56\x53\x3a\x95\xf1\x78\x83\x64\xd4\xba\xb1\x0d\xd9\x54\xf0\x7c\xe1\x75\x71\x3e\x06\x23\x80\x71\x2c\x55\x38\x94\x60\x30\xce\x9b\x94\xe0\x54\xcb\xf4\xeb\x09\x27\x32\x1d\xbd\x32\x8b\x68\x9c\xc4\x12\x12\x90\xe6\x0e\x3e\x7e\xc4\x46\x08\x1a\x3f\x50\x90\xc7\x52\x0f\x67\xf7\x64\x4e\xaa\x33\x22\x41\xbb\xf4\xd6\xbb\x28\xa4\x39\x0e\x9b\xaf\x1c\xe7\x3a\xdb\x8a\xb7\x7f\x3a\x1b\x61\x75\x44\x7e\xd1\xb9\x8d\x1d\x71\x05\xea\x4c\x0d\xde\xa7\xb2\xba\x38\x42\x6a\x1e\x9f\x53\x5a\xbb\xab\x5c\x2c\x38\xf0\xf4\x6c\xe9\x32\x08\x6c\xe2\xeb\x82\x2f\x72\x13\x1f\x43\xc3\x70\x89\x4a\xca\xa6\x52\x7d\xc2\x2a\x99\x69\x05\xa6\x48\x00\xdd\x53\xdc\x50\xc1\x95\x9f\xd6\x12\x53\x31\x83\xd3\xb0\xf7\x1a\xd3\x64\x03\xcb\x9c\x41\x90\x71\xe1\x86\xf0\x57\x96\xa1\xb9\xee\x2f\xaa\x67\x10\xd8\x57\xdc\x27\xf6\x09\xd4\x55\xdd\x40\x45\x9b\xc6\xdf\x8c\xb6\x62\x30\xdd\xbd\x47\x24\xed\x90\xcd\x74\x66\xf3\x17\x8b\x17\x91\x95\x90\x2a\x59\x4e\x2e\xe8\x56\x5a\xac\xb5\x0f\x43\xf5\x82\xc2\x72\x33\xc7\x0b\x2d\x8e\x28\xae\x6f\x49\x31\x25\x1d\xf4\xa8\x79\x81\xca\x85\xbe\x47\x72\x41\xdd\xd9\x07\x73\x4b\x13\xea\x00\x4b\xc7\x71\x88\xdf\x9a\xe0\x00\x47\xda\xd6\xae\x4f\x54\x8e\x7d\x80\x13\xd0\x44\x46\xd9\xbd\xee\xcc\xe0\xc8\x39\x07\x9d\x20\x50\x81\xda\xa5\x96\x45\x7b\xba\x91\xb0\x77\xd8\xe5\xfa\xaa\x28\x9b\x4e\x1a\x65\xd3\x20\x57\xbc\xda\xda\xd4\x04\x0a\xae\xf2\xcb\x66\x70\x76\x95\x9f\x3a\xd9\x67\x9b\x6f\xd7\xe4\x11\xd6\x7e\xbe\x49\x80\x8d\x82\x39\x6d\x40\x9d\x95\x9e\xc2\x2c\x7e\x6b\x09\x00\x30\x0e\x53\x73\x07\x5b\x69\xea\xbf\xfc\xbf\x0c\x0c\xaf\x59\x9a\xff\x42\x5c\x0c\x99\xf9\xbd\xe3\x61\xfb\xf4\x0b\x05\x1e\x06\x9e\x93\x02\x31\x40\xc4\xb9\xc5\x90\xdd\x62\x73\x43\x0d\xf6\x89\x47\x2d\xd3\x63\x08\x0a\x1c\xad\x54\x9c\x99\x63\x86\xa7\x80\xb4\xd2\x81\x08\x1b\x10\x57\x0b\xdb\x85\x21\x69\x03\x65\x0e\xdc\x4a\x33\x4b\x9b\x56\x50\x54\x64\x80\x3e\x8d\x28\x6b\x81\x1e\x0a\x37\x6d\x35\xf5\xbb\x72\x40\xdb\x49\xec\xb7\xbd\x9b\x1f\x47\xd7\xfd\x9b\xcb\xbb\xeb\xd3\x48\x6c\x3f\x3d\xbf\xbb\xb9\xed\x5f\x57\x3e\x33\x25\x3d\x07\x97\x17\xa3\xbf\xdc\xf5\xef\x6a\x1e\xb9\x06\xce\x7b\xef\xfb\xe7\xe1\x2b\x7f\xb9\xeb\x9d\x0f\x6e\x7f\x19\x5d\x7e\x18\xdd\xf4\xaf\x7f\x1a\x9c\xf6\x47\x37\x57\xfd\xd3\xc1\x87\xc1\xa9\x29\x71\x1e\xbc\x7b\x75\x7e\xf7\x71\x70\x31\x72\xe1\x8b\xe1\xa3\x9f\x2f\xaf\x7f\xfc\x70\x7e\xf9\xf3\x28\xe8\xf2\xf2\xe2\xc3\x60\x7d\x61\xe5\xea\xf9\xd6\xd6\x60\x08\xae\xaa\x40\xc1\x0c\x04\xa1\xf1\xd2\x12\x2f\xfd\x07\x98\x39\xaf\x0c\xc5\x1d\x75\xdc\xbf\x4c\x59\x93\x23\xcd\xe4\x9c\x05\xbd\xe0\x0f\x43\xe6\x5d\x1c\xfe\xda\x54\x78\xea\x6b\xf9\x47\xa3\x3d\x41\x3d\x38\x0d\xa0\x12\x44\x9d\x42\xa6\x90\x1f\xa9\x73\x8a\x01\xa5\x41\x95\x72\x5b\x79\xbb\xbc\xa5\x71\x83\x76\x4e\x30\x04\x6b\xe1\x4f\xd7\xd1\xbb\x2b\xe7\x1d\xd3\xc2\x09\x72\x3c\x58\x37\xab\xc7\x05\x60\x1b\x4b\x86\xe7\x2b\x15\x97\x0d\xde\x84\x45\xa2\xd0\xe7\xa6\xdc\x62\x44\x42\x71\xcb\x33\x82\x7e\xfc\x73\x31\x28\xb0\x76\x5a\xeb\x61\xbe\x02\xc7\x6d\x1f\x88\xdc\xac\xea\x26\x02\x8c\x7a\x72\x07\xd9\x9a\xa1\xe0\x64\xda\xaa\x29\x60\x9a\xce\x59\x90\xdb\x1a\xd9\xa9\x6d\xb9\x30\x74\x84\x4a\x54\x7c\x82\x6e\x48\x46\x12\x55\x94\x7c\x86\x5d\x5c\x64\xf9\x94\xae\x14\x4d\x1a\x93\x19\x7e\xa0\xdc\xe1\xf5\x19\x58\x43\x58\x47\x2b\x3c\xa1\x23\x54\x7b\x14\x4e\x50\x2f\x4d\x65\xcc\xc2\x22\xca\x71\x4c\xf1\x28\x1e\x76\x98\x8e\xca\x52\xcf\x18\x2b\x0d\x07\x15\xb7\xde\x4e\x08\x29\xf2\x7e\xe4\x48\x6c\xb4\xd5\x35\x7c\x8b\xe5\x7d\x45\x8d\xb4\xca\x9b\xcd\xd2\xcf\x8e\x3d\xd6\x17\x66\xab\xec\xd4\xaf\xf5\x08\x0e\xc0\x76\x7d\xd6\xc2\xd3\x6c\xe8\xd2\xcd\x38\x2b\x61\x08\x37\xee\x2f\xc2\x20\x7e\x7a\x8b\x6d\xb5\x1c\x04\x47\x65\xe4\xe9\xb2\xc5\x3c\xae\xe0\xd3\x4b\xff\xe5\x5a\x61\x69\x14\xac\x5b\x5b\x3b\xee\x4a\x22\x9e\xb5\xe5\x36\x17\x91\x00\x9d\x8d\x26\x60\x4e\xc7\x94\x59\xcc\x4e\xe2\xed\xbd\xae\xe2\x8a\x3e\x63\x1e\x47\x1a\x8f\xf9\x43\xa4\x72\xcd\x4d\x79\xf8\xca\xb3\x1b\x18\x8a\x76\x39\xb4\xfe\xf4\xd8\x0f\x1b\xee\xb5\x3b\x2f\xb7\xfa\xab\x75\xa6\x90\xeb\x50\x5f\x74\x13\xd5\x62\x5c\xea\xe2\xd8\xd0\xa5\xc9\x66\xd1\x67\xbf\x53\xb8\xaa\xb9\x08\x3c\xf8\x35\x36\x9c\xa6\xc6\xa6\xf2\x82\x55\x42\xb1\x86\x26\xf2\xf6\x1e\xee\xa0\xf5\xad\x61\x73\x5c\xa9\xe8\x78\x7d\x5a\x50\x5d\xe4\x4f\x08\x4b\xb6\x98\xea\x62\xa6\x9e\x5b\x30\xd2\x0e\xc2\x26\x89\xa8\x90\x40\x64\x9e\xcc\x0c\xa0\xa7\x66\xe7\x9d\x21\x7b\x0c\x36\x24\x0a\xb3\xeb\x85\x2d\x01\xdc\xc3\x67\xcd\xa0\xe8\x43\x14\xbc\x08\x62\x16\x85\x48\xba\x80\x10\x8c\xc1\xbd\xc0\x98\xdd\x40\xe0\xc1\x7e\xed\x40\xea\x5b\x00\x8a\x57\xd4\x6f\xab\x82\x15\xf7\x73\x0b\xd0\xbc\xf7\x05\x25\xbe\x66\x08\x01\xa0\x78\xd5\x08\xf6\x80\x27\xfe\x32\x20\xe2\x26\x77\x6e\x3e\xb6\x99\xac\x7a\xba\x6e\xb5\xff\xe0\x66\xf4\x07\x63\x8d\xcf\x6b\x52\x9f\x83\xd6\x3c\x0c\x10\x3a\x82\x6a\xa3\x36\xcf\xd2\x3a\x3a\x25\x3a\x42\x19\xbd\x27\xe8\x2b\x88\x63\xea\x5d\x0d\xbe\xea\xa0\xaf\xc2\x5c\x8e\xaf\xb6\x3a\x80\x76\xdc\x16\x53\x1c\x34\x90\x28\xa0\x37\x3e\x76\xb0\x57\xa5\x93\x68\xf7\xcc\x1e\x44\x54\x77\x0e\xf5\x97\xd1\x37\x94\x29\x22\x00\x23\xdb\xc4\x7d\xfa\x70\x42\xeb\x18\x31\x72\x21\x95\x15\x6b\x97\x0e\xd9\x78\x59\x76\x7d\x74\xbc\xef\xa3\xf1\x29\xdd\x19\xf7\x59\xb7\xb7\x9a\xfc\xb7\xe7\x30\xb7\xf5\xf7\xc1\x86\x74\xc2\x9e\xaf\x2d\x58\x70\x31\x59\x73\x5e\x0e\xf1\xa1\x55\xb3\x8a\xac\x48\x6e\x31\x2b\x37\x65\x93\xfc\xf3\xd6\xc8\xad\x41\x50\x65\xaf\x6a\x45\x6c\x3c\x6d\x8d\xe0\x7b\xa0\xb2\xa7\xa5\xb2\x7d\xc4\x13\xc7\x83\x6b\x7f\x81\x9e\x1a\x39\x2e\x68\xc6\x99\x21\xb5\x32\xe1\x19\x7c\x04\x0e\xbe\xb9\xaa\x46\x4b\x4f\x68\xb0\x26\x9b\x5d\xa1\x37\xc6\x9d\x6e\x9c\x91\xab\x63\x2d\x0f\xb5\xa7\x2c\x52\x29\xa7\x26\x77\x48\xd1\x39\xe9\x20\xa8\x8c\x5b\x84\x00\xd8\xf3\x0a\xe4\x06\x77\x9c\x2d\x7f\x67\x3a\x11\xc9\x8c\x3e\xb4\x4b\x90\x6a\x2b\x8d\xd7\xd1\xc8\x0e\xf1\x17\x17\xbd\x4f\xfd\xb3\x51\xff\xe2\x76\x70\xfb\xcb\x68\x35\x14\x23\x7e\x7c\x7d\xfa\xc3\xe0\xa7\xfe\x59\xf8\xc2\xcd\x2f\x37\xb7\xfd\x4f\xa3\x8f\xfd\x8b\xfe\x75\xef\xb6\x7f\xb6\xd6\x94\xba\xae\xb3\xaa\x12\x14\x36\x74\xbb\x42\x7d\xf3\x20\x72\xc6\x0e\x09\x00\x05\x5a\xdc\x7f\xa0\x92\xda\x24\x5d\x2b\xa2\xde\x0d\x9c\x69\xb4\xa2\xf7\x93\x20\x7f\xa6\x63\x90\xd5\x8a\x4e\xa8\x75\x27\x85\xe2\xab\x8d\xba\x60\xa9\x09\xd4\x44\x41\x8d\xe3\x6e\x45\x27\x76\xc1\x4e\x50\xcf\x52\x47\x55\xfb\x8c\x23\x2d\x3c\x13\x61\x46\x6f\x42\x32\xfc\xd0\xd1\x11\x2a\xaf\xf1\x09\x32\x80\xd0\x41\x4d\x0c\xdf\x20\x88\x7c\x58\x10\xf6\x95\x42\xe4\xf3\x22\xa3\x09\x55\x41\xe2\x0d\x17\xd6\xe9\x60\x9c\x6a\x10\xfd\xb5\x81\xb8\xf6\x16\xa3\xb1\x77\x9d\x3f\xf4\x2f\xaf\x6a\xfb\xfe\x44\x29\x6e\x93\x17\x37\xa2\x8c\xee\x41\xb1\xaf\x71\xa5\xae\x00\xa2\x6e\x31\xba\xa7\x30\x0f\xac\x46\xc0\xdb\xe4\x19\x1b\xe8\x81\x5d\x25\x83\x47\x73\x23\x6e\x57\xa0\x7a\x7d\xf4\x48\x74\xae\xd7\x87\x8f\x34\xa3\xd4\x17\x0e\x02\x89\xd0\xf7\xf7\x56\x08\x78\xd4\xd2\x8d\xbf\x02\xe8\xc9\xee\x0d\xcc\x21\x12\x64\xce\x95\x56\xc0\x8c\x9f\xbc\xa3\x85\x2a\x8a\x33\xfa\x0f\x40\x80\x11\xa4\x1b\xc4\x15\x40\x82\x4d\x1a\x06\x54\xdb\xec\xec\xa7\x2f\x08\x5c\xd4\xc1\x5b\x29\x05\xec\x94\xf7\x8b\xda\xb2\x27\x2f\x5a\x6d\x36\x5e\xb1\xba\x12\x0f\xed\x8a\xaf\x46\x44\xb5\xb9\xf0\x2a\x54\xa1\xc7\xb2\xa6\xea\x6a\xd3\x31\x3e\x4f\xed\xd5\xd5\x04\xf4\x12\xc9\xbd\x6c\xdd\xd5\xd2\x60\x5e\x4f\xf1\xd5\x8d\xeb\xf6\x7a\x11\x06\x2a\x06\xda\xa0\xe8\xaa\xf7\xb1\x40\x5d\x94\x76\xd7\xa1\x0b\x11\x8b\x1c\x2d\xfa\x50\xf9\x7b\xb1\x5a\xbb\xc5\xf2\x7e\xe7\xee\x6e\xb1\xbc\xaf\xe9\x6a\xd3\xcd\x79\x1a\x39\x72\x4a\xcb\x66\x83\xd7\x2c\x84\x57\x58\xbe\xbf\xfe\x3e\xea\x3f\x10\xa6\xf6\x22\xcc\x41\x13\x15\x19\x84\xcd\x4c\xb2\x06\x34\x7d\x70\x56\x70\x24\x5f\xbc\x2b\x08\x9b\x50\x02\x03\x63\x25\xea\x91\x10\xe6\xdc\xe8\x75\x1e\x4b\x3d\xb5\x66\xdb\x03\xaf\xae\xae\xcb\x86\xe8\x5a\xbb\xda\x45\xf1\x94\x22\x32\x8e\x27\x10\xb7\xdf\x4a\xfb\x8b\xa4\x22\xa3\xf2\x85\x75\x75\x8d\x24\x5f\xde\x73\xd3\xe7\x0c\xcb\x72\x97\x1b\xb7\x7c\x8b\x04\xfa\xa8\x99\x8f\x04\xf2\x4b\xf6\x52\xd0\xb0\x45\x1e\x21\x0c\xe4\x4e\x64\x10\x85\xb9\x56\xe5\x37\x85\x5b\x72\x91\x15\x36\x20\xdc\x40\xa0\x31\x83\xe9\x0e\xd9\x19\x59\x08\x02\xa5\xc4\x4e\xd0\x55\x46\xf4\x75\x99\xeb\x2b\x33\xcf\xb2\x91\xaf\xaa\x2e\x15\xc1\x75\xfc\xa9\x15\x40\xce\x93\xcf\xcb\x09\x6a\xeb\x27\xe6\xc0\x76\xd6\xcf\x2c\x58\x83\xfd\x67\x7f\x06\xeb\x0b\xf6\x36\xb0\xba\xc4\x22\x37\xe8\x4c\x4b\x13\x7a\x07\x7a\x37\x0e\x75\x03\x49\xff\xa1\xaf\x6a\x41\xe4\x8c\x67\x6b\xa7\xd0\x1a\xc2\xa8\xcd\x1c\xdc\x52\x3e\xe1\x24\x6c\x54\xd4\xa8\x2e\x34\xb3\xc1\x65\x74\x66\x9a\xa8\xbc\x02\xd7\x4d\xd1\x03\xea\x7a\x57\xb9\x85\x7e\xb3\x61\x46\x76\x68\xe0\x00\x2a\xec\x12\x21\x0c\x4b\x61\xe7\x2d\x24\xd0\xa5\x71\x54\xf9\xcf\x83\x92\x70\x3e\xaa\x98\x2a\x89\xa4\x12\x79\x02\x20\x85\x33\x22\x5a\x01\x23\xfa\xd8\xf3\xa2\x09\x3d\xe0\x6a\xd6\x66\xb1\x74\x41\x4e\xb1\x31\x14\x32\x02\x90\xb1\x5b\x6c\xa6\x5c\x29\x43\xd7\x33\xd0\x5d\xfd\x05\x71\x35\xb8\x27\x73\x1b\x44\xd4\x12\x4d\xe0\x00\x49\xd2\x1e\x92\xc4\x02\x2b\x7b\xda\x03\x00\x21\x25\x20\x63\xb0\xf0\x0c\x94\x2f\x79\x6b\xcd\xdb\x94\xe8\x10\xed\x4e\xa3\xac\x86\xe8\x0b\x7d\xee\xcf\x76\x74\x2d\xe8\xc9\x2c\x47\x90\x27\xb6\x4b\x78\x41\x34\x7f\x63\x16\x85\x36\x49\x8a\x4c\xda\xa3\x01\x4c\xb4\x6b\xe7\x4d\xc2\xa6\x4e\xe2\x90\x5d\xeb\x51\x98\x2f\x0a\x17\x73\x51\x83\x8c\x14\xd5\x12\x26\x08\xdb\xaf\x60\xd1\xeb\x22\x7c\xe4\x28\x28\xc1\x58\x37\xb1\x3d\x94\xfa\x78\x6f\xde\x41\x93\x0c\x4f\x1d\x58\x00\x94\xf7\x9c\x14\x7a\x92\x16\xf6\x4c\xbd\x4c\x93\xb8\x6a\x2e\x0f\xaa\x6c\x32\xaa\x17\x95\x73\xe2\x60\x1b\xe1\x33\xcf\xbf\xaa\x98\xab\xd3\xc4\x98\xb3\x5e\xc8\x21\x0b\xfa\x58\x83\xf2\x65\xb4\xa1\x2d\xc5\x7e\xd8\x67\x9a\x7a\x8b\x3e\xfc\xc9\xaa\xeb\x29\xda\xe9\xcd\xf1\x02\xec\x56\xe6\x0c\xf2\x89\xbf\x7f\x6e\x6d\xc8\x71\x17\x46\xfc\x3f\xff\xfd\xd7\x2e\x5d\x6b\x93\x0c\x0e\x65\xe1\x9b\x2b\x1c\x30\x41\xfc\x5b\x50\x25\x12\xc3\x45\x81\x4a\x2c\xb0\x74\xa4\x02\xdc\x9a\x5d\xe2\x84\x66\x58\x3e\x9d\x33\xb8\x12\xe8\xdf\xd8\x91\x42\xae\xbe\xc9\x2d\x6c\x06\x69\xb2\x6e\x34\x09\xe5\x92\x08\x43\x82\x1e\xe0\xa0\xa2\xf0\x0e\x44\x05\x6d\xb0\x6e\x93\x39\xa6\xad\xa2\x4b\xf5\xfb\xd5\x98\x41\x91\x99\x0d\x4f\x89\x18\xa5\x79\x14\xae\xb8\xa9\xed\x2b\xfd\xd1\x59\xae\x96\x9b\xdb\x97\x19\x4e\xee\xdb\xe0\x34\xe9\xf7\x6b\x9a\xdd\x2c\xca\x04\x4e\xe5\x58\x9c\xa9\x41\x41\x22\x25\x14\x24\x1b\xe5\x14\xe9\x99\xc0\x1a\x19\x54\x4e\x0a\xc4\x51\xcb\x3b\x0d\x56\x23\x8c\x1c\x6a\x69\x3a\x66\xe3\xd1\x6f\xd3\xee\x90\x7d\x30\xf0\xd1\x20\x2a\x9b\x01\x24\x50\xbb\x88\x7c\x5e\x70\x49\xa2\x3c\x81\x0a\x44\x5b\x9b\xc9\x63\x87\x51\x2d\x45\x95\x2a\x57\xed\x24\x44\xbd\x38\x9e\xd5\xea\x86\xaf\x4e\xb9\x9a\x02\x77\xba\xa7\x13\xba\xa0\x9a\x76\x46\x95\x27\xed\xe9\x6a\x8a\x16\x51\x04\x80\x6c\xa0\xb2\x65\x07\xf9\xe9\x95\x08\x22\x23\x0f\x44\xe0\xa9\x96\xb1\x30\xcd\x42\xdc\xe2\xd8\x38\x52\xc3\x4e\x36\x1d\xa0\x22\x49\x07\xd8\x02\x4a\xcb\x23\x88\x53\x19\xaa\x68\x31\x0e\x06\xdf\x39\x6f\xa1\xca\x15\xda\x42\x6e\xea\x85\xf8\xcd\x4b\xa2\x10\xf9\xac\x08\x33\x4e\xe4\x5b\x97\xf1\xb1\x1a\xf0\x8a\xaa\x83\xe3\xeb\x2f\xf5\x27\xaf\x34\xdb\x73\x99\x7c\x2e\xa5\x25\x95\xf6\x86\xb1\x75\xd0\x66\x98\xa5\x36\x6f\xa9\xa8\xa6\x6e\x66\x67\x2c\x17\x3e\x3a\xd5\x66\xdf\x04\xc0\x97\xa6\x4d\x83\xd0\x09\x17\x99\x93\xe4\xb5\x2c\x09\x0e\x3d\x2e\xb4\x48\x95\x33\x45\x33\x4d\x1c\x76\x0c\x5a\xcf\xcb\x99\x87\x9e\x81\x58\xca\x3a\x74\x13\x2a\x25\x65\xd3\x91\x5d\x49\x97\x82\xd3\xec\x62\x88\x69\xea\x93\x69\xca\xfc\xf8\xde\x35\xb4\xde\x32\x69\xc8\x5a\x4f\xdf\x27\xff\x80\x28\xc8\xb8\x9b\x8c\x85\x0c\x71\x39\x43\x23\x9a\x46\xc5\xf9\x60\xa2\x6d\xd4\x6a\x90\xcd\x56\xf3\x69\x8b\x2b\x44\x22\x09\x29\x4b\x26\xe5\x00\x62\x43\x55\x4d\xc6\x92\xac\xcd\x54\x1a\x30\x2f\xa2\xd9\x32\x06\x3e\xe3\xb2\x94\xf4\x84\x5d\x77\x36\x00\x16\x67\xd9\x18\x27\xf7\x5e\x3c\xf6\x4a\x22\x17\x0e\x06\x56\x8b\x8d\x50\xe7\xc2\x10\x97\x1e\x68\x02\xd2\x8d\x49\x28\x36\xc4\x64\x10\x15\xec\xb0\x8b\xce\x6d\x49\x43\x66\x8a\xec\x81\x3a\x69\x46\x6f\xa2\x69\x53\xb2\xc8\xf8\x72\x5e\x73\x9f\x95\x13\x4a\x76\xf1\x0d\xd7\xe5\xb3\xec\xf5\x2a\x2b\x31\xbd\xd6\x97\xd9\x4a\x04\xfc\x1e\xf0\x3d\x5a\x70\xc9\x8f\x19\x1f\x83\x5d\xca\xea\x85\x2e\xaa\x3b\x08\x2e\x2e\x9f\xe7\xb6\xb1\xe6\xe5\x13\x49\xe5\x22\xc3\xcb\x75\x3d\x98\x28\xe7\xa7\xdd\x37\x93\x49\xba\xd9\x6c\xd3\x3c\x3e\xb0\xf2\xf3\x27\x29\x1d\xe9\x24\x01\x5b\x43\x12\xf8\x97\x35\x7f\x10\x67\xff\x30\xf9\x25\xdd\x85\xe0\x5a\x52\xe0\x43\xa6\xf0\xd4\xed\xae\x95\x2e\xf9\x23\x23\x42\xce\xe8\x22\x2a\x80\xb3\x73\x44\xa2\x25\x69\xfb\x1f\x13\x7f\xd7\x82\x79\xf2\xc5\x91\x49\x15\xd7\x04\x22\x17\x38\x29\xec\x55\x49\x86\xa5\xa4\x93\x65\x90\xe1\xed\x83\xbb\x20\x63\xc0\x17\x7f\x88\x8b\xa8\x54\xba\xfe\xa2\x8c\xe2\xfd\xa4\x5b\xee\x9e\xce\x72\x17\x9f\x42\x9a\x86\x80\x3a\x50\xfa\x74\x25\xa9\xbf\x61\x75\xd6\x5d\xb3\x5c\xec\xc8\x6c\xae\xc7\xfe\x06\xe6\x32\xb5\xb7\xcb\xdb\x5c\x0b\x12\x51\x6f\xe6\x28\x84\x5d\x3b\x6c\xab\x68\xf9\xb4\xf1\x70\x1a\x30\xc7\xd4\x7e\xe1\xf3\x3a\xa2\x2c\x60\x1c\x61\x23\x98\x35\xd2\xca\x9f\x33\x3a\xea\xf3\xe5\xd3\xd2\x21\x55\xb8\xe8\xa0\x83\xe4\x4e\x80\x2d\xcd\x49\xfb\x8c\x64\x64\x2f\xd1\x8a\x5b\xd0\x79\xd9\xbb\x1d\x50\xf8\x5a\x22\x2a\x00\x70\x37\x9b\x49\xda\xd3\x78\x79\x54\x05\x75\xef\x6d\x50\x5b\x44\x76\xd6\x20\x52\x54\x8f\xfc\x67\x33\x50\x1b\xdc\x59\x45\x60\x9a\x73\xa6\xb0\xf5\x4d\x55\xc3\x2a\x68\x2b\xd3\x82\x3d\x31\x45\x37\x6e\x1f\x1d\x76\x88\x17\x76\x9d\xf4\xf5\x7a\x8f\xc1\x0b\x87\x42\xd6\x8c\xee\x23\x69\x12\x8f\xb0\xf1\x88\x6e\xc5\x4d\xeb\xae\xc4\x66\xa4\x62\x7d\x89\x8a\xa3\x29\x51\xa6\x0e\xa8\x2f\x76\xfa\x06\xc9\x64\x6f\xb1\xdd\x7b\xdd\x8a\x6a\x26\xd0\xee\x54\xdf\x10\x25\xdd\x8d\xb7\x82\x26\x66\x77\xea\xc8\xa5\xa9\x16\x49\x9f\xaf\x77\x8b\x5e\xc7\x49\xbe\xb6\x56\x95\xa7\xbb\x60\x37\xd3\xcb\x5e\xe8\x03\x50\x4e\x30\x04\xb6\xe7\x16\x18\x15\x0e\x6f\xe0\x33\x5c\x51\xe5\x37\x78\x63\xed\xf0\x1a\xf9\x61\x57\x96\xf3\x29\xb6\xd7\x46\x53\x36\xde\xdc\xa7\x24\xb5\xb6\x63\xd9\x87\x8e\xf2\xc4\x46\x11\x4b\x8d\x1b\xb5\xeb\x43\x50\x04\x42\x75\xfe\xd7\xc2\xb1\x68\xb7\x6c\x9f\x87\xac\x0a\x17\x7b\xf7\x3c\x8c\x8c\x1b\xef\xc0\x68\x21\xc8\x84\x7e\xde\x4a\x14\xbf\x82\x4f\xad\x7a\xa9\x97\xb9\x84\xb4\x0d\xd6\x0e\x40\xe6\x2e\xb4\x7d\xb7\xd2\x8f\x82\x2a\x45\xd8\x90\x01\xac\xb0\xfc\xe3\xc9\xf1\xf1\x38\x4f\xee\x89\x3a\xbe\x27\x4b\xc4\x45\xf4\xd3\xb6\x28\x1e\xfb\x47\x05\x37\xfb\x3a\x53\x6a\x21\x4f\x8e\x8f\xa7\x54\xcd\xf2\x71\x37\xe1\x73\x13\x6f\xc4\xc5\xd4\xfc\xe3\x98\x4a\x99\x13\x79\xfc\xfd\x77\xdf\x15\x5b\x3c\xc6\xc9\xfd\xd4\xe4\x45\xae\x5a\x71\xa2\x2d\xbf\x59\xad\x9c\xd3\x1e\x69\x55\x70\x36\x22\x9f\x35\x91\x56\xd5\x66\x6e\x0a\x39\x21\x51\xef\xe7\x1b\x24\x97\x4c\xe1\xcf\x27\xe8\x93\x29\xa4\x8d\x7e\xe0\xb9\x90\xe8\x0c\x2f\x8f\xf8\xe4\x68\xce\x99\x9a\xa1\x4f\xf0\xbf\xf6\xa7\x47\x42\xee\xd1\x2f\x04\x0b\xbb\xbf\x46\x60\xf1\x60\xcd\xe0\x85\x10\x39\x93\xb6\x42\xf7\x77\xff\xe1\x4a\x74\x9f\xa0\x6f\x8f\xbf\xfb\x0f\xf4\x7b\xf8\xff\xff\x07\xfd\xbe\x46\x53\x6b\x97\x73\x5b\x94\x4f\xaf\x6c\x0d\x56\x6a\x8b\x62\x45\xa7\x82\x17\x3b\x55\xd9\xf2\x3d\x4d\xee\xf9\x64\x32\x52\x74\x4e\x4c\x70\xe8\x08\x8b\x15\x2c\xa5\x2d\x01\x4c\xa8\x2d\xad\x62\xaa\x53\x16\xd0\xa6\xb6\x53\x93\xfa\xe1\x8e\x9b\xcc\x8b\xd2\x12\xe0\x53\x89\xca\x75\x50\x09\x5f\x91\x54\x9f\x8a\x36\xfe\x13\x67\x9d\x59\x2d\x00\x57\xa4\x39\x85\xe5\x82\xbc\x1f\x34\x74\xea\xf3\x4d\xa5\xcb\x57\xa3\x0d\xbe\x18\x17\x32\x4c\xed\xa5\xdc\xc7\x72\xa5\xf3\xcd\x9e\xe3\x1b\x2e\x76\x92\x97\xef\xc9\x4a\x08\x4b\x43\x18\x5f\x57\xa4\x22\x2c\x5c\x05\x59\x07\x5c\x78\x20\x21\xa3\xd7\x5a\xb0\xff\xcd\x56\x28\x2a\x8c\xaf\xad\xd9\xa1\xd7\x53\x3f\xf3\x9f\x6c\x1a\x26\x38\xde\xdc\xdb\x05\x8c\x39\x8c\x56\x5f\x71\x9a\x25\x56\x8c\xb8\x02\x6d\x60\xd3\x86\xde\x98\x3d\x23\xd2\x34\x0e\x5e\x60\x88\xbe\x63\x4e\x32\xb1\x49\x29\x95\xfb\x09\x39\xd8\xfb\x80\x67\x58\x81\xda\xdb\x81\xcf\x19\x53\x59\xc1\x22\x1c\xdc\x25\x88\x6c\x41\x59\x1c\xac\xb9\xc7\x96\x88\x16\x06\xec\xb6\x83\x04\x06\x47\xaa\x9a\x61\x66\x94\xa8\x09\x4e\x28\x9b\x76\x02\x30\x03\xc8\x95\x09\x79\x56\xd5\x4a\xde\x62\x79\xbf\x5f\xe7\xe0\xce\xe0\xff\x34\x2d\x00\xa8\x0d\x45\x5a\xdf\x21\x5d\xc9\xe4\x56\x58\xde\xef\xad\x38\xba\x5e\x8a\x26\x65\xd1\x5d\xec\x3d\x09\x85\x36\x40\xf6\xd3\xca\x55\x80\xfe\xe4\xc2\x27\x4d\xe1\x51\x9a\x91\xb4\x8c\x81\x51\x1e\xff\x26\x42\x30\x6a\x71\xe0\x85\x02\x88\x84\xb9\x56\xfc\x52\x63\x9e\x65\x4b\x73\x94\xf4\xcd\x85\xe5\xbd\xf4\x15\x28\x90\x9c\xe3\x2c\xeb\x20\x41\x72\xa9\xaf\xde\x0e\x92\x24\x9b\x1c\x39\xb4\xc2\x14\x65\x7c\x4a\x13\x9c\xa1\x71\xc6\x93\x7b\x39\x64\xfa\x2a\x61\x53\x73\x03\x2e\x04\x4f\x88\x94\xc1\xdd\x5b\xc4\xe5\xdb\x20\x56\x28\x3f\xa1\x88\x98\x53\x46\xa5\xa2\x49\xa9\xa2\x74\x77\xc8\x4c\x39\x15\xad\x0d\x25\xdc\x14\xcd\x80\xe1\x6a\x59\x80\x18\xfc\x84\x9c\x59\x2c\x58\x60\xe8\x36\x2d\xda\x45\x55\xd4\x51\xef\x1e\xb2\xbc\xdd\xf6\x8c\x54\x7c\x1a\x36\xd0\xf3\xa9\xfd\x0c\xce\xd0\x3a\x8a\xb9\x8e\xc9\xd9\x53\x83\x27\x73\x0f\x1e\xe6\x88\xa2\x88\x19\x89\xee\x36\x1f\x4a\xf1\xca\x92\x5f\x61\xc8\x35\x29\xaf\x9b\x68\xfa\xd4\x94\xa8\xb6\xf0\xc3\x65\xbf\x98\x2b\x3d\x6d\x21\xe6\xf5\x25\xf1\xa0\x89\xc4\x2d\x8f\x5e\x7b\x7d\x95\x74\x7c\xdd\x68\x2c\x6d\xc8\xc8\x91\xc7\xb6\xd3\xfc\xd0\xe0\x0f\x42\x27\xa5\x22\xc4\xab\x14\xf5\x9a\x6a\x45\xfb\x4b\xba\x2d\x5b\xdc\x28\x48\xb4\xac\x1b\xed\x56\xba\x16\x07\x24\x1a\x5b\x4c\xb6\x90\x68\x5a\x3f\xa8\x86\xf6\x0a\x51\x95\xd1\x61\x28\x0e\x9e\x3e\xd0\xa2\x0a\x90\xed\x6d\xad\x3d\x43\xcf\xa8\x91\x31\x23\x24\x8a\xad\x0d\x74\xa5\xa9\xac\x64\x46\x51\x53\x20\xcb\xd6\xd7\xd7\x52\x6d\x9e\x24\x84\xa4\x95\xc1\x05\x7a\x44\xaf\x0e\xe7\xe2\x0a\xab\x99\x49\xb2\x99\x73\x65\x8a\x50\x18\x9c\x0b\x67\x68\x31\xc0\x0d\xe3\x8c\x8f\xe1\x42\x02\x08\x0c\x97\x6e\x11\x84\x4b\x9b\x79\x93\x14\x7d\x1d\xdc\x2f\x3e\x01\xac\xae\xc8\xd9\x1e\xe1\x2f\xca\xd6\x99\x5a\x10\x8c\x18\x21\xbd\x8b\xae\x4a\x19\x87\xc1\xac\x26\x58\xb3\xfc\xb5\xd9\xab\x2f\x04\x99\x51\x9a\xc4\x5e\x20\x33\x22\xfa\xdc\x03\x64\x46\xa3\x31\x66\x7c\xfa\xa4\x39\x1c\x7a\x52\xe7\xbc\x79\x60\xad\xc9\x5a\x37\xa2\x55\x44\x3e\xee\x20\x2c\xab\x88\xe8\x75\xc1\x81\x94\x6a\x00\xbc\x2c\x1c\x48\x69\x30\xaf\x19\x0e\xa4\x34\xd4\xd7\x0b\x07\x52\x31\xd0\x06\x70\x20\xc6\xbb\x3b\xd2\x44\xdd\x8c\x29\x40\x9c\xe0\x38\x9f\xdc\xc0\x7d\xb7\x76\x8c\xb6\xd0\xac\xb9\x3e\x9c\x08\x67\x51\xa9\x60\xb4\x36\xa6\xbc\x2e\x1e\x06\xcb\x9d\x68\xcf\xbb\x5f\xa8\x34\xda\xf3\x22\xc3\x2c\x66\xfb\x50\xc8\x4f\x90\x44\x93\x9f\x61\x54\x45\x85\xf3\x8e\xb5\xea\xe8\x51\x18\x43\x66\x82\x17\x36\x47\xa7\x0e\x2c\xf6\xf5\x64\x23\xb4\x43\x5a\x01\x40\x8c\x88\xd5\x37\x4a\x67\xff\x54\xc2\x5b\x9c\xf1\x47\x2b\xb1\x01\xf9\xd9\xda\xcc\x2d\x95\x88\x10\xab\xa5\x44\xd3\x0d\xb1\x5a\xa2\x89\x1c\xb0\x5a\xaa\x37\xf8\xd5\x62\xb5\x94\xf6\xbc\x19\x56\x4b\xd5\x96\x6f\x81\xd5\x12\x35\xf3\xc5\x60\xb5\x94\x56\xf4\x8b\xc1\x6a\x29\xcd\xeb\x80\xd5\xf2\x85\x60\xb5\x6c\xe6\x23\x95\x68\x24\xd5\x87\xb7\x1d\x1a\x49\xa5\x08\x5f\xcf\x22\x76\x4d\xa4\x05\x81\xe1\x99\xd1\x48\xa2\x09\x1c\x02\x6f\xda\x07\xde\x54\x12\x9f\xed\x1b\xea\x5e\xdb\x68\x9c\xf2\x45\xd6\x10\x8f\x24\xda\x9f\xc6\x56\xad\x7d\x50\xe2\xd3\x86\x7a\x81\x71\xbd\xa9\xc6\xdd\x8b\x56\x51\x5a\x14\x23\x2d\x19\xb9\xac\x7c\x23\x9c\x87\x8e\xc5\x03\xe5\x6e\x11\x32\x56\x5a\x5e\x6f\x8e\x37\xb4\xb8\x4f\xbb\x6b\x45\x99\xb6\x1d\xe8\xd5\x65\xd5\xb4\xb4\x7b\xbb\x41\x80\xfd\xbb\xda\xf6\x04\x95\x1b\xf7\xd3\xec\xa6\x8b\xcc\xe7\x1c\x47\x85\x24\x7d\xc2\x50\x51\x48\xd2\xc8\xc6\xa5\x3c\x29\xad\xfe\xdb\x2f\xa7\x54\x2a\x51\x1b\x34\xb1\x32\xc2\x5d\x3c\x6c\x8b\x7c\x9b\xec\xc6\xe9\x76\x9f\xcd\xc9\x9c\x8b\x4d\x11\x1b\x95\x5f\x4a\xc5\x05\x9e\x6e\x52\xc4\xab\xd5\xaa\xc5\x8c\xcc\xb5\x10\x34\x6a\xdb\x48\xd3\xfd\xf6\xd9\x64\x36\xa9\xa1\xa2\x9a\x68\xe0\x3f\xd3\xef\xa6\xb6\x42\x68\xd3\xed\xde\x75\x9b\x5d\x29\xd2\x76\x86\x62\x87\x26\xb4\xde\x72\x65\x5f\x8a\xbc\xa4\x40\xdf\x95\x7e\x78\x1f\x06\xb1\xa5\xa7\xbd\x06\xef\x65\xb5\x43\x70\xc4\x49\x22\x8e\x42\x19\x35\x72\x7e\xad\x8e\x20\x5a\x77\xa7\xdb\xec\xb0\xec\xb9\xa8\x0d\x08\x6b\x62\x3a\x32\xe5\xbd\xb5\xe2\x14\x22\xbd\x97\xe9\x7b\xbc\xac\xc8\x30\x69\x66\x9b\xa4\x4c\xfd\xe9\xdf\xdb\x78\xc8\x41\xc8\xb7\xeb\x36\xa1\x19\x41\x38\x49\x88\x34\xd6\x2c\x1b\x30\x68\x2a\x27\xe6\x22\xdb\x65\x57\xf5\xe1\xd0\xf3\xd6\x2c\xd3\x83\x28\xa5\x05\xf1\x98\x0b\x78\x26\x78\x3e\x9d\x39\x6b\x86\xa6\x42\x3d\xb5\xaa\xbd\xfc\xc9\x84\x77\xec\xb2\x97\xef\x73\x9a\x6d\x67\x2b\x2a\x22\xaa\xf4\x30\x3f\x0e\x6e\x91\x9c\x79\xfa\x1f\x43\xb3\x95\x1b\xbb\x3a\xe8\xe6\x7d\xda\x6f\xbd\x65\x14\xba\xe9\x38\xe0\x90\x09\xcf\x32\xb0\xed\x49\x32\x7f\xa8\xab\xbc\x08\x13\xbe\xa5\x5b\xd6\x97\x83\xaf\xc1\x43\x20\x15\x9e\x2f\x1a\x49\x34\x57\x46\xd8\x92\xc8\x8d\xbe\xec\xda\x33\x01\x3b\x9c\x11\x56\x65\xed\xf9\x79\x15\x00\xf4\x8d\x85\x4d\xb9\x30\x9e\xbd\x85\x4e\xb9\x25\x79\xe6\xf0\xa9\xaa\x79\xb4\x60\x01\x51\x34\x71\xc1\xe3\x9d\x5f\xda\xc8\xf1\x3d\x3d\xbf\x21\xeb\x45\x71\xc7\xae\xa4\xcb\x78\x59\x04\x2e\x1a\x91\x38\xe4\x24\x80\x9b\x68\xed\x04\x8a\x5b\xeb\x01\x08\xee\x06\xf3\xc6\x04\x56\xb9\xe0\x29\x88\xba\x24\xe9\x11\x4e\x96\x49\x46\x93\x40\x05\x9c\x0a\xbc\x98\x55\xb1\x9b\xd5\x12\xe5\x07\x74\x81\xb5\x23\xdb\x3b\xba\x40\x1d\x18\x70\x9b\xa8\x51\x47\x57\x50\xdd\xf2\x80\x7a\x50\x81\x7a\xd0\xf1\x79\xbd\xac\x80\x35\x7e\xc1\x74\xd1\xd5\x73\x77\x80\x3e\x78\x01\xe8\x83\x6d\x0e\x5f\x81\x6b\x10\x1d\xbb\x03\x1c\xc3\xbb\x46\x70\x0c\xfe\x12\x7c\x55\x19\xf6\xf5\xe7\xf1\x85\x33\xb7\x57\x07\xf6\x92\xf0\x0b\x15\xe2\x42\x1b\xb9\x69\x1d\xfe\xc2\x3a\xba\x68\xb4\x2e\x2f\x8b\x86\xd0\x6e\x65\x5a\x01\x1d\x54\xde\x5d\xaf\x04\xf6\xa0\x7e\x1b\x5e\xc9\xb9\xd9\x67\x6c\x7f\xbb\xba\x0d\x61\x7c\x7f\x1b\xed\xa6\x5d\xa8\xbf\xa7\x87\xb7\x15\xee\x5f\x60\x99\x6f\x17\xf2\xdf\x73\x2e\x55\x22\xd0\x8c\x67\x00\x30\x1f\xad\x96\xef\xc0\x07\xab\xfa\x05\x72\x9b\x71\xb3\x20\x89\xd1\xb6\x56\x0b\xb9\xae\x25\xa9\xb7\x1e\xdc\x1f\xc8\xbf\xfb\x0d\xf0\x0f\x57\x76\xdb\x20\xff\x0d\x83\x5b\x27\x7a\x6c\x19\xe8\x1f\xf4\xb8\xd6\xe9\xe4\x66\xd7\xc8\xf1\x54\x26\x96\x2d\x62\x82\x56\x00\xdf\x77\x07\x41\x98\xe3\xcf\xa3\x05\x16\x38\xcb\x48\x46\xe5\xbc\xee\xcc\x53\xa6\xc8\xb4\x4c\x69\x91\x31\xf6\x8f\xdf\xaf\x0f\xc0\x8c\xbd\x8f\xae\xc6\x2f\xf8\x1f\xf3\xf9\xd8\x90\xa2\x1b\x88\x2d\x8c\xa0\x38\x12\x39\x0b\x21\x5c\xfc\xc6\x20\xc0\xab\x35\x45\x83\x27\x39\x44\xe7\xe0\x64\x06\x55\x38\x26\x98\x0a\x46\xa4\x6c\x59\xb8\x59\xc6\x7a\xa2\xb9\x81\xe9\x3f\x22\x09\xf5\x28\x8a\x13\x4e\x82\x4c\x65\x08\xdf\x70\xd8\xad\xeb\x58\xc5\x21\x18\x70\x35\x18\xb0\x7a\x6d\x5e\x63\x40\x60\x51\x3b\xbc\x65\x50\x60\xdd\xf6\xef\x83\x09\xec\x31\x38\xf0\x85\xa3\xe8\x9e\x26\x80\xee\x65\x23\x1e\x9f\x22\xd8\xf1\x10\x12\xf8\xf6\x42\x02\xeb\x8f\x6d\xab\xb0\xc0\x0d\xa9\xf7\xae\x97\x5d\x63\xb0\x7c\x3a\xf8\x93\xc6\x61\x79\xaf\x57\xf0\x45\xc3\x58\xac\x22\x5f\xfd\x10\x8f\xf5\x44\xf1\x58\x15\x4b\xdc\x2e\x26\x6b\x2b\xf1\xf8\xf9\xc3\x45\xca\x05\xa8\x9e\x32\x64\x64\x83\x97\x54\xe6\xe3\xd1\x93\x1f\xbd\xca\x39\x37\x3d\x81\x3f\x7b\xa2\x30\x22\x91\xd0\x74\x36\x26\x69\x0a\x26\x18\xc5\x6d\x31\x86\x82\x76\x18\x31\xf4\xad\x99\x2f\x96\x9a\xd8\x71\xc6\xd9\x54\xd2\x94\x04\x25\xdf\x0a\xc9\xca\x24\x65\x0d\x19\xec\x6f\x96\x11\xe1\x34\x78\x81\xbe\x96\x94\x25\x24\xd4\xea\x05\x4a\x39\x91\xec\x2b\x2d\x80\x3d\x10\x84\xd9\x12\xdd\x33\xfe\x98\x91\x74\x0a\x3b\x54\x1e\xcc\x11\xa2\xa4\x83\xa8\xf2\x9f\x09\x82\x93\x99\xe6\xb0\x43\x3d\x76\xf0\xcb\x1a\x11\x90\xd8\x6f\x83\xb2\x23\xbe\x99\x6f\xba\x08\x0d\x18\x9a\xe0\x44\x75\x90\xcc\xc7\x45\xfb\x29\x37\x75\x24\x1e\x08\x0b\x27\x5e\x34\xf2\x64\xe1\x42\x95\xe1\x41\x25\x6a\x73\xe7\x4d\x13\x40\x2f\xa3\x78\x27\xcf\xee\x03\xde\x05\xd6\xe6\x53\x2e\xad\x0b\x00\x71\xe6\x0f\x93\xcd\x61\xf5\x48\x5e\x80\xa6\x6f\x50\xb1\xd6\x14\xf7\xc3\xa5\xa9\xb4\x1d\x4b\xe1\x86\xb7\x20\xfe\xd6\x4c\x02\xed\x9a\xe5\x4e\xf9\x23\x93\x4a\x10\x3c\xb7\xaa\xa9\x66\xde\xe0\xc2\x31\x4e\x78\x3d\x7a\x2a\xcc\xa5\xdd\x66\x8b\xcf\x29\xbb\xd7\xbb\x5b\x60\x97\x41\x51\x14\xe8\xb9\x62\xd3\xde\x53\x86\xa3\x18\xc4\x2d\x76\x2d\xcb\x5b\x05\xc5\x04\xe5\x0f\x97\x75\xb0\x71\x0a\x6f\x42\x72\x6b\x63\xc6\x93\x50\x09\x06\x8d\xa1\x50\x99\x66\x75\xa6\xf0\x03\x46\x0a\x03\x5c\xe1\x8c\x64\x8b\xa0\x98\xc2\x02\x0b\xe5\xeb\x47\x1a\x24\x23\xcd\x1d\xe6\x39\x03\xf8\x29\xab\x21\x3e\x5a\xc0\x1a\x6b\x47\x28\x1a\xef\x0e\xd9\x40\x7d\x05\x05\x69\x39\x9b\x66\x4b\x84\xd3\x07\x2a\x0b\x1c\xb9\x84\x33\x99\xcf\x89\x28\x15\x29\x32\x4e\x66\x84\x1d\xad\xe8\xb1\x69\x59\xed\x01\x67\x34\x75\x45\xf3\xf4\x8f\x63\x32\xd1\xf7\xde\x02\x0b\xe9\x2c\x92\x15\xd6\x44\xbb\xb9\xa9\x5e\xab\x17\x3b\x93\x3f\x85\xc7\x0e\xcd\x8b\x13\x8a\xad\xee\x72\x5c\x3e\x9f\x41\xd9\xc7\xba\x00\xbf\x95\x49\xa1\xf5\x17\x93\x5d\x85\xb3\x4d\xf9\x9e\xfa\x05\x4d\x0d\xb9\xf1\x1e\xe9\x7e\x9c\x0c\x64\x06\xd7\xca\xfc\x53\x9a\xa0\x1d\xb5\x31\x06\x86\x67\x93\x50\xb8\x14\xa4\xc2\x8a\x26\xae\x84\xa5\x2f\x1d\x6c\xbe\xae\xdf\xda\x5d\x6b\xb3\xca\x04\x67\xab\x3b\x5c\xbf\x96\x37\xe6\xfd\xf5\xbc\xcf\x1e\x37\xd3\xf6\xda\x60\xcd\x84\x67\x59\x1b\x94\xb8\xd2\xcc\x4f\x8b\xcf\xd7\x8f\xa8\xe8\x47\x6f\x80\xdb\x0b\x38\x35\xc6\xec\x87\x33\x2b\x59\x48\x65\x77\x29\x7c\xc9\xf0\xd0\xa5\x35\x2b\x0e\x19\x9f\x00\x8e\x60\x56\x57\x04\x75\x21\xf8\x9c\xb6\xc1\xa1\x30\x18\xb4\xd7\xce\x81\xbf\xc1\x75\xe3\xdc\xfc\x50\xec\xca\x90\x97\xed\x11\x42\xbd\x30\x33\x72\xc6\x9a\x33\x34\xc7\x2b\xa5\x78\x1b\x2d\xf8\x26\x2d\xb9\x87\xe6\xc6\x44\x61\x57\x4f\x9a\x8a\x6a\xf7\x64\x09\x69\xea\xd9\x23\x5e\x16\x21\xad\x6d\x8e\x53\x11\x34\x6a\xcf\x0b\x76\x54\x16\x9c\x18\x1f\x00\x61\xf6\xcb\xac\x42\x93\x13\x74\x5a\x45\x86\xad\xcf\x92\x9b\xf3\x53\x0a\xd9\xe1\xb1\x0f\xe5\xeb\x36\xb7\x61\x7c\x18\x82\x16\x11\x0c\x67\xfd\x52\x7d\x8a\x28\x67\xef\x6b\x54\x6a\x07\x19\x5d\xce\x79\xce\xae\xaa\x5b\x7d\x86\x35\xb3\x64\xdd\x68\xb1\x76\x8c\x92\x6f\x87\x6d\xe0\x7a\xf4\x88\x06\x95\xe7\x7d\x33\x60\x52\x1b\x1d\x62\xa2\x65\x17\x5b\x6b\xcf\x03\x3d\xdb\x78\xa4\x09\xcd\x88\xec\xa2\x41\x85\x3e\xe1\xa2\x81\x40\xaa\x02\xbc\x25\xf0\x8b\x3a\x79\x27\x17\x34\x40\xbb\x76\x52\x0d\xa2\xb6\x22\x6d\x61\xa5\x10\x44\x8f\x39\x31\x5e\x12\xce\x00\x97\x01\x5c\x91\x82\x9a\x82\x8c\x5a\xbc\x54\x60\x70\xd3\xbc\x80\xda\xd4\x22\x53\x24\xdc\x7f\xa0\x65\x6c\x45\x04\xb6\x80\xfe\xc5\xa8\x6a\xb6\x74\x1f\x28\x9e\xcd\x83\xad\x5c\xaf\xb7\xfa\x8b\xd5\xbd\xa9\x1c\xe1\x6d\xdc\x7a\xeb\xd1\x79\xb9\xbc\xbd\xcb\xe7\x03\x7c\xea\xec\x4f\x18\x4d\x04\x01\x13\xe5\xdc\x67\x2f\xb0\x94\x08\xa9\x38\x87\x1b\xea\xe6\xec\xc7\xe3\xbb\x01\x22\x2a\x81\x7a\x65\x43\x96\xc8\x87\x8e\x16\x68\xff\x9e\x13\xa5\x7f\xae\x89\xee\xa3\x73\xc2\x24\x70\x02\xda\xb4\x58\xb3\x5b\x18\xfd\xdf\xb3\xf8\xfb\x35\x24\xbf\x12\x2b\x0a\xb4\xeb\x0b\x67\x6a\x32\x05\x78\x30\xb3\xb4\xb2\x82\x62\x4c\xd1\xf6\x7e\x15\x44\xf8\x16\xb1\x21\xec\x6f\x39\x6b\x29\x26\x9d\x16\x1f\x05\xa3\xa8\x91\xc2\xe6\x0b\x2c\x68\x05\x1e\xcd\xfa\xa0\x13\xf3\x4d\x65\xeb\x9b\x98\x48\x11\x83\x6b\x4b\xe0\xa3\x02\x4d\x1d\x29\x41\x08\xb0\x10\x4f\x4f\xf6\xae\xb7\x39\x0f\x7e\x62\xc1\x47\xdd\x21\xfb\xe4\x4c\xa6\xc5\xaf\xbe\xb6\xa7\x09\x64\x22\x29\xca\x41\x67\x8a\x5b\x81\x66\x53\x2a\xfd\x0f\x00\x0e\x27\xf3\x4c\x19\x98\xdf\x09\x14\x9d\x77\x03\x35\x4f\xaa\xb8\x84\xc0\x2c\x99\x5d\xf0\xdd\x6a\xfe\xd2\xc9\x88\x64\x6d\x64\xc7\xc1\xa4\x9f\x49\x4d\xdf\xc9\x7d\xcd\xe9\xdc\x06\xc8\xba\x98\x0c\x48\x6e\x0e\xea\xd4\x68\x25\xc6\x4e\x97\x19\xd0\x60\x82\xc0\xc8\x56\x0e\x15\x32\xd9\x00\x7a\x17\xad\x6c\x6d\x6c\x6c\xc6\x47\xef\xcc\x72\x63\xe8\x05\x61\x35\x64\x22\x67\x00\xa0\xe5\x4d\xee\x18\x49\x22\xa8\xb1\x7d\x27\x9c\x19\x19\xc0\x1a\x4f\xa6\x9a\x4d\x68\xc9\x0f\xfc\x2e\x9c\x81\x46\xc5\x73\x09\xee\xfe\x39\x51\xfa\x82\xfa\x1a\xc0\xf1\x8d\xd3\xa3\x83\x16\x82\xce\xa9\xa2\x0f\xc4\x03\xf3\x85\x5b\x77\x8a\x15\xce\xf8\xb4\x27\x14\x9d\xe0\x44\xdd\xe2\x9d\x74\x66\x6c\x9b\xd9\xd6\x81\xee\x86\x81\x06\x67\x7a\xf1\xa7\x84\x11\x01\x13\x85\x92\xa3\x95\x47\xb8\x6d\x31\xd2\x82\x73\x03\x54\x6f\x62\xc0\x4d\xa5\xb7\x31\xe0\x5c\xf1\xb9\xd6\x48\x71\x96\x2d\x01\xb4\x54\x3f\x99\x61\x39\x73\x1b\x6d\x90\x4e\x9b\xdc\x4d\x76\x71\x4f\x71\x32\x23\x37\x50\x63\xbe\x6a\x71\x4b\xa3\x7c\x47\x58\x3e\x7f\x77\x82\xfe\xa7\x98\xe3\x69\xef\xf4\x87\xfe\xe8\x6c\x70\xd3\x7b\x7f\xde\x3f\x0b\xe6\x63\x9f\x7c\x1a\xdc\xdc\xac\xfe\xfa\xc3\xe0\x76\xf5\xc7\xab\xcb\xab\xbb\xf3\xde\x6d\x55\x2b\xe7\x97\x97\x3f\xde\x5d\x8d\x3e\xf4\x06\xe7\x77\xd7\xfd\x8a\x4f\xef\x6e\xfd\x43\xfb\xec\xaf\xc1\x21\x82\x78\x0f\x88\x4e\xa9\x1e\x6d\xf9\x9c\x1d\xa1\xf8\xc5\x13\x74\x67\xbd\x37\xd4\xa2\x9d\xbb\xa0\x09\x93\x9b\xf0\x88\xa5\x66\x55\x50\x54\x78\xc8\x90\xfb\x5c\xcf\xbd\xee\x53\xe3\x56\x4a\x66\x04\x65\x9c\xdf\xe7\x0b\xcb\xc1\x4c\x80\x23\xe3\xc6\x22\x43\x64\xd0\xda\x0f\x83\xdb\x13\xef\x45\x5a\x6d\x2c\x48\x41\x74\xa4\x0e\xe3\xc2\x8e\x6b\x82\x91\x63\x21\xc8\x03\x9c\x49\xef\x5d\x0c\x7a\xf0\x1b\xb0\xae\x1f\xd3\x1a\x66\xaa\xd4\x4d\x9a\xda\x82\x07\x6e\x62\x41\xc3\xf1\xf6\xad\x5b\x4d\xbf\x1c\x06\xf2\x12\x8d\x49\x82\x73\xe3\x7c\xd3\xd7\x91\x10\x5c\x84\x03\x2e\xb6\x7d\xc7\x46\xdf\xad\x4a\x19\x31\xb0\xbd\x84\x33\xa2\x3f\x09\x4e\x8e\xd6\x97\x41\x97\x76\x90\x6d\x33\x0b\x8b\xe9\xea\x4c\x17\x1e\x13\x80\x8a\xd1\x9c\xdb\x03\x98\x51\xf0\xe6\x61\x85\x1e\x09\x44\xb9\xe6\x16\xb3\xd2\x68\xc8\xfa\x04\x42\x77\xc6\x0e\xed\x00\x8a\xa3\xe8\xd7\x5a\x96\xb9\x0f\xb1\x58\x7f\x2f\x49\x15\xbb\xdc\x21\x54\xf1\xcc\x34\x0a\x3c\xd4\xb9\x56\x61\xc4\x35\x16\x7f\xc7\xb3\x2b\x2c\xcf\x6b\xa4\xa0\xd5\x7b\x63\x03\x4b\xd7\xcc\xb5\xc9\x78\x5c\x7a\x46\x04\xa1\xd3\x2e\x5f\xdd\x87\x05\x6c\x5c\xab\x5b\x9e\xe2\xa5\x26\x0e\x88\x69\x90\xf9\x62\xc1\x85\x42\x35\x6d\x20\x38\xe9\x66\x7c\x70\x33\xd8\x79\x78\x16\x05\x8d\x68\x39\x40\x56\xa0\xdc\x35\x8b\x58\xb7\xeb\x5a\x9c\xfb\x30\xf5\x15\xd4\x35\x8f\xb8\x38\x8f\x14\xdf\x88\x42\xab\x44\xd4\x5d\x22\x99\x16\xfa\x1a\x6e\x0a\xde\x5b\xd5\xfb\xa5\x6b\xa1\x72\xcb\x33\x32\x51\xa3\x4a\x6f\xca\x1a\xc3\xa1\x6e\x91\xd5\x25\xf9\xd0\xe9\x6c\x0f\x2d\x36\x97\xe5\xbf\xb7\xde\x2e\x2d\xc0\x07\x7a\xbc\xe0\x5c\x19\x29\xb2\xd0\x34\x90\x5b\x4d\x30\x02\xd8\x4e\x4d\xa5\x80\x42\x54\xd3\x92\xf9\x3d\xe3\x8f\xcc\x5b\xcc\x65\x77\xc8\xfa\x18\xca\x57\x78\x75\xc1\x06\x2c\x18\x59\x7d\xa3\x94\x1e\xa1\xe1\xbf\x12\x0c\x89\x82\xee\x6d\xa9\x9f\x6c\x89\x8a\x8a\x07\xd1\x77\x4d\x4e\x8f\xb1\x26\x3b\x41\xcd\x4c\xd8\x62\x75\x2b\xb2\xb0\x16\x6f\x33\xcf\x22\x9c\x1b\x9c\xa6\xba\xab\x2e\xfa\xd9\xd9\x67\x20\xbe\xa2\xa8\xd4\xa1\xcc\x8d\x93\xe1\xa5\x4b\x92\xaf\x5a\xd8\x7d\xe4\x9d\xef\x3b\xe2\x62\xfd\x02\xfb\x1c\xbb\x8a\x55\x8e\xd4\x64\xc6\x8c\xdd\xb4\x45\x78\xd9\xa9\xff\xe8\x86\xac\x8f\x3f\xfd\x00\xe0\xdd\x8a\x08\xad\x6c\x82\xcc\xc0\xb2\xe5\xff\x32\x9b\x05\xf9\xe6\x36\x36\x39\x75\x80\xcc\xd6\x33\xa9\xcf\x0f\x78\xd6\xb4\x18\x30\x06\x20\x8a\x0c\xe4\x80\x2e\xea\x41\xdd\x0a\xa8\x48\xa0\xaf\x42\x17\xc5\x43\xa7\x8c\x6f\x0a\x1c\xa8\x21\xa6\x24\x20\xa6\x9b\x7a\x62\x92\x40\x4d\x45\x68\xf5\x7e\x28\x6a\x0f\x69\x36\x9a\xb7\xe0\x55\xcc\x9d\xe6\xc9\x35\x2d\x54\xec\x97\x08\xc2\x59\x19\x6e\xf0\xe1\xbf\xaa\x87\xfe\x31\xc7\x02\x33\x05\xa1\x25\x56\xf2\x16\x24\x08\x71\x24\x9f\x21\x78\x8b\x19\x73\x2d\xfc\x14\x6e\xae\x73\xa5\x4f\xe9\x03\x61\x88\xa6\x1d\x44\xbb\xa4\xdb\xb1\xc5\xe7\x64\x3e\x2e\xde\x9c\x69\xc9\x61\xc8\x56\x52\x46\xba\xa8\x97\x49\x6e\xbf\x20\x2c\xc9\xa0\x4e\x4c\x10\x05\xe3\x29\xdf\x3a\x7f\xc6\x4b\xd0\x2f\x60\x2b\x8b\xe6\xb9\x7d\x10\x7c\x38\x64\x58\x1a\x5f\x73\x06\x27\xbd\xf8\xbd\xaa\x16\x54\x14\x7f\xf0\x84\x80\x71\x2b\xd7\xd0\x93\x6d\x92\x01\x2b\x5e\xb7\x41\xf0\x06\x6c\x4c\x91\xca\x13\x24\xc5\xa0\xaf\xb1\x42\x19\xc1\x52\xa1\xef\xbe\x69\x15\x73\xe1\x26\x58\x70\x57\x7b\x7c\x8b\x80\x54\x17\xd1\x56\x57\xd0\x0e\xc0\xe4\x6d\x05\x5e\x2f\x40\x76\xf4\x3e\x2b\x8e\x1e\xa8\xcc\xa1\xf4\x4e\x10\x43\x6f\x8a\xa7\x50\x25\x5d\x50\xa0\x51\x99\x6a\xf8\x88\x83\x7f\xb1\x6e\x49\x3b\xac\x0a\xca\xb2\xca\x13\x35\xea\x19\x64\x49\x16\xb1\x65\x33\xac\x86\xcc\x72\x56\x17\x8e\x11\x94\x5a\xe8\x65\x59\x1c\xcf\x85\x21\x64\x91\xe9\x09\x43\xe1\xa0\xae\x5f\xa0\x0b\x50\xbf\x7c\x08\x50\x5c\x44\xd0\x1f\x16\xad\xa9\x0d\x99\x4f\x41\x0b\xdb\xae\x94\x76\xaa\xac\xc0\xcf\x28\x04\x57\x74\x7f\x6e\x2a\x38\x35\x10\x86\xeb\x2b\x6c\xae\xf1\x9a\xac\x58\xde\xd7\xc8\xc6\xfb\xee\xa0\xb9\xa8\x5c\x6d\xc5\x86\x6b\xf6\x91\x57\x18\xc5\x6b\x36\x37\x90\x2d\x76\x51\xc0\x7d\x2c\xda\x73\xf9\x65\xa3\xa1\x0f\x52\x88\x2d\xdf\xcc\x05\x8b\x58\x6d\xc7\x3a\xc0\x1c\x4d\xd3\x20\x74\x34\x88\xab\x83\xd0\x62\xc7\xf8\xec\x9b\x35\xfe\xd1\xc5\xdb\x9e\x7e\xa7\x98\xbf\x9b\x8a\x0f\x2e\x5b\x9d\x78\xbd\xb0\xd7\x4b\xff\x86\x13\xc2\x92\xa5\xe9\xc9\xc1\x65\xad\xe6\xc8\x39\x64\x21\x0c\x26\xf7\x4a\xf1\xd0\x16\x63\xeb\xa2\x3e\x5c\x34\xae\x36\x1b\x9e\x38\xb7\x41\xf0\xf2\x90\x69\xcd\x44\xdf\xf1\xd2\x0c\xda\xb5\x1f\x93\x78\xd5\x09\x30\xf9\xb9\x3b\x79\x5c\xe6\x9b\x51\x10\xeb\xb4\x09\x97\x1e\x0c\x6d\x00\xcc\x1b\xea\x4f\x4f\x50\xca\x93\x7b\x22\x8e\x05\x49\xa9\x3c\x01\x0f\xb8\xaa\x75\xbd\xcd\xb5\xb6\xbd\xb3\xa4\xd1\xb4\x4e\xea\x6a\x55\xb3\x39\x14\x1c\x83\xa0\x62\x57\xd2\xa0\x83\xe8\x04\xd4\x09\x97\x5f\x60\x92\x0e\xac\x75\x1b\x11\xa6\xc4\x72\xc1\x29\x53\xde\x94\x55\x5a\x08\xa7\x69\x68\xa1\xad\x2e\xc4\x56\xec\x23\x52\x66\xcb\x69\xdf\xce\x88\x24\x2e\x2c\xc0\x4c\x4a\x71\x5b\xcd\xdf\xb0\x8b\x05\x56\x33\x09\x19\x12\xf1\x1a\x58\xa5\x0b\x3e\xd5\x2b\x84\x17\x10\x55\x60\xac\x14\xc5\x47\x3e\x8e\x5f\x2a\x9a\x65\x43\xc6\x08\x49\x25\x82\x64\x86\xaf\x2a\x33\x71\xf4\xa7\x1d\x84\xd3\x14\xfd\xef\xaf\x3f\x9c\xff\x72\xdb\x1f\x0d\x2e\xc0\xe6\x3c\x38\xef\x7f\xd3\xf1\x3f\x5e\xde\xdd\xfa\x5f\x8d\x85\xe5\x81\x08\x34\xc7\xf7\xa0\xe2\x31\x69\xe4\x3f\x88\x76\x0f\x47\xea\x72\x94\xf4\x13\x49\x5c\x04\xa9\x15\x53\x7c\x56\xbb\xdd\xc3\xda\x8a\x25\xc6\xe6\xd7\x42\xf9\xbd\xf6\x9f\xac\xa7\x41\x47\x3c\xbe\x0b\x27\x06\xce\x09\x53\x9a\xc7\x58\x6b\x5f\xa1\xfb\x16\x04\x47\xd8\x94\xb2\xba\x38\x37\xc2\x1e\x9e\x52\x88\xff\x91\x2c\x7f\xd2\xea\xf5\x15\xa6\xa2\x31\xed\xf5\xd9\x03\x15\x9c\xc1\xd4\xbc\x59\xab\xa8\x25\x4d\x94\xf3\xb6\x05\x87\x4a\x1a\x59\x18\x22\x29\x16\xb5\xb1\x94\xa5\xc4\xed\xd7\x31\xdd\x9e\xf1\xfe\x92\xcf\x4a\xb8\x6c\x38\x69\xd9\x0d\x7e\xc0\x34\x83\x38\x58\x77\xd1\x14\x34\x38\x64\xb7\x97\x67\x97\x27\x88\x64\x78\xcc\x05\x64\xc7\x98\xc0\x1d\xd7\x84\x5d\x30\xa8\xd1\xe9\x1b\x8a\x32\x21\x3b\x68\x51\x64\x42\x86\x46\xb4\xae\x69\x63\x43\x46\xe4\x82\x8b\xd5\x3c\xc2\xfd\xaa\x80\x76\xb2\x57\x5c\x34\xb9\xfe\xf5\x6b\xb0\x74\x7c\xa1\x15\xb9\x12\xe7\xb5\x77\xf3\x84\x60\x53\xc5\xc7\xb8\x85\xac\x2d\xdf\x06\x86\x66\x59\x84\xd8\xae\x0f\x8e\xec\x5a\x47\x79\xf1\x26\x67\xe8\xc7\x3f\x4b\x34\xce\xd5\x90\xc5\x6d\x70\x06\x05\xeb\xdf\x63\x95\xcc\xbe\x19\xb2\x4b\xad\x66\xfe\xf8\xe7\x9a\x94\xed\x14\x2b\x3c\xaa\x26\xca\xfa\x35\x39\xc3\x0a\x9f\x73\x9c\x52\x36\xb5\x40\x04\xd5\x6b\xf1\xbe\x7f\xdb\x3b\x41\x97\x56\x87\xf7\x59\x96\x05\xc2\x43\xd0\x10\x30\x64\x98\x88\xe3\x22\xc0\xca\x99\x67\xfd\xd6\x44\x06\xd2\x93\xbe\xb0\x86\x0c\x96\xd2\x70\x55\xaa\xd0\x82\x5b\x4c\x57\xad\x95\x19\x00\x01\xec\xab\xb2\x67\x4b\xa4\x57\x07\xc8\xd8\x6f\x86\x95\xc7\x40\x9e\x59\x65\xf6\x43\x06\x0a\xba\xcf\x7c\xcb\x78\x82\x33\x88\x9c\x3b\x0a\x6c\x7a\x5a\x6d\xe7\x39\xa4\x21\x41\xc8\x0a\x5b\xc6\x01\xae\x3e\x33\xce\x0b\x65\xe1\x46\x81\x01\x00\xf6\xd1\x3a\x53\xe7\x5c\x73\x9c\xee\x90\x0d\x26\x26\xb0\x2e\x33\xab\xa3\x3f\x24\x0c\xfc\xc9\x6e\x59\xf4\x53\xc7\x8f\xa0\xba\x99\x71\x2b\xe2\x04\xcc\xf7\x6c\x09\x61\xd1\x80\x03\xc9\x21\x40\xa3\xe0\xce\x96\x28\x57\x76\xd1\xdf\x89\xc1\x67\x43\x66\xe2\xf9\xa2\x7d\x09\xb3\x84\x83\xde\x39\x83\x70\xc3\xe2\xba\xf4\x02\xc6\xc2\x86\x1f\x5a\x59\x7f\x21\xc8\x91\xab\xef\xab\x7f\x0d\xd6\x54\xdf\xb0\x5d\x74\x1d\xaa\xd7\x29\x4f\xf2\xb9\x03\xbb\x81\x74\x2d\x1b\xa7\x66\x2f\x51\x4f\x21\xe6\x62\xaf\xa4\xf8\x7f\x0b\xff\x5b\x29\x9b\x5e\xed\x58\xd5\xdd\x53\xd5\x68\x11\xb7\x14\xb5\xb6\x19\x4e\x63\x03\xb6\xf1\x45\x81\x99\x01\x45\xdf\xb9\xd6\x3e\x39\xd8\xa1\x4d\x56\x1d\x4f\xbf\x92\x68\x70\xa5\x85\x14\xad\x94\xfa\x63\x92\x4b\x65\xa2\xb4\x20\x53\xc5\x7c\x6d\x22\xe5\x3b\xe8\x5b\x34\xcc\xbf\xfd\xf6\x8f\x09\xfa\xec\xfe\xf1\xa7\xff\xf8\x8f\x3f\xfe\xa9\x4d\xe8\xb7\xd3\x99\xa1\xdd\x62\x8d\x3c\x02\x6e\x2c\xb5\x84\x3b\xb0\xca\x4c\x76\xd8\x05\x7b\x46\xea\x96\xdf\x6a\xec\xb5\x99\x4e\x55\x8f\x83\x20\x1c\x3c\xb5\x87\x50\x86\x87\x07\x45\xa7\xa7\x70\xf6\x4b\xa2\x3a\xf1\x21\xf6\xf2\xa8\x15\xba\xff\xd7\x1a\xdc\x82\x91\xa6\xe6\xed\x82\x85\x68\xe6\x25\x60\xdd\x08\xfa\xda\x9a\xe8\x14\xf8\xf8\xbe\x71\x77\x10\xcf\x52\x22\x6c\x55\x39\x67\x55\xf3\xb6\x3e\x38\xbf\xe4\xf3\x22\xe3\x36\x8c\x03\x23\x49\x16\x18\xee\x78\x7d\x5e\xbb\x43\xd6\xff\x8c\x35\x73\xed\xb8\xf2\xa4\xf0\x91\x71\x8e\x4c\x70\x42\x90\x91\xa6\xbf\xfe\x7c\xa2\x7f\xeb\xa0\xe5\x09\x44\x63\x76\xd0\x3f\x4e\x6c\xde\x34\x16\x6a\xa4\x7f\xfa\xc6\x89\xc3\xb6\x09\x18\x34\x95\x68\xf8\xee\xf8\x01\x0b\x53\x39\xe6\xd8\x02\xde\xbe\xb3\xec\xcf\x83\x79\x87\x02\x74\xc6\xf9\xbd\x8d\x55\x5d\xf9\xf2\xd8\xa1\x30\x00\x81\x7b\xe7\x86\xd9\x7c\x1b\x76\xac\x85\xbd\x23\x78\x81\xa0\xee\x62\x8c\xba\x7f\x93\x9c\xa1\xee\x12\xcf\x33\xfb\xab\x7b\x6a\x43\x69\xb1\x44\xae\x4c\x9e\x0b\xa4\xc9\x96\xc6\x9c\xf9\x3e\xe3\x63\x98\xd7\x27\x37\x57\x13\x8c\x0a\x03\x2d\xae\x88\xe2\x56\xb1\x13\xb1\xe2\x8e\xc9\x25\x87\xd2\xb7\xfa\x15\xb8\x7b\xab\x66\xf5\xd9\x0f\xe9\xbf\x8d\xf3\x16\x16\xc5\x65\xb0\x19\x0b\xae\x0f\x04\xd3\x8d\x7e\x46\x5f\x5b\x26\xf4\x8d\xbe\x08\x6c\xe4\xaf\x59\x86\xaa\x0e\x96\xbe\x83\x5f\x82\x0e\x28\x43\x26\x27\x71\xcd\x97\xff\x38\xee\x76\xbb\xfe\xeb\x0b\x3d\x95\xff\x0f\x51\x25\x49\x36\x31\x2d\xb9\x6b\x66\x39\x64\x9f\x1c\x60\x9d\xb3\x30\x17\xf8\x2e\x50\xec\x31\xe1\x19\x3a\x2a\xac\xae\x29\x4f\x24\xfa\x9d\x96\x3d\x83\xa5\x84\x1f\xb5\xb2\x55\x7d\xaa\x6c\x59\xdc\x67\x3a\x56\xd6\x6a\x5d\x3e\x58\x21\xa4\x83\xd7\x3e\xb1\x0c\xd1\x0f\x81\x16\x34\xe5\x1c\x5b\xd8\x07\x28\x18\xac\xc8\x67\x05\x8f\x6a\x50\x35\x2a\xa3\xc2\xab\x25\xb8\x15\x86\x5b\x80\x6b\x18\xb2\xae\x59\x00\x8b\x7d\x60\x79\x83\x99\x67\x27\xf4\x71\xe8\xeb\x85\x85\x10\x6a\x32\x9f\xcf\xb1\x58\x1e\x17\xa7\x6d\x95\x38\x0b\x3c\x54\xe0\x32\x99\x5b\x00\xf0\xb3\x66\xf6\x68\xd9\x50\x03\x2b\x03\xba\x3b\xcd\x9f\xdd\x04\x00\xd8\x21\xe8\xcd\x94\x1f\x20\x2c\xe1\xa9\xa5\xeb\x22\xf5\x32\x16\x2b\xfc\x3b\xab\x02\x85\x0b\x5b\x91\x85\xc5\x8c\x29\x93\x8f\x6d\xdf\x70\x1f\xd7\x30\x70\x3e\x82\xe2\x18\x64\xda\xc2\x87\x39\xb8\xbc\x71\xdf\x34\xbf\x76\x61\x1d\x62\xb9\x1a\x3b\x55\xce\x99\x0d\x04\x7e\x2c\x2e\x60\x08\xc0\x30\x26\x94\xdc\x27\xa6\x9a\xbf\x4f\xf9\x15\xcd\xf4\xbd\x05\x34\xde\x1d\xb2\xe8\xe7\x0e\x22\x19\x9d\x53\xe6\x03\xe0\x0c\x7b\xe7\x13\x23\xe2\xde\x53\xa5\xb7\x4c\xa6\xf7\x9a\x83\xb9\x1c\xff\x40\xef\xe9\xb1\xa5\x23\x1d\xef\x3d\xb2\x66\x82\x5c\xea\x71\x15\x8a\xb4\x96\x38\x75\x13\x47\x56\x6a\xa4\x01\xe1\xc1\xf9\x1d\x32\xdd\x9a\x3b\x4b\x45\xe4\x6d\xd0\x5e\xd0\xdc\x91\x03\x12\x0b\x38\x00\xf4\x11\x85\xcf\x7a\x21\xb5\x42\x44\xe9\xb3\x7c\xbe\x6b\xde\x86\x8d\xc4\x7d\x29\x5b\xda\x55\x51\xd0\xd5\xe6\x00\x11\x96\xcf\xdd\x81\x6a\x41\x71\x7d\x2b\x00\xa5\x24\xc9\x30\xdc\x1d\xd0\x10\x84\x27\x76\x8c\x17\x33\x28\x1e\x6b\xaf\x17\xd3\x8d\xc1\x26\xcd\x08\xfb\xda\xfc\xfd\x0d\xb2\x77\xc3\xb7\x1d\x7b\x9f\x0b\x69\xf5\x3c\xb7\xe7\x80\x6d\x4f\x52\x63\xe8\x06\x88\xb2\x29\x86\x92\xde\xd6\xfa\x12\x29\x87\x20\x81\x2d\x79\x8e\x1e\xa9\x9c\x0d\xd9\x2d\x77\x56\x41\xc4\xb8\x07\x79\xeb\x80\xc6\xb8\xd2\x1f\x96\xc0\x04\x60\xd4\x55\x14\x50\xaa\x07\xdf\x3e\x6d\x07\x22\x4d\x47\x8c\xa7\xa4\x65\xc0\x79\x45\x35\x6b\xeb\x2c\x70\x4e\x66\x41\x4c\x6a\x15\xdc\x14\xb5\xb5\x78\xa5\x6c\x69\x40\xaf\x2c\x5c\x6f\xdb\x81\x3a\x26\x8f\x6c\x5b\x54\x0b\x7f\xab\x41\x2b\x4e\x2d\x0c\x52\x61\xa3\xb5\x8f\x8b\xeb\xef\xa4\xa3\xa5\xdb\xb9\x10\xcc\xdc\x13\x58\x76\x1f\x05\x8c\xd1\x54\xf0\x7c\xe1\xf3\xc5\x5d\xe6\x9c\xd9\x06\x2b\xd3\x0c\xd8\x84\x9f\x58\xad\xea\x9c\xb2\x7b\x43\xf1\x4f\xb5\x47\xbe\x48\x7c\xf0\xbb\xbb\xc3\xcc\x8a\x1f\x21\xca\x92\x2c\x87\x8b\x4f\x2a\x9c\xdc\x1b\x84\xbf\x3a\xcb\xac\xfe\x66\xb4\x39\x2f\xb1\x46\x62\xca\xb3\xcc\x76\x5b\x5c\xa0\x45\xed\x9d\x07\x8a\x11\x46\x77\xd7\x83\xea\xbe\xef\xe9\xaa\xc7\xa5\xfa\xf6\x8c\x09\x04\xfe\xe7\x47\xda\x2a\x38\xb2\x04\x45\x4a\x22\x52\xf7\x16\xa0\x3a\x00\xae\xd2\xed\xbd\xa3\x8b\x57\xdf\x42\xa3\x79\x05\xa5\x56\x4f\xbe\xe8\xf8\xcc\x7e\xfc\x49\x7f\x5b\xbd\x23\x9f\x20\x2f\xc8\x83\x27\xcc\x31\xd3\x13\x74\xbd\xd6\x98\x08\xcd\xc5\xb8\xd5\x90\xee\x16\x5b\x0d\xc8\xf4\xd8\x10\x36\xdb\x76\xe5\x5a\x79\x34\x36\x43\x9c\x19\x85\x5b\xcd\x40\x13\xeb\xa0\x9b\x64\x46\xe6\x18\xe2\x52\xe6\xb1\x46\x06\x92\xe9\xd7\x19\x16\x53\x23\x27\x4a\xa2\xe4\x37\x15\x3b\x5c\xc4\x67\xef\xb0\xc3\x5b\x40\xfa\x87\x3e\x1a\x90\x42\xd6\x71\x00\x3f\xca\x18\x1d\xc8\x33\x27\x5f\x1c\xc3\xde\x1d\x54\x86\xa8\xc0\x09\x17\x02\x50\xec\x52\x2d\x8d\xd7\xe3\x26\xec\x58\xda\xe5\x02\xcf\x7d\x8e\xb1\x2b\x30\x61\x53\x49\xcc\xe0\xc6\x04\xa0\xa2\xea\xc7\xb0\x73\x0d\x97\x70\x08\x16\x53\xbd\x6e\x04\x43\xd6\x73\xaf\xf8\x3c\x45\x10\x71\x85\x91\x43\x20\x96\xcd\x44\x6e\x82\x98\x89\x8b\x55\xb7\x93\xab\x99\x44\xdb\x74\xb0\x72\x19\x1a\x2d\xe6\x7a\x6c\x39\x23\xc6\x38\x7d\xc7\xcd\xa3\xa6\xe7\x87\xf6\x55\xba\xaa\xa1\x1e\x92\x72\x15\xa5\xaa\x8e\x37\x8b\x94\x2e\x07\xdd\x36\x14\x16\x6e\x32\xf1\x6e\xd9\xb2\x20\x53\xbd\xe2\x46\x35\x29\x75\xb6\x7a\x5a\xd5\x4e\xdc\x98\xe2\xf9\x48\xf0\x6c\x97\x3d\x72\x4d\x44\x6a\xee\xcc\x40\x7e\x2e\xd1\xdf\x73\x9c\x19\x93\x3c\xb3\xe4\xe8\x86\x0d\x12\xc3\xf7\x7f\x42\x3d\xb8\x2e\xd1\x27\xe0\x8b\xe0\x8c\x84\xd6\x14\x47\x74\xbe\x20\x42\x72\xad\x8f\xd5\x6c\xf2\xfd\x9f\xe5\xc8\xe2\xf5\x8e\x70\x92\xf0\x7c\x15\x9b\xb7\xc5\x4c\x2a\x5a\x0b\x27\x85\xd1\x7d\x3e\x26\x82\x11\x53\x2d\x12\xde\x43\xee\xbd\x46\xc3\xe5\x38\x57\xb3\xef\x47\x49\x46\x1b\x83\x08\x43\x26\x44\x4f\x7f\x76\x6a\xbe\x5a\x37\x81\xa8\xfd\x68\xe8\x0c\x99\x67\xc8\x3c\xeb\xa2\xf7\x38\xb9\x27\x2c\x45\x8b\x2c\x9f\x52\x9b\x9e\x0c\x37\x14\xb0\xcb\xc0\x4a\x15\x4f\xcc\xa8\xbc\xa6\x7d\x7d\x0d\x0d\xd9\x1c\xdf\x83\x86\xf4\xd9\x06\x8c\x6b\x4d\xb3\x95\xb6\xe5\xe9\x61\x05\xa7\xc1\xe5\xd2\x4a\x92\xe4\x42\xbf\x61\xce\x87\x32\xe7\x03\xec\x4a\x80\x55\x96\x33\x84\x01\xea\xe1\x2b\x89\xf2\x85\x33\x7e\x80\xc1\x23\x03\x1f\x91\x99\x24\xd4\x0f\xa3\x5a\x1c\x9c\x91\x21\x83\xb8\x3b\xd7\xe2\xd2\x73\x95\xd0\x2d\xe9\xdd\xe3\x55\x87\x6f\x62\x12\x9d\x77\x73\xa7\x18\x33\xd2\xde\x63\x0a\xd5\x8c\x30\xd0\xc3\x9a\xb7\x0c\xd9\xe2\xcd\x37\x2d\x8a\x1f\x34\xb3\x28\x0c\x47\x7e\x09\x73\x46\x2d\x6c\xb5\xb5\x15\x06\xa1\x3d\xce\xa4\x5e\x7c\x4f\x25\x92\x58\x51\x39\xa1\x95\xfa\x69\x98\x5e\xbe\xcb\xaa\xe3\x76\x39\xed\x15\xf9\xec\xa5\xb5\xf0\x31\xca\x5d\xf4\x01\xd4\xed\x62\x4a\x8a\xfb\xec\xf0\x3a\x96\xa0\x66\xa4\x16\xd8\x6c\x1f\xce\x7d\x37\x83\xa6\x56\x14\x1f\x8f\xde\x45\xbd\xc2\xcc\x69\xf2\xe3\x8d\x01\x73\xc3\x8c\x48\x26\xc9\x36\xc4\xd7\xc8\x22\x00\xce\x40\x20\x20\x04\xb2\x8a\xd4\xbf\x17\x20\x8b\x7e\x98\x8f\x90\xf2\x85\xef\x09\x5b\xa7\xf6\x35\x1f\x61\x3f\x4a\x98\xad\x1a\x62\xcf\x2b\xfc\xdc\xe8\xfc\xdb\x0c\xb0\xf9\xb1\x2b\x20\x09\xe8\xe4\x58\x2f\xb9\x16\xf4\x93\x7b\x1b\x68\x6e\xcc\x3e\x16\xd4\xe0\x71\xc6\x65\x78\xce\xdc\xfe\xc1\x66\x2a\x91\x13\x17\x50\x0e\x81\xfa\x7e\x81\x8d\x87\x9e\xf1\x10\xf3\x00\x46\xed\x0f\xa9\x31\x69\xf9\xfd\x46\x8e\x85\xc2\x32\x80\xb9\xdc\x35\xb5\x7a\x9a\x7f\xfc\xb3\xbc\x84\x13\xbb\x8f\xbc\xdd\x0c\x8f\x49\xf6\x04\x50\x4e\x5b\x1a\x22\x7d\x34\x88\x19\x17\x18\xfd\x53\x9f\x28\xbe\xe0\x29\x2a\xc8\xab\x2e\x28\x91\x31\x6e\xa2\x01\x5e\xe1\xb4\x82\xc1\x35\x9e\xdb\x26\xca\xfe\x14\x78\x2b\x4d\x55\x5c\x03\x8f\x12\x88\x5c\x36\xb7\x0b\xb4\x5f\x7b\xfd\x53\xe9\xef\x93\x6a\x1a\xbb\xe2\xe9\x2e\x84\xd5\x1e\x02\x6b\x95\xae\x1b\x44\x1c\xca\xaa\xa2\x3c\x6b\x56\x62\xc1\xeb\x63\xc5\xd2\x51\xf3\x32\x36\xe0\x77\x1c\xe7\x93\x1b\x00\xe0\xad\xcb\x5f\x77\xc8\x43\x33\xe2\x13\x52\xf4\x3e\xeb\x6e\x7c\x78\x74\xdd\xa6\x58\x37\x56\x71\xfd\x63\xf4\x7f\x6f\x2e\x2f\x8e\xe6\x58\xc8\x19\x86\xfc\x40\xd7\x56\xc7\xc1\xc4\x1b\x05\xd4\x99\xd7\x29\x43\x43\x76\x84\xa6\xbc\x63\xbc\x39\x27\x68\xa6\xd4\x42\x9e\x1c\x1f\x4f\xa9\x9a\xe5\xe3\x6e\xc2\xe7\xc7\xc5\xda\x1c\xe3\x05\x3d\x1e\x67\x7c\x7c\x2c\x08\x04\xdd\x1d\x7d\xd7\xfd\xfe\x3b\xd8\x9a\xe3\x87\xef\x8e\xc1\x86\xdf\x9d\xf2\xdf\x9d\x7f\xff\x9f\x7f\xfc\x93\x6e\x78\xb1\x54\x33\xce\x4e\xac\xab\x68\x6d\xdb\x47\x46\xf0\x3d\x36\x9f\x94\x7a\xf9\xcf\xee\xb7\xe1\x30\xec\xab\x73\x9e\x92\x4c\x1e\x3f\x7c\x37\x72\x3b\xd3\x5d\xb4\x71\x7e\x15\x0c\xdf\x2f\x79\xa9\x86\x93\xfe\xdd\x93\x8c\x4b\x0f\xda\xb4\x2d\x15\x67\x25\x0c\xa9\xdc\xe1\xc4\xdc\x93\x15\x7f\x60\x0b\x0d\xcc\x4b\x52\x35\x3a\x7d\x5b\x84\xdf\x5a\xd9\xa6\x55\x06\x19\x78\xdf\x68\x02\xe8\x91\xc6\x06\xb1\xc0\xb4\x2a\xce\xc7\x7a\x99\x77\x59\xbf\xa7\xc4\x41\xdd\x37\x00\xaa\x9d\xee\x96\xe0\xa7\x99\xf9\xda\xf9\xc4\xf9\xa3\x03\x3d\xdd\x07\x54\x68\xc3\x62\x1a\x1e\x4f\xd1\x10\x0f\x8c\xc5\x8d\xab\x1d\x8d\x44\x4b\x6c\xc2\x24\x6c\x14\xa4\x84\x88\x49\x83\x47\xc0\x27\x1e\xd9\xd5\x04\xbb\x1a\x10\x68\x3e\xa9\xf8\xc7\xfb\x8c\x8f\xe5\x37\x1e\x05\x05\x4b\xd7\x47\x01\x4b\x50\x4f\x82\xfb\x01\x12\x75\x4b\xf1\x94\xfa\x89\x3b\x33\xa1\x14\xd2\x66\xe1\xab\x89\xaa\x88\x45\x35\x49\x99\x58\xf0\x9c\x39\x20\x46\xce\x08\x9f\x40\x94\x00\x5c\x80\xce\x0b\x02\x46\x10\xc6\x55\x90\x80\x29\xc8\xc2\x30\x52\x30\xd7\xd5\x2f\xf7\x8e\x60\xa4\x9b\xd6\xf9\x29\xc0\x48\x77\x5d\x77\x7b\x70\x5e\x68\xc1\x77\x0d\x55\x30\x47\xa9\x05\x9b\x85\xf7\x37\xba\x26\x3c\x1f\x00\x5f\x44\x58\x64\xcc\x00\x8e\x40\x04\x31\x39\x52\xfc\x08\x32\xd7\x21\x1f\xda\xc0\x03\xd7\x15\xcd\x00\x97\x4e\x9b\xeb\x40\xbf\xdf\x60\x9c\x26\x6a\xfc\x73\x30\x50\x7b\xf7\xca\xa2\xfc\xb8\x56\x2e\x19\x23\xc2\x1a\xab\x37\xde\x1c\x2d\x1d\x3e\xe1\x56\xae\xf7\xf8\x16\x02\x68\x08\xdd\xea\xe3\xfd\x70\xc0\x04\xba\x08\x42\xa3\x67\x7c\xce\xf5\xb5\xcd\x73\x19\x3c\x34\xa1\xf5\x70\xd9\xac\xa9\x04\xbf\x30\x48\x35\x2f\x37\x1b\x7d\xb4\xf4\x23\xa3\xcb\x87\x2f\x6d\xc6\xaf\x0e\x66\x32\x8e\xf1\x7f\x37\x8c\xdf\x03\xb7\xae\xa7\x1b\x70\x27\xce\xc1\x76\x0a\x65\x49\x2c\x1c\x23\xfd\x87\x16\xd5\x35\x49\xf9\x30\x76\x97\xfa\x6e\x03\x4f\x0d\x20\x53\x08\xd9\x56\xaa\x3e\x5a\x1e\x3e\x61\xf9\xbc\xe5\x1e\xf8\x20\xa6\x26\x1b\x80\x99\x09\xeb\x71\xf1\x3c\x47\x95\x01\x3d\xb5\xb1\x26\x6d\x14\xc3\x75\x7a\x56\x55\xb4\x9b\x41\x59\x29\x82\x5b\x35\x05\xac\xc8\xf8\xfe\xc3\x87\xa2\x60\xcf\x72\x41\x3a\x68\x9c\xc3\xf3\x8b\xcb\xdb\xd0\x8b\x47\x19\x3c\x3e\x4a\x66\x24\xb9\x87\x64\x14\xc3\xb1\xcd\x5e\xba\x62\x4d\xe3\xe5\x90\x15\x65\x21\x14\x77\x2e\xa9\xa5\xc7\xdd\xf4\xd8\xb3\x5c\xa0\x94\xca\x45\x86\x97\x60\xfc\x67\x26\x8c\xad\x70\x1c\xf8\xf8\x4f\x4d\xc9\xdb\xd9\xb8\xa0\x6e\x85\x65\x51\x4e\x48\x84\xbf\xdc\x24\x7c\xd1\x46\x1f\x92\x5d\x25\x13\xed\x8c\x84\xba\x4b\x30\x53\x5d\x05\x96\xc0\x25\x6d\x76\x34\xf4\x6a\xfb\x6c\xe9\x72\x69\xd0\xe1\x3b\x17\x24\x0e\x7a\xe0\xd0\x55\x35\xd4\x7f\x9b\x92\x59\x44\x3c\x90\x74\xc8\xe2\x7c\x74\x7b\xcf\x16\xbb\x8c\x0a\x64\xfe\xfd\x90\xb8\x5b\xe7\x46\x66\x8f\x3e\xe4\xe0\x15\xe8\x3b\x3e\x10\x7a\x4d\xa5\x80\xea\x92\x80\x4f\x00\x69\xdf\xd8\x1e\x56\x94\x02\xb0\x38\xde\xb6\x50\x47\xe4\x7a\xf2\x84\xe9\xb3\x6d\x0d\x14\x87\x0f\x10\xb5\x01\xa3\x2b\xa9\x4b\x55\x6d\x0c\x99\xcb\x71\x99\xe4\x99\x81\x57\xaa\x59\x2d\x97\x7c\xef\xa2\xf1\x5e\x2e\x2a\xd3\xeb\xdc\x28\x28\x9d\xe0\x3d\x44\x2e\x29\x21\x59\x16\x35\x5a\x81\x74\x09\x93\x39\xb0\x61\x87\x9a\x0e\x99\x64\x53\xa2\x90\x16\x89\xd2\x3c\x33\x29\x1b\xe0\xfb\x83\x44\x7e\x9c\x65\x88\x2a\x39\x64\x1e\x77\xc0\xa0\x48\xc2\x2d\xe5\x72\xe4\x52\x2b\xa6\x42\x17\xd0\xac\xad\xad\x05\x77\x17\x4d\xa8\x0a\x47\x04\x3e\xad\x65\x88\x34\xbc\x58\x10\x6c\xe2\x8b\xed\x31\x64\xa1\x9c\x5a\xde\x04\x1b\x8c\x0b\x15\x8f\xf6\x11\x17\x5b\x4f\xba\xa6\xe2\x55\xeb\x2d\xe9\xa2\x9e\x99\x9d\x16\x52\x5d\xd9\x1f\x33\x5a\x9b\xd5\x64\xc3\x3e\xb4\x24\xa8\xa4\xaf\x5c\xea\x65\xfd\x05\x16\x8a\x26\x79\x86\x45\xb6\x74\xe5\x8a\xe9\x24\xa8\x60\x04\x7b\x60\xb2\xce\x6d\x69\x64\x00\x63\xb7\xe6\x62\x89\xe7\x24\xc8\xa6\xb1\x2a\x71\x16\xb8\x9b\x0c\x94\x9e\xf1\x63\xe8\xb6\xbe\xe9\xa2\xb3\x72\xbd\x2a\x38\x13\x01\x5a\x0d\x95\x86\xfd\xf9\xf1\x06\x61\xe0\xa6\xee\x15\x9d\x68\x31\xfc\xab\xe0\xd4\xd5\xd5\x52\xc4\xf2\xbe\xa5\x2f\xcb\x61\x9e\xae\x0f\x61\xaa\x4c\x03\xb9\x85\x7a\x7b\x91\x87\xcb\x1f\x88\x9a\x01\xba\x9b\xa1\xe5\x20\x43\xa4\x9f\x2d\x06\xfa\x73\x50\xd0\xae\x3c\xd8\xf9\x9a\x82\x49\xb0\x8f\x2d\x87\x1a\x80\x99\xb7\x1f\x68\x40\x39\xa1\xe7\xb2\x76\x65\x37\xab\xbd\x3f\x47\xb0\xe2\x48\x8f\x4b\xab\x1c\xc4\xf8\xba\x4b\x35\x71\x61\x0c\x16\x7f\x1c\xc0\x22\xfd\x61\x1b\x13\x94\x51\x76\xef\xf2\xce\xf4\xce\x77\x10\x2e\x5a\x87\xc3\x67\x46\x6f\x88\xb9\x46\xac\xa9\x82\x56\xdd\x41\xd2\x69\x16\xbb\x5d\x2d\xae\xbb\x91\xb4\x42\xcf\x5d\xa9\x1c\x1b\xcc\xa3\xf9\xb6\xac\x8d\xae\xf2\x12\xac\x0b\xa9\x32\xf7\x4b\x10\xe7\xa1\xa8\xaf\x25\x5a\xbb\xbe\x57\x33\x5c\x5d\x7e\x7a\x33\x5c\xf8\xdd\xc5\x59\xff\xc3\xe0\x22\xc6\xf8\xfe\xcb\x5d\xff\x2e\xfe\xe5\xfa\xee\xe2\x62\x70\xf1\x31\xfc\xe9\xe6\xee\xf4\xb4\xdf\x3f\x8b\xdf\xfb\xd0\x1b\x9c\x97\xde\xd3\x3f\xc5\x2f\xf5\xde\x5f\x5e\x97\x50\xc5\x6f\x7e\x1c\x5c\x5d\xc5\x3f\xdd\x0e\x3e\xf5\xcf\x46\x97\x77\x11\x30\xf9\xd9\x2f\x17\xbd\x4f\x83\xd3\x51\xc5\x78\xae\xfb\xa7\x97\x3f\xf5\xaf\xfb\x67\x6b\x01\xc7\x8b\xf9\x56\x2e\xe9\x3e\x1c\xbe\x5b\xa3\xcc\xf7\xd0\x44\x50\xc2\xd2\x6c\x69\xe2\xd1\x9c\x92\x52\x0a\x7f\x09\xaf\x00\x3a\x27\x3c\xdf\x25\xac\x4c\x2b\xf1\xfc\x81\x08\x48\x90\x33\xad\xd9\x68\x7a\x2c\xef\x6b\x31\x4e\x94\x58\x35\xe8\xad\x8d\x9e\x55\x62\xe9\xe3\xb3\xd7\x86\x85\xfa\xf4\x6a\xdb\x09\x5a\x10\xb1\x6e\x2c\x70\x41\x8b\x7c\xa1\xe8\xb8\x3e\x50\xb0\x61\xda\x71\x7b\x35\xd0\xe0\x75\x54\xe7\x4d\x5e\x54\x33\xc6\x28\x5e\x6e\x97\x50\x21\x68\x61\xdb\xe2\x09\xfe\x6b\x17\x5e\xb1\xc8\xc7\x19\x4d\x10\x4d\x0b\x94\x11\x13\x48\x67\xc2\xba\x8d\xb5\xa7\x0c\xeb\xb3\x20\x02\x24\x26\x2d\x88\x2e\x04\x39\xc2\xb9\x9a\xb9\x4a\x8c\xbe\x78\xbf\x81\xd9\x21\x89\x20\xca\x15\x87\x26\xa9\x83\xd3\x0f\x7a\x82\xc1\xd8\xe4\x8e\x14\xf2\x48\xbb\x01\xc4\x62\x8d\x79\xcf\x7c\x69\x5a\x6f\x61\x88\x34\xef\xaf\x5d\x1a\x3b\x62\x2a\xcb\x25\xd3\x40\x36\x34\x0f\x1d\x28\xbf\x9e\xb7\xe6\xd4\x89\x0b\x42\x34\x9b\xec\xe2\x19\xab\xa7\xb1\x89\xc6\x42\x42\x89\xc3\x0f\x6d\xeb\xf6\xd1\xa9\x20\x70\x89\x58\x6f\x95\x53\xa3\xc1\xbb\x6a\xe3\x1f\x21\xec\x51\x6b\x0c\x63\x32\xc3\xd9\xc4\x58\x64\xf4\xd6\x14\xe7\x6a\x95\x44\x6f\xf9\x3d\x61\xb6\x48\xfa\x8b\xb0\x43\x66\x04\xf0\x22\xdd\xc7\x1b\x27\x0a\xf3\x0d\x14\xf4\x16\xae\x92\xbb\x89\xff\x36\xc5\x42\x8d\xb8\x1a\x3c\x36\x41\x98\x05\xe2\x96\x0b\x1d\x9f\x4c\xe8\x67\xdd\xe0\x90\x91\x4a\xcc\x21\x70\x69\xbb\xc4\x6b\xcf\x97\x01\x73\xc3\x64\xaf\xde\x13\x06\xf5\x00\x4c\x51\xaf\x8d\x34\xdb\xce\x6a\xb8\xba\x17\xab\x36\x44\xbf\x62\x60\x7e\xa2\x51\x99\x84\xd0\x40\xeb\xd6\x09\x12\x3d\xee\x49\x17\x9d\xd9\x9c\x3c\xfd\xcb\xe9\xf9\xa0\x7f\x71\x3b\x3a\xbd\xee\x9f\xf5\x2f\x6e\x07\xbd\xf3\x9b\xa6\xc7\x6f\x1f\xb1\xc2\xa5\xd3\x57\x0e\xd7\xf6\x1c\xe2\xd8\x9e\xbc\x22\x65\xc5\x4f\xaa\x38\x76\xb0\x25\x9b\x47\x4f\xd3\xc5\x28\xa5\x32\xd1\xd7\xdf\x72\x44\x58\x0a\x60\x6d\x5b\x91\x6a\x75\x53\xe5\x59\xf8\x37\x90\x7f\xc3\x71\x10\x73\xdb\x3d\x38\x8a\xf6\xcf\x01\xcd\xc5\xd6\xc3\xd6\x87\x3f\x1d\xb2\xe0\xb6\xe9\x6e\x46\xe8\xd5\xcd\xed\x36\xb7\xb8\x89\xf2\x9c\xcc\x78\xa9\x94\x39\xd6\xfc\xd1\xbd\x06\xa9\xa0\x35\xab\x62\xe1\x39\x42\xc4\x38\x1a\xd4\x24\x42\x5a\x45\x9e\x63\x96\x62\xc5\xc5\xb2\x66\x8a\xcd\x98\x67\x78\x6c\x62\x16\x1a\x5e\xd9\x5a\xff\x77\xbb\x60\x5e\xc5\xac\x4c\x4a\x06\x57\xee\xf6\xf2\xc7\xfe\xc5\xcd\xa8\x7f\xf1\xd3\xe8\xea\xba\xff\x61\xf0\xdf\x3e\xef\xde\x56\x58\x8f\xab\x9d\x10\x7d\x29\x6a\xee\xe2\x32\x00\x2b\xf9\x8b\x29\x39\xe2\xda\xb1\x30\xf3\x74\x32\x64\x8e\xb3\x88\xa2\xf9\x99\xe0\xf9\x74\x56\xdd\x50\x79\x94\x57\xbd\xdb\x1f\xb6\x1a\x26\xe4\x67\x9b\xba\x04\xe6\xb4\xad\x22\x0d\xd1\x89\xe5\x7b\x06\x9e\xa8\x34\x3c\x40\x19\x80\x57\xab\x0c\xde\x35\x1c\x6d\x2b\xed\x65\x95\x69\xad\x15\xfe\x2b\x5e\xaf\x23\xa0\xdb\x80\x6f\x46\xd7\x08\xc4\x8d\x99\x92\x37\x2b\xad\x9d\x54\xfc\x16\xdd\x60\xdf\x1f\x65\x64\x3a\x25\xa9\x21\xaf\x72\xc3\xd6\x14\x64\x59\x60\x52\xdc\xeb\x55\xab\x68\x0b\x50\xec\x70\x31\xfb\x50\x8d\xe6\x0c\xfc\xca\x7f\x52\xcd\x2b\x4e\x5d\x29\xba\x84\x33\xa9\x30\xab\xc1\xf3\x6c\x59\x2e\xbb\x40\xd9\x17\x45\xd1\x7a\x6b\x20\x71\x96\xeb\xe2\x1c\x6c\xe3\xcd\xb1\x85\x36\x98\xb5\x78\x04\x05\x38\x82\xda\x79\x15\x9b\x50\x2a\x48\xfc\xe4\xc6\x8d\xb5\xaa\x93\x4d\x4a\x07\x8b\xa3\x41\x3a\xb7\xa0\x66\xc6\x1a\x04\xe5\x03\x6a\x63\xd7\xf6\x5c\xbf\xdc\x5b\x3c\x8b\xe2\xcb\xbe\x9c\xb7\x13\xde\xda\xdb\xb7\x4a\xa5\x8b\x83\xb2\xce\x69\x9e\x58\xf4\x3e\xd3\x6c\xe1\x9c\xb6\x06\x2d\x77\xc1\xa6\xe8\x28\x2c\x17\x9f\x1e\x41\x7a\xf1\x90\xd5\x79\x35\x2a\x4a\xad\x87\x14\x70\xe5\x6e\xad\xdd\xa0\x29\x5a\xc4\xd4\xb9\xc5\x6e\x96\xf5\x81\xdc\xeb\x20\xec\xd5\xf8\xf6\xed\xbe\x8c\xb1\x71\x5b\xc6\xd7\x71\x5d\x02\xa8\xe7\xaa\xed\x42\x10\x9a\x79\xbf\x63\x5c\x09\x73\x45\xce\xb0\x34\x92\xab\x4a\x66\xf1\xc0\x61\x36\x31\x76\x44\x79\xb8\x5e\x12\xdc\xcd\x42\xd0\xc8\x71\xd1\x31\x3a\x35\x94\xc4\xd7\xa3\x0f\xc1\xfa\x7d\xe5\x91\x76\x84\x1f\x0a\x47\x5e\x79\x31\x7c\x0f\x18\x56\x86\x73\x96\xcc\xd0\x22\xc3\x26\xd3\x69\x86\xa5\x21\x69\xe7\x18\xc7\x63\x9a\x51\x05\x49\xda\xc6\xa9\x54\x5a\x61\xad\xd1\x60\x71\xef\xe0\xa1\x70\x01\x12\xb3\x8e\xe8\x77\x8c\x2c\x2b\xca\x50\x3e\xa5\xfb\x29\x1c\x6d\x9f\x29\xb1\x6c\xec\x8a\x2a\xc8\xd1\xc6\x93\x15\xdb\xa0\x39\x1d\x90\x63\x31\x87\x76\x3b\x6a\x5b\xbc\x2a\x2a\x71\xba\x4a\x72\x5c\xcc\x8d\xfd\xcb\x06\x9b\xe9\x37\x09\x03\x63\xd8\x86\xbd\x30\xb3\x7b\x5a\x55\xbd\xf2\x74\x2d\x2a\xb8\x60\xd3\x5d\x69\x04\x32\xf0\xc9\xae\xc1\x32\x5a\x33\x4d\x7e\xab\x0b\x52\x21\xd5\xb4\x0f\xaa\xb0\x30\x91\x2d\xee\xc4\x32\x88\x64\xe5\x42\x4d\x32\x8e\x6b\x6a\x8d\xb9\xb6\x0d\x26\x64\x5d\xdb\x29\xcf\xc7\x75\x18\x64\x66\x54\xeb\x5b\x5f\xb7\x8b\x8e\xc9\xed\xcb\x88\x1a\xde\x16\x58\x11\x45\xdb\xd9\x81\x82\x49\x63\x45\x8e\xe0\xf3\xea\xc6\x2d\xf2\x56\xe3\x39\xd7\xd3\x99\x27\x1e\xa4\xe5\xff\x8a\x8a\xd5\x7f\xc9\xa1\x2a\xf6\xe5\xe4\xc6\xa4\x58\xef\x42\x64\x8a\x36\x3d\x30\xe5\x5e\x6f\x63\x0f\x54\x48\x03\x8d\xd3\x6b\xaa\x66\x73\xa3\xbf\x6e\xce\xc5\xe2\x82\x9c\x0b\x41\x39\x24\x42\xdb\x2a\x9e\x6b\xc0\x5a\x2a\xfb\xdd\x61\x25\xff\x9e\x93\x9c\x68\xda\x1f\xe7\xe9\x74\xd5\x10\xdc\x42\x94\x2d\xa6\x34\xe3\x8f\x68\x9e\x27\x33\xe4\x1a\x47\x29\xc9\xf0\x32\x9a\x1a\x08\x97\x8a\x67\x00\x7f\xb6\x25\x16\x53\x92\x4b\xc5\xe7\x10\xa2\x58\xb4\x2b\x72\x06\x04\x8f\xb0\x52\x82\x8e\x73\x55\xc9\xfb\x23\x50\x92\x2d\xbd\x7f\x37\x57\xfd\xd3\xc1\x87\x41\xc9\xf5\xd6\xbb\xf9\x31\xfc\xfb\xe7\xcb\xeb\x1f\x3f\x9c\x5f\xfe\x1c\xfe\x76\xde\xbb\xbb\x38\xfd\x61\x74\x75\xde\xbb\x88\x1c\x74\xbd\xdb\xde\x4d\xff\x76\x83\x0f\x6e\xb5\xd7\xfa\x8d\xc0\x01\x66\x8a\x16\xf4\xac\x95\x17\xdc\xa5\x4e\x15\xb7\xbd\x9e\xa0\x9e\x43\x90\x09\xab\xac\x61\xe7\x47\x05\xff\xbf\x29\xfb\x66\xdd\xad\x67\x58\x61\x5b\x46\xb3\x8b\x7a\xc8\x95\x43\x85\x30\x56\xa9\x25\x2b\x0b\xaf\xa1\x77\xc7\x34\xa1\xc5\xab\xa4\x50\x73\x8b\x4a\x1e\x7c\x62\x81\x6d\x32\x12\xc2\x49\xda\xe2\xf7\xdd\x21\xeb\x3f\x10\xa6\x72\xc0\xba\xc3\x59\xe6\xca\xd6\xba\x17\x82\x34\x34\x37\x4a\x49\xe7\x34\xc3\xa2\x28\xba\x70\x69\xdb\x02\xed\xc6\x8d\xd5\xa3\x0e\xac\x22\x71\x3b\x4d\xeb\x6e\x80\x60\xdc\xa7\xe7\x03\x90\x17\x13\xe5\xe0\x8a\x5d\xe7\x43\x66\x80\x53\x6c\x8f\x73\x0c\xa1\xd5\x8a\x5b\xe3\xa3\xe9\xbe\xb6\x8e\xff\x75\x45\xd1\x83\x2d\x90\x79\x8c\x99\xfe\xa9\x64\x41\x3f\x48\xf7\x8f\x76\xc2\xe0\x2d\xa0\xdd\x49\x10\xe4\x6d\xd4\x51\x5c\x88\xc1\xd8\x86\x90\x6b\xfd\x02\x24\x44\x17\x12\x67\x5d\x17\xde\x43\x41\x00\x51\xaf\x46\x59\xc9\xf4\x25\xf4\x5a\xd7\x21\xcc\xf2\x86\x55\x18\xf3\x9c\xa5\xae\x90\xfc\x9c\xb2\xe3\x39\xfe\xfc\x8d\x9b\xa9\xc9\x9a\xf4\x48\xab\x80\x88\x41\x32\xad\xb6\x2d\x35\x93\x5b\xbf\x5c\x43\xb6\x66\xbd\x36\x8b\xd8\x8e\xb3\x82\x8e\x58\x28\xf4\x26\xd2\xeb\x81\x2c\xab\xf6\x6f\x05\x2f\xdb\x44\x93\xd9\x03\x0f\x8d\x2c\x04\xd1\x2f\xfa\x30\xb2\xcc\x44\x07\xfa\xbf\x21\x46\x39\x2a\xbb\x51\xcd\xbb\x43\x97\xf8\x4e\xc7\xa6\xd2\x19\xff\x04\x80\xe7\xb6\x27\xbd\x67\xc6\x35\xef\xac\xc2\x36\x26\xdb\xfa\x1c\xf5\x66\xfd\x8d\x8f\xa1\xb6\xb7\x74\x65\xf5\x04\x01\x2f\x00\x6c\x85\xc3\xe7\x03\xdc\x84\x15\x7f\xbf\x23\x81\x8c\x48\xb0\x8d\x33\xad\x9b\x92\xbf\xe7\xd6\xbd\xf9\xdd\xb7\xed\xee\x59\xad\x33\x38\x2c\xd8\x30\xbe\xdf\xa6\xb7\xd8\x3b\x17\xc6\x95\x33\x5a\x05\xa6\x72\x9d\x33\x7d\x15\xef\x23\x32\xa4\xb9\xeb\xaf\xd4\xa9\xfd\x73\x63\xfa\x80\xb3\x5a\x0b\xf3\xfe\x93\xa1\x4f\xfd\x54\x02\x9d\xb2\xdd\x41\xf0\xb0\x6d\x3d\xbc\xd0\xc6\x38\xb9\x7f\xc4\x22\x35\x86\x55\x08\xd5\xe8\xa2\x1f\xf8\x23\x79\x20\xa2\x83\x12\x22\x14\xb6\x78\x14\x12\x7c\xd5\x70\xa0\x6c\x3b\x43\x06\xf1\xf4\x06\xdc\x83\x41\x45\x42\x45\xa7\x33\xad\x84\x07\x91\x06\x5c\x68\x76\xa4\x0c\xd8\xcf\x82\x24\x16\x01\xa0\x66\x01\x26\x19\x7e\x58\x05\xd8\xd8\x26\x57\x17\x0d\x7c\x12\x95\x73\xe5\x39\xcc\xd3\x75\xb1\x21\x76\xc1\x2c\xd3\x34\x29\xdb\x1d\x34\xe5\x19\x66\xd3\x6e\xb7\x8b\x88\x4a\xba\xdf\xb4\x22\x74\xdb\x60\xe8\x1c\xf4\x81\xb0\x19\xe7\x92\x64\x4b\x9f\xb5\xee\xd3\x15\xf4\x32\x43\x7a\x84\xa4\xc6\x3e\x54\x41\xfe\x37\xe5\x9c\xdf\xe7\xf5\x33\x54\x6b\xaa\xad\x93\x87\x6a\xda\x01\x08\xf5\x16\x2d\x99\xf7\xab\x35\xaf\xff\x9f\xbd\x6b\xeb\x6d\xe3\xc8\xd2\xef\xf3\x2b\x1a\xf3\x62\x07\xa0\x65\x64\x06\x03\x2c\xf2\xc6\xc8\xf2\x0c\x03\x45\xf2\x4a\x72\xbc\xbb\xd3\x03\xba\xd8\x5d\x24\x7b\xd5\xac\x62\xaa\xbb\xa5\x30\xc0\xfe\xf7\x45\x9d\x73\xea\xd6\xf7\x26\x29\xc7\x9b\xcd\xc3\x60\x02\x8b\x5d\xf7\x3a\x75\xae\xdf\x37\xa1\x18\xce\x90\x92\xb8\xa2\xb8\x0e\x80\x3a\x29\xa6\x56\x7a\xfd\x24\xbb\xd8\xfb\x8e\x02\x95\x69\x6d\x89\x4a\xce\x8f\x2a\x2f\x6a\x1e\xe9\x96\x13\x67\xcb\x04\x4f\xc9\x8f\x92\x79\xb5\xeb\x06\x28\x39\x55\x8b\x72\x83\xc4\xff\xba\x84\xee\x46\x6b\x51\x8e\xa4\xd0\x20\x2c\xd3\x78\xd1\x71\x8c\x87\x09\xc4\xa5\xca\x0a\x80\xd2\x39\xa6\x4a\xc9\x36\x83\x4d\x43\x7c\xeb\xb0\x47\xc7\x25\xd6\x2f\xe5\x07\x2c\xbc\x32\xf1\x10\xfa\xa4\x40\x55\x07\x82\x62\xdd\x92\xa1\x9e\x75\x35\x79\x8f\x00\xbf\xf7\xa8\x48\x20\xe8\x0e\x1e\x84\x24\xa5\x85\x40\x83\x86\x53\x5f\x46\x6b\x53\xf3\xf2\xc8\x3d\x5a\xa0\x14\xc0\x25\x9f\x2f\xa2\xf7\x52\x01\xf7\x0f\x45\xb9\x29\x11\xc1\x3d\x5b\xa5\xeb\x04\xbd\xe9\x4f\xdf\x9a\xfc\x13\x9c\x21\x36\x01\x20\xfe\x29\x13\x65\x6b\x03\x2e\x3d\x0b\xda\xc2\x4f\x7e\xd2\xa6\x70\xeb\xcf\xa9\x7d\xf8\x29\xe2\x75\xcf\x3f\xdd\x47\xb8\xd4\x04\x43\xa8\xfa\x06\xea\x35\x32\x9c\x01\x03\xcb\xb5\x3c\x42\x1d\x08\xf6\x01\x17\xdd\xe0\x50\xea\x65\xe7\x65\xb2\x75\xcf\x4f\xc8\x8e\x45\x64\x0c\x34\xcf\x9d\x03\x56\xc4\xe4\x42\x3f\x4b\x8b\x18\xd8\xad\x19\x2b\x05\x87\xb0\x06\x2b\xa3\x54\xfa\xcd\x46\x59\x39\x9c\x0a\x33\x11\xfc\x63\xe8\xa8\x95\x12\x53\x1c\x68\x9e\x41\x74\x0a\xf4\xca\x0c\xa1\x14\x4c\x1e\x21\x2a\xc6\x84\xed\x5f\x87\x03\x0c\x8b\x53\x63\x11\x76\xd5\x58\x24\x93\xab\x92\x29\x8e\x28\x5e\x85\x7e\xc2\xcb\xec\x49\x5f\xd4\xe6\xb1\xb6\x07\x14\x24\x40\xf3\xec\xc5\x02\x87\xed\x41\x81\x3d\xf2\x43\xe1\x13\x09\xd0\x89\x8a\xba\x0e\x64\xa6\xe7\x63\x18\xf3\x07\xb7\x02\x16\x6e\xe9\xb1\x17\x8e\x7b\x4a\xb0\xd3\x1f\xf5\xc7\x3d\x49\x70\x8d\xc6\xf5\x19\x74\x45\x45\xce\xb1\x44\x62\xc2\xad\x33\xed\xa1\xcb\x73\x69\x61\xb6\x74\x3e\x3a\xb0\x7e\xb4\x91\x13\x0b\x42\x0b\xf4\xe2\xc7\x5a\xe0\x34\xb7\x8d\x2a\x1d\x11\xa3\xec\x10\x54\xb6\x03\x92\xa3\xa1\x60\x6b\x27\x14\x35\x3c\x34\x44\xa4\x8d\xb5\x60\xc6\x91\xd3\xda\xe1\x91\xc9\x53\xb4\xb9\x9d\x09\x53\x4e\x8f\xa5\x85\x23\x10\x1f\x64\xa4\x40\x15\x38\xe1\x7a\xf9\xe6\xa2\x35\x57\xc9\x64\x2a\xdd\x5f\x5d\xde\x5d\x3d\x7c\xb1\x84\x2a\x93\xcd\x34\x39\xa3\xca\x8c\xf3\xdd\xd5\xfb\xf9\xc7\xeb\x87\xe5\xbb\xc5\xdd\x4b\xa4\x54\xd1\x9f\x8e\xc8\xa9\xba\x27\x10\xd2\x4b\x29\x4a\xfe\xcb\x49\x6f\xb2\xaa\xc4\x92\x4d\xc8\xed\xb7\x40\xbf\x7d\xea\x0e\x36\xda\x04\x51\xb5\x08\xa7\x04\x21\x85\x2f\x9a\xc5\x4c\xf5\x18\x62\xd7\x59\x9e\x43\x8c\xd4\xfa\x58\xa9\x8c\x46\x2f\x2a\xc8\x1f\x43\x75\x47\x32\x35\x16\xab\x00\x45\x16\xfc\x3e\x5b\x6d\x09\x61\xad\xdd\x5e\x2f\x80\xca\xa0\xe0\xaa\x0f\x67\x75\x93\x09\xee\x86\x81\xec\x51\x95\x88\x3a\xc1\xf1\x68\x13\x5f\x32\xa2\x4d\x8a\xd7\x58\x5d\xd3\x9c\xb8\xe0\x7c\x1a\xf5\xd3\xfc\xd1\xce\x10\x2f\x71\x26\x50\x31\x0d\x6e\xf3\x7d\xfb\xd1\x7d\xeb\xae\x00\xac\xbb\xde\x49\x06\x8e\x68\x20\x68\x72\x1b\x49\x1b\x81\x08\xe7\xce\x43\xfd\x98\x61\xde\x89\x5c\xd7\xd6\x59\x8b\x42\xbd\xd6\x19\xb8\xab\x19\x12\xdd\x44\x49\x5e\x15\xda\xfa\x47\xdb\x79\xfe\xe9\x3e\x16\x48\xb5\x49\xaf\x10\xa1\x60\x63\x17\x98\xf5\x20\x83\xfe\x8d\x86\xe2\x4b\xb0\xd7\xe8\xa8\xdc\x71\x26\x0a\xa4\xcf\xcb\x73\xae\xdc\xc9\xc0\xf1\x70\x9e\x12\x81\x02\xd0\x20\xba\xef\x89\x41\x4d\xc2\xad\xd5\xe3\xa5\xbf\x12\x83\x58\xfd\x3c\x75\x15\x74\x42\x4a\xe5\x4b\x9e\x9c\x96\xcc\xfe\xb1\xa7\x88\xb2\x51\x5b\x0f\x51\x98\x67\x3f\xea\x2c\x3d\x60\x73\x7f\x1c\xa5\x33\x1e\xa5\x11\xef\xba\xff\x4a\x44\x5b\xa9\x05\xa8\x05\xb0\x76\xb1\x46\x5b\x50\x9e\x43\xc6\x90\x5e\xc6\xd6\x57\xc7\xe1\x0e\x1d\x15\x7d\xbc\xb9\xbd\xb9\xf2\x63\x87\x8b\x9b\x87\xab\xbf\x5f\xdd\x05\xc5\x83\xd7\xb7\xf3\xa0\x00\xf0\xfe\xe1\xae\x56\xf7\xf7\xfd\xed\xed\xf5\x55\x23\x08\x79\xf5\xb0\xf8\x31\x68\xfc\xdd\xc7\xbb\xf9\xc3\xe2\x36\xf8\xdd\xf7\x8b\x9b\xf9\xdd\x7f\xfa\xff\x72\x75\x77\x77\x7b\x57\xeb\xef\xe3\x65\x7f\x38\x33\x98\x46\xbb\x29\xee\xa2\x25\x1e\x04\x53\xdb\x92\x3e\xb0\xe2\xf1\xcc\x65\xb3\x50\x26\x3e\xa5\xec\xb5\xb5\xca\x35\xf0\x4a\xa5\x7c\x79\x5c\x45\x6d\x57\x55\x70\x6b\x3f\x8a\x97\xea\xb0\x64\x65\xc9\x77\xfb\xd3\x08\x5d\xc7\x5f\x91\x69\xc5\xba\x20\x5f\x46\x14\xeb\x06\xbb\xfa\xf5\x14\xeb\xb6\xd4\xe1\x36\x8b\x75\x17\x37\x8b\x87\xc5\xfc\x7a\xf1\x5f\xb5\x16\x3f\xcd\x17\x0f\x8b\x9b\xbf\x2f\xdf\xdf\xde\x2d\xef\xae\xee\x6f\x3f\xde\x5d\x5e\xf5\x67\xdf\x37\x47\xef\x8c\xb6\x37\x91\xdf\xcf\x77\xd1\x83\xa7\x4e\x63\x5c\x80\xac\x35\x02\x0b\x85\x53\xc5\xf2\xec\xd7\x4c\x6c\x66\x40\x39\xfa\x5d\x74\xa5\xd4\x62\xc7\x36\xfc\x43\x95\xe7\x60\xf4\x62\x10\xee\x52\x71\x56\xc2\xcf\x3e\xc8\x74\xe1\x7d\x07\x99\x03\xad\xd3\x80\xfe\x89\xc0\x17\xbb\x9f\x51\xff\x9e\x89\x67\xb3\x12\xc8\xc5\x61\xe9\xd5\xbf\x03\xfe\x02\xb9\x26\x26\xaa\x99\x8d\x71\x46\x3f\x57\xb2\x64\x11\xff\x25\x81\x8a\x93\xf6\x73\x72\x2d\x4f\x22\xe0\x1d\xe6\x8a\x6a\xbf\xd3\x47\x66\xfe\x11\x58\xde\x72\x0a\xff\x25\xcd\xf2\x47\xfc\x94\x28\x2f\xdb\x15\xa2\x32\x3f\x43\x52\xd7\xb5\xdc\xb4\x63\x3f\x41\x89\x20\x01\x56\x39\xa2\x1e\xc8\xa7\x95\x9b\xa8\xc8\xc4\x63\x2c\x3e\x6d\xb9\x88\x64\xa5\xf0\x9f\x4a\xa9\x00\xe3\x6c\x9d\x57\xc5\x96\x03\xd1\xf6\x2c\x7a\xe6\xd1\x8e\x1d\x30\xaf\x76\x27\x95\x87\x86\x05\x47\x46\x1f\x4e\xf8\x3a\xcf\x84\x96\x16\xfb\xcc\x84\x10\xea\x5b\x7f\x8e\x10\xa3\xa9\xb7\x62\xa7\x97\x43\x8f\xcb\x93\x7a\xde\x72\x48\x11\x71\xde\x2d\x63\xc6\x91\xe4\x06\xd8\x52\x29\x1f\xb5\x65\x66\x2a\x33\x5f\x19\xf8\x13\x58\xee\x27\x99\xa5\x51\x5a\xed\xf3\x2c\xb1\x72\xf7\x59\xaa\xce\xf2\x73\x8c\x75\x4d\x28\x3f\xaf\x45\x70\xfb\x26\xd6\x12\x48\xf3\xfc\x1d\x3d\x85\xe8\x2f\x5c\x8a\xef\xd1\xc6\x55\x05\x57\x6f\x4a\x95\x6d\x36\x10\x38\x30\x61\xf9\xaf\xbf\x56\xdf\xd5\x02\x9e\x1e\x81\xf6\xf3\xc3\x72\xb9\xc9\x12\x96\xfb\x2e\x68\xa7\xbb\xda\x62\x60\x73\xed\xf7\x95\x42\xc2\xf6\xb5\x2b\xc8\xec\x2c\x72\xd8\x2b\x0e\xf5\xe8\x4b\x64\xe2\x3b\x9d\x21\x70\xb1\x46\x5e\x72\xa2\xb2\x71\x09\x94\x86\x0d\xcc\xbc\x70\xae\x6f\x03\x86\x87\xa4\x05\x40\xff\x19\xc9\x67\xe0\x92\xd5\xd6\x88\x56\xce\xf5\x4c\x85\x04\xdd\xc4\x02\xe4\x59\x2f\xb2\xc1\x37\x5c\x5b\x77\x39\x26\xb9\x6c\xb2\x27\x2e\xbe\x02\x6c\x05\xe7\x69\xd7\x53\xb7\xb7\xb4\x55\x44\x9e\x8a\x96\x67\x83\x40\xc7\x6a\xc4\xfd\x41\xbd\x4d\x2e\x57\x48\x66\xdb\xc0\xd1\xf3\x5f\x9d\x2e\x48\xae\x27\xae\x54\x96\x4e\xb9\xad\x66\x4d\x6e\xed\xa7\x7d\x03\xb4\x24\x09\xb6\x27\xb8\x28\x99\xb6\x45\xcb\xba\x36\x5b\x4f\x20\x19\x52\x9d\xa1\x0c\xae\x30\xe6\xaa\x7b\x5c\x0d\x16\x06\x54\xc5\xc8\x1e\xd6\x8d\xe6\x5c\x4e\xda\xe8\x66\x4a\xe2\xc0\x5a\xba\x2c\xc6\xfe\x4d\x3e\x21\xaf\x0c\x93\xe0\x6c\x72\xd9\x94\x82\x66\xb3\x75\xe8\x58\x01\x46\x13\xbb\x89\x81\xc7\x7b\xd4\x8e\xd6\xd7\xfd\x81\xef\xf6\x39\x2b\xcf\x8c\x44\x79\xfa\x8d\xaa\x4a\xe9\xf1\x4b\xeb\xf9\x2c\x2c\xcd\xb4\x89\xa5\x81\xd8\x58\xa4\xad\x4c\x75\x4e\xa4\x9a\xab\xd9\xf5\x7c\xb7\x64\x59\x4c\x02\xd2\xf4\x48\x97\x0f\xbc\xb4\x69\x35\xb9\x41\x4e\x03\x68\x06\x3b\xeb\x30\xaf\xd0\xa4\x0e\xd9\x5c\x70\x40\x54\xb1\xdc\xe7\xbb\xbd\x14\x5c\x90\xf7\x4b\xc8\x58\x50\xe3\x06\x33\xd8\x72\x10\x06\x41\xc6\x19\x19\xa9\xe8\xb2\xe6\x85\xcc\x9f\xc8\x91\xed\xe1\x63\x00\x72\x9e\x1e\xe0\xa5\x7e\xef\xb5\x76\xcb\x44\x6a\x23\x4e\xe0\x83\xab\x01\xe7\x2a\xbe\xc9\x8a\x92\xfb\x71\x59\xff\xfb\xb3\xe1\x75\x06\x0a\x71\xdf\xd2\x77\xe2\x75\x0e\xbd\x6c\xfa\xd6\x4e\x18\xcf\x61\xcf\xd3\x85\xfd\xae\xff\x30\x04\xc9\x15\xa9\x27\x24\x82\x57\x00\xcf\x00\x27\x42\x6f\xc8\xb4\x2e\x2c\xb2\x85\xdd\x24\xcb\x6a\x69\xe0\xf4\x60\x8b\x36\x15\x53\x4c\x94\x9c\x17\xb1\xc0\x2c\x74\x2c\x91\x09\x92\xe2\xd6\x01\x40\xab\xd3\xb5\x13\x59\x94\x98\x80\x0b\x9f\xac\x59\x96\x57\xaa\x53\x85\xc4\x53\x79\x54\xb6\x4f\xdf\x2a\x5d\x42\xb3\x51\xdb\xa6\xd9\xd4\x01\xef\x16\xd9\xa4\x35\x43\xbc\x67\xc8\x01\xc3\xc8\x7a\xc7\x14\x8c\xc8\x1d\xbf\xdf\xd6\x7f\xd0\x91\x4d\xf0\x6f\xc5\x72\x2f\x27\x48\x3c\xe2\xfb\x69\x17\x3e\xac\x78\x84\x3c\xaf\x21\xc5\x78\xd8\xdb\xf5\xd7\xbf\x0c\xd8\x18\x7d\x52\x07\xce\xdb\x96\x89\x14\xc8\x7b\x59\x59\x7b\x3b\xec\xe9\x05\x68\xcc\xd2\x88\xb5\xee\x40\x18\xf8\x95\x97\x49\x23\x28\x39\xb0\x54\xf5\x68\xe6\x40\x70\x2b\xe8\x25\x8c\x31\xb6\xf9\xb6\xdd\x9b\x4c\x10\xad\xf6\xaa\x75\x1f\x9e\x75\xb6\xe9\xda\x92\x97\x67\xba\x72\x55\x90\x4d\x19\x97\xd0\x25\xa2\x97\xc7\xc2\xd4\x9e\x78\x8d\x20\x26\xa1\xc5\x90\x5f\x08\x1c\x0b\x42\x70\xc6\x3a\x55\x80\x01\xc7\xfc\xed\x22\xfa\xd6\x06\xaa\xbf\xfd\x9b\xc9\xde\x3d\x44\x6b\x58\x6b\x48\x91\x97\x49\x52\x29\xc0\xcc\x35\xb4\xde\x1c\x5f\x95\x29\x78\x0d\x73\x7c\x4b\x0b\x10\x2e\x90\x09\xdc\xcd\x50\x4b\x46\x73\x30\xa9\x07\xb0\x95\x10\x8b\xda\xbe\x62\x84\xed\xa4\x8a\x32\x2a\x4a\xbe\x6f\x95\x27\x81\xba\x14\x3e\x04\x27\x55\x99\xb6\xa1\x46\x0f\x97\xfe\xdb\xba\xd7\xfa\x49\x25\x48\xd9\x53\x5b\x1c\xda\x06\x9b\x5e\x58\x7f\xe5\x00\xcf\x16\x20\x8b\x08\x8b\xb7\xb9\x7a\x16\xbe\xe0\x8b\xa4\xd1\x4f\xe1\x3e\xb0\x28\x16\xc4\x1a\xd2\x27\xdb\xc2\x4f\xa7\xe7\x94\xb9\xfc\x71\xc2\xf3\xc7\x06\x57\x08\x3d\xe1\xa3\x65\x1c\x83\x66\x52\xdf\x18\xd3\x56\xcf\x76\x9c\x58\xc9\xef\xc0\x57\x5e\x30\x78\xed\x8d\xf5\xc4\x3a\xfe\x27\x1f\xb0\x04\x54\x2e\x97\xf3\x33\xca\x53\x61\xeb\xf7\x7f\xb2\x59\x47\x23\xca\xf7\x7b\x97\xff\x37\x2b\xde\x3f\x0e\x7d\x64\xcc\x2a\x05\x55\xfb\x0d\x51\x13\xac\x83\xcc\x46\x41\x19\x35\x19\xd8\xe1\x15\x4f\xb9\x90\x25\x8f\x58\x24\xb2\xfc\xad\xa8\xf2\xfc\xed\x8d\x14\xfa\xf1\x2a\xb2\x0d\xe6\x74\x81\x57\x1f\xe9\xcb\x1c\x0d\x56\x10\xce\xf1\xc4\x04\x3c\x60\x7a\x48\x18\x69\x2a\xf5\xab\xa2\x2f\x6b\x7e\x88\x85\xfe\x82\x98\x38\x80\x3d\x28\xb3\xf5\x1f\xd8\x9b\x01\x4d\xa6\xbe\xa0\x16\xfa\xe0\x37\xde\x72\x09\xfb\x70\x86\x4f\xaa\xbb\x00\xf2\xfb\x13\xac\x5a\x9f\xa4\x9f\x5a\x33\x39\x11\x0d\x96\xfe\x0e\x41\x09\xbc\xfd\x67\x1a\x02\x36\xd6\x39\x82\x58\xcc\xcd\x4f\x2c\xaf\x91\x65\x18\x21\xb0\x47\x00\x8c\xb7\x16\x95\x0d\xfa\xd0\xe4\x3a\x26\x31\x15\xc1\xb2\x79\x4a\x81\x90\x84\xa2\x23\xd6\x5a\x47\xe4\x15\xa3\x53\x8f\x22\xee\xb7\x57\xeb\x68\xca\x7e\x6b\x0c\x5a\xd5\x7e\xc4\x79\xfc\x2d\x43\xd6\x2f\x89\x3a\xed\x20\xa6\xe9\xdf\xa6\x42\x46\x9b\x95\x3a\x47\xe4\xee\x67\x04\x45\x58\xca\xb5\xe1\xf9\x3f\x1e\xc8\x61\x64\xe8\xc4\x2f\x45\xf3\xe1\x1b\x9a\x87\xa4\xcb\x37\x20\xc5\x92\xbc\x07\xe3\x06\x5b\x5f\xb0\x5b\xf1\x1e\x3f\xff\x20\xf3\x2c\xe9\x8f\x37\x99\x67\x1c\x08\x4d\x1a\xd1\x46\xa0\xfe\xe1\x86\x54\x94\x06\x85\x81\x94\x92\x27\xa5\xf3\x8e\x35\x27\x37\xc5\x0f\x6b\x4c\x2a\xdb\x0a\xc0\xaa\x39\xba\x28\xfd\xac\x40\x42\x3e\x14\x23\xa2\xb1\x01\xec\x20\xe0\x96\x4d\x18\xd9\x60\xc1\x40\x40\x36\x3d\x6f\x65\xce\x67\xe8\x7e\x83\x60\x4e\x2c\xf6\x5c\x25\x52\x1b\xb2\x51\x2a\x9f\x29\x81\x35\xcb\x53\x57\xf1\xff\x1a\x62\xcb\x10\x01\xfa\x86\x30\xa0\xb8\x75\x8f\x5a\x5e\x9e\xe1\x63\x6b\x70\x60\x4f\x85\xcc\x39\x57\xb0\xa8\xef\x14\x7c\xa2\x78\x33\x2e\x05\x51\x69\xd4\x1c\x5d\x7a\xd1\x83\xf1\x4c\xdb\x61\x6e\x8b\xb9\xe1\x81\x41\x12\xa7\xb2\xb6\xaf\x54\x59\x54\x5f\x4a\x28\x52\x41\x00\x30\x8c\x7d\x68\x23\x1a\x72\x02\x18\xaa\x21\x2e\x65\x9c\x36\x35\x16\xce\xb5\xf7\xaa\xf0\x55\x92\xd6\x7d\xc6\x1a\x8c\x0c\xe0\x15\x13\x3e\x8b\x5e\x05\x13\x7d\x05\x45\x0c\x42\x42\x7f\xe4\xc4\x09\x96\x06\x8e\xeb\x2c\xca\xca\x58\x64\x05\x9e\x4c\xc5\x73\xfe\xa4\x47\xe7\x13\xf2\x52\x98\x86\xb0\x26\xec\xb4\x21\xa3\x81\x51\xd9\x44\x6a\xe1\x83\x21\x5d\x50\xf9\xc9\xf0\x0c\x92\x2e\x81\x5f\xa5\x12\x50\xcb\xcd\x7f\x41\x12\x9b\xfc\x60\x22\x17\xa9\xee\xce\x71\x2b\x11\x42\x21\x30\xbb\x1f\x64\x85\x74\x78\x29\x11\x4c\x9b\xea\x5e\x9b\x99\x98\xa1\xe2\xbe\x92\xe5\x36\xd8\x08\x82\x30\xc3\x9b\xc4\x9f\xb8\x3a\x94\xc0\x17\x08\xeb\x2a\x38\x2b\xb7\x51\x56\xce\x20\xa5\xd4\x08\x8e\x58\xb0\x94\x10\x60\xa9\xb9\xcc\x12\x7a\x77\xef\x33\xfd\x7d\x25\x9f\xfa\x74\xba\x53\x03\x96\x78\xab\xf7\x39\x13\x4b\x14\xa8\xbf\x41\xc8\xd2\x43\x97\xeb\xf2\xf5\x55\xab\xa5\x65\x7b\x39\xcb\x38\xad\xa6\x73\x17\x60\x3e\x6a\x15\xce\x74\x34\xc3\xc3\xe0\xca\xe0\x8c\x66\x0e\xb5\xfd\x26\x74\x92\xe5\x5a\x58\x90\x27\x71\xbc\x14\x70\xd1\x4c\x56\x73\xa2\x9b\xd3\x3a\x14\xce\x34\x27\xe0\x6b\x0d\xad\x8d\xd9\xf9\xda\x1b\x52\xdf\xf6\xe9\x51\x9d\x86\xc2\x74\x54\x64\x67\x60\x58\x2f\x1b\xdd\xe9\x74\xb3\x34\xa3\x3c\x9f\x2c\x35\x9e\xf5\xbb\x63\x1a\x0f\x8f\x0a\xa9\xed\x1a\xe3\x05\x6a\x47\x11\xf4\x4d\x10\xd9\x92\x16\x70\x4e\xe7\x4a\xc8\x31\x32\xba\x7a\x19\x39\xfa\xa2\x85\xb0\xac\xef\xb3\x28\xfe\x33\x9e\xac\x22\xfe\x33\xd2\x27\x18\x10\x4a\x43\x00\x48\xf7\x27\x0d\x38\x68\x6d\x34\x02\xf3\x57\xdc\x85\x23\x62\xba\x49\x1e\xcf\xdf\x92\x79\xcf\x2b\xed\xc6\x14\xb7\x15\x36\x40\xcf\x24\xda\x9c\x07\x43\xcb\x07\x40\xc9\xaa\x4a\x4a\x37\x61\x4b\x64\xf6\xbd\xf9\x50\x2f\xd1\xbe\xa2\x17\xd5\x12\x87\x49\x15\x0b\xd3\x9a\x63\x3a\x9e\xe7\x79\xa3\xa9\x26\x81\x9f\x77\x56\xc1\x8f\x6f\x50\x57\x00\xcc\xc7\x55\x6c\xd4\xe5\x00\xc4\x05\x56\xdc\xc1\xe7\x5e\x44\x8e\x42\x12\x54\x8f\x1e\xb6\xba\x3c\x37\x54\x6d\xa8\xb5\x79\xfc\x5c\x45\x05\xa5\x10\xeb\x4a\x8b\x23\xaf\x5e\x24\x16\x40\x5b\xb8\xce\x20\x69\x85\xd6\x25\x16\x3f\x4a\xaa\x3b\x01\xf5\xca\x4c\xd2\x24\x40\xd0\xb2\xbd\xb2\xe0\x33\xf4\x0f\xef\xe0\xd9\x5e\x63\x28\xbe\x06\xdd\x0c\x39\x56\x90\x09\x3a\xd3\xba\x87\x72\x93\x4a\x98\x88\xc5\x7f\xeb\xe5\x31\x6c\x7c\xb4\xad\x72\x8d\x97\xd8\x40\x5d\x47\xaf\x3f\x63\xa3\xaf\xff\xf6\xcd\xe7\x6f\x90\xe9\xb4\x2a\x00\xef\x6b\x16\x3e\x21\xb6\x74\xb0\xca\x73\xc8\x43\x36\x33\x58\x2b\xb9\xc3\x4a\x67\xdb\x45\x2f\x11\x0f\x59\x39\x13\x49\xcb\x06\xe9\xca\x9c\x77\x7a\x1e\x25\xac\x4c\xb6\x6f\x8c\x36\xe7\x33\x14\x66\x86\x2a\x91\x80\x7f\xb4\xae\xd5\x5e\x3d\xa7\x2d\x30\xb5\xb3\xe0\xc3\xc1\x79\xd1\x53\x80\xd8\xd2\x43\x70\x2a\x7d\x88\x6f\x3c\x9c\x0e\xf7\xd7\x69\x7a\xf6\xe7\x06\xcd\xc7\x05\xde\xc8\x8d\x2e\xd8\x8e\xa7\x51\x8c\xe0\x17\xf1\x9f\xcd\xf6\xc7\x62\xbf\xba\xc8\x0f\xeb\xf2\x02\x0a\x81\x2e\xf4\xb2\x5c\x00\xe2\xc5\xc0\x4b\xb7\x4c\x9b\xa6\xd2\xc0\x72\x77\x1a\x5b\xed\xfa\x8e\x5d\x1d\xdb\xd3\x78\xa5\x05\x5d\x3c\x76\x7d\xee\xc3\x38\x59\x58\x7d\x09\xa4\x6e\x44\x41\xa7\x95\x5c\x4f\xb1\x72\xf7\x13\xd9\x7d\xa2\xa2\x64\x65\x96\x20\x72\x9d\x60\xf9\x01\x52\x9f\x66\xb1\x48\x33\x85\xa6\x35\x4b\x0e\x49\x9e\x25\x44\x27\x17\xea\x42\xfc\x89\x8b\xf2\xea\x97\x92\x2b\xc1\x72\x93\x63\xb5\x10\x6b\x79\x8a\x42\xc4\xa9\xbd\xd3\x20\xd3\x17\xa1\xc6\x03\x65\xfb\xd8\xae\x73\x30\x26\x0a\xfd\xf8\x60\x55\x9b\x9c\x0c\x7b\xc4\x67\x84\xa1\xc3\xa0\xaa\xe7\xdf\xab\x95\xcc\x79\xf4\x73\xc5\xd5\x21\x5a\xbc\x8b\xa4\x82\xfa\xe3\x52\xd2\x3f\x65\xe9\x24\x94\x60\xa4\x40\xa6\x70\xa9\x25\x5c\xae\xe9\x43\x8d\x11\x17\x0e\x0f\x5d\x2a\x4b\xa9\xeb\x39\x3b\xc3\x19\xb4\xed\x56\x50\xa6\x03\xb0\x85\x5f\x4a\x79\xed\x2a\x10\x6a\xbf\x2b\x1f\x3b\x14\x57\xcb\xd3\x1a\xfa\x38\xeb\x97\x9a\xd6\x49\x1d\x4b\xa2\x85\x15\xcc\xc6\xfb\x20\x55\xb6\xc9\x04\x2b\xa5\x8a\x5e\x7f\x30\x65\x7f\xdf\xd8\x52\x75\x58\xc5\xf6\x61\xd4\xbc\xab\x53\x96\x08\x3d\xb3\xed\xaa\x11\x44\xdc\x79\xba\x6c\xd6\x65\x4c\x85\xdd\x1d\xcc\x28\xd1\xbf\x2a\x4a\xb6\xdb\xfb\xb0\x9b\x16\x0d\x8e\x56\x26\xc7\x45\x88\xcc\xc0\xc0\x08\xcf\x0a\x97\xdf\x17\x0b\x72\x5d\xe1\xbe\x49\xd5\x02\xbe\x5f\x9f\x25\x88\xf9\xe5\x91\x55\x2f\xc4\x81\x3b\xfc\x75\xaf\x7b\xff\xee\xda\x78\xf4\xdc\xb3\x1d\xbc\x83\x30\x51\x2e\x12\x90\xaa\x90\xdd\xbf\x0d\x0a\x0c\x62\xe1\x92\xfb\x2f\x73\x59\xa5\x11\xc9\x1e\x0a\x15\xa8\x8b\x28\xe3\x17\xb3\xa8\xf8\xeb\x77\x6f\xdf\x5e\x5c\x74\x51\xd2\x4f\xc4\x77\xb2\xf7\x1b\xbe\x6b\x3f\xe1\xf0\xb7\xd6\xe2\x99\x81\xab\x45\x2b\x3b\xcd\x38\xa4\x28\xd9\x8f\x6c\xdf\x5f\xa2\xc1\x8c\x62\x8b\xc9\x63\x3e\xfd\x43\xcb\xdd\x1f\x43\x4e\xbb\x9c\x66\xc9\x1a\xfc\x2e\x38\xcf\xbe\xa7\x27\x4c\x5e\xaf\x77\x69\x09\x7b\x4f\xe9\xce\x64\x49\xf7\x77\xb5\x67\x8a\x8b\x72\x09\x3d\x4e\xeb\x0c\x3a\xf9\x00\x9f\x07\x65\x8b\xa3\x2c\xf6\x7f\x3e\x48\x74\xc4\x98\xda\x85\x7f\x79\xc4\xda\x84\x05\xaa\x5f\x9f\xd7\x19\xc4\x45\x3d\xa7\xf5\x10\x97\x30\x4d\xe8\x88\xd5\xf3\x26\x14\x88\xce\x51\x13\x72\xa3\x47\x18\x0f\xcb\x1b\x6d\xb3\x73\xb5\x28\x33\xff\xe6\xce\x1c\x66\xbc\xbb\xf0\x49\xc4\xca\x08\x19\xf6\x7f\xe5\x4a\xba\x9a\x74\x22\x63\xf0\x1a\xee\xa9\xe3\x39\x2c\x8f\x07\xcc\x42\x24\x4c\x84\x6a\xf2\xb1\x4a\xe0\x5f\xa8\x3c\x04\xd5\xbe\xd5\xc1\xd4\xf3\x74\x43\x8c\x2f\x8f\xa0\xab\xb1\x43\xf1\xb4\x2e\x4f\xbe\x1b\xcb\xd4\x3e\x16\xe6\x82\xbe\x05\xa5\x52\x1b\x08\x5a\x1b\x62\x7b\xca\xd7\x00\xd6\x8a\x75\x54\xf7\xb2\x5d\xc0\x24\xfe\xf9\x1f\xff\xba\xe8\xc2\xc1\x83\xa1\x1f\x4d\x4a\xf8\xde\x30\xb4\x2a\xce\x52\x47\x7a\xe3\x73\xda\x0c\x61\xdc\x0d\x1e\xc8\x53\x92\x40\x4e\xd8\x97\xa6\x36\x65\xd1\x6b\xdc\x11\xcf\x52\x1f\xc4\xd8\x1e\x70\xda\x1e\xcb\x79\x22\xd7\x11\xd8\x54\x1d\xfa\xdc\x05\x8d\xb3\xa5\x87\x09\xab\xd7\x2e\x9f\xbe\x90\xa6\xda\x55\xa9\x3f\x66\xf8\xc6\x0a\xfa\x20\x65\x7e\xaa\x25\xc4\x72\x83\x0b\xb5\x04\x18\x8e\x53\x34\x19\x3c\x00\xd6\xf4\x59\xbc\xb3\x5e\x39\x5b\xfa\x0e\x72\xda\x03\xc1\x82\x90\x11\x0d\x01\x02\x35\xc8\x98\xd7\x9d\x48\x51\xec\x5b\x1c\xb3\x13\x13\x42\xa0\x0d\x8c\xe8\x58\x84\xe9\x86\x69\xe6\x25\xfa\x32\x37\x46\x28\x0f\xac\x8d\x70\x92\x1d\x86\xa0\x19\xb5\xae\xac\x4d\xe6\x97\x11\xdb\x75\xf4\xfa\x36\xeb\x89\x50\x5d\xda\xa8\xa3\x07\x24\x16\xde\x63\x81\xc5\x42\x26\xe3\xc6\xae\x5a\x9b\xa9\x16\x1c\xc3\x93\x4d\xb5\x53\xb0\x22\x7a\x0d\xed\x77\x3e\x24\x0b\xf8\x8b\x13\xb9\x5b\x69\x73\x09\xa1\xd4\x28\x60\x03\xaf\xdc\xdc\xd4\x0d\xdb\xa2\x47\xf3\x5a\x21\x0a\x63\x6d\xed\x6d\xb6\x8b\x5f\xd5\xe8\x8b\xac\x21\x4d\xd0\x57\x2d\xce\x0b\x6b\xd1\x2e\x67\xe7\xf5\x19\x00\xdb\xc0\x33\x3b\x14\x80\x5f\xa3\xed\xf6\xf5\xda\x71\x99\xf9\x76\x84\xb5\x24\x6d\x99\x27\x81\xc1\x55\x04\x6b\x45\x73\xc9\x88\xce\x32\x37\x48\x3d\xae\xdc\xe7\x55\xd1\xbe\x38\x2f\x8d\xc1\xd1\xbe\x16\xd0\xbe\xad\x14\x27\x34\xf0\x20\x8b\x7d\x86\xb6\xcf\x5f\x5c\xf1\x01\x4f\xa4\xb0\xd5\xe5\x67\x31\xa9\x5b\xf0\x39\xda\x87\x0b\x7f\x6b\xc0\x88\x0f\xd9\xf7\x27\xba\x19\xbc\x67\x52\xc9\x84\x60\xd1\xcb\x08\x60\xed\x50\x1c\xeb\xbe\x67\xd1\x8e\x65\x82\xae\x41\xa9\xb4\x80\x4c\xf9\xaa\xda\x6c\x3a\xad\xdf\x5c\x6e\x5e\x34\x70\x62\xd0\x2c\xbc\xdf\x77\x14\x36\xe4\x7d\x08\x0d\x43\x96\xe6\xef\xc7\xcd\xd1\x5b\xb0\x76\x0e\x47\xc5\xc2\xf4\x84\xce\xf1\x75\x96\xf3\x2f\xe3\x9b\x38\x93\xa3\x65\x31\xc6\xd1\x62\xa2\x2b\x90\xe1\x89\xf3\xb0\xfe\xef\x3f\x3c\x30\x5f\xc6\x03\xd3\xea\x62\xae\x8f\x10\x6b\x97\x96\x59\xa8\x00\xf7\x8c\xf0\xc8\xe2\x42\x5b\x85\x0e\xa3\x22\xe4\xb6\x82\x8b\xb4\x00\x62\x82\xf3\x57\x1b\xc2\xeb\x73\x7a\x29\xdf\x00\x31\xc7\xbd\xdc\xf1\x08\xba\x2a\x10\x01\x29\xa2\x24\xda\x19\xc4\x8b\xf5\x04\x1d\x58\x26\x88\x24\x0a\x88\x26\x5b\x26\x36\x3c\x75\x4a\xeb\x6b\xc1\x9f\x23\xfd\x1a\xcc\xfc\x00\x9a\xb7\x3d\xb3\x88\x97\xc9\x37\x04\xbd\xec\xf2\x6d\x14\x4f\xa4\x4a\x01\x82\x64\xc3\x54\x0a\x59\x5e\x74\x25\x73\x96\x3c\x02\x63\x22\x3c\x98\xd8\x23\x05\xf9\x0c\x4a\x07\x06\x9e\x5d\x6b\x99\x48\x10\x06\xd7\x10\x89\xd8\xf1\xe1\xe7\x45\xc4\x12\x25\x0b\xa2\x52\x27\xce\x37\x22\x1b\xf3\xf8\x96\xa0\xc7\x4e\x27\x0a\x2b\x4e\x42\x1d\x99\x0b\x97\xb3\xc1\x7f\xd9\xe7\x4c\x84\x77\x12\xa7\x5b\x2a\x06\x70\xcc\x9d\x27\xdf\xd6\x7b\x7e\xd1\x8a\x73\x1f\x4e\xd5\x5d\x2b\xd4\x3e\x15\x67\xe9\xc1\xaf\x8a\xcb\x04\x61\x24\xb2\x74\x97\x09\xbd\xf5\xfa\x5a\x23\xff\x16\xc9\x57\x68\x3a\x61\x39\x86\xba\x01\x02\x2b\xcf\x6b\x57\xbf\x88\x04\xd7\x2a\x0b\x53\x59\x7e\x00\x2d\x75\xaf\xf8\x1b\xaf\x1f\xef\x7e\x53\xae\x5d\x56\xc4\x02\xc7\x0e\x54\xa7\xeb\x2a\x47\x5d\x16\xac\x3d\x3b\x01\xba\x87\x1f\x17\x33\xfd\x8c\x95\x04\x3c\xe3\x75\x0c\x67\xf6\x2c\x79\x4b\x4d\x3b\x6b\x94\xeb\xd0\x55\x6b\x2a\x48\xaa\xd8\xca\x67\x93\x5c\xf9\xcc\x5c\xec\x7c\x8a\x21\xfa\x81\x64\x97\x31\x32\xbd\x48\x3b\xa8\x1c\x01\xfb\xc7\x7b\xa9\x08\x1c\x06\x84\xc3\x07\x22\x19\xf9\x47\xf6\xc4\x67\xd1\xfd\x9e\xa9\xc7\x59\xf4\xee\x20\xd8\x2e\x4b\x7e\x90\xab\x41\xdb\xf2\x1c\xfe\x15\xab\x02\x4d\xf6\xbf\xb5\x7a\x2a\x66\x1e\x34\x84\xe7\x85\x6b\x7a\x02\x4c\x10\x54\x9f\x18\x42\x05\xee\x7a\xc2\x4d\x5c\xb9\x13\x3f\xe4\x5c\x1a\x72\x77\x58\xbc\x53\x5f\xae\x4b\x00\x27\xab\x29\xf3\xb8\x2d\x18\xac\x65\x24\x24\x4c\xeb\x89\xbf\x81\x57\x4f\xaa\x68\x9f\xb3\x52\x9f\x15\xc3\xdb\x85\xa7\x02\xe3\xd7\x28\xed\x6b\xf9\xe4\x63\x1f\x75\xd3\xf1\x72\x2f\x65\xde\xfa\xb6\x9f\x75\x01\x1b\x9e\xb4\xb1\x8b\xb7\xc0\x3c\xbc\xc2\x7f\xf1\xcc\x2a\x3a\xaf\x8c\xf3\xe1\x78\xd8\xea\x70\x9a\xd2\x4a\x21\xd9\x90\x59\x8e\x0b\xe7\x02\x65\xae\xfa\x0f\x1f\xb9\x15\x4f\x18\x54\x53\x1b\xed\x03\x79\xd0\xc0\x3d\xe5\xde\xe8\x16\x7f\x51\xd1\xec\xa7\x43\xe5\x80\x76\x97\x59\x5b\xe1\xd8\xd4\xcb\xf5\xb0\x6d\x75\x02\xe3\xc8\x8d\x03\xcb\x64\x6e\x0d\x15\xcf\x9b\x44\xf5\x65\x92\xb3\x62\x64\xd6\x4c\xab\xdc\x59\x50\x43\x97\xd0\xce\x78\x99\xf9\x0f\xf0\xd7\xed\x46\x0a\xe3\x58\xcc\x6d\xf1\xb8\x7b\xc6\xad\xea\x81\x62\x16\x95\xae\xc6\xd6\x60\x3a\x98\x43\x1a\x98\x45\x45\x95\x6c\x21\xe1\x2d\x94\x53\xbe\xdc\x6a\xde\xd8\x59\x2c\xf4\x43\x88\x48\x82\x0c\x62\x36\xcf\xfa\xb9\x2b\xb2\x5f\xb9\x7d\x69\x51\x25\x0a\x1e\xd7\x15\xd3\x5b\x43\x74\x00\x75\x45\xc4\xe4\x1e\x32\xf5\xc8\x53\xcf\x8d\x54\xed\xb5\xf9\x7b\x11\xdb\x65\xc6\xf3\xeb\x18\xec\x48\xb3\x29\xfc\x89\xf9\x8a\x58\x4d\xd2\xe6\xd9\x9a\x27\x87\xa4\x51\x6b\x1c\x44\x4a\xcf\xe7\xaf\x3c\xce\x5d\xd7\x57\x6f\xd9\x6e\x85\x7d\x6a\xd4\x0c\x45\x5d\xe1\xa5\xff\x9b\x49\x25\x1d\x25\x7f\xbf\x77\x8f\xcb\x40\x22\xf9\x1f\xf9\x21\xbf\x4b\xef\xc4\xb8\x0a\xc0\x40\x7e\x99\x14\x0c\xb0\x86\x48\x6b\x6e\x4d\xfc\xf8\xba\x8a\x3c\xb2\xd4\xbf\x37\xe5\x96\xb7\xd4\x7a\x8c\xbb\x0a\x54\x4a\x93\xda\x32\x9f\x29\x48\x4a\xf8\xa9\x59\xaf\xcb\x5c\x16\x95\xea\xbf\xfc\x77\xe1\xa8\x4d\xef\x6e\x36\x01\xc2\x15\xdf\xad\x38\x54\x70\xa5\xb8\x33\xad\x93\x19\x52\x14\xb4\xbd\x54\xff\x9e\x52\x22\x9e\x79\x94\xb0\x3d\x64\xd2\xb6\xe3\xc2\x36\xbe\xf3\xec\x6b\x78\x79\x37\xdc\xd7\x02\x6a\x8f\x63\x70\xb8\x82\x58\xd2\x57\x95\x76\xd9\x6a\x83\xd5\xaa\xcc\x03\x57\xcc\xa8\xe8\xdb\x39\x3c\xdb\x1f\x58\xb9\x45\x27\x01\x70\x24\x60\x24\xb6\xd4\x0a\x14\xa2\x76\xa3\xbb\x7b\x95\xcb\x15\x40\x3d\x97\xc0\x52\xd5\x71\xce\xe9\x70\x8e\x5a\xba\xe6\x86\x8d\x39\xdb\xfa\x3e\x40\xd6\xbc\xe2\x05\x94\x4f\x36\xe3\x49\x63\x93\xd8\xa6\x39\x32\x9a\xc3\xd5\x62\xeb\x5d\xc3\x91\xd1\x04\x9c\xd2\x52\x1d\x32\x9a\xae\x5a\xc4\xfa\xd0\xc5\xba\xf2\xf3\xce\x19\x30\x57\x95\xc0\x0d\x8c\x01\xdb\x22\x13\x9b\x9c\xd7\xe6\x6b\xb0\xf4\x63\x31\xc7\xbf\xf8\x74\xee\x0e\x12\xd1\x26\x0d\x11\x6c\xb2\xbd\x7f\x98\x88\x1e\xcd\x4d\x61\x29\x14\x30\x32\x0a\x28\x5a\x8b\x0b\xdc\x23\x33\xc3\x0f\xaf\xb4\x3e\x5d\x80\xba\x50\x54\xab\x37\xae\xcc\x50\x2a\x50\x30\xa0\x0a\x75\xcf\x14\x60\xd2\x6f\xb3\x3c\x7d\xd3\xf2\x90\xa0\x8f\xd3\x01\xa4\x19\x24\x0a\x96\x93\xf8\x02\xbb\x10\xab\x5c\xec\xdc\x6d\x3b\x5a\xbd\xe7\x2c\xd9\xda\x0a\x0b\x14\xd7\x7d\xf2\x22\x30\x96\x7e\xeb\xe4\x97\x11\xd9\x25\x1d\x90\xb8\xbf\x7f\x39\x11\xac\xd9\x18\x39\xf1\x10\x9a\x56\xe6\xd6\x68\xe3\x90\x24\x47\xd7\x52\x15\x4b\x0c\xf1\x7f\x81\x32\x7c\xe7\x19\x2a\xf6\xec\x59\x50\x71\xdf\xa4\x32\x87\x71\xf2\xa1\x9d\x6b\x43\xcb\x87\x46\xda\x8f\x93\x14\x82\x0a\xe5\xcb\xcc\xe2\xc7\xce\x3c\x24\x75\x96\xe7\x3e\x6a\x99\x73\x05\xc5\xc2\x39\x0c\xf4\xf3\x9f\xe7\xfa\xff\x93\xba\xe0\xa6\x62\xce\x14\x0a\x64\xf8\xcc\x54\xa2\x11\x8a\x03\x85\x28\xde\xa0\x61\xee\xcc\xe7\xa1\xdb\x7c\x2e\x7d\x32\x61\xc9\x96\x2f\xf5\xd0\xaa\x09\xe5\x4a\x97\xac\x64\xb9\xdc\x5c\xea\x8f\xef\xf1\xdb\xde\xc7\x0c\xf5\x22\x54\xd3\xb0\x2f\x48\xfe\x63\x09\x54\xdd\x5b\x8f\xec\x60\x30\x10\xbb\x5d\xb6\xb0\x74\x0e\x8e\xb5\xdd\x1d\xef\x11\x78\xc2\x65\x36\xb5\x50\x09\x53\xca\x24\xf4\x52\xaf\x11\x53\x65\xb6\x66\x49\xe0\x41\x1f\x07\x71\xe5\xbf\x90\xd8\x62\x01\xa1\x67\x93\x96\xe6\x8a\xc5\x59\x64\x01\xcc\xbb\xf7\xff\xdc\x36\x05\x77\x42\xfa\x05\xfc\x23\xfd\x8e\x43\xbc\xbe\xcd\x37\x32\xf0\x2c\xb3\x46\xd2\xf3\xc8\xc5\x66\x51\x00\xb1\xd0\xba\xa4\x1e\xbf\xf6\x09\x6b\x78\x64\x71\xc9\x34\x94\x42\x8f\xf4\x7a\xbc\xe4\x6c\x00\x0d\x13\xe1\x33\x52\xe4\x52\x9d\x7a\x59\x2f\xac\x84\x25\xc4\x14\xef\x27\x9e\xba\xa2\x53\x0f\x79\x44\x3f\x7d\x6c\xc3\xa3\x1d\x4f\xb3\xaa\x0e\x82\x19\x94\x23\xfc\x61\x0b\xff\xff\xb3\x85\x21\xb5\xe0\x25\x0d\xe1\xf6\x42\x97\x3f\x9e\xc2\xaf\xe0\x29\xf4\xc6\x49\x7b\x3d\xf1\x16\x8c\x96\x1e\xfd\xd1\x3b\xf7\xd8\x3a\x0d\xd4\xbe\x2b\xac\x79\x0e\x7d\x17\x4e\xe9\xaf\x81\x56\xfc\x47\xbb\xff\xba\x0b\xbe\xbe\xaa\x20\xc6\x98\xc7\x54\x5f\x71\x1b\xd6\xb8\x31\x57\x1b\x78\x29\x4b\xd9\x77\xc5\x3d\x24\x1c\x56\xbe\x2a\xec\xaa\x87\x57\xd9\xe4\x6a\x5d\x67\x45\xf9\x13\xcb\xab\x93\xe0\x6f\xa0\xa6\xe4\xc5\x22\xf1\x66\xa8\x38\x4c\xef\x8b\xde\x00\xf2\x5d\x18\xe2\xd5\xef\x2a\x9e\x39\x28\x93\x37\xc0\xbb\x7a\xdc\x53\x04\xef\x67\xbb\x5e\x9f\x51\x67\x7c\x56\x6c\xbf\xe7\xca\xc4\x2d\x1b\xa1\x65\x40\xb3\x85\x5e\x62\x81\xbe\x87\x1f\xee\x6f\x6f\xea\x6f\x83\x96\x3d\xb5\xa6\xe1\x67\xb0\x74\x17\xed\x3b\x77\x53\xe5\x79\xe7\xce\x8d\x20\xf7\xfc\x78\x7d\xbd\xfc\x69\x7e\xfd\xf1\xaa\x17\x5c\xd1\xfb\x59\xe7\x9a\xd8\x91\xd0\x9a\xa0\x45\x58\x82\x15\x58\xed\xb8\x32\x65\x1d\x6e\xd6\xa8\x78\x57\x79\x1e\x82\x6c\xc6\xe2\x33\xb5\x03\x09\x46\x95\x40\x8f\x4d\x2c\xa2\xde\x85\x0b\xfb\x87\x9f\x7d\xd6\x8d\x7f\xc6\x6f\xdf\x44\x6e\x12\xdf\x45\x37\xb6\xd7\x8e\x75\xa5\xec\xc5\x13\xae\x03\x62\x7d\x76\x5d\x87\xe3\x01\xe9\xcf\x79\x3d\x3e\x0a\xc0\x70\x21\x00\xe4\x73\xdd\x0e\x5c\xbb\xcf\xa1\x37\xd0\xca\xf2\x14\x55\x5b\x68\x77\x86\xe0\xaf\x45\x49\xb5\x8d\xb8\x66\xb1\x20\x72\x5e\x06\x55\x90\x9d\x63\x8a\x16\x14\xcd\xcf\x99\xd8\x54\x6c\xc3\x8b\x59\x64\x3a\x8f\xc5\x2e\xdb\x6c\x01\x2d\x87\xf8\xb4\xac\x25\xc3\xca\xec\x89\xd7\x8e\x10\x26\x62\x11\x42\xc4\x2c\xca\x44\x2c\x68\x4e\x62\xe3\x9a\xc7\x1c\xad\x1f\xee\xed\x74\xf4\x49\xb3\x0d\x11\x7e\xad\x88\x05\x6e\x2e\x82\xf2\x19\x37\x09\x28\x7e\xac\xac\x1f\x5d\xa6\xb8\x81\x15\x07\x99\xbe\x01\x87\x4d\x2c\x6c\xc9\x02\x6c\x6c\xc0\x09\x86\x99\x9b\x38\xa4\x61\x79\x62\x36\xc3\xdc\x09\x1a\x5b\xfb\xa9\x3f\xf9\x0d\xd0\x17\x6e\xf9\x54\x6b\x65\xc4\xb1\x75\x62\x6c\xa4\x8e\xcd\x3c\xc1\xd1\x55\xc7\x06\x75\x2a\xed\xa3\x31\xf3\xc2\xdf\x74\x86\xc0\x65\xb5\xca\x27\x0c\x09\x7f\xdf\x3b\x28\x14\xc9\xfd\x83\x1a\xe1\x23\xbd\xab\x5d\x2d\x7d\x4c\xfb\xba\x5d\x49\xd9\xb1\x2f\x67\xf4\x36\x06\x83\xa2\x0f\x86\x16\xa3\x4a\xca\x63\xce\xcb\x88\xe4\xf2\xfa\x12\x19\xe9\xd3\x37\xa0\x3c\x2b\x8e\x1a\x8e\xd3\x9f\x46\x8f\xc8\x6a\x08\xf4\xd8\x4d\x92\xb0\xf4\xce\x05\x02\xb6\x43\x4c\x92\x8f\x8b\x22\x1c\x3c\x43\xf1\x22\x80\x7d\x97\x51\x2d\xd7\xcc\x1e\xa2\x99\xdb\xb9\x19\x0c\x32\xa9\x54\xa1\xc5\x25\xc9\x3b\x92\xda\x52\x45\x2c\x16\x06\x41\xcd\x88\xe3\xb9\x09\xe2\x2b\xfb\xaf\x98\xb0\xbf\x47\xfc\x21\xd0\x58\xcb\x48\x0a\x6e\xa4\x61\x2c\x00\xd2\x5f\x80\x37\x76\x55\x00\x80\x24\x81\xb1\xd3\x1f\x3c\xf6\x45\x26\x90\xaa\x77\x58\xe6\xd5\xd4\x80\xe0\x9d\xff\x93\xfe\xdf\xff\xfc\xe9\x7f\x03\x00\x00\xff\xff\x90\x92\xb7\x48\x43\xe8\x03\x00") +var _adminSwaggerJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xbd\x79\x73\x23\x37\x96\x2f\xfa\xff\x7c\x0a\xdc\xea\x1b\x61\xbb\x47\x8b\xed\x9e\xe9\xe8\xd1\xc4\x8d\xf7\x68\x89\x55\xe6\xb5\x4a\x52\x6b\x71\x8d\xdf\x70\x82\x06\x33\x41\x12\xad\x24\x40\x03\x48\xa9\xd8\x1d\xfd\xdd\x5f\xe0\x60\x49\x20\x17\x32\x93\xa4\xb6\x32\x67\x22\xda\x25\x66\x26\xd6\x83\x83\xb3\xfe\xce\x3f\xfe\x05\xa1\x77\xf2\x11\x4f\xa7\x44\xbc\x3b\x41\xef\xbe\x3f\xfa\xf6\xdd\x81\xfe\x8d\xb2\x09\x7f\x77\x82\xf4\x73\x84\xde\x29\xaa\x32\xa2\x9f\x4f\xb2\xa5\x22\x34\xcd\x8e\x25\x11\x0f\x34\x21\xc7\x38\x9d\x53\x76\xb4\x10\x5c\x71\xf8\x10\xa1\x77\x0f\x44\x48\xca\x99\x7e\xdd\xfe\x13\x31\xae\x90\x24\xea\xdd\xbf\x20\xf4\x4f\x68\x5e\x26\x33\x32\x27\xf2\xdd\x09\xfa\x6f\xf3\xd1\x4c\xa9\x85\x6b\x40\xff\x5b\xea\x77\xff\x07\xde\x4d\x38\x93\x79\xf4\x32\x5e\x2c\x32\x9a\x60\x45\x39\x3b\xfe\x9b\xe4\xac\x78\x77\x21\x78\x9a\x27\x2d\xdf\xc5\x6a\x26\x8b\x39\x1e\xe3\x05\x3d\x7e\xf8\xee\x18\x27\x8a\x3e\x90\x51\x86\x73\x96\xcc\x46\x8b\x0c\x33\x79\xfc\x0f\x9a\xea\x39\xfe\x8d\x24\xea\x9f\xf0\x47\xca\xe7\x98\x32\xf3\x6f\x86\xe7\xe4\x9f\xbe\x1d\x84\xde\x4d\x89\x0a\xfe\xd4\xb3\xcd\xe7\x73\x2c\x96\x7a\x45\xde\x13\x95\xcc\x90\x9a\x11\x64\xfa\x41\x6e\x89\xf8\x04\x61\x74\x22\xc8\xe4\xe4\x57\x41\x26\x23\xb7\xd0\x47\x66\x81\xcf\x61\x34\x57\x19\x66\xbf\x1e\xd9\x65\x82\x96\x53\x22\x13\x41\x17\xca\xae\xf7\x35\x51\x82\x92\x07\x12\x76\x60\x26\x82\xf4\x44\x7c\x67\x72\x41\x12\x3a\xa1\x24\x45\xe3\x25\xa2\x6c\x91\x2b\x24\xc8\x6f\x39\x91\x0a\x4d\x68\xa6\x88\x90\x51\x2f\x7c\x41\x04\xac\xe0\x20\xd5\xbd\x7c\x20\xaa\x07\x6d\x17\xa3\x0a\xdf\x16\x44\x2e\x38\x93\x44\x46\x8b\x80\xd0\xbb\xef\xbf\xfd\xb6\xf4\x53\x75\x06\x3d\x24\xf3\x24\x21\x52\x4e\xf2\x0c\xb9\x96\xc2\xc1\x98\x05\xd5\xe4\x83\x2b\x8d\x21\xf4\xee\x7f\x0b\x32\xd1\xed\xfc\xe1\x38\x25\x13\xca\xa8\x6e\x57\x1a\x2a\x0d\x46\x1b\x7d\xf5\xcf\x7f\xa9\xfb\xf7\x3f\x83\x19\x2d\xb0\xc0\x73\xa2\x97\xc5\xd3\x95\xf9\xbf\xd2\x5c\x34\x25\xe8\xce\x0b\x6a\x29\x0f\xbc\x34\xdb\x0b\x3c\x27\x7a\xe7\xf5\x76\xd9\x2f\xe0\xdf\x82\x48\x9e\x8b\x84\xa0\x31\xc9\x38\x9b\x4a\xa4\x78\x65\x0d\x28\xb4\xa0\x89\xb8\xfc\x44\x6f\x25\x15\x44\xef\x95\x12\x39\x29\x3d\x55\xcb\x05\x0c\x52\x2a\x41\xd9\x34\x5c\x8a\x7f\x1e\xb4\x9a\x9a\xa1\xfd\x0e\x33\x33\x1f\x34\x4e\x6c\xc8\x7a\xee\x95\x04\x33\x34\x26\x48\x9f\x78\x9a\x12\x41\x52\x84\x25\xc2\x48\xe6\x63\x49\x14\x7a\xa4\x6a\x46\x99\xfe\xdb\x90\x6f\xe2\xd6\xec\xf5\xac\x0d\xfc\x73\xf5\xca\xdc\x49\x22\xf4\xc0\x1f\x68\x4a\x52\xf4\x80\xb3\x9c\xa0\x09\x17\xd1\xf2\x1c\x0d\xd9\xed\x4c\xaf\xc3\x7c\x4c\x19\x9c\x3c\xbd\x96\x8e\x42\xfe\xd5\x2d\xd7\xbf\x22\xdd\x1f\xca\x19\xfd\x2d\x27\xd9\x12\xd1\x94\x30\xa5\xcf\xb5\x2c\xb7\xf6\xaf\x1c\xfa\xc7\x19\x3a\x44\x7a\x9d\x89\x50\xb0\xde\x9c\x29\xf2\x59\x49\x74\x88\x32\x7a\x4f\xd0\x57\xe7\x54\x2a\xd4\xbb\x1a\x7c\x75\x80\xbe\x3a\x2f\x18\x87\xfc\xea\x19\x56\xd8\xff\xfb\x7f\x82\xa3\xa7\xf0\xb4\x7c\xe8\xde\xf5\xf4\x69\xbe\x31\x17\x50\xd1\xc2\xff\xfc\x4b\xd8\x8e\xdd\xaf\xd5\x5c\xbd\x60\xe9\x96\x9f\xb7\xe5\xe2\xb0\x4c\x31\x03\x97\x7a\x87\xb6\xe5\xdf\x95\xdb\xa1\x86\x79\xcb\x2d\xb9\xb7\x1e\x7b\x99\x7d\xcb\xb7\xc5\xbf\xf5\x14\x9e\x9a\x87\x6f\xc3\xc0\xb1\x82\x93\x85\x29\x33\x07\xd1\x9f\x4b\x21\xf5\x59\x74\x27\xe4\x95\xb0\xad\x6d\xf8\x79\x30\xb3\x80\xa5\x3b\x4e\x1d\xac\xca\x2b\x9c\x77\x46\xe7\x74\xdd\xfe\x0e\x58\xaa\x85\x47\xcb\x50\x59\x3e\x1f\x13\xa1\x97\xc1\xb1\x56\x98\xed\x58\xb3\x5a\x95\x0b\x46\xd2\x16\xd3\xfc\x2d\x27\x62\xb9\x62\x9e\x13\x9c\xc9\xa6\x89\x52\xa6\x88\x96\xd4\x4b\x8f\x27\x5c\xcc\xb1\xb2\x2f\xfc\xf9\xdf\xba\x2e\x84\xe2\xf7\x64\xdd\xfe\x0f\xcc\x6e\x26\x58\x02\x19\xcc\xf3\x4c\xd1\x45\x46\xd0\x02\x4f\x89\xb4\x2b\x92\x67\x4a\x1e\xc0\x6b\x5a\x3b\x20\xe2\xd0\xdf\x72\xd0\x83\xbb\xdd\x73\x09\xbf\xa0\x89\x67\x76\x8c\x7c\x56\xd0\xd2\x90\xc1\xfd\x0e\x4b\x14\xde\x5a\x4f\xb0\x94\x9b\xd1\x8c\xe4\x42\x8d\xc6\xcb\xa3\x7b\x52\xe9\xb7\x91\x72\x30\x43\x58\x29\x41\xc7\xb9\x22\x7a\xde\xba\x0d\x77\x3f\x03\x7b\x34\x42\x40\x1b\xd6\xf0\x72\x13\x4e\xa9\x20\x09\xcc\xad\xcb\x81\xf1\x5f\xe9\x79\x6b\x4d\x6c\x69\x66\x7f\x4f\x96\x20\xf3\xd4\xac\x80\xdf\xf2\x21\x1b\x32\x74\x88\xce\xfa\x37\xa7\xfd\x8b\xb3\xc1\xc5\x87\x13\xf4\xc3\x12\xa5\x64\x82\xf3\x4c\x1d\xa0\x09\x25\x59\x2a\x11\x16\x04\x9a\x24\xa9\x96\x6b\xf4\x60\x08\x4b\x29\x9b\x22\x2e\x52\x22\x9e\x6e\x19\x4b\x4f\x09\xcb\xe7\xa5\x7b\x05\x7e\x2f\x46\x5f\xfa\x42\x8b\x31\xfe\x51\xf4\xe4\x7f\x2a\x0b\x0c\x33\xd6\x7d\x07\xad\x3d\x9b\xe0\x94\xcc\x68\x96\x0a\xc2\x8e\x15\x96\xf7\x23\xf2\x99\x24\xb9\xb9\x93\xff\x11\xff\x30\xd2\xd2\x2f\x4f\x49\xfc\x4b\xf4\x47\x21\x6e\x75\xfe\xd4\xeb\xdb\x9d\xbf\x04\xed\xbc\xdd\x77\xf0\x0b\x4d\x6b\xdf\x86\x5f\xd6\xcc\xc1\xbd\xb3\x62\xb0\xee\x95\xc6\x51\xb9\x17\xac\xb0\x57\xfb\x8e\x20\x4a\x2c\x47\x58\x29\x32\x5f\xa8\x8e\x96\x07\x8c\x32\x2d\xbb\xae\x92\x55\x2f\x78\x4a\xfa\xae\xbf\x5f\xad\x08\x6a\x84\x4d\xc3\xb5\x26\x44\x10\x96\x90\xe6\x16\x6e\xb1\xbc\x2f\x5a\x58\x2f\xf0\x02\x8d\x21\xbd\xfc\xa8\x20\xb0\x4a\xc7\x85\xd8\xab\x97\xa4\x78\x73\x9d\xb0\x1b\xcd\x47\xbe\xe7\x42\x0f\xef\x2d\x08\xbc\xd1\xc0\x9f\x43\xe6\xdd\xf4\x44\x7f\x71\x56\x8e\x0d\xf9\xd3\xde\x26\xb2\xfd\x4a\xb6\xb5\xa0\x70\x81\xe4\x52\x2a\x32\x5f\x6b\x4b\x79\x3b\x0b\x61\x2f\xa0\xd7\x3a\xe0\xd2\x1d\xf8\x3b\x38\xf5\xf1\x8d\xbe\x3f\xde\x1d\x96\x6c\x57\x96\xd0\xd7\x3e\x4f\xe7\xed\x5a\x3d\xd5\x1b\xb7\x7d\x81\xbb\xe7\x4d\x4c\x33\x92\x35\x77\x3d\xc8\x27\x32\x67\x34\xee\x95\x5b\xed\x11\x0c\x60\x8d\x22\x1b\xdb\xd2\xfd\xf9\xd3\x9f\x86\x16\x20\x63\xee\x53\x33\x2a\x03\x63\x18\x4a\xb8\x30\xb2\x60\x6a\xcf\xbb\xd1\x65\x7b\xb7\xbd\x9b\xfe\xed\x09\xea\xa1\x14\x2b\xac\x0f\xb8\x20\x0b\x41\x24\x61\x0a\xec\x04\xfa\x7b\xb5\x44\x73\x9e\x92\xcc\x68\xb4\xef\xb5\x64\x8d\xce\xb0\xc2\xa7\x58\xe1\x8c\x4f\x8f\x50\x0f\xfe\xd4\x1f\x53\x89\x70\x26\x39\xc2\x8e\xac\x48\xea\x9a\xc0\x2c\x75\xac\x05\xa3\x84\xcf\x17\x34\xf3\x7e\x04\x6f\xbc\xa1\x2c\xa5\x0f\x34\xcd\x71\x86\xf8\x58\x73\x15\xad\x81\xf7\x1f\x08\x53\x39\xce\xb2\x25\xc2\x59\x86\x6c\xb7\xee\x05\x24\x67\x3c\xcf\x52\xdd\xae\x1b\xa5\xa4\x73\x9a\x61\xa1\x55\x7c\x33\xda\x4b\xdb\x16\xba\x9d\x11\x3f\x56\x18\x97\x5e\xcd\x39\xbe\x27\x12\x51\x85\x16\x5c\x4a\x3a\xce\x8a\x33\x7f\x37\x40\x30\xee\xd3\xf3\x01\xd8\x0b\x12\x85\xb8\xe1\xa1\xae\x73\x6b\x1f\x72\x3d\xce\x31\x63\x04\x3a\xe6\x6a\x46\x84\xed\xde\xbe\xfc\xd2\xaa\xff\xdd\xc5\xcd\x55\xff\x74\xf0\x7e\xd0\x3f\xab\xea\xfe\xb7\xbd\x9b\x9f\xaa\xbf\x7e\xba\xbc\xfe\xe9\xfd\xf9\xe5\xa7\xea\x93\xf3\xde\xdd\xc5\xe9\x8f\xa3\xab\xf3\xde\x45\xf5\xa1\x25\xab\xd6\x66\x84\x70\x64\x1d\xcf\xd6\xde\x66\xfa\x54\x36\xd3\x83\x2f\xd7\x68\x6a\x9d\x52\xed\x0d\xa6\xde\x46\x61\xbf\x44\x0b\x2c\xa5\x91\x8c\xcc\x08\x8e\x86\xec\x23\x17\x9a\x81\x4d\xb8\xe6\x11\x5a\x7a\x52\x22\x4f\x14\x65\x53\xff\xd1\x09\x1a\xe6\xdf\x7e\xfb\xa7\xe4\x9c\xb2\x7b\xf8\x17\x79\x8d\x8b\xb3\xb7\x28\xef\x2d\xca\xbf\x2f\x8b\xb2\x16\x7d\x8e\x43\x43\xf2\x6e\x83\xab\xb4\x70\x01\x3e\x71\x2d\x4a\xf0\x5c\xe9\x7f\xea\x2e\x81\x3c\x56\x84\x58\xb5\x33\x58\xfa\x08\xab\x86\x3e\x04\x9f\x83\x20\xf7\x99\x4a\x60\x46\x8f\x5c\xdc\x4f\x32\xfe\xd8\xce\x5c\xf9\x81\x28\x3f\x0c\x2d\x38\xbd\x05\x2b\xe5\x27\x3b\x43\x3f\xf0\x0f\x44\xe9\xb1\x5f\xdb\x5e\xf6\xc1\x56\xfb\x60\xab\x97\x0d\xb6\x7a\x55\xa6\xc2\xa7\x67\xad\xb1\x5d\xd1\xf0\xd7\x06\x3f\x5c\xa3\x9b\xad\xc1\x8b\x16\x38\xc9\x9e\x85\x27\xc7\xae\xa8\x5d\xf2\xe5\xd8\xd9\xb4\x86\x27\x47\xc3\x78\x2b\x7c\x39\x1a\xf4\xf3\xf3\xe4\xdf\x85\x9f\x68\xef\x06\xda\x70\xa1\xde\x24\xeb\x6e\x79\x2b\x3d\x9b\x13\xe7\xe9\xaf\x92\x4a\xcc\x47\x97\x20\x8f\x0e\x51\x1d\xad\xc3\x38\xd6\xc4\x6d\xd4\x06\x6a\xd4\x45\x66\x54\x43\x31\x6a\x63\x2f\xb6\x0b\xb6\xd8\xf4\xd6\x6b\x1f\x3e\xd1\xf5\xd6\x6b\x1f\x38\xf1\x81\xa8\x68\x18\x6f\xe5\xd6\x8b\x06\xfd\xfc\xb7\xde\xef\x34\x5e\x62\x1f\x20\xf1\x84\x4b\xf7\xa5\xdf\x95\xaf\x37\x04\xe2\x77\x10\xf3\xb0\x0f\x72\xe8\xb4\x46\x5f\x56\x54\xc3\x97\x1a\xc6\xf0\x36\xe3\x16\xf6\x81\x0a\xfb\x40\x85\x97\xf0\x28\xbd\xbd\x40\x85\x27\x55\x7c\x89\x26\x2b\x09\x56\xd4\x50\xb9\x79\xb7\xe0\xb2\x59\xdf\x0b\x9d\xd7\x35\x7a\x1d\xb4\x19\x5b\x33\x81\x7a\x7f\x45\x33\x2c\x11\x4f\x92\x5c\x94\x5c\xb4\xe5\x53\x7e\x2a\x08\x56\xfa\x88\xc4\x86\x4b\x04\x2d\x23\x41\x12\x2e\xc0\x49\x89\xd1\x62\x86\x25\x41\x4a\x60\x26\xe9\x3a\x2d\xcf\xb4\x0a\xe3\xd2\xed\xbc\x05\x05\xaf\xba\x88\xcf\xa5\xde\x8d\x79\x5a\x39\x90\xe6\xac\xd6\x3d\x59\x7d\x93\xec\x6c\xea\x90\xf6\xdb\x66\xe6\x4f\x78\x54\xf4\xad\xb5\xe3\xa3\x12\xa9\xf1\x9b\x1e\x95\xd8\xda\xb1\x93\xa3\x02\xe3\x7a\x2b\x47\xa5\xba\x88\xbf\x9b\xa3\x52\x37\xf5\xd7\x70\x54\x5c\x38\xc0\x8e\x8f\x4b\xc5\x07\xbf\xe9\x91\xa9\x86\x2b\xec\xe4\xd8\xf8\xf1\xbd\x95\xa3\x53\xbf\xa0\xbf\x9b\xe3\xd3\x34\xfd\x97\x3d\x42\xde\x0f\xd1\xfa\xf0\xdc\x0a\x3a\x9d\x12\x61\x34\xa3\x44\x93\xe2\x7a\xa8\xa5\xc2\xf2\xbe\xd9\x81\x59\x7f\x1a\x7c\x0f\x6f\xe1\x24\xf8\xc1\x9a\xb1\xff\x6e\x8e\x40\x65\xde\xaf\x84\xf6\x8f\x35\x27\x7e\x00\xb4\xb6\x76\x67\xe0\x9a\x00\xe1\xc3\x05\xb2\x10\xe4\x81\xf2\x5c\x66\xcb\x43\x91\xb3\x3a\x6e\x0f\x46\x82\x47\x9a\x65\x88\xb3\x6c\x89\xa4\xc2\x42\xb9\xc7\x6c\x6a\x3c\x4a\xfa\x30\x65\x58\x2a\x74\xcf\xf8\x23\x43\x13\x4c\xb3\x5c\x10\xb4\xe0\x94\xa9\xa3\x21\x1b\x30\x74\x6d\xc6\x08\x9a\xf7\x01\xca\xa5\x3e\x82\x09\x66\x8c\x2b\x94\xcc\x30\x9b\x12\x84\x99\x83\xae\x29\x28\x03\x71\x81\xf2\x45\xaa\x0f\x96\xee\xa2\x64\x63\x2a\x0e\xd8\x90\xdd\x82\x15\x43\x22\xf2\x59\x09\x32\x27\xd9\x52\xf7\xa1\x69\x5f\x71\x64\xd7\xc7\x0c\xd5\x1a\xc4\x89\x10\x5c\x48\xd0\xd9\xc7\xcb\xbf\x63\xa6\x28\x23\x08\xd4\x4c\x69\x80\x8f\x0e\xd1\x39\x97\x10\x93\xfd\xd3\x5f\x24\x4a\xb2\x5c\x2a\x22\x0e\xd0\x38\x9f\x4a\x44\x19\x5a\x64\x58\x4d\xb8\x98\xeb\x11\x52\x26\x15\x1e\xd3\x8c\xaa\xe5\x01\x9a\xe3\x64\x66\xda\x82\x35\x90\x07\x43\x96\xf2\x47\x26\x95\x20\xd8\xf7\xee\x1e\xa2\xaf\xc3\x67\x86\x00\xe4\x37\x07\x60\xb8\xa7\xf3\x45\xb6\x0c\x87\x1f\x24\x42\xc3\x9e\xe8\x46\x48\x8a\xc6\x24\xc1\xb9\xb4\x86\x1d\x25\x96\x88\x7c\x9e\xe1\x5c\xc2\xde\xe9\xe9\x59\xab\x47\xc2\xe7\x8b\x8c\x28\x82\xe8\x04\x29\x41\x49\x8a\xf0\x14\x53\xbd\x74\x37\x64\x45\xe2\xb6\x27\x7a\xbb\x81\x96\xea\x7f\x05\xcb\xc7\x9c\x0b\x82\x52\xa2\x30\xcd\xe4\x6a\xa7\xe4\xb3\x12\x1c\x7a\x72\x7a\x43\xaf\x97\xdc\xd0\xab\xa6\xb6\x15\x37\xa1\xdd\xb1\xfd\x55\xf8\x96\xae\xc2\x98\x2b\xbc\x8a\xbb\xd0\x80\x44\xec\x40\x20\x64\xd6\x2a\x9e\xe0\x6c\x4b\xd9\xf0\xda\x0e\xaa\xb3\x74\xe8\x3e\xdc\x1f\x8a\xb7\x75\x28\xcc\xae\xbd\x9e\x53\xd1\x94\x50\xb1\x73\xa4\x98\x2e\x18\x2f\x2b\x32\x22\x24\x9a\x63\xa5\x2f\xb6\xa9\xbd\xa2\x5b\xa2\x18\x16\xa0\x2e\x6f\xea\xa0\x3c\x07\x92\xcb\x97\x1d\xb1\xb0\x8f\x54\xf8\x1d\x22\xd0\xbe\x9a\x04\xc6\x7d\x0e\xf4\x13\xe5\x40\x53\xb9\xcf\x81\xde\xe7\x40\xb7\x5d\xa0\x7d\x0e\xf4\x3e\x07\xfa\xcd\xe6\x40\x3f\x69\xfa\xf3\xee\x92\x9c\x77\x93\xc9\xfc\xa6\xa4\xf3\xbd\x64\xbe\x97\xcc\xf7\xe9\xca\x7e\x6a\xbb\xe2\x82\xee\xeb\x77\x29\xc9\x88\x22\xcd\x06\x3a\x22\xe6\x5a\xe1\x30\x37\x3c\x65\x5a\x14\x9c\x0a\x22\xe5\xb6\x3c\xcd\x37\x1c\x96\x57\xa8\xf1\x47\x14\x28\xb3\x9e\x2c\xc1\xae\xb3\x8a\xd9\xf9\xb6\xdf\x26\xcb\xf3\xc3\xdf\x43\x36\xec\x79\xe0\x9e\x07\x6e\x32\xb5\xd7\x63\x8e\x0e\x0e\xf3\x8b\xda\xa3\x83\x4a\x3b\x23\x9a\x6e\x53\x6c\xa7\x3d\x70\x39\x9e\x93\xb4\x0f\x69\x05\x3e\x29\x42\xfc\xaa\x3f\x09\xcb\xe8\xb8\x04\x82\xf6\x16\xeb\xf0\xeb\x62\xe1\xa3\xda\x27\x9b\x19\xb0\x8b\x8a\x36\x83\xf4\x4d\xd8\xb0\x6b\x57\xf8\x0b\xa9\xc6\xf3\x3a\x18\xc9\xb3\x17\xe3\x79\x1d\xd3\xde\xdb\x54\xf7\xb5\x78\xf6\x56\xc3\x96\x13\xde\x5b\x0d\x5f\xaf\xd5\xf0\xa5\x5c\x01\xcf\x7c\x3c\x9f\x4b\x74\x6c\x1f\xea\xed\x22\xb2\x59\x8a\xf2\x45\xc6\x71\xda\xb2\x9c\x6e\x20\xd1\xb5\x88\xf7\x66\x29\x12\x64\x4a\xa5\x22\x42\xef\x4b\xad\x60\xb8\x3e\x00\xfc\xad\xd6\xcd\x6d\x1d\xe2\x13\x76\xfb\xee\xdf\x5a\x0c\xff\xda\xde\xd9\xc0\x89\xc6\x38\xf5\x05\x2d\x41\x7c\x9b\xe3\x25\x9a\xe1\x07\xe2\xc2\x12\x1f\x70\x46\x53\x5c\x5e\xeb\xd2\x0c\x57\x0d\xe8\x3f\xba\x0d\x08\xc7\xc3\xf1\x15\x90\x64\x1c\x36\x66\x33\x9a\xe1\x9d\x99\x56\xcc\x33\x41\x70\xba\x44\x63\x42\x98\x27\x9b\x9a\xfb\xa4\x61\xcc\x3b\x11\x9c\x5f\x5c\x31\xad\x52\xcf\x6b\x51\x4b\x9f\x31\x50\xaa\x9e\xdf\x6c\xaf\x83\x6e\xaf\x78\xca\xef\xdf\x16\x0b\xda\x07\x4f\xed\xcd\x93\x2f\x6f\x9e\xdc\x07\x4f\xed\x15\xfd\x57\xa6\xe8\xef\x83\xa7\xf6\xc1\x53\x7b\x33\xc8\xea\x69\xef\xcd\x20\x5f\x44\xf0\x54\x2b\x19\x7e\xc3\xf0\xa9\x37\x2e\xcd\xef\x85\x79\xf7\xde\x5e\x98\xdf\x0b\xf3\x5f\xa8\x30\xff\x3a\x56\x78\x2f\xc9\xef\x25\xf9\xbd\x24\xbf\x97\xe4\xf7\x92\xfc\xce\x97\x71\x2f\xc9\xd7\x4b\xf2\xf0\x2f\x57\x9d\xa1\xab\x58\xdf\x51\x9c\xef\x9c\x1f\xd1\xdd\x19\xf8\x81\xa8\xb7\xea\x09\xdc\x4b\xed\x7b\xa9\xfd\x75\x4b\xed\xaf\x66\x42\x5f\x1e\xb2\xfa\x1e\x9b\x7c\x8f\x4d\xbe\xc7\x26\x7f\x62\x6c\x72\xf7\xf5\xbb\x45\xde\x2c\xdb\xdc\x01\x7a\x99\x3d\x5c\x0a\xab\x5c\x1a\x70\xcb\x22\xd8\xa4\x95\xd8\xb3\x4a\xd6\xb9\x2b\x00\xd2\x82\x1e\xd6\xcb\x3d\xa8\xa7\xd0\x9c\x6b\xdd\x8d\x91\xe8\x1d\xc7\xe0\x4c\x60\xcd\x94\x3e\x10\x86\x5c\x72\xc0\x81\xbd\xc6\x0e\xc0\x98\xf2\x4f\x7f\xf8\x4c\xb6\x16\x56\x08\x23\x45\xe7\xe4\x08\x0d\x26\x86\x5b\x24\xfa\x74\x49\xa2\x64\x29\x1a\xcb\x50\x3e\x7c\xc4\xd2\x62\xac\xae\x6f\x5a\x04\xe7\x98\xd7\x0e\x1c\xb3\xcd\x33\x65\x58\xaf\x6b\x1c\xa0\xe9\xc6\x9e\x43\xc1\x41\x9b\x13\x91\xb9\x2f\xa3\x6e\xdd\xcb\x73\x9c\x6a\xc6\x10\x0c\xa1\x48\x2b\x0b\xdf\x87\x3b\x9d\x4a\x1f\x5e\x14\x7d\x6f\xbe\x06\x7c\x3b\xc0\xa3\x03\x1c\xde\x56\xc3\x98\x41\xf4\x9b\x16\xf1\xd2\x3c\x23\x08\x4b\xc9\x13\x8a\x41\x8d\x31\x32\x00\xa2\xca\x59\x1a\xdc\x4b\xae\xeb\x94\x4a\x3c\xce\x48\x6a\xd7\x98\x14\xd1\x4e\x2b\x47\x4e\x25\x1a\x13\xbd\xc4\x9a\x4d\xc5\xab\x3f\x33\x12\x48\xcd\x68\x82\xa1\x90\xea\x48\x08\x33\x03\x59\x21\x41\x1b\xe2\x7c\xab\x42\xb4\x19\xfd\x3e\xe9\x6e\x2f\x52\xef\x45\xea\x4e\x13\xfa\xa2\x44\xea\x57\x14\xa1\xe9\x18\xd2\x8b\x46\x68\x82\x0f\x54\x73\xfe\x91\x37\x6c\xca\xb6\xb6\x9e\x73\x2a\x95\x44\x49\x2e\x15\x9f\x37\x4b\x3e\x1f\x5d\x0f\x3d\xdf\xc1\x29\x67\x13\x3a\xcd\xcd\xdd\xf2\xab\x95\x4d\xfc\x89\x2e\xd4\x94\xe5\x82\xb4\x33\x0c\x79\xbb\xf5\xba\xce\x6a\xf3\x11\x6b\x9c\xbc\x35\xed\xbc\x89\xdb\xae\x7e\xe8\xcf\x75\xe9\x75\x51\x56\x0b\xfb\xb8\xd5\x34\xb5\x7e\x31\xba\xee\xdf\x5c\xde\x5d\x9f\xf6\x4f\x50\x6f\xb1\xc8\xa8\x71\x59\x19\x0a\xa3\x7f\xd7\x93\x32\x65\x46\x3c\x89\x58\x81\xc8\xa0\xff\x82\x8f\x4c\xeb\x83\xe8\x10\x9d\x9e\xdf\xdd\xdc\xf6\xaf\x1b\x1a\xb4\x24\x01\x45\x5a\xc9\x7c\x91\x81\x7c\x74\x9f\x8f\x89\x60\x44\x4b\xf8\x16\x23\xb8\xf0\x9c\x99\x46\xfb\xff\xd5\x3f\xbd\xbb\x1d\x5c\x5e\x8c\xfe\x7a\xd7\xbf\xeb\x9f\x20\x47\x5b\xba\x59\x3d\x2e\x3d\x8a\x74\xc9\xf0\x5c\x6b\xdd\x71\x3d\x94\xdf\x72\x92\x83\x38\x46\xa7\x6c\x4e\x00\xba\x3b\x6a\xd1\x0d\xf8\xbc\xf7\x43\xff\x3c\x6e\x79\x46\x42\xe0\x62\x94\xe1\x31\xc9\xac\x2b\x0f\xbc\x53\xfa\xfc\x04\x10\xcf\xc6\xc7\x97\x9b\x55\xfd\xeb\x5d\xef\x7c\x70\xfb\xcb\xe8\xf2\xfd\xe8\xa6\x7f\xfd\xf3\xe0\xb4\x3f\xb2\x9a\xd4\x69\x4f\xf7\x1b\xf5\x64\x15\x2e\xf4\x5b\x8e\x33\xad\x91\xf3\x89\x83\x32\x46\x8f\x33\xc2\x50\xce\x80\xe2\x8c\x9a\x0f\x5a\x49\x88\xe3\x60\x66\x74\x75\x7e\xf7\x61\x70\x31\xba\xfc\xb9\x7f\x7d\x3d\x38\xeb\x9f\xa0\x1b\x92\x81\x22\xec\x16\x1d\x76\x71\x91\xe5\x53\xca\x10\x9d\x2f\x32\xa2\x57\xc3\x1c\xce\x31\x99\xe1\x07\xca\x45\xa4\xad\xc0\x3a\x02\x2b\x80\xf6\x9d\xc2\x39\x0a\x96\xee\xf2\xe2\xfd\xe0\xc3\x09\xea\xa5\xa9\x9f\x83\x84\x36\x22\xca\x71\xf0\x13\x87\x15\xf8\x89\x04\x9b\x80\x10\xa8\xe8\xfb\x40\x84\xa0\x29\x91\x2f\xee\x70\x88\x0e\x44\x55\x85\x2e\x53\x78\xf5\x8d\x12\xb9\xae\x7a\x21\xa2\xbe\xea\x8b\xeb\xa8\xa8\xfa\x45\x89\x0c\x9a\x0d\x07\x95\x7d\x6c\x6d\x13\x88\xd7\xe7\xd9\x6e\x4c\xcd\xec\xd2\x91\xb3\x0d\x1d\xff\x23\x62\x7a\xff\xdc\x61\x84\x94\x49\x8a\x59\x09\x30\x15\x64\x88\xff\x6a\xaf\xb6\x96\x17\x66\xf0\x65\xdd\x87\x55\xdf\x49\xf0\xc1\x5b\xb8\x09\xc3\xe1\xbe\xa2\x5b\xef\x3a\x94\x6d\x9c\x88\x3c\x27\x0a\x43\x05\x71\xc5\xd1\x94\xa8\x23\x74\xc9\xe0\xd9\x2d\x96\xf7\x07\xc8\x55\x87\x41\x5c\xa0\x42\x78\x7c\x86\xa4\xf2\x37\x62\x34\xec\xae\xd0\xec\x15\xf3\xbd\x62\x5e\xbf\x32\xfb\x08\xb5\x86\x15\xde\xd5\x8d\xda\xc9\xce\xbe\xbb\x8b\x2f\x30\xab\xbb\x60\x93\x92\x5d\x34\xba\x11\xd7\xda\x40\xdf\xee\x65\xf8\xbc\x56\xd0\x9d\x5e\x8d\xa6\x78\xcc\xfe\xde\x33\xff\xb7\xbf\xf7\xf6\xf7\xde\xfe\xde\x7b\x05\x2b\xfc\xe2\x16\xe5\x1a\xee\xfe\xa2\x26\xe5\x75\x0a\xf2\xc6\xd0\x74\x85\x42\xdc\x05\x9c\xee\xd7\x36\x18\x74\x35\xa6\xe4\xaa\x86\x2c\x91\x9c\x61\x61\xaa\xb2\x26\x7c\x3e\xe7\x2c\xb6\x55\x1f\x20\xef\x58\x07\x43\x20\xcc\x6e\x9d\xa5\xb9\xe8\x86\xbe\x0d\x1b\x73\xb0\x2e\xcf\x91\x51\xb4\x53\x11\xc2\x84\xea\xef\xf5\xeb\x27\x94\x33\xf6\xd8\x81\x3b\xc5\x0e\x7c\x1d\x73\x7d\x92\xec\xa3\xdd\xdb\xd7\xdf\x46\xc6\xd1\x1e\x24\x70\x9f\x53\xb3\xcf\xa9\x81\xdf\xf7\x20\x81\xbb\xa3\xd6\xa7\x95\xe9\x79\x4a\x46\xa5\x32\x2a\xfe\xcf\x51\xd9\xe5\x15\x3d\x09\xfd\x5f\xd1\x83\x22\xc9\x08\x5a\xa7\xe9\x2e\x4b\xaf\x5c\xf0\x94\x6c\x51\x7e\x45\x8f\xa8\x75\xe9\x95\xa8\xaf\x57\x2e\xc2\xbb\x65\x32\xa2\x7c\x34\xf0\x27\x16\xe4\x1b\x28\xe6\x4b\xb4\x46\xd5\xd0\xff\xde\x34\xb5\x76\xa1\xbe\xd4\x6a\x05\x05\x83\x7b\x43\x8e\x9a\x76\xb7\x80\x0b\xa9\x19\x35\xdc\x05\xf5\xcf\xfd\x8d\x50\xff\xf8\x69\x60\x64\xda\x5f\x08\x25\xf4\x98\xf8\x2a\xd8\x14\x35\x26\xea\xfe\x6d\xd8\x79\xc2\x11\x3f\x87\xa5\x67\x25\x31\x7d\x71\xd7\xc4\xaa\xa3\xb1\xbf\x2c\x5a\x2e\xd7\x97\x7a\x65\xec\xd1\x5e\x56\xd9\x5e\xf6\x70\x2a\x7b\xd3\xcf\xeb\x99\xf0\xde\xf4\xf3\xa6\x4d\x3f\xc6\x51\x3d\x5a\x60\x41\x98\xaa\x91\xd1\xcb\xd7\x09\xbc\x1e\xe6\xcd\x3b\xa9\x03\x1a\x30\xd2\xa2\xbd\x90\xfd\x55\xf5\x65\xd9\x82\xac\x60\x30\x32\x72\x45\x90\x37\x74\xfc\x8f\xe2\xdf\x81\x12\x10\xfc\x58\xe3\xf0\x5d\x15\x08\x66\x30\xec\xa5\xbe\xbe\x73\x1b\x13\xb6\xab\x6c\x23\x27\x24\x36\x38\x6a\x9b\xe3\xc7\x5c\x4a\x01\x49\x0b\x81\xab\x98\x61\x4d\x5c\x99\xed\xe9\xd0\x89\x61\x45\xfc\xc4\xda\x30\xb3\x2b\xf3\xe9\x19\x7c\xf9\xb6\x32\x91\x1a\x86\xfe\xbc\xe1\x67\x55\x72\x6c\x77\xba\x1d\x71\x50\x93\x5b\xf3\x38\xa3\xe0\x89\x01\xa8\x38\xb8\xcf\x83\x0d\x77\xf9\xd3\x18\xd2\x8b\x9a\xae\xa7\xe7\x16\x20\x2b\x67\xae\xdd\xc4\x2d\x8d\xbe\xdd\x79\xbf\x78\x30\xce\x1a\xba\x7f\xd1\xc0\x9c\x15\x8c\x7b\xbb\x72\x91\x2f\xc6\x97\xbd\xed\xfe\xf9\x38\xf3\x07\xa2\xbe\x3c\xb6\xfc\x81\xa8\xe7\xe2\xc9\x9b\x32\xe2\x95\xcc\xa8\xa8\x11\xf4\x46\xe3\x44\x2a\xfc\xf7\xcd\x4e\xb7\x4b\xbc\xd6\x27\x33\x49\x1b\xac\xe5\x53\xd1\xc3\xa9\x2a\x6e\x0d\x18\x91\x0e\xb8\x4f\x19\xde\xa7\x0c\xef\x53\x86\xf7\x29\xc3\xaf\x2f\x65\xd8\x7d\xfd\x2e\x25\x19\x51\xa4\x51\x6e\x3a\x83\xc7\x2f\x25\x37\x99\xde\x9f\x51\x6a\x32\x1d\x7e\x79\x82\x93\x99\xd7\x5e\x76\xda\xcb\x4e\xbb\x98\xee\x6b\xd5\x5e\x1d\x95\xbf\x06\xed\xb5\x35\x3a\x51\x11\x24\xb6\x36\x36\xc0\x4e\xfb\xd7\xb5\x41\x01\x01\xd2\xa3\x1b\xce\x3a\xc7\xff\x95\x1b\xf6\xdb\x61\x72\xf2\xa9\xf9\xd8\x36\xee\x4d\xb7\xee\x5f\xac\x77\x73\x5f\xcb\xa2\x76\xad\xf6\xce\xd7\x15\x8b\xb3\x77\xbe\xee\x9d\xaf\xaf\xce\xf9\xba\x73\x95\x6a\x65\x45\xfa\x6b\x7b\x35\xaf\x8c\x0a\x77\x17\xbd\xd1\x65\x34\x29\x18\xfc\xed\x94\x2c\x32\xbe\x04\x1b\xcb\x4a\x6b\xb3\xaf\x45\x5f\x13\x1c\x55\xbe\xfc\xdd\xdb\x57\x15\xa1\xfd\xb5\xdf\xff\x6e\xe4\xcf\xa5\xd6\xbc\x16\xb1\xb7\x98\xf7\xab\x10\x74\x8f\xff\x51\x4a\x89\x68\x85\x99\x12\x24\x31\xac\x3f\x06\x43\x56\xff\x24\x80\xcc\xb7\xb7\xe6\x38\x57\x41\xbc\xa1\xd4\x07\x60\x41\x84\x5a\x06\x6f\x92\xf9\x42\x2d\xff\x73\xc8\x68\x81\xac\x4d\xa7\x8c\x0b\xc3\x03\xf5\xc7\x33\xcc\xd2\x4c\x9f\x1f\xe9\xdb\x49\x30\x63\x5c\x81\x70\x02\x33\x48\xd1\x03\xc5\x46\x94\xe9\x5d\x0d\x5a\xf8\xe4\x5b\x9d\xc5\xc8\x9d\xfe\x86\x4e\xe2\x73\x63\x56\xaf\xb9\x45\x3f\x64\x7c\x0c\x55\x16\xf2\xd8\xc4\xa0\x1b\xd8\x3b\x80\xa3\x9d\x7b\x29\xe6\xa1\xb0\xbc\x2f\x27\x6a\xc5\x61\xfb\xa3\x95\xa9\x5b\x6b\xde\x8d\xc0\x0c\x57\xbf\x5a\x4a\xef\x8a\x9f\xd9\x84\x2f\x78\x0c\x43\x2e\x8f\xc3\xfd\x18\x76\xe8\x7e\x2b\x5a\x76\xbf\xb8\x2a\x55\xf0\xa3\x20\x4a\x2c\x47\x58\x29\xcd\x90\x76\x99\x53\x76\x8b\xe5\xfd\x16\x39\x65\xb1\x77\x67\x4d\x4e\x59\xd4\xd7\x2b\xe7\x58\x51\x4e\x59\x3c\xf0\x27\xe7\x58\x2d\x89\xfb\x8b\x4b\x1f\x68\x7b\x54\xf7\xa9\x04\x1b\x2c\xdd\x97\x9a\x56\xb0\x8a\x17\xbf\x9a\x11\x96\xae\x83\x2f\xf1\xe4\xc6\x97\xdb\xfe\x88\xae\x5a\xa3\x2f\xae\x9c\x46\x49\x66\x59\x33\xb7\x37\x52\x56\xa3\x2c\x76\xed\x7a\x54\x4f\x63\x7f\x0f\x76\x63\x5f\x67\x6f\x5f\x67\x6f\x5f\x67\xef\xc9\xeb\xec\xb5\xd3\x59\x5b\x2b\xac\x6d\xb5\xd5\x76\xaa\x6a\xb3\x9e\xfa\x04\x3e\xe7\xf6\xca\x64\x29\x1f\x3d\x56\x23\x37\xcd\x47\x8f\xba\x7f\x13\xce\xe9\x68\xc4\xcf\x91\x8f\xfe\x3b\xd5\x2c\xf7\x6a\xe5\x93\xac\xdb\x97\xaa\x53\xbe\x72\x85\x72\x9f\x49\xbf\x47\x31\xdc\x87\x9a\xec\x70\x71\xf6\xa1\x26\xfb\x50\x93\x2f\x36\xd4\xa4\x59\x3d\xa1\xe9\xd6\x59\x92\x1d\x71\xcb\xbd\x95\x41\xfc\x0a\xa2\x94\x16\xfb\x5b\x20\x99\xd7\x69\x0b\x85\x2c\x1d\x21\x0f\x6f\xae\x39\x0c\xd2\x37\xa1\x32\xd4\xae\xe6\x73\xa8\x0e\x7b\x10\xec\x9d\x82\x60\xbf\xba\x69\xef\xa5\xca\xbd\x54\xb9\x17\x9c\x5a\x4e\x78\x2f\x38\xbd\x5e\xc1\xe9\xa5\xb4\xa1\x2f\x09\x0f\x49\x8b\x58\x51\x56\xd2\xca\x38\x65\x83\x69\x04\xce\x8c\x7c\x91\x71\x9c\xae\x8b\x38\xfa\x35\x10\xdf\x56\xc8\x7d\x41\xbb\xa2\x88\x53\x2e\x89\x7f\xab\x64\x3b\xd3\x80\xee\xf1\x2d\x88\x76\x7a\x9c\x66\xc4\x2d\xa2\x23\xc3\x0e\xdf\xfd\x5b\x8b\x81\x5f\xdb\x3b\x19\x38\xcd\x18\xa7\x0e\x34\xc0\x88\x67\x73\xbc\x44\x33\xfc\x40\xd0\x04\xd3\xcc\xd8\xe7\x68\x8a\xcb\xeb\x5b\x9a\xdb\xaa\x01\xfd\x47\xb7\x01\xe1\x78\x38\x45\x46\xa3\xbe\x2f\x8c\x54\x95\xe0\xcc\xb9\xfb\xe0\x9d\x19\x96\x08\x67\x82\xe0\x74\x89\xc6\x84\xb0\x20\x93\xad\xed\x98\x77\x22\x18\xbf\x78\x78\x66\x48\x37\x2f\x1a\xe5\x0d\x5c\xa3\xb1\x5a\xf4\xce\x15\xcb\x32\x27\xd9\x42\x87\xdc\x46\x71\x94\xdf\xbf\x15\xe6\xf2\x1c\x6a\xe2\x17\xec\x45\xda\x7b\x8a\x7e\x9f\x35\x19\x5f\x8d\xf6\xb1\x57\xd1\xf7\x49\xc6\x7b\xcf\xcf\xde\x80\xb1\x37\x60\xec\x7c\x19\x5f\x93\x01\xe3\x05\x65\x74\x93\xdb\xf4\x24\xc5\x4a\x5e\x8b\xb4\xbe\x17\xd6\xf7\xc2\xfa\x5e\x58\xff\x62\x85\xf5\xd7\xb1\xc2\x7b\x49\x7d\x2f\xa9\xef\x25\xf5\xbd\xa4\xbe\x97\xd4\x77\xbe\x8c\x7b\x49\xbd\x24\xa9\xc3\xbf\x1c\x5a\x40\x57\xb1\xbd\xb5\xb8\xbe\x19\x34\x40\x3b\x37\x9d\xc5\x06\x78\x2b\x92\xf9\x5e\x2a\xdf\x4b\xe5\xaf\x5b\x2a\x7f\x35\x13\xfa\xf2\x12\x82\xf7\x29\xb5\xfb\x94\xda\x7d\x4a\xed\x4b\xa4\xd4\x3a\x5e\xb2\x4a\xc2\x59\x55\x4b\xe7\x67\xcb\x5c\xbe\xa6\x2c\xc9\x72\x10\x55\xf5\xcf\x3f\xe4\x34\x4b\x11\xa8\x48\x5a\xd3\xa5\x9c\x7d\x03\xf4\x04\xa4\x00\xe3\x74\xd5\x1f\x56\x4b\x30\x3f\x57\x58\xdd\xab\x15\x62\x8a\xd1\x6e\x0a\xc3\xb6\xab\x3d\xf5\x25\x70\x37\xa8\xb8\x17\xfd\xe6\x1a\x7a\x45\x75\xf8\x0e\x9c\x58\xa2\x39\x92\x1b\xdf\x13\x57\xe4\xab\xed\xb3\x53\x7d\xbe\x4f\xf6\xa3\xb7\x55\xca\xa0\x3a\xea\x7d\x55\x3e\x14\xec\xda\xbe\x2a\xdf\x13\xce\xdb\x9d\xb3\x35\x33\x77\x34\x6a\x6c\xe1\x6f\x74\xda\x2f\x1e\xec\xd8\x7c\xd2\x5f\x34\xf4\xb1\xf6\x22\xab\xe4\xd6\x1d\xff\xa3\xf6\x9e\x7a\x81\x62\x84\x9d\x2f\xa7\x9d\x94\x25\xdc\xe6\x7a\xfa\x40\xd4\x97\x72\x37\xed\x4b\x13\xee\xcb\xeb\xec\x68\xba\x1b\xdd\x3d\x6f\x76\xb6\xfb\x42\x8c\xfb\x42\x8c\xfb\x42\x8c\xd1\x11\xdc\x17\x62\xdc\x17\x62\x44\xe8\x59\x0a\x31\x76\x96\x19\x77\x50\x92\x71\x1b\x89\xd1\x74\xff\xa5\x08\x8d\xfb\xb2\x8c\x7b\xb9\x71\x77\xd3\xfd\x7d\xc9\x8d\xaf\xd0\x6a\xf1\x2a\xea\x4f\x7a\xab\xc5\x8b\x43\x01\x79\xd6\xde\x1a\x0e\x28\x8c\x35\xf1\x5f\xef\x14\x15\xc8\x6d\xda\x1e\x19\xc8\xfe\xdf\x1e\x19\x68\x8f\x0c\xd4\x30\xeb\x7d\x30\xf3\x1e\x19\x08\xed\xc3\x75\xf7\xe1\xba\xaf\x39\x5c\xb7\xc5\x36\xee\x91\x81\x5a\x8a\x8c\x4f\x84\x0e\xe4\x64\xae\xad\x10\x82\x6a\xc4\xc1\xf5\x28\x41\x9f\xaa\x1a\xd1\xab\x15\xf5\xdc\x58\xf7\x68\x41\x7b\xb4\xa0\x6d\x69\xe7\x55\x28\xa0\xcf\x88\x1a\x54\xc7\x61\xba\xe4\x22\xd7\x30\x97\x6d\x15\xcc\xb7\x81\x20\xe4\x46\xbb\x4f\x4c\xde\xa7\x40\xbc\xfe\x14\x88\x57\x97\x98\xfc\x6a\x34\x95\xbd\x3a\xbf\xcf\x4d\xde\xe7\x26\xef\x8d\x1d\x7b\x63\xc7\xce\x97\xf1\x35\x19\x3b\x5e\x58\x6e\x7f\x42\x24\xa1\xd7\x28\xc1\xef\x05\x78\xf3\xde\x5e\x80\xdf\x0b\xf0\x5f\xa8\x00\xff\x3a\x56\x78\x2f\xbd\xef\xa5\xf7\xbd\xf4\xbe\x97\xde\xf7\xd2\xfb\xce\x97\x71\x2f\xbd\x3f\x1b\xba\x50\x9d\x08\xdf\x19\x61\xa8\xa3\x9b\x2f\x48\x20\x7b\x4b\xd2\xfa\x5e\x52\xdf\x4b\xea\xaf\x5b\x52\x7f\x35\x13\xda\xa3\x0d\xed\xd1\x86\xf6\x68\x43\x7b\xb4\xa1\x8d\x64\xa4\x7f\xb1\xc7\xf2\x5d\x70\x13\xfb\x2b\xfb\xdd\x0f\x19\x1f\xdf\x2e\x17\x44\xff\xf7\x8c\xce\x09\x93\x20\xd1\x52\xb5\x0c\x65\xa2\x86\x95\xaf\xae\xf9\xbb\x9b\xc1\xc5\x87\xf3\x30\x0d\xed\xdd\xc7\xbb\xf3\xdb\xc1\x55\xef\xda\xaf\x8b\x9f\x55\xb8\x16\xf6\xbb\x48\xac\x3b\xe5\xf3\x05\x16\x54\x72\xd6\xff\xac\x4f\xa7\x1e\xda\x25\xc8\x3e\x5c\x6c\x36\xba\xfe\x5f\xc3\x91\x5d\xc4\x7f\x7e\xb8\x8d\xff\x8a\x66\x71\x7e\x1b\xff\xd5\x5f\x39\x9b\xa0\xe1\x32\x3f\x3b\x44\x1f\x6e\x4f\xd0\x07\x08\x52\x11\xe8\x76\x86\x0d\x4b\x3a\xbf\x3d\x41\xe7\x44\x4a\xf8\xa5\xf8\x58\x51\x95\xc1\xdc\x7e\xa0\x0c\x8b\x25\x72\xd3\x37\xb9\xa8\x18\xac\xbf\x6e\x69\xca\x8b\xc7\xfe\x96\x33\x50\x68\x8a\xd5\x3b\xe7\x53\x9a\xe0\x6c\xbb\x45\xec\x5d\x84\x07\xe9\xdd\xe5\xf5\xca\xa5\x08\xdf\xae\xae\x45\xef\xe2\x0c\x32\x63\xdd\x50\x6b\x66\x7e\x41\xa4\xd6\x98\x12\xce\x52\x6b\x11\xd7\xfc\x6c\x19\x88\x29\x7f\xe3\x90\x2b\x9b\x4b\x2d\x3c\xf7\x2e\xce\xd0\x31\xba\xbc\x1e\xb2\x4b\xad\x55\x69\x3e\x4b\xf4\xfd\x6e\xb8\x2e\x95\x88\x71\x85\xe8\x7c\xc1\x85\xc2\x4c\x69\xd1\x06\x18\x9b\x5d\x11\xa3\xa4\x9d\xf2\xf9\x3c\x57\x58\xd1\x07\x52\x59\x54\x66\x94\xc4\x1b\xa2\x06\x29\x18\x9c\x6b\xd6\xd0\x70\xbe\x62\x2e\x0b\xa1\xdb\xd7\x5c\x37\xd6\x2c\x68\x5a\x11\xce\x5d\x13\x58\x08\x1c\xf3\xc7\x77\x54\x91\x79\xf9\xfd\x96\x01\x93\xff\xac\x55\x9b\xf4\x95\x70\xce\xb1\x56\x41\x4d\x7a\xe4\x39\x55\x44\xe0\xec\x23\x5e\xbc\x77\x36\xac\x0d\xe8\xe3\xff\xde\x44\x89\xaa\xef\x7e\xe9\x7d\x0c\x53\x5d\xdf\x5d\x5d\x5f\xde\x5e\xae\xa4\x99\xa8\x85\x2a\xd1\xe8\xc7\x27\xf0\xbf\xe8\x18\xe9\xd6\xfd\xcd\x35\x27\x0a\xeb\x1b\x1d\x7d\x6d\x52\xba\x7c\x0a\x06\x65\x19\xd0\xc8\x42\xd0\x39\xd5\xfb\x6a\xb5\xf8\x6f\xcc\xe5\xe8\x6f\x7f\x4f\x25\xe6\x03\x93\xb4\x09\x72\x87\xc2\x2c\xc5\x22\x45\x7f\x93\xe5\x7c\x66\x30\x1e\x99\x1f\x48\x8a\x0e\xd1\x4c\xa9\x85\x3c\x39\x3e\x7e\x7c\x7c\x3c\xd2\x6f\x1f\x71\x31\x3d\xd6\xff\x38\x24\xec\x68\xa6\xe6\x99\xc9\xdf\xd6\xab\x70\x82\xae\x04\x57\x1c\x04\x08\x24\x89\xa0\x38\x83\x54\xd2\xb1\x39\xed\x7c\x82\x7e\x4d\xb8\x20\x47\xc5\xc6\x58\xc5\xd2\x08\x25\x4e\xf9\x3c\xd6\x2f\xd5\x1c\x9d\xf2\x7e\xa2\x94\x24\x34\xb5\x92\x14\x61\x09\x07\xeb\x83\xb1\x57\xea\xf6\x5c\x1e\x1c\xb1\xce\x22\xbf\x9c\x81\xb0\x81\x53\x82\xf0\x03\xa6\x99\x41\x09\xe0\xc6\x10\x69\xd6\xd9\x24\xb7\x0c\x8c\xd8\x99\x6b\x11\x1b\xa2\x13\x41\x91\x74\xaf\x2e\xf4\x84\x13\x9e\xa1\x71\x3e\x99\x10\x11\xfa\xaa\x0e\xb4\x34\x42\x25\x12\x24\xe1\xf3\x39\x61\xc6\x54\xa9\x1b\x82\x2f\x61\xc5\xec\x68\x8f\x86\x0c\xf6\x5f\x8b\x29\x40\x01\x29\x87\x83\xcd\x88\x56\x57\xd8\xd2\x74\x33\xce\x27\x91\x2f\x0c\x70\x11\x70\x8a\xa8\x1a\xb2\x5e\xa6\x15\xdb\x39\x57\x24\x0c\xb3\x04\xc3\x79\xb4\xe0\xc0\x10\x04\x59\x64\x38\x71\x49\xbc\x19\x4f\x70\x86\x26\x34\x23\x72\x29\x15\x99\x87\x0d\x7c\x0d\xba\x96\x5e\x33\x2a\x51\xca\x1f\x59\xc6\xb1\x9d\x47\xf9\xb3\x6f\x62\xde\xd2\x77\xd9\xf2\x7d\x21\xb8\x80\xff\xf9\x89\xb2\x74\xb3\x33\x78\x77\xf1\xd3\xc5\xe5\xa7\xe8\x18\xde\xdd\xf4\xaf\xc3\xbf\x6f\x7e\xb9\xb9\xed\x7f\x5c\x79\x0e\xcb\xad\x14\x94\x05\xc3\x03\x19\xfc\x04\xdd\x98\x45\xe0\x02\x69\xad\xaa\x61\x52\x1f\x2d\x29\x15\x3f\xf0\x94\x6c\x36\xb7\x8f\xbd\x8b\xbb\x5e\xc4\x51\x6e\x4e\x7f\xec\x9f\xdd\x9d\x47\x02\x9e\x9b\x5f\xf0\xcb\x75\xdf\x88\x6f\xe1\x6f\xa7\x3f\x0e\xce\xcf\x46\x35\x02\xdf\xbb\xeb\xfe\xe9\xe5\xcf\xfd\xeb\x42\x36\xab\x5d\xa2\xd2\x60\xca\xcc\xea\xd6\x30\xa5\x19\x4f\xd1\x78\x19\xe6\x99\x16\xd8\x08\x8f\x58\xa2\x0c\xfc\x31\x05\x46\x87\x69\xf5\x04\x78\x93\x03\x8b\x28\xbe\xd0\x02\xff\x81\x7d\x07\xa0\x1d\x8c\x72\x84\x55\x8c\x15\x11\x36\xac\x7b\xc7\x2c\x50\x34\x0c\xc8\x83\x5f\x38\xad\x0a\x49\xfd\x62\xae\x0f\xb5\xa0\xd3\x29\x28\xfe\xa5\xa1\x9a\xd6\xec\xa7\xb0\xbc\xf0\x9d\xd9\xff\x85\xe0\x70\xce\x75\xb7\xd6\x62\xe4\xb5\x0a\xf3\xa1\x41\xa6\x8c\x5a\x14\x18\x14\x86\x9a\xa1\xb9\xcd\xd2\x8b\xd0\xb8\x5e\xe6\x3c\x16\x81\xd1\xc0\xb6\xa4\xb1\x57\x2c\x04\x79\xa0\x3c\x0f\x3e\xb5\x88\x25\xd1\x8e\xd7\x36\x5f\x2c\x00\x2c\x9b\x51\x6a\x4a\xcd\x78\xf2\xa8\x6d\x41\xb3\xb0\x07\x68\x61\x22\xf8\xbc\xa6\x8d\xf8\x98\x0c\x2e\x6f\x94\xc0\x8a\x4c\x97\x67\x96\x65\x6c\x7e\x3c\xce\x2e\x3f\x5d\x9c\x5f\xf6\xce\x46\xfd\xde\x87\xf8\xc4\xfb\x27\x37\xb7\xd7\xfd\xde\xc7\xf8\xd1\xe8\xe2\xf2\x76\xe4\xde\x58\x49\xf2\x0d\x1d\x54\xef\xe9\xf8\xc5\x13\xa4\x59\x2e\xb0\x46\x07\x01\x17\xf0\xc7\x31\x99\x70\x61\xf8\xfc\xdc\xb9\x2f\xe1\x46\x41\x7e\x6d\x49\x6a\x94\xf7\x78\x16\x27\xa0\xd9\xd6\x35\x69\xac\x56\x4a\x10\x3c\x87\x7b\x02\x33\xd4\x67\xe9\xe1\xe5\xe4\xf0\xc6\xfc\x38\xc7\xe2\x9e\x08\xff\xe9\xa3\xa0\x4a\x11\x30\xff\x53\xeb\x19\x00\xcd\x1b\x86\xac\x2f\x32\x08\xaf\x2f\x3a\x38\x42\xd7\x9a\xef\xeb\xf7\xfd\xa5\xa6\x89\x3d\x25\x0a\xd3\x4c\xda\xc1\x46\xeb\x7a\x82\xce\xb1\x98\x16\x7a\xf4\xd7\x7c\x32\x31\x8d\x7d\x63\x86\xa1\xef\xb0\x68\x16\x35\xbc\x57\x93\x86\xbb\x17\xa1\x3f\xfb\xb2\x97\xfe\xaa\x54\x75\xb7\xd8\x8e\xa6\xee\xae\x60\xc5\x2f\x2f\x46\xfd\xff\x1a\x44\x9a\x90\x7d\x52\x43\x6b\x30\x71\xf3\x78\xf5\x25\x53\xdf\x76\x95\x9c\xe2\x17\x6b\xc8\xc9\x64\xe1\xe8\x9d\x9f\x68\xdd\xaa\x86\x96\xc8\x67\xaa\xcc\xc6\x84\xe3\x2e\x91\x50\xd1\x0c\x98\x47\xf0\x62\x41\xb0\x90\x75\xbb\x1d\x8b\x81\x0d\x7b\x6f\x7a\x0a\xfb\xb0\x9b\xec\xfa\x39\x40\x9c\x65\xcb\x50\x88\x28\x51\x64\x0b\x1a\x30\x6d\x55\x28\xe0\x0a\xe0\x7f\x2e\x2d\xd4\xce\x47\x2a\xb5\x8a\x64\x7e\xfc\xc1\x62\x00\x6d\x46\x10\xef\x7b\x83\xf3\x92\x70\x31\x3a\xeb\xbf\xef\xdd\x9d\xaf\x56\xf3\xa3\xef\xca\x5b\x8c\x0e\x91\x7e\x1e\xfb\xce\xe8\xc4\xdc\x19\x0e\xc9\xc8\x28\x70\x84\x69\xf1\xd3\x25\xcd\x18\x7b\x53\x4a\x16\x19\x5f\xce\x09\x03\xf3\x7d\x74\x13\xea\xf5\x9c\x60\x6a\xaf\x96\x60\xb0\x27\x5a\x66\xb1\x96\x45\xb8\xc6\x0e\x1d\x7c\x12\x49\xfd\xcd\x1b\xa3\x27\x95\x58\xf7\x95\xb1\x7e\xdb\xff\xdc\x28\xac\x36\x3c\x63\xbd\xd3\xdb\xc1\xcf\x91\xcd\xa1\x77\x7d\xfa\xe3\xe0\xe7\x3a\xa9\x66\xf4\xa1\x7f\xd1\xbf\xee\xdd\xae\x11\x4e\x4a\x4d\xd6\x09\x27\x52\x0f\xb8\xec\xfd\xa0\xd2\x47\x05\xe8\xb3\x23\x78\x86\xa8\x92\xe8\x81\x4a\x3a\xa6\x80\x58\x65\x3d\x09\x77\x03\xe0\xac\x90\x26\x45\xd5\xd2\x89\x2f\xa6\xdf\x78\x1f\x35\x27\xb5\xed\x1b\x25\x3b\xf4\x2f\x24\x5a\x25\x33\x9b\xe3\x26\x7d\x82\x7a\x22\x99\xd1\x07\x50\xda\x82\xcf\x98\x16\xa4\xd9\x94\x08\x33\x1c\xb0\x9e\x86\x63\x09\x9e\xeb\x51\x85\xc2\x4a\xb1\x6a\x5e\x68\x9d\x12\xa6\x15\xff\xb0\x13\x23\x48\x09\xc2\xbe\xd2\x32\xd7\x22\xa3\x09\x55\xd9\x12\x25\x60\xb1\x49\xb5\x98\x3b\xc7\x0c\x4f\xad\x70\x00\x6a\x4e\x89\x24\xfe\x6a\x60\xbd\x2e\x27\xd6\x34\x77\x4b\xc9\x86\xc7\xec\xee\xe2\xac\xff\x7e\x70\x11\x93\xc0\x8f\x83\x0f\x91\x08\xfb\xb1\x7f\x36\xb8\x8b\x6e\x73\x2d\xc9\xae\x96\xeb\xcb\xcd\xd6\x1c\x45\xff\xd2\x09\x3a\x33\x9f\x9e\xe8\xc5\xad\xc1\x2c\xf3\xca\x6f\x69\x1d\xae\x5d\x58\x8e\xfb\x47\x9f\x29\x51\x6b\x57\x6c\x6b\x30\xb1\x3e\x84\xc8\x62\x52\xef\x6a\xac\xf4\x7d\x51\x76\x0a\x55\x5d\xb1\xd6\x91\xa0\x3b\x39\x2a\xec\x28\xa1\x0f\x12\x8c\x06\x4d\x26\x9b\x1a\xb3\x74\xc1\xb0\x7f\x06\x17\xd3\x3c\x97\xca\xb8\x02\x80\x38\xd1\xfd\x5f\xa4\x5e\x50\x70\x15\x1c\xa1\x1b\x42\x86\xcc\x59\x0f\xa6\x54\xcd\xf2\xf1\x51\xc2\xe7\xc7\x05\x60\xde\x31\x5e\xd0\x39\xd6\x92\x34\x11\xcb\xe3\x71\xc6\xc7\xc7\x73\x2c\x15\x11\xc7\x8b\xfb\x29\x78\xc1\x9d\x3b\xe4\xd8\x37\x3b\xe5\x7f\x38\xff\xd3\xb7\x87\xe7\x7f\xf9\xf6\x5d\xd5\x1e\xd4\xb4\xff\x7d\x96\xe0\x85\xcc\x33\x1b\x35\x23\xc2\xb5\x71\x47\x3e\x27\xeb\xf6\xfb\x22\xde\xae\xed\xf4\xd7\xd3\xab\xbb\xc8\x3e\x1b\xff\xf9\xb1\xff\xf1\xf2\xfa\x97\x88\x53\xde\x5e\x5e\xf7\x3e\x44\x0c\xb5\x7f\xf5\x63\xff\x63\xff\xba\x77\x3e\x72\x0f\x3b\x69\xbf\xa5\x35\xfa\x89\xf1\x47\x16\x2f\x8d\x74\x1c\xb0\xd2\xd3\x09\x7a\xcf\x05\xfa\xc9\xef\xe4\xe1\x18\x4b\xb8\x62\xdc\x9d\x25\x0f\xd0\x82\xa7\xc0\x78\x11\x59\xcc\xc8\x9c\x08\x9c\x59\x9b\x81\x54\x5c\xe0\xa9\xb9\xe9\x65\x22\xb0\x4a\x66\x48\x2e\x70\x42\x0e\x50\x02\xd4\x30\x3d\x80\x4d\x01\x55\x8b\x4f\x65\x79\x5f\x72\xa6\xe8\x9c\x38\x15\xdc\xfe\x79\x6b\x36\x63\x83\xcd\xb9\xbc\xfd\x31\x16\xf6\xde\x9f\xff\x72\xdb\x1f\xdd\x9c\xfd\xb4\x72\x3d\xcd\x67\xd1\xc8\x6e\x20\x80\xe0\x94\x67\xf9\x9c\x85\xff\xde\x7c\x6c\x83\x8b\xdb\xfe\x87\xf2\xe8\x2e\x7b\xb7\x31\x65\x5c\xc7\x41\x2e\xef\x7e\xb8\xbc\x3c\xef\x47\x2e\x9d\x77\x67\xbd\xdb\xfe\xed\xe0\x63\x44\x3f\x67\x77\xd7\x06\x86\x6f\xd5\x34\xdd\x08\x6a\x26\xaa\xa7\x15\x4e\x73\xd7\xac\xb0\x15\x27\xea\xd9\xa0\x52\x73\x96\x0f\x03\xa0\x16\x13\xce\x01\x56\x9d\x43\x6f\x52\x4d\xcc\x48\x6b\xd9\xa1\x8a\xb7\x09\x35\xb3\xe3\x95\x1b\xbd\x8a\x2b\xdf\xfa\x21\x18\x6c\x4a\xa3\x6c\xe3\x2c\xe3\x8f\x26\x9c\x6f\x4e\xf5\xad\x6c\x61\xbb\xf4\x2b\x12\x25\xb9\x10\x84\xa9\x6c\x79\x54\xc3\xf1\xe2\x6d\x21\x89\x20\xea\x23\xcf\x99\xda\x9c\xe4\x7a\x17\x11\xdf\xe9\x5f\xfc\x3c\xfa\xb9\x17\x53\xe0\xe0\x7c\x35\xab\x09\x9b\xa8\xb9\x8a\x7b\x17\xbf\xf8\x4b\x18\x82\x3e\x0f\xbc\x86\x6a\x64\xd7\x24\xa3\x5a\xec\x4d\xb0\xd6\x5e\x33\x90\x68\x10\xa1\x60\x72\x98\xeb\xc9\x41\x90\xd9\xc2\x78\x4f\x0c\x7f\x32\x83\x3c\x71\xff\x28\xb5\x27\x61\x5d\xc0\x9a\xea\x62\x6a\xa1\x1d\xab\x55\x33\x44\xd8\x03\x15\x1c\x00\x56\xd1\x03\x16\x54\x4b\xe3\xa6\x65\x3d\xd7\x13\xf8\xdf\x6e\x6d\x82\x61\xb4\xc4\xb8\x6e\xb8\x50\x67\x3e\x98\x6f\x33\x6b\x48\x5d\x50\x5b\x35\x9c\xad\xde\xd0\x51\xfd\xb6\x66\x73\xb6\x0c\xfa\x8b\x27\xfc\x5b\x76\x46\x71\xa6\x19\xc0\xee\xe4\xc5\xde\xc5\xcd\x20\x96\x1f\x63\x35\x23\xe0\xcb\x1b\xcb\x8b\x60\xa8\x34\x23\x77\xca\xc4\xcd\x5f\xcf\x8d\x76\x01\x28\xbc\xe6\xdc\x06\x8a\x85\x85\x56\x30\xd2\xc4\x02\x0b\x59\xfa\x42\x22\x80\xd0\x2a\x02\x26\xf4\x9d\x05\xe1\x08\x0f\x9c\xa6\x43\x46\x3e\x2f\x08\x93\xf4\x01\x20\x78\xe1\x99\x0f\x8b\x93\x47\x68\x30\x01\x96\xa0\x5f\x67\x28\x67\x32\x5f\x2c\xcc\x1e\xd8\x41\x1e\x68\x51\xb6\x40\x77\x08\xcc\x47\x8c\xb8\x60\x87\x62\xf0\x43\xf6\x89\x20\xdb\x06\x3c\x9a\x70\xcd\x80\xf4\x2e\xda\xf6\x4e\x10\x66\x92\x1e\x20\xad\xb0\x94\xf6\xf4\x16\xcb\xfb\x8a\x19\x7c\xc0\xa4\xc2\x2c\x21\xa7\x19\x96\x72\x53\xca\x36\xea\xf6\x41\x7c\xf9\x5d\x5f\xdf\x5d\xdd\x0e\x7e\x58\xc3\x70\xca\x1f\x57\x43\x63\x93\x2c\x77\x9e\xa2\xb1\xe0\x38\x45\xfa\x24\x4f\xb9\xf1\x4a\x59\x19\xb4\x80\x45\x36\x61\xe6\x3e\x36\x27\x82\x64\x2e\xa2\x63\xad\xca\x1d\x5a\xb5\xa9\x5d\x08\x94\xe8\x95\x40\x81\xf6\xed\x2e\x20\x70\x72\x99\x6a\x11\xd6\xd0\xb2\xc8\xb0\x9a\x70\x31\x37\x0c\x27\x9a\xb4\x69\x7c\x75\xa3\x94\x29\x22\x44\xbe\x50\xd4\xe1\x5c\x97\x05\x26\x28\x53\xce\xa7\x1f\x89\x94\x78\x4a\xb6\xf1\x85\xd6\xc9\xb1\x37\x3f\x87\x7f\x82\xaf\xb3\x8d\x18\x1a\x8d\xd0\x05\x51\x3a\x7a\xba\x64\xef\x31\xcd\x72\x41\xae\x78\x46\x93\x0d\x63\x37\xde\xf7\x06\xe7\xa3\xc1\x47\xad\x4f\xf6\x6e\xfb\xe7\xd1\xad\x06\xcf\x7a\xef\x6f\xfb\xd7\x16\x48\xb8\xf7\xc3\x79\x7f\x74\x71\x79\xd6\xbf\x19\x9d\x5e\x7e\xbc\x3a\xef\xaf\x09\x89\x68\x6c\xbc\x6a\xe8\x2b\xbf\x7a\x52\xf9\x05\x76\x58\xe4\x46\x5d\x77\xa6\x1b\x48\x62\xc0\x34\x03\x7f\x2c\x37\x7e\x59\x8c\x18\x4f\x0d\x9c\x8b\x74\x86\x02\x8f\xf0\x8b\x06\xea\xab\x2c\x43\x38\x57\x7c\x8e\xc1\x81\x90\x2d\x87\x0c\x8f\xf5\x29\xc7\x59\x56\xc8\x11\x9a\xc5\x30\x7d\xda\x75\x63\x06\xbe\x3a\xc9\x88\xe6\x2c\x8b\x20\xf7\xc4\x9a\xb0\x27\x94\x41\xd0\xd6\x1c\x8b\x7b\x57\x8b\xcb\x47\xf4\xfa\x43\x21\x11\x96\x43\x66\x60\x66\xec\xc5\xd9\x62\x85\x4f\x5a\xbd\xd5\xb8\x3a\x73\x7c\x4f\xf4\xaa\xcc\xf3\x64\x86\x16\x82\x4f\x05\x91\xd2\x9a\x39\x13\xcc\x8c\x2f\xdc\xbe\xae\x39\xe2\x90\x31\xae\x97\xc2\x59\x53\x53\xb2\x20\x2c\x25\x2c\xa1\x26\xcb\x04\xdc\xc8\xde\xca\x36\x15\x78\x31\x43\x92\x83\xff\x15\x96\x1d\x4c\x29\xe6\x23\xc7\x54\x2d\xb0\x0e\x3c\x0e\x8d\xa1\x22\xd7\x7c\xe2\x12\x44\x16\xb3\xca\xf0\xb1\xe3\xcb\xce\x03\x60\x4c\x52\xf3\x45\x46\x94\x01\x32\x87\x25\x87\xcd\xd0\x6b\x1d\xed\x87\xde\xa6\xba\x4d\xd0\x77\x87\x1b\x33\x96\x76\x44\x47\x35\x46\x56\x7b\xa4\xd0\x8f\x98\xa5\x99\x6e\xc5\x99\xd3\xe3\xb3\x08\x51\xcd\x3d\x4d\x35\xee\x34\x6e\x23\xd7\x27\x38\x97\x9d\x04\xfb\xd5\xa9\x41\xc6\x40\x75\x58\xc4\x27\x00\x79\xdb\xbc\x20\x58\xdd\x85\x66\x91\x38\xe3\x76\x95\xcc\xeb\xb9\x29\xce\x83\x60\x34\x0d\xc6\x90\x85\xa0\x2c\xa1\x0b\x9c\x6d\xa4\x86\x94\xe2\x3a\x6d\xb8\xe4\xd7\x74\xa2\xc9\xe7\x9b\x8a\x07\x51\x11\x31\x87\x7c\x39\x3b\x4c\xbf\x85\x1d\x8c\x1a\x36\x40\x96\xc8\x22\xb0\x01\x0b\x9e\x1b\xd7\x10\xac\x0b\x49\x6b\x8e\xea\x51\xdd\x76\xeb\x93\x81\xe3\x58\xba\x0d\x36\xdb\x04\xa1\x34\xad\x5f\xa9\x15\xdb\xbb\x89\x82\xc2\xd9\x55\x7d\x9b\x75\x3b\x10\x3c\xfc\xe7\x2a\xda\xf9\x88\x17\x9a\x66\x2c\xbc\x3a\x2e\xe6\x68\xe5\x75\x5b\xb2\xc9\x85\x72\x04\x6e\x5c\x1f\x62\xdc\x7e\x37\x8a\x25\xb4\xb1\x38\xd5\x4e\x22\x77\x76\x90\xf2\x68\x69\x7c\x92\x2b\x7d\x3c\x31\x38\xc4\xd1\xd7\xe4\x68\x7a\x84\x1c\x10\xfe\x01\xea\x5d\x5d\xf5\x2f\xce\x0e\x10\x51\xc9\x37\x2e\x58\xcc\xc6\xce\x0c\x99\xe2\x56\x5a\x59\xa2\x19\x7f\x04\xde\x48\xc4\x94\x44\x73\x76\x81\x36\x00\xc4\x35\xa5\x52\x09\x1b\xee\xc3\xd2\xb0\x0c\x04\x9d\x97\x25\x3e\x43\x21\xb9\x9a\x6d\x43\x1a\x58\xca\x7c\xae\xd5\xaa\x11\xc5\xf3\x91\xe0\xd9\x36\x4c\xe1\x0c\xa6\x02\x9a\x9b\xcf\x16\xa5\x78\x8e\x74\xb3\x36\x2a\xc1\x7b\xbf\xbc\x48\xa7\x05\x23\xcd\x97\xf5\xbd\x19\xdc\x5b\xce\x10\x6e\x43\xa3\xa8\xf3\xc6\x43\x36\x69\x03\xab\x28\x2c\x98\x23\x6b\x34\x1e\xe1\x24\xd1\xda\xdf\x8e\x27\x15\xd4\x16\x71\xd6\x69\xdb\xd1\x93\x4d\x73\x1d\x9d\xbb\x61\x2e\x34\x07\x83\x28\xcc\x6a\x59\x80\x9a\x7e\xc7\xcb\x4a\xaf\xae\xfa\xc7\x9d\xf4\xda\xbd\xb9\x84\x25\x81\x9d\x94\xa6\x7a\x88\x9a\x11\x8b\x62\x17\x76\xe9\x62\xab\x75\xc3\x4b\x9e\x8b\x3a\x46\x37\x64\x67\x64\x21\x88\x96\xf4\xcb\xb6\x7c\x4f\xd3\xd7\x31\x25\xee\xe9\x7a\x4f\xd7\x6f\x9e\xae\x4f\x4d\xc5\x1f\xe7\xb6\x08\x2a\x6a\x6c\x43\xe8\x75\xad\xac\x6a\x09\x3d\xf9\xfd\x7e\x6a\x2e\xf6\xba\x42\x25\x31\x15\xb9\x3b\x98\xb2\x4a\x89\x26\xb3\x91\x50\x6f\x18\x2e\xdc\xdf\x72\xae\xb0\xfc\xe6\x68\xc8\xb4\xf4\x70\x4f\x96\xc6\xe4\xa5\xef\xe7\x3f\x6a\x21\xf4\x50\x12\x26\x21\xe4\xf6\x8f\xc6\x45\xa2\xf7\xd6\x99\x0c\x8d\x4e\x66\x2a\x43\xc5\x35\x54\x20\x4c\xd2\x36\x6a\xc5\x83\x22\x08\xb5\x28\xbc\xe2\x9e\x99\xe1\x4f\x89\x82\x34\x35\x45\x15\x28\x0b\xa9\x29\x3d\x55\x19\xfa\x5a\xbb\xb0\xa1\x0a\xc1\xc1\x56\x9d\xe6\xdb\x71\x3c\x59\x6d\x63\x2d\x4b\xf0\x62\xf2\x8d\x8d\x3b\x3e\x76\x06\x93\x44\xf0\x4a\x3d\x27\x2c\x91\xd9\xe9\xb1\x39\x07\xce\x87\x48\xd8\xd1\x23\xbd\xa7\x0b\x92\x52\x0c\x51\xc8\xfa\xaf\x63\x3d\xaf\x3f\x9c\x5e\x5f\x5e\x8c\x8a\xdc\x81\xff\x1c\xb2\x5e\x26\xb9\x33\x72\x49\xc4\x38\xf3\x21\xcf\x0b\x41\x9c\x2c\x64\xe7\x02\x96\xaf\xc2\xbc\x3f\x64\x4d\x23\x48\x79\x22\x8f\xf0\xa3\x3c\xc2\x73\xfc\x77\xce\xc0\x9d\xd9\x83\x7f\x9e\x66\x3c\x4f\x3f\x61\x95\xcc\x8e\xc1\xcb\xa8\x8e\xc9\x03\x61\xca\xb8\x0a\xf4\x72\xa5\x90\x00\x25\x21\x62\xfa\x0f\x7a\xcc\x45\x1a\x83\xd4\x2a\x5c\x42\x16\x0a\xfd\xbf\x82\x8c\x39\x57\xf5\xdc\x99\x4f\x26\x92\x74\xe2\xc4\x85\x76\x72\x73\x89\xfe\xf2\xe7\x6f\xbf\xd3\x24\xb4\xc9\x1a\x0f\x6e\x2e\x47\xfa\xfb\x3f\x9c\xd9\xef\x65\x07\xce\x7a\x69\x2c\xf5\xd6\xdd\x67\x56\xc3\x04\x2f\xe7\x0c\xd8\xbe\x30\x45\xbe\x39\xc2\x86\x1c\x8a\x7d\xac\xe3\x6e\x67\x26\x55\x74\xab\x3c\x85\x2d\xae\xb3\x0f\x19\x1f\x83\x41\x24\x8f\x8a\xcc\xac\xf0\xb2\x77\x75\x6d\x95\x2f\x26\x2a\x17\x19\x5e\x56\x7a\x58\xb7\xec\x17\x9a\x3b\x2d\x70\x42\x8a\x1c\x57\x17\x10\x93\xf0\xf9\x1c\x82\xb4\x9c\xf5\x3a\xa5\x13\x88\xd6\x52\xfa\xb2\x43\x63\xa2\x1e\x21\x36\xd0\xfd\xea\x2f\x69\x67\x89\xd4\xac\x0c\xd8\xe5\x50\x2f\x72\x9a\x83\x47\x63\xf8\xee\x00\x0d\xdf\xa5\xe4\x81\x64\x7c\xa1\x4f\xb3\xfe\x81\xa8\xa4\x6e\x13\xfb\x73\x4c\xb3\x0b\xae\x7c\xb8\xd9\x36\xfb\x29\x48\x42\x17\x54\x9f\xae\x11\xd1\xed\x3e\x69\x12\x4a\xfd\x01\xbb\x9d\x11\x8f\xc5\x01\x63\x40\x38\x4d\x35\x11\x43\xc5\x1d\x37\xbc\xc2\xb6\xcc\x82\xa9\x47\x95\x24\xba\x0b\x2c\x5a\xab\x84\x1e\xc3\x36\xe3\x58\xbe\xda\x1d\xf0\x16\x87\x9d\x9e\xa4\x7a\x7f\x69\xc2\x85\x07\xee\xf6\x1d\x17\xd5\x4f\x56\xd2\xbf\x2d\xe6\x14\x64\xc1\x5a\x53\x5d\xa3\x69\xa3\x7c\x00\xf5\x5a\xb4\x1b\x67\xbc\x32\x37\xfa\xbb\x95\x43\x93\x21\x0c\x4d\x12\xd6\x64\x03\xb5\xda\xc6\x6f\x97\x43\xc6\xc9\xda\x11\x27\x19\x97\xb9\x68\xe9\x8c\x8e\x07\x7d\x6a\x3f\x5d\x35\xee\x7e\x68\x85\xc8\x33\x25\x3b\x19\x3a\x6a\x16\xbe\x94\x6f\x6c\xd8\x84\xb2\x92\xb3\x7d\xfb\x00\x51\xf0\xc2\xe8\x35\xc0\x59\x11\xdc\xce\x52\x54\x48\x89\x43\x56\xd8\xb2\x24\x7a\x24\x19\x98\xbf\x13\x3e\x5f\x80\x04\x64\x87\x6b\x5b\xd2\x17\xb8\xc2\x8a\x1c\x20\x9e\x2b\xdd\x98\x09\x1b\x71\x77\x9c\x8d\x49\x09\x2a\x80\x83\x4c\x6e\xfd\xb3\x1e\xff\xc4\xd0\xba\x61\x85\x94\xa1\x0f\x44\x41\x2b\x80\x2f\x15\x4e\xd0\x54\x0c\x5d\x79\x94\x4e\x2b\xdb\xd6\xf9\x44\xd9\x99\x74\xd8\xf9\x22\xb7\xe7\x87\x8c\x8f\x57\xee\xfb\x25\x34\x8e\xee\xae\x07\xce\x79\x50\xd8\x55\x03\x80\x8c\x75\xd4\x49\x84\x88\x02\x6d\xd7\x1c\xfc\x38\x13\x68\x35\x61\x42\x1e\x0e\x65\x26\x2b\x0a\x72\xd7\xca\xe3\xb4\x16\xf7\x75\x63\x04\xfb\xe7\xe8\xed\x58\x9f\xcd\x78\xe7\x55\x8b\xfb\xba\xed\x8f\x2d\xf5\x4f\x3d\x19\x38\x1a\x6a\x46\xa8\x40\xad\xa6\x65\xc8\x79\xd4\x7e\x4e\x9a\x60\x0a\x8a\x5e\x1d\xe1\x88\x1f\xed\xc1\x37\x71\xf3\x46\x12\x09\x74\xf2\xb5\x5c\xd6\xb2\x95\x91\x61\x45\xdb\x0f\xb0\x90\xb7\x0d\x6f\xf3\x7c\xcb\x04\x05\xc8\x4a\xd5\xdd\xa3\x21\x2b\x0d\xc2\xfa\x97\x24\x02\xda\x87\x5f\x28\x43\xd1\x95\x74\x80\x26\xf4\xb3\x6d\xb4\xf0\x3b\xbb\x57\x03\x43\x44\x83\x9f\x63\x86\xab\x67\xa2\xc3\xb5\x7d\x05\xdf\xaf\xb4\xbb\x73\xa9\xb4\xd4\xa3\x25\x47\x41\xb4\x7c\x4f\x52\x04\xdd\x7a\x2f\xf8\xda\x2b\x5b\x61\xa1\x17\x05\x77\xd2\x77\x0a\xa8\xba\x14\x2b\x72\xa8\xe8\xda\x18\x59\x1b\x46\x01\x01\x17\x58\x05\x19\xa3\x05\xe7\x1f\x93\x29\x66\xce\x65\xda\x30\x5c\x77\xe5\x6c\xc1\x6a\xb4\x04\x89\x21\x82\x08\xe4\x1b\x88\x0e\x89\xc6\x21\x17\xb0\x9e\x2b\xc7\x61\xad\x52\xaf\x61\xd9\x1e\xb1\x37\x92\x35\x0c\x36\x5f\xa4\xaf\x69\xb0\x19\x96\x0a\xd9\x31\x35\x69\x72\x81\x84\xbd\x83\x54\xf7\x55\x45\x02\x43\xd5\xa8\xad\x3d\x4c\x93\x50\xac\x04\x10\xa5\xa8\xad\x60\x97\x4b\x62\x13\x89\xe6\x44\x4c\x9d\x20\x6a\xaa\x8b\xf8\xb3\x6d\xcb\x8c\x38\x2e\x1f\x32\x13\x70\x9e\x57\x9b\x3e\x42\x3d\x56\x49\xa9\x74\xf6\xd2\x68\xbd\xcc\x9d\x82\xb3\x47\xbc\x94\x68\x21\x4c\xf6\x91\xf1\xa8\xbb\xc9\x83\x23\x2b\xfe\xc8\x5b\x6a\x94\x0b\x69\x80\x22\xe2\x2d\x8c\xd9\x41\xd1\xcc\xf6\xdc\xae\xa5\x4e\x52\xf2\xf6\xd6\xd5\xb5\xf4\xaa\x5e\x2d\xab\xab\x08\xd9\x45\x2a\x72\x18\xaa\x6e\xf1\x8e\x40\xe6\xb5\x5a\x4f\x3f\xf6\x14\x37\x09\xa2\x60\xe5\x3c\xc7\x63\x92\x6d\xed\xd0\xdd\xc8\xe2\x04\x5d\x5b\x24\x2a\xc5\x51\x4a\x8c\xc7\x1b\x2a\xc2\x8b\x32\x6b\x73\x76\x5a\x91\xd7\xf9\xbf\x57\xcd\x33\x2a\x8e\xb3\xc5\x44\x1d\xb4\xda\x26\x53\x6d\x02\x5c\x0b\xaf\x90\x00\x98\xac\x4e\xd7\x0f\xaf\x92\xb2\x79\x6b\xb3\x81\x04\xf8\x68\x0d\xe3\xd8\x1a\x20\x6d\xed\x54\x36\x8e\xe9\x6e\x09\x3c\x3c\x98\x20\xc6\x19\x41\x54\x16\x2f\xab\x38\xe4\xc7\x67\x44\x69\x71\xd7\x18\x12\xaa\xe5\xde\x9e\xda\x6a\x50\xc4\xaa\x7b\x3d\xd7\x85\xd3\x32\xa2\x95\x2e\x2c\x96\x80\xa8\x60\x78\x5a\x2c\x1f\xad\x1d\xe7\xce\x85\xd7\x5b\x07\x98\x11\x78\xa3\x14\x47\x20\x92\x95\x06\x87\x0c\xec\x84\x7d\xc9\x7e\x64\xb3\x82\x86\xcc\x6b\xe9\x40\x88\x54\xa2\x39\x5e\x40\x2c\x2b\xe3\xaa\xf8\xca\x64\xb9\x29\xbf\x85\x07\x4e\xa8\x95\x06\xb6\xb4\x61\x05\xd6\x99\x29\xdc\x55\x56\xac\x6b\x8c\x26\xe0\x90\x50\xa6\xf4\x81\xb0\xda\x32\xf6\xae\xd3\x6c\x79\x88\xa5\xa4\x53\x7d\x0d\x05\x46\xd8\xd5\x1c\xc9\x96\x7a\x7b\x05\xb6\xb5\xf6\x4b\xa6\x37\x3e\xaf\x58\xdb\x4c\x4e\x6a\x61\x1e\x08\x92\x07\x43\x2a\xb5\x30\x29\xa6\x00\x39\x96\xe8\x8f\x8c\xab\x3f\x06\x40\x32\x4e\x91\x37\x95\x00\xad\x39\xe5\xa0\x82\x70\x07\x87\xd6\x12\x0e\xc2\x41\x42\xe3\xda\x95\xdf\x16\xbd\xa8\x70\xee\x3e\xa9\x64\xd7\xaf\x46\x7a\x35\x41\x84\x1a\xe8\xec\x9d\x59\x2f\x9e\xa3\xc6\x2d\x32\x64\x20\x88\x4b\x6e\x9d\x73\x41\x4a\xf0\xdd\x86\x9f\xfb\x50\xc8\xf9\x42\xd5\x66\xb6\x54\x45\xa3\x1a\xe3\x9d\x41\x32\x2e\x4e\x7a\x64\xb4\x93\x47\x43\x76\x43\x48\x33\xbc\xad\xdf\x8b\x5f\xa1\x21\x18\xab\x4d\x79\x5f\x45\x69\xbb\x88\x8b\x9c\xc7\xe0\x05\x2b\xa8\x66\x0d\xe6\x4c\xbd\x8e\xbf\x49\x2c\x63\x93\x8c\xeb\x0d\xee\x61\x9d\xc6\x26\x50\x95\xa3\x21\x7b\xcf\x85\xbd\x82\xa5\x05\x31\x1b\xe3\xe4\xfe\x90\xb0\x14\xe1\x5c\xcd\x0c\xb8\x89\xb5\x91\x2f\x2d\x35\x68\x49\x03\xc8\xc6\x67\x2e\x50\x99\x60\x61\x2f\x8f\x09\x7e\xe0\x6e\x14\x43\x16\x34\x02\x30\x69\x80\x8b\x09\xd5\x01\x9a\xd4\x36\x02\x40\xc4\x4d\x6b\x51\x87\x7b\x5f\x41\xbd\x5f\x7d\xce\x22\x1c\x7f\x00\x78\x63\x44\x5a\x91\xbd\xb4\x3a\x03\x67\x79\x73\xba\x92\x0c\x2b\xa1\xfa\x37\x0f\x6c\x84\xb2\x31\xef\xd8\x19\x68\x49\xe7\x5b\xc7\x6b\x23\x90\x96\x49\x2e\x20\xd0\xa4\xae\xcd\xaf\x93\x19\xcd\x0a\x3b\xfc\x37\x07\x7e\x98\xba\xc9\x8c\x3c\x90\xcc\x40\x84\x25\x02\x9c\xf0\xc6\x82\xf6\x2d\xfa\x3f\x06\x0b\x1e\x7d\x37\x64\x1f\x80\x0d\x67\xd9\x12\x00\x0c\x7c\xcb\x58\x95\x9a\xb9\xaf\x1d\x80\xb2\xe1\x2e\x28\x1e\x88\xd9\xeb\x19\x7e\x20\x43\xe6\x9a\xf9\x3f\xe8\x1e\xfd\x2b\xfa\xae\xc9\x2a\xe4\x7c\xe9\x4f\x6c\x33\x78\x1f\x78\xaa\x83\x5b\xce\x32\x4a\xcb\x6f\x9c\x49\x21\x32\xe8\xd5\x64\x8f\x78\x1c\x22\xca\x1e\x78\x52\x09\xd8\x08\x4f\x2d\x16\x84\xa9\x11\xe3\x29\x19\x91\x1a\xf7\xdc\x0a\x26\xa1\x85\x80\x0b\x9e\x92\xb5\xce\x35\xcf\x4c\x3f\x81\x19\x44\xe6\x63\xbf\x1d\x10\xc4\xee\x23\x96\xbd\x26\x1f\x53\x5a\xfd\xc8\x3d\xd8\xc7\x26\xe3\xde\xd4\x31\x78\x69\xe5\xb3\x03\xb8\x10\xec\x00\xea\x9d\x53\x19\x56\x2e\xce\xb7\x7c\x1c\xcb\x46\x71\xfd\xb2\x9e\xb9\xbd\xac\x02\x18\x13\x00\x56\x14\x74\x4a\xb5\xfc\xde\xde\xf9\x08\x9c\x70\x13\xcb\xbe\xc1\x74\x68\x65\xda\x2f\x96\xc2\x25\x13\x1d\x7a\xfa\x2b\x1c\x6a\x63\x9e\x97\x05\x78\xbb\x00\x54\x86\x11\xc8\x56\x56\x5f\x6a\x3e\x3c\x35\x51\x6e\x64\x46\x4d\x5c\x79\xef\xf4\x1c\xe9\xd3\xc1\xe7\x26\x0f\x10\x16\x2d\x57\x33\x2e\xe8\xdf\x1b\x83\x91\x9a\x65\xf4\xc2\x6b\x58\xc4\x6e\x99\x71\xc6\xd2\x3a\x10\xab\x11\x29\x54\xa4\x95\xd4\xe9\x4c\x68\x9c\x03\xe4\x85\x66\xb3\x93\x3c\x33\x38\x79\x09\x17\xa9\x29\x56\x23\xa3\x48\x31\xfd\x9e\x17\xef\xb1\xf2\x0d\x52\x8b\x0c\x60\x91\xf8\x92\x19\x66\xd3\xd5\x02\xe8\x5f\x73\x92\xef\x28\xd8\xce\xa2\xe3\x3e\x53\x14\x43\x59\x0d\xc0\x53\x59\x04\x5e\x9a\xb5\xd1\xbc\xb9\x58\xdf\xdf\xf4\x4c\x65\x10\x97\xe9\xac\x74\x3e\xfb\xda\xa8\xe4\x06\x47\xbd\x93\x45\xe7\xda\x20\x8d\xed\xc0\xa4\xf3\x1c\xb1\x09\x55\x19\xa9\x86\xfd\x58\xf2\x7b\xf0\xe9\xb1\x65\x16\xf1\x44\x76\x12\x07\xd9\x56\x92\x3e\x9e\xd0\x64\xb2\x01\x93\xab\x0a\xd5\xab\xd6\x3b\x30\xa0\x78\xb6\x56\x13\x30\xac\x38\xd2\x73\x7f\x14\x14\x12\x72\x97\xc5\xcb\xbe\x64\x80\xbb\x2e\x42\x1e\xa3\xa5\x14\x23\xd6\x42\x8c\x82\x5b\xc2\x65\x4b\x13\x6e\xb3\x01\xc2\x36\x14\x77\x5d\xf5\x61\x37\x9d\x08\xc3\x92\x5e\xeb\x91\xa8\xa6\x40\xad\x3d\x0c\x1e\x78\xf1\x65\x0c\x88\x5e\xb4\x79\xe2\x93\xd1\x89\x42\x82\x8b\xac\x33\x89\xdc\xc4\xa6\xca\xce\x74\x61\xfa\x1e\x81\xcf\x78\x6b\x57\x49\xe0\x02\x28\x42\xe2\x4d\x2e\x94\x4b\x7b\x7c\x26\x43\x26\x78\xe1\xe3\x6c\xac\xc0\x09\xdf\x94\x76\xf7\xa4\xfc\xac\x40\xbc\x73\x1c\xa9\xe5\x50\x56\xba\x1e\x5b\x3a\x12\xc1\x42\xb6\x8a\xbd\x9e\xdb\x08\xc6\xd8\x05\x67\xc2\xa8\x78\x10\x85\x00\xde\xb8\x5c\x22\x25\x30\x04\xc3\x43\x08\xf3\x27\xa3\xe5\x51\x69\xac\x30\x0e\xd9\x6e\xbe\x50\x4b\x0b\x84\x0c\xbc\xd9\x42\xa4\xaa\x19\x66\x36\xb3\xb6\xce\xdd\x57\xe6\xd3\x69\xe4\xf0\xab\xeb\x0c\x3a\xb2\xaa\x6d\x6d\x93\x6e\xa1\xc3\x4c\x8d\x52\x82\x40\x93\x77\x9f\x4a\xc8\xf0\xc1\x59\xa3\x3d\x65\xcc\x79\x46\x30\x6b\x52\x3b\x6b\x1f\x57\xac\xaf\x34\x4c\x0a\xb0\x78\x0f\x4a\xe4\x44\xeb\xdc\x38\xcb\x4a\xf3\xc2\x50\xd6\x4d\x79\x5c\x69\x63\x34\x29\x70\x04\x5b\x85\xc0\x64\x78\x4c\xb2\x4e\xd1\x66\xe6\x83\x95\x54\x04\xaf\x14\x65\xc7\x5a\xa5\x57\x86\xa1\x50\xb5\xc9\xa8\xeb\x06\x16\xa6\xb0\xae\x14\x21\xe2\x34\xd0\xcd\x86\x28\x49\x92\x0b\xaa\x96\x23\x6b\x78\x6a\xcf\xb4\x6e\xec\x97\xa7\xf6\xc3\x36\x5a\xdd\x09\x72\xfd\x39\x43\x17\x88\x37\x82\x1a\xd0\x4c\x3b\x85\x36\xdb\xad\x35\xb5\xda\x24\xb5\x55\x0b\xeb\xb2\xe4\xda\x0d\x55\x77\xb1\xe9\xf0\x2c\x18\xdf\x88\x4f\x5c\xfe\x59\xfb\x85\x2d\xa3\x14\x76\xb0\xd8\x39\xc4\x95\x85\xa0\x5c\x58\x30\xc0\x36\x41\x4a\x73\xfc\x79\xb4\xc0\x02\x67\x19\xc9\xa8\x9c\x6f\x6e\x5f\xfc\xd3\xf7\x2b\x47\x7b\x6a\x40\x2b\xa5\x85\x80\xfd\x4c\xe7\xf9\x3c\x28\x17\x0a\xf0\x24\x01\xc8\x80\x35\xd9\xdb\x5c\x39\x37\xc0\xe2\xa2\x61\x8a\x8a\x00\x36\x42\xeb\xc4\x1e\xcb\xc6\xaa\xcb\x38\x99\x41\x19\xb7\x09\xa6\x82\x11\x29\x8f\xd0\x05\x57\xe4\x04\x7d\xc4\x8b\x5b\x50\xf8\x0c\x8a\xfc\xd4\x58\x68\xb1\x44\x5a\x72\xca\x19\x55\x07\x43\x66\x01\x70\xdc\xaa\x1c\x27\x9c\x19\xe4\x89\x04\x16\xd6\x37\x01\x26\x47\x07\xc1\xa0\x0c\xb0\xb4\xa6\x92\x6e\x49\xd7\x71\x68\x1c\x54\x01\x98\xc3\x25\x2f\x0b\xb0\x63\xa7\x13\x78\x11\x2b\x22\x45\x40\x89\x80\x8f\x53\x4e\x64\xa0\xec\x23\x2f\xb3\x67\x74\x42\x34\x85\x0c\x19\x9f\xc4\x86\x09\x03\x36\xe1\xb0\x27\x74\xa7\x89\xe0\x52\xda\x68\x37\xd3\xce\xea\x98\xe1\x5b\x8b\x04\xb0\x8b\x28\x86\xe7\x0b\xc7\xaf\x96\xf0\x0d\x8a\x3e\xd5\x8b\xfd\x63\xe2\x51\x0f\x1a\x6f\xda\x6d\xe3\x75\x1d\x1b\x42\x82\x60\x69\xad\xb1\x10\xd6\x5a\x0a\x99\xeb\x20\x99\xfb\x31\x9b\xc0\xf6\x43\x8f\x33\x12\x50\x90\x45\x71\x33\xe5\x36\x35\x5d\x0b\x41\xa0\x74\x96\x81\x11\x1b\x94\x88\x06\x10\xdf\x04\xc1\xe9\x32\x58\x11\x6f\x6f\x34\x3d\x83\x64\x22\xe9\x5c\xf3\x4e\x40\xd8\x64\xfc\x90\x2f\xdc\x61\x8d\xde\x02\x90\x18\x3a\xd1\x84\x18\x58\x2b\xf5\x17\xec\x10\x8a\x30\xea\xe3\x55\xe3\xaa\x75\x8d\x80\x6b\x17\x50\xcc\x66\xc4\x12\xee\xf0\x5d\xef\x87\xcb\xeb\xdb\xfe\xd9\xf0\x5d\x11\x9c\xe3\x22\x39\x1d\x23\xf1\x18\x16\x9c\x0d\x99\xf7\xa7\xfb\x1c\x5f\xd8\x4b\x84\xd3\xb4\x40\x58\xb0\xd1\xc0\xc6\x1d\xd8\xf6\x54\xac\xf5\xa4\x57\x9b\x79\x4f\x3f\x93\xf4\xba\x01\xba\x78\x27\xb1\x4f\xad\x7c\x46\xb5\x24\xae\xb9\x64\x87\xdb\xd7\x4f\xe5\x4e\x7f\xd7\x9e\x82\xcd\x49\x28\xe5\xdc\x41\xc2\x9d\x42\xd8\x57\xd5\x9e\x00\x0d\x68\xce\x0c\xd9\x5c\x04\xac\x1d\xdf\xa3\x39\x65\x90\x2f\xb1\x6a\x69\xef\xe2\x79\x74\x29\x78\x31\xb8\xb8\x8b\xab\x51\xfd\x78\x79\x17\xa3\xad\xf7\x7e\x59\x5d\xa5\x22\x6e\x61\x95\x59\x39\x98\x62\x11\xfb\x69\x53\x0f\xfd\xca\xd4\x4d\xf4\x03\x51\x3f\x9b\xea\x77\xbb\x08\xe6\xb0\xb8\xd3\xa0\x62\x93\x91\x2b\x80\xd8\x9e\x0c\x7e\xae\x29\x99\x18\x47\xec\x38\x64\x6b\xe8\xc1\xd7\x4c\x0c\x52\x29\x8e\x0c\xae\x38\x14\x59\x03\xcb\xb6\x73\x8b\xe8\x1b\x93\x33\xbd\x5c\x43\x78\xdb\x97\xc0\x29\x9a\xe3\x13\xf3\x71\x2b\x37\xfd\x75\xe8\x9c\xd7\x6d\x15\x4b\x89\x7a\x57\x83\x9a\xb5\x3e\x2f\x6b\x21\x5f\x16\xf2\x4c\xe6\x15\xa2\x5d\x83\xce\x04\x51\x96\xaf\x02\x6f\xc6\xce\x74\x3b\xa8\x19\x63\x37\xba\x8a\x8d\x51\x4f\x2a\x0b\x6d\x21\xfa\x44\x91\xc8\x36\x42\x62\x37\x69\x88\xc5\x32\x74\xcc\x43\x0c\x07\x64\xa3\x59\xc2\xdc\xbb\xaa\xab\xf4\x20\xcc\xc5\x33\x95\x5d\x9c\xe5\x6b\x67\xf9\x89\xc5\x6c\xda\x24\x28\xfe\x6c\x28\xda\xe7\xcf\x40\x46\x8f\xc3\x4e\x74\x2e\x4e\x1b\xce\x1e\x4e\x37\xa4\xb6\x6e\x39\x8d\xc5\xf8\x9c\xf9\xd7\x42\xd1\xe2\x05\xb6\x45\x02\x40\x18\x74\xd8\x0e\x75\x18\x78\x47\x43\x16\xd8\x3c\xa5\x11\xdf\xf4\x19\x71\x38\x22\x80\x93\xaa\xd9\xa9\x8d\x35\xf2\x37\x73\xb4\x03\xe5\xa8\x79\x35\x8b\x91\x40\x2a\xfd\xd8\xd3\x29\x67\xd8\xc5\x53\x3a\x8d\xc7\xba\x33\x42\xe0\x12\x68\x2f\x80\x40\xb0\x1d\x93\x07\x62\x5d\x20\x38\x40\x96\x0b\xe2\xd9\xb5\x72\xc4\xbe\x52\x3e\x62\x95\x66\x16\xbd\x04\xfb\x28\x95\xc2\xce\x2e\x31\xb5\x2d\xaf\x3e\xe0\x3b\x48\x98\x94\xa5\x12\x15\x1d\x8e\x15\x7c\xd9\xc6\x4c\x00\x94\x10\x9a\xb3\xa1\xd3\xa6\xec\xc8\xcf\x0b\x92\x6c\x92\x55\x76\xe5\x2a\x82\xaf\xb2\x68\xc7\x10\xc4\x60\xad\x75\x3b\x68\xfb\x35\xbb\x68\xb0\x41\xd8\xb4\x21\xea\xf5\x7c\x5d\x96\x98\x9f\x45\xa7\x84\x54\x3d\x8d\x9f\x2d\x18\x4a\xc7\x59\xd8\x7e\x8a\x69\x58\x83\x7d\x90\xd4\xb7\xed\x9c\x9e\x27\x3b\xea\xb6\x92\x67\x14\x59\x9c\x5f\x49\x5a\xd4\xfa\x51\x36\xe5\x43\xad\xe3\xa5\x3b\xe1\xdd\x2e\x50\xc3\x45\x02\x97\x0e\x55\x14\x02\x02\x54\x02\xf2\xbe\x49\x0d\xaa\xcf\x69\x02\xa1\xa5\xce\xc9\x16\x84\xb3\xd9\x8c\x73\xbd\x78\x52\xe1\xb9\x87\xea\x29\xe3\x40\x95\x96\x6b\x0d\x8f\xdb\x55\x8e\xca\x5e\xa2\xd9\xb5\x44\xd3\xc1\x0c\x64\xa8\x93\x88\x52\xea\x99\xc5\x67\xb6\x79\x0e\xf1\x04\x21\x84\xca\x5e\x91\x16\xe4\x15\xae\x7e\xca\xfc\x5f\x31\x07\x77\x44\x1d\x92\x6a\x5d\x6c\xe8\x51\x00\xcc\x0e\x56\xce\x2c\x94\x06\xac\x69\x16\x46\x6b\x3c\x69\xa6\x28\xd2\xe0\xc2\xd4\x31\x82\x18\xed\x25\xcf\xd1\x23\x95\x5a\x17\x1e\x32\x70\x35\xf9\xe2\x49\x8a\xdb\x82\x47\x07\xf0\x16\x64\x73\xc8\x7c\x3c\xa7\x0a\xe1\x60\x86\x77\xc0\x19\xae\x5d\x1c\xbf\x39\xcf\xfa\x03\x98\x71\x6d\xba\x40\x5d\xd6\xde\x9a\x43\xb3\x81\xf1\xa7\x68\x64\xdb\x8c\x80\xc0\x2d\xfe\xb4\x39\x01\x81\xc6\x13\x6a\x98\xb5\x67\x6e\x9f\x14\x80\xea\xad\x0d\x16\xc7\x03\xc0\x56\xa8\x54\xa5\xbb\xc5\xa2\x77\xac\x49\x08\x28\x36\xa2\x55\x46\x40\xf1\xfa\x2e\x52\x02\x9a\x80\xd5\x56\x85\x88\xba\x4f\xea\x05\xad\x1b\x5f\x02\x95\xbb\xd8\x8b\x50\x52\xba\x6a\x94\x94\x5e\x5b\xa2\x73\x50\x02\x7a\xe3\x08\x85\x2e\xea\x60\x11\x66\x16\x52\x51\x10\x35\x1a\xa7\xb6\x91\x32\xe7\x67\x5c\x41\x68\x50\x02\x68\xeb\x95\x70\xd5\x21\xab\x97\x40\x56\xf3\xc4\x6d\xa3\x7c\x76\x9a\x10\x1d\x9c\x3f\x37\x0b\x6b\xd1\xfa\xe4\xc3\xfe\x8d\xb2\x6c\x71\xd3\xcb\x22\x66\xe1\xaa\x68\x50\x40\x40\xf0\xd8\x24\x6e\xba\xe6\x54\xb6\x8c\xc1\x59\x7b\x2e\xec\xa5\xbb\x43\xd5\xae\xc2\x9d\x5b\x87\x2c\x79\x19\xd9\x72\x63\xe7\x73\x77\x6a\x7c\xc9\xe3\xb4\x09\x1e\x2c\xe0\x8c\xec\x0c\x1d\xa5\x9c\x64\xa1\x1b\x3f\x00\x2f\x95\x1d\x3a\x36\xe5\x0f\x3d\x66\x56\x69\x4b\xa2\x09\x5b\x9c\xfd\x27\x98\x74\x57\x0c\xdf\x00\xdb\x52\x58\x1c\x43\x1a\xda\x0d\x00\xbc\xd7\xd5\x7d\x8f\xf9\xb0\x17\xed\x72\x96\x12\xc1\x08\x56\xb3\xe7\x0b\xd3\x39\xdd\xd6\x38\xfd\x6c\x21\x3b\xa7\x3b\x01\x70\x2f\x85\xc1\x74\x8c\x80\xe9\x10\x4e\x52\xc0\xf9\x56\x14\xc7\xba\xc2\x19\x45\x26\x5d\x17\x2a\xdd\x2a\x92\xa7\x5e\x99\x7b\x9a\x98\xa6\x1a\xab\x4f\x25\x9a\x49\x1f\xf6\x10\x04\x79\xcd\x92\x7c\x11\xc1\x43\x02\x3f\x8e\x02\x74\xac\x91\x41\x0f\xec\xb0\x9b\xd7\xf8\xd1\xe0\xb9\x9d\x61\x85\x4f\xcd\xd7\xab\x86\x1d\x01\x8b\x40\x02\xa2\x87\x87\x59\x18\x77\xb0\xe5\x5e\xbe\x88\xb7\x89\x9e\xf9\x9a\x1e\x91\x23\xf4\x43\xc6\xc7\xf2\x00\x99\x62\x77\x07\x46\xb0\x87\xe7\x06\xe2\xf3\x9b\xd7\x1f\x22\xf5\xfb\x8c\x90\x5a\x65\x48\xf1\xb6\x7d\xa8\x00\x14\xa1\x57\x1a\x09\x64\x8d\x3c\xba\x79\x71\x68\x67\x8b\x08\x9d\xfe\xf6\x17\xfb\x43\x43\x2d\xca\x35\x25\xa0\x43\xbb\x08\x5b\x96\xcd\x8b\x58\xa4\x99\x4d\xcb\x35\xa6\x8e\x92\x1e\xbb\xca\xe4\x32\x64\x3f\xf2\x47\xf2\x40\xc4\x01\xc2\x0a\xcd\xb9\x56\x43\x02\x3f\x3b\xa4\x0e\x46\x68\x49\xc6\x9f\x8a\xd1\x05\x9e\x93\xb4\x0f\xc2\x6c\x90\x20\x61\x0d\x3f\xd6\x65\x53\x87\x3e\x01\x40\x0a\x66\x1b\x9c\xff\x75\xc8\x4c\x65\x69\x13\xc3\x01\x5c\x87\xba\x89\xc1\x95\xf8\x47\xef\x50\xfa\xe3\x11\xba\xd5\x94\x4e\x65\x3c\xde\x20\x19\xb5\x69\x6c\x43\x36\x15\x3c\x5f\x78\x5d\x9c\x8f\xc1\x08\x60\x1c\x4b\x35\x0e\x25\x18\x8c\xf3\x26\x25\x38\xd5\x32\xfd\x6a\xc2\x89\x4c\x47\xaf\xcc\x22\x1a\x27\xb1\x84\x04\xa4\xb9\x83\x8f\x1f\xb1\x11\x82\xc6\x0f\x14\xe4\xb1\x34\xc3\xd9\x3d\x99\x93\xea\x8c\x48\xd0\x2e\xbd\xf5\x2e\x0a\x69\x8e\xc3\xe6\x6b\xc7\xb9\xca\xb6\xe2\xed\x9f\xce\x46\x58\x1f\x91\x5f\x74\x6e\x63\x47\x5c\x81\x3a\x53\x57\xf9\xa9\xac\x2e\x8e\x90\xda\xc7\xe7\x94\xd6\xee\x2a\x17\x0b\x0e\x3c\x3d\x5b\xba\x0c\x02\x9b\xf8\xba\xe0\x8b\xdc\xc4\xc7\xd0\x30\x5c\xa2\x96\xb2\xa9\x54\x1f\xb1\x4a\x66\x5a\x81\x29\x12\x40\x77\x14\x37\x54\x70\xe5\xa7\xb5\xc4\xd4\xcc\xe0\x34\xec\xbd\xc1\x34\xd9\xc2\x32\x67\x10\x64\x5c\xb8\x21\xfc\x95\x65\x68\xae\xfb\x8b\xea\x19\x04\xf6\x15\xf7\x89\x7d\x02\xb5\x72\xd7\x50\xd1\xba\xf1\xb7\xa3\xad\x18\x4c\x77\xe7\x11\x49\x5b\x64\x33\x9d\xd9\xfc\xc5\xe2\x45\x64\x25\xa4\x5a\x96\x93\x0b\xba\x91\x16\x6b\xed\xc3\x50\xbd\xa0\xb0\xdc\xcc\xf1\x42\x8b\x23\x8a\xeb\x5b\x52\x4c\xc9\x01\x7a\xd4\xbc\x40\xe5\x42\xdf\x23\xb9\xa0\xee\xec\x83\xb9\xa5\x0d\x75\x80\xa5\xe3\x38\xc4\x6f\x4d\x70\x80\x23\x6d\x1c\x87\x38\x51\x39\xf6\x01\x4e\x40\x13\x19\x65\xf7\xba\x33\x83\x23\xe7\x1c\x74\x82\x40\x55\x71\x97\x5a\x16\xed\xe9\x5a\xc2\xde\x62\x97\x9b\xab\xa2\xac\x3b\x69\x94\x4d\x83\x5c\xf1\x7a\x6b\x53\x1b\x28\xb8\xda\x2f\xdb\xc1\xd9\xd5\x7e\xea\x64\x9f\x4d\xbe\x5d\x91\x47\xd8\xf8\xf9\x3a\x01\x36\x0a\xe6\xb4\x01\x75\x56\x7a\x0a\xb3\xf8\xad\x25\x00\xc0\x38\x4c\xcd\x1d\x6c\xa5\xa9\xff\xf4\xff\x32\x30\xbc\x66\x69\xfe\x13\x71\x31\x64\xe6\xf7\x03\x0f\xdb\xa7\x5f\x28\xf0\x30\xf0\x9c\x14\x88\x01\x22\xce\x2d\x86\xec\x16\x9b\x1b\x6a\xb0\x4f\x3c\x6a\x99\x1e\x43\x50\xe0\xa8\x52\x71\x66\x8e\x19\x9e\x02\xd2\xca\x01\x44\xd8\x80\xb8\x5a\xd8\x2e\x0c\x49\x1b\x28\x73\xe0\x56\x9a\x59\xda\xb4\x82\xa2\x22\x03\xf4\x69\x44\x59\x0b\xf4\x50\xb8\x69\xeb\xa9\xdf\x95\x03\xda\x4c\x62\xbf\xed\xdd\xfc\x34\xba\xee\xdf\x5c\xde\x5d\x9f\x46\x62\xfb\xe9\xf9\xdd\xcd\x6d\xff\xba\xf6\x99\x29\xe9\x39\xb8\xbc\x18\xfd\xf5\xae\x7f\xd7\xf0\xc8\x35\x70\xde\xfb\xa1\x7f\x1e\xbe\xf2\xd7\xbb\xde\xf9\xe0\xf6\x97\xd1\xe5\xfb\xd1\x4d\xff\xfa\xe7\xc1\x69\x7f\x74\x73\xd5\x3f\x1d\xbc\x1f\x9c\x9a\xb2\xf5\xc1\xbb\x57\xe7\x77\x1f\x06\x17\x23\x17\xbe\x18\x3e\xfa\x74\x79\xfd\xd3\xfb\xf3\xcb\x4f\xa3\xa0\xcb\xcb\x8b\xf7\x83\xd5\xc5\xb2\xeb\xe7\xdb\x58\x83\x21\xb8\xaa\x02\x05\x33\x10\x84\xc6\x4b\x4b\xbc\xf4\xef\x60\xe6\xbc\x32\x14\x77\x78\xe0\xfe\x65\xca\x9a\x1c\x6a\x26\xe7\x2c\xe8\x05\x7f\x18\x32\xef\xe2\xf0\xd7\xa6\xc2\x53\xe9\x6a\x11\x47\xa3\x3d\x41\x3d\x38\x0d\xa0\x12\x44\x9d\x42\xa6\x90\x1f\xa9\x73\x8a\x01\xa5\x41\xe5\x79\x5b\x4d\xbd\xbc\xa5\x71\x83\x76\x4e\x30\x04\x6b\xe1\x4f\x57\xd1\xbb\x2b\xd1\x1e\xd3\xc2\x09\x72\x3c\x58\x37\xab\xc7\x05\x60\x1b\x4b\x86\xe7\x95\x8a\xcb\x06\x6f\xc2\x22\x51\xd8\x0a\xd6\x51\x8b\x11\x09\xc5\x2d\xcf\x08\xfa\xe9\x2f\xc5\xa0\xc0\xda\x69\xad\x87\x79\x05\x8e\xdb\x3e\x10\xb9\x59\xd5\x75\x04\x18\xf5\xe4\x0e\xb2\x35\x43\xc1\xc9\xb4\x55\x53\xc0\x34\x9d\xb3\x20\xb7\x35\xb2\x53\xdb\x72\x61\xe8\x10\x95\xa8\xf8\x04\xdd\x90\x8c\x24\xaa\x28\xf9\x0c\xbb\xb8\xc8\xf2\x29\xad\x14\x4d\x1a\x93\x19\x7e\xa0\xdc\xe1\xf5\x19\x58\x43\x58\x47\x2b\x3c\xa1\x43\xd4\x78\x14\x4e\x50\x2f\x4d\x65\xcc\xc2\x22\xca\x71\x4c\xf1\x30\x1e\x76\x98\x8e\xca\x52\xcf\x18\x6b\x0d\x07\x35\xb7\xde\x56\x08\x29\xf2\x7e\xe4\x48\x6c\xb4\xd1\x35\x7c\x8b\xe5\x7d\x4d\x8d\xb4\xda\x9b\xcd\xd2\xcf\x96\x3d\x36\x17\x66\xab\xed\xd4\xaf\xf5\x08\x0e\xc0\x66\x7d\x36\xc2\xd3\xac\xe9\xd2\xcd\x38\x2b\x61\x08\xb7\xee\x2f\xc2\x20\x7e\x7a\x8b\x6d\xbd\x1c\x04\x47\x65\xe4\xe9\xb2\xc3\x3c\xae\xe0\xd3\x4b\xff\xe5\x4a\x61\x69\x14\xac\x5b\x57\x3b\x6e\x25\x11\xcf\xda\x72\xdb\x8b\x48\x80\xce\x46\x13\x30\xa7\x63\xca\x2c\x66\x27\xf1\xf6\x5e\x57\x71\x45\x9f\x31\x8f\x23\x8d\xc7\xfc\x21\x52\xb9\xe6\xa6\x3c\x7c\xed\xd9\x0d\x0c\x45\xdb\x1c\x5a\x7f\x7a\xec\x87\x2d\xf7\xda\x9d\x97\x5b\xfd\xd5\x2a\x53\xc8\x75\xa8\x2f\xba\x89\x6a\x31\x2e\x75\x71\x6c\xe8\xd2\x64\xb3\xe8\xb3\x7f\x50\xb8\xaa\xb9\x08\x3c\xf8\x0d\x36\x9c\xb6\xc6\xa6\xf2\x82\xd5\x42\xb1\x86\x26\xf2\xee\x1e\xee\xa0\xf5\x8d\x61\x73\x5c\xa9\xe8\x78\x7d\x3a\x50\x5d\xe4\x4f\x08\x4b\xb6\x98\xea\x62\xa6\x9e\x5b\x30\xd2\x03\x84\x4d\x12\x51\x21\x81\xc8\x3c\x99\x19\x40\x4f\xcd\xce\x0f\x86\xec\x31\xd8\x90\x28\xcc\xae\x17\xb6\x04\x70\x0f\x9f\x35\x83\xa2\x0f\x51\xf0\x22\x88\x59\x14\x22\xe9\x02\x42\x30\x06\xf7\x02\x63\x76\x0d\x81\x07\xfb\xb5\x05\xa9\x6f\x00\x28\x5e\x53\xbf\xad\x0e\x56\xdc\xcf\x2d\x40\xf3\xde\x15\x94\xf8\x8a\x21\x04\x80\xe2\x75\x23\xd8\x01\x9e\xf8\xcb\x80\x88\x9b\xdc\xb9\xf9\xd8\x66\xb2\xea\xe9\xba\xd5\xfe\x57\x37\xa3\x7f\x35\xd6\xf8\xbc\x21\xf5\x39\x68\xcd\xc3\x00\xa1\x43\xa8\x36\x6a\xf3\x2c\xad\xa3\x53\xa2\x43\x94\xd1\x7b\x82\xbe\x82\x38\xa6\xde\xd5\xe0\xab\x03\xf4\x55\x98\xcb\xf1\xd5\x46\x07\xd0\x8e\xdb\x62\x8a\x83\x06\x12\x05\xf4\xc6\xc7\x0e\xf6\xaa\x74\x12\xed\x9e\xd9\x83\x88\x9a\xce\xa1\xfe\x32\xfa\x86\x32\x45\x04\x60\x64\x9b\xb8\x4f\x1f\x4e\x68\x1d\x23\x46\x2e\xa4\xb2\x66\xed\xd2\x21\x1b\x2f\xcb\xae\x8f\x03\xef\xfb\x68\x7d\x4a\xb7\xc6\x7d\xd6\xed\x55\x93\xff\x76\x1c\xe6\xb6\xfa\x3e\x58\x93\x4e\xd8\xf3\xb5\x05\x0b\x2e\x26\x1b\xce\xcb\x3e\x3e\xb4\x6e\x56\x91\x15\xc9\x2d\x66\xed\xa6\xac\x93\x7f\xde\x1a\xb9\xb5\x08\xaa\xec\xd5\xad\x88\x8d\xa7\x6d\x10\x7c\xf7\x54\xf6\xb4\x54\xb6\x8b\x78\xe2\x78\x70\xdd\x2f\xd0\x53\x23\xc7\x05\xcd\x38\x33\xa4\x56\x26\x3c\x83\x8f\xc0\xc1\xd7\x57\xd5\xe8\xe8\x09\x0d\xd6\x64\xbd\x2b\xf4\xc6\xb8\xd3\x8d\x33\xb2\x3a\xd6\xf2\x50\x7b\xca\x22\x95\x72\x6a\x72\x87\x14\x9d\x93\x03\x04\x95\x71\x8b\x10\x00\x7b\x5e\x81\xdc\xe0\x8e\xb3\xe5\xef\x4c\x27\x22\x99\xd1\x87\x6e\x09\x52\x5d\xa5\xf1\x26\x1a\xd9\x22\xfe\xe2\xa2\xf7\xb1\x7f\x36\xea\x5f\xdc\x0e\x6e\x7f\x19\x55\x43\x31\xe2\xc7\xd7\xa7\x3f\x0e\x7e\xee\x9f\x85\x2f\xdc\xfc\x72\x73\xdb\xff\x38\xfa\xd0\xbf\xe8\x5f\xf7\x6e\xfb\x67\x2b\x4d\xa9\xab\x3a\xab\x2b\x41\x61\x43\xb7\x6b\xd4\x37\x0f\x22\x67\xec\x90\x00\x50\xa0\xc5\xfd\x07\x2a\xa9\x4d\xd2\xb5\x22\xea\xdd\xc0\x99\x46\x6b\x7a\x3f\x09\xf2\x67\x0e\x0c\xb2\x5a\xd1\x09\xb5\xee\xa4\x50\x7c\xb5\x51\x17\x2c\x35\x81\x9a\x28\xa8\x71\x7c\x54\xd3\x89\x5d\xb0\x13\xd4\xb3\xd4\x51\xd7\x3e\xe3\x48\x0b\xcf\x44\x98\xd1\x9b\x90\x0c\x3f\x74\x74\x88\xca\x6b\x7c\x82\x0c\x20\x74\x50\x13\xc3\x37\x08\x22\x1f\x16\x84\x7d\xa5\x10\xf9\xbc\xc8\x68\x42\x55\x90\x78\xc3\x85\x75\x3a\x18\xa7\x1a\x44\x7f\xad\x21\xae\x9d\xc5\x68\xec\x5c\xe7\x0f\xfd\xcb\x55\x6d\xdf\x9f\x28\xc5\x6d\xf2\xe2\x5a\x94\xd1\x1d\x28\xf6\x0d\xae\xd4\x0a\x20\xea\x06\xa3\x7b\x0a\xf3\x40\x35\x02\xde\x26\xcf\xd8\x40\x0f\xec\x2a\x19\x3c\x9a\x1b\x71\xb3\x02\xd5\xab\xa3\x47\xa2\x73\xbd\x3a\x7c\xa4\x1d\xa5\xbe\x70\x10\x48\x84\xbe\xbf\xb3\x42\xc0\xa3\x8e\x6e\xfc\x0a\xa0\x27\xbb\x37\x30\x87\x48\x90\x39\x57\x5a\x01\x33\x7e\xf2\x03\x2d\x54\x51\x9c\xd1\xbf\x03\x02\x8c\x20\x47\x41\x5c\x01\x24\xd8\xa4\x61\x40\xb5\xcd\xce\x7e\xfa\x82\xc0\x45\x1d\xbc\x4a\x29\x60\xa7\xbc\x5f\x34\x96\x3d\x79\xd1\x6a\xb3\xf1\x8a\x35\x95\x78\xe8\x56\x7c\x35\x22\xaa\xf5\x85\x57\xa1\x0a\x3d\x96\x0d\x55\x57\xdb\x8e\xf1\x79\x6a\xaf\x56\x13\xd0\x4b\x24\xf7\xb2\x75\x57\x4b\x83\x79\x3d\xc5\x57\xd7\xae\xdb\xeb\x45\x18\xa8\x19\x68\x8b\xa2\xab\xde\xc7\x02\x75\x51\xba\x5d\x87\x2e\x44\x2c\x72\xb4\xe8\x43\xe5\xef\xc5\x7a\xed\x16\xcb\xfb\xad\xbb\xbb\xc5\xf2\xbe\xa1\xab\x75\x37\xe7\x69\xe4\xc8\x29\x2d\x9b\x0d\x5e\xb3\x10\x5e\x61\xf9\xfe\xe6\xfb\xa8\xff\x40\x98\xda\x89\x30\x07\x4d\xd4\x64\x10\xb6\x33\xc9\x1a\xd0\xf4\xc1\x59\xc1\x91\x7c\xf1\xae\x20\x6c\x42\x09\x0c\x8c\x95\xa8\x47\x42\x98\x73\xa3\x37\x79\x2c\xf5\xd4\xda\x6d\x0f\xbc\x5a\x5d\x97\x35\xd1\xb5\x76\xb5\x8b\xe2\x29\x45\x64\x1c\x4f\x20\x6e\xbf\x93\xf6\x17\x49\x45\x46\xe5\x0b\xeb\xea\x1a\x49\xbe\xbc\xe7\xa6\xcf\x19\x96\xe5\x2e\xd7\x6e\xf9\x06\x09\xf4\x51\x33\x1f\x08\xe4\x97\xec\xa4\xa0\x61\x87\x3c\x42\x18\xc8\x9d\xc8\x20\x0a\x73\xa5\xca\x6f\x0a\xb7\xe4\x22\x2b\x6c\x40\xb8\x85\x40\x63\x06\x73\x34\x64\x67\x64\x21\x08\x94\x12\x3b\x41\x57\x19\xd1\xd7\x65\xae\xaf\xcc\x3c\xcb\x46\xbe\xaa\xba\x54\x04\x37\xf1\xa7\x4e\x00\x39\x4f\x3e\x2f\x27\xa8\xad\x9e\x98\x03\xdb\x59\x3d\xb3\x60\x0d\x76\x9f\xfd\x19\xac\x2f\xd8\xdb\xc0\xea\x12\x8b\xdc\xa0\x33\x2d\x4d\xe8\x1d\xe8\xdd\x38\xd4\x0d\x24\xfd\xbb\xbe\xaa\x05\x91\x33\x9e\xad\x9c\x42\x67\x08\xa3\x2e\x73\x70\x4b\xf9\x84\x93\xb0\x51\x51\xa3\xa6\xd0\xcc\x16\x97\xd1\x99\x69\xa2\xf6\x0a\x5c\x35\x45\x0f\xa8\xeb\x5d\xe5\x16\xfa\xcd\x86\x19\xd9\xa1\x81\x03\xa8\xb0\x4b\x84\x30\x2c\x85\x9d\xb7\x90\x40\x97\xc6\x51\xe5\x3f\x0f\x4a\xc2\xf9\xa8\x62\xaa\x24\x92\x4a\xe4\x09\x80\x14\xce\x88\xe8\x04\x8c\xe8\x63\xcf\x8b\x26\xf4\x80\xeb\x59\x9b\xc5\xd2\x05\x39\xc5\xc6\x50\xc8\x08\x40\xc6\x6e\xb1\x99\x72\xad\x0c\xdd\xcc\x40\xb7\xf5\x17\xc4\xd5\xe0\x9e\xcc\x6d\x10\x51\x4b\x34\x81\x3d\x24\x49\x77\x48\x12\x0b\xac\xec\x69\x0f\x00\x84\x94\x80\x8c\xc1\xc2\x33\x50\xbe\xe4\xad\x35\x6f\x5d\xa2\x43\xb4\x3b\xad\xb2\x1a\xa2\x2f\xf4\xb9\x3f\xdb\xd2\xb5\xa0\x27\xb3\x1c\x41\x9e\xd8\x36\xe1\x05\xd1\xfc\x8d\x59\x14\xda\x24\x29\x32\x69\x8f\x06\x30\xd1\xae\x9d\x37\x09\x9b\x3a\x89\x43\x76\xad\x47\x61\xbe\x28\x5c\xcc\x45\x0d\x32\x52\x54\x4b\x98\x20\x6c\xbf\x82\x45\x6f\x8a\xf0\x91\xa3\xa0\x04\x63\xd3\xc4\x76\x50\xea\xe3\x07\xf3\x0e\x9a\x64\x78\xea\xc0\x02\xa0\xbc\xe7\xa4\xd0\x93\xb4\xb0\x67\xea\x65\x9a\xc4\x55\x73\x79\x50\x65\x93\x51\xbd\xa8\x9c\x13\x07\xdb\x08\x9f\x79\xfe\x55\xc7\x5c\x9d\x26\xc6\x9c\xf5\x42\x0e\x59\xd0\xc7\x0a\x94\x2f\xa3\x0d\x6d\x28\xf6\xc3\x3e\xd3\xd4\x5b\xf4\xe1\x4f\x56\x5f\x4f\xd1\x4e\x6f\x8e\x17\x60\xb7\x32\x67\x90\x4f\xfc\xfd\x73\x6b\x43\x8e\x8f\x60\xc4\xff\xfd\x5f\xff\x73\x44\x57\xda\x24\x83\x43\x59\xf8\xe6\x0a\x07\x4c\x10\xff\x16\x54\x89\xc4\x70\x51\xa0\x12\x0b\x2c\x1d\xa9\x00\xb7\x66\x9b\x38\xa1\x19\x96\x4f\xe7\x0c\xae\x05\xfa\x37\x76\xa4\x90\xab\xaf\x73\x0b\x9b\x41\x9a\xac\x1b\x4d\x42\xb9\x24\xc2\x90\xa0\x07\x38\xa8\x29\xbc\x03\x51\x41\x6b\xac\xdb\x64\x8e\x69\xa7\xe8\x52\xfd\x7e\x3d\x66\x50\x64\x66\xc3\x53\x22\x46\x69\x1e\x85\x2b\xae\x6b\xfb\x4a\x7f\x74\x96\xab\xe5\xfa\xf6\x65\x86\x93\xfb\x2e\x38\x4d\xfa\xfd\x86\x66\xd7\x8b\x32\x81\x53\x39\x16\x67\x1a\x50\x90\x48\x09\x05\xc9\x46\x39\x45\x7a\x26\xb0\x46\x06\x95\x93\x02\x71\xd4\xf2\x4e\x83\xd5\x08\x23\x87\x5a\x9a\x8e\xd9\x78\xf4\xdb\xf4\x68\xc8\xde\x1b\xf8\x68\x10\x95\xcd\x00\x12\xa8\x5d\x44\x3e\x2f\xb8\x24\x51\x9e\x40\x0d\xa2\xad\xcd\xe4\xb1\xc3\xa8\x97\xa2\x4a\x95\xab\xb6\x12\xa2\x5e\x1c\xcf\xaa\xba\xe1\xd5\x29\xd7\x53\xe0\x56\xf7\x74\x42\x17\x54\xd3\xce\xa8\xf6\xa4\x3d\x5d\x4d\xd1\x22\x8a\x00\x90\x0d\x54\xb6\x3c\x40\x7e\x7a\x25\x82\xc8\xc8\x03\x11\x78\xaa\x65\x2c\x4c\xb3\x10\xb7\x38\x36\x8e\x34\xb0\x93\x75\x07\xa8\x48\xd2\x01\xb6\x80\xd2\xf2\x08\xe2\x54\x86\x3a\x5a\x8c\x83\xc1\xb7\xce\x5b\xa8\x73\x85\x76\x90\x9b\x7a\x21\x7e\xf3\x92\x28\x44\x3e\x2b\xc2\x8c\x13\xf9\xd6\x65\x7c\x54\x03\x5e\x51\x7d\x70\x7c\xf3\xa5\xfe\xe4\x95\x66\x7b\x2e\x93\xcf\xa5\xb4\xa4\xd2\xde\x30\xb6\x0e\xda\x0c\xb3\xd4\xe6\x2d\x15\xd5\xd4\xcd\xec\x8c\xe5\xc2\x47\xa7\xda\xec\x9b\x00\xf8\xd2\xb4\x69\x10\x3a\xe1\x22\x73\x92\xbc\x96\x25\xc1\xa1\xc7\x85\x16\xa9\x72\xa6\x68\xa6\x89\xc3\x8e\x41\xeb\x79\x39\xf3\xd0\x33\x10\x4b\xd9\x84\x6e\x42\xa5\xa4\x6c\x3a\xb2\x2b\xe9\x52\x70\xda\x5d\x0c\x31\x4d\x7d\x34\x4d\x99\x1f\x7f\x70\x0d\xad\xb6\x4c\x1a\xb2\xd6\xd3\xf7\xc9\x3f\x20\x0a\x32\xee\x26\x63\x21\x43\x5c\xce\xd0\x88\xa6\x51\x71\x3e\x98\x68\x17\xb5\x1a\x64\xb3\x6a\x3e\x6d\x71\x85\x48\x24\x21\x65\xc9\xa4\x1c\x40\x6c\xa8\x6a\xc8\x58\x92\x8d\x99\x4a\x03\xe6\x45\x34\x5b\xc6\xc0\x67\x5c\x96\x92\x9e\xb0\xeb\xce\x06\xc0\xe2\x2c\x1b\xe3\xe4\xde\x8b\xc7\x5e\x49\xe4\xc2\xc1\xc0\x6a\xb1\x11\xea\x5c\x18\xe2\xd2\x03\x4d\x40\xba\x31\x09\xc5\x86\x98\x0c\xa2\x82\x1d\x76\xd1\xb9\x2d\x69\xc8\x4c\x91\x3d\x50\x27\xcd\xe8\x4d\x34\x6d\x4a\x16\x19\x5f\xce\x1b\xee\xb3\x72\x42\xc9\x36\xbe\xe1\xa6\x7c\x96\x9d\x5e\x65\x25\xa6\xd7\xf9\x32\xab\x44\xc0\xef\x00\xdf\xa3\x03\x97\xfc\x90\xf1\x31\xd8\xa5\xac\x5e\xe8\xa2\xba\x83\xe0\xe2\xf2\x79\xee\x1a\x6b\x5e\x3e\x91\x54\x2e\x32\xbc\x5c\xd5\x83\x89\x72\x7e\xda\x7d\x33\x99\xa4\xeb\xcd\x36\xed\xe3\x03\x6b\x3f\x7f\x92\xd2\x91\x4e\x12\xb0\x35\x24\x81\x7f\x59\xf3\x07\x71\xf6\x0f\x93\x5f\x72\xb4\x10\x5c\x4b\x0a\x7c\xc8\x14\x9e\xba\xdd\xb5\xd2\x25\x7f\x64\x44\xc8\x19\x5d\x44\x05\x70\xb6\x8e\x48\xb4\x24\x6d\xff\x63\xe2\xef\x3a\x30\x4f\xbe\x38\x34\xa9\xe2\x9a\x40\xe4\x02\x27\x85\xbd\x2a\xc9\xb0\x94\x74\xb2\x0c\x32\xbc\x7d\x70\x17\x64\x0c\xf8\xe2\x0f\x71\x11\x95\x5a\xd7\x5f\x94\x51\xbc\x9b\x74\xcb\xed\xd3\x59\xee\xe2\x53\x48\xd3\x10\x50\x07\x4a\x9f\x56\x92\xfa\x5b\x56\x67\xdd\x36\xcb\xc5\x8e\xcc\xe6\x7a\xec\x6e\x60\x2e\x53\x7b\xb3\xbc\xcd\x95\x20\x11\xcd\x66\x8e\x42\xd8\xb5\xc3\xb6\x8a\x96\x4f\x1b\x0f\xa7\x01\x73\x4c\xed\x17\x3e\xaf\x23\xca\x02\xc6\x11\x36\x82\x59\x23\xad\xfc\x39\xa3\xa3\x3e\x5f\x3e\x2d\x1d\x52\x85\x8b\x0e\x0e\x90\xdc\x0a\xb0\xa5\x3d\x69\x9f\x91\x8c\xec\x24\x5a\x71\x03\x3a\x2f\x7b\xb7\x03\x0a\x5f\x49\x44\x05\x00\xee\x7a\x33\x49\x77\x1a\x2f\x8f\xaa\xa0\xee\x9d\x0d\x6a\x83\xc8\xce\x06\x44\x8a\xfa\x91\x7f\x32\x03\xb5\xc1\x9d\x75\x04\xa6\x39\x67\x0a\x5b\xdf\x56\x35\xac\x83\xb6\x32\x2d\xd8\x13\x53\x74\xe3\xf6\xd1\x61\x87\x78\x61\xd7\x49\x5f\xaf\xf7\x18\xbc\x70\x28\x64\xc3\xe8\x3e\x90\x36\xf1\x08\x6b\x8f\xe8\x46\xdc\xb4\xe9\x4a\x6c\x47\x2a\xd6\x97\xa8\x38\x9a\x12\x65\xea\x80\xfa\x62\xa7\x6f\x90\x4c\x76\x16\xdb\xbd\xd3\xad\xa8\x67\x02\xdd\x4e\xf5\x0d\x51\xd2\xdd\x78\x15\x34\x31\xbb\x53\x87\x2e\x4d\xb5\x48\xfa\x7c\xbd\x5b\xf4\x3a\x4e\xf2\xb5\xb5\xaa\x3c\xdd\x05\xbb\x9e\x5e\x76\x42\x1f\x80\x72\x82\x21\xb0\x3d\xb7\xc0\xa8\x70\x78\x03\x9f\x61\x45\x95\x5f\xe3\x8d\xb5\xc3\x6b\xe5\x87\xad\x2c\xe7\x53\x6c\xaf\x8d\xa6\x6c\xbd\xb9\x4f\x49\x6a\x5d\xc7\xb2\x0b\x1d\xe5\x89\x8d\x22\x96\x1a\xd7\x6a\xd7\xfb\xa0\x08\x84\x9a\xfc\xaf\x85\x63\xd1\x6e\xd9\x2e\x0f\x59\x1d\x2e\xf6\xf6\x79\x18\x19\x37\xde\x81\xd1\x42\x90\x09\xfd\xbc\x91\x28\x7e\x05\x9f\x5a\xf5\x52\x2f\x73\x09\x69\x1b\xac\x1d\x80\xcc\x5d\x68\xfb\x6e\xa5\x1f\x05\x55\x8a\xb0\x21\x03\x58\x61\xf9\xa7\x93\xe3\xe3\x71\x9e\xdc\x13\x75\x7c\x4f\x96\x88\x8b\xe8\xa7\x4d\x51\x3c\x76\x8f\x0a\x6e\xf6\x75\xa6\xd4\x42\x9e\x1c\x1f\x4f\xa9\x9a\xe5\xe3\xa3\x84\xcf\x4d\xbc\x11\x17\x53\xf3\x8f\x63\x2a\x65\x4e\xe4\xf1\xf7\xdf\x7d\x57\x6c\xf1\x18\x27\xf7\x53\x93\x17\x59\xb5\xe2\x44\x5b\x7e\x53\xad\x9c\xd3\x1d\x69\x55\x70\x36\x22\x9f\x35\x91\xd6\xd5\x66\x6e\x0b\x39\x21\x51\xef\xd3\x0d\x92\x4b\xa6\xf0\xe7\x13\xf4\xd1\x14\xd2\x46\x3f\xf2\x5c\x48\x74\x86\x97\x87\x7c\x72\x38\xe7\x4c\xcd\xd0\x47\xf8\x5f\xfb\xd3\x23\x21\xf7\xe8\x17\x82\x85\xdd\x5f\x23\xb0\x78\xb0\x66\xf0\x42\x88\x9c\x49\x5b\xa1\xfb\xbb\x7f\x77\x25\xba\x4f\xd0\xb7\xc7\xdf\xfd\x3b\xfa\x23\xfc\xff\xff\x83\xfe\xd8\xa0\xa9\x75\xcb\xb9\x2d\xca\xa7\xd7\xb6\x06\x2b\xb5\x41\xb1\xa2\x53\xc1\x8b\x9d\xaa\x6d\xf9\x9e\x26\xf7\x7c\x32\x19\x29\x3a\x27\x26\x38\x74\x84\x45\x05\x4b\x69\x43\x00\x13\x6a\x4b\xab\x98\xea\x94\x05\xb4\xa9\xed\xd4\xa4\x7e\xb8\xe3\x26\xf3\xa2\xb4\x04\xf8\x54\xa2\x72\x1d\x54\xc2\x57\x24\xd5\xa7\xa2\x8b\xff\xc4\x59\x67\xaa\x05\xe0\x8a\x34\xa7\xb0\x5c\x90\xf7\x83\x86\x4e\x7d\xbe\xae\x74\x79\x35\xda\xe0\x8b\x71\x21\xc3\xd4\x5e\xca\x7d\x2c\x2b\x9d\xaf\xf7\x1c\xdf\x70\xb1\x95\xbc\x7c\x4f\x2a\x21\x2c\x2d\x61\x7c\x5d\x91\x8a\xb0\x70\x15\x64\x1d\x70\xe1\x81\x84\x8c\x5e\x6b\xc1\xfe\xd7\x5b\xa1\xa8\x30\xbe\xb6\x76\x87\x5e\x4f\xfd\xcc\x7f\xb2\x6e\x98\xe0\x78\x73\x6f\x17\x30\xe6\x30\x5a\x7d\xc5\x69\x96\x58\x33\xe2\x1a\xb4\x81\x75\x1b\x7a\x63\xf6\x8c\x48\xd3\x38\x78\x81\x21\xfa\x8e\x39\xc9\xc4\x26\xa5\xd4\xee\x27\xe4\x60\xef\x02\x9e\xa1\x02\xb5\xb7\x05\x9f\x33\xa6\xb2\x82\x45\x38\xb8\x4b\x10\xd9\x82\xb2\x38\x58\x73\x8f\x0d\x11\x2d\x0c\xd8\xed\x01\x12\x18\x1c\xa9\x6a\x86\x99\x51\xa2\x26\x38\xa1\x6c\x7a\x10\x80\x19\x40\xae\x4c\xc8\xb3\xea\x56\xf2\x16\xcb\xfb\xdd\x3a\x07\xb7\x06\xff\xa7\x69\x01\x40\x6d\x28\xd2\xfa\x0e\x69\x25\x93\x5b\x61\x79\xbf\xb3\xe2\xe8\x7a\x29\xda\x94\x45\x77\xb1\xf7\x24\x14\xda\x00\xd9\x4f\x2b\x57\x01\xfa\x93\x0b\x9f\x34\x85\x47\x69\x46\xd2\x32\x06\x46\x79\xfc\xeb\x08\xc1\xa8\xc5\x81\x17\x0a\x20\x12\xe6\x5a\xf1\x4b\x8d\x79\x96\x2d\xcd\x51\xd2\x37\x17\x96\xf7\xd2\x57\xa0\x40\x72\x8e\xb3\xec\x00\x09\x92\x4b\x7d\xf5\x1e\x20\x49\xb2\xc9\xa1\x43\x2b\x4c\x51\xc6\xa7\x34\xc1\x19\x1a\x67\x3c\xb9\x97\x43\xa6\xaf\x12\x36\x35\x37\xe0\x42\xf0\x84\x48\x19\xdc\xbd\x45\x5c\xbe\x0d\x62\x85\xf2\x13\x8a\x88\x39\x65\x54\x2a\x9a\x94\x2a\x4a\x1f\x0d\x99\x29\xa7\xa2\xb5\xa1\x84\x9b\xa2\x19\x30\x5c\x2d\x0b\x10\x83\x9f\x90\x33\x8b\x05\x0b\x0c\xdd\xa6\x45\xbb\xa8\x8a\x26\xea\xdd\x41\x96\xb7\xdb\x9e\x91\x8a\x4f\xc3\x1a\x7a\x3e\xb5\x9f\xc1\x19\x5a\x45\x31\xd7\x31\x39\x7b\x6a\xf0\x64\xee\xc1\xc3\x1c\x51\x14\x31\x23\xd1\xdd\xe6\x43\x29\x5e\x59\xf2\x2b\x0c\xb9\x21\xe5\x75\x1d\x4d\x9f\x9a\x12\xd5\x16\x7e\xb8\xec\x17\x73\xa5\xa7\x2d\xc4\xbc\xbe\x24\x1e\x34\x91\xb8\xe5\xd1\x6b\xaf\xaf\x92\x03\x5f\x37\x1a\x4b\x1b\x32\x72\xe8\xb1\xed\x34\x3f\x34\xf8\x83\xd0\x49\xa9\x08\x71\x95\xa2\x5e\x53\xad\x68\x7f\x49\x77\x65\x8b\x6b\x05\x89\x8e\x75\xa3\xdd\x4a\x37\xe2\x80\x44\x63\x8b\xc9\x16\x12\x4d\x9b\x07\xd5\xd2\x5e\x21\xea\x32\x3a\x0c\xc5\xc1\xd3\x07\x5a\x54\x01\xb2\xbd\xad\xb4\x67\xe8\x19\xb5\x32\x66\x84\x44\xb1\xb1\x81\xae\x34\x95\x4a\x66\x14\x35\x05\xb2\x6c\x7d\x7d\x2d\xd5\xe6\x49\x42\x48\x5a\x1b\x5c\xa0\x47\xf4\xea\x70\x2e\xae\xb0\x9a\x99\x24\x9b\x39\x57\xa6\x08\x85\xc1\xb9\x70\x86\x16\x03\xdc\x30\xce\xf8\x18\x2e\x24\x80\xc0\x70\xe9\x16\x41\xb8\xb4\x99\x37\x49\xd1\xd7\xc1\xfd\xe2\x13\xc0\x9a\x8a\x9c\xed\x10\xfe\xa2\x6c\x9d\x69\x04\xc1\x88\x11\xd2\x8f\xd0\x55\x29\xe3\x30\x98\xd5\x04\x6b\x96\xbf\x32\x7b\xf5\x85\x20\x33\x4a\x93\xd8\x09\x64\x46\x44\x9f\x3b\x80\xcc\x68\x35\xc6\x8c\x4f\x9f\x34\x87\x43\x4f\xea\x9c\xb7\x0f\xac\x35\x59\xeb\x46\xb4\x8a\xc8\xc7\x1d\x84\x65\x1d\x11\xbd\x2e\x38\x90\x52\x0d\x80\x97\x85\x03\x29\x0d\xe6\x35\xc3\x81\x94\x86\xfa\x7a\xe1\x40\x6a\x06\xda\x02\x0e\xc4\x78\x77\x47\x9a\xa8\xdb\x31\x05\x88\x13\x1c\xe7\x93\x1b\xb8\xef\x56\x8e\xd1\x16\x9a\x35\xd7\x87\x13\xe1\x2c\x2a\x15\x8c\xd6\xc6\x94\x37\xc5\xc3\x60\xb9\x15\xed\x79\xf7\x0b\x95\x46\x7b\x5e\x64\x98\xc5\x6c\x1f\x0a\xf9\x09\x92\x68\xf2\x33\x8c\xaa\xa8\x70\x7e\x60\xad\x3a\x7a\x14\xc6\x90\x99\xe0\x85\xcd\xd1\x69\x02\x8b\x7d\x3d\xd9\x08\xdd\x90\x56\x00\x10\x23\x62\xf5\xad\xd2\xd9\x3f\x96\xf0\x16\x67\xfc\xd1\x4a\x6c\x40\x7e\xb6\x36\x73\x47\x25\x22\xc4\x6a\x29\xd1\x74\x4b\xac\x96\x68\x22\x7b\xac\x96\xfa\x0d\x7e\xb5\x58\x2d\xa5\x3d\x6f\x87\xd5\x52\xb7\xe5\x1b\x60\xb5\x44\xcd\x7c\x31\x58\x2d\xa5\x15\xfd\x62\xb0\x5a\x4a\xf3\xda\x63\xb5\x7c\x21\x58\x2d\xeb\xf9\x48\x2d\x1a\x49\xfd\xe1\xed\x86\x46\x52\x2b\xc2\x37\xb3\x88\x6d\x13\x69\x41\x60\x78\x66\x34\x92\x68\x02\xfb\xc0\x9b\xee\x81\x37\xb5\xc4\x67\xfb\x86\xba\xd7\x36\x1a\xa7\x7c\x91\xb5\xc4\x23\x89\xf6\xa7\xb5\x55\x6b\x17\x94\xf8\xb4\xa1\x5e\x60\x5c\x6f\xab\x71\xf7\xa2\x55\x94\x16\xc5\x48\x4b\x46\x2e\x2b\xdf\x08\xe7\xa1\x63\x71\x4f\xb9\x1b\x84\x8c\x95\x96\xd7\x9b\xe3\x0d\x2d\xee\xd2\xee\x5a\x53\xa6\x6d\x0b\x7a\x75\x59\x35\x1d\xed\xde\x6e\x10\x60\xff\xae\xb7\x3d\x41\xe5\xc6\xdd\x34\xbb\xee\x22\xf3\x39\xc7\x51\x21\x49\x9f\x30\x54\x14\x92\x34\xb2\x71\x29\x4f\x4a\xab\xff\xf6\xcb\x29\x95\x4a\x34\x06\x4d\x54\x46\xb8\x8d\x87\x6d\x91\x6f\x92\xdd\x38\xdd\xec\xb3\x39\x99\x73\xb1\x2e\x62\xa3\xf6\x4b\xa9\xb8\xc0\xd3\x75\x8a\x78\xbd\x5a\xb5\x98\x91\xb9\x16\x82\x46\x5d\x1b\x69\xbb\xdf\x3e\x9b\xcc\x26\x35\xd4\x54\x13\x0d\xfc\x67\xfa\xdd\xd4\x56\x08\x6d\xbb\xdd\xdb\x6e\xb3\x2b\x45\xda\xcd\x50\xec\xd0\x84\x56\x5b\xae\xec\x4b\x91\x97\x14\xe8\xbb\xd6\x0f\xef\xc3\x20\x36\xf4\xb4\x37\xe0\xbd\x54\x3b\x04\x47\x9c\x24\xe2\x30\x94\x51\x23\xe7\x57\x75\x04\xd1\xba\x3b\xdd\x66\x8b\x65\xcf\x45\x63\x40\x58\x1b\xd3\x91\x29\xef\xad\x15\xa7\x10\xe9\xbd\x4c\xdf\xe3\x65\x4d\x86\x49\x3b\xdb\x24\x65\xea\xcf\xff\xd6\xc5\x43\x0e\x42\xbe\x5d\xb7\x09\xcd\x08\xc2\x49\x42\xa4\xb1\x66\xd9\x80\x41\x53\x39\x31\x17\xd9\x36\xbb\xaa\x0f\x87\x9e\xb7\x66\x99\x1e\x44\x29\x2d\x88\xc7\x5c\xc0\x33\xc1\xf3\xe9\xcc\x59\x33\x34\x15\xea\xa9\xd5\xed\xe5\xcf\x26\xbc\x63\x9b\xbd\xfc\x21\xa7\xd9\x66\xb6\xa2\x22\xa2\x4a\x0f\xf3\xc3\xe0\x16\xc9\x99\xa7\xff\x31\x34\x5b\xbb\xb1\xd5\x41\xb7\xef\xd3\x7e\xeb\x2d\xa3\xd0\xcd\x81\x03\x0e\x99\xf0\x2c\x03\xdb\x9e\x24\xf3\x87\xa6\xca\x8b\x30\xe1\x5b\xba\x61\x7d\x39\xf8\x1a\x3c\x04\x52\xe1\xf9\xa2\x95\x44\x73\x65\x84\x2d\x89\xdc\xe8\xcb\xae\x3d\x13\xb0\xc3\x19\x61\x75\xd6\x9e\x4f\x55\x00\xd0\x37\x16\x36\xe5\xc2\x78\x76\x16\x3a\xe5\x96\xe4\x99\xc3\xa7\xea\xe6\xd1\x81\x05\x44\xd1\xc4\x05\x8f\x77\x7e\x69\x23\xc7\xf7\xf4\xfc\x86\xac\x17\xc5\x1d\xbb\x92\x2e\xe3\x65\x11\xb8\x68\x44\xe2\x90\x93\x00\x6e\xa2\xb5\x13\x28\x6e\xad\x07\x20\xb8\x1b\xcc\x1b\x13\x58\xe5\x82\xa7\x20\xea\x92\xa4\x87\x38\x59\x26\x19\x4d\x02\x15\x70\x2a\xf0\x62\x56\xc7\x6e\xaa\x25\xca\xf7\xe8\x02\x2b\x47\xb6\x73\x74\x81\x26\x30\xe0\x2e\x51\xa3\x8e\xae\xa0\xba\xe5\x1e\xf5\xa0\x06\xf5\xe0\xc0\xe7\xf5\xb2\x02\xd6\xf8\x05\xd3\x45\xab\xe7\x6e\x0f\x7d\xf0\x02\xd0\x07\x9b\x1c\xbe\x02\xd7\x20\x3a\x76\x7b\x38\x86\x77\xad\xe0\x18\xfc\x25\xf8\xaa\x32\xec\x9b\xcf\xe3\x0b\x67\x6e\x57\x07\xf6\x92\xf0\x0b\x35\xe2\x42\x17\xb9\x69\x15\xfe\xc2\x2a\xba\x68\xb5\x2e\x2f\x8b\x86\xd0\x6d\x65\x3a\x01\x1d\xd4\xde\x5d\xaf\x04\xf6\xa0\x79\x1b\x5e\xc9\xb9\xd9\x65\x6c\x7f\xb7\xba\x0d\x61\x7c\x7f\x17\xed\xa6\x5b\xa8\xbf\xa7\x87\xb7\x15\xee\x5f\x60\x99\x6f\x16\xf2\xdf\x73\x2e\x55\x22\xd0\x8c\x67\x00\x30\x1f\xad\x96\xef\xc0\x07\xab\xfa\x05\x72\x9b\x71\xb3\x20\x89\xd1\xb6\xaa\x85\x5c\x57\x92\xd4\x5b\x0f\xee\x0f\xe4\xdf\xdd\x06\xf8\x87\x2b\xbb\x69\x90\xff\x9a\xc1\xad\x12\x3d\x36\x0c\xf4\x0f\x7a\x5c\xe9\x74\x72\xb3\x6b\xe5\x78\x2a\x13\xcb\x06\x31\x41\x15\xc0\xf7\xed\x41\x10\xe6\xf8\xf3\x68\x81\x05\xce\x32\x92\x51\x39\x6f\x3a\xf3\x94\x29\x32\x2d\x53\x5a\x64\x8c\xfd\xd3\xf7\xab\x03\x30\x63\xef\xa3\xab\xf1\x0b\xfe\xc7\x7c\x3e\x36\xa4\xe8\x06\x62\x0b\x23\x28\x8e\x44\xce\x42\x08\x17\xbf\x31\x08\xf0\x6a\x4d\xd1\xe0\x49\x0e\xd1\x39\x38\x99\x41\x15\x8e\x09\xa6\x82\x11\x29\x3b\x16\x6e\x96\xb1\x9e\x68\x6e\x60\xfa\xf7\x48\x42\x3d\x8c\xe2\x84\x93\x20\x53\x19\xc2\x37\x1c\x76\xeb\x2a\x56\xb1\x0f\x06\xac\x06\x03\xd6\xaf\xcd\x6b\x0c\x08\x2c\x6a\x87\x77\x0c\x0a\x6c\xda\xfe\x5d\x30\x81\x1d\x06\x07\xbe\x70\x14\xdd\xd3\x04\xd0\xbd\x6c\xc4\xe3\x53\x04\x3b\xee\x43\x02\xdf\x5e\x48\x60\xf3\xb1\xed\x14\x16\xb8\x26\xf5\xde\xf5\xb2\x6d\x0c\x96\x4f\x07\x7f\xd2\x38\x2c\xef\xf5\x0a\xbe\x68\x19\x8b\x55\xe4\xab\xef\xe3\xb1\x9e\x28\x1e\xab\x66\x89\xbb\xc5\x64\x6d\x24\x1e\x3f\x7f\xb8\x48\xb9\x00\xd5\x53\x86\x8c\xac\xf1\x92\xca\x7c\x3c\x7a\xf2\xa3\x57\x3b\xe7\xb6\x27\xf0\x93\x27\x0a\x23\x12\x09\x4d\x67\x63\x92\xa6\x60\x82\x51\xdc\x16\x63\x28\x68\x87\x11\x43\xdf\x9a\xf9\x62\xa9\x89\x1d\x67\x9c\x4d\x25\x4d\x49\x50\xf2\xad\x90\xac\x4c\x52\xd6\x90\xc1\xfe\x66\x19\x11\x4e\x83\x17\xe8\x6b\x49\x59\x42\x42\xad\x5e\xa0\x94\x13\xc9\xbe\xd2\x02\xd8\x03\x41\x98\x2d\xd1\x3d\xe3\x8f\x19\x49\xa7\xb0\x43\xe5\xc1\x1c\x22\x4a\x0e\x10\x55\xfe\x33\x41\x70\x32\xd3\x1c\x76\xa8\xc7\x0e\x7e\x59\x23\x02\x12\xfb\x6d\x50\x76\xc4\x37\xf3\xcd\x11\x42\x03\x86\x26\x38\x51\x07\x48\xe6\xe3\xa2\xfd\x94\x9b\x3a\x12\x0f\x84\x85\x13\x2f\x1a\x79\xb2\x70\xa1\xda\xf0\xa0\x12\xb5\xb9\xf3\xa6\x09\xa0\x97\x51\xbc\x95\x67\xf7\x01\x6f\x03\x6b\xf3\x31\x97\xd6\x05\x80\x38\xf3\x87\xc9\xe6\xb0\x7a\x24\x2f\x40\xd3\x37\xa8\x58\x2b\x8a\xfb\xe1\xd2\x54\xba\x8e\xa5\x70\xc3\x5b\x10\x7f\x6b\x26\x81\x76\xcd\x72\xa7\xfc\x91\x49\x25\x08\x9e\x5b\xd5\x54\x33\x6f\x70\xe1\x18\x27\xbc\x1e\x3d\x15\xe6\xd2\xee\xb2\xc5\xe7\x94\xdd\xeb\xdd\x2d\xb0\xcb\xa0\x28\x0a\xf4\x5c\xb3\x69\x3f\x50\x86\xa3\x18\xc4\x0d\x76\x2d\xcb\x3b\x05\xc5\x04\xe5\x0f\x97\x4d\xb0\x71\x0a\xaf\x43\x72\xeb\x62\xc6\x93\x50\x09\x06\x8d\xa1\x50\x99\x66\x75\xa6\xf0\x03\x46\x0a\x03\x5c\xe1\x8c\x64\x8b\xa0\x98\xc2\x02\x0b\xe5\xeb\x47\x1a\x24\x23\xcd\x1d\xe6\x39\x03\xf8\x29\xab\x21\x3e\x5a\xc0\x1a\x6b\x47\x28\x1a\x3f\x1a\xb2\x81\xfa\x0a\x0a\xd2\x72\x36\xcd\x96\x08\xa7\x0f\x54\x16\x38\x72\x09\x67\x32\x9f\x13\x51\x2a\x52\x64\x9c\xcc\x08\x3b\x5a\xd1\x63\xd3\xb2\xda\x03\xce\x68\xea\x8a\xe6\xe9\x1f\xc7\x64\xa2\xef\xbd\x05\x16\xd2\x59\x24\x6b\xac\x89\x76\x73\x53\xbd\x56\x2f\x76\x26\x7f\x0e\x8f\x1d\x9a\x17\x27\x14\x5b\xdd\xe5\xb8\x7c\x3e\x83\xb2\x8f\x4d\x01\x7e\x95\x49\xa1\xd5\x17\x93\x5d\x85\xb3\x75\xf9\x9e\xfa\x05\x4d\x0d\xb9\xf1\x1e\xe9\x7e\x9c\x0c\x64\x06\xd7\xc9\xfc\x53\x9a\xa0\x1d\xb5\x31\x06\x86\x67\x93\x50\xb8\x14\xa4\xc2\x8a\x26\xae\x84\xa5\x2f\x1d\x6c\xbe\x6e\xde\xda\x6d\x6b\xb3\xca\x04\x67\xd5\x1d\x6e\x5e\xcb\x1b\xf3\xfe\x6a\xde\x67\x8f\x9b\x69\x7b\x65\xb0\x66\xc2\xb3\xac\x0b\x4a\x5c\x69\xe6\xa7\xc5\xe7\xab\x47\x54\xf4\xa3\x37\xc0\xed\x05\x9c\x1a\x63\xf6\xc3\x99\x95\x2c\xa4\xb2\xbb\x14\xbe\x64\x78\xe8\xd2\x9a\x15\x87\x8c\x4f\x00\x47\x30\x6b\x2a\x82\xba\x10\x7c\x4e\xbb\xe0\x50\x18\x0c\xda\x6b\xe7\xc0\x5f\xe3\xba\x71\x6e\x7e\x28\x76\x65\xc8\xcb\xf6\x08\xa1\x5e\x98\x19\x39\x63\xc5\x19\x9a\xe3\x4a\x29\xde\x56\x0b\xbe\x4e\x4b\xee\xa1\xb9\x31\x51\xd8\xd5\x93\xa6\xa2\xda\x3d\x59\x42\x9a\x7a\xf6\x88\x97\x45\x48\x6b\x97\xe3\x54\x04\x8d\xda\xf3\x82\x1d\x95\x05\x27\xc6\x07\x40\x98\xfd\x32\xab\xd0\xe6\x04\x9d\xd6\x91\x61\xe7\xb3\xe4\xe6\xfc\x94\x42\x76\x78\xec\x43\xf9\xba\xcb\x6d\x18\x1f\x86\xa0\x45\x04\xc3\x59\xbd\x54\x1f\x23\xca\xd9\xf9\x1a\x95\xda\x41\x46\x97\x73\x9e\xb3\xab\xfa\x56\x9f\x61\xcd\x2c\x59\xb7\x5a\xac\x2d\xa3\xe4\xbb\x61\x1b\xb8\x1e\x3d\xa2\x41\xed\x79\x5f\x0f\x98\xd4\x45\x87\x98\x68\xd9\xc5\xd6\xda\xf3\x40\xcf\x36\x1e\x69\x42\x33\x22\x8f\xd0\xa0\x46\x9f\x70\xd1\x40\x20\x55\x01\xde\x12\xf8\x45\x9d\xbc\x93\x0b\x1a\xa0\x5d\x3b\xa9\x06\x51\x5b\x91\xb6\xb0\x52\x08\xa2\xc7\x9c\x18\x2f\x09\x67\x80\xcb\x00\xae\x48\x41\x4d\x41\x46\x2d\x5e\x2a\x30\xb8\x69\x5e\x40\x6d\x6a\x91\x29\x12\xee\x3f\xd0\x32\xb6\x22\x02\x5b\x40\xff\x62\x54\x0d\x5b\xba\x0b\x14\xcf\xf6\xc1\x56\xae\xd7\x5b\xfd\x45\x75\x6f\x6a\x47\x78\x1b\xb7\xde\x79\x74\x5e\x2e\xef\xee\xf2\x79\x0f\x9f\x3a\xfb\x13\x46\x13\x41\xc0\x44\x39\xf7\xd9\x0b\x2c\x25\x42\x2a\xce\xe1\x86\xba\x39\xfb\xe9\xf8\x6e\x80\x88\x4a\xa0\x5e\xd9\x90\x25\xf2\xe1\x40\x0b\xb4\xbf\xe5\x44\xe9\x9f\x1b\xa2\xfb\xe8\x9c\x30\x09\x9c\x80\xb6\x2d\xd6\xec\x16\x46\xff\xf7\x2c\xfe\x7e\x05\xc9\x57\x62\x45\x81\x76\x7d\xe1\x4c\x4d\xa6\x00\x0f\x66\x96\x56\xd6\x50\x8c\x29\xda\xde\xaf\x83\x08\xdf\x20\x36\x84\xfd\x2d\x67\x1d\xc5\xa4\xd3\xe2\xa3\x60\x14\x0d\x52\xd8\x7c\x81\x05\xad\xc1\xa3\x59\x1d\x74\x62\xbe\xa9\x6d\x7d\x1d\x13\x29\x62\x70\x6d\x09\x7c\x54\xa0\xa9\x23\x25\x08\x01\x16\xe2\xe9\xc9\xde\xf5\x36\xe7\xc1\x4f\x2c\xf8\xe8\x68\xc8\x3e\x3a\x93\x69\xf1\xab\xaf\xed\x69\x02\x99\x48\x8a\x72\xd0\x99\xe2\x56\xa0\xd9\x94\x4a\xff\x03\x80\xc3\xc9\x3c\x53\x06\xe6\x77\x02\x45\xe7\xdd\x40\xcd\x93\x3a\x2e\x21\x30\x4b\x66\x17\x7c\xbb\x9a\xbf\x74\x32\x22\x59\x17\xd9\x71\x30\xe9\x67\x52\xd3\x77\x72\xdf\x70\x3a\x37\x01\xb2\x2e\x26\x03\x92\x9b\x83\x3a\x35\x5a\x89\xb1\xd3\x65\x06\x34\x98\x20\x30\xb2\x95\x43\x85\x4c\x36\x80\xde\x45\x2b\x5b\x1b\x1b\x9b\xf1\xd1\x3b\xb3\xdc\x18\x7a\x41\x58\x0d\x99\xc8\x19\x00\x68\x79\x93\x3b\x46\x92\x08\x6a\x6c\xdf\x09\x67\x46\x06\xb0\xc6\x93\xa9\x66\x13\x5a\xf2\x03\xbf\x0b\x67\xa0\x51\xf1\x5c\x82\xbb\x7f\x4e\x94\xbe\xa0\xbe\x06\x70\x7c\xe3\xf4\x38\x40\x0b\x41\xe7\x54\xd1\x07\xe2\x81\xf9\xc2\xad\x3b\xc5\x0a\x67\x7c\xda\x13\x8a\x4e\x70\xa2\x6e\xf1\x56\x3a\x33\xb6\xcd\x6c\xea\x40\x77\xc3\x40\x83\x33\xbd\xf8\x53\xc2\x88\x80\x89\x42\xc9\xd1\xda\x23\xdc\xb5\x18\x69\xc1\xb9\x01\xaa\x37\x31\xe0\xa6\xd2\xdb\x18\x70\xae\xf8\x5c\x6b\xa4\x38\xcb\x96\x00\x5a\xaa\x9f\xcc\xb0\x9c\xb9\x8d\x36\x48\xa7\x6d\xee\x26\xbb\xb8\xa7\x38\x99\x91\x1b\xa8\x31\x5f\xb7\xb8\xa5\x51\xbe\x23\x2c\x9f\xbf\x3b\x41\xff\x5d\xcc\xf1\xb4\x77\xfa\x63\x7f\x74\x36\xb8\xe9\xfd\x70\xde\x3f\x0b\xe6\x63\x9f\x7c\x1c\xdc\xdc\x54\x7f\xfd\x71\x70\x5b\xfd\xf1\xea\xf2\xea\xee\xbc\x77\x5b\xd7\xca\xf9\xe5\xe5\x4f\x77\x57\xa3\xf7\xbd\xc1\xf9\xdd\x75\xbf\xe6\xd3\xbb\x5b\xff\xd0\x3e\xfb\x9f\xe0\x10\x41\xbc\x07\x44\xa7\xd4\x8f\xb6\x7c\xce\x0e\x51\xfc\xe2\x09\xba\xb3\xde\x1b\x6a\xd1\xce\x5d\xd0\x84\xc9\x4d\x78\xc4\x52\xb3\x2a\x28\x2a\x3c\x64\xc8\x7d\xae\xe7\xde\xf4\xa9\x71\x2b\x25\x33\x82\x32\xce\xef\xf3\x85\xe5\x60\x26\xc0\x91\x71\x63\x91\x21\x32\x68\xed\xc7\xc1\xed\x89\xf7\x22\x55\x1b\x0b\x52\x10\x1d\xa9\xc3\xb8\xb0\xe3\x9a\x60\xe4\x58\x08\xf2\x00\x67\xd2\x7b\x17\x83\x1e\xfc\x06\xac\xea\xc7\xb4\x86\x99\x2a\x75\x93\xa6\xb6\xe0\x81\x9b\x58\xd0\x70\xbc\x7d\xab\x56\xd3\x2f\x87\x81\xbc\x44\x63\x92\xe0\xdc\x38\xdf\xf4\x75\x24\x04\x17\xe1\x80\x8b\x6d\xdf\xb2\xd1\x77\x55\x29\x23\x06\xb6\x97\x70\x46\xf4\x27\xc1\xc9\xd1\xfa\x32\xe8\xd2\x0e\xb2\x6d\x66\x61\x31\x5d\x9d\xe9\xc2\x63\x02\x50\x31\x9a\x73\x7b\x00\x33\x0a\xde\x3c\xac\xd0\x23\x81\x28\xd7\xdc\x62\x56\x1a\x0d\x59\x9f\x40\xe8\xce\xd8\xa1\x1d\x40\x71\x14\xfd\xda\xc8\x32\x77\x21\x16\xeb\xef\x25\xa9\x63\x97\x5b\x84\x2a\x9e\x99\x46\x81\x87\x3a\xd7\x2a\x8c\xb8\xc1\xe2\xef\x78\x76\x8d\xe5\x79\x85\x14\x54\xbd\x37\xd6\xb0\x74\xcd\x5c\xdb\x8c\xc7\xa5\x67\x44\x10\x3a\xdd\xf2\xd5\x7d\x58\xc0\xda\xb5\xba\xe5\x29\x5e\x6a\xe2\x80\x98\x06\x99\x2f\x16\x5c\x28\xd4\xd0\x06\x82\x93\x6e\xc6\x07\x37\x83\x9d\x87\x67\x51\xd0\x88\x96\x03\x64\x0d\xca\x5d\xbb\x88\x75\xbb\xae\xc5\xb9\x0f\x53\x5f\x41\x5d\xf3\x88\x8b\xf3\x48\xf1\x8d\x28\xb4\x4e\x44\xdd\x26\x92\x69\xa1\xaf\xe1\xb6\xe0\xbd\x75\xbd\x5f\xba\x16\x6a\xb7\x3c\x23\x13\x35\xaa\xf5\xa6\xac\x30\x1c\xea\x16\x59\x53\x92\x0f\x9d\xce\x76\xd0\x62\x7b\x59\xfe\x7b\xeb\xed\xd2\x02\x7c\xa0\xc7\x0b\xce\x95\x91\x22\x0b\x4d\x03\xb9\xd5\x04\x23\x80\xed\xd4\x54\x0a\x28\x44\x35\x2d\x99\xdf\x33\xfe\xc8\xbc\xc5\x5c\x1e\x0d\x59\x1f\x43\xf9\x0a\xaf\x2e\xd8\x80\x05\x23\xab\xaf\x95\xd2\x23\x34\xfc\x57\x82\x21\x51\xd0\xbd\x2d\xf5\x93\x2d\x51\x51\xf1\x20\xfa\xae\xcd\xe9\x31\xd6\x64\x27\xa8\x99\x09\x5b\xac\x6e\x45\x16\xd6\xe2\x6d\xe6\x59\x84\x73\x83\xd3\x54\x77\x75\x84\x3e\x39\xfb\x0c\xc4\x57\x14\x95\x3a\x94\xb9\x71\x32\xbc\x74\x49\xf2\x75\x0b\xbb\x8b\xbc\xf3\x5d\x47\x5c\xac\x5e\x60\x9f\x63\x57\xb3\xca\x91\x9a\xcc\x98\xb1\x9b\x76\x08\x2f\x3b\xf5\x1f\xdd\x90\xd5\xf1\xa7\xef\x01\xbc\x5b\x11\xa1\x95\x4d\x90\x19\x58\xb6\xfc\x5f\x66\xb3\x20\xdf\xdc\xc6\x26\xa7\x0e\x90\xd9\x7a\x26\xf5\xf9\x01\xcf\x9a\x16\x03\xc6\x00\x44\x91\x81\x1c\x70\x84\x7a\x50\xb7\x02\x2a\x12\xe8\xab\xd0\x45\xf1\xd0\x29\xe3\xeb\x02\x07\x1a\x88\x29\x09\x88\xe9\xa6\x99\x98\x24\x50\x53\x11\x5a\xbd\x1b\x8a\xda\x41\x9a\x8d\xe6\x2d\xb8\x8a\xb9\xd3\x3e\xb9\xa6\x83\x8a\xfd\x12\x41\x38\x95\xe1\x06\x1f\xfe\xb3\x7e\xe8\x1f\x72\x2c\x30\x53\x10\x5a\x62\x25\x6f\x41\x82\x10\x47\xf2\x19\x82\xb7\x98\x31\xd7\xc2\x4f\xe1\xe6\x3a\x57\xfa\x94\x3e\x10\x86\x68\x7a\x80\xe8\x11\x39\x3a\xb0\xc5\xe7\x64\x3e\x2e\xde\x9c\x69\xc9\x61\xc8\x2a\x29\x23\x47\xa8\x97\x49\x6e\xbf\x20\x2c\xc9\xa0\x4e\x4c\x10\x05\xe3\x29\xdf\x3a\x7f\xc6\x4b\xd0\x2f\x60\x2b\x8b\xe6\xb9\x7d\x10\x7c\x38\x64\x58\x1a\x5f\x73\x06\x27\xbd\xf8\xbd\xae\x16\x54\x14\x7f\xf0\x84\x80\x71\x95\x6b\xe8\xc9\x36\xc9\x80\x15\xaf\xda\x20\x78\x03\x36\xa6\x48\xe5\x09\x92\x62\xd0\xd7\x58\xa1\x8c\x60\xa9\xd0\x77\xdf\x74\x8a\xb9\x70\x13\x2c\xb8\xab\x3d\xbe\x45\x40\xaa\x8b\x68\x6b\x2a\x68\x07\x60\xf2\xb6\x02\xaf\x17\x20\x0f\xf4\x3e\x2b\x8e\x1e\xa8\xcc\xa1\xf4\x4e\x10\x43\x6f\x8a\xa7\x50\x25\x5d\x50\xa0\x51\x99\x1a\xf8\x88\x83\x7f\xb1\x6e\x49\x3b\xac\x1a\xca\xb2\xca\x13\x35\xea\x19\x64\x49\x16\xb1\x65\x33\xac\x86\xcc\x72\x56\x17\x8e\x11\x94\x5a\xe8\x65\x59\x1c\xcf\x85\x21\x64\x91\xe9\x09\x43\xe1\xa0\x23\xbf\x40\x17\xa0\x7e\xf9\x10\xa0\xb8\x88\xa0\x3f\x2c\x5a\x53\x1b\x32\x9f\x82\x16\xb6\x5d\x2b\xed\xd4\x59\x81\x9f\x51\x08\xae\xe9\xfe\xdc\x54\x70\x6a\x21\x0c\x37\x57\xd8\x5c\xe1\x35\xa9\x58\xde\x57\xc8\xc6\xbb\xee\xa0\xbd\xa8\x5c\x6f\xc5\x86\x6b\xf6\x91\xd7\x18\xc5\x1b\x36\x37\x90\x2d\xb6\x51\xc0\x7d\x2c\xda\x73\xf9\x65\xa3\xa1\x0f\x52\x88\x2d\x5f\xcf\x05\x8b\x58\x6d\xc7\x3a\xc0\x1c\x4d\xd3\x20\x74\x34\x88\xab\x83\xd0\x62\xc7\xf8\xec\x9b\x0d\xfe\xd1\xc5\xdb\x9e\xfe\x41\x31\x7f\x37\x15\x1f\x5c\x56\x9d\x78\xb3\xb0\xd7\x4b\xff\x86\x13\xc2\x92\xa5\xe9\xc9\xc1\x65\x55\x73\xe4\x1c\xb2\x10\x06\x93\x7b\xad\x78\x68\x8b\xb1\x1d\xa1\x3e\x5c\x34\xae\x36\x1b\x9e\x38\xb7\x41\xf0\xf2\x90\x69\xcd\x44\xdf\xf1\xd2\x0c\xda\xb5\x1f\x93\x78\xdd\x09\x30\xf9\xb9\x5b\x79\x5c\xe6\xeb\x51\x10\x9b\xb4\x09\x97\x1e\x0c\x6d\x00\xcc\x1b\xea\x4f\x4f\x50\xca\x93\x7b\x22\x8e\x05\x49\xa9\x3c\x01\x0f\xb8\x6a\x74\xbd\xcd\xb5\xb6\xbd\xb5\xa4\xd1\xb6\x4e\x6a\xb5\xaa\xd9\x1c\x0a\x8e\x41\x50\xb1\x2b\x69\x70\x80\xe8\x04\xd4\x09\x97\x5f\x60\x92\x0e\xac\x75\x1b\x11\xa6\xc4\x72\xc1\x29\x53\xde\x94\x55\x5a\x08\xa7\x69\x68\xa1\xad\x29\xc4\x56\xec\x22\x52\x66\xc3\x69\xdf\xce\x88\x24\x2e\x2c\xc0\x4c\x4a\x71\x5b\xcd\xdf\xb0\x8b\x05\x56\x33\x09\x19\x12\xf1\x1a\x58\xa5\x0b\x3e\xd5\x2b\x84\x17\x10\x55\x60\xac\x14\xc5\x47\x3e\x8e\x5f\x2a\x9a\x65\x43\xc6\x08\x49\x25\x82\x64\x86\xaf\x6a\x33\x71\xf4\xa7\x07\x08\xa7\x29\xfa\xdf\x5f\xbf\x3f\xff\xe5\xb6\x3f\x1a\x5c\x80\xcd\x79\x70\xde\xff\xe6\xc0\xff\x78\x79\x77\xeb\x7f\x35\x16\x96\x07\x22\xd0\x1c\xdf\x83\x8a\xc7\xa4\x91\xff\x20\xda\x3d\x1c\xa9\xcb\x51\xd2\x4f\x24\x71\x11\xa4\x56\x4c\xf1\x59\xed\x76\x0f\x1b\x2b\x96\x18\x9b\x5f\x07\xe5\xf7\xda\x7f\xb2\x9a\x06\x1d\xf1\xf8\x2e\x9c\x18\x38\x27\x4c\x69\x1e\x63\xad\x7d\x85\xee\x5b\x10\x1c\x61\x53\xca\x9a\xe2\xdc\x08\x7b\x78\x4a\x21\xfe\x27\xb2\xfc\x59\xab\xd7\x57\x98\x8a\xd6\xb4\xd7\x67\x0f\x54\x70\x06\x53\xf3\x66\xad\xa2\x96\x34\x51\xce\xdb\x16\x1c\x2a\x69\x64\x61\x88\xa4\x58\x34\xc6\x52\x96\x12\xb7\x5f\xc7\x74\x7b\xc6\xfb\x4b\x3e\x2b\xe1\xb2\xe1\xa4\x65\x37\xf8\x01\xd3\x0c\xe2\x60\xdd\x45\x53\xd0\xe0\x90\xdd\x5e\x9e\x5d\x9e\x20\x92\xe1\x31\x17\x90\x1d\x63\x02\x77\x5c\x13\x76\xc1\xa0\x46\xa7\x6f\x28\xca\x84\x3c\x40\x8b\x22\x13\x32\x34\xa2\x1d\x99\x36\xd6\x64\x44\x2e\xb8\xa8\xe6\x11\xee\x56\x05\xb4\x93\xbd\xe2\xa2\xcd\xf5\xaf\x5f\x83\xa5\xe3\x0b\xad\xc8\x95\x38\xaf\xbd\x9b\x27\x04\x9b\x2a\x3e\xc6\x2d\x64\x6d\xf9\x36\x30\x34\xcb\x22\xc4\x76\x7d\x70\xe4\x91\x75\x94\x17\x6f\x72\x86\x7e\xfa\x8b\x44\xe3\x5c\x0d\x59\xdc\x06\x67\x50\xb0\xfe\x07\xac\x92\xd9\x37\x43\x76\xa9\xd5\xcc\x9f\xfe\xd2\x90\xb2\x9d\x62\x85\x47\xf5\x44\xd9\xbc\x26\x67\x58\xe1\x73\x8e\x53\xca\xa6\x16\x88\xa0\x7e\x2d\x7e\xe8\xdf\xf6\x4e\xd0\xa5\xd5\xe1\x7d\x96\x65\x81\xf0\x10\x34\x04\x0c\x19\x26\xe2\xb8\x08\xb0\x72\xe6\x59\xbf\x35\x91\x81\xf4\xa4\x2f\xac\x21\x83\xa5\x34\x5c\x95\x2a\xb4\xe0\x16\xd3\x55\x6b\x65\x06\x40\x00\xfb\xaa\xec\xd9\x12\xe9\xd5\x01\x32\xf6\x9b\x61\xe5\x31\x90\x67\xaa\xcc\x7e\xc8\x40\x41\xf7\x99\x6f\x19\x4f\x70\x06\x91\x73\x87\x81\x4d\x4f\xab\xed\x3c\x87\x34\x24\x08\x59\x61\xcb\x38\xc0\xd5\x67\xc6\x79\xa1\x2c\xdc\x28\x30\x00\xc0\x3e\x5a\x67\xea\x9c\x6b\x8e\x73\x34\x64\x83\x89\x09\xac\xcb\xcc\xea\xe8\x0f\x09\x03\x7f\xb2\x5b\x16\xfd\xd4\xf1\x23\xa8\x6e\x66\xdc\x8a\x38\x01\xf3\x3d\x5b\x42\x58\x34\xe0\x40\x72\x08\xd0\x28\xb8\xb3\x25\xca\xca\x2e\xfa\x3b\x31\xf8\x6c\xc8\x4c\x3c\x5f\xb4\x2f\x61\x96\x70\xd0\x3b\x67\x10\x6e\x58\x5c\x97\x5e\xc0\x58\xd8\xf0\x43\x2b\xeb\x2f\x04\x39\x74\xf5\x7d\xf5\xaf\xc1\x9a\xea\x1b\xf6\x08\x5d\x87\xea\x75\xca\x93\x7c\xee\xc0\x6e\x20\x5d\xcb\xc6\xa9\xd9\x4b\xd4\x53\x88\xb9\xd8\x6b\x29\xfe\x5f\xc2\xff\xd6\xca\xa6\x57\x5b\x56\x75\xf7\x54\x35\x5a\xc4\x2d\x45\xad\xad\x87\xd3\x58\x83\x6d\x7c\x51\x60\x66\x40\xd1\x77\xae\xb5\x4f\x0e\x76\x68\x93\x55\xc7\xd3\xaf\x24\x1a\x5c\x69\x21\x45\x2b\xa5\xfe\x98\xe4\x52\x99\x28\x2d\xc8\x54\x31\x5f\x9b\x48\xf9\x03\xf4\x2d\x1a\xe6\xdf\x7e\xfb\xa7\x04\x7d\x76\xff\xf8\xf3\xbf\xff\xfb\x9f\xfe\xdc\x25\xf4\xdb\xe9\xcc\xd0\x6e\xb1\x46\x1e\x01\x37\x96\x5a\xc2\x1d\xa8\x32\x93\x2d\x76\xc1\x9e\x91\xa6\xe5\xb7\x1a\x7b\x63\xa6\x53\xdd\xe3\x20\x08\x07\x4f\xed\x21\x94\xe1\xe1\x41\xd1\xe9\x29\x9c\xfd\x92\xa8\x83\xf8\x10\x7b\x79\xd4\x0a\xdd\xff\x6b\x05\x6e\xc1\x48\x53\xf3\x66\xc1\x42\x34\xf3\x12\xb0\x6e\x04\x7d\x6d\x4d\x74\x0a\x7c\x7c\xdf\xb8\x3b\x88\x67\x29\x11\xb6\xaa\x9c\xb3\xaa\x79\x5b\x1f\x9c\x5f\xf2\x79\x91\x71\x1b\xc6\x81\x91\x24\x0b\x0c\x77\xbc\x3e\xaf\x47\x43\xd6\xff\x8c\x35\x73\x3d\x70\xe5\x49\xe1\x23\xe3\x1c\x99\xe0\x84\x20\x23\x4d\x7f\xfd\xf9\x44\xff\x76\x80\x96\x27\x10\x8d\x79\x80\xfe\x7e\x62\xf3\xa6\xb1\x50\x23\xfd\xd3\x37\x4e\x1c\xb6\x4d\xc0\xa0\xa9\x44\xc3\x77\xc7\x0f\x58\x98\xca\x31\xc7\x16\xf0\xf6\x9d\x65\x7f\x1e\xcc\x3b\x14\xa0\x33\xce\xef\x6d\xac\x6a\xe5\xcb\x63\x87\xc2\x00\x04\xee\x9d\x1b\x66\xf3\x6d\xd8\xb1\x16\xf6\x0e\xe1\x05\x82\x8e\x16\x63\x74\xf4\x37\xc9\x19\x3a\x5a\xe2\x79\x66\x7f\x75\x4f\x6d\x28\x2d\x96\xc8\x95\xc9\x73\x81\x34\xd9\xd2\x98\x33\x7f\xc8\xf8\x18\xe6\xf5\xd1\xcd\xd5\x04\xa3\xc2\x40\x8b\x2b\xa2\xb8\x55\xec\x44\xac\xb8\x63\x72\xc9\xa1\xf4\xad\x7e\x05\xee\xde\xba\x59\x7d\xf6\x43\xfa\x2f\xe3\xbc\x85\x45\x71\x19\x6c\xc6\x82\xeb\x03\xc1\x74\xa3\x9f\xd1\xd7\x96\x09\x7d\xa3\x2f\x02\x1b\xf9\x6b\x96\xa1\xae\x83\xa5\xef\xe0\x97\xa0\x03\xca\x90\xc9\x49\x5c\xf1\xe5\xdf\x8f\x8f\x8e\x8e\xfc\xd7\x17\x7a\x2a\xff\x1f\xa2\x4a\x92\x6c\x62\x5a\x72\xd7\xcc\x72\xc8\x3e\x3a\xc0\x3a\x67\x61\x2e\xf0\x5d\xa0\xd8\x63\xc2\x33\x74\x58\x58\x5d\x53\x9e\x48\xf4\x07\x2d\x7b\x06\x4b\x09\x3f\x6a\x65\xab\xfe\x54\xd9\xb2\xb8\xcf\x74\xac\xac\xd5\xba\x7c\xb0\x42\x48\x07\xaf\x7d\x62\x19\xa2\x1f\x02\x2d\x68\xca\x39\xb6\xb0\x0f\x50\x30\x58\x91\xcf\x0a\x1e\x35\xa0\x6a\xd4\x46\x85\xd7\x4b\x70\x15\x86\x5b\x80\x6b\x18\xb2\x6e\x58\x00\x8b\x7d\x60\x79\x83\x99\xe7\x41\xe8\xe3\xd0\xd7\x0b\x0b\x21\xd4\x64\x3e\x9f\x63\xb1\x3c\x2e\x4e\x5b\x95\x38\x0b\x3c\x54\xe0\x32\x99\x5b\x00\xf0\xb3\x66\xf6\x68\xd9\x50\x03\x2b\x03\xba\x3b\xcd\x9f\xdd\x04\x00\xd8\x21\xe8\xcd\x94\x1f\x20\x2c\xe1\xa9\xa5\xeb\x22\xf5\x32\x16\x2b\xfc\x3b\x55\x81\xc2\x85\xad\xc8\xc2\x62\xc6\x94\xc9\xc7\xb6\x6f\xb8\x8f\x1b\x18\x38\x1f\x41\x71\x0c\x32\xed\xe0\xc3\x1c\x5c\xde\xb8\x6f\xda\x5f\xbb\xb0\x0e\xb1\x5c\x8d\x9d\x2a\xe7\xcc\x06\x02\x3f\x16\x17\x30\x04\x60\x18\x13\x4a\xee\x13\x53\xcd\xdf\xa7\xfc\x8a\x66\xfa\xde\x02\x1a\x3f\x1a\xb2\xe8\xe7\x03\x44\x32\x3a\xa7\xcc\x07\xc0\x19\xf6\xce\x27\x46\xc4\xbd\xa7\x4a\x6f\x99\x4c\xef\x35\x07\x73\x39\xfe\x81\xde\xd3\x63\x4b\x47\x3a\xde\x7b\x64\xcd\x04\xb9\xd4\xe3\x2a\x14\x69\x2d\x71\xea\x26\x0e\xad\xd4\x48\x03\xc2\x83\xf3\x3b\x64\xba\x35\x77\x96\x8a\xc8\xdb\xa0\xbd\xa0\xb9\x43\x07\x24\x16\x70\x00\xe8\x23\x0a\x9f\xf5\x42\x6a\x8d\x88\xd2\x67\xf9\x7c\xdb\xbc\x0d\x1b\x89\xfb\x52\xb6\xb4\xab\xa2\xa0\xab\xcd\x01\x22\x2c\x9f\xbb\x03\xd5\x81\xe2\xfa\x56\x00\x4a\x49\x92\x61\xb8\x3b\xa0\x21\x08\x4f\x3c\x30\x5e\xcc\xa0\x78\xac\xbd\x5e\x4c\x37\x06\x9b\x34\x23\xec\x6b\xf3\xf7\x37\xc8\xde\x0d\xdf\x1e\xd8\xfb\x5c\x48\xab\xe7\xb9\x3d\x07\x6c\x7b\x92\x1a\x43\x37\x40\x94\x4d\x31\x94\xf4\xb6\xd6\x97\x48\x39\x04\x09\x6c\xc9\x73\xf4\x48\xe5\x6c\xc8\x6e\xb9\xb3\x0a\x22\xc6\x3d\xc8\xdb\x01\x68\x8c\x95\xfe\xb0\x04\x26\x00\xa3\xae\xa3\x80\x52\x3d\xf8\xee\x69\x3b\x10\x69\x3a\x62\x3c\x25\x1d\x03\xce\x6b\xaa\x59\x5b\x67\x81\x73\x32\x0b\x62\x52\xab\xe0\xa6\x68\xac\xc5\x2b\x65\x47\x03\x7a\x6d\xe1\x7a\xdb\x0e\xd4\x31\x79\x64\x9b\xa2\x5a\xf8\x5b\x0d\x5a\x71\x6a\x61\x90\x0a\x1b\xad\x7d\x5c\x5c\x7f\x2b\x1d\x2d\xdd\xcc\x85\x60\xe6\x9e\xc0\xb2\xfb\x28\x60\x8c\xa6\x82\xe7\x0b\x9f\x2f\xee\x32\xe7\xcc\x36\x58\x99\x66\xc0\x26\xfc\xc4\x6a\x55\xe7\x94\xdd\x1b\x8a\x7f\xaa\x3d\xf2\x45\xe2\x83\xdf\xdd\x1d\x66\x56\xfc\x10\x51\x96\x64\x39\x5c\x7c\x52\xe1\xe4\xde\x20\xfc\x35\x59\x66\xf5\x37\xa3\xf5\x79\x89\x0d\x12\x53\x9e\x65\xb6\xdb\xe2\x02\x2d\x6a\xef\x3c\x50\x8c\x30\xba\xbb\x1e\xd4\xf7\x7d\x4f\xab\x1e\x97\xfa\xdb\x33\x26\x10\xf8\x9f\x9f\x68\xa7\xe0\xc8\x12\x14\x29\x89\x48\xdd\x5b\x80\x9a\x00\xb8\x4a\xb7\xf7\x96\x2e\x5e\x7d\x0b\x8d\xe6\x35\x94\x5a\x3f\xf9\xa2\xe3\x33\xfb\xf1\x47\xfd\x6d\xfd\x8e\x7c\x84\xbc\x20\x0f\x9e\x30\xc7\x4c\x4f\xd0\xf5\xda\x60\x22\x34\x17\xe3\x46\x43\xba\x5b\x6c\x34\x20\xd3\x63\x4b\xd8\x6c\xdb\x95\x6b\xe5\xd1\xd8\x0c\x71\x66\x14\x6e\x35\x03\x4d\xec\x00\xdd\x24\x33\x32\xc7\x10\x97\x32\x8f\x35\x32\x90\x4c\xbf\xce\xb0\x98\x1a\x39\x51\x12\x25\xbf\xa9\xd9\xe1\x22\x3e\x7b\x8b\x1d\xde\x00\xd2\x3f\xf4\xd1\x80\x14\xb2\x8a\x03\xf8\x51\xc6\xe8\x40\x9e\x39\xf9\xe2\x18\xf6\xee\xa0\x32\x44\x05\x4e\xb8\x10\x80\x62\x97\x6a\x69\xbc\x19\x37\x61\xcb\xd2\x2e\x17\x78\xee\x73\x8c\x5d\x81\x09\x9b\x4a\x62\x06\x37\x26\x00\x15\xd5\x3c\x86\xad\x6b\xb8\x84\x43\xb0\x98\xea\x4d\x23\x18\xb2\x9e\x7b\xc5\xe7\x29\x82\x88\x2b\x8c\x1c\x02\xb1\x6c\x26\x72\x13\xc4\x4c\x5c\xac\xba\x9d\x5c\xc3\x24\xba\xa6\x83\x95\xcb\xd0\x68\x31\xd7\x63\xcb\x19\x31\xc6\xe9\x3b\x6e\x1e\x0d\x3d\x3f\x74\xaf\xd2\x55\x0f\xf5\x90\x94\xab\x28\xd5\x75\xbc\x5e\xa4\x74\x39\xe8\xb6\xa1\xb0\x70\x93\x89\x77\xcb\x96\x05\x99\xea\x15\x37\xaa\x49\xa9\xb3\xea\x69\x55\x5b\x71\x63\x8a\xe7\x23\xc1\xb3\x6d\xf6\xc8\x35\x11\xa9\xb9\x33\x03\xf9\xb9\x44\xbf\xe5\x38\x33\x26\x79\x66\xc9\xd1\x0d\x1b\x24\x86\xef\xff\x8c\x7a\x70\x5d\xa2\x8f\xc0\x17\xc1\x19\x09\xad\x29\x8e\xe8\x7c\x41\x84\xe4\x5a\x1f\x6b\xd8\xe4\xfb\xbf\xc8\x91\xc5\xeb\x1d\xe1\x24\xe1\x79\x15\x9b\xb7\xc3\x4c\x6a\x5a\x0b\x27\x85\xd1\x7d\x3e\x26\x82\x11\x53\x2d\x12\xde\x43\xee\xbd\x56\xc3\xe5\x38\x57\xb3\xef\x47\x49\x46\x5b\x83\x08\x43\x26\x44\x4f\x7f\x76\x6a\xbe\x5a\x35\x81\xa8\xfd\x68\xe8\x0c\x99\x67\xc8\x3c\x3b\x42\x3f\xe0\xe4\x9e\xb0\x14\x2d\xb2\x7c\x4a\x6d\x7a\x32\xdc\x50\xc0\x2e\x03\x2b\x55\x3c\x31\xa3\xf2\x9a\xf6\xf5\x35\x34\x64\x73\x7c\x0f\x1a\xd2\x67\x1b\x30\xae\x35\xcd\x4e\xda\x96\xa7\x87\x0a\x4e\x83\xcb\xa5\x95\x24\xc9\x85\x7e\xc3\x9c\x0f\x65\xce\x07\xd8\x95\x00\xab\x2c\x67\x08\x03\xd4\xc3\x57\x12\xe5\x0b\x67\xfc\x00\x83\x47\x06\x3e\x22\x33\x49\xa8\x1f\x46\xb5\x38\x38\x23\x43\x06\x71\x77\xae\xc5\xa5\xe7\x2a\xa1\x5b\xd2\xbb\xc7\xeb\x0e\xdf\xc4\x24\x3a\x6f\xe7\x4e\x31\x66\xa4\x9d\xc7\x14\xaa\x19\x61\xa0\x87\xb5\x6f\x19\xb2\xc5\xdb\x6f\x5a\x14\x3f\x68\x66\x51\x18\x8e\xfc\x12\xe6\x8c\x5a\xd8\x6a\x6b\x2b\x0c\x42\x7b\x9c\x49\xbd\xf8\x9e\x4a\x24\xb1\xa2\x72\x42\x6b\xf5\xd3\x30\xbd\x7c\x9b\x55\xc7\xdd\x72\xda\x6b\xf2\xd9\x4b\x6b\xe1\x63\x94\x8f\xd0\x7b\x50\xb7\x8b\x29\x29\xee\xb3\xc3\x9b\x58\x82\x9a\x91\x46\x60\xb3\x5d\x38\xf7\xdd\x0c\xda\x5a\x51\x7c\x3c\xfa\x11\xea\x15\x66\x4e\x93\x1f\x6f\x0c\x98\x6b\x66\x44\x32\x49\x36\x21\xbe\x56\x16\x01\x70\x06\x02\x01\x21\x90\x55\xa4\xfe\xbd\x00\x59\xf4\xc3\x7c\x84\x94\x2f\x7c\x4f\xd8\x2a\xb5\xaf\xfd\x08\xfb\x51\xc2\x6c\xdd\x10\x7b\x5e\xe1\xe7\x46\xe7\xdf\x64\x80\xed\x8f\x5d\x01\x49\x40\x27\xc7\x7a\xc9\xb5\xa0\x9f\xdc\xdb\x40\x73\x63\xf6\xb1\xa0\x06\x8f\x33\x2e\xc3\x73\xe6\xf6\x0f\x36\x53\x89\x9c\xb8\x80\x72\x08\xd4\xf7\x0b\x6c\x3c\xf4\x8c\x87\x98\x07\x30\x6a\x7f\x48\x8d\x49\xcb\xef\x37\x72\x2c\x14\x96\x01\xcc\xe5\xae\xa9\xea\x69\xfe\xe9\x2f\xf2\x12\x4e\xec\x2e\xf2\x76\x33\x3c\x26\xd9\x13\x40\x39\x6d\x68\x88\xf4\xd1\x20\x66\x5c\x60\xf4\x4f\x7d\xa2\xf8\x82\xa7\xa8\x20\xaf\xa6\xa0\x44\xc6\xb8\x89\x06\x78\x85\xd3\x0a\x06\xd7\x7a\x6e\xeb\x28\xfb\x63\xe0\xad\x34\x55\x71\x0d\x3c\x4a\x20\x72\xd9\xdc\x2e\xd0\x7e\xed\xf5\x4f\xa5\xbf\x4f\xea\x69\xec\x8a\xa7\xdb\x10\x56\x77\x08\xac\x2a\x5d\xb7\x88\x38\x94\x75\x45\x79\x56\xac\xc4\x82\x37\xc7\x8a\xa5\xa3\xf6\x65\x6c\xc0\xef\x38\xce\x27\x37\x00\xc0\xdb\x94\xbf\xee\x90\x87\x66\xc4\x27\xa4\xe8\x7d\xd6\xdd\xf8\xf0\xe8\xa6\x4d\xb1\x6e\xac\xe2\xfa\xc7\xe8\xff\xde\x5c\x5e\x1c\xce\xb1\x90\x33\x0c\xf9\x81\xae\xad\x03\x07\x13\x6f\x14\x50\x67\x5e\xa7\x0c\x0d\xd9\x21\x9a\xf2\x03\xe3\xcd\x39\x41\x33\xa5\x16\xf2\xe4\xf8\x78\x4a\xd5\x2c\x1f\x1f\x25\x7c\x7e\x5c\xac\xcd\x31\x5e\xd0\xe3\x71\xc6\xc7\xc7\x82\x40\xd0\xdd\xe1\x77\x47\xdf\x7f\x07\x5b\x73\xfc\xf0\xdd\x31\xd8\xf0\x8f\xa6\xfc\x0f\xe7\xdf\xff\xc7\x9f\xfe\xac\x1b\x5e\x2c\xd5\x8c\xb3\x13\xeb\x2a\x5a\xd9\xf6\xa1\x11\x7c\x8f\xcd\x27\xa5\x5e\xfe\xe3\xe8\xdb\x70\x18\xf6\xd5\x39\x4f\x49\x26\x8f\x1f\xbe\x1b\xb9\x9d\x39\x5a\x74\x71\x7e\x15\x0c\xdf\x2f\x79\xa9\x86\x93\xfe\xdd\x93\x8c\x4b\x0f\x5a\xb7\x2d\x35\x67\x25\x0c\xa9\xdc\xe2\xc4\xdc\x93\x8a\x3f\xb0\x83\x06\xe6\x25\xa9\x06\x9d\xbe\x2b\xc2\x6f\xa3\x6c\xd3\x29\x83\x0c\xbc\x6f\x34\x01\xf4\x48\x63\x83\x58\x60\x5a\x17\xe7\x63\xbd\xcc\xdb\xac\xdf\x53\xe2\xa0\xee\x1a\x00\xd5\x4e\x77\x43\xf0\xd3\xcc\x7c\xed\x7c\xe2\xfc\xd1\x81\x9e\xee\x02\x2a\xb4\x65\x31\x0d\x8f\xa7\x68\x88\x07\xc6\xe2\xc6\xd5\x8d\x46\xa2\x25\x36\x61\x12\x36\x0a\x52\x42\xc4\xa4\xc1\x23\xe0\x13\x8f\xec\x6a\x82\x5d\x0d\x08\x34\x9f\xd4\xfc\xe3\x87\x8c\x8f\xe5\x37\x1e\x05\x05\x4b\xd7\x47\x01\x4b\xd0\x4c\x82\xbb\x01\x12\x75\x4b\xf1\x94\xfa\x89\x3b\x33\xa1\x14\xd2\x65\xe1\xeb\x89\xaa\x88\x45\x35\x49\x99\x58\xf0\x9c\x39\x20\x46\xce\x08\x9f\x40\x94\x00\x5c\x80\xce\x0b\x02\x46\x10\xc6\x55\x90\x80\x29\xc8\xc2\x30\x52\x30\xd7\x35\x2f\xf7\x96\x60\xa4\xeb\xd6\xf9\x29\xc0\x48\xb7\x5d\x77\x7b\x70\x5e\x68\xc1\xb7\x0d\x55\x30\x47\xa9\x03\x9b\x85\xf7\xd7\xba\x26\x3c\x1f\x00\x5f\x44\x58\x64\xcc\x00\x8e\x40\x04\x31\x39\x54\xfc\x10\x32\xd7\x21\x1f\xda\xc0\x03\x37\x15\xcd\x00\x97\x4e\x97\xeb\x40\xbf\xdf\x62\x9c\x26\x6a\xfc\x73\x30\x50\x7b\xf7\xca\xa2\xfc\xb8\x56\x2e\x19\x23\xc2\x1a\xab\xd7\xde\x1c\x1d\x1d\x3e\xe1\x56\xae\xf6\xf8\x16\x02\x68\x08\xdd\xea\xe3\xfd\x70\xc0\x04\x8e\x10\x84\x46\xcf\xf8\x9c\xeb\x6b\x9b\xe7\x32\x78\x68\x42\xeb\xe1\xb2\x59\x51\x09\x7e\x61\x90\x6a\x5e\x6e\x36\xfa\x68\xe9\x47\x46\x97\x0f\x5f\x5a\x8f\x5f\x1d\xcc\x64\x1c\xe3\xff\xae\x19\xbf\x07\x6e\x5d\x4d\x37\xe0\x4e\x9c\x83\xed\x14\xca\x92\x58\x38\x46\xfa\x77\x2d\xaa\x6b\x92\xf2\x61\xec\x2e\xf5\xdd\x06\x9e\x1a\x40\xa6\x10\xb2\xad\x54\x7d\xb4\x3c\x7c\xc2\xf2\x79\xc7\x3d\xf0\x41\x4c\x6d\x36\x00\x33\x13\xd6\xe3\xe2\x79\x0e\x6b\x03\x7a\x1a\x63\x4d\xba\x28\x86\xab\xf4\xac\xba\x68\x37\x83\xb2\x52\x04\xb7\x6a\x0a\xa8\xc8\xf8\xfe\xc3\x87\xa2\x60\xcf\x72\x41\x0e\xd0\x38\x87\xe7\x17\x97\xb7\xa1\x17\x8f\x32\x78\x7c\x98\xcc\x48\x72\x0f\xc9\x28\x86\x63\x9b\xbd\x74\xc5\x9a\xc6\xcb\x21\x2b\xca\x42\x28\xee\x5c\x52\x4b\x8f\xbb\xe9\xb1\x67\xb9\x40\x29\x95\x8b\x0c\x2f\xc1\xf8\xcf\x4c\x18\x5b\xe1\x38\xf0\xf1\x9f\x9a\x92\x37\xb3\x71\x41\xdd\x0a\xcb\xa2\x9c\x90\x08\x7f\xb9\x49\xf8\xa2\x8d\x3e\x24\xbb\x4e\x26\xda\x1a\x09\x75\x9b\x60\xa6\xa6\x0a\x2c\x81\x4b\xda\xec\x68\xe8\xd5\xf6\xd9\xd2\xe5\xd2\xa0\xc3\x77\x2e\x48\x1c\xf4\xc0\xa1\xab\x6a\xa8\xff\x36\x25\xb3\x88\x78\x20\xe9\x90\xc5\xf9\xe8\xf6\x9e\x2d\x76\x19\x15\xc8\xfc\xbb\x21\x71\xb7\xce\xad\xcc\x1e\x7d\xc8\xc1\x2b\xd0\x77\x7c\x20\xf4\x8a\x4a\x01\xf5\x25\x01\x9f\x00\xd2\xbe\xb5\x3d\xac\x28\x05\x60\x71\xbc\x6d\xa1\x8e\xc8\xf5\xe4\x09\xd3\x67\xdb\x1a\x28\x0e\x1f\x20\x6a\x03\x46\x2b\xa9\x4b\x75\x6d\x0c\x99\xcb\x71\x99\xe4\x99\x81\x57\x6a\x58\x2d\x97\x7c\xef\xa2\xf1\x5e\x2e\x2a\xd3\xeb\xdc\x28\x28\x9d\xe0\x3d\x44\x2e\x29\x21\x59\x16\x35\x5a\x81\x74\x09\x93\x39\xb0\x61\x87\x9a\x0e\x99\x64\x53\xa2\x90\x16\x89\xd2\x3c\x33\x29\x1b\xe0\xfb\x83\x44\x7e\x9c\x65\x88\x2a\x39\x64\x1e\x77\xc0\xa0\x48\xc2\x2d\xe5\x72\xe4\x52\x2b\xa6\x42\x17\xd0\xac\xad\xad\x05\x77\x17\x4d\xa8\x0a\x47\x04\x3e\xad\x65\x88\x34\xbc\x58\x10\x6c\xe2\x8b\xed\x31\x64\xa1\x9c\x5a\xde\x04\x1b\x8c\x0b\x15\x8f\x76\x11\x17\xdb\x4c\xba\xa6\xe2\x55\xe7\x2d\x39\x42\x3d\x33\x3b\x2d\xa4\xba\xb2\x3f\x66\xb4\x36\xab\xc9\x86\x7d\x68\x49\x50\x49\x5f\xb9\xd4\xcb\xfa\x0b\x2c\x14\x4d\xf2\x0c\x8b\x6c\xe9\xca\x15\xd3\x49\x50\xc1\x08\xf6\xc0\x64\x9d\xdb\xd2\xc8\x00\xc6\x6e\xcd\xc5\x12\xcf\x49\x90\x4d\x63\x55\xe2\x2c\x70\x37\x19\x28\x3d\xe3\xc7\xd0\x6d\x7d\x73\x84\xce\xca\xf5\xaa\xe0\x4c\x04\x68\x35\x54\x1a\xf6\xe7\xc7\x1b\x84\x81\x9b\xba\x57\x74\xa2\xc5\xf0\xaf\x82\x53\xd7\x54\x4b\x11\xcb\xfb\x8e\xbe\x2c\x87\x79\xba\x3a\x84\xa9\x36\x0d\xe4\x16\xea\xed\x45\x1e\x2e\x7f\x20\x1a\x06\xe8\x6e\x86\x8e\x83\x0c\x91\x7e\x36\x18\xe8\xa7\xa0\xa0\x5d\x79\xb0\xf3\x15\x05\x93\x60\x1f\x3b\x0e\x35\x00\x33\xef\x3e\xd0\x80\x72\x42\xcf\x65\xe3\xca\xae\x57\x7b\x3f\x45\xb0\xe2\x48\x8f\x4b\xab\x1c\xc4\xf8\xba\x4b\x35\x71\x61\x0c\x16\x7f\x1c\xc0\x22\xfd\x61\x1b\x13\x94\x51\x76\xef\xf2\xce\xf4\xce\x1f\x20\x5c\xb4\x0e\x87\xcf\x8c\xde\x10\x73\x83\x58\x53\x07\xad\xba\x85\xa4\xd3\x2e\x76\xbb\x5e\x5c\x77\x23\xe9\x84\x9e\x5b\xa9\x1c\x1b\xcc\xa3\xfd\xb6\xac\x8c\xae\xf2\x12\xac\x0b\xa9\x32\xf7\x4b\x10\xe7\xa1\xa8\xaf\x25\xda\xb8\xbe\x57\x33\x5c\x5f\x7e\x7a\x3d\x5c\xf8\xdd\xc5\x59\xff\xfd\xe0\x22\xc6\xf8\xfe\xeb\x5d\xff\x2e\xfe\xe5\xfa\xee\xe2\x62\x70\xf1\x21\xfc\xe9\xe6\xee\xf4\xb4\xdf\x3f\x8b\xdf\x7b\xdf\x1b\x9c\x97\xde\xd3\x3f\xc5\x2f\xf5\x7e\xb8\xbc\x2e\xa1\x8a\xdf\xfc\x34\xb8\xba\x8a\x7f\xba\x1d\x7c\xec\x9f\x8d\x2e\xef\x22\x60\xf2\xb3\x5f\x2e\x7a\x1f\x07\xa7\xa3\x9a\xf1\x5c\xf7\x4f\x2f\x7f\xee\x5f\xf7\xcf\x56\x02\x8e\x17\xf3\xad\x5d\xd2\x5d\x38\x7c\x37\x46\x99\xef\xa1\x89\xa0\x84\xa5\xd9\xd2\xc4\xa3\x39\x25\xa5\x14\xfe\x12\x5e\x01\x74\x4e\x78\xbe\x4d\x58\x99\x56\xe2\xf9\x03\x11\x90\x20\x67\x5a\xb3\xd1\xf4\x58\xde\x37\x62\x9c\x28\x51\x35\xe8\xad\x8c\x9e\x55\x62\xe9\xe3\xb3\x57\x86\x85\xfa\xf4\x6a\xdb\x09\x5a\x10\xb1\x6a\x2c\x70\x41\x8b\x7c\xa1\xe8\xb8\x39\x50\xb0\x65\xda\x71\x77\x35\xd0\xe0\x75\xd4\xe7\x4d\x5e\xd4\x33\xc6\x28\x5e\x6e\x9b\x50\x21\x68\x61\xd3\xe2\x09\xfe\x6b\x17\x5e\xb1\xc8\xc7\x19\x4d\x10\x4d\x0b\x94\x11\x13\x48\x67\xc2\xba\x8d\xb5\xa7\x0c\xeb\xb3\x20\x02\x24\x26\x2d\x88\x2e\x04\x39\xc4\xb9\x9a\xb9\x4a\x8c\xbe\x78\xbf\x81\xd9\x21\x89\x20\xca\x15\x87\x26\xa9\x83\xd3\x0f\x7a\x82\xc1\xd8\xe4\x8e\x14\xf2\x48\x8f\x02\x88\xc5\x06\xf3\x9e\xf9\xd2\xb4\xde\xc1\x10\x69\xde\x5f\xb9\x34\x76\xc4\x54\x96\x4b\xa6\x81\x6c\x68\x1e\x3a\x50\x7e\x3d\x6f\xcd\xa9\x13\x17\x84\x68\x36\xd9\xc5\x33\xd6\x4f\x63\x1d\x8d\x85\x84\x12\x87\x1f\xda\xd6\xed\xa3\x53\x41\xe0\x12\xb1\xde\x2a\xa7\x46\x83\x77\xd5\xc6\x3f\x42\xd8\xa3\xd6\x18\xc6\x64\x86\xb3\x89\xb1\xc8\xe8\xad\x29\xce\x55\x95\x44\x6f\xf9\x3d\x61\xb6\x48\xfa\x8b\xb0\x43\x66\x04\xf0\x22\xdd\xc7\x1b\x27\x0a\xf3\x0d\x14\xf4\x16\xae\x92\xbb\x89\xff\x36\xc5\x42\x8d\xb8\x1a\x3c\x36\x41\x98\x05\xe2\x96\x0b\x1d\x9f\x4c\xe8\x67\xdd\xe0\x90\x91\x5a\xcc\x21\x70\x69\xbb\xc4\x6b\xcf\x97\x01\x73\xc3\x64\xaf\xde\x13\x06\xf5\x00\x4c\x51\xaf\xb5\x34\xdb\xcd\x6a\x58\xdd\x8b\xaa\x0d\xd1\xaf\x18\x98\x9f\x68\x54\x26\x21\x34\xd0\xba\x75\x82\x44\x8f\x7b\x72\x84\xce\x6c\x4e\x9e\xfe\xe5\xf4\x7c\xd0\xbf\xb8\x1d\x9d\x5e\xf7\xcf\xfa\x17\xb7\x83\xde\xf9\x4d\xdb\xe3\xb7\x8b\x58\xe1\xd2\xe9\x2b\x87\x6b\x7b\x0e\x71\x6c\x4f\x5e\x91\xb2\xe2\x27\x55\x1c\x3b\xd8\x92\xf5\xa3\xa7\xe9\x62\x94\x52\x99\xe8\xeb\x6f\x39\x22\x2c\x05\xb0\xb6\x8d\x48\xb5\xbe\xa9\xf2\x2c\xfc\x1b\xc8\xbf\xe1\x38\x88\xb9\xed\x1e\x1c\x45\xfb\xe7\x80\xe6\x62\xeb\x61\xeb\xc3\x9f\x0e\x59\x70\xdb\x1c\xad\x47\xe8\xd5\xcd\x6d\x37\xb7\xb8\x89\xf2\x9c\xcc\x78\xa9\x94\x39\xd6\xfc\xd1\xbd\x06\xa9\xa0\x0d\xab\x62\xe1\x39\x42\xc4\x38\x1a\xd4\x24\x42\x5a\x45\x9e\x63\x96\x62\xc5\xc5\xb2\x61\x8a\xed\x98\x67\x78\x6c\x62\x16\x1a\x5e\xd9\x5a\xff\x77\xbb\x60\x5e\xc5\xac\x4c\x4a\x06\x57\xee\xf6\xf2\xa7\xfe\xc5\xcd\xa8\x7f\xf1\xf3\xe8\xea\xba\xff\x7e\xf0\x5f\x3e\xef\xde\x56\x58\x8f\xab\x9d\x10\x7d\x29\x6a\xee\xe2\x32\x00\x6b\xf9\x8b\x29\x39\xe2\xda\xb1\x30\xf3\x74\x32\x64\x8e\xb3\x88\xa2\xf9\x99\xe0\xf9\x74\x56\xdf\x50\x79\x94\x57\xbd\xdb\x1f\x37\x1a\x26\xe4\x67\x9b\xba\x04\xe6\xb4\x55\x91\x86\xe8\xc4\xf2\x3d\x03\x4f\x54\x1a\x1e\xa0\x0c\xc0\xab\x75\x06\xef\x06\x8e\xb6\x91\xf6\x52\x65\x5a\x2b\x85\xff\x9a\xd7\x9b\x08\xe8\x36\xe0\x9b\xd1\x35\x02\x71\x63\xa6\xe4\x4d\xa5\xb5\x93\x9a\xdf\xa2\x1b\xec\xfb\xc3\x8c\x4c\xa7\x24\x35\xe4\x55\x6e\xd8\x9a\x82\x2c\x0b\x4c\x8a\x7b\xbd\x6e\x15\x6d\x01\x8a\x2d\x2e\x66\x1f\xaa\xd1\x9e\x81\x5f\xf9\x4f\xea\x79\xc5\xa9\x2b\x45\x97\x70\x26\x15\x66\x0d\x78\x9e\x1d\xcb\x65\x17\x28\xfb\xa2\x28\x5a\x6f\x0d\x24\xce\x72\x5d\x9c\x83\x4d\xbc\x39\xb6\xd0\x06\xb3\x16\x8f\xa0\x00\x47\x50\x3b\xaf\x66\x13\x4a\x05\x89\x9f\xdc\xb8\xb1\x52\x75\xb2\x49\xe9\x60\x71\x34\x48\xe7\x16\xd4\xcc\x58\x83\xa0\x7c\x40\x63\xec\xda\x8e\xeb\x97\x7b\x8b\x67\x51\x7c\xd9\x97\xf3\x76\xc2\x5b\x77\xfb\x56\xa9\x74\x71\x50\xd6\x39\xcd\x13\x8b\xde\x67\x9a\x2d\x9c\xd3\xd6\xa0\xe5\x2e\xd8\x14\x1d\x86\xe5\xe2\xd3\x43\x48\x2f\x1e\xb2\x26\xaf\x46\x4d\xa9\xf5\x90\x02\xae\xdc\xad\xb5\x1d\x34\x45\x87\x98\x3a\xb7\xd8\xed\xb2\x3e\x90\x7b\x1d\x84\xbd\x06\xdf\xbe\xdd\x97\x31\x36\x6e\xcb\xf8\x3a\x6e\x4a\x00\xf5\x5c\xb5\x5b\x08\x42\x3b\xef\x77\x8c\x2b\x61\xae\xc8\x19\x96\x46\x72\x55\xc9\x2c\x1e\x38\xcc\x26\xc6\x8e\x28\x0f\xd7\x4b\x82\xdb\x59\x08\x5a\x39\x2e\x0e\x8c\x4e\x0d\x25\xf1\xf5\xe8\x43\xb0\x7e\x5f\x79\xa4\x1b\xe1\x87\xc2\x91\x57\x5e\x0c\xdf\x03\x86\x95\xe1\x9c\x25\x33\xb4\xc8\xb0\xc9\x74\x9a\x61\x69\x48\xda\x39\xc6\xf1\x98\x66\x54\x41\x92\xb6\x71\x2a\x95\x56\x58\x6b\x34\x58\xdc\x3b\x78\x28\x5c\x80\xc4\xac\x22\xfa\x2d\x23\xcb\x8a\x32\x94\x4f\xe9\x7e\x0a\x47\xdb\x67\x4a\x2c\x5b\xbb\xa2\x0a\x72\xb4\xf1\x64\xc5\x36\x68\x4e\x07\xe4\x58\xcc\xa1\xdb\x8e\xda\x16\xaf\x8a\x4a\x9c\xae\x92\x1c\x17\x73\x63\xff\xb2\xc1\x66\xfa\x4d\xc2\xc0\x18\xb6\x66\x2f\xcc\xec\x9e\x56\x55\xaf\x3d\x5d\x8b\x1a\x2e\xd8\x76\x57\x5a\x81\x0c\x7c\xb4\x6b\xb0\x8c\xd6\x4c\x93\x5f\x75\x41\x6a\xa4\x9a\xee\x41\x15\x16\x26\xb2\xc3\x9d\x58\x06\x91\xac\x5d\xa8\x49\xc6\x71\x43\xad\x31\xd7\xb6\xc1\x84\x6c\x6a\x3b\xe5\xf9\xb8\x09\x83\xcc\x8c\x6a\x75\xeb\xab\x76\xd1\x31\xb9\x5d\x19\x51\xc3\xdb\x02\x2b\xa2\x68\x37\x3b\x50\x30\x69\xac\xc8\x21\x7c\x5e\xdf\xb8\x45\xde\x6a\x3d\xe7\x66\x3a\xf3\xc4\x83\xb4\xfc\x5f\x53\xb1\xfa\xaf\x39\x54\xc5\xbe\x9c\xdc\x98\x14\xeb\x6d\x88\x4c\xd1\xb6\x07\xa6\xdc\xeb\x6d\xec\x81\x0a\x69\xa0\x75\x7a\x4d\xdd\x6c\x6e\xf4\xd7\xed\xb9\x58\x5c\x90\x73\x21\x28\x87\x44\x68\x5b\xc5\x73\x05\x58\x4b\x6d\xbf\x5b\xac\xe4\x6f\x39\xc9\x89\xa6\xfd\x71\x9e\x4e\xab\x86\xe0\x0e\xa2\x6c\x31\xa5\x19\x7f\x44\xf3\x3c\x99\x21\xd7\x38\x4a\x49\x86\x97\xd1\xd4\x40\xb8\x54\x3c\x03\xf8\xb3\x0d\xb1\x98\x92\x5c\x2a\x3e\x87\x10\xc5\xa2\x5d\x91\x33\x20\x78\x84\x95\x12\x74\x9c\xab\x5a\xde\x1f\x81\x92\x6c\xe8\xfd\xbb\xb9\xea\x9f\x0e\xde\x0f\x4a\xae\xb7\xde\xcd\x4f\xe1\xdf\x9f\x2e\xaf\x7f\x7a\x7f\x7e\xf9\x29\xfc\xed\xbc\x77\x77\x71\xfa\xe3\xe8\xea\xbc\x77\x11\x39\xe8\x7a\xb7\xbd\x9b\xfe\xed\x1a\x1f\x5c\xb5\xd7\xe6\x8d\xc0\x01\x66\x8a\x16\xf4\xac\x95\x17\xdc\xa5\x4e\x15\xb7\xbd\x9e\xa0\x9e\x43\x90\x09\xab\xac\x61\xe7\x47\x05\xff\xbf\x29\xfb\x66\xdd\xad\x67\x58\x61\x5b\x46\xf3\x08\xf5\x90\x2b\x87\x0a\x61\xac\x52\x4b\x56\x16\x5e\x43\xef\x8e\x69\x42\x8b\x57\x49\xa1\xe6\x16\x95\x3c\xf8\xc4\x02\xdb\x64\x24\x84\x93\xb4\xc5\xef\x8f\x86\xac\xff\x40\x98\xca\x01\xeb\x0e\x67\x99\x2b\x5b\xeb\x5e\x08\xd2\xd0\xdc\x28\x25\x9d\xd3\x0c\x8b\xa2\xe8\xc2\xa5\x6d\x0b\xb4\x1b\x37\x56\x8f\x3a\x50\x45\xe2\x76\x9a\xd6\xdd\x00\xc1\xb8\x4f\xcf\x07\x20\x2f\x26\xca\xc1\x15\xbb\xce\x87\xcc\x00\xa7\xd8\x1e\xe7\x18\x42\xab\x15\xb7\xc6\x47\xd3\x7d\x63\x1d\xff\xeb\x9a\xa2\x07\x1b\x20\xf3\x18\x33\xfd\x53\xc9\x82\x7e\x90\xee\x1f\xdd\x84\xc1\x5b\x40\xbb\x93\x20\xc8\xdb\xa8\xa3\xb8\x10\x83\xb1\x0d\x21\xd7\xfa\x05\x48\x88\x2e\x24\xce\xba\x2e\xbc\x87\x82\x00\xa2\x5e\x83\xb2\x92\xe9\x4b\xe8\xb5\xae\x43\x98\xe5\x0d\xab\x30\xe6\x39\x4b\x5d\x21\xf9\x39\x65\xc7\x73\xfc\xf9\x1b\x37\x53\x93\x35\xe9\x91\x56\x01\x11\x83\x64\x5a\x6d\x5b\x6a\x26\xb7\x7a\xb9\x86\x6c\xc5\x7a\xad\x17\xb1\x1d\x67\x05\x1d\xb1\x50\xe8\x4d\xa4\xd7\x03\x59\xd6\xed\x5f\x05\x2f\xdb\x44\x93\xd9\x03\x0f\x8d\x2c\x04\xd1\x2f\xfa\x30\xb2\xcc\x44\x07\xfa\xbf\x21\x46\x39\x2a\xbb\x51\xcf\xbb\x43\x97\xf8\x56\xc7\xa6\xd6\x19\xff\x04\x80\xe7\xb6\x27\xbd\x67\xc6\x35\xef\xac\xc2\x36\x26\xdb\xfa\x1c\xf5\x66\xfd\x8d\x8f\xa1\xb6\xb7\x74\x65\xf5\x04\x01\x2f\x00\x6c\x85\xc3\xe7\x03\xdc\x84\x8a\xbf\xdf\x91\x40\x46\x24\xd8\xc6\x99\xd6\x4d\xc9\x6f\xb9\x75\x6f\x7e\xf7\x6d\xb7\x7b\x56\xeb\x0c\x0e\x0b\x36\x8c\xef\xb7\xe9\x2d\xf6\xce\x85\x71\xe5\x8c\xd6\x81\xa9\x5c\xe7\x4c\x5f\xc5\xbb\x88\x0c\x69\xef\xfa\x2b\x75\x6a\xff\x5c\x9b\x3e\xe0\xac\xd6\xc2\xbc\xff\x64\xe8\x53\x3f\x97\x40\xa7\x6c\x77\x10\x3c\x6c\x5b\x0f\x2f\xb4\x31\x4e\xee\x1f\xb1\x48\x8d\x61\x15\x42\x35\x8e\xd0\x8f\xfc\x91\x3c\x10\x71\x80\x92\xff\x9f\xbd\x6f\xeb\x6d\xe3\xc8\xf2\x7f\x9f\x4f\xd1\x98\xff\x83\xed\x3f\x28\x0a\x33\x83\x01\x16\x01\xf6\x41\x91\xe5\x0c\x03\x45\xf2\x48\x72\xbc\xbb\xd3\x03\xba\xd8\x5d\x24\x7b\x55\xac\xa2\xfb\x22\x85\x19\xe4\xbb\x2f\xea\x9c\x53\xb7\xbe\xb1\x9b\xa4\x1c\x6f\x36\x0f\x9b\x1d\x58\xec\xba\xd7\xa9\x73\xfd\xfd\x78\x5e\x32\xc2\xa3\x28\x20\x56\x0d\x17\x8a\xda\x89\x25\xe4\xd3\x23\xb8\x87\x04\x46\xc2\x32\x5b\xad\xb5\x11\xee\x65\x1a\xa8\x5c\x8b\xa3\x12\xc1\x7e\xb6\x3c\x21\x04\x80\x8e\x05\x58\x0a\xf6\xd4\x04\xd8\x38\xa4\x56\x37\x9a\xd9\x22\x2a\x13\xca\x33\x98\xa7\x7d\xb9\x21\xb4\x60\x24\x34\xb1\x64\x7b\x12\xad\x94\x60\x72\x35\x9d\x4e\x23\x5e\x26\xd3\x37\xa3\x0e\x3a\x35\xe8\x07\x07\x6d\x22\xac\x50\xaa\xe0\x62\x67\xab\xd6\x6d\xb9\x82\x5e\x66\x28\x8f\x28\x32\xf4\x0f\xb5\x1c\xff\xfb\x7a\xcd\xef\x97\x8d\x33\xb4\x5b\xaa\xa3\x8b\x87\x3a\xda\x01\x08\xf5\x11\x2d\xe1\xef\xdb\x2d\xaf\x11\xc5\x70\x86\x94\xc4\x15\xc5\x75\x00\xd4\x29\x39\xb6\xd2\xeb\x47\xd5\xc5\xde\x77\x10\xa8\x4c\x6b\x4b\x54\x72\x7e\x50\x79\x51\xf3\x48\xb7\x9c\x38\x5b\x26\x78\x4c\x7e\x94\x12\xd5\xa6\x1b\xa0\xe4\x58\x2d\xca\x0d\x12\xff\xd7\x25\x74\x37\x58\x8b\x72\x24\x85\x06\x61\x99\xc6\x8b\x8e\x63\x3c\x4c\x20\x2e\xf3\xac\x00\x28\x9d\x43\xaa\x94\x6c\x33\xd8\x34\xc4\xb7\x76\x5b\x74\x5c\x62\xfd\x92\xd8\x61\xe1\x95\x89\x87\xd0\x27\x05\xaa\x3a\x10\x14\xeb\x96\x0c\xf5\xac\xab\xd1\x7b\x04\xf8\xbd\x07\x45\x02\x41\x77\xf0\x20\x24\x29\x2d\x04\x1a\x34\x9c\xfa\x2a\x5a\x9a\x9a\x97\x47\xee\xd1\x02\xa5\x00\x2e\xf9\x3c\x8d\xde\xa9\x1c\xb8\x7f\x28\xca\x4d\x89\x08\xee\xd9\x2a\x5d\x27\xe8\x4d\x7f\xfa\x93\xc9\x3f\xc1\x19\x62\x13\x00\xe2\x9f\x32\x59\xb6\x36\xe0\xd2\xb3\xa0\x2d\xfc\xe4\x47\x6d\x0a\xb7\xfe\x9c\xda\x87\x9f\x22\x5e\xf7\xc5\xc7\xfb\x08\x97\x9a\x60\x08\xf3\xbe\x81\x7a\x8d\xec\xcf\x80\x81\xe5\x9a\x1f\xa0\x0e\x04\xfb\x80\x8b\x6e\x70\x28\xf5\xb2\xf3\x32\x59\xbb\xe7\x27\x64\xc7\x22\x32\x06\x9a\xe7\xc6\x01\x2b\x62\x72\xa1\x9f\xa5\x45\x0c\xec\xd6\x8c\x55\x92\x43\x58\x83\x95\x51\xaa\xfc\x66\xa3\xac\xdc\x9f\x0a\x33\x12\xfc\x63\xdf\x51\x2b\x15\xa6\x38\xd0\x3c\x83\xe8\x14\xe8\x95\x19\x42\x29\x98\x3c\x42\x54\x8c\x09\xdb\xbf\x0e\x07\x18\x16\xa7\xc6\x32\xec\xaa\xb1\x48\x26\x57\x25\xcb\x39\xa2\x78\x15\xfa\x09\x2f\xb3\x27\x7d\x51\x9b\xc7\xda\x1e\x50\x90\x00\xcd\xb3\x17\x4b\x1c\xb6\x07\x05\xf6\xc8\x77\x85\x4f\x24\x40\x27\x2a\xea\x3a\x90\x99\x9e\x8f\x61\xcc\xdf\xbb\x15\xb0\x70\x73\x8f\xbd\x70\xd8\x53\x82\x9d\xfe\xa0\x3f\xee\x49\x82\x6b\x34\xae\xcf\xa0\x2b\x2a\x72\x8e\x25\x12\x13\x6e\x9d\x69\x0f\x5d\x9e\x4b\x0b\xb3\xa5\xf3\xd1\x81\xf5\xa3\x8d\x9c\x58\x12\x5a\xa0\x17\x3f\xd6\x02\xa7\xb9\x6d\x54\xe9\x88\x18\x65\xbb\xa0\xb2\x1d\x90\x1c\x0d\x05\x5b\x3b\xa1\xa8\xe1\xa1\x21\x22\x6d\xac\x05\x33\x8e\x9c\xd6\x0e\x0f\x4c\x9e\xa2\xcd\xed\x4c\x98\x72\x7a\x2c\x2d\x1c\x81\xf8\x20\x23\x05\xaa\xc0\x09\xd7\xcb\x77\x21\x5b\x73\x95\x4c\xa6\xd2\xfd\xd5\xe5\xdd\xd5\xc3\x17\x4b\xa8\x32\xd9\x4c\xa3\x33\xaa\xcc\x38\xdf\x5e\xbd\xbb\xf8\x70\xfd\x30\x7f\x3b\xbb\x7b\x89\x94\x2a\xfa\xd3\x01\x39\x55\xf7\x04\x42\x7a\xa9\x64\xc9\x7f\x3a\xea\x4d\xce\x2b\x39\x67\x23\x72\xfb\x2d\xd0\x6f\x9f\xba\x83\x8d\x36\x41\x54\x2d\xc2\x29\x41\x48\xe1\x8b\x66\x31\x53\x3d\x86\xd8\x65\x26\x04\xc4\x48\xad\x8f\x95\xca\x68\xf4\xa2\x82\xfc\x31\x54\x77\x24\x53\x63\xb9\x08\x50\x64\xc1\xef\xb3\xd6\x96\x10\xd6\xda\x6d\xf5\x02\xe4\x19\x14\x5c\xf5\xe1\xac\xae\x32\xc9\xdd\x30\x90\x3d\xaa\x92\x51\x27\x38\x1e\x6d\xe2\x4b\x46\xb4\x49\xf1\x1a\xaa\x6b\x9a\x13\x17\x9c\x4f\xa3\x7e\x9a\x3f\xda\x19\xe2\x25\xce\x24\x2a\xa6\xc1\x6d\xbe\x6f\x3f\xba\xe7\xee\x0a\xc0\xba\xeb\x9d\x64\xe0\x88\x06\x82\x26\xb7\x91\xb4\x11\x88\x70\xee\x3c\xd4\x8f\x19\xe6\x9d\xa8\x65\x6d\x9d\xb5\x28\xd4\x6b\x9d\x81\xbb\x9a\x21\xd1\x4d\x94\x88\xaa\xd0\xd6\x3f\xda\xce\x17\x1f\xef\x63\x89\x54\x9b\xf4\x0a\x11\x0a\x36\x76\x81\x59\x0f\x2a\xe8\xdf\x68\x28\xbe\x04\x7b\x8d\x8e\xca\x0d\x67\xb2\x40\xfa\x3c\x21\x78\xee\x4e\x06\x8e\x87\xf3\x94\x08\x14\x80\x06\xd1\x7d\x4f\x0c\x6a\x0a\x6e\xad\x1e\x2f\xfd\x95\x18\xc4\xea\xe7\xa9\xab\xa0\x13\x52\x2a\x5f\xf2\xe4\xb4\x64\xf6\x0f\x3d\x45\x94\x8d\xda\x7a\x88\xc2\x3c\xfb\x41\x67\xe9\x01\x9b\xfb\xfd\x28\x9d\xf0\x28\x0d\x78\xd7\xfd\x57\x22\x5a\x2b\x2d\x40\x2d\x80\xb5\x8b\x35\xda\x82\x72\x01\x19\x43\x7a\x19\x5b\x5f\x1d\x87\x3b\x74\x50\xf4\xf1\xe6\xf6\xe6\xca\x8f\x1d\xce\x6e\x1e\xae\xbe\xbb\xba\x0b\x8a\x07\xaf\x6f\x2f\x82\x02\xc0\xfb\x87\xbb\x5a\xdd\xdf\xb7\xb7\xb7\xd7\x57\x8d\x20\xe4\xd5\xc3\xec\x87\xa0\xf1\xb7\x1f\xee\x2e\x1e\x66\xb7\xc1\xef\xbe\x9d\xdd\x5c\xdc\xfd\xa7\xff\x2f\x57\x77\x77\xb7\x77\xb5\xfe\x3e\x5c\xf6\x87\x33\x83\x69\xb4\x9b\xe2\x2e\x5a\xe2\x41\x30\xb5\x2e\xe9\xe7\xe3\x00\xfa\x4a\x56\xb6\x2a\xd4\x83\x2d\x1d\x22\x70\xfb\x5c\xf1\x7c\x47\x18\x06\xa8\x85\xe2\xbf\x24\x4c\x62\x02\x59\x49\x2c\xd1\xa9\x9f\x01\x15\xcb\x8f\xc8\x23\xfd\x8e\x28\xdc\xbf\x03\x8f\xa6\xf9\xb1\x23\x3a\x84\xcb\xfa\x77\xec\xc3\xfe\x6d\x1a\xcb\x80\x20\xce\xfb\x2a\xa0\xa0\x9d\xc6\xd2\x20\x61\xa6\x2a\x29\xa6\x70\x97\xa7\x2a\x5f\x9d\x13\xdd\x83\x96\x75\xea\x71\xa1\xd4\xe3\x39\x97\xe7\xa0\x6d\x94\xe7\xac\x2a\xd5\x39\x44\x43\x30\x5b\xa4\x38\x37\xa8\xf0\x06\x56\xbf\x38\x5f\x67\x4f\x1c\xfe\x33\x5d\x97\x1b\xf1\xff\x8a\xed\xfa\xa7\xb3\x95\xc8\xcf\xf4\xb7\x67\xfe\xb7\x67\xe6\xdb\x33\xf3\xed\x99\xfe\x0c\xff\xb3\xdd\xa1\xe1\xce\x89\x9f\x33\x96\x99\x2c\x78\x5e\x42\x9d\xe5\x73\x9e\x95\x8e\xe0\x77\x17\xbd\xfa\xd7\xbf\xa2\x69\xce\x9e\x31\x95\xf8\x2d\x2b\xd9\x7b\xd4\x1c\x7f\xf9\xe5\x55\x54\x94\x8a\x38\x2e\xb6\x2c\xff\x5c\xf1\x52\xeb\xb0\x82\x27\x65\xf4\xff\x63\x09\xb4\x38\x9b\xdd\xbc\x44\x8d\x1a\xb5\xcb\xb4\x88\xfe\x1d\xdb\x9c\x21\x9e\x47\x5a\xe8\x96\x3a\x12\x67\x32\x26\x5a\x88\x44\x3a\x8c\xaf\xcf\xe2\x2d\xfd\x7e\x84\xc4\xf9\x2c\x82\x40\xbc\x45\xab\x2c\x3e\x0b\x00\x8e\x11\x8a\x99\x58\x4c\x64\x0f\x2f\x48\x40\x1a\x5c\xcb\x1d\x79\x60\xc5\xe3\x89\x4b\xcb\x01\x4a\x61\x4c\x69\x78\x6b\x25\x78\xe0\xb9\x4d\xf9\xfc\xb0\xaa\xf3\xae\xca\xf9\xd6\x7e\x72\x5e\xe6\xbb\x39\x2b\xf5\x5d\x39\x8e\xf4\x78\xf8\xa6\x8e\x2b\x68\x87\x37\x78\x40\x41\x7b\xb0\xab\x5f\x4f\x41\x7b\x4b\xad\x7a\xb3\xa0\x7d\x76\x33\x7b\x98\x5d\x5c\xcf\xfe\xab\xd6\xe2\xc7\x8b\xd9\xc3\xec\xe6\xbb\xf9\xbb\xdb\xbb\xf9\xdd\xd5\xfd\xed\x87\xbb\xcb\xab\xfe\x0a\x95\xe6\xe8\x9d\x78\x3e\x8b\xfc\x7e\xbe\x89\x1e\x3c\x93\x13\x63\x67\xe4\xd1\x20\x40\x5d\x38\x55\x4c\x64\x3f\x67\x72\x35\x01\x5a\xde\x6f\xa2\xab\x3c\x9f\x6d\xd8\x8a\xbf\xaf\x84\x00\xc7\x10\x06\xaa\x2f\x73\x0e\x82\x76\x12\xbd\x57\xe9\xcc\xfb\x0e\xb2\x6b\x5a\xa7\x01\xfd\x13\xc9\x35\x76\x3f\xa1\xfe\x3d\x37\x88\xcd\xdc\x21\x37\x20\x7b\x62\x99\xd0\xf2\xea\x1b\xe0\xf8\x50\x4b\x62\x6b\x9b\xd8\x3c\x80\xe8\x73\xa5\x4a\x16\xf1\x9f\x12\xa8\xca\x6a\x3f\x27\xd7\xea\x28\x92\xea\xfd\x7c\x6a\xed\x77\xfa\xc0\xec\x58\x02\x94\x9c\x8f\xe1\x88\xa5\x59\xfe\x80\x9f\x12\x2d\x6c\xbb\xd1\x50\x8a\x13\x24\x3e\x5e\xab\x55\x3b\x3e\x1a\x94\xd1\x12\xa8\x9b\x23\xb3\x82\x9c\x73\xb5\x8a\x8a\x4c\x3e\xc6\xf2\xe3\x9a\xcb\x48\x55\x39\xfe\x13\x3c\x6b\x59\x11\x2d\x45\x55\xac\x39\x90\xd1\x4f\xa2\x67\x1e\x6d\xd8\x0e\x55\x87\x8d\xca\x3d\xc4\x38\x38\x32\xfa\x70\xc2\xd7\x22\x93\x5a\x5a\x6c\x33\x13\x66\xab\x6f\xfd\x29\xc2\xf0\xa6\x26\x91\x1d\x0f\x19\x30\x2c\x97\xf0\x79\xcd\x21\x8d\xca\x79\x80\x8d\xab\x83\x24\x37\x40\xfb\x2a\xf5\x58\x6d\x5d\xf5\xf2\x2b\x03\x11\x04\xcb\xfd\xa4\xb2\x34\x4a\xab\xad\xc8\x12\x2b\x77\xf5\x03\xda\x55\xef\x80\xf1\xe0\x11\x10\x0d\xb5\x2c\x87\xbe\x89\xb5\x04\x9b\x3d\x9f\x60\x0f\x58\xc3\x0b\xc3\x55\x78\xd4\x8a\x55\xc1\xf3\xb3\x32\xcf\x56\x2b\x08\xae\x99\xd4\x95\xaf\x1f\xcf\xc2\xd5\xcb\x1e\x9f\xa5\xe1\xe7\x50\x0a\xb5\xca\x12\x26\xfc\x30\x8d\xb3\xef\x6c\xc1\xbc\xb9\xf6\xdb\x2a\xdf\xaa\x02\xa2\x01\x76\x40\x9d\x85\x40\xdb\x9c\x03\x66\xc3\x1c\xd9\x2a\x8f\x67\xd1\x9c\x2d\x91\xbb\x9f\xe8\x9e\x5c\x92\xb1\x61\xcc\x33\x2f\x9c\xeb\xdb\x00\x46\x22\xb1\x07\x50\xe4\x46\xea\x19\xf8\x96\xb5\xc5\xae\x0d\x58\x3d\x53\xa9\x40\x37\xb1\x20\x92\x36\xd2\x62\x30\x40\x97\x36\xa4\x84\x89\x60\xab\xec\x89\xcb\xaf\x00\x7f\xc4\xd9\x68\x7a\xea\xf6\x96\xb6\x8a\xc8\x63\x11\x25\x6d\xa0\xf4\x50\x8d\xb8\x3f\xf0\xbd\x12\x6a\x81\x84\xcf\x0d\xac\x49\xff\xd5\xe9\x82\xad\x7b\xe2\x79\x9e\xa5\x63\x6e\xab\x59\x93\x5b\xfb\x69\xdf\x00\x2d\x91\x88\xed\x09\x2e\x4a\xa6\xed\xb0\xb2\xae\xcd\xd6\x93\xac\xf6\xa9\xce\x60\xdf\x16\xd6\xc0\xb5\x8f\xab\xc1\x8b\x81\xca\x31\xd5\xc3\x4c\xd3\x9c\xcb\x51\x1b\xdd\x4c\xdb\xdd\xb3\x96\x2e\xd3\xb7\x7f\x93\x8f\xc8\xbd\xc4\x44\x51\x9b\x80\x39\xa6\xe8\xdf\x6c\x1d\x3a\x1f\x81\xf5\xc7\x6e\x62\x10\x15\x1a\xb4\xa3\xf5\x75\x7f\x20\x97\xc7\x51\x85\x45\x2f\x70\xa3\xaa\x52\x79\x1c\xec\x7a\x3e\x33\x4b\xc5\x6e\xe2\xcd\x20\x36\x66\x69\x2b\x9b\xa3\x13\xa9\xe6\x6a\x76\x3d\xdf\x2d\x99\x48\xa3\xc0\x66\x3d\x62\xf2\x1d\x2f\x6d\xea\x99\x30\xe8\x82\x00\x5f\x62\x67\x1d\xe6\xde\x9a\xf4\x3a\x5b\x2f\x01\xa8\x43\xca\xf0\xb4\x6d\xb6\x4a\x72\x49\x1e\x62\xa9\x62\x49\x8d\x1b\x5c\x6d\xcb\xd3\x19\x04\xe2\x27\x64\xa4\x62\x58\x87\x17\x4a\x3c\x51\xb0\xc7\xc3\x90\x01\x74\x49\x3d\xc0\x4b\xfd\xde\x6b\xed\x16\xfc\x13\x14\x95\x05\x3f\x75\x0d\x5c\x3a\xe7\xab\xac\x28\xb9\x9f\xbb\xe0\x7f\x7f\x32\x4c\xdb\x40\x21\xee\x5b\xfa\x4e\x4c\xdb\x7d\x2f\x9b\xbe\xb5\x23\xc6\xb3\xdb\xf2\x74\x66\xbf\xeb\x3f\x0c\x41\x02\x52\xea\x09\x89\xe0\x15\xc0\x33\xc0\x89\xf4\x1e\xaa\x11\x0a\x8b\xfe\x62\x37\xc9\x32\xbf\x1a\xc8\x49\xd8\xa2\x55\xc5\x72\x26\x4b\xce\x8b\x58\x62\xa5\x06\x96\x91\x05\x89\xa3\xcb\x00\xc4\xd8\xe9\xda\x89\x2a\x4a\x4c\x52\x87\x4f\x96\x2c\x13\x55\xde\xa9\x42\xe2\xa9\x3c\x28\x23\xae\x6f\x95\x2e\xa1\xd9\xa8\x6d\xd3\x6c\x7a\x8d\x77\x8b\x6c\x62\xa7\x21\xa7\x34\x04\x9a\x61\xf6\x49\xc7\x14\x8c\xc8\x1d\xbe\xdf\xd6\x7f\xd0\x91\x71\xf3\x6f\xc5\x7c\xab\x46\x48\x3c\xe2\xc4\x6a\x6d\xac\xf8\xdc\xb0\x73\x7b\x22\xa4\x9f\xbb\xf0\x70\x58\xf1\x08\x19\x95\xfb\xd4\xeb\xfd\x3e\xb3\xbf\xfc\x79\x8f\xa5\xd2\x27\xbb\xe0\xd4\xae\x99\x4c\x81\x26\x9b\x95\xb5\x17\xc8\xde\x01\x00\xa1\x2d\x8d\x70\xec\x0e\x39\x43\x04\x67\x9e\x34\xc2\xff\xfb\xd6\xa9\x96\x37\xb0\x27\x8c\x1c\xf4\x12\x46\xf3\xdb\xa2\x48\xee\x65\x27\x30\x64\x7b\x61\xbb\x8f\xe0\x32\x5b\x75\x6d\xc9\xcb\x73\xca\xb9\x7a\xe3\xa6\xa4\x4c\xe8\x2a\xd2\xfb\x65\x01\xa1\x8f\xbc\x8c\x10\xfd\xd3\xc2\xcc\x2f\xb9\x8f\x25\x61\xa5\x63\x45\x38\x00\xee\x63\xa5\x44\x11\xfd\xc9\xa6\x84\xfc\xe9\xaf\x26\x4f\x7e\x17\x2d\x61\xad\xa1\x18\x45\x25\x49\x95\x03\x3a\xb5\x21\xd0\xe7\xf8\x36\x8d\x41\x46\xb9\xc0\x17\xb9\x00\x11\x05\x39\xf7\xdd\x5c\xd0\x64\x7a\x07\x93\x7a\x00\x8b\x0b\x51\xdf\xed\x5b\x48\x28\x6a\x79\x51\x46\x45\xc9\xb7\xad\x52\x29\x50\xba\xc2\xe7\xe4\xa8\x7a\xee\x36\x7c\xf6\xfd\x20\x1b\xb6\xc2\xbc\x7e\x52\x09\xbc\xf9\xd8\x16\xf7\x6d\x83\x4d\xe4\xad\xbf\x95\x80\x1c\x0d\xe0\x60\x84\x7a\xdd\x5c\x3d\x0b\x14\xf2\x45\x0a\x56\xc6\xb0\x8c\x58\xbc\x18\xe2\xe7\xe9\x93\x6d\xe1\xa7\xe3\x63\x9a\xae\x52\x83\x98\x33\xb0\xc1\x05\x82\xbc\xf8\xb8\x34\x87\xe0\x06\xd5\x37\xc6\xb4\xd5\xb3\x1d\x47\x62\x66\x38\x98\xa3\x17\x4c\x13\xf1\xc6\x7a\x24\x62\xc6\x93\x0f\x0d\x04\x8a\x9b\xcb\xae\x1b\xe4\xef\xb0\x48\x19\x3f\xda\xfc\xbe\x01\x40\x19\xbd\xcb\xff\xab\xc1\x64\x1c\x86\xf3\x33\x64\x95\x02\x7c\x8c\x86\xa8\x09\xd6\x41\x65\x83\x40\xc3\x6a\x1b\xfb\x81\x34\x98\x94\x4b\x55\xf2\x88\x45\x32\x13\xe7\xb2\x12\xe2\xfc\x46\x49\xfd\x78\x15\xd9\x0a\xb3\x27\x21\x36\x80\x44\x81\x8e\x70\x2e\x08\x0a\x79\x62\x02\x1e\x30\x3d\x24\x8c\x57\x95\xfa\x55\xd1\x97\x55\xec\x62\xa9\xbf\x20\xce\x1b\xe0\xe9\xca\x6c\xa5\x15\xf6\x66\xe0\xc9\xa9\x2f\x40\x1d\xd8\xf9\x8d\xb7\x5c\xc2\x3e\x44\xef\xa3\x2a\x9c\x20\xef\xe0\x08\xdb\xf8\xc6\x4b\x30\xa7\xd6\x4c\xf6\x11\x86\xc5\x16\x5c\x28\xe4\x00\xec\x12\x94\x6a\xc3\xb2\x63\xbc\xc5\xfe\x10\xb0\xb1\xce\x11\xc4\xf2\xc2\xfc\xc4\x32\x88\x59\x2e\x1f\x82\x55\x05\x6a\x06\x6b\x97\xd9\xd0\x11\x4d\xae\x63\x12\x63\xb1\x62\x9b\xa7\x14\xa8\x7f\x28\xc6\x62\x6d\x7e\xc4\x38\x32\x3a\xb5\x99\xd1\x30\x01\xd4\x1b\xed\x6e\x57\x88\xc8\xa7\x60\x4c\x4a\xab\xda\x0f\x38\x8f\xbf\x66\xe0\xfb\x25\xf1\xdd\x1d\x98\x3b\xfd\xdb\x58\x70\x76\xb3\x52\xa7\x88\xff\x7d\x46\xf8\x91\xb9\x5a\x9a\xd4\x9f\xc3\x21\x53\x06\x06\x60\xfc\xa2\x4f\x1f\x28\xa5\x79\x48\xba\x3c\x0c\x4a\xce\xc9\x07\x31\x6c\xb0\xf5\x05\xbb\x95\xef\xf0\xf3\xf7\x4a\x64\x49\x7f\xd4\xca\x3c\xe3\x40\x1d\xd4\x88\x59\x02\xc9\x16\x37\xf4\xbd\x34\x28\x0c\xc7\x94\x3c\x29\x9d\x8f\xad\x39\xb9\x31\xde\x5c\x63\x52\xd9\x56\x00\xc0\xd0\x11\xb3\xe9\x67\x05\x4a\x5f\xa0\xec\x17\x8d\x0d\xe0\xe1\x01\xe7\x6e\xc2\xc8\x06\x0b\x06\x02\xb2\xe9\x79\xad\x04\x9f\xa0\x13\x0f\x42\x42\xb1\xdc\xf2\x3c\x51\xda\x90\x8d\x52\xf5\x4c\xa9\xe2\x99\x48\x1d\xb6\xc6\x6b\x88\x50\x43\x1c\xe9\x0d\xa1\xad\x71\xeb\x64\xb5\x0c\x58\xfb\x8f\xad\x41\x5c\x3e\xce\x98\x39\x5d\xc8\xa9\xef\x14\x7c\xa4\xa8\x35\x2e\x05\x91\xd6\xd4\xdc\x65\x7a\xd1\x83\xf1\x8c\xdb\x61\x6e\x61\x13\xe0\x81\x41\xba\xb4\xb2\xb6\xaf\x54\xc3\x57\x5f\x4a\x28\x07\x43\xa8\x3d\x8c\xa0\x68\x23\x1a\x32\x0b\x18\xaa\x21\xae\x38\x83\x36\x35\x96\xce\x41\xf8\xaa\xf0\x55\x92\xd6\x7d\xc6\x6a\xa7\x0c\x80\x4c\x13\x3e\x89\x5e\x05\x13\x7d\x05\xe5\x42\x52\x41\x7f\xe4\xc4\x09\x96\x06\x8e\xeb\x24\xca\xca\x58\x66\x05\x9e\xcc\x9c\x0b\xfe\xa4\x47\xe7\x53\x5f\x53\xb0\x87\x50\x5d\xec\xb4\x21\x2f\x82\x51\x81\x52\x6a\x81\xba\x21\x31\x37\xf7\xcb\x4e\x18\xa4\x37\x03\x93\x51\x25\x01\x35\x81\xff\x84\x74\x51\x62\x67\xe2\x1f\xa9\xee\xce\xb1\x98\x11\x16\x68\x2c\x67\xcb\x68\xa7\x2a\x24\x9e\x4c\x89\xca\xdd\xd4\xd1\xdb\x1c\xe0\x0c\x15\xf7\x85\x2a\xd7\xc1\x46\x10\x58\x20\xde\x24\xfe\xc4\xf3\x5d\x09\xcc\x9c\xb0\xae\x92\xb3\x72\x1d\x65\xe5\x04\x92\xb7\x8d\xe0\x88\x25\x4b\x09\x6b\x99\x9a\xcb\x2c\x75\x7e\xf7\x3e\xd3\xdf\x17\xea\xa9\x4f\xa7\x3b\x36\xec\x89\xb7\x7a\x2b\x98\x9c\xa3\x40\xfd\x15\x02\x9f\x1e\x8e\x63\x97\xaf\xaf\x5a\xcc\x2d\xaf\xd2\x49\xc6\x69\x35\x9d\xbb\x00\x5d\x55\xab\x70\xa6\xa3\x09\x1e\x06\x57\x70\x6a\x34\x73\xc8\xdc\x34\x01\x98\x4c\x68\x61\x41\x9e\xc4\xe1\x52\xc0\xc5\x44\x59\xcd\x15\x6f\x4e\xeb\xbe\xa0\xa8\x39\x01\x5f\x6b\x80\x6e\xc8\xce\xd7\xde\x90\xfa\xb6\x8f\x8f\x0d\x35\x14\xa6\x83\xe2\x43\x7b\x86\xf5\xb2\x31\xa2\x4e\x37\x4b\x33\x56\xf4\xd1\x92\x50\x5a\xbf\x3b\x26\x03\xf1\xa8\x50\xda\xae\x31\x5e\xa0\x76\xbc\x4e\xdf\x04\x51\x2d\xc9\x05\xa7\x74\xae\x84\x6c\x3e\x83\x71\x02\x90\x0d\x33\x9a\xc9\xc8\xf8\xbc\x27\x51\xfc\x47\x3c\x59\x45\xfc\x47\x24\x2a\x31\x70\xaf\x86\x6a\x93\xee\x4f\x1a\xb0\x3d\xdb\x68\x04\x66\xc1\xb8\x0b\x47\x14\x90\xa3\x3c\x9e\xbf\x26\xc7\xa5\x07\xa2\x80\x89\x72\x0b\x6c\x80\x9e\x49\xb4\x39\x77\x86\x00\x13\x20\xc9\xf3\x2a\x29\xdd\x84\x2d\x65\xe0\xb7\xe6\x43\xbd\x44\xdb\x8a\x5e\x54\x4b\xd1\xa7\xf2\x58\x9a\xd6\x1c\xa7\xf8\x85\x10\x8d\xa6\x9a\x54\x99\xde\x59\x05\x3f\xbe\xc1\x37\x02\xd8\x2c\x57\x1b\x55\x97\x03\x10\x17\x58\x70\x07\x54\x3d\x8d\x1c\x59\x2b\xa8\x1e\x3d\xbc\x90\x42\x18\x52\x44\xd4\xda\x3c\x26\xbc\xa2\x82\xa2\xa3\x65\xa5\xc5\x91\x57\x99\x15\x4b\x20\x08\x5d\x66\x90\xfa\x42\xeb\x12\xcb\x1f\x14\x55\x78\x81\x7a\x65\x26\x69\xd2\x28\x68\xd9\x5e\x59\x98\x27\xfa\x87\xb7\xf0\x6c\x2f\x31\xa0\x5f\x03\x49\x87\x4c\x2d\xc8\x27\x9d\x68\xdd\x23\x77\x93\x4a\x98\x8c\xe5\x7f\xeb\xe5\x31\xbc\x97\xb4\xad\x6a\x89\x97\xd8\x80\xca\x47\xaf\x3f\x61\xa3\xaf\xff\xfa\xe6\xd3\x1b\xe4\x14\xae\x0a\x40\xd6\x9b\x84\x4f\x88\x2d\xd2\xad\x84\x80\x6c\x66\x33\x03\x28\x9e\x00\x4c\x01\xdb\x45\x2f\xe5\x15\x59\x39\x23\xe9\x01\xf7\x12\x03\x3a\xef\xf4\x45\x94\xb0\x32\x59\x9f\x19\x6d\xce\xe7\x02\xcd\x0c\x29\x29\x41\x6c\x69\x5d\xab\xbd\x4e\x55\x5b\x60\xf9\xc6\xc2\x7c\x07\xe7\x45\x4f\x01\x62\x4b\x0f\xc1\xa9\xf4\xc1\xf4\xf1\x70\x3a\x84\x6d\xa7\xe9\xd9\x9f\x1b\xdc\x2c\x17\x78\x23\x37\xba\x64\x1b\x9e\x46\x31\xc2\xcc\xc4\x7f\x34\xdb\x1f\xcb\xed\x62\x2a\x76\xcb\x92\xca\x74\xf4\xb2\x4c\x01\x5b\x66\xcf\x4b\x37\x4f\x9b\xa6\xd2\x9e\xe5\xee\x34\xb6\xda\xf5\x1d\xbb\x3a\xb6\xa7\xe1\x4a\x0b\xba\x78\xec\xfa\xdc\x87\x71\xb2\xb0\xce\x19\xe8\x13\x89\xec\x51\x2b\xb9\x9e\x62\xe5\xee\x27\xf2\x68\x41\x0d\x4c\x96\x20\x46\xa4\x64\x62\x07\x09\x54\x93\x58\x62\xc1\x10\xd4\x0c\xee\x12\x91\x25\x44\xdc\x18\xea\x42\xfc\x89\xcb\xf2\x8a\x2a\x93\x4c\xa6\xd6\x4c\x2e\xd5\x31\x0a\x91\xad\x92\x3a\x8a\x9c\x60\x16\x6a\x3c\x00\x90\x81\xed\x3a\x07\x63\x92\xa3\x1f\x1f\xac\x6a\x93\xd9\x61\x8f\xf8\x84\xd0\xaa\xa0\xa6\x2a\xfa\x7b\xb5\x50\xc2\x14\xa5\xcd\xde\x46\x2a\x87\x4a\xff\x52\xd1\x3f\x65\xe9\x28\x3c\x6e\x24\x1b\xa7\x70\xa9\xa5\x36\xaf\xe9\x43\x8d\x11\x17\x8e\x79\x40\xe5\x96\xbc\xda\x73\x76\x86\x33\x68\xdb\xad\xa0\xd8\x07\x00\x42\xbf\x94\xf2\xda\x55\x66\xd4\x7e\x57\x3e\x74\x28\xae\x96\x11\x39\xf4\x71\xd6\x2f\x35\xad\x53\x7e\x28\x5d\x1d\x62\x05\x18\xef\x83\xca\xb3\x55\x26\x59\xa9\xf2\xe8\xf5\x7b\x53\x60\xfb\xc6\x82\x42\xc0\x2a\xb6\x0f\xa3\xe6\x5d\x1d\xb3\x44\xe8\x99\x6d\x57\x8d\x20\xe2\xce\xd3\x79\xb3\xba\x63\x2c\xc0\xf5\xde\x8c\x12\xfd\xab\xa2\x64\x9b\xad\x5f\x57\x67\x71\x17\x69\x65\x04\x2e\x42\x64\x06\x06\x46\x78\x56\xb8\x2c\xc1\x58\x92\xeb\x0a\xf7\x4d\xe5\x2d\x34\x17\xf5\x59\x82\x98\x9f\x1f\x58\x3b\x43\x6c\xd3\xfb\xbf\xee\x75\xef\xdf\x5d\x1b\x8f\x9e\x7b\xb6\x83\x77\x10\x26\xca\x65\x02\x52\x15\x6a\x04\xd6\x41\x99\x42\x2c\x5d\x89\xc0\xa5\x50\x55\x1a\x91\xec\xa1\x50\x41\x3e\x8d\x32\x3e\x9d\x44\xc5\x5f\xbe\x39\x3f\x9f\x4e\x3b\x56\x62\x2c\x92\x9a\xbd\xdf\xf0\x5d\xfb\x09\x87\xbf\xb5\x96\xe0\xec\xb9\x5a\xb4\xb2\xe3\x8c\x43\x8a\x92\xfd\xc0\xb6\xfd\x85\x1e\xcc\x28\xb6\x98\x82\xe6\x13\xad\xb4\xdc\xfd\x21\x34\xd0\xf3\x71\x96\xac\x41\xca\x83\xf3\xec\x7b\x7a\xc2\x14\xf8\x7a\x97\x96\x1a\xfb\x98\xee\x4c\xae\x75\x7f\x57\x5b\x96\x73\x59\xce\xa1\xc7\x71\x9d\x41\x27\xef\xe1\xf3\xa0\xf8\x71\x90\xc5\xfe\x8f\x07\x85\x8e\x18\x53\x01\xf1\x4f\x8f\xc2\x9e\x50\x77\xf5\xeb\xf3\x3a\x83\xb8\xa8\xe7\xb4\xde\xc7\xda\x4d\x13\x3a\x60\xf5\xbc\x09\x05\xa2\x73\xd0\x84\xdc\xe8\x11\x30\xc7\x32\xb4\xdb\x1c\x5f\x2d\xca\xcc\xbf\xb9\x33\x87\x79\xf3\x2e\x7c\x12\xb1\x32\xd2\xfb\x27\xa2\x9f\x79\xae\x1c\xfa\x03\xd1\x9e\x78\x0d\xf7\x54\x03\xed\xe6\x87\x43\xd3\x21\xe6\x2c\x82\xa2\xf9\xa8\x40\xf0\x2f\x54\x64\x82\x6a\xdf\x62\x67\xaa\x82\x3a\x7c\x7d\x5b\x9e\xcc\x0f\x20\x86\xb2\x43\xf1\xb4\x2e\x4f\xbe\x1b\xcb\xd4\x3e\x16\xe6\x82\x9e\x83\x52\xa9\x0d\x04\xad\x0d\xb1\x2d\xe5\x6b\x00\x3f\xcc\x32\xaa\x7b\xd9\xa6\x30\x89\x7f\xfc\xc7\x3f\xa7\x5d\x88\x93\x30\xf4\x83\xe9\x3f\xdf\x19\x2e\xe4\x9c\xb3\xd4\xd1\x4b\xf9\xec\x51\xfb\xd0\x24\xf7\x1e\xc8\x63\x92\x40\x8e\xd8\x97\xa6\x36\x65\x71\xa2\xdc\x11\xcf\x52\x1f\x2e\xdc\x1e\x70\xda\x1e\xcb\x2e\xa4\x96\x11\xd8\x54\x1d\xfa\xdc\x94\xc6\xd9\xd2\xc3\x88\xd5\x6b\x97\x4f\x5f\x48\x53\xed\xaa\xf7\x1f\x32\x7c\x63\x05\xbd\x57\x4a\x1c\x6b\x09\x31\x61\x10\xd8\xe6\x00\x78\x73\x8c\x26\x83\x07\xc0\x9a\x3e\xb3\xb7\xd6\x2b\x67\x0b\xe8\x41\x4e\x7b\x70\x73\x10\x32\xa2\x21\x40\xa0\x06\xb9\x29\xbb\x13\x29\x8a\x6d\x8b\x63\x76\x64\x42\x08\xb4\x81\x11\x1d\x8b\xe5\xde\x30\xcd\xbc\x44\x5f\xe6\xc6\x08\x45\x86\xb5\x11\x8e\xb2\xc3\x10\x9e\xa6\xd6\x95\xb5\xc9\xfc\x62\x64\xbb\x8e\x5e\xdf\x66\x3d\x11\x14\x4f\x1b\x75\xf4\x80\xc4\xd2\x7b\x2c\xb0\xe4\xc8\x64\xdc\xd8\x55\x6b\x33\xd5\x82\x63\x78\xb4\xa9\x76\x0c\xe2\x44\xaf\xa1\xfd\xd6\x07\x3f\x02\x7f\x71\xa2\x36\x0b\x6d\x2e\x21\x68\x21\x05\x6c\xe0\x95\xbb\x30\xd5\xc7\xb6\x74\xd2\xbc\x56\x88\x77\x5a\x5b\x7b\x9b\xed\xe2\xd7\x46\xfa\x22\x6b\x9f\x26\xe8\xab\x16\xa7\x05\xc7\x68\x97\xb3\x17\xf5\x19\x00\xaf\xc7\x33\xdb\x15\x80\x14\xa5\xed\xf6\xe5\xd2\xb1\x06\xfa\x76\x84\xb5\x24\x6d\xb1\x28\xc1\x2e\x56\x04\x20\x47\x73\xc9\x88\x38\x56\x18\x4c\x2c\x57\x34\xf4\xaa\x68\x5f\x9c\x97\x46\xf2\x68\x5f\x0b\x68\xdf\xd6\x9b\x13\xee\x7e\x90\xc5\x3e\x41\xdb\xe7\xcf\xae\xf8\x80\x27\x4a\xda\x1a\xf5\x93\x98\xd4\x2d\x28\x1f\xed\xc3\x85\xbf\x35\x00\xfb\xf7\xd9\xf7\x47\xba\x19\xbc\x67\x32\x57\x09\x11\x10\x94\x11\x00\x48\xa2\x38\xd6\x7d\x4f\xa2\x0d\xcb\x24\x5d\x83\x32\xd7\x02\x32\xe5\x8b\x6a\xb5\xea\xb4\x7e\x85\x5a\xbd\x68\xe0\xc4\x60\x62\x78\xbf\xef\x28\x6c\x10\x7d\x38\x0f\xfb\x2c\xcd\xdf\x8e\x9b\xa3\xb7\xec\xed\x14\x8e\x8a\x99\xe9\x09\x9d\xe3\xcb\x4c\xf0\x2f\xe3\x9b\x38\x91\xa3\x65\x36\xc4\xd1\x62\xa2\x2b\x90\xe1\x49\xc0\x5e\xc6\xff\xfd\xbb\x07\xe6\xcb\x78\x60\x5a\x5d\xcc\xf5\x11\x62\xed\xd2\x3c\x0b\x15\xe0\x9e\x11\x1e\x58\xa2\x68\x6b\xd9\x61\x54\x84\x91\x58\x70\x99\x16\x40\x01\x72\xfa\x9a\x45\x78\x7d\x8e\x2f\xe5\xdb\x43\x81\x73\xaf\x36\x3c\x82\xae\x0a\xc4\x51\x8a\x28\x89\x76\x02\xf1\x62\x3d\x41\x07\x4b\x0b\x22\x89\x02\xa2\xc9\x9a\xc9\x15\x4f\x9d\xd2\xfa\x5a\xf2\xe7\x48\xbf\x06\x13\x3f\x80\xe6\x6d\xcf\x24\xe2\x65\xf2\x86\x40\xce\x5d\xbe\x4d\xce\x13\x95\xa7\x00\x64\xb2\x62\x79\x0a\x59\x5e\x74\x25\x05\x4b\x1e\x81\x9b\x14\x1e\x4c\xec\x91\x82\x7c\x06\xeb\x03\x03\xcf\xae\xb5\x4c\x26\x08\x38\x6d\x28\x7b\xec\xf8\xf0\xf3\x22\x62\x49\xae\x0a\xf4\xc4\x18\x76\x45\xa2\xf5\xf3\x98\xcd\xa0\xc7\x4e\x27\x0a\x2b\x8e\xc2\x2e\xb9\x90\x2e\x67\x83\xff\xb4\x15\x4c\x86\x77\x12\xa7\x5b\xe6\x0c\x80\xcf\x3b\x4f\xbe\xad\xf7\xfc\xa2\x75\xeb\x3e\x70\xb1\xbb\x56\xa8\x7d\xe6\x9c\xa5\x3b\xbf\x2a\x2e\x93\x84\x46\xca\xd2\x4d\x26\xf5\xd6\xeb\x6b\x8d\x4c\x77\x24\x5f\xa1\xe9\x84\x09\x0c\x75\x03\x90\x96\x10\xb5\xab\x5f\x44\x92\x6b\x95\x85\xe5\x99\xd8\x81\x96\xba\xcd\xf9\x99\xd7\x8f\x77\xbf\x29\xd7\x2e\x2b\x62\x89\x63\x07\x52\xe1\x65\x25\x50\x97\x05\x6b\xcf\x4e\x80\xee\xe1\x87\xd9\x44\x3f\x63\x25\xc1\xd7\x78\x1d\xc3\x99\x3d\x49\xde\x52\xd3\xce\x1a\xe4\x3a\x74\xd5\x9a\x39\x24\x55\xac\xd5\xb3\x49\xae\x7c\x66\x2e\x76\x3e\xc6\x10\x7d\x4f\xb2\xcb\x18\x99\x5e\xa4\x1d\x54\x8e\x80\x67\xe7\x9d\xca\x09\x62\x06\x84\xc3\x7b\xa2\xf3\xf9\x5b\xf6\xc4\x27\xd1\xfd\x96\xe5\x8f\x93\xe8\xed\x4e\xb2\x4d\x96\x7c\xaf\x16\x7b\x6d\xcb\x53\xf8\x57\xac\x0a\x34\xda\xff\xd6\xea\xa9\x98\x78\x00\x13\x9e\x17\xae\xe9\x09\x30\x41\x50\x7d\x62\x08\x7f\xbb\xeb\x09\x37\x71\xe5\x4e\x14\x92\x53\x69\xc8\xdd\x61\xf1\x4e\x7d\xb9\x2e\x01\x9c\xac\xa6\xcc\xe3\xb6\x60\xb0\x96\x91\x90\x30\xad\x27\x7e\x06\xaf\x9e\xca\xa3\xad\x60\xa5\x3e\x2b\x86\x21\x0f\x4f\x05\xc6\xaf\x51\xda\xd7\xf2\xc9\x87\x3e\xea\xa6\xe3\xf9\x56\x29\xd1\xfa\xb6\x9f\x74\x01\x1b\x9e\xb4\xa1\x8b\x37\xc3\x3c\xbc\xc2\x7f\xf1\xcc\x2a\x3a\xaf\x8c\xf3\xe1\x78\x2c\x06\x70\x9a\xd2\x2a\x47\x5a\x2f\xb3\x1c\x53\xe7\x02\x65\xae\xfa\x0f\x1f\xb9\x05\x4f\x18\x54\x53\x1b\xed\x03\x19\x07\xc1\x3d\xe5\xde\xe8\x16\x7f\x51\xd1\xec\xa7\x43\xe5\x80\x76\xe7\x59\x5b\xe1\xd8\xd8\xcb\xf5\xb0\x6e\x75\x02\xe3\xc8\x8d\x03\xcb\x64\x6e\xed\x2b\x9e\x37\x89\xea\xf3\x44\xb0\x62\x60\xd6\x4c\xab\xdc\x99\x51\x43\x97\xd0\xce\x70\x99\xf9\x37\xf0\xd7\x6d\x06\x0a\xe3\x58\x5e\xd8\xe2\x71\xf7\x8c\x5b\xd5\x03\xc5\x2c\x2a\x5d\x8d\xad\xc1\x74\x30\x87\x34\x30\x89\x8a\x2a\x59\x43\xc2\x5b\x28\xa7\x7c\xb9\xd5\xbc\xb1\x93\x58\xea\x87\x10\xf1\x08\x19\xc4\x6c\x9e\xf5\x73\x57\x64\x3f\x73\xfb\xd2\xa2\x4a\x14\x3c\xae\x0b\xa6\xb7\x86\x88\x37\xea\x8a\x88\xc9\x3d\x64\xf9\x23\x4f\x3d\x37\x52\xb5\xd5\xe6\xef\x34\xb6\xcb\x8c\xe7\xd7\x71\x45\x92\x66\x53\xf8\x13\xf3\x15\xb1\x9a\xa4\x15\xd9\x92\x27\xbb\xa4\x51\x6b\x1c\x44\x4a\x4f\xe7\xaf\x3c\xcc\x5d\xd7\x57\x6f\xd9\x6e\x85\x7d\x6c\xd4\x0c\x45\x5d\xe1\xa5\xff\x9d\x49\x25\x1d\x25\x7f\xbf\x75\x8f\xcb\x9e\x44\xf2\xdf\xf3\x43\x7e\x93\xde\x89\x61\x15\x80\x81\xfc\x32\x29\x18\x60\x0d\x91\xd6\xdc\x9a\xf8\xf1\x75\x15\x79\x64\xa9\x7f\x6f\xca\x35\x6f\xa9\xf5\x18\x76\x15\xa8\x94\x26\xb5\x65\x3e\x63\xf0\x98\xf0\x53\xb3\x5e\x97\x42\x15\x55\xde\x7f\xf9\xef\xc2\x51\x9b\xde\xdd\x6c\x02\x9c\x2c\xbe\x59\x70\xa8\xe0\x4a\x71\x67\x5a\x27\xb3\x4f\x51\xd0\xf6\x52\xfd\x7b\x4a\x89\x78\xe6\x51\xc2\xb6\x90\x49\xdb\x8e\x2e\xdb\xf8\xce\xb3\xaf\xe1\xe5\x5d\x71\x5f\x0b\xa8\x3d\x8e\xc1\xe1\x0a\x62\x49\x5f\x55\xda\x65\xab\x0d\x56\xab\x32\x0f\x5c\x31\x83\xa2\x6f\xa7\xf0\x6c\xbf\x67\xe5\x1a\x9d\x04\xc0\x46\x82\x91\xd8\x52\x2b\x50\x88\xfd\x8d\xee\xee\x85\x50\x0b\x00\x8c\x06\xfe\x82\xae\x73\x4e\x87\x73\xd0\xd2\x35\x37\x6c\xc8\xd9\xd6\xf7\x01\xb2\xe6\x73\x5e\x40\xf9\x64\x33\x9e\x34\x34\x89\x6d\x9c\x23\xa3\x39\x5c\x2d\xb6\xde\x36\x1c\x19\x4d\xc0\x29\x2d\xd5\x21\xa3\xe9\xaa\x45\xac\xef\xbb\x58\x57\x7e\xde\x39\x03\x8e\xb8\x12\x58\xb8\x31\x60\x5b\x64\x72\x25\x78\x6d\xbe\x06\x91\x3f\x96\x17\xf8\x97\x80\xaf\xc1\x02\x2b\xda\xa4\x21\x02\x5f\xb6\xf7\x0f\x13\xd1\xa3\x0b\x53\x58\x0a\x05\x8c\x8c\x02\x8a\xd6\xe2\x02\xf7\xc8\x04\xf2\xbe\x65\x99\xe5\x5a\x9f\x2e\x40\x5d\x28\xaa\xc5\x99\x2b\x33\x54\x39\x28\x18\x50\x85\xba\x65\x39\x20\xdb\xaf\x33\x91\x9e\xb5\x3c\x24\xe8\xe3\x74\x00\x69\x06\x89\x82\x09\x12\x5f\x60\x17\x62\x95\x8b\x9d\xbb\x6d\x47\xab\xf7\x9c\x25\x6b\x5b\x61\x81\xe2\xba\x4f\x5e\x04\xc6\xd2\xaf\x9d\xfc\x32\x20\xbb\xa4\x03\x58\xf7\xb7\x2f\x27\x82\x35\x1b\x22\x27\x1e\x42\xd3\xca\xdc\x1a\x6d\x1c\x92\xe4\xe8\x5a\xaa\x62\x8e\x21\xfe\x2f\x50\x86\xef\x3c\x43\xc5\x96\x3d\x4b\x2a\xee\x1b\x55\xe6\x30\x4c\x3e\xb4\x33\x76\x68\xf9\xd0\x48\xfb\x71\x92\x42\x52\xa1\x7c\x99\x59\x14\xda\x89\x87\xc7\xce\x84\xf0\x51\xcb\x9c\x2b\x28\x96\xce\x61\xa0\x9f\x7f\x21\xf4\xff\x4f\xea\x82\x9b\x8a\x39\x53\x24\x89\x99\x98\x4a\x34\x42\x71\xa0\x10\xc5\x19\x1a\xe6\xce\x7c\xde\x77\x9b\x4f\xa5\x4f\x26\x2c\x59\xf3\xb9\x1e\x5a\x35\xa2\x5c\xe9\x92\x95\x4c\xa8\xd5\xa5\xfe\xf8\x1e\xbf\xed\x7d\xcc\x50\x2f\x42\x35\x0d\xfb\x82\xe4\x3f\x96\xac\x89\x58\xa9\x96\x32\xd6\x75\x9f\xb0\xdb\x79\x0b\x1f\xee\xde\xb1\xb6\xbb\xe3\x3d\x02\x29\xb8\xcc\xa6\x16\x2a\x61\x79\x6e\x12\x7a\xa9\xd7\x88\xe5\x65\xb6\x64\x49\xe0\x41\x1f\x06\x71\xe5\xbf\x90\xd8\x62\x01\xa1\x67\x93\x96\xe6\x8a\xc5\x59\x64\x61\xd0\xbb\xf7\xff\xd4\x36\x05\x77\x42\xfa\x05\xfc\x23\xfd\x8e\x43\xbc\xbe\xcd\x37\x32\xf0\x2c\xb3\x46\xd2\xf3\xc0\xc5\x66\x51\x00\xb1\xd0\xba\xa4\x1e\x93\xfd\x11\x6b\x78\x60\x71\xc9\x38\x94\x42\x8f\x5e\x7e\xb8\xe4\x6c\xc0\x15\x13\xb5\x3a\x92\x51\x53\x9d\x7a\x59\x2f\xac\x84\x25\xc4\x14\xef\x27\x9e\xba\xa2\x53\x0f\x79\x44\x3f\x7d\x6c\xc5\xa3\x0d\x4f\xb3\xaa\x0e\x82\x19\x94\x23\xfc\x6e\x0b\xff\xdf\xb3\x85\x21\xb5\xe0\x25\x0d\xe1\xf6\x42\x97\xdf\x9f\xc2\xaf\xe0\x29\xf4\xc6\x49\x7b\x3d\xf2\x16\x0c\x96\x1e\xfd\xd1\x3b\xf7\xd8\x3a\x0d\xd4\xbe\x2b\xac\x79\x0e\x7d\x17\x4e\xe9\xaf\x81\x56\xfc\x07\xbb\xff\xba\x0b\xbe\xbe\xaa\x20\xc6\x90\xc7\x54\x5f\x71\x1b\xd6\xb8\x31\x57\x1b\x18\x60\x4b\xd5\x77\xc5\x3d\x24\x1c\x56\xbe\x2a\xec\xaa\x87\x57\xd9\xe4\x6a\x5d\x67\x45\xf9\x23\x13\xd5\x51\xf0\x37\x50\x53\xf2\x62\x91\x78\x33\x54\x1c\xa6\xf7\x45\x6f\x00\xf9\x2e\x0c\xf1\xea\x77\x15\xcf\x1c\x94\xc9\x1b\xe0\x5d\x3d\xee\x31\x82\xf7\x93\x5d\xaf\x4f\xa8\x33\x3e\xe7\x6c\xbb\xe5\xb9\x89\x5b\x36\x42\xcb\x80\x66\x0b\xbd\xc4\x12\x7d\x0f\xdf\xdf\xdf\xde\xd4\xdf\x06\x2d\x7b\x6a\x4d\xc3\xcf\x60\xe9\xa6\xed\x3b\x77\x53\x09\xd1\xb9\x73\x03\x68\x74\x3f\x5c\x5f\xcf\x7f\xbc\xb8\xfe\x70\xd5\x0b\xae\xe8\xfd\xac\x73\x4d\xec\x48\x68\x4d\xd0\x22\x2c\xc1\x0a\xac\x36\x3c\x37\x65\x1d\x6e\xd6\xa8\x78\x57\x42\x84\x20\x9b\xb1\xfc\x44\xed\x40\x82\x51\x25\xd1\x63\x13\xcb\xa8\x77\xe1\xc2\xfe\xe1\x67\x9f\x74\xe3\x9f\xf0\xdb\xb3\xc8\x4d\xe2\x9b\xe8\xc6\xf6\xda\xb1\xae\x94\xbd\x78\xc4\x75\x40\xac\xcf\xae\xeb\x70\x38\x20\xfd\x29\xaf\xc7\x07\x09\x18\x2e\x04\x80\x7c\xaa\xdb\x81\x6b\xf7\x29\xf4\x06\x5a\x59\x9e\xa2\x6a\x0b\xed\x4e\x10\xfc\xb5\x28\xa9\xb6\x11\xd7\x2c\x96\x44\x83\xcd\xa0\x0a\xb2\x73\x4c\xd1\x8c\xa2\xf9\x82\xc9\x55\xc5\x56\xbc\x98\x44\xa6\xf3\x58\x6e\xb2\xd5\x1a\xd0\x72\x88\x95\xcb\x5a\x32\xac\xcc\x9e\x78\xed\x08\x61\x22\x96\x61\xdd\x8d\x32\x19\x4b\x9a\x93\x5c\xb9\xe6\x31\x47\xeb\xfb\x7b\x3b\x1d\x7d\xd2\x6c\x43\x84\x5f\x2b\x63\x89\x9b\x8b\xa0\x7c\xc6\x4d\x02\x8a\x1f\x2b\xeb\x47\x97\xe5\xdc\xc0\x8a\x83\x4c\x5f\x81\xc3\x26\x96\xb6\x64\x01\x36\x36\x60\x16\xc3\xcc\x4d\x1c\xd2\x7e\x79\x62\x36\xc3\xdc\x09\x1a\x5b\xfb\xa9\x3f\xfa\x0d\xd0\x17\x6e\xfe\x54\x6b\x65\xc0\xb1\x75\x62\x6c\xa0\x8e\xcd\x3c\xc1\xd1\x55\xc7\x06\x75\x2a\xed\xa3\x31\xf3\xc2\xdf\x74\x86\xc0\x55\xb5\x10\x23\x86\x84\xbf\xef\x1d\x14\x8a\xe4\xfe\x41\x0d\xf0\x91\xde\xd5\xae\x96\x3e\xa6\x7d\xdd\x2e\x94\xea\xd8\x97\x13\x7a\x1b\x83\x41\xd1\x07\xfb\x16\xa3\x4a\xca\x43\xce\xcb\x80\xe4\xf2\xfa\x12\x19\xe9\xd3\x37\x20\x91\x15\x07\x0d\xc7\xe9\x4f\x83\x47\x64\x35\x04\x7a\xec\x46\x49\x58\x7a\xe7\x02\x01\xdb\x21\x26\xc9\xc7\x45\x11\x0e\x9e\xa1\x78\x91\xc0\xe1\xcb\xa8\x96\x6b\x62\x0f\xd1\xc4\xed\xdc\x04\x06\x99\x54\x79\xa1\xc5\x25\xc9\x3b\x92\xda\x2a\x8f\x58\x2c\x0d\x82\x9a\x11\xc7\x17\x26\x88\x9f\xdb\x7f\xc5\x84\xfd\x2d\xe2\x0f\x81\xc6\x5a\x46\x4a\x72\x23\x0d\x63\x09\x90\xfe\x12\xbc\xb1\x8b\x02\x00\x24\x09\x8c\x9d\xfe\xe0\x71\x38\x32\x89\x84\xbf\xfb\x65\x5e\x4d\x0d\x08\xde\xf9\x3f\xe8\xff\xfb\xe5\x0f\xff\x13\x00\x00\xff\xff\x69\x59\xdf\x1c\x81\xed\x03\x00") func adminSwaggerJsonBytes() ([]byte, error) { return bindataRead( @@ -93,7 +93,7 @@ func adminSwaggerJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "admin.swagger.json", size: 256067, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} + info := bindataFileInfo{name: "admin.swagger.json", size: 257409, mode: os.FileMode(420), modTime: time.Unix(1562572800, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/flyteidl/gen/pb-java/flyteidl/core/Tasks.java b/flyteidl/gen/pb-java/flyteidl/core/Tasks.java index 6f996258aef..f122e3201e6 100644 --- a/flyteidl/gen/pb-java/flyteidl/core/Tasks.java +++ b/flyteidl/gen/pb-java/flyteidl/core/Tasks.java @@ -5226,6 +5226,19 @@ public interface TaskTemplateOrBuilder extends */ flyteidl.core.Tasks.K8sPodOrBuilder getK8SPodOrBuilder(); + /** + * .flyteidl.core.Sql sql = 18; + */ + boolean hasSql(); + /** + * .flyteidl.core.Sql sql = 18; + */ + flyteidl.core.Tasks.Sql getSql(); + /** + * .flyteidl.core.Sql sql = 18; + */ + flyteidl.core.Tasks.SqlOrBuilder getSqlOrBuilder(); + /** *
      * This can be used to customize task handling at execution time for the same task type.
@@ -5462,10 +5475,10 @@ private TaskTemplate(
               break;
             }
             case 130: {
-              if (!((mutable_bitField0_ & 0x00000200) != 0)) {
+              if (!((mutable_bitField0_ & 0x00000400) != 0)) {
                 config_ = com.google.protobuf.MapField.newMapField(
                     ConfigDefaultEntryHolder.defaultEntry);
-                mutable_bitField0_ |= 0x00000200;
+                mutable_bitField0_ |= 0x00000400;
               }
               com.google.protobuf.MapEntry
               config__ = input.readMessage(
@@ -5488,6 +5501,20 @@ private TaskTemplate(
               targetCase_ = 17;
               break;
             }
+            case 146: {
+              flyteidl.core.Tasks.Sql.Builder subBuilder = null;
+              if (targetCase_ == 18) {
+                subBuilder = ((flyteidl.core.Tasks.Sql) target_).toBuilder();
+              }
+              target_ =
+                  input.readMessage(flyteidl.core.Tasks.Sql.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((flyteidl.core.Tasks.Sql) target_);
+                target_ = subBuilder.buildPartial();
+              }
+              targetCase_ = 18;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -5539,6 +5566,7 @@ public enum TargetCase
         implements com.google.protobuf.Internal.EnumLite {
       CONTAINER(6),
       K8S_POD(17),
+      SQL(18),
       TARGET_NOT_SET(0);
       private final int value;
       private TargetCase(int value) {
@@ -5556,6 +5584,7 @@ public static TargetCase forNumber(int value) {
         switch (value) {
           case 6: return CONTAINER;
           case 17: return K8S_POD;
+          case 18: return SQL;
           case 0: return TARGET_NOT_SET;
           default: return null;
         }
@@ -5804,6 +5833,32 @@ public flyteidl.core.Tasks.K8sPodOrBuilder getK8SPodOrBuilder() {
       return flyteidl.core.Tasks.K8sPod.getDefaultInstance();
     }
 
+    public static final int SQL_FIELD_NUMBER = 18;
+    /**
+     * .flyteidl.core.Sql sql = 18;
+     */
+    public boolean hasSql() {
+      return targetCase_ == 18;
+    }
+    /**
+     * .flyteidl.core.Sql sql = 18;
+     */
+    public flyteidl.core.Tasks.Sql getSql() {
+      if (targetCase_ == 18) {
+         return (flyteidl.core.Tasks.Sql) target_;
+      }
+      return flyteidl.core.Tasks.Sql.getDefaultInstance();
+    }
+    /**
+     * .flyteidl.core.Sql sql = 18;
+     */
+    public flyteidl.core.Tasks.SqlOrBuilder getSqlOrBuilder() {
+      if (targetCase_ == 18) {
+         return (flyteidl.core.Tasks.Sql) target_;
+      }
+      return flyteidl.core.Tasks.Sql.getDefaultInstance();
+    }
+
     public static final int TASK_TYPE_VERSION_FIELD_NUMBER = 7;
     private int taskTypeVersion_;
     /**
@@ -5997,6 +6052,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (targetCase_ == 17) {
         output.writeMessage(17, (flyteidl.core.Tasks.K8sPod) target_);
       }
+      if (targetCase_ == 18) {
+        output.writeMessage(18, (flyteidl.core.Tasks.Sql) target_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -6051,6 +6109,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(17, (flyteidl.core.Tasks.K8sPod) target_);
       }
+      if (targetCase_ == 18) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(18, (flyteidl.core.Tasks.Sql) target_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -6107,6 +6169,10 @@ public boolean equals(final java.lang.Object obj) {
           if (!getK8SPod()
               .equals(other.getK8SPod())) return false;
           break;
+        case 18:
+          if (!getSql()
+              .equals(other.getSql())) return false;
+          break;
         case 0:
         default:
       }
@@ -6158,6 +6224,10 @@ public int hashCode() {
           hash = (37 * hash) + K8S_POD_FIELD_NUMBER;
           hash = (53 * hash) + getK8SPod().hashCode();
           break;
+        case 18:
+          hash = (37 * hash) + SQL_FIELD_NUMBER;
+          hash = (53 * hash) + getSql().hashCode();
+          break;
         case 0:
         default:
       }
@@ -6421,6 +6491,13 @@ public flyteidl.core.Tasks.TaskTemplate buildPartial() {
             result.target_ = k8SPodBuilder_.build();
           }
         }
+        if (targetCase_ == 18) {
+          if (sqlBuilder_ == null) {
+            result.target_ = target_;
+          } else {
+            result.target_ = sqlBuilder_.build();
+          }
+        }
         result.taskTypeVersion_ = taskTypeVersion_;
         if (securityContextBuilder_ == null) {
           result.securityContext_ = securityContext_;
@@ -6512,6 +6589,10 @@ public Builder mergeFrom(flyteidl.core.Tasks.TaskTemplate other) {
             mergeK8SPod(other.getK8SPod());
             break;
           }
+          case SQL: {
+            mergeSql(other.getSql());
+            break;
+          }
           case TARGET_NOT_SET: {
             break;
           }
@@ -7553,6 +7634,142 @@ public flyteidl.core.Tasks.K8sPodOrBuilder getK8SPodOrBuilder() {
         return k8SPodBuilder_;
       }
 
+      private com.google.protobuf.SingleFieldBuilderV3<
+          flyteidl.core.Tasks.Sql, flyteidl.core.Tasks.Sql.Builder, flyteidl.core.Tasks.SqlOrBuilder> sqlBuilder_;
+      /**
+       * .flyteidl.core.Sql sql = 18;
+       */
+      public boolean hasSql() {
+        return targetCase_ == 18;
+      }
+      /**
+       * .flyteidl.core.Sql sql = 18;
+       */
+      public flyteidl.core.Tasks.Sql getSql() {
+        if (sqlBuilder_ == null) {
+          if (targetCase_ == 18) {
+            return (flyteidl.core.Tasks.Sql) target_;
+          }
+          return flyteidl.core.Tasks.Sql.getDefaultInstance();
+        } else {
+          if (targetCase_ == 18) {
+            return sqlBuilder_.getMessage();
+          }
+          return flyteidl.core.Tasks.Sql.getDefaultInstance();
+        }
+      }
+      /**
+       * .flyteidl.core.Sql sql = 18;
+       */
+      public Builder setSql(flyteidl.core.Tasks.Sql value) {
+        if (sqlBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          target_ = value;
+          onChanged();
+        } else {
+          sqlBuilder_.setMessage(value);
+        }
+        targetCase_ = 18;
+        return this;
+      }
+      /**
+       * .flyteidl.core.Sql sql = 18;
+       */
+      public Builder setSql(
+          flyteidl.core.Tasks.Sql.Builder builderForValue) {
+        if (sqlBuilder_ == null) {
+          target_ = builderForValue.build();
+          onChanged();
+        } else {
+          sqlBuilder_.setMessage(builderForValue.build());
+        }
+        targetCase_ = 18;
+        return this;
+      }
+      /**
+       * .flyteidl.core.Sql sql = 18;
+       */
+      public Builder mergeSql(flyteidl.core.Tasks.Sql value) {
+        if (sqlBuilder_ == null) {
+          if (targetCase_ == 18 &&
+              target_ != flyteidl.core.Tasks.Sql.getDefaultInstance()) {
+            target_ = flyteidl.core.Tasks.Sql.newBuilder((flyteidl.core.Tasks.Sql) target_)
+                .mergeFrom(value).buildPartial();
+          } else {
+            target_ = value;
+          }
+          onChanged();
+        } else {
+          if (targetCase_ == 18) {
+            sqlBuilder_.mergeFrom(value);
+          }
+          sqlBuilder_.setMessage(value);
+        }
+        targetCase_ = 18;
+        return this;
+      }
+      /**
+       * .flyteidl.core.Sql sql = 18;
+       */
+      public Builder clearSql() {
+        if (sqlBuilder_ == null) {
+          if (targetCase_ == 18) {
+            targetCase_ = 0;
+            target_ = null;
+            onChanged();
+          }
+        } else {
+          if (targetCase_ == 18) {
+            targetCase_ = 0;
+            target_ = null;
+          }
+          sqlBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * .flyteidl.core.Sql sql = 18;
+       */
+      public flyteidl.core.Tasks.Sql.Builder getSqlBuilder() {
+        return getSqlFieldBuilder().getBuilder();
+      }
+      /**
+       * .flyteidl.core.Sql sql = 18;
+       */
+      public flyteidl.core.Tasks.SqlOrBuilder getSqlOrBuilder() {
+        if ((targetCase_ == 18) && (sqlBuilder_ != null)) {
+          return sqlBuilder_.getMessageOrBuilder();
+        } else {
+          if (targetCase_ == 18) {
+            return (flyteidl.core.Tasks.Sql) target_;
+          }
+          return flyteidl.core.Tasks.Sql.getDefaultInstance();
+        }
+      }
+      /**
+       * .flyteidl.core.Sql sql = 18;
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          flyteidl.core.Tasks.Sql, flyteidl.core.Tasks.Sql.Builder, flyteidl.core.Tasks.SqlOrBuilder> 
+          getSqlFieldBuilder() {
+        if (sqlBuilder_ == null) {
+          if (!(targetCase_ == 18)) {
+            target_ = flyteidl.core.Tasks.Sql.getDefaultInstance();
+          }
+          sqlBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              flyteidl.core.Tasks.Sql, flyteidl.core.Tasks.Sql.Builder, flyteidl.core.Tasks.SqlOrBuilder>(
+                  (flyteidl.core.Tasks.Sql) target_,
+                  getParentForChildren(),
+                  isClean());
+          target_ = null;
+        }
+        targetCase_ = 18;
+        onChanged();;
+        return sqlBuilder_;
+      }
+
       private int taskTypeVersion_ ;
       /**
        * 
@@ -16182,175 +16399,1065 @@ public flyteidl.core.Tasks.K8sObjectMetadata getDefaultInstanceForType() {
 
   }
 
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_flyteidl_core_Resources_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_flyteidl_core_Resources_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_flyteidl_core_Resources_ResourceEntry_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_flyteidl_core_Resources_ResourceEntry_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_flyteidl_core_RuntimeMetadata_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_flyteidl_core_RuntimeMetadata_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_flyteidl_core_TaskMetadata_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_flyteidl_core_TaskMetadata_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_flyteidl_core_TaskTemplate_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_flyteidl_core_TaskTemplate_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_flyteidl_core_TaskTemplate_ConfigEntry_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_flyteidl_core_TaskTemplate_ConfigEntry_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_flyteidl_core_ContainerPort_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_flyteidl_core_ContainerPort_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_flyteidl_core_Container_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_flyteidl_core_Container_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_flyteidl_core_IOStrategy_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_flyteidl_core_IOStrategy_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_flyteidl_core_DataLoadingConfig_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_flyteidl_core_DataLoadingConfig_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_flyteidl_core_K8sPod_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_flyteidl_core_K8sPod_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_flyteidl_core_K8sObjectMetadata_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_flyteidl_core_K8sObjectMetadata_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_flyteidl_core_K8sObjectMetadata_LabelsEntry_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_flyteidl_core_K8sObjectMetadata_LabelsEntry_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_flyteidl_core_K8sObjectMetadata_AnnotationsEntry_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_flyteidl_core_K8sObjectMetadata_AnnotationsEntry_fieldAccessorTable;
+  public interface SqlOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:flyteidl.core.Sql)
+      com.google.protobuf.MessageOrBuilder {
 
-  public static com.google.protobuf.Descriptors.FileDescriptor
-      getDescriptor() {
-    return descriptor;
+    /**
+     * 
+     * The actual query to run, the query can have templated parameters.
+     * We use Flyte's Golang templating format for Query templating.
+     * Refer to the templating documentation.
+     * https://docs.flyte.org/projects/cookbook/en/latest/auto/integrations/external_services/hive/hive.html#sphx-glr-auto-integrations-external-services-hive-hive-py
+     * For example,
+     * insert overwrite directory '{{ .rawOutputDataPrefix }}' stored as parquet
+     * select *
+     * from my_table
+     * where ds = '{{ .Inputs.ds }}'
+     * 
+ * + * string statement = 1; + */ + java.lang.String getStatement(); + /** + *
+     * The actual query to run, the query can have templated parameters.
+     * We use Flyte's Golang templating format for Query templating.
+     * Refer to the templating documentation.
+     * https://docs.flyte.org/projects/cookbook/en/latest/auto/integrations/external_services/hive/hive.html#sphx-glr-auto-integrations-external-services-hive-hive-py
+     * For example,
+     * insert overwrite directory '{{ .rawOutputDataPrefix }}' stored as parquet
+     * select *
+     * from my_table
+     * where ds = '{{ .Inputs.ds }}'
+     * 
+ * + * string statement = 1; + */ + com.google.protobuf.ByteString + getStatementBytes(); + + /** + * .flyteidl.core.Sql.Dialect dialect = 2; + */ + int getDialectValue(); + /** + * .flyteidl.core.Sql.Dialect dialect = 2; + */ + flyteidl.core.Tasks.Sql.Dialect getDialect(); } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\031flyteidl/core/tasks.proto\022\rflyteidl.co" + - "re\032\036flyteidl/core/identifier.proto\032\035flyt" + - "eidl/core/interface.proto\032\034flyteidl/core" + - "/literals.proto\032\034flyteidl/core/security." + - "proto\032\036google/protobuf/duration.proto\032\034g" + - "oogle/protobuf/struct.proto\"\261\002\n\tResource" + - "s\0228\n\010requests\030\001 \003(\0132&.flyteidl.core.Reso" + - "urces.ResourceEntry\0226\n\006limits\030\002 \003(\0132&.fl" + - "yteidl.core.Resources.ResourceEntry\032S\n\rR" + - "esourceEntry\0223\n\004name\030\001 \001(\0162%.flyteidl.co" + - "re.Resources.ResourceName\022\r\n\005value\030\002 \001(\t" + - "\"]\n\014ResourceName\022\013\n\007UNKNOWN\020\000\022\007\n\003CPU\020\001\022\007" + - "\n\003GPU\020\002\022\n\n\006MEMORY\020\003\022\013\n\007STORAGE\020\004\022\025\n\021EPHE" + - "MERAL_STORAGE\020\005\"\225\001\n\017RuntimeMetadata\0228\n\004t" + - "ype\030\001 \001(\0162*.flyteidl.core.RuntimeMetadat" + - "a.RuntimeType\022\017\n\007version\030\002 \001(\t\022\016\n\006flavor" + - "\030\003 \001(\t\"\'\n\013RuntimeType\022\t\n\005OTHER\020\000\022\r\n\tFLYT" + - "E_SDK\020\001\"\235\002\n\014TaskMetadata\022\024\n\014discoverable" + - "\030\001 \001(\010\022/\n\007runtime\030\002 \001(\0132\036.flyteidl.core." + - "RuntimeMetadata\022*\n\007timeout\030\004 \001(\0132\031.googl" + - "e.protobuf.Duration\022-\n\007retries\030\005 \001(\0132\034.f" + - "lyteidl.core.RetryStrategy\022\031\n\021discovery_" + - "version\030\006 \001(\t\022 \n\030deprecated_error_messag" + - "e\030\007 \001(\t\022\027\n\rinterruptible\030\010 \001(\010H\000B\025\n\023inte" + - "rruptible_value\"\355\003\n\014TaskTemplate\022%\n\002id\030\001" + - " \001(\0132\031.flyteidl.core.Identifier\022\014\n\004type\030" + - "\002 \001(\t\022-\n\010metadata\030\003 \001(\0132\033.flyteidl.core." + - "TaskMetadata\0220\n\tinterface\030\004 \001(\0132\035.flytei" + - "dl.core.TypedInterface\022\'\n\006custom\030\005 \001(\0132\027" + - ".google.protobuf.Struct\022-\n\tcontainer\030\006 \001" + - "(\0132\030.flyteidl.core.ContainerH\000\022(\n\007k8s_po" + - "d\030\021 \001(\0132\025.flyteidl.core.K8sPodH\000\022\031\n\021task" + - "_type_version\030\007 \001(\005\0228\n\020security_context\030" + - "\010 \001(\0132\036.flyteidl.core.SecurityContext\0227\n" + - "\006config\030\020 \003(\0132\'.flyteidl.core.TaskTempla" + - "te.ConfigEntry\032-\n\013ConfigEntry\022\013\n\003key\030\001 \001" + - "(\t\022\r\n\005value\030\002 \001(\t:\0028\001B\010\n\006target\"\'\n\rConta" + - "inerPort\022\026\n\016container_port\030\001 \001(\r\"\245\002\n\tCon" + - "tainer\022\r\n\005image\030\001 \001(\t\022\017\n\007command\030\002 \003(\t\022\014" + - "\n\004args\030\003 \003(\t\022+\n\tresources\030\004 \001(\0132\030.flytei" + - "dl.core.Resources\022(\n\003env\030\005 \003(\0132\033.flyteid" + - "l.core.KeyValuePair\022/\n\006config\030\006 \003(\0132\033.fl" + - "yteidl.core.KeyValuePairB\002\030\001\022+\n\005ports\030\007 " + - "\003(\0132\034.flyteidl.core.ContainerPort\0225\n\013dat" + - "a_config\030\t \001(\0132 .flyteidl.core.DataLoadi" + - "ngConfig\"\233\002\n\nIOStrategy\022=\n\rdownload_mode" + - "\030\001 \001(\0162&.flyteidl.core.IOStrategy.Downlo" + - "adMode\0229\n\013upload_mode\030\002 \001(\0162$.flyteidl.c" + - "ore.IOStrategy.UploadMode\"L\n\014DownloadMod" + - "e\022\022\n\016DOWNLOAD_EAGER\020\000\022\023\n\017DOWNLOAD_STREAM" + - "\020\001\022\023\n\017DO_NOT_DOWNLOAD\020\002\"E\n\nUploadMode\022\022\n" + - "\016UPLOAD_ON_EXIT\020\000\022\020\n\014UPLOAD_EAGER\020\001\022\021\n\rD" + - "O_NOT_UPLOAD\020\002\"\363\001\n\021DataLoadingConfig\022\017\n\007" + - "enabled\030\001 \001(\010\022\022\n\ninput_path\030\002 \001(\t\022\023\n\013out" + - "put_path\030\003 \001(\t\022A\n\006format\030\004 \001(\01621.flyteid" + - "l.core.DataLoadingConfig.LiteralMapForma" + - "t\022.\n\013io_strategy\030\005 \001(\0132\031.flyteidl.core.I" + - "OStrategy\"1\n\020LiteralMapFormat\022\010\n\004JSON\020\000\022" + - "\010\n\004YAML\020\001\022\t\n\005PROTO\020\002\"g\n\006K8sPod\0222\n\010metada" + - "ta\030\001 \001(\0132 .flyteidl.core.K8sObjectMetada" + - "ta\022)\n\010pod_spec\030\002 \001(\0132\027.google.protobuf.S" + - "truct\"\374\001\n\021K8sObjectMetadata\022<\n\006labels\030\001 " + - "\003(\0132,.flyteidl.core.K8sObjectMetadata.La" + - "belsEntry\022F\n\013annotations\030\002 \003(\01321.flyteid" + - "l.core.K8sObjectMetadata.AnnotationsEntr" + - "y\032-\n\013LabelsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002" + - " \001(\t:\0028\001\0322\n\020AnnotationsEntry\022\013\n\003key\030\001 \001(" + - "\t\022\r\n\005value\030\002 \001(\t:\0028\001B6Z4github.com/flyte" + - "org/flyteidl/gen/pb-go/flyteidl/coreb\006pr" + - "oto3" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - flyteidl.core.IdentifierOuterClass.getDescriptor(), - flyteidl.core.Interface.getDescriptor(), - flyteidl.core.Literals.getDescriptor(), - flyteidl.core.Security.getDescriptor(), - com.google.protobuf.DurationProto.getDescriptor(), - com.google.protobuf.StructProto.getDescriptor(), - }, assigner); - internal_static_flyteidl_core_Resources_descriptor = + /** + *
+   * Sql represents a generic sql workload with a statement and dialect.
+   * 
+ * + * Protobuf type {@code flyteidl.core.Sql} + */ + public static final class Sql extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:flyteidl.core.Sql) + SqlOrBuilder { + private static final long serialVersionUID = 0L; + // Use Sql.newBuilder() to construct. + private Sql(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Sql() { + statement_ = ""; + dialect_ = 0; + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Sql( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + + statement_ = s; + break; + } + case 16: { + int rawValue = input.readEnum(); + + dialect_ = rawValue; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return flyteidl.core.Tasks.internal_static_flyteidl_core_Sql_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return flyteidl.core.Tasks.internal_static_flyteidl_core_Sql_fieldAccessorTable + .ensureFieldAccessorsInitialized( + flyteidl.core.Tasks.Sql.class, flyteidl.core.Tasks.Sql.Builder.class); + } + + /** + *
+     * The dialect of the SQL statement. This is used to validate and parse SQL statements at compilation time to avoid
+     * expensive runtime operations. If set to an unsupported dialect, no validation will be done on the statement.
+     * We support the following dialect: ansi, hive.
+     * 
+ * + * Protobuf enum {@code flyteidl.core.Sql.Dialect} + */ + public enum Dialect + implements com.google.protobuf.ProtocolMessageEnum { + /** + * UNDEFINED = 0; + */ + UNDEFINED(0), + /** + * ANSI = 1; + */ + ANSI(1), + /** + * HIVE = 2; + */ + HIVE(2), + /** + * OTHER = 3; + */ + OTHER(3), + UNRECOGNIZED(-1), + ; + + /** + * UNDEFINED = 0; + */ + public static final int UNDEFINED_VALUE = 0; + /** + * ANSI = 1; + */ + public static final int ANSI_VALUE = 1; + /** + * HIVE = 2; + */ + public static final int HIVE_VALUE = 2; + /** + * OTHER = 3; + */ + public static final int OTHER_VALUE = 3; + + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static Dialect valueOf(int value) { + return forNumber(value); + } + + public static Dialect forNumber(int value) { + switch (value) { + case 0: return UNDEFINED; + case 1: return ANSI; + case 2: return HIVE; + case 3: return OTHER; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + Dialect> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public Dialect findValueByNumber(int number) { + return Dialect.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(ordinal()); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return flyteidl.core.Tasks.Sql.getDescriptor().getEnumTypes().get(0); + } + + private static final Dialect[] VALUES = values(); + + public static Dialect valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private Dialect(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:flyteidl.core.Sql.Dialect) + } + + public static final int STATEMENT_FIELD_NUMBER = 1; + private volatile java.lang.Object statement_; + /** + *
+     * The actual query to run, the query can have templated parameters.
+     * We use Flyte's Golang templating format for Query templating.
+     * Refer to the templating documentation.
+     * https://docs.flyte.org/projects/cookbook/en/latest/auto/integrations/external_services/hive/hive.html#sphx-glr-auto-integrations-external-services-hive-hive-py
+     * For example,
+     * insert overwrite directory '{{ .rawOutputDataPrefix }}' stored as parquet
+     * select *
+     * from my_table
+     * where ds = '{{ .Inputs.ds }}'
+     * 
+ * + * string statement = 1; + */ + public java.lang.String getStatement() { + java.lang.Object ref = statement_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + statement_ = s; + return s; + } + } + /** + *
+     * The actual query to run, the query can have templated parameters.
+     * We use Flyte's Golang templating format for Query templating.
+     * Refer to the templating documentation.
+     * https://docs.flyte.org/projects/cookbook/en/latest/auto/integrations/external_services/hive/hive.html#sphx-glr-auto-integrations-external-services-hive-hive-py
+     * For example,
+     * insert overwrite directory '{{ .rawOutputDataPrefix }}' stored as parquet
+     * select *
+     * from my_table
+     * where ds = '{{ .Inputs.ds }}'
+     * 
+ * + * string statement = 1; + */ + public com.google.protobuf.ByteString + getStatementBytes() { + java.lang.Object ref = statement_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + statement_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int DIALECT_FIELD_NUMBER = 2; + private int dialect_; + /** + * .flyteidl.core.Sql.Dialect dialect = 2; + */ + public int getDialectValue() { + return dialect_; + } + /** + * .flyteidl.core.Sql.Dialect dialect = 2; + */ + public flyteidl.core.Tasks.Sql.Dialect getDialect() { + @SuppressWarnings("deprecation") + flyteidl.core.Tasks.Sql.Dialect result = flyteidl.core.Tasks.Sql.Dialect.valueOf(dialect_); + return result == null ? flyteidl.core.Tasks.Sql.Dialect.UNRECOGNIZED : result; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!getStatementBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, statement_); + } + if (dialect_ != flyteidl.core.Tasks.Sql.Dialect.UNDEFINED.getNumber()) { + output.writeEnum(2, dialect_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!getStatementBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, statement_); + } + if (dialect_ != flyteidl.core.Tasks.Sql.Dialect.UNDEFINED.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(2, dialect_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof flyteidl.core.Tasks.Sql)) { + return super.equals(obj); + } + flyteidl.core.Tasks.Sql other = (flyteidl.core.Tasks.Sql) obj; + + if (!getStatement() + .equals(other.getStatement())) return false; + if (dialect_ != other.dialect_) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + STATEMENT_FIELD_NUMBER; + hash = (53 * hash) + getStatement().hashCode(); + hash = (37 * hash) + DIALECT_FIELD_NUMBER; + hash = (53 * hash) + dialect_; + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static flyteidl.core.Tasks.Sql parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.core.Tasks.Sql parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.core.Tasks.Sql parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.core.Tasks.Sql parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.core.Tasks.Sql parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static flyteidl.core.Tasks.Sql parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static flyteidl.core.Tasks.Sql parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static flyteidl.core.Tasks.Sql parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static flyteidl.core.Tasks.Sql parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static flyteidl.core.Tasks.Sql parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static flyteidl.core.Tasks.Sql parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static flyteidl.core.Tasks.Sql parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(flyteidl.core.Tasks.Sql prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * Sql represents a generic sql workload with a statement and dialect.
+     * 
+ * + * Protobuf type {@code flyteidl.core.Sql} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:flyteidl.core.Sql) + flyteidl.core.Tasks.SqlOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return flyteidl.core.Tasks.internal_static_flyteidl_core_Sql_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return flyteidl.core.Tasks.internal_static_flyteidl_core_Sql_fieldAccessorTable + .ensureFieldAccessorsInitialized( + flyteidl.core.Tasks.Sql.class, flyteidl.core.Tasks.Sql.Builder.class); + } + + // Construct using flyteidl.core.Tasks.Sql.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + statement_ = ""; + + dialect_ = 0; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return flyteidl.core.Tasks.internal_static_flyteidl_core_Sql_descriptor; + } + + @java.lang.Override + public flyteidl.core.Tasks.Sql getDefaultInstanceForType() { + return flyteidl.core.Tasks.Sql.getDefaultInstance(); + } + + @java.lang.Override + public flyteidl.core.Tasks.Sql build() { + flyteidl.core.Tasks.Sql result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public flyteidl.core.Tasks.Sql buildPartial() { + flyteidl.core.Tasks.Sql result = new flyteidl.core.Tasks.Sql(this); + result.statement_ = statement_; + result.dialect_ = dialect_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof flyteidl.core.Tasks.Sql) { + return mergeFrom((flyteidl.core.Tasks.Sql)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(flyteidl.core.Tasks.Sql other) { + if (other == flyteidl.core.Tasks.Sql.getDefaultInstance()) return this; + if (!other.getStatement().isEmpty()) { + statement_ = other.statement_; + onChanged(); + } + if (other.dialect_ != 0) { + setDialectValue(other.getDialectValue()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + flyteidl.core.Tasks.Sql parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (flyteidl.core.Tasks.Sql) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object statement_ = ""; + /** + *
+       * The actual query to run, the query can have templated parameters.
+       * We use Flyte's Golang templating format for Query templating.
+       * Refer to the templating documentation.
+       * https://docs.flyte.org/projects/cookbook/en/latest/auto/integrations/external_services/hive/hive.html#sphx-glr-auto-integrations-external-services-hive-hive-py
+       * For example,
+       * insert overwrite directory '{{ .rawOutputDataPrefix }}' stored as parquet
+       * select *
+       * from my_table
+       * where ds = '{{ .Inputs.ds }}'
+       * 
+ * + * string statement = 1; + */ + public java.lang.String getStatement() { + java.lang.Object ref = statement_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + statement_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * The actual query to run, the query can have templated parameters.
+       * We use Flyte's Golang templating format for Query templating.
+       * Refer to the templating documentation.
+       * https://docs.flyte.org/projects/cookbook/en/latest/auto/integrations/external_services/hive/hive.html#sphx-glr-auto-integrations-external-services-hive-hive-py
+       * For example,
+       * insert overwrite directory '{{ .rawOutputDataPrefix }}' stored as parquet
+       * select *
+       * from my_table
+       * where ds = '{{ .Inputs.ds }}'
+       * 
+ * + * string statement = 1; + */ + public com.google.protobuf.ByteString + getStatementBytes() { + java.lang.Object ref = statement_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + statement_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * The actual query to run, the query can have templated parameters.
+       * We use Flyte's Golang templating format for Query templating.
+       * Refer to the templating documentation.
+       * https://docs.flyte.org/projects/cookbook/en/latest/auto/integrations/external_services/hive/hive.html#sphx-glr-auto-integrations-external-services-hive-hive-py
+       * For example,
+       * insert overwrite directory '{{ .rawOutputDataPrefix }}' stored as parquet
+       * select *
+       * from my_table
+       * where ds = '{{ .Inputs.ds }}'
+       * 
+ * + * string statement = 1; + */ + public Builder setStatement( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + statement_ = value; + onChanged(); + return this; + } + /** + *
+       * The actual query to run, the query can have templated parameters.
+       * We use Flyte's Golang templating format for Query templating.
+       * Refer to the templating documentation.
+       * https://docs.flyte.org/projects/cookbook/en/latest/auto/integrations/external_services/hive/hive.html#sphx-glr-auto-integrations-external-services-hive-hive-py
+       * For example,
+       * insert overwrite directory '{{ .rawOutputDataPrefix }}' stored as parquet
+       * select *
+       * from my_table
+       * where ds = '{{ .Inputs.ds }}'
+       * 
+ * + * string statement = 1; + */ + public Builder clearStatement() { + + statement_ = getDefaultInstance().getStatement(); + onChanged(); + return this; + } + /** + *
+       * The actual query to run, the query can have templated parameters.
+       * We use Flyte's Golang templating format for Query templating.
+       * Refer to the templating documentation.
+       * https://docs.flyte.org/projects/cookbook/en/latest/auto/integrations/external_services/hive/hive.html#sphx-glr-auto-integrations-external-services-hive-hive-py
+       * For example,
+       * insert overwrite directory '{{ .rawOutputDataPrefix }}' stored as parquet
+       * select *
+       * from my_table
+       * where ds = '{{ .Inputs.ds }}'
+       * 
+ * + * string statement = 1; + */ + public Builder setStatementBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + statement_ = value; + onChanged(); + return this; + } + + private int dialect_ = 0; + /** + * .flyteidl.core.Sql.Dialect dialect = 2; + */ + public int getDialectValue() { + return dialect_; + } + /** + * .flyteidl.core.Sql.Dialect dialect = 2; + */ + public Builder setDialectValue(int value) { + dialect_ = value; + onChanged(); + return this; + } + /** + * .flyteidl.core.Sql.Dialect dialect = 2; + */ + public flyteidl.core.Tasks.Sql.Dialect getDialect() { + @SuppressWarnings("deprecation") + flyteidl.core.Tasks.Sql.Dialect result = flyteidl.core.Tasks.Sql.Dialect.valueOf(dialect_); + return result == null ? flyteidl.core.Tasks.Sql.Dialect.UNRECOGNIZED : result; + } + /** + * .flyteidl.core.Sql.Dialect dialect = 2; + */ + public Builder setDialect(flyteidl.core.Tasks.Sql.Dialect value) { + if (value == null) { + throw new NullPointerException(); + } + + dialect_ = value.getNumber(); + onChanged(); + return this; + } + /** + * .flyteidl.core.Sql.Dialect dialect = 2; + */ + public Builder clearDialect() { + + dialect_ = 0; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:flyteidl.core.Sql) + } + + // @@protoc_insertion_point(class_scope:flyteidl.core.Sql) + private static final flyteidl.core.Tasks.Sql DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new flyteidl.core.Tasks.Sql(); + } + + public static flyteidl.core.Tasks.Sql getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Sql parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Sql(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public flyteidl.core.Tasks.Sql getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_core_Resources_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_core_Resources_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_core_Resources_ResourceEntry_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_core_Resources_ResourceEntry_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_core_RuntimeMetadata_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_core_RuntimeMetadata_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_core_TaskMetadata_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_core_TaskMetadata_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_core_TaskTemplate_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_core_TaskTemplate_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_core_TaskTemplate_ConfigEntry_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_core_TaskTemplate_ConfigEntry_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_core_ContainerPort_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_core_ContainerPort_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_core_Container_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_core_Container_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_core_IOStrategy_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_core_IOStrategy_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_core_DataLoadingConfig_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_core_DataLoadingConfig_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_core_K8sPod_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_core_K8sPod_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_core_K8sObjectMetadata_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_core_K8sObjectMetadata_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_core_K8sObjectMetadata_LabelsEntry_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_core_K8sObjectMetadata_LabelsEntry_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_core_K8sObjectMetadata_AnnotationsEntry_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_core_K8sObjectMetadata_AnnotationsEntry_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_flyteidl_core_Sql_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_flyteidl_core_Sql_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\031flyteidl/core/tasks.proto\022\rflyteidl.co" + + "re\032\036flyteidl/core/identifier.proto\032\035flyt" + + "eidl/core/interface.proto\032\034flyteidl/core" + + "/literals.proto\032\034flyteidl/core/security." + + "proto\032\036google/protobuf/duration.proto\032\034g" + + "oogle/protobuf/struct.proto\"\261\002\n\tResource" + + "s\0228\n\010requests\030\001 \003(\0132&.flyteidl.core.Reso" + + "urces.ResourceEntry\0226\n\006limits\030\002 \003(\0132&.fl" + + "yteidl.core.Resources.ResourceEntry\032S\n\rR" + + "esourceEntry\0223\n\004name\030\001 \001(\0162%.flyteidl.co" + + "re.Resources.ResourceName\022\r\n\005value\030\002 \001(\t" + + "\"]\n\014ResourceName\022\013\n\007UNKNOWN\020\000\022\007\n\003CPU\020\001\022\007" + + "\n\003GPU\020\002\022\n\n\006MEMORY\020\003\022\013\n\007STORAGE\020\004\022\025\n\021EPHE" + + "MERAL_STORAGE\020\005\"\225\001\n\017RuntimeMetadata\0228\n\004t" + + "ype\030\001 \001(\0162*.flyteidl.core.RuntimeMetadat" + + "a.RuntimeType\022\017\n\007version\030\002 \001(\t\022\016\n\006flavor" + + "\030\003 \001(\t\"\'\n\013RuntimeType\022\t\n\005OTHER\020\000\022\r\n\tFLYT" + + "E_SDK\020\001\"\235\002\n\014TaskMetadata\022\024\n\014discoverable" + + "\030\001 \001(\010\022/\n\007runtime\030\002 \001(\0132\036.flyteidl.core." + + "RuntimeMetadata\022*\n\007timeout\030\004 \001(\0132\031.googl" + + "e.protobuf.Duration\022-\n\007retries\030\005 \001(\0132\034.f" + + "lyteidl.core.RetryStrategy\022\031\n\021discovery_" + + "version\030\006 \001(\t\022 \n\030deprecated_error_messag" + + "e\030\007 \001(\t\022\027\n\rinterruptible\030\010 \001(\010H\000B\025\n\023inte" + + "rruptible_value\"\220\004\n\014TaskTemplate\022%\n\002id\030\001" + + " \001(\0132\031.flyteidl.core.Identifier\022\014\n\004type\030" + + "\002 \001(\t\022-\n\010metadata\030\003 \001(\0132\033.flyteidl.core." + + "TaskMetadata\0220\n\tinterface\030\004 \001(\0132\035.flytei" + + "dl.core.TypedInterface\022\'\n\006custom\030\005 \001(\0132\027" + + ".google.protobuf.Struct\022-\n\tcontainer\030\006 \001" + + "(\0132\030.flyteidl.core.ContainerH\000\022(\n\007k8s_po" + + "d\030\021 \001(\0132\025.flyteidl.core.K8sPodH\000\022!\n\003sql\030" + + "\022 \001(\0132\022.flyteidl.core.SqlH\000\022\031\n\021task_type" + + "_version\030\007 \001(\005\0228\n\020security_context\030\010 \001(\013" + + "2\036.flyteidl.core.SecurityContext\0227\n\006conf" + + "ig\030\020 \003(\0132\'.flyteidl.core.TaskTemplate.Co" + + "nfigEntry\032-\n\013ConfigEntry\022\013\n\003key\030\001 \001(\t\022\r\n" + + "\005value\030\002 \001(\t:\0028\001B\010\n\006target\"\'\n\rContainerP" + + "ort\022\026\n\016container_port\030\001 \001(\r\"\245\002\n\tContaine" + + "r\022\r\n\005image\030\001 \001(\t\022\017\n\007command\030\002 \003(\t\022\014\n\004arg" + + "s\030\003 \003(\t\022+\n\tresources\030\004 \001(\0132\030.flyteidl.co" + + "re.Resources\022(\n\003env\030\005 \003(\0132\033.flyteidl.cor" + + "e.KeyValuePair\022/\n\006config\030\006 \003(\0132\033.flyteid" + + "l.core.KeyValuePairB\002\030\001\022+\n\005ports\030\007 \003(\0132\034" + + ".flyteidl.core.ContainerPort\0225\n\013data_con" + + "fig\030\t \001(\0132 .flyteidl.core.DataLoadingCon" + + "fig\"\233\002\n\nIOStrategy\022=\n\rdownload_mode\030\001 \001(" + + "\0162&.flyteidl.core.IOStrategy.DownloadMod" + + "e\0229\n\013upload_mode\030\002 \001(\0162$.flyteidl.core.I" + + "OStrategy.UploadMode\"L\n\014DownloadMode\022\022\n\016" + + "DOWNLOAD_EAGER\020\000\022\023\n\017DOWNLOAD_STREAM\020\001\022\023\n" + + "\017DO_NOT_DOWNLOAD\020\002\"E\n\nUploadMode\022\022\n\016UPLO" + + "AD_ON_EXIT\020\000\022\020\n\014UPLOAD_EAGER\020\001\022\021\n\rDO_NOT" + + "_UPLOAD\020\002\"\363\001\n\021DataLoadingConfig\022\017\n\007enabl" + + "ed\030\001 \001(\010\022\022\n\ninput_path\030\002 \001(\t\022\023\n\013output_p" + + "ath\030\003 \001(\t\022A\n\006format\030\004 \001(\01621.flyteidl.cor" + + "e.DataLoadingConfig.LiteralMapFormat\022.\n\013" + + "io_strategy\030\005 \001(\0132\031.flyteidl.core.IOStra" + + "tegy\"1\n\020LiteralMapFormat\022\010\n\004JSON\020\000\022\010\n\004YA" + + "ML\020\001\022\t\n\005PROTO\020\002\"g\n\006K8sPod\0222\n\010metadata\030\001 " + + "\001(\0132 .flyteidl.core.K8sObjectMetadata\022)\n" + + "\010pod_spec\030\002 \001(\0132\027.google.protobuf.Struct" + + "\"\374\001\n\021K8sObjectMetadata\022<\n\006labels\030\001 \003(\0132," + + ".flyteidl.core.K8sObjectMetadata.LabelsE" + + "ntry\022F\n\013annotations\030\002 \003(\01321.flyteidl.cor" + + "e.K8sObjectMetadata.AnnotationsEntry\032-\n\013" + + "LabelsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:" + + "\0028\001\0322\n\020AnnotationsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005" + + "value\030\002 \001(\t:\0028\001\"~\n\003Sql\022\021\n\tstatement\030\001 \001(" + + "\t\022+\n\007dialect\030\002 \001(\0162\032.flyteidl.core.Sql.D" + + "ialect\"7\n\007Dialect\022\r\n\tUNDEFINED\020\000\022\010\n\004ANSI" + + "\020\001\022\010\n\004HIVE\020\002\022\t\n\005OTHER\020\003B6Z4github.com/fl" + + "yteorg/flyteidl/gen/pb-go/flyteidl/coreb" + + "\006proto3" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + flyteidl.core.IdentifierOuterClass.getDescriptor(), + flyteidl.core.Interface.getDescriptor(), + flyteidl.core.Literals.getDescriptor(), + flyteidl.core.Security.getDescriptor(), + com.google.protobuf.DurationProto.getDescriptor(), + com.google.protobuf.StructProto.getDescriptor(), + }, assigner); + internal_static_flyteidl_core_Resources_descriptor = getDescriptor().getMessageTypes().get(0); internal_static_flyteidl_core_Resources_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( @@ -16379,7 +17486,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_flyteidl_core_TaskTemplate_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_core_TaskTemplate_descriptor, - new java.lang.String[] { "Id", "Type", "Metadata", "Interface", "Custom", "Container", "K8SPod", "TaskTypeVersion", "SecurityContext", "Config", "Target", }); + new java.lang.String[] { "Id", "Type", "Metadata", "Interface", "Custom", "Container", "K8SPod", "Sql", "TaskTypeVersion", "SecurityContext", "Config", "Target", }); internal_static_flyteidl_core_TaskTemplate_ConfigEntry_descriptor = internal_static_flyteidl_core_TaskTemplate_descriptor.getNestedTypes().get(0); internal_static_flyteidl_core_TaskTemplate_ConfigEntry_fieldAccessorTable = new @@ -16434,6 +17541,12 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_flyteidl_core_K8sObjectMetadata_AnnotationsEntry_descriptor, new java.lang.String[] { "Key", "Value", }); + internal_static_flyteidl_core_Sql_descriptor = + getDescriptor().getMessageTypes().get(10); + internal_static_flyteidl_core_Sql_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_flyteidl_core_Sql_descriptor, + new java.lang.String[] { "Statement", "Dialect", }); flyteidl.core.IdentifierOuterClass.getDescriptor(); flyteidl.core.Interface.getDescriptor(); flyteidl.core.Literals.getDescriptor(); diff --git a/flyteidl/gen/pb-js/flyteidl.d.ts b/flyteidl/gen/pb-js/flyteidl.d.ts index f006cd288a3..046392a8740 100644 --- a/flyteidl/gen/pb-js/flyteidl.d.ts +++ b/flyteidl/gen/pb-js/flyteidl.d.ts @@ -4383,6 +4383,9 @@ export namespace flyteidl { /** TaskTemplate k8sPod */ k8sPod?: (flyteidl.core.IK8sPod|null); + /** TaskTemplate sql */ + sql?: (flyteidl.core.ISql|null); + /** TaskTemplate taskTypeVersion */ taskTypeVersion?: (number|null); @@ -4423,6 +4426,9 @@ export namespace flyteidl { /** TaskTemplate k8sPod. */ public k8sPod?: (flyteidl.core.IK8sPod|null); + /** TaskTemplate sql. */ + public sql?: (flyteidl.core.ISql|null); + /** TaskTemplate taskTypeVersion. */ public taskTypeVersion: number; @@ -4433,7 +4439,7 @@ export namespace flyteidl { public config: { [k: string]: string }; /** TaskTemplate target. */ - public target?: ("container"|"k8sPod"); + public target?: ("container"|"k8sPod"|"sql"); /** * Creates a new TaskTemplate instance using the specified properties. @@ -4891,6 +4897,75 @@ export namespace flyteidl { public static verify(message: { [k: string]: any }): (string|null); } + /** Properties of a Sql. */ + interface ISql { + + /** Sql statement */ + statement?: (string|null); + + /** Sql dialect */ + dialect?: (flyteidl.core.Sql.Dialect|null); + } + + /** Represents a Sql. */ + class Sql implements ISql { + + /** + * Constructs a new Sql. + * @param [properties] Properties to set + */ + constructor(properties?: flyteidl.core.ISql); + + /** Sql statement. */ + public statement: string; + + /** Sql dialect. */ + public dialect: flyteidl.core.Sql.Dialect; + + /** + * Creates a new Sql instance using the specified properties. + * @param [properties] Properties to set + * @returns Sql instance + */ + public static create(properties?: flyteidl.core.ISql): flyteidl.core.Sql; + + /** + * Encodes the specified Sql message. Does not implicitly {@link flyteidl.core.Sql.verify|verify} messages. + * @param message Sql message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: flyteidl.core.ISql, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a Sql message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns Sql + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): flyteidl.core.Sql; + + /** + * Verifies a Sql message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + } + + namespace Sql { + + /** Dialect enum. */ + enum Dialect { + UNDEFINED = 0, + ANSI = 1, + HIVE = 2, + OTHER = 3 + } + } + /** Properties of a Secret. */ interface ISecret { diff --git a/flyteidl/gen/pb-js/flyteidl.js b/flyteidl/gen/pb-js/flyteidl.js index 0745c4ed601..e7788d67d73 100644 --- a/flyteidl/gen/pb-js/flyteidl.js +++ b/flyteidl/gen/pb-js/flyteidl.js @@ -10376,6 +10376,7 @@ export const flyteidl = $root.flyteidl = (() => { * @property {google.protobuf.IStruct|null} [custom] TaskTemplate custom * @property {flyteidl.core.IContainer|null} [container] TaskTemplate container * @property {flyteidl.core.IK8sPod|null} [k8sPod] TaskTemplate k8sPod + * @property {flyteidl.core.ISql|null} [sql] TaskTemplate sql * @property {number|null} [taskTypeVersion] TaskTemplate taskTypeVersion * @property {flyteidl.core.ISecurityContext|null} [securityContext] TaskTemplate securityContext * @property {Object.|null} [config] TaskTemplate config @@ -10453,6 +10454,14 @@ export const flyteidl = $root.flyteidl = (() => { */ TaskTemplate.prototype.k8sPod = null; + /** + * TaskTemplate sql. + * @member {flyteidl.core.ISql|null|undefined} sql + * @memberof flyteidl.core.TaskTemplate + * @instance + */ + TaskTemplate.prototype.sql = null; + /** * TaskTemplate taskTypeVersion. * @member {number} taskTypeVersion @@ -10482,12 +10491,12 @@ export const flyteidl = $root.flyteidl = (() => { /** * TaskTemplate target. - * @member {"container"|"k8sPod"|undefined} target + * @member {"container"|"k8sPod"|"sql"|undefined} target * @memberof flyteidl.core.TaskTemplate * @instance */ Object.defineProperty(TaskTemplate.prototype, "target", { - get: $util.oneOfGetter($oneOfFields = ["container", "k8sPod"]), + get: $util.oneOfGetter($oneOfFields = ["container", "k8sPod", "sql"]), set: $util.oneOfSetter($oneOfFields) }); @@ -10536,6 +10545,8 @@ export const flyteidl = $root.flyteidl = (() => { writer.uint32(/* id 16, wireType 2 =*/130).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 2 =*/18).string(message.config[keys[i]]).ldelim(); if (message.k8sPod != null && message.hasOwnProperty("k8sPod")) $root.flyteidl.core.K8sPod.encode(message.k8sPod, writer.uint32(/* id 17, wireType 2 =*/138).fork()).ldelim(); + if (message.sql != null && message.hasOwnProperty("sql")) + $root.flyteidl.core.Sql.encode(message.sql, writer.uint32(/* id 18, wireType 2 =*/146).fork()).ldelim(); return writer; }; @@ -10578,6 +10589,9 @@ export const flyteidl = $root.flyteidl = (() => { case 17: message.k8sPod = $root.flyteidl.core.K8sPod.decode(reader, reader.uint32()); break; + case 18: + message.sql = $root.flyteidl.core.Sql.decode(reader, reader.uint32()); + break; case 7: message.taskTypeVersion = reader.int32(); break; @@ -10653,6 +10667,16 @@ export const flyteidl = $root.flyteidl = (() => { return "k8sPod." + error; } } + if (message.sql != null && message.hasOwnProperty("sql")) { + if (properties.target === 1) + return "target: multiple values"; + properties.target = 1; + { + let error = $root.flyteidl.core.Sql.verify(message.sql); + if (error) + return "sql." + error; + } + } if (message.taskTypeVersion != null && message.hasOwnProperty("taskTypeVersion")) if (!$util.isInteger(message.taskTypeVersion)) return "taskTypeVersion: integer expected"; @@ -11719,6 +11743,158 @@ export const flyteidl = $root.flyteidl = (() => { return K8sObjectMetadata; })(); + core.Sql = (function() { + + /** + * Properties of a Sql. + * @memberof flyteidl.core + * @interface ISql + * @property {string|null} [statement] Sql statement + * @property {flyteidl.core.Sql.Dialect|null} [dialect] Sql dialect + */ + + /** + * Constructs a new Sql. + * @memberof flyteidl.core + * @classdesc Represents a Sql. + * @implements ISql + * @constructor + * @param {flyteidl.core.ISql=} [properties] Properties to set + */ + function Sql(properties) { + if (properties) + for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Sql statement. + * @member {string} statement + * @memberof flyteidl.core.Sql + * @instance + */ + Sql.prototype.statement = ""; + + /** + * Sql dialect. + * @member {flyteidl.core.Sql.Dialect} dialect + * @memberof flyteidl.core.Sql + * @instance + */ + Sql.prototype.dialect = 0; + + /** + * Creates a new Sql instance using the specified properties. + * @function create + * @memberof flyteidl.core.Sql + * @static + * @param {flyteidl.core.ISql=} [properties] Properties to set + * @returns {flyteidl.core.Sql} Sql instance + */ + Sql.create = function create(properties) { + return new Sql(properties); + }; + + /** + * Encodes the specified Sql message. Does not implicitly {@link flyteidl.core.Sql.verify|verify} messages. + * @function encode + * @memberof flyteidl.core.Sql + * @static + * @param {flyteidl.core.ISql} message Sql message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + Sql.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.statement != null && message.hasOwnProperty("statement")) + writer.uint32(/* id 1, wireType 2 =*/10).string(message.statement); + if (message.dialect != null && message.hasOwnProperty("dialect")) + writer.uint32(/* id 2, wireType 0 =*/16).int32(message.dialect); + return writer; + }; + + /** + * Decodes a Sql message from the specified reader or buffer. + * @function decode + * @memberof flyteidl.core.Sql + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {flyteidl.core.Sql} Sql + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + Sql.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + let end = length === undefined ? reader.len : reader.pos + length, message = new $root.flyteidl.core.Sql(); + while (reader.pos < end) { + let tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.statement = reader.string(); + break; + case 2: + message.dialect = reader.int32(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Verifies a Sql message. + * @function verify + * @memberof flyteidl.core.Sql + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + Sql.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.statement != null && message.hasOwnProperty("statement")) + if (!$util.isString(message.statement)) + return "statement: string expected"; + if (message.dialect != null && message.hasOwnProperty("dialect")) + switch (message.dialect) { + default: + return "dialect: enum value expected"; + case 0: + case 1: + case 2: + case 3: + break; + } + return null; + }; + + /** + * Dialect enum. + * @name flyteidl.core.Sql.Dialect + * @enum {string} + * @property {number} UNDEFINED=0 UNDEFINED value + * @property {number} ANSI=1 ANSI value + * @property {number} HIVE=2 HIVE value + * @property {number} OTHER=3 OTHER value + */ + Sql.Dialect = (function() { + const valuesById = {}, values = Object.create(valuesById); + values[valuesById[0] = "UNDEFINED"] = 0; + values[valuesById[1] = "ANSI"] = 1; + values[valuesById[2] = "HIVE"] = 2; + values[valuesById[3] = "OTHER"] = 3; + return values; + })(); + + return Sql; + })(); + core.Secret = (function() { /** diff --git a/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.py b/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.py index f03af1c75b0..a654780076d 100644 --- a/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.py +++ b/flyteidl/gen/pb_python/flyteidl/core/tasks_pb2.py @@ -26,7 +26,7 @@ package='flyteidl.core', syntax='proto3', serialized_options=_b('Z4github.com/flyteorg/flyteidl/gen/pb-go/flyteidl/core'), - serialized_pb=_b('\n\x19\x66lyteidl/core/tasks.proto\x12\rflyteidl.core\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x1c\x66lyteidl/core/security.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\"\xb1\x02\n\tResources\x12\x38\n\x08requests\x18\x01 \x03(\x0b\x32&.flyteidl.core.Resources.ResourceEntry\x12\x36\n\x06limits\x18\x02 \x03(\x0b\x32&.flyteidl.core.Resources.ResourceEntry\x1aS\n\rResourceEntry\x12\x33\n\x04name\x18\x01 \x01(\x0e\x32%.flyteidl.core.Resources.ResourceName\x12\r\n\x05value\x18\x02 \x01(\t\"]\n\x0cResourceName\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03\x43PU\x10\x01\x12\x07\n\x03GPU\x10\x02\x12\n\n\x06MEMORY\x10\x03\x12\x0b\n\x07STORAGE\x10\x04\x12\x15\n\x11\x45PHEMERAL_STORAGE\x10\x05\"\x95\x01\n\x0fRuntimeMetadata\x12\x38\n\x04type\x18\x01 \x01(\x0e\x32*.flyteidl.core.RuntimeMetadata.RuntimeType\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x0e\n\x06\x66lavor\x18\x03 \x01(\t\"\'\n\x0bRuntimeType\x12\t\n\x05OTHER\x10\x00\x12\r\n\tFLYTE_SDK\x10\x01\"\x9d\x02\n\x0cTaskMetadata\x12\x14\n\x0c\x64iscoverable\x18\x01 \x01(\x08\x12/\n\x07runtime\x18\x02 \x01(\x0b\x32\x1e.flyteidl.core.RuntimeMetadata\x12*\n\x07timeout\x18\x04 \x01(\x0b\x32\x19.google.protobuf.Duration\x12-\n\x07retries\x18\x05 \x01(\x0b\x32\x1c.flyteidl.core.RetryStrategy\x12\x19\n\x11\x64iscovery_version\x18\x06 \x01(\t\x12 \n\x18\x64\x65precated_error_message\x18\x07 \x01(\t\x12\x17\n\rinterruptible\x18\x08 \x01(\x08H\x00\x42\x15\n\x13interruptible_value\"\xed\x03\n\x0cTaskTemplate\x12%\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.Identifier\x12\x0c\n\x04type\x18\x02 \x01(\t\x12-\n\x08metadata\x18\x03 \x01(\x0b\x32\x1b.flyteidl.core.TaskMetadata\x12\x30\n\tinterface\x18\x04 \x01(\x0b\x32\x1d.flyteidl.core.TypedInterface\x12\'\n\x06\x63ustom\x18\x05 \x01(\x0b\x32\x17.google.protobuf.Struct\x12-\n\tcontainer\x18\x06 \x01(\x0b\x32\x18.flyteidl.core.ContainerH\x00\x12(\n\x07k8s_pod\x18\x11 \x01(\x0b\x32\x15.flyteidl.core.K8sPodH\x00\x12\x19\n\x11task_type_version\x18\x07 \x01(\x05\x12\x38\n\x10security_context\x18\x08 \x01(\x0b\x32\x1e.flyteidl.core.SecurityContext\x12\x37\n\x06\x63onfig\x18\x10 \x03(\x0b\x32\'.flyteidl.core.TaskTemplate.ConfigEntry\x1a-\n\x0b\x43onfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x08\n\x06target\"\'\n\rContainerPort\x12\x16\n\x0e\x63ontainer_port\x18\x01 \x01(\r\"\xa5\x02\n\tContainer\x12\r\n\x05image\x18\x01 \x01(\t\x12\x0f\n\x07\x63ommand\x18\x02 \x03(\t\x12\x0c\n\x04\x61rgs\x18\x03 \x03(\t\x12+\n\tresources\x18\x04 \x01(\x0b\x32\x18.flyteidl.core.Resources\x12(\n\x03\x65nv\x18\x05 \x03(\x0b\x32\x1b.flyteidl.core.KeyValuePair\x12/\n\x06\x63onfig\x18\x06 \x03(\x0b\x32\x1b.flyteidl.core.KeyValuePairB\x02\x18\x01\x12+\n\x05ports\x18\x07 \x03(\x0b\x32\x1c.flyteidl.core.ContainerPort\x12\x35\n\x0b\x64\x61ta_config\x18\t \x01(\x0b\x32 .flyteidl.core.DataLoadingConfig\"\x9b\x02\n\nIOStrategy\x12=\n\rdownload_mode\x18\x01 \x01(\x0e\x32&.flyteidl.core.IOStrategy.DownloadMode\x12\x39\n\x0bupload_mode\x18\x02 \x01(\x0e\x32$.flyteidl.core.IOStrategy.UploadMode\"L\n\x0c\x44ownloadMode\x12\x12\n\x0e\x44OWNLOAD_EAGER\x10\x00\x12\x13\n\x0f\x44OWNLOAD_STREAM\x10\x01\x12\x13\n\x0f\x44O_NOT_DOWNLOAD\x10\x02\"E\n\nUploadMode\x12\x12\n\x0eUPLOAD_ON_EXIT\x10\x00\x12\x10\n\x0cUPLOAD_EAGER\x10\x01\x12\x11\n\rDO_NOT_UPLOAD\x10\x02\"\xf3\x01\n\x11\x44\x61taLoadingConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x12\n\ninput_path\x18\x02 \x01(\t\x12\x13\n\x0boutput_path\x18\x03 \x01(\t\x12\x41\n\x06\x66ormat\x18\x04 \x01(\x0e\x32\x31.flyteidl.core.DataLoadingConfig.LiteralMapFormat\x12.\n\x0bio_strategy\x18\x05 \x01(\x0b\x32\x19.flyteidl.core.IOStrategy\"1\n\x10LiteralMapFormat\x12\x08\n\x04JSON\x10\x00\x12\x08\n\x04YAML\x10\x01\x12\t\n\x05PROTO\x10\x02\"g\n\x06K8sPod\x12\x32\n\x08metadata\x18\x01 \x01(\x0b\x32 .flyteidl.core.K8sObjectMetadata\x12)\n\x08pod_spec\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\"\xfc\x01\n\x11K8sObjectMetadata\x12<\n\x06labels\x18\x01 \x03(\x0b\x32,.flyteidl.core.K8sObjectMetadata.LabelsEntry\x12\x46\n\x0b\x61nnotations\x18\x02 \x03(\x0b\x32\x31.flyteidl.core.K8sObjectMetadata.AnnotationsEntry\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x32\n\x10\x41nnotationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x36Z4github.com/flyteorg/flyteidl/gen/pb-go/flyteidl/coreb\x06proto3') + serialized_pb=_b('\n\x19\x66lyteidl/core/tasks.proto\x12\rflyteidl.core\x1a\x1e\x66lyteidl/core/identifier.proto\x1a\x1d\x66lyteidl/core/interface.proto\x1a\x1c\x66lyteidl/core/literals.proto\x1a\x1c\x66lyteidl/core/security.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1cgoogle/protobuf/struct.proto\"\xb1\x02\n\tResources\x12\x38\n\x08requests\x18\x01 \x03(\x0b\x32&.flyteidl.core.Resources.ResourceEntry\x12\x36\n\x06limits\x18\x02 \x03(\x0b\x32&.flyteidl.core.Resources.ResourceEntry\x1aS\n\rResourceEntry\x12\x33\n\x04name\x18\x01 \x01(\x0e\x32%.flyteidl.core.Resources.ResourceName\x12\r\n\x05value\x18\x02 \x01(\t\"]\n\x0cResourceName\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x07\n\x03\x43PU\x10\x01\x12\x07\n\x03GPU\x10\x02\x12\n\n\x06MEMORY\x10\x03\x12\x0b\n\x07STORAGE\x10\x04\x12\x15\n\x11\x45PHEMERAL_STORAGE\x10\x05\"\x95\x01\n\x0fRuntimeMetadata\x12\x38\n\x04type\x18\x01 \x01(\x0e\x32*.flyteidl.core.RuntimeMetadata.RuntimeType\x12\x0f\n\x07version\x18\x02 \x01(\t\x12\x0e\n\x06\x66lavor\x18\x03 \x01(\t\"\'\n\x0bRuntimeType\x12\t\n\x05OTHER\x10\x00\x12\r\n\tFLYTE_SDK\x10\x01\"\x9d\x02\n\x0cTaskMetadata\x12\x14\n\x0c\x64iscoverable\x18\x01 \x01(\x08\x12/\n\x07runtime\x18\x02 \x01(\x0b\x32\x1e.flyteidl.core.RuntimeMetadata\x12*\n\x07timeout\x18\x04 \x01(\x0b\x32\x19.google.protobuf.Duration\x12-\n\x07retries\x18\x05 \x01(\x0b\x32\x1c.flyteidl.core.RetryStrategy\x12\x19\n\x11\x64iscovery_version\x18\x06 \x01(\t\x12 \n\x18\x64\x65precated_error_message\x18\x07 \x01(\t\x12\x17\n\rinterruptible\x18\x08 \x01(\x08H\x00\x42\x15\n\x13interruptible_value\"\x90\x04\n\x0cTaskTemplate\x12%\n\x02id\x18\x01 \x01(\x0b\x32\x19.flyteidl.core.Identifier\x12\x0c\n\x04type\x18\x02 \x01(\t\x12-\n\x08metadata\x18\x03 \x01(\x0b\x32\x1b.flyteidl.core.TaskMetadata\x12\x30\n\tinterface\x18\x04 \x01(\x0b\x32\x1d.flyteidl.core.TypedInterface\x12\'\n\x06\x63ustom\x18\x05 \x01(\x0b\x32\x17.google.protobuf.Struct\x12-\n\tcontainer\x18\x06 \x01(\x0b\x32\x18.flyteidl.core.ContainerH\x00\x12(\n\x07k8s_pod\x18\x11 \x01(\x0b\x32\x15.flyteidl.core.K8sPodH\x00\x12!\n\x03sql\x18\x12 \x01(\x0b\x32\x12.flyteidl.core.SqlH\x00\x12\x19\n\x11task_type_version\x18\x07 \x01(\x05\x12\x38\n\x10security_context\x18\x08 \x01(\x0b\x32\x1e.flyteidl.core.SecurityContext\x12\x37\n\x06\x63onfig\x18\x10 \x03(\x0b\x32\'.flyteidl.core.TaskTemplate.ConfigEntry\x1a-\n\x0b\x43onfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x08\n\x06target\"\'\n\rContainerPort\x12\x16\n\x0e\x63ontainer_port\x18\x01 \x01(\r\"\xa5\x02\n\tContainer\x12\r\n\x05image\x18\x01 \x01(\t\x12\x0f\n\x07\x63ommand\x18\x02 \x03(\t\x12\x0c\n\x04\x61rgs\x18\x03 \x03(\t\x12+\n\tresources\x18\x04 \x01(\x0b\x32\x18.flyteidl.core.Resources\x12(\n\x03\x65nv\x18\x05 \x03(\x0b\x32\x1b.flyteidl.core.KeyValuePair\x12/\n\x06\x63onfig\x18\x06 \x03(\x0b\x32\x1b.flyteidl.core.KeyValuePairB\x02\x18\x01\x12+\n\x05ports\x18\x07 \x03(\x0b\x32\x1c.flyteidl.core.ContainerPort\x12\x35\n\x0b\x64\x61ta_config\x18\t \x01(\x0b\x32 .flyteidl.core.DataLoadingConfig\"\x9b\x02\n\nIOStrategy\x12=\n\rdownload_mode\x18\x01 \x01(\x0e\x32&.flyteidl.core.IOStrategy.DownloadMode\x12\x39\n\x0bupload_mode\x18\x02 \x01(\x0e\x32$.flyteidl.core.IOStrategy.UploadMode\"L\n\x0c\x44ownloadMode\x12\x12\n\x0e\x44OWNLOAD_EAGER\x10\x00\x12\x13\n\x0f\x44OWNLOAD_STREAM\x10\x01\x12\x13\n\x0f\x44O_NOT_DOWNLOAD\x10\x02\"E\n\nUploadMode\x12\x12\n\x0eUPLOAD_ON_EXIT\x10\x00\x12\x10\n\x0cUPLOAD_EAGER\x10\x01\x12\x11\n\rDO_NOT_UPLOAD\x10\x02\"\xf3\x01\n\x11\x44\x61taLoadingConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x12\n\ninput_path\x18\x02 \x01(\t\x12\x13\n\x0boutput_path\x18\x03 \x01(\t\x12\x41\n\x06\x66ormat\x18\x04 \x01(\x0e\x32\x31.flyteidl.core.DataLoadingConfig.LiteralMapFormat\x12.\n\x0bio_strategy\x18\x05 \x01(\x0b\x32\x19.flyteidl.core.IOStrategy\"1\n\x10LiteralMapFormat\x12\x08\n\x04JSON\x10\x00\x12\x08\n\x04YAML\x10\x01\x12\t\n\x05PROTO\x10\x02\"g\n\x06K8sPod\x12\x32\n\x08metadata\x18\x01 \x01(\x0b\x32 .flyteidl.core.K8sObjectMetadata\x12)\n\x08pod_spec\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\"\xfc\x01\n\x11K8sObjectMetadata\x12<\n\x06labels\x18\x01 \x03(\x0b\x32,.flyteidl.core.K8sObjectMetadata.LabelsEntry\x12\x46\n\x0b\x61nnotations\x18\x02 \x03(\x0b\x32\x31.flyteidl.core.K8sObjectMetadata.AnnotationsEntry\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x32\n\x10\x41nnotationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"~\n\x03Sql\x12\x11\n\tstatement\x18\x01 \x01(\t\x12+\n\x07\x64ialect\x18\x02 \x01(\x0e\x32\x1a.flyteidl.core.Sql.Dialect\"7\n\x07\x44ialect\x12\r\n\tUNDEFINED\x10\x00\x12\x08\n\x04\x41NSI\x10\x01\x12\x08\n\x04HIVE\x10\x02\x12\t\n\x05OTHER\x10\x03\x42\x36Z4github.com/flyteorg/flyteidl/gen/pb-go/flyteidl/coreb\x06proto3') , dependencies=[flyteidl_dot_core_dot_identifier__pb2.DESCRIPTOR,flyteidl_dot_core_dot_interface__pb2.DESCRIPTOR,flyteidl_dot_core_dot_literals__pb2.DESCRIPTOR,flyteidl_dot_core_dot_security__pb2.DESCRIPTOR,google_dot_protobuf_dot_duration__pb2.DESCRIPTOR,google_dot_protobuf_dot_struct__pb2.DESCRIPTOR,]) @@ -113,8 +113,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=1947, - serialized_end=2023, + serialized_start=1982, + serialized_end=2058, ) _sym_db.RegisterEnumDescriptor(_IOSTRATEGY_DOWNLOADMODE) @@ -139,8 +139,8 @@ ], containing_type=None, serialized_options=None, - serialized_start=2025, - serialized_end=2094, + serialized_start=2060, + serialized_end=2129, ) _sym_db.RegisterEnumDescriptor(_IOSTRATEGY_UPLOADMODE) @@ -165,11 +165,41 @@ ], containing_type=None, serialized_options=None, - serialized_start=2291, - serialized_end=2340, + serialized_start=2326, + serialized_end=2375, ) _sym_db.RegisterEnumDescriptor(_DATALOADINGCONFIG_LITERALMAPFORMAT) +_SQL_DIALECT = _descriptor.EnumDescriptor( + name='Dialect', + full_name='flyteidl.core.Sql.Dialect', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='UNDEFINED', index=0, number=0, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='ANSI', index=1, number=1, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='HIVE', index=2, number=2, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='OTHER', index=3, number=3, + serialized_options=None, + type=None), + ], + containing_type=None, + serialized_options=None, + serialized_start=2808, + serialized_end=2863, +) +_sym_db.RegisterEnumDescriptor(_SQL_DIALECT) + _RESOURCES_RESOURCEENTRY = _descriptor.Descriptor( name='ResourceEntry', @@ -402,8 +432,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1416, - serialized_end=1461, + serialized_start=1451, + serialized_end=1496, ) _TASKTEMPLATE = _descriptor.Descriptor( @@ -463,21 +493,28 @@ is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='task_type_version', full_name='flyteidl.core.TaskTemplate.task_type_version', index=7, + name='sql', full_name='flyteidl.core.TaskTemplate.sql', index=7, + number=18, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='task_type_version', full_name='flyteidl.core.TaskTemplate.task_type_version', index=8, number=7, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='security_context', full_name='flyteidl.core.TaskTemplate.security_context', index=8, + name='security_context', full_name='flyteidl.core.TaskTemplate.security_context', index=9, number=8, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='config', full_name='flyteidl.core.TaskTemplate.config', index=9, + name='config', full_name='flyteidl.core.TaskTemplate.config', index=10, number=16, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, @@ -499,7 +536,7 @@ index=0, containing_type=None, fields=[]), ], serialized_start=978, - serialized_end=1471, + serialized_end=1506, ) @@ -529,8 +566,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1473, - serialized_end=1512, + serialized_start=1508, + serialized_end=1547, ) @@ -609,8 +646,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1515, - serialized_end=1808, + serialized_start=1550, + serialized_end=1843, ) @@ -649,8 +686,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1811, - serialized_end=2094, + serialized_start=1846, + serialized_end=2129, ) @@ -709,8 +746,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2097, - serialized_end=2340, + serialized_start=2132, + serialized_end=2375, ) @@ -747,8 +784,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2342, - serialized_end=2445, + serialized_start=2377, + serialized_end=2480, ) @@ -785,8 +822,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2603, - serialized_end=2648, + serialized_start=2638, + serialized_end=2683, ) _K8SOBJECTMETADATA_ANNOTATIONSENTRY = _descriptor.Descriptor( @@ -822,8 +859,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2650, - serialized_end=2700, + serialized_start=2685, + serialized_end=2735, ) _K8SOBJECTMETADATA = _descriptor.Descriptor( @@ -859,8 +896,47 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2448, - serialized_end=2700, + serialized_start=2483, + serialized_end=2735, +) + + +_SQL = _descriptor.Descriptor( + name='Sql', + full_name='flyteidl.core.Sql', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='statement', full_name='flyteidl.core.Sql.statement', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='dialect', full_name='flyteidl.core.Sql.dialect', index=1, + number=2, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _SQL_DIALECT, + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2737, + serialized_end=2863, ) _RESOURCES_RESOURCEENTRY.fields_by_name['name'].enum_type = _RESOURCES_RESOURCENAME @@ -883,6 +959,7 @@ _TASKTEMPLATE.fields_by_name['custom'].message_type = google_dot_protobuf_dot_struct__pb2._STRUCT _TASKTEMPLATE.fields_by_name['container'].message_type = _CONTAINER _TASKTEMPLATE.fields_by_name['k8s_pod'].message_type = _K8SPOD +_TASKTEMPLATE.fields_by_name['sql'].message_type = _SQL _TASKTEMPLATE.fields_by_name['security_context'].message_type = flyteidl_dot_core_dot_security__pb2._SECURITYCONTEXT _TASKTEMPLATE.fields_by_name['config'].message_type = _TASKTEMPLATE_CONFIGENTRY _TASKTEMPLATE.oneofs_by_name['target'].fields.append( @@ -891,6 +968,9 @@ _TASKTEMPLATE.oneofs_by_name['target'].fields.append( _TASKTEMPLATE.fields_by_name['k8s_pod']) _TASKTEMPLATE.fields_by_name['k8s_pod'].containing_oneof = _TASKTEMPLATE.oneofs_by_name['target'] +_TASKTEMPLATE.oneofs_by_name['target'].fields.append( + _TASKTEMPLATE.fields_by_name['sql']) +_TASKTEMPLATE.fields_by_name['sql'].containing_oneof = _TASKTEMPLATE.oneofs_by_name['target'] _CONTAINER.fields_by_name['resources'].message_type = _RESOURCES _CONTAINER.fields_by_name['env'].message_type = flyteidl_dot_core_dot_literals__pb2._KEYVALUEPAIR _CONTAINER.fields_by_name['config'].message_type = flyteidl_dot_core_dot_literals__pb2._KEYVALUEPAIR @@ -909,6 +989,8 @@ _K8SOBJECTMETADATA_ANNOTATIONSENTRY.containing_type = _K8SOBJECTMETADATA _K8SOBJECTMETADATA.fields_by_name['labels'].message_type = _K8SOBJECTMETADATA_LABELSENTRY _K8SOBJECTMETADATA.fields_by_name['annotations'].message_type = _K8SOBJECTMETADATA_ANNOTATIONSENTRY +_SQL.fields_by_name['dialect'].enum_type = _SQL_DIALECT +_SQL_DIALECT.containing_type = _SQL DESCRIPTOR.message_types_by_name['Resources'] = _RESOURCES DESCRIPTOR.message_types_by_name['RuntimeMetadata'] = _RUNTIMEMETADATA DESCRIPTOR.message_types_by_name['TaskMetadata'] = _TASKMETADATA @@ -919,6 +1001,7 @@ DESCRIPTOR.message_types_by_name['DataLoadingConfig'] = _DATALOADINGCONFIG DESCRIPTOR.message_types_by_name['K8sPod'] = _K8SPOD DESCRIPTOR.message_types_by_name['K8sObjectMetadata'] = _K8SOBJECTMETADATA +DESCRIPTOR.message_types_by_name['Sql'] = _SQL _sym_db.RegisterFileDescriptor(DESCRIPTOR) Resources = _reflection.GeneratedProtocolMessageType('Resources', (_message.Message,), dict( @@ -1023,6 +1106,13 @@ _sym_db.RegisterMessage(K8sObjectMetadata.LabelsEntry) _sym_db.RegisterMessage(K8sObjectMetadata.AnnotationsEntry) +Sql = _reflection.GeneratedProtocolMessageType('Sql', (_message.Message,), dict( + DESCRIPTOR = _SQL, + __module__ = 'flyteidl.core.tasks_pb2' + # @@protoc_insertion_point(class_scope:flyteidl.core.Sql) + )) +_sym_db.RegisterMessage(Sql) + DESCRIPTOR._options = None _TASKTEMPLATE_CONFIGENTRY._options = None diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md index 1fae3bf98ae..cb023236ed5 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/README.md @@ -295,6 +295,7 @@ Class | Method | HTTP request | Description - [CoreSecret](docs/CoreSecret.md) - [CoreSecurityContext](docs/CoreSecurityContext.md) - [CoreSimpleType](docs/CoreSimpleType.md) + - [CoreSql](docs/CoreSql.md) - [CoreTaskExecutionIdentifier](docs/CoreTaskExecutionIdentifier.md) - [CoreTaskExecutionPhase](docs/CoreTaskExecutionPhase.md) - [CoreTaskLog](docs/CoreTaskLog.md) @@ -349,6 +350,7 @@ Class | Method | HTTP request | Description - [SchemaTypeSchemaColumn](docs/SchemaTypeSchemaColumn.md) - [SecretMountType](docs/SecretMountType.md) - [SortDirection](docs/SortDirection.md) + - [SqlDialect](docs/SqlDialect.md) - [TaskExecutionMetadataInstanceClass](docs/TaskExecutionMetadataInstanceClass.md) - [TaskLogMessageFormat](docs/TaskLogMessageFormat.md) - [WorkflowMetadataOnFailurePolicy](docs/WorkflowMetadataOnFailurePolicy.md) diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py index 091f817af97..1e678cbe723 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/__init__.py @@ -194,6 +194,7 @@ from flyteadmin.models.core_secret import CoreSecret from flyteadmin.models.core_security_context import CoreSecurityContext from flyteadmin.models.core_simple_type import CoreSimpleType +from flyteadmin.models.core_sql import CoreSql from flyteadmin.models.core_task_execution_identifier import CoreTaskExecutionIdentifier from flyteadmin.models.core_task_execution_phase import CoreTaskExecutionPhase from flyteadmin.models.core_task_log import CoreTaskLog @@ -248,6 +249,7 @@ from flyteadmin.models.schema_type_schema_column import SchemaTypeSchemaColumn from flyteadmin.models.secret_mount_type import SecretMountType from flyteadmin.models.sort_direction import SortDirection +from flyteadmin.models.sql_dialect import SqlDialect from flyteadmin.models.task_execution_metadata_instance_class import TaskExecutionMetadataInstanceClass from flyteadmin.models.task_log_message_format import TaskLogMessageFormat from flyteadmin.models.workflow_metadata_on_failure_policy import WorkflowMetadataOnFailurePolicy diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py index 89c78af3735..c40bbf0e65f 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/__init__.py @@ -187,6 +187,7 @@ from flyteadmin.models.core_secret import CoreSecret from flyteadmin.models.core_security_context import CoreSecurityContext from flyteadmin.models.core_simple_type import CoreSimpleType +from flyteadmin.models.core_sql import CoreSql from flyteadmin.models.core_task_execution_identifier import CoreTaskExecutionIdentifier from flyteadmin.models.core_task_execution_phase import CoreTaskExecutionPhase from flyteadmin.models.core_task_log import CoreTaskLog @@ -241,6 +242,7 @@ from flyteadmin.models.schema_type_schema_column import SchemaTypeSchemaColumn from flyteadmin.models.secret_mount_type import SecretMountType from flyteadmin.models.sort_direction import SortDirection +from flyteadmin.models.sql_dialect import SqlDialect from flyteadmin.models.task_execution_metadata_instance_class import TaskExecutionMetadataInstanceClass from flyteadmin.models.task_log_message_format import TaskLogMessageFormat from flyteadmin.models.workflow_metadata_on_failure_policy import WorkflowMetadataOnFailurePolicy diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_sql.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_sql.py new file mode 100644 index 00000000000..e688a08362a --- /dev/null +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_sql.py @@ -0,0 +1,143 @@ +# coding: utf-8 + +""" + flyteidl/service/admin.proto + + No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) # noqa: E501 + + OpenAPI spec version: version not set + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + + +import pprint +import re # noqa: F401 + +import six + +from flyteadmin.models.sql_dialect import SqlDialect # noqa: F401,E501 + + +class CoreSql(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'statement': 'str', + 'dialect': 'SqlDialect' + } + + attribute_map = { + 'statement': 'statement', + 'dialect': 'dialect' + } + + def __init__(self, statement=None, dialect=None): # noqa: E501 + """CoreSql - a model defined in Swagger""" # noqa: E501 + + self._statement = None + self._dialect = None + self.discriminator = None + + if statement is not None: + self.statement = statement + if dialect is not None: + self.dialect = dialect + + @property + def statement(self): + """Gets the statement of this CoreSql. # noqa: E501 + + + :return: The statement of this CoreSql. # noqa: E501 + :rtype: str + """ + return self._statement + + @statement.setter + def statement(self, statement): + """Sets the statement of this CoreSql. + + + :param statement: The statement of this CoreSql. # noqa: E501 + :type: str + """ + + self._statement = statement + + @property + def dialect(self): + """Gets the dialect of this CoreSql. # noqa: E501 + + + :return: The dialect of this CoreSql. # noqa: E501 + :rtype: SqlDialect + """ + return self._dialect + + @dialect.setter + def dialect(self, dialect): + """Sets the dialect of this CoreSql. + + + :param dialect: The dialect of this CoreSql. # noqa: E501 + :type: SqlDialect + """ + + self._dialect = dialect + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(CoreSql, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, CoreSql): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_task_template.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_task_template.py index 6aedbbeba3d..870777f995a 100644 --- a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_task_template.py +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/core_task_template.py @@ -20,6 +20,7 @@ from flyteadmin.models.core_identifier import CoreIdentifier # noqa: F401,E501 from flyteadmin.models.core_k8s_pod import CoreK8sPod # noqa: F401,E501 from flyteadmin.models.core_security_context import CoreSecurityContext # noqa: F401,E501 +from flyteadmin.models.core_sql import CoreSql # noqa: F401,E501 from flyteadmin.models.core_task_metadata import CoreTaskMetadata # noqa: F401,E501 from flyteadmin.models.core_typed_interface import CoreTypedInterface # noqa: F401,E501 from flyteadmin.models.protobuf_struct import ProtobufStruct # noqa: F401,E501 @@ -46,6 +47,7 @@ class CoreTaskTemplate(object): 'custom': 'ProtobufStruct', 'container': 'CoreContainer', 'k8s_pod': 'CoreK8sPod', + 'sql': 'CoreSql', 'task_type_version': 'int', 'security_context': 'CoreSecurityContext', 'config': 'dict(str, str)' @@ -59,12 +61,13 @@ class CoreTaskTemplate(object): 'custom': 'custom', 'container': 'container', 'k8s_pod': 'k8s_pod', + 'sql': 'sql', 'task_type_version': 'task_type_version', 'security_context': 'security_context', 'config': 'config' } - def __init__(self, id=None, type=None, metadata=None, interface=None, custom=None, container=None, k8s_pod=None, task_type_version=None, security_context=None, config=None): # noqa: E501 + def __init__(self, id=None, type=None, metadata=None, interface=None, custom=None, container=None, k8s_pod=None, sql=None, task_type_version=None, security_context=None, config=None): # noqa: E501 """CoreTaskTemplate - a model defined in Swagger""" # noqa: E501 self._id = None @@ -74,6 +77,7 @@ def __init__(self, id=None, type=None, metadata=None, interface=None, custom=Non self._custom = None self._container = None self._k8s_pod = None + self._sql = None self._task_type_version = None self._security_context = None self._config = None @@ -93,6 +97,8 @@ def __init__(self, id=None, type=None, metadata=None, interface=None, custom=Non self.container = container if k8s_pod is not None: self.k8s_pod = k8s_pod + if sql is not None: + self.sql = sql if task_type_version is not None: self.task_type_version = task_type_version if security_context is not None: @@ -257,6 +263,27 @@ def k8s_pod(self, k8s_pod): self._k8s_pod = k8s_pod + @property + def sql(self): + """Gets the sql of this CoreTaskTemplate. # noqa: E501 + + + :return: The sql of this CoreTaskTemplate. # noqa: E501 + :rtype: CoreSql + """ + return self._sql + + @sql.setter + def sql(self, sql): + """Sets the sql of this CoreTaskTemplate. + + + :param sql: The sql of this CoreTaskTemplate. # noqa: E501 + :type: CoreSql + """ + + self._sql = sql + @property def task_type_version(self): """Gets the task_type_version of this CoreTaskTemplate. # noqa: E501 diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/sql_dialect.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/sql_dialect.py new file mode 100644 index 00000000000..00a361f1ba6 --- /dev/null +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/flyteadmin/models/sql_dialect.py @@ -0,0 +1,95 @@ +# coding: utf-8 + +""" + flyteidl/service/admin.proto + + No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) # noqa: E501 + + OpenAPI spec version: version not set + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + + +import pprint +import re # noqa: F401 + +import six + + +class SqlDialect(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + + """ + allowed enum values + """ + UNDEFINED = "UNDEFINED" + ANSI = "ANSI" + HIVE = "HIVE" + OTHER = "OTHER" + + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + } + + attribute_map = { + } + + def __init__(self): # noqa: E501 + """SqlDialect - a model defined in Swagger""" # noqa: E501 + self.discriminator = None + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(SqlDialect, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, SqlDialect): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_core_sql.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_core_sql.py new file mode 100644 index 00000000000..458b1172ca0 --- /dev/null +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_core_sql.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + flyteidl/service/admin.proto + + No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) # noqa: E501 + + OpenAPI spec version: version not set + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + + +from __future__ import absolute_import + +import unittest + +import flyteadmin +from flyteadmin.models.core_sql import CoreSql # noqa: E501 +from flyteadmin.rest import ApiException + + +class TestCoreSql(unittest.TestCase): + """CoreSql unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testCoreSql(self): + """Test CoreSql""" + # FIXME: construct object with mandatory attributes with example values + # model = flyteadmin.models.core_sql.CoreSql() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_sql_dialect.py b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_sql_dialect.py new file mode 100644 index 00000000000..943c2b8c993 --- /dev/null +++ b/flyteidl/gen/pb_python/flyteidl/service/flyteadmin/test/test_sql_dialect.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + flyteidl/service/admin.proto + + No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) # noqa: E501 + + OpenAPI spec version: version not set + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + + +from __future__ import absolute_import + +import unittest + +import flyteadmin +from flyteadmin.models.sql_dialect import SqlDialect # noqa: E501 +from flyteadmin.rest import ApiException + + +class TestSqlDialect(unittest.TestCase): + """SqlDialect unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testSqlDialect(self): + """Test SqlDialect""" + # FIXME: construct object with mandatory attributes with example values + # model = flyteadmin.models.sql_dialect.SqlDialect() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/flyteidl/protos/docs/admin/admin.rst b/flyteidl/protos/docs/admin/admin.rst index 30fe069bbbd..87a5cc75778 100644 --- a/flyteidl/protos/docs/admin/admin.rst +++ b/flyteidl/protos/docs/admin/admin.rst @@ -2260,31 +2260,32 @@ Note: This is internal to Admin and doesn't need to be exposed to other componen -.. _ref_flyteidl/admin/project.proto: +.. _ref_flyteidl/admin/project_domain_attributes.proto: -flyteidl/admin/project.proto +flyteidl/admin/project_domain_attributes.proto ================================================================== -.. _ref_flyteidl.admin.Domain: +.. _ref_flyteidl.admin.ProjectDomainAttributes: -Domain +ProjectDomainAttributes ------------------------------------------------------------------ -Namespace within a project commonly used to differentiate between different service instances. -e.g. "production", "development", etc. +Defines a set of custom matching attributes which defines resource defaults for a project and domain. +For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` -.. csv-table:: Domain type fields +.. csv-table:: ProjectDomainAttributes type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "id", ":ref:`ref_string`", "", "Globally unique domain name." - "name", ":ref:`ref_string`", "", "Display name." + "project", ":ref:`ref_string`", "", "Unique project id for which this set of attributes will be applied." + "domain", ":ref:`ref_string`", "", "Unique domain id for which this set of attributes will be applied." + "matching_attributes", ":ref:`ref_flyteidl.admin.MatchingAttributes`", "", "" @@ -2292,25 +2293,23 @@ e.g. "production", "development", etc. -.. _ref_flyteidl.admin.Project: +.. _ref_flyteidl.admin.ProjectDomainAttributesDeleteRequest: -Project +ProjectDomainAttributesDeleteRequest ------------------------------------------------------------------ -Top-level namespace used to classify different entities like workflows and executions. +Request to delete a set matchable project domain attribute override. +For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` -.. csv-table:: Project type fields +.. csv-table:: ProjectDomainAttributesDeleteRequest type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "id", ":ref:`ref_string`", "", "Globally unique project name." - "name", ":ref:`ref_string`", "", "Display name." - "domains", ":ref:`ref_flyteidl.admin.Domain`", "repeated", "" - "description", ":ref:`ref_string`", "", "" - "labels", ":ref:`ref_flyteidl.admin.Labels`", "", "Leverage Labels from flyteidel.admin.common.proto to tag projects with ownership information." - "state", ":ref:`ref_flyteidl.admin.Project.ProjectState`", "", "" + "project", ":ref:`ref_string`", "", "Unique project id which this set of attributes references. +required" + "domain", ":ref:`ref_string`", "", "Unique domain id which this set of attributes references. +required" + "resource_type", ":ref:`ref_flyteidl.admin.MatchableResource`", "", "Which type of matchable attributes to delete. +required" @@ -2318,24 +2317,13 @@ Top-level namespace used to classify different entities like workflows and execu -.. _ref_flyteidl.admin.ProjectListRequest: +.. _ref_flyteidl.admin.ProjectDomainAttributesDeleteResponse: -ProjectListRequest +ProjectDomainAttributesDeleteResponse ------------------------------------------------------------------ -Request to retrieve a list of projects matching specified filters. -See :ref:`ref_flyteidl.admin.Project` for more details - - - -.. csv-table:: ProjectListRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto +Purposefully empty, may be populated in the future. - "limit", ":ref:`ref_uint32`", "", "Indicates the number of projects to be returned. +required" - "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional" - "filters", ":ref:`ref_string`", "", "Indicates a list of filters passed as string. More info on constructing filters : +optional" - "sort_by", ":ref:`ref_flyteidl.admin.Sort`", "", "Sort ordering. +optional" @@ -2343,21 +2331,23 @@ See :ref:`ref_flyteidl.admin.Project` for more details -.. _ref_flyteidl.admin.ProjectRegisterRequest: +.. _ref_flyteidl.admin.ProjectDomainAttributesGetRequest: -ProjectRegisterRequest +ProjectDomainAttributesGetRequest ------------------------------------------------------------------ -Adds a new user-project within the Flyte deployment. -See :ref:`ref_flyteidl.admin.Project` for more details +Request to get an individual project domain attribute override. +For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` -.. csv-table:: ProjectRegisterRequest type fields +.. csv-table:: ProjectDomainAttributesGetRequest type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "project", ":ref:`ref_flyteidl.admin.Project`", "", "+required" + "project", ":ref:`ref_string`", "", "Unique project id which this set of attributes references. +required" + "domain", ":ref:`ref_string`", "", "Unique domain id which this set of attributes references. +required" + "resource_type", ":ref:`ref_flyteidl.admin.MatchableResource`", "", "Which type of matchable attributes to return. +required" @@ -2365,27 +2355,21 @@ See :ref:`ref_flyteidl.admin.Project` for more details -.. _ref_flyteidl.admin.ProjectRegisterResponse: +.. _ref_flyteidl.admin.ProjectDomainAttributesGetResponse: -ProjectRegisterResponse +ProjectDomainAttributesGetResponse ------------------------------------------------------------------ -Purposefully empty, may be updated in the future. - - - - - - - +Response to get an individual project domain attribute override. +For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` -.. _ref_flyteidl.admin.ProjectUpdateResponse: -ProjectUpdateResponse ------------------------------------------------------------------- -Purposefully empty, may be updated in the future. +.. csv-table:: ProjectDomainAttributesGetResponse type fields + :header: "Field", "Type", "Label", "Description" + :widths: auto + "attributes", ":ref:`ref_flyteidl.admin.ProjectDomainAttributes`", "", "" @@ -2393,45 +2377,41 @@ Purposefully empty, may be updated in the future. -.. _ref_flyteidl.admin.Projects: +.. _ref_flyteidl.admin.ProjectDomainAttributesUpdateRequest: -Projects +ProjectDomainAttributesUpdateRequest ------------------------------------------------------------------ -Represents a list of projects. -See :ref:`ref_flyteidl.admin.Project` for more details +Sets custom attributes for a project-domain combination. +For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` -.. csv-table:: Projects type fields +.. csv-table:: ProjectDomainAttributesUpdateRequest type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "projects", ":ref:`ref_flyteidl.admin.Project`", "repeated", "" - "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. If there are no more results, this value will be empty." - + "attributes", ":ref:`ref_flyteidl.admin.ProjectDomainAttributes`", "", "+required" - -.. _ref_flyteidl.admin.Project.ProjectState: +.. _ref_flyteidl.admin.ProjectDomainAttributesUpdateResponse: -Project.ProjectState +ProjectDomainAttributesUpdateResponse ------------------------------------------------------------------ -The state of the project is used to control its visibility in the UI and validity. +Purposefully empty, may be populated in the future. + -.. csv-table:: Enum Project.ProjectState values - :header: "Name", "Number", "Description" - :widths: auto - "ACTIVE", "0", "By default, all projects are considered active." - "ARCHIVED", "1", "Archived projects are no longer visible in the UI and no longer valid." - "SYSTEM_GENERATED", "2", "System generated projects that aren't explicitly created or managed by a user." + + + + @@ -2442,32 +2422,31 @@ The state of the project is used to control its visibility in the UI and validit -.. _ref_flyteidl/admin/project_domain_attributes.proto: +.. _ref_flyteidl/admin/project.proto: -flyteidl/admin/project_domain_attributes.proto +flyteidl/admin/project.proto ================================================================== -.. _ref_flyteidl.admin.ProjectDomainAttributes: +.. _ref_flyteidl.admin.Domain: -ProjectDomainAttributes +Domain ------------------------------------------------------------------ -Defines a set of custom matching attributes which defines resource defaults for a project and domain. -For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` +Namespace within a project commonly used to differentiate between different service instances. +e.g. "production", "development", etc. -.. csv-table:: ProjectDomainAttributes type fields +.. csv-table:: Domain type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "project", ":ref:`ref_string`", "", "Unique project id for which this set of attributes will be applied." - "domain", ":ref:`ref_string`", "", "Unique domain id for which this set of attributes will be applied." - "matching_attributes", ":ref:`ref_flyteidl.admin.MatchingAttributes`", "", "" + "id", ":ref:`ref_string`", "", "Globally unique domain name." + "name", ":ref:`ref_string`", "", "Display name." @@ -2475,23 +2454,25 @@ For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAtt -.. _ref_flyteidl.admin.ProjectDomainAttributesDeleteRequest: +.. _ref_flyteidl.admin.Project: -ProjectDomainAttributesDeleteRequest +Project ------------------------------------------------------------------ -Request to delete a set matchable project domain attribute override. -For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` +Top-level namespace used to classify different entities like workflows and executions. -.. csv-table:: ProjectDomainAttributesDeleteRequest type fields +.. csv-table:: Project type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "project", ":ref:`ref_string`", "", "Unique project id which this set of attributes references. +required" - "domain", ":ref:`ref_string`", "", "Unique domain id which this set of attributes references. +required" - "resource_type", ":ref:`ref_flyteidl.admin.MatchableResource`", "", "Which type of matchable attributes to delete. +required" + "id", ":ref:`ref_string`", "", "Globally unique project name." + "name", ":ref:`ref_string`", "", "Display name." + "domains", ":ref:`ref_flyteidl.admin.Domain`", "repeated", "" + "description", ":ref:`ref_string`", "", "" + "labels", ":ref:`ref_flyteidl.admin.Labels`", "", "Leverage Labels from flyteidel.admin.common.proto to tag projects with ownership information." + "state", ":ref:`ref_flyteidl.admin.Project.ProjectState`", "", "" @@ -2499,37 +2480,46 @@ For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAtt -.. _ref_flyteidl.admin.ProjectDomainAttributesDeleteResponse: +.. _ref_flyteidl.admin.ProjectListRequest: -ProjectDomainAttributesDeleteResponse +ProjectListRequest ------------------------------------------------------------------ -Purposefully empty, may be populated in the future. +Request to retrieve a list of projects matching specified filters. +See :ref:`ref_flyteidl.admin.Project` for more details +.. csv-table:: ProjectListRequest type fields + :header: "Field", "Type", "Label", "Description" + :widths: auto + "limit", ":ref:`ref_uint32`", "", "Indicates the number of projects to be returned. +required" + "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, this server-provided token can be used to fetch the next page in a query. +optional" + "filters", ":ref:`ref_string`", "", "Indicates a list of filters passed as string. More info on constructing filters : +optional" + "sort_by", ":ref:`ref_flyteidl.admin.Sort`", "", "Sort ordering. +optional" -.. _ref_flyteidl.admin.ProjectDomainAttributesGetRequest: -ProjectDomainAttributesGetRequest + + +.. _ref_flyteidl.admin.ProjectRegisterRequest: + +ProjectRegisterRequest ------------------------------------------------------------------ -Request to get an individual project domain attribute override. -For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` +Adds a new user-project within the Flyte deployment. +See :ref:`ref_flyteidl.admin.Project` for more details -.. csv-table:: ProjectDomainAttributesGetRequest type fields +.. csv-table:: ProjectRegisterRequest type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "project", ":ref:`ref_string`", "", "Unique project id which this set of attributes references. +required" - "domain", ":ref:`ref_string`", "", "Unique domain id which this set of attributes references. +required" - "resource_type", ":ref:`ref_flyteidl.admin.MatchableResource`", "", "Which type of matchable attributes to return. +required" + "project", ":ref:`ref_flyteidl.admin.Project`", "", "+required" @@ -2537,63 +2527,73 @@ For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAtt -.. _ref_flyteidl.admin.ProjectDomainAttributesGetResponse: +.. _ref_flyteidl.admin.ProjectRegisterResponse: -ProjectDomainAttributesGetResponse +ProjectRegisterResponse ------------------------------------------------------------------ -Response to get an individual project domain attribute override. -For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` +Purposefully empty, may be updated in the future. -.. csv-table:: ProjectDomainAttributesGetResponse type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - "attributes", ":ref:`ref_flyteidl.admin.ProjectDomainAttributes`", "", "" +.. _ref_flyteidl.admin.ProjectUpdateResponse: +ProjectUpdateResponse +------------------------------------------------------------------ +Purposefully empty, may be updated in the future. -.. _ref_flyteidl.admin.ProjectDomainAttributesUpdateRequest: -ProjectDomainAttributesUpdateRequest ------------------------------------------------------------------- -Sets custom attributes for a project-domain combination. -For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` -.. csv-table:: ProjectDomainAttributesUpdateRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - "attributes", ":ref:`ref_flyteidl.admin.ProjectDomainAttributes`", "", "+required" +.. _ref_flyteidl.admin.Projects: +Projects +------------------------------------------------------------------ +Represents a list of projects. +See :ref:`ref_flyteidl.admin.Project` for more details +.. csv-table:: Projects type fields + :header: "Field", "Type", "Label", "Description" + :widths: auto -.. _ref_flyteidl.admin.ProjectDomainAttributesUpdateResponse: + "projects", ":ref:`ref_flyteidl.admin.Project`", "repeated", "" + "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. If there are no more results, this value will be empty." -ProjectDomainAttributesUpdateResponse ------------------------------------------------------------------- -Purposefully empty, may be populated in the future. + - +.. _ref_flyteidl.admin.Project.ProjectState: + +Project.ProjectState +------------------------------------------------------------------ + +The state of the project is used to control its visibility in the UI and validity. + +.. csv-table:: Enum Project.ProjectState values + :header: "Name", "Number", "Description" + :widths: auto + + "ACTIVE", "0", "By default, all projects are considered active." + "ARCHIVED", "1", "Archived projects are no longer visible in the UI and no longer valid." + "SYSTEM_GENERATED", "2", "System generated projects that aren't explicitly created or managed by a user." @@ -2707,32 +2707,34 @@ Represents a frequency at which to run a schedule. -.. _ref_flyteidl/admin/task.proto: +.. _ref_flyteidl/admin/task_execution.proto: -flyteidl/admin/task.proto +flyteidl/admin/task_execution.proto ================================================================== -.. _ref_flyteidl.admin.Task: +.. _ref_flyteidl.admin.TaskExecution: -Task +TaskExecution ------------------------------------------------------------------ -Flyte workflows are composed of many ordered tasks. That is small, reusable, self-contained logical blocks -arranged to process workflow inputs and produce a deterministic set of outputs. -Tasks can come in many varieties tuned for specialized behavior. +Encapsulates all details for a single task execution entity. +A task execution represents an instantiated task, including all inputs and additional +metadata as well as computed results included state, outputs, and duration-based attributes. -.. csv-table:: Task type fields +.. csv-table:: TaskExecution type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "id", ":ref:`ref_flyteidl.core.Identifier`", "", "id represents the unique identifier of the task." - "closure", ":ref:`ref_flyteidl.admin.TaskClosure`", "", "closure encapsulates all the fields that maps to a compiled version of the task." + "id", ":ref:`ref_flyteidl.core.TaskExecutionIdentifier`", "", "Unique identifier for the task execution." + "input_uri", ":ref:`ref_string`", "", "Path to remote data store where input blob is stored." + "closure", ":ref:`ref_flyteidl.admin.TaskExecutionClosure`", "", "Task execution details and results." + "is_parent", ":ref:`ref_bool`", "", "Whether this task spawned nodes." @@ -2740,22 +2742,32 @@ Tasks can come in many varieties tuned for specialized behavior. -.. _ref_flyteidl.admin.TaskClosure: +.. _ref_flyteidl.admin.TaskExecutionClosure: -TaskClosure +TaskExecutionClosure ------------------------------------------------------------------ -Compute task attributes which include values derived from the TaskSpec, as well as plugin-specific data -and task metadata. +Container for task execution details and results. -.. csv-table:: TaskClosure type fields +.. csv-table:: TaskExecutionClosure type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "compiled_task", ":ref:`ref_flyteidl.core.CompiledTask`", "", "Represents the compiled representation of the task from the specification provided." - "created_at", ":ref:`ref_google.protobuf.Timestamp`", "", "Time at which the task was created." + "output_uri", ":ref:`ref_string`", "", "Path to remote data store where output blob is stored if the execution succeeded (and produced outputs)." + "error", ":ref:`ref_flyteidl.core.ExecutionError`", "", "Error information for the task execution. Populated if the execution failed." + "output_data", ":ref:`ref_flyteidl.core.LiteralMap`", "", "Raw output data produced by this task execution." + "phase", ":ref:`ref_flyteidl.core.TaskExecution.Phase`", "", "The last recorded phase for this task execution." + "logs", ":ref:`ref_flyteidl.core.TaskLog`", "repeated", "Detailed log information output by the task execution." + "started_at", ":ref:`ref_google.protobuf.Timestamp`", "", "Time at which the task execution began running." + "duration", ":ref:`ref_google.protobuf.Duration`", "", "The amount of time the task execution spent running." + "created_at", ":ref:`ref_google.protobuf.Timestamp`", "", "Time at which the task execution was created." + "updated_at", ":ref:`ref_google.protobuf.Timestamp`", "", "Time at which the task execution was last updated." + "custom_info", ":ref:`ref_google.protobuf.Struct`", "", "Custom data specific to the task plugin." + "reason", ":ref:`ref_string`", "", "If there is an explanation for the most recent phase transition, the reason will capture it." + "task_type", ":ref:`ref_string`", "", "A predefined yet extensible Task type identifier." + "metadata", ":ref:`ref_flyteidl.event.TaskExecutionMetadata`", "", "Metadata around how a task was executed." @@ -2763,22 +2775,21 @@ and task metadata. -.. _ref_flyteidl.admin.TaskCreateRequest: +.. _ref_flyteidl.admin.TaskExecutionGetDataRequest: -TaskCreateRequest +TaskExecutionGetDataRequest ------------------------------------------------------------------ -Represents a request structure to create a revision of a task. -See :ref:`ref_flyteidl.admin.Task` for more details +Request structure to fetch inputs and output for a task execution. +By default this data is not returned inline in :ref:`ref_flyteidl.admin.TaskExecutionGetRequest` -.. csv-table:: TaskCreateRequest type fields +.. csv-table:: TaskExecutionGetDataRequest type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "id", ":ref:`ref_flyteidl.core.Identifier`", "", "id represents the unique identifier of the task. +required" - "spec", ":ref:`ref_flyteidl.admin.TaskSpec`", "", "Represents the specification for task. +required" + "id", ":ref:`ref_flyteidl.core.TaskExecutionIdentifier`", "", "The identifier of the task execution for which to fetch inputs and outputs. +required" @@ -2786,38 +2797,45 @@ See :ref:`ref_flyteidl.admin.Task` for more details -.. _ref_flyteidl.admin.TaskCreateResponse: +.. _ref_flyteidl.admin.TaskExecutionGetDataResponse: -TaskCreateResponse +TaskExecutionGetDataResponse ------------------------------------------------------------------ -Represents a response structure if task creation succeeds. +Response structure for TaskExecutionGetDataRequest which contains inputs and outputs for a task execution. -Purposefully empty, may be populated in the future. +.. csv-table:: TaskExecutionGetDataResponse type fields + :header: "Field", "Type", "Label", "Description" + :widths: auto + "inputs", ":ref:`ref_flyteidl.admin.UrlBlob`", "", "**Deprecated.** Signed url to fetch a core.LiteralMap of task execution inputs. Deprecated: Please use full_inputs instead." + "outputs", ":ref:`ref_flyteidl.admin.UrlBlob`", "", "**Deprecated.** Signed url to fetch a core.LiteralMap of task execution outputs. Deprecated: Please use full_outputs instead." + "full_inputs", ":ref:`ref_flyteidl.core.LiteralMap`", "", "Full_inputs will only be populated if they are under a configured size threshold." + "full_outputs", ":ref:`ref_flyteidl.core.LiteralMap`", "", "Full_outputs will only be populated if they are under a configured size threshold." -.. _ref_flyteidl.admin.TaskList: -TaskList + +.. _ref_flyteidl.admin.TaskExecutionGetRequest: + +TaskExecutionGetRequest ------------------------------------------------------------------ -Represents a list of tasks returned from the admin. -See :ref:`ref_flyteidl.admin.Task` for more details +A message used to fetch a single task execution entity. +See :ref:`ref_flyteidl.admin.TaskExecution` for more details -.. csv-table:: TaskList type fields +.. csv-table:: TaskExecutionGetRequest type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "tasks", ":ref:`ref_flyteidl.admin.Task`", "repeated", "A list of tasks returned based on the request." - "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. If there are no more results, this value will be empty." + "id", ":ref:`ref_flyteidl.core.TaskExecutionIdentifier`", "", "Unique identifier for the task execution. +required" @@ -2825,97 +2843,90 @@ See :ref:`ref_flyteidl.admin.Task` for more details -.. _ref_flyteidl.admin.TaskSpec: +.. _ref_flyteidl.admin.TaskExecutionList: -TaskSpec +TaskExecutionList ------------------------------------------------------------------ -Represents a structure that encapsulates the user-configured specification of the task. +Response structure for a query to list of task execution entities. +See :ref:`ref_flyteidl.admin.TaskExecution` for more details -.. csv-table:: TaskSpec type fields +.. csv-table:: TaskExecutionList type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "template", ":ref:`ref_flyteidl.core.TaskTemplate`", "", "Template of the task that encapsulates all the metadata of the task." + "task_executions", ":ref:`ref_flyteidl.admin.TaskExecution`", "repeated", "" + "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. If there are no more results, this value will be empty." - - - +.. _ref_flyteidl.admin.TaskExecutionListRequest: - +TaskExecutionListRequest +------------------------------------------------------------------ +Represents a request structure to retrieve a list of task execution entities yielded by a specific node execution. +See :ref:`ref_flyteidl.admin.TaskExecution` for more details -.. _ref_flyteidl/admin/task_execution.proto: +.. csv-table:: TaskExecutionListRequest type fields + :header: "Field", "Type", "Label", "Description" + :widths: auto -flyteidl/admin/task_execution.proto -================================================================== + "node_execution_id", ":ref:`ref_flyteidl.core.NodeExecutionIdentifier`", "", "Indicates the node execution to filter by. +required" + "limit", ":ref:`ref_uint32`", "", "Indicates the number of resources to be returned. +required" + "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional" + "filters", ":ref:`ref_string`", "", "Indicates a list of filters passed as string. More info on constructing filters : +optional" + "sort_by", ":ref:`ref_flyteidl.admin.Sort`", "", "Sort ordering for returned list. +optional" -.. _ref_flyteidl.admin.TaskExecution: + -TaskExecution ------------------------------------------------------------------- + -Encapsulates all details for a single task execution entity. -A task execution represents an instantiated task, including all inputs and additional -metadata as well as computed results included state, outputs, and duration-based attributes. + + -.. csv-table:: TaskExecution type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - "id", ":ref:`ref_flyteidl.core.TaskExecutionIdentifier`", "", "Unique identifier for the task execution." - "input_uri", ":ref:`ref_string`", "", "Path to remote data store where input blob is stored." - "closure", ":ref:`ref_flyteidl.admin.TaskExecutionClosure`", "", "Task execution details and results." - "is_parent", ":ref:`ref_bool`", "", "Whether this task spawned nodes." +.. _ref_flyteidl/admin/task.proto: +flyteidl/admin/task.proto +================================================================== -.. _ref_flyteidl.admin.TaskExecutionClosure: +.. _ref_flyteidl.admin.Task: -TaskExecutionClosure +Task ------------------------------------------------------------------ -Container for task execution details and results. +Flyte workflows are composed of many ordered tasks. That is small, reusable, self-contained logical blocks +arranged to process workflow inputs and produce a deterministic set of outputs. +Tasks can come in many varieties tuned for specialized behavior. -.. csv-table:: TaskExecutionClosure type fields +.. csv-table:: Task type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "output_uri", ":ref:`ref_string`", "", "Path to remote data store where output blob is stored if the execution succeeded (and produced outputs)." - "error", ":ref:`ref_flyteidl.core.ExecutionError`", "", "Error information for the task execution. Populated if the execution failed." - "output_data", ":ref:`ref_flyteidl.core.LiteralMap`", "", "Raw output data produced by this task execution." - "phase", ":ref:`ref_flyteidl.core.TaskExecution.Phase`", "", "The last recorded phase for this task execution." - "logs", ":ref:`ref_flyteidl.core.TaskLog`", "repeated", "Detailed log information output by the task execution." - "started_at", ":ref:`ref_google.protobuf.Timestamp`", "", "Time at which the task execution began running." - "duration", ":ref:`ref_google.protobuf.Duration`", "", "The amount of time the task execution spent running." - "created_at", ":ref:`ref_google.protobuf.Timestamp`", "", "Time at which the task execution was created." - "updated_at", ":ref:`ref_google.protobuf.Timestamp`", "", "Time at which the task execution was last updated." - "custom_info", ":ref:`ref_google.protobuf.Struct`", "", "Custom data specific to the task plugin." - "reason", ":ref:`ref_string`", "", "If there is an explanation for the most recent phase transition, the reason will capture it." - "task_type", ":ref:`ref_string`", "", "A predefined yet extensible Task type identifier." - "metadata", ":ref:`ref_flyteidl.event.TaskExecutionMetadata`", "", "Metadata around how a task was executed." + "id", ":ref:`ref_flyteidl.core.Identifier`", "", "id represents the unique identifier of the task." + "closure", ":ref:`ref_flyteidl.admin.TaskClosure`", "", "closure encapsulates all the fields that maps to a compiled version of the task." @@ -2923,21 +2934,22 @@ Container for task execution details and results. -.. _ref_flyteidl.admin.TaskExecutionGetDataRequest: +.. _ref_flyteidl.admin.TaskClosure: -TaskExecutionGetDataRequest +TaskClosure ------------------------------------------------------------------ -Request structure to fetch inputs and output for a task execution. -By default this data is not returned inline in :ref:`ref_flyteidl.admin.TaskExecutionGetRequest` +Compute task attributes which include values derived from the TaskSpec, as well as plugin-specific data +and task metadata. -.. csv-table:: TaskExecutionGetDataRequest type fields +.. csv-table:: TaskClosure type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "id", ":ref:`ref_flyteidl.core.TaskExecutionIdentifier`", "", "The identifier of the task execution for which to fetch inputs and outputs. +required" + "compiled_task", ":ref:`ref_flyteidl.core.CompiledTask`", "", "Represents the compiled representation of the task from the specification provided." + "created_at", ":ref:`ref_google.protobuf.Timestamp`", "", "Time at which the task was created." @@ -2945,23 +2957,22 @@ By default this data is not returned inline in :ref:`ref_flyteidl.admin.TaskExec -.. _ref_flyteidl.admin.TaskExecutionGetDataResponse: +.. _ref_flyteidl.admin.TaskCreateRequest: -TaskExecutionGetDataResponse +TaskCreateRequest ------------------------------------------------------------------ -Response structure for TaskExecutionGetDataRequest which contains inputs and outputs for a task execution. +Represents a request structure to create a revision of a task. +See :ref:`ref_flyteidl.admin.Task` for more details -.. csv-table:: TaskExecutionGetDataResponse type fields +.. csv-table:: TaskCreateRequest type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "inputs", ":ref:`ref_flyteidl.admin.UrlBlob`", "", "**Deprecated.** Signed url to fetch a core.LiteralMap of task execution inputs. Deprecated: Please use full_inputs instead." - "outputs", ":ref:`ref_flyteidl.admin.UrlBlob`", "", "**Deprecated.** Signed url to fetch a core.LiteralMap of task execution outputs. Deprecated: Please use full_outputs instead." - "full_inputs", ":ref:`ref_flyteidl.core.LiteralMap`", "", "Full_inputs will only be populated if they are under a configured size threshold." - "full_outputs", ":ref:`ref_flyteidl.core.LiteralMap`", "", "Full_outputs will only be populated if they are under a configured size threshold." + "id", ":ref:`ref_flyteidl.core.Identifier`", "", "id represents the unique identifier of the task. +required" + "spec", ":ref:`ref_flyteidl.admin.TaskSpec`", "", "Represents the specification for task. +required" @@ -2969,21 +2980,15 @@ Response structure for TaskExecutionGetDataRequest which contains inputs and out -.. _ref_flyteidl.admin.TaskExecutionGetRequest: +.. _ref_flyteidl.admin.TaskCreateResponse: -TaskExecutionGetRequest +TaskCreateResponse ------------------------------------------------------------------ -A message used to fetch a single task execution entity. -See :ref:`ref_flyteidl.admin.TaskExecution` for more details - - +Represents a response structure if task creation succeeds. -.. csv-table:: TaskExecutionGetRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto +Purposefully empty, may be populated in the future. - "id", ":ref:`ref_flyteidl.core.TaskExecutionIdentifier`", "", "Unique identifier for the task execution. +required" @@ -2991,21 +2996,21 @@ See :ref:`ref_flyteidl.admin.TaskExecution` for more details -.. _ref_flyteidl.admin.TaskExecutionList: +.. _ref_flyteidl.admin.TaskList: -TaskExecutionList +TaskList ------------------------------------------------------------------ -Response structure for a query to list of task execution entities. -See :ref:`ref_flyteidl.admin.TaskExecution` for more details +Represents a list of tasks returned from the admin. +See :ref:`ref_flyteidl.admin.Task` for more details -.. csv-table:: TaskExecutionList type fields +.. csv-table:: TaskList type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "task_executions", ":ref:`ref_flyteidl.admin.TaskExecution`", "repeated", "" + "tasks", ":ref:`ref_flyteidl.admin.Task`", "repeated", "A list of tasks returned based on the request." "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. If there are no more results, this value will be empty." @@ -3014,25 +3019,20 @@ See :ref:`ref_flyteidl.admin.TaskExecution` for more details -.. _ref_flyteidl.admin.TaskExecutionListRequest: +.. _ref_flyteidl.admin.TaskSpec: -TaskExecutionListRequest +TaskSpec ------------------------------------------------------------------ -Represents a request structure to retrieve a list of task execution entities yielded by a specific node execution. -See :ref:`ref_flyteidl.admin.TaskExecution` for more details +Represents a structure that encapsulates the user-configured specification of the task. -.. csv-table:: TaskExecutionListRequest type fields +.. csv-table:: TaskSpec type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "node_execution_id", ":ref:`ref_flyteidl.core.NodeExecutionIdentifier`", "", "Indicates the node execution to filter by. +required" - "limit", ":ref:`ref_uint32`", "", "Indicates the number of resources to be returned. +required" - "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. +optional" - "filters", ":ref:`ref_string`", "", "Indicates a list of filters passed as string. More info on constructing filters : +optional" - "sort_by", ":ref:`ref_flyteidl.admin.Sort`", "", "Sort ordering for returned list. +optional" + "template", ":ref:`ref_flyteidl.core.TaskTemplate`", "", "Template of the task that encapsulates all the metadata of the task." @@ -3125,32 +3125,33 @@ Provides Version information for a component -.. _ref_flyteidl/admin/workflow.proto: +.. _ref_flyteidl/admin/workflow_attributes.proto: -flyteidl/admin/workflow.proto +flyteidl/admin/workflow_attributes.proto ================================================================== -.. _ref_flyteidl.admin.Workflow: +.. _ref_flyteidl.admin.WorkflowAttributes: -Workflow +WorkflowAttributes ------------------------------------------------------------------ -Represents the workflow structure stored in the Admin -A workflow is created by ordering tasks and associating outputs to inputs -in order to produce a directed-acyclic execution graph. +Defines a set of custom matching attributes which defines resource defaults for a project, domain and workflow. +For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` -.. csv-table:: Workflow type fields +.. csv-table:: WorkflowAttributes type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "id", ":ref:`ref_flyteidl.core.Identifier`", "", "id represents the unique identifier of the workflow." - "closure", ":ref:`ref_flyteidl.admin.WorkflowClosure`", "", "closure encapsulates all the fields that maps to a compiled version of the workflow." + "project", ":ref:`ref_string`", "", "Unique project id for which this set of attributes will be applied." + "domain", ":ref:`ref_string`", "", "Unique domain id for which this set of attributes will be applied." + "workflow", ":ref:`ref_string`", "", "Workflow name for which this set of attributes will be applied." + "matching_attributes", ":ref:`ref_flyteidl.admin.MatchingAttributes`", "", "" @@ -3158,21 +3159,24 @@ in order to produce a directed-acyclic execution graph. -.. _ref_flyteidl.admin.WorkflowClosure: +.. _ref_flyteidl.admin.WorkflowAttributesDeleteRequest: -WorkflowClosure +WorkflowAttributesDeleteRequest ------------------------------------------------------------------ -A container holding the compiled workflow produced from the WorkflowSpec and additional metadata. +Request to delete a set matchable workflow attribute override. +For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` -.. csv-table:: WorkflowClosure type fields +.. csv-table:: WorkflowAttributesDeleteRequest type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "compiled_workflow", ":ref:`ref_flyteidl.core.CompiledWorkflowClosure`", "", "Represents the compiled representation of the workflow from the specification provided." - "created_at", ":ref:`ref_google.protobuf.Timestamp`", "", "Time at which the workflow was created." + "project", ":ref:`ref_string`", "", "Unique project id which this set of attributes references. +required" + "domain", ":ref:`ref_string`", "", "Unique domain id which this set of attributes references. +required" + "workflow", ":ref:`ref_string`", "", "Workflow name which this set of attributes references. +required" + "resource_type", ":ref:`ref_flyteidl.admin.MatchableResource`", "", "Which type of matchable attributes to delete. +required" @@ -3180,36 +3184,38 @@ A container holding the compiled workflow produced from the WorkflowSpec and add -.. _ref_flyteidl.admin.WorkflowCreateRequest: +.. _ref_flyteidl.admin.WorkflowAttributesDeleteResponse: -WorkflowCreateRequest +WorkflowAttributesDeleteResponse ------------------------------------------------------------------ -Represents a request structure to create a revision of a workflow. -See :ref:`ref_flyteidl.admin.Workflow` for more details +Purposefully empty, may be populated in the future. -.. csv-table:: WorkflowCreateRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - "id", ":ref:`ref_flyteidl.core.Identifier`", "", "id represents the unique identifier of the workflow. +required" - "spec", ":ref:`ref_flyteidl.admin.WorkflowSpec`", "", "Represents the specification for workflow. +required" +.. _ref_flyteidl.admin.WorkflowAttributesGetRequest: +WorkflowAttributesGetRequest +------------------------------------------------------------------ +Request to get an individual workflow attribute override. +For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` -.. _ref_flyteidl.admin.WorkflowCreateResponse: -WorkflowCreateResponse ------------------------------------------------------------------- -Purposefully empty, may be populated in the future. +.. csv-table:: WorkflowAttributesGetRequest type fields + :header: "Field", "Type", "Label", "Description" + :widths: auto + "project", ":ref:`ref_string`", "", "Unique project id which this set of attributes references. +required" + "domain", ":ref:`ref_string`", "", "Unique domain id which this set of attributes references. +required" + "workflow", ":ref:`ref_string`", "", "Workflow name which this set of attributes references. +required" + "resource_type", ":ref:`ref_flyteidl.admin.MatchableResource`", "", "Which type of matchable attributes to return. +required" @@ -3217,22 +3223,20 @@ Purposefully empty, may be populated in the future. -.. _ref_flyteidl.admin.WorkflowList: +.. _ref_flyteidl.admin.WorkflowAttributesGetResponse: -WorkflowList +WorkflowAttributesGetResponse ------------------------------------------------------------------ -Represents a list of workflows returned from the admin. -See :ref:`ref_flyteidl.admin.Workflow` for more details +Response to get an individual workflow attribute override. -.. csv-table:: WorkflowList type fields +.. csv-table:: WorkflowAttributesGetResponse type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "workflows", ":ref:`ref_flyteidl.admin.Workflow`", "repeated", "A list of workflows returned based on the request." - "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. If there are no more results, this value will be empty." + "attributes", ":ref:`ref_flyteidl.admin.WorkflowAttributes`", "", "" @@ -3240,21 +3244,35 @@ See :ref:`ref_flyteidl.admin.Workflow` for more details -.. _ref_flyteidl.admin.WorkflowSpec: +.. _ref_flyteidl.admin.WorkflowAttributesUpdateRequest: -WorkflowSpec +WorkflowAttributesUpdateRequest ------------------------------------------------------------------ -Represents a structure that encapsulates the specification of the workflow. +Sets custom attributes for a project, domain and workflow combination. +For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` -.. csv-table:: WorkflowSpec type fields +.. csv-table:: WorkflowAttributesUpdateRequest type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "template", ":ref:`ref_flyteidl.core.WorkflowTemplate`", "", "Template of the task that encapsulates all the metadata of the workflow." - "sub_workflows", ":ref:`ref_flyteidl.core.WorkflowTemplate`", "repeated", "Workflows that are embedded into other workflows need to be passed alongside the parent workflow to the propeller compiler (since the compiler doesn't have any knowledge of other workflows - ie, it doesn't reach out to Admin to see other registered workflows). In fact, subworkflows do not even need to be registered." + "attributes", ":ref:`ref_flyteidl.admin.WorkflowAttributes`", "", "" + + + + + + + +.. _ref_flyteidl.admin.WorkflowAttributesUpdateResponse: + +WorkflowAttributesUpdateResponse +------------------------------------------------------------------ + +Purposefully empty, may be populated in the future. + @@ -3271,33 +3289,32 @@ Represents a structure that encapsulates the specification of the workflow. -.. _ref_flyteidl/admin/workflow_attributes.proto: +.. _ref_flyteidl/admin/workflow.proto: -flyteidl/admin/workflow_attributes.proto +flyteidl/admin/workflow.proto ================================================================== -.. _ref_flyteidl.admin.WorkflowAttributes: +.. _ref_flyteidl.admin.Workflow: -WorkflowAttributes +Workflow ------------------------------------------------------------------ -Defines a set of custom matching attributes which defines resource defaults for a project, domain and workflow. -For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` +Represents the workflow structure stored in the Admin +A workflow is created by ordering tasks and associating outputs to inputs +in order to produce a directed-acyclic execution graph. -.. csv-table:: WorkflowAttributes type fields +.. csv-table:: Workflow type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "project", ":ref:`ref_string`", "", "Unique project id for which this set of attributes will be applied." - "domain", ":ref:`ref_string`", "", "Unique domain id for which this set of attributes will be applied." - "workflow", ":ref:`ref_string`", "", "Workflow name for which this set of attributes will be applied." - "matching_attributes", ":ref:`ref_flyteidl.admin.MatchingAttributes`", "", "" + "id", ":ref:`ref_flyteidl.core.Identifier`", "", "id represents the unique identifier of the workflow." + "closure", ":ref:`ref_flyteidl.admin.WorkflowClosure`", "", "closure encapsulates all the fields that maps to a compiled version of the workflow." @@ -3305,24 +3322,21 @@ For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAtt -.. _ref_flyteidl.admin.WorkflowAttributesDeleteRequest: +.. _ref_flyteidl.admin.WorkflowClosure: -WorkflowAttributesDeleteRequest +WorkflowClosure ------------------------------------------------------------------ -Request to delete a set matchable workflow attribute override. -For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` +A container holding the compiled workflow produced from the WorkflowSpec and additional metadata. -.. csv-table:: WorkflowAttributesDeleteRequest type fields +.. csv-table:: WorkflowClosure type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "project", ":ref:`ref_string`", "", "Unique project id which this set of attributes references. +required" - "domain", ":ref:`ref_string`", "", "Unique domain id which this set of attributes references. +required" - "workflow", ":ref:`ref_string`", "", "Workflow name which this set of attributes references. +required" - "resource_type", ":ref:`ref_flyteidl.admin.MatchableResource`", "", "Which type of matchable attributes to delete. +required" + "compiled_workflow", ":ref:`ref_flyteidl.core.CompiledWorkflowClosure`", "", "Represents the compiled representation of the workflow from the specification provided." + "created_at", ":ref:`ref_google.protobuf.Timestamp`", "", "Time at which the workflow was created." @@ -3330,38 +3344,36 @@ For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAtt -.. _ref_flyteidl.admin.WorkflowAttributesDeleteResponse: +.. _ref_flyteidl.admin.WorkflowCreateRequest: -WorkflowAttributesDeleteResponse +WorkflowCreateRequest ------------------------------------------------------------------ -Purposefully empty, may be populated in the future. +Represents a request structure to create a revision of a workflow. +See :ref:`ref_flyteidl.admin.Workflow` for more details +.. csv-table:: WorkflowCreateRequest type fields + :header: "Field", "Type", "Label", "Description" + :widths: auto + "id", ":ref:`ref_flyteidl.core.Identifier`", "", "id represents the unique identifier of the workflow. +required" + "spec", ":ref:`ref_flyteidl.admin.WorkflowSpec`", "", "Represents the specification for workflow. +required" -.. _ref_flyteidl.admin.WorkflowAttributesGetRequest: -WorkflowAttributesGetRequest ------------------------------------------------------------------- -Request to get an individual workflow attribute override. -For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` +.. _ref_flyteidl.admin.WorkflowCreateResponse: +WorkflowCreateResponse +------------------------------------------------------------------ -.. csv-table:: WorkflowAttributesGetRequest type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto +Purposefully empty, may be populated in the future. - "project", ":ref:`ref_string`", "", "Unique project id which this set of attributes references. +required" - "domain", ":ref:`ref_string`", "", "Unique domain id which this set of attributes references. +required" - "workflow", ":ref:`ref_string`", "", "Workflow name which this set of attributes references. +required" - "resource_type", ":ref:`ref_flyteidl.admin.MatchableResource`", "", "Which type of matchable attributes to return. +required" @@ -3369,20 +3381,22 @@ For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAtt -.. _ref_flyteidl.admin.WorkflowAttributesGetResponse: +.. _ref_flyteidl.admin.WorkflowList: -WorkflowAttributesGetResponse +WorkflowList ------------------------------------------------------------------ -Response to get an individual workflow attribute override. +Represents a list of workflows returned from the admin. +See :ref:`ref_flyteidl.admin.Workflow` for more details -.. csv-table:: WorkflowAttributesGetResponse type fields +.. csv-table:: WorkflowList type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "attributes", ":ref:`ref_flyteidl.admin.WorkflowAttributes`", "", "" + "workflows", ":ref:`ref_flyteidl.admin.Workflow`", "repeated", "A list of workflows returned based on the request." + "token", ":ref:`ref_string`", "", "In the case of multiple pages of results, the server-provided token can be used to fetch the next page in a query. If there are no more results, this value will be empty." @@ -3390,35 +3404,21 @@ Response to get an individual workflow attribute override. -.. _ref_flyteidl.admin.WorkflowAttributesUpdateRequest: +.. _ref_flyteidl.admin.WorkflowSpec: -WorkflowAttributesUpdateRequest +WorkflowSpec ------------------------------------------------------------------ -Sets custom attributes for a project, domain and workflow combination. -For more info on matchable attributes, see :ref:`ref_flyteidl.admin.MatchableAttributesConfiguration` +Represents a structure that encapsulates the specification of the workflow. -.. csv-table:: WorkflowAttributesUpdateRequest type fields +.. csv-table:: WorkflowSpec type fields :header: "Field", "Type", "Label", "Description" :widths: auto - "attributes", ":ref:`ref_flyteidl.admin.WorkflowAttributes`", "", "" - - - - - - - -.. _ref_flyteidl.admin.WorkflowAttributesUpdateResponse: - -WorkflowAttributesUpdateResponse ------------------------------------------------------------------- - -Purposefully empty, may be populated in the future. - + "template", ":ref:`ref_flyteidl.core.WorkflowTemplate`", "", "Template of the task that encapsulates all the metadata of the workflow." + "sub_workflows", ":ref:`ref_flyteidl.core.WorkflowTemplate`", "repeated", "Workflows that are embedded into other workflows need to be passed alongside the parent workflow to the propeller compiler (since the compiler doesn't have any knowledge of other workflows - ie, it doesn't reach out to Admin to see other registered workflows). In fact, subworkflows do not even need to be registered." diff --git a/flyteidl/protos/docs/core/core.rst b/flyteidl/protos/docs/core/core.rst index fda32c3f760..ded2448eb1f 100644 --- a/flyteidl/protos/docs/core/core.rst +++ b/flyteidl/protos/docs/core/core.rst @@ -1965,6 +1965,28 @@ Runtime information. This is loosely defined to allow for extensibility. +.. _ref_flyteidl.core.Sql: + +Sql +------------------------------------------------------------------ + +Sql represents a generic sql workload with a statement and dialect. + + + +.. csv-table:: Sql type fields + :header: "Field", "Type", "Label", "Description" + :widths: auto + + "statement", ":ref:`ref_string`", "", "The actual query to run, the query can have templated parameters. We use Flyte's Golang templating format for Query templating. Refer to the templating documentation. https://docs.flyte.org/projects/cookbook/en/latest/auto/integrations/external_services/hive/hive.html#sphx-glr-auto-integrations-external-services-hive-hive-py For example, insert overwrite directory '{{ .rawOutputDataPrefix }}' stored as parquet select * from my_table where ds = '{{ .Inputs.ds }}'" + "dialect", ":ref:`ref_flyteidl.core.Sql.Dialect`", "", "" + + + + + + + .. _ref_flyteidl.core.TaskMetadata: TaskMetadata @@ -2013,6 +2035,7 @@ Tasks are registered as a first step in the system. "custom", ":ref:`ref_google.protobuf.Struct`", "", "Custom data about the task. This is extensible to allow various plugins in the system." "container", ":ref:`ref_flyteidl.core.Container`", "", "" "k8s_pod", ":ref:`ref_flyteidl.core.K8sPod`", "", "" + "sql", ":ref:`ref_flyteidl.core.Sql`", "", "" "task_type_version", ":ref:`ref_int32`", "", "This can be used to customize task handling at execution time for the same task type." "security_context", ":ref:`ref_flyteidl.core.SecurityContext`", "", "security_context encapsulates security attributes requested to run this task." "config", ":ref:`ref_flyteidl.core.TaskTemplate.ConfigEntry`", "repeated", "Metadata about the custom defined for this task. This is extensible to allow various plugins in the system to use as required. reserve the field numbers 1 through 15 for very frequently occurring message elements" @@ -2135,6 +2158,26 @@ RuntimeMetadata.RuntimeType "OTHER", "0", "" "FLYTE_SDK", "1", "" + + +.. _ref_flyteidl.core.Sql.Dialect: + +Sql.Dialect +------------------------------------------------------------------ + +The dialect of the SQL statement. This is used to validate and parse SQL statements at compilation time to avoid +expensive runtime operations. If set to an unsupported dialect, no validation will be done on the statement. +We support the following dialect: ansi, hive. + +.. csv-table:: Enum Sql.Dialect values + :header: "Name", "Number", "Description" + :widths: auto + + "UNDEFINED", "0", "" + "ANSI", "1", "" + "HIVE", "2", "" + "OTHER", "3", "" + @@ -2382,6 +2425,46 @@ Define a set of simple types. +.. _ref_flyteidl/core/workflow_closure.proto: + +flyteidl/core/workflow_closure.proto +================================================================== + + + + + +.. _ref_flyteidl.core.WorkflowClosure: + +WorkflowClosure +------------------------------------------------------------------ + +Defines an enclosed package of workflow and tasks it references. + + + +.. csv-table:: WorkflowClosure type fields + :header: "Field", "Type", "Label", "Description" + :widths: auto + + "workflow", ":ref:`ref_flyteidl.core.WorkflowTemplate`", "", "required. Workflow template." + "tasks", ":ref:`ref_flyteidl.core.TaskTemplate`", "repeated", "optional. A collection of tasks referenced by the workflow. Only needed if the workflow references tasks." + + + + + + + + + + + + + + + + .. _ref_flyteidl/core/workflow.proto: flyteidl/core/workflow.proto @@ -2702,46 +2785,6 @@ Failure Handling Strategy -.. _ref_flyteidl/core/workflow_closure.proto: - -flyteidl/core/workflow_closure.proto -================================================================== - - - - - -.. _ref_flyteidl.core.WorkflowClosure: - -WorkflowClosure ------------------------------------------------------------------- - -Defines an enclosed package of workflow and tasks it references. - - - -.. csv-table:: WorkflowClosure type fields - :header: "Field", "Type", "Label", "Description" - :widths: auto - - "workflow", ":ref:`ref_flyteidl.core.WorkflowTemplate`", "", "required. Workflow template." - "tasks", ":ref:`ref_flyteidl.core.TaskTemplate`", "repeated", "optional. A collection of tasks referenced by the workflow. Only needed if the workflow references tasks." - - - - - - - - - - - - - - - - .. _ref_google/protobuf/timestamp.proto: google/protobuf/timestamp.proto diff --git a/flyteidl/protos/flyteidl/core/tasks.proto b/flyteidl/protos/flyteidl/core/tasks.proto index 56cdc7ed040..0d3d993629a 100644 --- a/flyteidl/protos/flyteidl/core/tasks.proto +++ b/flyteidl/protos/flyteidl/core/tasks.proto @@ -121,6 +121,7 @@ message TaskTemplate { oneof target { Container container = 6; K8sPod k8s_pod = 17; + Sql sql = 18; } // This can be used to customize task handling at execution time for the same task type. @@ -263,3 +264,27 @@ message K8sObjectMetadata { // Optional annotations to add to the pod definition. map annotations = 2; } + +// Sql represents a generic sql workload with a statement and dialect. +message Sql { + // The actual query to run, the query can have templated parameters. + // We use Flyte's Golang templating format for Query templating. + // Refer to the templating documentation. + // https://docs.flyte.org/projects/cookbook/en/latest/auto/integrations/external_services/hive/hive.html#sphx-glr-auto-integrations-external-services-hive-hive-py + // For example, + // insert overwrite directory '{{ .rawOutputDataPrefix }}' stored as parquet + // select * + // from my_table + // where ds = '{{ .Inputs.ds }}' + string statement = 1; + // The dialect of the SQL statement. This is used to validate and parse SQL statements at compilation time to avoid + // expensive runtime operations. If set to an unsupported dialect, no validation will be done on the statement. + // We support the following dialect: ansi, hive. + enum Dialect { + UNDEFINED = 0; + ANSI = 1; + HIVE = 2; + OTHER = 3; + } + Dialect dialect = 2; +}